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

Release-1.1.2-20000423

parent 37905e0a
DOXYGEN Version 1.1.2-20000417
DOXYGEN Version 1.1.2-20000423
CONTENTS
--------
......@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have:
gunzip doxygen-1.1.2-20000417.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.2-20000417.src.tar # unpack it
gunzip doxygen-1.1.2-20000423.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.2-20000423.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 (17 April 2000)
Dimitri van Heesch (23 April 2000)
all: src/version.cpp
all: src/version.cpp configgen doxywizard
cd src ; $(MAKE)
clean: FORCE
cd examples ; $(MAKE) clean
cd doc ; $(MAKE) clean
cd src ; $(MAKE) clean
cd addon/configgen ; $(MAKE) clean
cd addon/doxywizard ; $(MAKE) clean
-rm -f bin/doxy*
-rm -f objects/*.o
......@@ -13,18 +15,25 @@ distclean: clean
cd examples ; $(MAKE) clean
cd doc ; $(MAKE) clean
cd src ; $(MAKE) distclean
cd addon/configgen ; $(MAKE) distclean
cd addon/doxywizard ; $(MAKE) distclean
-rm -f bin/doxy*
-rm -f html
-rm -f objects/*.o
-rm -f src/Makefile.doxygen \
src/Makefile.doxytag \
src/Makefile.doxysearch
-rm -f src/Makefile.doxygen src/Makefile.doxytag src/Makefile.doxysearch
-rm -f Makefile src/Makefile examples/Makefile doc/Makefile
-rm -f .makeconfig .tmakeconfig
-rm -f src/doxygen.pro src/doxytag.pro src/doxysearch.pro
-rm -f src/version.cpp
-rm -r addon/configgen/Makefile addon/doxywizard/Makefile
-rm -f addon/configgen/Makefile.configgen
-rm -f addon/doxywizard/Makefile.doxywizard
-rm -f addon/configgen/configgen.pro addon/doxywizard/doxywizard.pro
-rm -f addon/configgen/obj/*.o
-rm -f addon/doxywizard/obj/*.o
-rm -f addon/doxywizard/moc/moc_*
install:
install: doxywizard_install
$(INSTTOOL) -d $(INSTALL)/bin
$(INSTTOOL) -d $(INSTALL)/doc/doxygen
$(INSTTOOL) -d $(INSTALL)/doc/doxygen
......@@ -52,7 +61,7 @@ pdf: docs
cd latex ; $(MAKE)
archive: clean
tar zcvf dx`date +%y%m%d`.tgz tmake doc wintools examples bin objects \
tar zcvf dx`date +%y%m%d`.tgz addon tmake doc wintools examples bin objects \
src configure configure.bin Makefile.in Makefile.win.in INSTALL \
make.bat LANGUAGE.HOWTO LICENSE PLATFORMS VERSION packages
......@@ -60,3 +69,4 @@ src/version.cpp: Makefile
echo "char versionString[]=\"$(VERSION)\";" > src/version.cpp
FORCE:
DOXYGEN Version 1.1.2-20000417
DOXYGEN Version 1.1.2-20000423
Please read INSTALL for compilation instructions.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (17 April 2000)
Dimitri van Heesch (23 April 2000)
1.1.2-20000417
1.1.2-20000423
#
#
#
# Copyright (C) 1997-2000 by Dimitri van Heesch.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby
# granted. No representations are made about the suitability of this software
# for any purpose. It is provided "as is" without express or implied warranty.
# See the GNU General Public License for more details.
#
CFGGEN_DIR = bin
all: Makefile.configgen config.h config.l
$(MAKE) -f Makefile.configgen $@
Makefile.configgen: configgen.pro
$(PERL) $(TMAKE) configgen.pro >Makefile.configgen
config.h: $(CFGGEN_DIR)/configgen config_templ.h
$(CFGGEN_DIR)/configgen config_templ.h >config.h
config.l: $(CFGGEN_DIR)/configgen config_templ.l
$(CFGGEN_DIR)/configgen config_templ.l >config.l
$(CFGGEN_DIR)/configgen: Makefile.configgen configgen.cpp
$(MAKE) -f Makefile.configgen
tmake:
$(PERL) $(TMAKE) configgen.pro >Makefile.configgen
install:
$(CP) config.l config.h ../../src
clean: Makefile.configgen
$(MAKE) -f Makefile.configgen clean
distclean: clean
$(RM) config.cpp config.h config.l Makefile.configgen
FORCE:
/******************************************************************************
*
* $Id$
*
* Copyright (C) 1997-2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#ifndef CONFIG_H
#define CONFIG_H
#ifndef DOXYWIZARD
#include "qtbc.h"
#endif
#include <qstrlist.h>
#include <qfile.h>
extern void parseConfig(const QCString &config);
extern void writeTemplateConfig(QFile *f,bool shortList);
extern void checkConfig();
extern void configStrToVal();
extern void substituteEnvironmentVars();
struct Config
{
static void init();
#CONFIG Header
};
#endif
/******************************************************************************
*
* $Id$
*
* Copyright (C) 1997-2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
%{
/*
* includes
*/
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <assert.h>
#include <ctype.h>
#include <qfileinfo.h>
#include <qdir.h>
#include <qtextstream.h>
#include <qregexp.h>
#include "config.h"
#include "version.h"
#ifdef DOXYWIZARD
#include <stdarg.h>
void err(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
vfprintf(stderr, fmt, args);
va_end(args);
}
void warn(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
vfprintf(stderr, fmt, args);
va_end(args);
}
#else
#include "doxygen.h"
#include "message.h"
#include "pre.h"
#include "version.h"
#include "language.h"
#endif
#define YY_NEVER_INTERACTIVE 1
#define YY_NO_UNPUT
/* -----------------------------------------------------------------
*
* exported variables
*/
#CONFIG Config
/* -----------------------------------------------------------------
*
* static variables
*/
static const char * inputString;
static int inputPosition;
static int yyLineNr;
static QCString tmpString;
static QCString * s=0;
static bool * b=0;
static QStrList * l=0;
static int lastState;
static QCString elemStr;
//static QCString tabSizeString;
//static QCString colsInAlphaIndexString;
#CONFIG Static
/* -----------------------------------------------------------------
*/
#undef YY_INPUT
#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
static int yyread(char *buf,int max_size)
{
int c=0;
while( c < max_size && inputString[inputPosition] )
{
*buf = inputString[inputPosition++] ;
c++; buf++;
}
return c;
}
%}
%option noyywrap
%x Start
%x SkipComment
%x GetString
%x GetBool
%x GetStrList
%x GetQuotedString
%x GetEnvVar
%%
<*>\0x0d
<Start,GetString,GetStrList,GetBool>"#" { BEGIN(SkipComment); }
#CONFIG Rules
<Start>[a-z_A-Z0-9]+ { err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); }
<GetString,GetBool>\n { yyLineNr++; BEGIN(Start); }
<GetStrList>\n {
yyLineNr++;
if (!elemStr.isEmpty())
{
//printf("elemStr1=`%s'\n",elemStr.data());
l->append(elemStr);
}
BEGIN(Start);
}
<GetStrList>[ \t]+ {
if (!elemStr.isEmpty())
{
//printf("elemStr2=`%s'\n",elemStr.data());
l->append(elemStr);
}
elemStr.resize(0);
}
<GetString>[^ \"\t\r\n]+ { (*s)+=yytext; }
<GetString,GetStrList>"\"" { lastState=YY_START;
BEGIN(GetQuotedString);
tmpString.resize(0);
}
/*
<GetString,GetStrList,GetQuotedString>"\$\(" {
//printf(">> Enter env\n");
lastEnvState=YY_START;
BEGIN(GetEnvVar);
}
<GetEnvVar>[a-z_A-Z0-9]+")" {
yytext[yyleng-1]='\0';
const char *env=getenv(yytext);
int i;
int l=strlen(env);
//printf("env name=`%s' text=`%s'\n",yytext,env);
for (i=l-1;i>=0;i--) unput(env[i]);
BEGIN(lastEnvState);
}
*/
<GetQuotedString>"\""|"\n" {
//printf("Quoted String = `%s'\n",tmpString.data());
if (lastState==GetString)
(*s)+=tmpString;
else
elemStr+=tmpString;
if (*yytext=='\n')
{
err("Warning: Missing end quote (\") on line %d\n",yyLineNr);
yyLineNr++;
}
BEGIN(lastState);
}
<GetQuotedString>"\\\"" {
tmpString+='"';
}
<GetQuotedString>. { tmpString+=*yytext; }
<GetBool>[a-zA-Z]+ {
QCString bs=yytext;
bs=bs.upper();
if (bs=="YES")
*b=TRUE;
else if (bs=="NO")
*b=FALSE;
else
{
*b=FALSE;
warn("Warning: Invalid value `%s' for "
"boolean tag in line %d; use YES or NO\n",
bs.data(),yyLineNr);
}
}
<GetStrList>[^ \#\"\t\r\n]+ {
elemStr+=yytext;
}
<SkipComment>\n { yyLineNr++; BEGIN(Start); }
<SkipComment>\\[ \r\t]*\n { yyLineNr++; BEGIN(Start); }
<*>\\[ \r\t]*\n { yyLineNr++; }
<*>.
<*>\n { yyLineNr++ ; }
%%
/*@ ----------------------------------------------------------------------------
*/
void dumpConfig()
{
#CONFIG Dump
}
void Config::init()
{
#CONFIG Init
}
static void writeBoolValue(QTextStream &t,bool v)
{
if (v) t << "YES"; else t << "NO";
}
static void writeIntValue(QTextStream &t,int i)
{
t << i;
}
static void writeStringValue(QTextStream &t,QCString &s)
{
const char *p=s.data();
char c;
bool hasBlanks=FALSE;
if (p)
{
while ((c=*p++)!=0 && !hasBlanks) hasBlanks = (c==' ' || c=='\n' || c=='\t');
if (hasBlanks)
t << "\"" << s << "\"";
else
t << s;
}
}
static void writeStringList(QTextStream &t,QStrList &l)
{
const char *p = l.first();
bool first=TRUE;
while (p)
{
char c;
const char *s=p;
bool hasBlanks=FALSE;
while ((c=*p++)!=0 && !hasBlanks) hasBlanks = (c==' ' || c=='\n' || c=='\t');
if (!first) t << " ";
first=FALSE;
if (hasBlanks) t << "\"" << s << "\""; else t << s;
p = l.next();
if (p) t << " \\" << endl;
}
}
void writeTemplateConfig(QFile *f,bool sl)
{
QTextStream t(f);
#ifdef DOXYWIZARD
t << "# Doxygen configuration generated by Doxywizard version " << versionString << endl;
#else
t << "# Doxyfile " << versionString << endl << endl;
#endif
if (!sl)
{
t << "# This file describes the settings to be used by doxygen for a project\n";
t << "#\n";
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 << "# Values that contain spaces should be placed between quotes (\" \")\n";
}
#CONFIG Template
}
void configStrToVal()
{
if (tabSizeString.isEmpty())
{
Config::tabSize=8;
}
else
{
bool ok;
int ts = tabSizeString.toInt(&ok);
if (!ok || ts<1 || ts>16)
{
warn("Warning: argument of TAB_SIZE is not a valid number, using tab size of 8 spaces!\n");
ts=8;
}
Config::tabSize = ts;
}
if (colsInAlphaIndexString.isEmpty())
{
Config::colsInAlphaIndex=5;
}
else
{
bool ok;
int cols = colsInAlphaIndexString.toInt(&ok);
if (!ok || cols<1 || cols>20)
{
warn("Warning: argument of COLS_IN_ALPHA_INDEX is not a valid number in the range [1..20]!\n"
"Using the default of 5 columns!\n");
cols = 5;
}
Config::colsInAlphaIndex=cols;
}
}
static void substEnvVarsInString(QCString &s)
{
QRegExp re("\\$([a-z_A-Z0-9]+)");
int p=0;
int i,l;
//printf("substEnvVarInString(%s) start\n",s.data());
while ((i=re.match(s,p,&l))!=-1)
{
//printf("Found environment var s.mid(%d,%d)=`%s'\n",i+2,l-3,s.mid(i+2,l-3).data());
QCString env=getenv(s.mid(i+2,l-3));
substEnvVarsInString(env); // recursively expand variables if needed.
s = s.left(i)+env+s.right(s.length()-i-l);
p=i+l;
}
//printf("substEnvVarInString(%s) end\n",s.data());
}
static void substEnvVarsInStrList(QStrList &sl)
{
char *s = sl.first();
while (s)
{
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.mid(p,i-p)); // insert new item before current item.
sl.next(); // current item is now the old item
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();
else // just removed last item
s = 0;
}
}
void substituteEnvironmentVars()
{
#CONFIG Substenv
}
void checkConfig()
{
//if (!projectName.isEmpty())
//{
// projectName[0]=toupper(projectName[0]);
//}
// set default man page extension if non is given by the user
if (Config::manExtension.isEmpty())
{
Config::manExtension=".3";
}
Config::paperType = Config::paperType.lower().stripWhiteSpace();
if (Config::paperType.isEmpty())
{
Config::paperType = "a4wide";
}
if (Config::paperType!="a4" && Config::paperType!="a4wide" && Config::paperType!="letter" &&
Config::paperType!="legal" && Config::paperType!="executive")
{
err("Error: Unknown page type specified");
}
Config::outputLanguage=Config::outputLanguage.stripWhiteSpace();
if (Config::outputLanguage.isEmpty())
{
Config::outputLanguage = "English";
#ifndef DOXYWIZARD
setTranslator("English");
#endif
}
else
{
#ifndef DOXYWIZARD
if (!setTranslator(Config::outputLanguage))
{
err("Error: Output language %s not supported! Using English instead.\n",
Config::outputLanguage.data());
}
#endif
}
// Test to see if output directory is valid
if (Config::outputDir.isEmpty())
Config::outputDir=QDir::currentDirPath();
else
{
QDir dir(Config::outputDir);
if (!dir.exists())
{
dir.setPath(QDir::currentDirPath());
if (!dir.mkdir(Config::outputDir))
{
err("Error: tag OUTPUT_DIRECTORY: Output directory `%s' does not "
"exist and cannot be created\n",Config::outputDir.data());
exit(1);
}
else if (!Config::quietFlag)
{
err("Notice: Output directory `%s' does not exist. "
"I have created it for you.\n", Config::outputDir.data());
}
dir.cd(Config::outputDir);
}
Config::outputDir=dir.absPath();
}
if (Config::htmlOutputDir.isEmpty() && Config::generateHtml)
{
Config::htmlOutputDir=Config::outputDir+"/html";
}
else if (Config::htmlOutputDir && Config::htmlOutputDir[0]!='/')
{
Config::htmlOutputDir.prepend(Config::outputDir+'/');
}
QDir htmlDir(Config::htmlOutputDir);
if (Config::generateHtml && !htmlDir.exists() &&
!htmlDir.mkdir(Config::htmlOutputDir))
{
err("Could not create output directory %s\n",Config::htmlOutputDir.data());
exit(1);
}
if (Config::latexOutputDir.isEmpty() && Config::generateLatex)
{
Config::latexOutputDir=Config::outputDir+"/latex";
}
else if (Config::latexOutputDir && Config::latexOutputDir[0]!='/')
{
Config::latexOutputDir.prepend(Config::outputDir+'/');
}
QDir latexDir(Config::latexOutputDir);
if (Config::generateLatex && !latexDir.exists() &&
!latexDir.mkdir(Config::latexOutputDir))
{
err("Could not create output directory %s\n",Config::latexOutputDir.data());
exit(1);
}
if (Config::rtfOutputDir.isEmpty() && Config::generateRTF)
{
Config::rtfOutputDir=Config::outputDir+"/rtf";
}
else if (Config::rtfOutputDir && Config::rtfOutputDir[0]!='/')
{
Config::rtfOutputDir.prepend(Config::outputDir+'/');
}
QDir rtfDir(Config::rtfOutputDir);
if (Config::generateRTF && !rtfDir.exists() &&
!rtfDir.mkdir(Config::rtfOutputDir))
{
err("Could not create output directory %s\n",Config::rtfOutputDir.data());
exit(1);
}
if (Config::manOutputDir.isEmpty() && Config::generateMan)
{
Config::manOutputDir=Config::outputDir+"/man";
}
else if (Config::manOutputDir && Config::manOutputDir[0]!='/')
{
Config::manOutputDir.prepend(Config::outputDir+'/');
}
QDir manDir(Config::manOutputDir);
if (Config::generateMan && !manDir.exists() &&
!manDir.mkdir(Config::manOutputDir))
{
err("Could not create output directory %s\n",Config::manOutputDir.data());
exit(1);
}
// Test to see if HTML header is valid
if (!Config::headerFile.isEmpty())
{
QFileInfo fi(Config::headerFile);
if (!fi.exists())
{
err("Error: tag HTML_HEADER: header file `%s' "
"does not exist\n",Config::headerFile.data());
exit(1);
}
}
// Test to see if HTML footer is valid
if (!Config::footerFile.isEmpty())
{
QFileInfo fi(Config::footerFile);
if (!fi.exists())
{
err("Error: tag HTML_FOOTER: footer file `%s' "
"does not exist\n",Config::footerFile.data());
exit(1);
}
}
// Test to see if LaTeX header is valid
if (!Config::latexHeaderFile.isEmpty())
{
QFileInfo fi(Config::latexHeaderFile);
if (!fi.exists())
{
err("Error: tag LATEX_HEADER: header file `%s' "
"does not exist\n",Config::latexHeaderFile.data());
exit(1);
}
}
// check include path
char *s=Config::includePath.first();
while (s)
{
QFileInfo fi(s);
if (!fi.exists()) err("Warning: tag INCLUDE_PATH: include path `%s' "
"does not exist\n",s);
#ifndef DOXYWIZARD
addSearchDir(fi.absFilePath());
#endif
s=Config::includePath.next();
}
// check input
if (Config::inputSources.count()==0)
{
err("Error: tag INPUT: no input files specified after the INPUT tag.\n");
exit(1);
}
else
{
s=Config::inputSources.first();
while (s)
{
QFileInfo fi(s);
if (!fi.exists())
{
err("Error: tag INPUT: input source `%s' does not exist\n",s);
exit(1);
}
s=Config::inputSources.next();
}
}
// add default pattern if needed
if (Config::filePatternList.count()==0)
{
Config::filePatternList.append("*");
}
// add default pattern if needed
if (Config::examplePatternList.count()==0)
{
Config::examplePatternList.append("*");
}
// add default pattern if needed
//if (Config::imagePatternList.count()==0)
//{
// Config::imagePatternList.append("*");
//}
// more checks needed if and only if the search engine is enabled.
if (Config::searchEngineFlag)
{
// check cgi name
if (Config::cgiName.isEmpty())
{
err("Error: tag CGI_NAME: no cgi script name after the CGI_NAME tag.\n");
exit(1);
}
// check cgi URL
if (Config::cgiURL.isEmpty())
{
err("Error: tag CGI_URL: no URL to cgi directory specified.\n");
exit(1);
}
else if (Config::cgiURL.left(7)!="http://")
{
err("Error: tag CGI_URL: URL to cgi directory is invalid (must "
"start with http://).\n");
exit(1);
}
// check documentation URL
if (Config::docURL.isEmpty())
{
Config::docURL = Config::outputDir.copy().prepend("file://").append("html");
}
else if (Config::docURL.left(7)!="http://" && Config::docURL.left(7)!="file://")
{
err("Error: tag DOC_URL: URL to documentation is invalid or "
"not absolute.\n");
exit(1);
}
// check absolute documentation path
if (Config::docAbsPath.isEmpty())
{
Config::docAbsPath = Config::outputDir+"/html";
}
else if (Config::docAbsPath[0]!='/' && Config::docAbsPath[1]!=':')
{
err("Error: tag DOC_ABSPATH: path is not absolute!\n");
exit(1);
}
// check path to doxysearch
if (Config::binAbsPath.isEmpty())
{
err("Error: tag BIN_ABSPATH: no absolute path to doxysearch "
"specified.\n");
exit(1);
}
else if (Config::binAbsPath[0]!='/' && Config::binAbsPath[1]!=':')
{
err("Error: tag BIN_ABSPATH: path is not absolute!\n");
exit(1);
}
// check perl path
bool found=FALSE;
if (Config::perlPath.isEmpty())
{
QFileInfo fi;
fi.setFile("/usr/bin/perl");
if (fi.exists())
{
Config::perlPath="/usr/bin/perl";
found=TRUE;
}
else
{
fi.setFile("/usr/local/bin/perl");
if (fi.exists())
{
Config::perlPath="/usr/local/bin/perl";
found=TRUE;
}
}
}
if (!found)
{
QFileInfo fi(Config::perlPath);
if (!fi.exists())
{
warn("Warning: tag PERL_PATH: perl interpreter not found at default or"
"user specified (%s) location\n",
Config::perlPath.data());
}
}
}
#if defined(_WIN32)
if (Config::haveDotFlag) _putenv("DOTFONTPATH=.");
#endif
}
void parseConfig(const QCString &s)
{
inputString = s;
inputPosition = 0;
yyLineNr = 1;
configYYrestart( configYYin );
BEGIN( Start );
configYYlex();
}
//extern "C" { // some bogus code to keep the compiler happy
// int configYYwrap() { return 1 ; }
//}
/******************************************************************************
*
*
*
* Copyright (C) 2000 by Joerg Baumann & Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* All output generated with Doxygen is not covered by this license.
*
*/
// includes
#include "qtbc.h"
#include <qtextstream.h>
#include <qfile.h>
#include <qlist.h>
#include <qdict.h>
#include <qstringlist.h>
#include <stdio.h>
static QString spaces=" ";
void init(); // defined below
// Iterate over all options calling the spezified method
#define FORALL(x) \
{\
ConfigOption *co=ConfigOption::optionList.first();\
while (co)\
{\
co->x;\
co=ConfigOption::optionList.next();\
}\
}
/*! convert a normal string \a s into a string that can be embedded in C code.
* The \a prefix string will be placed before each string line and the
* \a postfix string will be placed after each string.
*/
static void stringToC(QTextStream &t,QCString &s,
const char *prefix,const char *postfix)
{
int i=0,l=s.length();
bool eol=TRUE;
for (i=0;i<l;i++)
{
char c;
switch ((c=s[i]))
{
case '\n':
t << postfix << endl;
eol=TRUE;
break;
case '\\':
case '"':
if (eol) t << prefix;
t << "\\" << (char)c;
eol=FALSE;
break;
default:
if (eol) t << prefix;
eol=FALSE;
t << (char)c;
break;
}
}
if (!eol) t << postfix << endl;
}
class ConfigBool;
/*! baseclass for options */
class ConfigOption
{
public:
static QList<ConfigOption> optionList;
static QDict<ConfigOption> optionDict;
QCString getVarName() const { return varName; }
virtual ~ConfigOption() {}
virtual void printHeader(QTextStream &t)
{
t << " static " << type << " " << varName
<< "; // " << shortDesc << endl;
}
virtual void printStatic(QTextStream &) {}
virtual void printConfig(QTextStream &t)
{
t << type << " Config::" << varName;
if (!defaultValue.isEmpty()) t << " = \"" << defaultValue << "\"";
t << ";" << endl;
}
virtual void printRules(QTextStream &)
{
}
virtual void printDump(QTextStream &)
{
}
virtual void printCheck(QTextStream &t)
{
// FIXME
if (!check.isEmpty()) t << check << endl;
}
virtual void printInit(QTextStream &t)
{
t << " Config::" << varName << " = "
<< defaultValue << ";" << endl;
}
virtual void printTemplate(QTextStream &t)
{
t << " if (!sl)" << endl;
t << " {" << endl;
t << " t << \"\\n\";" << endl;
stringToC(t,longDesc," t << \"# ","\\n\";");
t << " t << \"\\n\";" << endl;
t << " }" << endl;
t << " t << \"" << cfgName << " = \";" << endl;
t << " " << writeFunc << "(t,Config::" << varName << ");" << endl;
t << " t << \"\\n\";" << endl;
}
virtual void printSubstEnv(QTextStream &) {}
virtual void printWidgets(QTextStream &,int) = 0;
virtual void addDependency(ConfigOption *)
{
fprintf(stderr,"Error: dependency add for non boolean option!\n");
}
void setDependsOn(ConfigBool *b) { depends=b; }
protected:
ConfigOption(const char * var,const char * cfg,const char * value,
const char * short_,const char * long_,const char * type_,
const char * type2_,const char * writeFunc_
):
varName(var), cfgName(cfg), defaultValue(value), shortDesc(short_),
longDesc(long_), type(type_), type2(type2_), writeFunc(writeFunc_)
{
if (optionDict.find(var)!=0)
{
fprintf(stderr,"Error: configuration variable found more than once!\n");
}
else
{
optionList.append(this);
optionDict.insert(var,this);
}
depends=0;
}
void tclQuote(QTextStream &t,const char *s)
{
t << "{";
for (const char *p=s;*p!=0;p++)
{
if (strchr("{}",*p)) t << '\\';
t << (*p);
}
t << "} ";
}
QCString varName; // name as in Config::name
QCString cfgName; // name as in cfgfile
QCString defaultValue; // default value
QCString shortDesc; // short description
QCString longDesc; // long description
QCString type,type2; //
QCString writeFunc; //
QCString check; //
ConfigBool *depends;
};
QList<ConfigOption> ConfigOption::optionList;
QDict<ConfigOption> ConfigOption::optionDict;
void addDependency(const char *src,const char *dst)
{
ConfigOption *sopt = ConfigOption::optionDict.find(src);
ConfigOption *dopt = ConfigOption::optionDict.find(dst);
if (!sopt)
{
fprintf(stderr,"Error: option %s not defined!\n",src);
}
if (!dopt)
{
fprintf(stderr,"Error: option %s not defined!\n",dst);
}
dopt->addDependency(sopt);
sopt->setDependsOn((ConfigBool *)dopt);
}
class ConfigInfo : public ConfigOption
{
public:
ConfigInfo(const char *var,const char * short_)
: ConfigOption(var,"","",short_,"","","","") {}
static void add(const char *var,const char * short_);
void printHeader(QTextStream &) {}
void printConfig(QTextStream &) {}
void printRules(QTextStream &) {}
virtual void printTemplate(QTextStream &t)
{
t << " if (!sl)" << endl;
t << " {" << endl;
t << " t << \"\\n\";" << endl;
t << " }" << endl;
t << " t << \"#---------------------------------------------------------------------------\\n\";" << endl;
t << " t << \"# " << shortDesc << "\\n\";" << endl;
t << " t << \"#---------------------------------------------------------------------------\\n\";" << endl;
}
virtual void printInit(QTextStream &) {}
virtual void printDump(QTextStream &t)
{
t << " printf(\"# " << shortDesc << "\\n\");" << endl;
}
virtual void printWidgets(QTextStream &t,int pass)
{
switch(pass)
{
case 0:
t << " PageWidget *" << varName << " = new PageWidget( tab, \""
<< varName << "\" );" << endl;
break;
case 1:
t << " " << varName << "->addStretch(1);" << endl;
break;
default:
break;
}
}
QCString getVarName() { return varName; }
};
class ConfigList : public ConfigOption
{
public:
enum WidgetType { String, File, Dir, FileAndDir };
ConfigList(ConfigInfo *parent,const char * var,const char * cfg,const char * value,
const char * short_,const char * long_, WidgetType w)
: ConfigOption(var,cfg,value,short_,long_,"QStrList","List","writeStringList"),
m_parent(parent),
m_widgetType(w)
{
}
static void add(const char * var,const char * cfg,const char * value,
const char * short_,const char * long_,WidgetType w=String);
virtual void printRules(QTextStream &t)
{
t << "<Start>\"" << cfgName << "\"[ \\t]*\"=\"";
t << spaces.left(22-cfgName.length());
t << "{ BEGIN(GetStrList); l=&Config::" << varName;
t << "; l->clear(); elemStr=\"\"; }" << endl;
}
virtual void printInit(QTextStream &t)
{
t << " Config::" << varName;
if (!defaultValue.isEmpty())
{
t << " = \"" << defaultValue << "\"";
}
else
{
t << ".clear()";
}
t << ";" << endl;
}
virtual void printDump(QTextStream &t)
{
t << " {" << endl;
t << " char *is=Config::" << varName << ".first();" << endl;
t << " while (is)" << endl;
t << " {" << endl;
t << " printf(\"" << varName << "=`%s'\\n\",is);" << endl;
t << " is=Config::" << varName << ".next();" << endl;
t << " }" << endl;
t << " }" << endl;
}
virtual void printSubstEnv(QTextStream &t)
{
t << " substEnvVarsInStrList( Config::" << varName << " );" << endl;
}
virtual void printWidgets(QTextStream &t,int pass)
{
switch (pass)
{
case 0:
{
t << " " << varName << " = new InputStrList( \"" << cfgName
<< "\", " << m_parent->getVarName() << ", Config::" << varName;
if (m_widgetType!=String)
{
t << ",";
switch(m_widgetType)
{
case File: t << "InputStrList::ListFile"; break;
case Dir: t << "InputStrList::ListDir"; break;
case FileAndDir: t << "InputStrList::ListFileDir"; break;
default: break;
}
}
t << " );" << endl;
t << " QWhatsThis::add(" << varName << ", " << endl;
stringToC(t,longDesc," \"","\"");
t << " );" << endl;
t << " connect(" << varName
<< ",SIGNAL(changed()),this,SIGNAL(changed()));" << endl;
}
break;
case 2:
{
t << " InputStrList *" << varName << ";" << endl;
}
break;
case 5:
{
t << " " << varName << "->init();" << endl;
}
break;
default:
break;
}
}
private:
ConfigInfo *m_parent;
WidgetType m_widgetType;
};
class ConfigString : public ConfigOption
{
public:
enum WidgetType { String, File, Dir };
ConfigString(ConfigInfo *parent, const char * var,const char * cfg,const char * value,
const char * short_,const char * long_, WidgetType w
)
: ConfigOption(var,cfg,value,short_,long_,
"QCString","String","writeStringValue"
),
m_parent(parent),
m_widgetType(w)
{
}
static void add(const char * var,const char * cfg,const char * value,
const char * short_,const char * long_,WidgetType w=String);
static void addFixedValue(const char *var, const char *value);
virtual void printRules(QTextStream &t)
{
t << "<Start>\"" << cfgName << "\"[ \\t]*\"=\"";
t << spaces.left(22-cfgName.length());
t << "{ BEGIN(GetString); s=&Config::" << varName;
t << "; s->resize(0); }" << endl;
}
virtual void printInit(QTextStream &t)
{
t << " Config::" << varName;
if (!defaultValue.isEmpty()) t << " = \"" << defaultValue << "\"";
else t << ".resize(0)";
t << ";" << endl;
}
virtual void printDump(QTextStream &t)
{
t << " printf(\"" << varName << "=`%s'\\n\",Config::" << varName << ".data());" << endl;
}
virtual void printSubstEnv(QTextStream &t)
{
t << " substEnvVarsInString( Config::" << varName << " );" << endl;
}
virtual void printWidgets(QTextStream &t,int pass)
{
switch (pass)
{
case 0:
{
t << " " << varName << " = new InputString( \"" << cfgName
<< "\", " << m_parent->getVarName() << ", Config::" << varName;
if (m_widgetType!=String || m_values.count()>0)
{
t << ",";
switch (m_widgetType)
{
case File:
t << "InputString::StringFile";
break;
case Dir:
t << "InputString::StringDir";
break;
default:
t << "InputString::StringFixed";
break;
}
}
t << " );" << endl;
t << " QWhatsThis::add(" << varName << ", " << endl;
stringToC(t,longDesc," \"","\"");
t << " );" << endl;
t << " connect(" << varName
<< ",SIGNAL(changed()),this,SIGNAL(changed()));" << endl;
if (m_values.count()>0)
{
for ( QStringList::Iterator it = m_values.begin(); it != m_values.end(); ++it )
{
t << " " << varName << "->addValue(\"" << (*it) << "\");" << endl;
}
}
}
break;
case 2:
{
t << " InputString *" << varName << ";" << endl;
}
break;
case 5:
{
t << " " << varName << "->init();" << endl;
}
break;
default:
break;
}
}
void addValue(const char *val)
{
m_values.append(val);
}
private:
ConfigInfo *m_parent;
WidgetType m_widgetType;
QStringList m_values;
};
class ConfigInt : public ConfigOption
{
public:
ConfigInt(ConfigInfo *parent,const char * var,const char * cfg,const char * value,
const char * short_,const char * long_,int minVal,int maxVal)
: ConfigOption(var,cfg,value,short_,long_,"int ","Int","writeIntValue"),
m_parent(parent), m_minVal(minVal), m_maxVal(maxVal)
{
}
static void add(const char * var,const char * cfg,const char * value,
const char * short_,const char * long_,int minVal,int maxVal);
virtual void printConfig(QTextStream &t)
{
t << type << " Config::" << varName;
if (!defaultValue.isEmpty()) t << " = " << defaultValue;
t << ";" << endl;
}
virtual void printRules(QTextStream &t)
{
t << "<Start>\"" << cfgName << "\"[ \\t]*\"=\"";
t << spaces.left(22-cfgName.length());
t << "{ BEGIN(GetString); s=&" << varName;
t << "String; s->resize(0); }" << endl;
}
virtual void printStatic(QTextStream &t)
{
t << "static QCString " << varName << "String;" << endl;
}
virtual void printDump(QTextStream &t)
{
t << " printf(\"" << varName << "=`%d'\\n\",Config::" << varName << ");" << endl;
}
virtual void printWidgets(QTextStream &t,int pass)
{
switch (pass)
{
case 0:
{
t << " " << varName << " = new InputInt( \"" << cfgName
<< "\", " << m_parent->getVarName() << ", Config::"
<< varName << "," << m_minVal << "," << m_maxVal << " );" << endl;
t << " QWhatsThis::add(" << varName << ", " << endl;
stringToC(t,longDesc," \"","\"");
t << " );" << endl;
t << " connect(" << varName
<< ",SIGNAL(changed()),this,SIGNAL(changed()));" << endl;
}
break;
case 2:
{
t << " InputInt *" << varName << ";" << endl;
}
break;
case 5:
{
t << " " << varName << "->init();" << endl;
}
break;
default:
break;
}
}
private:
ConfigInfo *m_parent;
int m_minVal;
int m_maxVal;
};
class ConfigBool : public ConfigOption
{
public:
ConfigBool(ConfigInfo *parent,const char * var,const char * cfg,const char * value,
const char * short_,const char * long_)
: ConfigOption(var,cfg,value,short_,long_,"bool ","Bool","writeBoolValue"),
m_parent(parent) {}
static void add(const char * var,const char * cfg,const char * value,
const char * short_,const char * long_);
virtual void printConfig(QTextStream &t)
{
t << type << " Config::" << varName;
if (!defaultValue.isEmpty()) t << " = " << defaultValue;
t << ";" << endl;
}
virtual void printRules(QTextStream &t)
{
t << "<Start>\"" << cfgName << "\"[ \\t]*\"=\"";
t << spaces.left(22-cfgName.length());
t << "{ BEGIN(GetBool); b=&Config::" << varName;
t << "; }" << endl;
}
virtual void printDump(QTextStream &t)
{
t << " printf(\"" << varName << "=`%d'\\n\",Config::" << varName << ");" << endl;
}
virtual void printWidgets(QTextStream &t,int pass)
{
switch (pass)
{
case 0:
{
t << " " << varName << " = new InputBool( \"" << cfgName
<< "\", " << m_parent->getVarName() << ", Config::" << varName << " );" << endl;
t << " QWhatsThis::add(" << varName << ", " << endl;
stringToC(t,longDesc," \"","\"");
t << " );" << endl;
t << " connect(" << varName
<< ",SIGNAL(changed()),this,SIGNAL(changed()));" << endl;
if (dependencies.count()>0)
{
t << " connect(" << varName << ",SIGNAL(toggled(bool)),SLOT("
<< varName << "Toggle(bool)));" << endl;
}
}
break;
case 1:
{
if (dependencies.count()>0)
{
t << " " << varName << "Toggle(Config::" << varName << ");" << endl;
}
}
break;
case 2:
{
t << " InputBool *" << varName << ";" << endl;
}
break;
case 3:
{
if (dependencies.count()>0)
{
t << " void " << varName << "Toggle(bool);" << endl;
}
}
break;
case 4:
{
if (dependencies.count()>0)
{
t << "void ConfigFile::" << varName << "Toggle(bool state)" << endl;
t << "{" << endl;
ConfigOption *o=dependencies.first();
while (o)
{
t << " " << o->getVarName() << "->setEnabled(state);" << endl;
o=dependencies.next();
}
t << "}" << endl << endl;
}
}
break;
case 5:
{
t << " " << varName << "->init();" << endl;
}
default:
break;
}
}
virtual void addDependency(ConfigOption *o)
{
dependencies.append(o);
}
private:
ConfigInfo *m_parent;
QList<ConfigOption> dependencies;
};
static ConfigInfo *g_lastConfigInfo;
void ConfigList::add(const char * var,const char * cfg,const char * value,
const char * short_,const char * long_,WidgetType w)
{
ConfigOption* o=new ConfigList(g_lastConfigInfo,var,cfg,value,short_,long_,w);
ASSERT(o!=0);
ASSERT(g_lastConfigInfo!=0);
//optionList.append(o);
}
void ConfigString::add(const char * var,const char * cfg,const char * value,
const char * short_,const char * long_,WidgetType w)
{
ConfigOption* o=new ConfigString(g_lastConfigInfo,var,cfg,value,short_,long_,w);
ASSERT(o!=0);
ASSERT(g_lastConfigInfo!=0);
//optionList.append(o);
}
void ConfigInt::add(const char * var,const char * cfg,const char * value,
const char * short_,const char * long_,int minVal, int maxVal)
{
ConfigOption* o=new ConfigInt(g_lastConfigInfo,var,cfg,value,
short_,long_,minVal,maxVal);
ASSERT(o!=0);
ASSERT(g_lastConfigInfo!=0);
//optionList.append(o);
}
void ConfigBool::add(const char * var,const char * cfg,const char * value,
const char * short_,const char * long_)
{
ConfigOption* o=new ConfigBool(g_lastConfigInfo,var,cfg,value,short_,long_);
ASSERT(o!=0);
ASSERT(g_lastConfigInfo!=0);
//optionList.append(o);
}
void ConfigInfo::add(const char * var,const char * short_)
{
g_lastConfigInfo =new ConfigInfo(var,short_);
ASSERT(g_lastConfigInfo!=0);
//optionList.append(g_lastConfigInfo);
}
void ConfigString::addFixedValue(const char *var, const char *value)
{
ConfigString *cs = (ConfigString *)optionDict[var];
if (cs==0)
{
fprintf(stderr,"ConfigString::addFixedValue: unknown variable %s\n",var);
}
else
{
cs->addValue(value);
}
}
int main(int argc,char * argv[])
{
// check arguments
if (argc!=2)
{
fprintf(stderr,"usage: %s config-template\n",argv[0]);
exit(1);
}
init(); // create options
QFile ctfile(argv[1]);
// open template file
if (!ctfile.open(IO_ReadOnly))
{
fprintf(stderr,"Error: couldnt open file %s\n",argv[1]);
exit(1);
}
const int maxLineLen=10000;
char buf[maxLineLen];
QFile f;
f.open(IO_WriteOnly,stdout);
QTextStream t(&f);
// process template file
while (!ctfile.atEnd())
{
ctfile.readLine(buf,maxLineLen-1);
if (QCString("#CONFIG Config\n" )==buf) FORALL(printConfig(t))
else if (QCString("#CONFIG Static\n" )==buf) FORALL(printStatic(t))
else if (QCString("#CONFIG Rules\n" )==buf) FORALL(printRules(t))
else if (QCString("#CONFIG Dump\n" )==buf) FORALL(printDump(t))
else if (QCString("#CONFIG Init\n" )==buf) FORALL(printInit(t))
else if (QCString("#CONFIG Template\n")==buf) FORALL(printTemplate(t))
else if (QCString("#CONFIG Check\n" )==buf) FORALL(printCheck(t))
else if (QCString("#CONFIG Header\n" )==buf) FORALL(printHeader(t))
else if (QCString("#CONFIG Substenv\n")==buf) FORALL(printSubstEnv(t))
else if (QCString("#CONFIG Widgets0\n" )==buf) FORALL(printWidgets(t,0))
else if (QCString("#CONFIG Widgets1\n" )==buf) FORALL(printWidgets(t,1))
else if (QCString("#CONFIG WidgetVars\n" )==buf) FORALL(printWidgets(t,2))
else if (QCString("#CONFIG WidgetSlots\n" )==buf) FORALL(printWidgets(t,3))
else if (QCString("#CONFIG WidgetSlotImpl\n" )==buf) FORALL(printWidgets(t,4))
else if (QCString("#CONFIG WidgetInit\n" )==buf) FORALL(printWidgets(t,5))
else t << buf;
}
ctfile.close();
return 0;
}
void init()
{
// option definitions
//-----------------------------------------------------------------------------------------------
ConfigInfo::add("General","General configuration options");
//-----------------------------------------------------------------------------------------------
ConfigString::add("projectName",
"PROJECT_NAME",
"",
"the name of the project",
"The PROJECT_NAME tag is a single word (or a sequence of words surrounded \n"
"by quotes) that should identify the project. "
);
ConfigString::add("projectNumber",
"PROJECT_NUMBER",
"",
"the number of the project",
"The PROJECT_NUMBER tag can be used to enter a project or revision number. \n"
"This could be handy for archiving the generated documentation or \n"
"if some version control system is used.\n"
);
ConfigString::add("outputDir",
"OUTPUT_DIRECTORY",
"",
"the global output directory",
"The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \n"
"base path where the generated documentation will be put. \n"
"If a relative path is entered, it will be relative to the location \n"
"where doxygen was started. If left blank the current directory will be used.\n",
ConfigString::Dir
);
ConfigString::add("outputLanguage",
"OUTPUT_LANGUAGE",
"English",
"the output language",
"The OUTPUT_LANGUAGE tag is used to specify the language in which all \n"
"documentation generated by doxygen is written. Doxygen will use this \n"
"information to generate all constant output in the proper language. \n"
"The default language is English, other supported languages are: \n"
"Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n"
"Spanish and Russian\n"
);
ConfigString::addFixedValue("outputLanguage","English");
ConfigString::addFixedValue("outputLanguage","Dutch");
ConfigString::addFixedValue("outputLanguage","French");
ConfigString::addFixedValue("outputLanguage","Italian");
ConfigString::addFixedValue("outputLanguage","Czech");
ConfigString::addFixedValue("outputLanguage","Swedish");
ConfigString::addFixedValue("outputLanguage","German");
ConfigString::addFixedValue("outputLanguage","Russian");
ConfigString::addFixedValue("outputLanguage","Japanese");
ConfigString::addFixedValue("outputLanguage","Finnish");
ConfigString::addFixedValue("outputLanguage","Spanish");
ConfigBool::add( "quietFlag",
"QUIET",
"FALSE",
"generate progress messages flag",
"The QUIET tag can be used to turn on/off the messages that are generated \n"
"by doxygen. Possible values are YES and NO. If left blank NO is used. \n"
);
ConfigBool::add( "warningFlag",
"WARNINGS",
"TRUE",
"generate warnings flag",
"The WARNINGS tag can be used to turn on/off the warning messages that are \n"
"generated by doxygen. Possible values are YES and NO. If left blank \n"
"NO is used. \n"
);
ConfigBool::add( "noIndexFlag",
"DISABLE_INDEX",
"FALSE",
"generate condensed index flag",
"The DISABLE_INDEX tag can be used to turn on/off the condensed index at \n"
"top of each HTML page. The value NO (the default) enables the index and \n"
"the value YES disables it. \n"
);
ConfigBool::add( "extractAllFlag",
"EXTRACT_ALL",
"FALSE",
"gererate docs for all classes flag",
"If the EXTRACT_ALL tag is set to YES all classes and functions will be \n"
"included in the documentation, even if no documentation was available. \n"
);
ConfigBool::add( "extractPrivateFlag",
"EXTRACT_PRIVATE",
"FALSE",
"generate docs for private members flag",
"If the EXTRACT_PRIVATE tag is set to YES all private members of a class \n"
"will be included in the documentation. \n"
);
ConfigBool::add( "hideMemberFlag",
"HIDE_UNDOC_MEMBERS",
"FALSE",
"hide undocumented members.",
"If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \n"
"undocumented members inside documented classes or files. \n"
);
ConfigBool::add( "hideClassFlag",
"HIDE_UNDOC_CLASSES",
"FALSE",
"hide undocumented members.",
"If the HIDE_UNDOC_CLASSESS tag is set to YES, Doxygen will hide all \n"
"undocumented classes. \n"
);
ConfigBool::add( "briefMemDescFlag",
"BRIEF_MEMBER_DESC",
"TRUE",
"enable `inline' brief member descr.",
"If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \n"
"include brief member descriptions after the members that are listed in \n"
"the file and class documentation (similar to JavaDoc). \n"
"Set to NO to disable this. \n"
);
ConfigBool::add( "repeatBriefFlag",
"REPEAT_BRIEF",
"TRUE",
"repeat brief descriptions.",
"If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \n"
"the brief description of a member or function before the detailed description. \n"
"Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \n"
"brief descriptions will be completely suppressed. \n"
);
ConfigBool::add( "alwaysDetailsFlag",
"ALWAYS_DETAILED_SEC",
"FALSE",
"show details description even if there is only a brief description?",
"If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \n"
"Doxygen will generate a detailed section even if there is only a brief \n"
"description. \n"
);
ConfigBool::add( "fullPathNameFlag",
"FULL_PATH_NAMES",
"FALSE",
"using full path name in output",
"If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \n"
"path before files name in the file list and in the header files. If set \n"
"to NO the shortest path that makes the file name unique will be used. \n"
);
ConfigList::add( "stripFromPath",
"STRIP_FROM_PATH",
"",
"list of candidates to strip from the file path",
"If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \n"
"can be used to strip a user defined part of the path. Stripping is \n"
"only done if one of the specified strings matches the left-hand part of \n"
"the path. \n"
);
addDependency("stripFromPath","fullPathNameFlag");
ConfigBool::add( "internalDocsFlag",
"INTERNAL_DOCS",
"FALSE",
"determines what happens to internal docs.",
"The INTERNAL_DOCS tag determines if documentation \n"
"that is typed after a \\internal command is included. If the tag is set \n"
"to NO (the default) then the documentation will be excluded. \n"
"Set it to YES to include the internal documentation. \n"
);
ConfigBool::add( "classDiagramFlag",
"CLASS_DIAGRAMS",
"TRUE",
"enable the generation of class diagrams.",
"If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \n"
"generate a class diagram (in Html and LaTeX) for classes with base or \n"
"super classes. Setting the tag to NO turns the diagrams off. \n"
);
ConfigBool::add( "sourceBrowseFlag",
"SOURCE_BROWSER",
"FALSE",
"include source code in documentation.",
"If the SOURCE_BROWSER tag is set to YES then a list of source files will \n"
"be generated. Documented entities will be cross-referenced with these sources. \n"
);
ConfigBool::add( "inlineSourceFlag",
"INLINE_SOURCES",
"FALSE",
"inline the definition bodies in the docs?",
"Setting the INLINE_SOURCES tag to YES will include the body \n"
"of functions and classes directly in the documentation. \n"
);
ConfigBool::add( "stripCommentsFlag",
"STRIP_CODE_COMMENTS",
"TRUE",
"strip special comments from code fragments?",
"Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \n"
"doxygen to hide any special comment blocks from generated source code \n"
"fragments. Normal C and C++ comments will always remain visible. \n"
);
ConfigBool::add( "caseSensitiveNames",
"CASE_SENSE_NAMES",
"FALSE",
"determines if output can be mixed case.",
"If the CASE_SENSE_NAMES tag is set to NO (the default) then Doxygen \n"
"will only generate file names in lower case letters. If set to \n"
"YES upper case letters are also allowed. This is useful if you have \n"
"classes or files whose names only differ in case and if your file system \n"
"supports case sensitive file names. \n"
);
ConfigBool::add( "verbatimHeaderFlag",
"VERBATIM_HEADERS",
"TRUE",
"enable/disable generation of verb headers.",
"If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \n"
"will generate a verbatim copy of the header file for each class for \n"
"which an include is specified. Set to NO to disable this. \n"
);
ConfigBool::add( "showIncFileFlag",
"SHOW_INCLUDE_FILES",
"TRUE",
"show include file in file documentation?",
"If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \n"
"will put list of the files that are included by a file in the documentation \n"
"of that file. \n"
);
ConfigBool::add( "autoBriefFlag",
"JAVADOC_AUTOBRIEF",
"TRUE",
"javadoc comments behaves as Qt comments.",
"If the JAVADOC_AUTOBRIEF tag is set to YES (the default) then Doxygen \n"
"will interpret the first line (until the first dot) of a JavaDoc-style \n"
"comment as the brief description. If set to NO, the Javadoc-style will \n"
"behave just like the Qt-style comments. \n"
);
ConfigBool::add( "inheritDocsFlag",
"INHERIT_DOCS",
"TRUE",
"inheritance of documentation enabled?",
"If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \n"
"member inherits the documentation from any documented member that it \n"
"reimplements. \n"
);
ConfigBool::add( "inlineInfoFlag",
"INLINE_INFO",
"TRUE",
"show info about inline members?",
"If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \n"
"is inserted in the documentation for inline members. \n"
);
ConfigBool::add( "sortMembersFlag",
"SORT_MEMBER_DOCS",
"TRUE",
"sort members alphabetically?",
"If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \n"
"will sort the (detailed) documentation of file and class members \n"
"alphabetically by member name. If set to NO the members will appear in \n"
"declaration order. \n"
);
ConfigInt::add( "tabSize",
"TAB_SIZE",
"8",
"number of spaces in a tab",
"The TAB_SIZE tag can be used to set the number of spaces in a tab. \n"
"Doxygen uses this value to replace tabs by spaces in code fragments. \n",
1,16
);
ConfigList::add( "sectionFilterList",
"ENABLED_SECTIONS",
"",
"list of section filters that are enabled",
"The ENABLE_SECTIONS tag can be used to enable conditional \n"
"documentation sections, marked by \\if sectionname ... \\endif. \n"
);
//-----------------------------------------------------------------------------------------------
ConfigInfo::add( "Input","configuration options related to the input files");
//-----------------------------------------------------------------------------------------------
ConfigList::add( "inputSources",
"INPUT",
"",
"list of input files",
"The INPUT tag can be used to specify the files and/or directories that contain \n"
"documented source files. You may enter file names like \"myfile.cpp\" or \n"
"directories like \"/usr/src/myproject\". Separate the files or directories \n"
"with spaces. \n",
ConfigList::FileAndDir
);
ConfigList::add( "filePatternList",
"FILE_PATTERNS",
"",
"list of file patterns",
"If the value of the INPUT tag contains directories, you can use the \n"
"FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \n"
"and *.h) to filter out the source-files in the directories. If left \n"
"blank all files are included. \n"
);
ConfigBool::add( "recursiveFlag",
"RECURSIVE",
"FALSE",
"scan directories recursively",
"The RECURSIVE tag can be used to turn specify whether or not subdirectories \n"
"should be searched for input files as well. Possible values are YES and NO. \n"
"If left blank NO is used. \n"
);
ConfigList::add( "excludeSources",
"EXCLUDE",
"",
"list of files to exclude from the input",
"The EXCLUDE tag can be used to specify files and/or directories that should \n"
"excluded from the INPUT source files. This way you can easily exclude a \n"
"subdirectory from a directory tree whose root is specified with the INPUT tag. \n",
ConfigList::FileAndDir
);
ConfigList::add( "excludePatternList",
"EXCLUDE_PATTERNS",
"",
"list of patterns to exclude from input",
"If the value of the INPUT tag contains directories, you can use the \n"
"EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \n"
"certain files from those directories. \n"
);
ConfigList::add( "examplePath",
"EXAMPLE_PATH",
"",
"list of example paths",
"The EXAMPLE_PATH tag can be used to specify one or more files or \n"
"directories that contain example code fragments that are included (see \n"
"the \\include command). \n",
ConfigList::Dir
);
ConfigList::add( "examplePatternList",
"EXAMPLE_PATTERNS",
"",
"list of example patterns",
"If the value of the EXAMPLE_PATH tag contains directories, you can use the \n"
"EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \n"
"and *.h) to filter out the source-files in the directories. If left \n"
"blank all files are included. \n"
);
ConfigList::add( "imagePath",
"IMAGE_PATH",
"",
"list of image paths",
"The IMAGE_PATH tag can be used to specify one or more files or \n"
"directories that contain image that are included in the documentation (see \n"
"the \\image command). \n",
ConfigList::Dir
);
ConfigString::add("inputFilter",
"INPUT_FILTER",
"",
"a filter command that is applied to input files",
"The INPUT_FILTER tag can be used to specify a program that doxygen should \n"
"invoke to filter for each input file. Doxygen will invoke the filter program \n"
"by executing (via popen()) the command <filter> <input-file>, where <filter> \n"
"is the value of the INPUT_FILTER tag, and <input-file> is the name of an \n"
"input file. Doxygen will then use the output that the filter program writes \n"
"to standard output. \n",
ConfigString::File
);
//-----------------------------------------------------------------------------------------------
ConfigInfo::add( "Index","configuration options related to the alphabetical class index");
//-----------------------------------------------------------------------------------------------
ConfigBool::add( "alphaIndexFlag",
"ALPHABETICAL_INDEX",
"FALSE",
"should an alphabetical index be generated?",
"If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \n"
"of all compounds will be generated. Enable this if the project \n"
"contains a lot of classes, structs, unions or interfaces. \n"
);
ConfigInt::add( "colsInAlphaIndex",
"COLS_IN_ALPHA_INDEX",
"5",
"number of columns in the alphabetical index",
"If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \n"
"the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \n"
"in which this list will be split (can be a number in the range [1..20]) \n",
1,20
);
ConfigList::add( "ignorePrefixList",
"IGNORE_PREFIX",
"",
"list of prefixes to ignore for the alphabetical index",
"In case all classes in a project start with a common prefix, all \n"
"classes will be put under the same header in the alphabetical index. \n"
"The IGNORE_PREFIX tag can be used to specify one or more prefixes that \n"
"should be ignored while generating the index headers. \n"
);
//-----------------------------------------------------------------------------------------------
ConfigInfo::add( "HTML","configuration options related to the HTML output");
//-----------------------------------------------------------------------------------------------
ConfigBool::add( "generateHtml",
"GENERATE_HTML",
"TRUE",
"generate HTML output",
"If the GENERATE_HTML tag is set to YES (the default) Doxygen will \n"
"generate HTML output. \n"
);
ConfigString::add("htmlOutputDir",
"HTML_OUTPUT",
"html",
"the directory to put the HTML files",
"The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \n"
"If a relative path is entered the value of OUTPUT_DIRECTORY will be \n"
"put in front of it. If left blank `html' will be used as the default path. \n",
ConfigString::Dir
);
addDependency("htmlOutputDir","generateHtml");
ConfigString::add("headerFile",
"HTML_HEADER",
"",
"the name of the personal HTML header",
"The HTML_HEADER tag can be used to specify a personal HTML header for \n"
"each generated HTML page. If it is left blank doxygen will generate a \n"
"standard header.\n",
ConfigString::File
);
addDependency("headerFile","generateHtml");
ConfigString::add("footerFile",
"HTML_FOOTER",
"",
"the name of the personal HTML footer",
"The HTML_FOOTER tag can be used to specify a personal HTML footer for \n"
"each generated HTML page. If it is left blank doxygen will generate a \n"
"standard footer.\n",
ConfigString::File
);
addDependency("footerFile","generateHtml");
ConfigString::add("htmlStyleSheet",
"HTML_STYLESHEET",
"",
"user defined cascading style sheet",
"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",
ConfigString::File
);
addDependency("htmlStyleSheet","generateHtml");
ConfigBool::add( "htmlAlignMemberFlag",
"HTML_ALIGN_MEMBERS",
"TRUE",
"align members in HTML using tables.",
"If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \n"
"files or namespaces will be aligned in HTML using tables. If set to \n"
"NO a bullet list will be used. \n"
);
addDependency("htmlAlignMemberFlag","generateHtml");
ConfigBool::add( "htmlHelpFlag",
"GENERATE_HTMLHELP",
"FALSE",
"should html help files be generated?",
"If the GENERATE_HTMLHELP tag is set to YES, additional index files \n"
"will be generated that can be used as input for tools like the \n"
"Microsoft HTML help workshop to generate a compressed HTML help file (.chm) \n"
"of the generated HTML documentation. \n"
);
addDependency("htmlHelpFlag","generateHtml");
//-----------------------------------------------------------------------------------------------
ConfigInfo::add( "LaTeX","configuration options related to the LaTeX output");
//-----------------------------------------------------------------------------------------------
ConfigBool::add( "generateLatex",
"GENERATE_LATEX",
"TRUE",
"generate Latex output",
"If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \n"
"generate Latex output. \n"
);
ConfigString::add("latexOutputDir",
"LATEX_OUTPUT",
"latex",
"the directory to put the Latex files",
"The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \n"
"If a relative path is entered the value of OUTPUT_DIRECTORY will be \n"
"put in front of it. If left blank `latex' will be used as the default path. \n",
ConfigString::Dir
);
addDependency("latexOutputDir","generateLatex");
ConfigBool::add( "compactLatexFlag",
"COMPACT_LATEX",
"FALSE",
"generate compact LaTeX documentation.",
"If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \n"
"LaTeX documents. This may be useful for small projects and may help to \n"
"save some trees in general. \n"
);
addDependency("compactLatexFlag","generateLatex");
ConfigString::add("paperType",
"PAPER_TYPE",
"a4wide",
"the page type to generate docs for",
"The PAPER_TYPE tag can be used to set the paper type that is used \n"
"by the printer. Possible values are: a4, a4wide, letter, legal and \n"
"executive. If left blank a4wide will be used. \n"
);
ConfigString::addFixedValue("paperType","a4");
ConfigString::addFixedValue("paperType","a4wide");
ConfigString::addFixedValue("paperType","letter");
ConfigString::addFixedValue("paperType","legal");
ConfigString::addFixedValue("paperType","executive");
addDependency("paperType","generateLatex");
ConfigList::add( "extraPackageList",
"EXTRA_PACKAGES",
"",
"list of extra LaTeX packages.",
"The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \n"
"packages that should be included in the LaTeX output. \n"
);
addDependency("extraPackageList","generateLatex");
ConfigString::add("latexHeaderFile",
"LATEX_HEADER",
"",
"the name of the personal LaTeX header",
"The LATEX_HEADER tag can be used to specify a personal LaTeX header for \n"
"the generated latex document. The header should contain everything until \n"
"the first chapter. If it is left blank doxygen will generate a \n"
"standard header. Notice: only use this tag if you know what you are doing! \n",
ConfigString::File
);
addDependency("latexHeaderFile","generateLatex");
ConfigBool::add( "pdfHyperFlag",
"PDF_HYPERLINKS",
"FALSE",
"generate latex prepared creating hyperlinked pdfs.",
"If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \n"
"is prepared for conversion to pdf (using ps2pdf). The pdf file will \n"
"contain links (just like the HTML output) instead of page references \n"
"This makes the output suitable for online browsing using a pdf viewer. \n"
);
addDependency("pdfHyperFlag","generateLatex");
ConfigBool::add( "latexBatchModeFlag",
"LATEX_BATCHMODE",
"FALSE",
"continue after latex errors?",
"If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\\\batchmode. \n"
"command to the generated LaTeX files. This will instruct LaTeX to keep \n"
"running if errors occur, instead of asking the user for help. \n"
"This option is also used when generating formulas in HTML. \n"
);
addDependency("latexBatchModeFlag","generateLatex");
//-----------------------------------------------------------------------------------------------
ConfigInfo::add( "RTF","configuration options related to the RTF output");
//-----------------------------------------------------------------------------------------------
ConfigBool::add( "generateRTF",
"GENERATE_RTF",
"FALSE",
"generate RTF flag",
"If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \n"
"For now this is experimental and is disabled by default. The RTF output \n"
"is optimised for Word 97 and may not look too pretty with other readers \n"
"or editors.\n"
);
ConfigString::add("rtfOutputDir",
"RTF_OUTPUT",
"rtf",
"the directory to put the RTF files",
"The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \n"
"If a relative path is entered the value of OUTPUT_DIRECTORY will be \n"
"put in front of it. If left blank `rtf' will be used as the default path. \n",
ConfigString::Dir
);
addDependency("rtfOutputDir","generateRTF");
ConfigBool::add( "compactRTFFlag",
"COMPACT_RTF",
"FALSE",
"generate more compact RTF",
"If the COMPACT_RTF tag is set to YES Doxygen generates more compact \n"
"RTF documents. This may be useful for small projects and may help to \n"
"save some trees in general. \n"
);
addDependency("compactRTFFlag","generateRTF");
ConfigBool::add( "rtfHyperFlag",
"RTF_HYPERLINKS",
"FALSE",
"generate hyper links in RTF",
"If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \n"
"will contain hyperlink fields. The RTF file will \n"
"contain links (just like the HTML output) instead of page references. \n"
"This makes the output suitable for online browsing using a WORD or other. \n"
"programs which support those fields. \n"
"Note: wordpad (write) and others do not support links. \n"
);
addDependency("rtfHyperFlag","generateRTF");
//-----------------------------------------------------------------------------------------------
ConfigInfo::add( "Man","configuration options related to the man page output");
//-----------------------------------------------------------------------------------------------
ConfigBool::add( "generateMan",
"GENERATE_MAN",
"TRUE",
"generate Man pages",
"If the GENERATE_MAN tag is set to YES (the default) Doxygen will \n"
"generate man pages \n"
);
ConfigString::add("manOutputDir",
"MAN_OUTPUT",
"man",
"the directory to put the man pages",
"The MAN_OUTPUT tag is used to specify where the man pages will be put. \n"
"If a relative path is entered the value of OUTPUT_DIRECTORY will be \n"
"put in front of it. If left blank `man' will be used as the default path. \n",
ConfigString::Dir
);
addDependency("manOutputDir","generateMan");
ConfigString::add("manExtension",
"MAN_EXTENSION",
".3",
"extension the man page files",
"The MAN_EXTENSION tag determines the extension that is added to \n"
"the generated man pages (default is the subroutine's section .3) \n"
);
addDependency("manExtension","generateMan");
//-----------------------------------------------------------------------------------------------
ConfigInfo::add( "Preprocessor","Configuration options related to the preprocessor ");
//-----------------------------------------------------------------------------------------------
ConfigBool::add( "preprocessingFlag",
"ENABLE_PREPROCESSING",
"TRUE",
"enable preprocessing",
"If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \n"
"evaluate all C-preprocessor directives found in the sources and include \n"
"files. \n"
);
ConfigBool::add( "macroExpansionFlag",
"MACRO_EXPANSION",
"FALSE",
"expand macros in the source.",
"If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \n"
"names in the source code. If set to NO (the default) only conditional \n"
"compilation will be performed. \n"
);
addDependency("macroExpansionFlag","preprocessingFlag");
ConfigBool::add( "searchIncludeFlag",
"SEARCH_INCLUDES",
"TRUE",
"search for included files",
"If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \n"
"in the INCLUDE_PATH (see below) will be search if a #include is found. \n"
);
addDependency("searchIncludeFlag","preprocessingFlag");
ConfigList::add( "includePath",
"INCLUDE_PATH",
"",
"list of include paths",
"The INCLUDE_PATH tag can be used to specify one or more directories that \n"
"contain include files that are not input files but should be processed by \n"
"the preprocessor. \n",
ConfigList::Dir
);
addDependency("includePath","preprocessingFlag");
ConfigList::add( "predefined",
"PREDEFINED",
"",
"list of predefined macro names.",
"The PREDEFINED tag can be used to specify one or more macro names that \n"
"are defined before the preprocessor is started (similar to the -D option of \n"
"gcc). The argument of the tag is a list of macros of the form: name \n"
"or name=definition (no spaces). If the definition and the = are \n"
"omitted =1 is assumed. \n"
);
addDependency("predefined","preprocessingFlag");
ConfigBool::add( "onlyPredefinedFlag",
"EXPAND_ONLY_PREDEF",
"FALSE",
"expand only predefined macros",
"If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \n"
"then the macro expansion is limited to the macros specified with the \n"
"PREDEFINED tag. \n"
);
addDependency("onlyPredefinedFlag","preprocessingFlag");
//-----------------------------------------------------------------------------------------------
ConfigInfo::add( "External","Configuration::addtions related to external references ");
//-----------------------------------------------------------------------------------------------
ConfigList::add( "tagFileList",
"TAGFILES",
"",
"list of tag files",
"The TAGFILES tag can be used to specify one or more tagfiles. \n",
ConfigList::File
);
ConfigString::add("genTagFile",
"GENERATE_TAGFILE",
"",
"the tag file to generate",
"When a file name is specified after GENERATE_TAGFILE, doxygen will create \n"
"a tag file that is based on the input files it reads. \n",
ConfigString::File
);
ConfigBool::add( "allExtFlag",
"ALLEXTERNALS",
"FALSE",
"include all external classes flag",
"If the ALLEXTERNALS tag is set to YES all external classes will be listed \n"
"in the class index. If set to NO only the inherited external classes \n"
"will be listed. \n"
);
ConfigString::add("perlPath",
"PERL_PATH",
"/usr/bin/perl",
"the absolute path to perl",
"The PERL_PATH should be the absolute path and name of the perl script \n"
"interpreter (i.e. the result of `which perl'). \n",
ConfigString::Dir
);
//-----------------------------------------------------------------------------------------------
ConfigInfo::add( "Dot","Configuration options related to the dot tool ");
//-----------------------------------------------------------------------------------------------
ConfigBool::add( "haveDotFlag",
"HAVE_DOT",
"FALSE",
"indicates wether or not dot is present",
"If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \n"
"available from the path. This tool is part of Graphviz, a graph visualization \n"
"toolkit from AT&T and Lucent Bell Labs. The other options in this section \n"
"have no effect if this option is set to NO (the default) \n"
);
ConfigBool::add( "collGraphFlag",
"COLLABORATION_GRAPH",
"TRUE",
"collaboration graph",
"If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \n"
"will generate a graph for each documented class showing the direct and \n"
"indirect implementation dependencies (inheritance, containment, and \n"
"class references variables) of the class with other documented classes. \n"
);
addDependency("collGraphFlag","haveDotFlag");
ConfigBool::add( "includeGraphFlag",
"INCLUDE_GRAPH",
"TRUE",
"include graph",
"If the ENABLE_PREPROCESSING, INCLUDE_GRAPH, and HAVE_DOT tags are set to \n"
"YES then doxygen will generate a graph for each documented file showing \n"
"the direct and indirect include dependencies of the file with other \n"
"documented files. \n"
);
addDependency("includeGraphFlag","haveDotFlag");
ConfigBool::add( "gfxHierarchyFlag",
"GRAPHICAL_HIERARCHY",
"TRUE",
"flag to enable graphical hierarchy",
"If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \n"
"will graphical hierarchy of all classes instead of a textual one. \n"
);
addDependency("gfxHierarchyFlag","haveDotFlag");
//-----------------------------------------------------------------------------------------------
ConfigInfo::add( "Search","Configuration::addtions related to the search engine ");
//-----------------------------------------------------------------------------------------------
ConfigBool::add( "searchEngineFlag",
"SEARCHENGINE",
"FALSE",
"generate search engine flag",
"The SEARCHENGINE tag specifies whether or not a search engine should be \n"
"used. If set to NO the values of all tags below this one will be ignored. \n"
);
ConfigString::add("cgiName",
"CGI_NAME",
"search.cgi",
"the name of the CGI binary",
"The CGI_NAME tag should be the name of the CGI script that \n"
"starts the search engine (doxysearch) with the correct parameters. \n"
"A script with this name will be generated by doxygen. \n"
);
addDependency("cgiName","searchEngineFlag");
ConfigString::add("cgiURL",
"CGI_URL",
"",
"the absolute URL to the CGI binary",
"The CGI_URL tag should be the absolute URL to the directory where the \n"
"cgi binaries are located. See the documentation of your http daemon for \n"
"details. \n"
);
addDependency("cgiURL","searchEngineFlag");
ConfigString::add("docURL",
"DOC_URL",
"",
"the absolute URL to the documentation",
"The DOC_URL tag should be the absolute URL to the directory where the \n"
"documentation is located. If left blank the absolute path to the \n"
"documentation, with file:// prepended to it, will be used. \n"
);
addDependency("docURL","searchEngineFlag");
ConfigString::add("docAbsPath",
"DOC_ABSPATH",
"",
"the absolute path to the documentation",
"The DOC_ABSPATH tag should be the absolute path to the directory where the \n"
"documentation is located. If left blank the directory on the local machine \n"
"will be used. \n",
ConfigString::Dir
);
addDependency("docAbsPath","searchEngineFlag");
ConfigString::add("binAbsPath",
"BIN_ABSPATH",
"/usr/local/bin/",
"the absolute path to the doxysearch",
"The BIN_ABSPATH tag must point to the directory where the doxysearch binary \n"
"is installed. \n",
ConfigString::Dir
);
addDependency("binAbsPath","searchEngineFlag");
ConfigList::add( "extDocPathList",
"EXT_DOC_PATHS",
"",
"list of external doc. directories.",
"The EXT_DOC_PATHS tag can be used to specify one or more paths to \n"
"documentation generated for other projects. This allows doxysearch to search \n"
"the documentation for these projects as well. \n",
ConfigList::Dir
);
addDependency("extDocPathList","searchEngineFlag");
// The IMAGE_PATTERNS tag is now officially obsolete.
//-----------------------------------------------------------------------------------------------
//ConfigInfo::add("not used");
//-----------------------------------------------------------------------------------------------
//ConfigList::add("imagePatternList",
// "IMAGE_PATTERNS",
// "",
// "list of image paths",
// "dont know\n");
}
#
#
#
# Copyright (C) 1997-2000 by Dimitri van Heesch.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby
# granted. No representations are made about the suitability of this software
# for any purpose. It is provided "as is" without express or implied warranty.
# See the GNU General Public License for more details.
#
# TMake project file for configgen
TEMPLATE = app.t
CONFIG = console qt warn_on $extraopts
HEADERS =
SOURCES = configgen.cpp
win32:INCLUDEPATH += .
TARGET = bin/configgen
OBJECTS_DIR = obj
/******************************************************************************
*
* $Id$
*
* Copyright (C) 1997-2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
#ifndef QTBC_H
#define QTBC_H
/*! This file contains some hacks to make Doxygen work with
* Qt version 2.00 and Qt version 1.xx
*/
#include <qglobal.h>
#if QT_VERSION >= 200
#define GCI QCollection::Item
#include <qcstring.h>
#include <qstring.h>
inline QCString convertToQCString(const QString &s) { return s.local8Bit(); }
#else /* QT_VERSION < 200 */
#include <qstring.h>
#define QCString QString
inline QCString convertToQCString(const QCString &s) { return s; }
#endif
#endif
#
#
#
# Copyright (C) 1997-2000 by Dimitri van Heesch.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby
# granted. No representations are made about the suitability of this software
# for any purpose. It is provided "as is" without express or implied warranty.
# See the GNU General Public License for more details.
#
CFGGENBIN_DIR = ../configgen/bin
CFGGENSRC_DIR = ../configgen
all: $(CFGGENBIN_DIR)/configgen config.h config.l doxywizard.cpp doxywizard.h \
Makefile.doxywizard
$(MAKE) -f Makefile.doxywizard $@
Makefile.doxywizard: doxywizard.pro doxywizard.t
$(PERL) $(TMAKE) doxywizard.pro >Makefile.doxywizard
config.l: $(CFGGENBIN_DIR)/configgen $(CFGGENSRC_DIR)/config_templ.l
$(CFGGENBIN_DIR)/configgen $(CFGGENSRC_DIR)/config_templ.l >config.l
config.h: $(CFGGENBIN_DIR)/configgen $(CFGGENSRC_DIR)/config_templ.h
$(CFGGENBIN_DIR)/configgen $(CFGGENSRC_DIR)/config_templ.h >config.h
doxywizard.cpp: $(CFGGENBIN_DIR)/configgen doxywizard_templ.cpp
$(CFGGENBIN_DIR)/configgen doxywizard_templ.cpp >doxywizard.cpp
doxywizard.h: $(CFGGENBIN_DIR)/configgen doxywizard_templ.h
$(CFGGENBIN_DIR)/configgen doxywizard_templ.h >doxywizard.h
$(CFGGENBIN_DIR)/configgen: $(CFGGENSRC_DIR)/configgen.cpp
$(MAKE) -C $(CFGGENSRC_DIR)
tmake:
$(PERL) $(TMAKE) doxywizard.pro >Makefile.doxywizard
clean: Makefile.doxywizard
$(MAKE) -f Makefile.doxywizard clean
distclean: clean
$(RM) doxywizard.cpp doxywizard.h \
config.l config.h config.cpp Makefile.doxywizard
install:
$(INSTTOOL) -d $(INSTALL)/bin
$(INSTTOOL) -m 755 ../../bin/doxywizard $(INSTALL)/bin
FORCE:
#
#
#
# Copyright (C) 1997-2000 by Dimitri van Heesch.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby
# granted. No representations are made about the suitability of this software
# for any purpose. It is provided "as is" without express or implied warranty.
# See the GNU General Public License for more details.
#
# project file for the doxywizard project
# special template configuration file because we use flex
TEMPLATE = doxywizard.t
# executable to generate
TARGET = ../../bin/doxywizard
# configure options
CONFIG = qt warn_on $extraopts
# header file for the project
HEADERS = doxywizard.h \
config.h \
version.h \
pagewidget.h \
inputstring.h \
inputbool.h \
inputstrlist.h \
inputint.h \
pixmaps.h
# source flle for the project
SOURCES = doxywizard.cpp \
config.cpp \
version.cpp \
pagewidget.cpp \
inputstring.cpp \
inputbool.cpp \
inputstrlist.cpp \
inputint.cpp \
pixmaps.cpp
# where to put the objects
OBJECTS_DIR = obj
# where to put the intermediate moc stuff
MOC_DIR = moc
# extra C++ compiler options
TMAKE_CXXFLAGS = -DDOXYWIZARD
#
#
#
# Copyright (C) 2000 by Dimitri van Heesch.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby
# granted. No representations are made about the suitability of this software
# for any purpose. It is provided "as is" without express or implied warranty.
# See the GNU General Public License for more details.
#!
#! wizard.t: This is a custom template for building doxywizard
#!
#$ IncludeTemplate("app.t");
LEX = flex
YACC = bison
#${
sub GenerateDep {
my($obj,$src,$dep) = @_;
my(@objv,$srcv,$i,$s,$o,$d,$c);
@objv = split(/\s+/,$obj);
@srcv = split(/\s+/,$src);
for $i ( 0..$#objv ) {
$s = $srcv[$i];
$o = $objv[$i];
next if $s eq "";
$text .= $o . ": " . $s;
$text .= " ${linebreak}\n\t\t" . $dep if $dep ne "";
if ( $moc_output{$s} ne "" ) {
$text .= " ${linebreak}\n\t\t" . $moc_output{$s};
}
$d = &make_depend($s);
$text .= " ${linebreak}\n\t\t" . $d if $d ne "";
$text .= "\n";
}
chop $text;
}
#$}
####################
#$ GenerateDep("config.cpp","config.l");
$(LEX) -PconfigYY -t config.l >config.cpp
/******************************************************************************
*
*
*
* Copyright (C) 2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#include <stdio.h>
#include <qmainwindow.h>
#include <qpopupmenu.h>
#include <qfileinfo.h>
#include <qmenubar.h>
#include <qstatusbar.h>
#include <qfiledialog.h>
#include <qmessagebox.h>
#include <qapplication.h>
#include <qwhatsthis.h>
#include <qlayout.h>
#include <qtabwidget.h>
#include <qtoolbar.h>
#include <qtoolbutton.h>
#include "doxywizard.h"
#include "pagewidget.h"
#include "inputbool.h"
#include "inputstring.h"
#include "inputstrlist.h"
#include "inputint.h"
#include "config.h"
#include "version.h"
#include "pixmaps.h"
QString configFileName;
const int messageTimeout = 4000; //!< status bar message timeout in millisec.
//-------------------------------------------------------------------------
static bool loadConfig( QString loadFile )
{
QFileInfo fi( loadFile );
if ( !fi.exists() )
{
QMessageBox::warning(0,
"Warning","Input file "+loadFile+
" does not exist! Starting new file.",
"ok"
);
return FALSE;
}
QFile f( loadFile );
if ( !f.open(IO_ReadOnly) )
{
QMessageBox::warning(0,
"Warning","Cannot open input "+loadFile+
" for reading!.",
"abort"
);
exit(1);
}
// set config values to their defaults
Config::init();
// read file into a string buffer
int fsize = fi.size();
QCString contents(fsize+1); // add room for \0 terminator
f.readBlock(contents.data(),fsize);
contents[fsize]='\0';
// parse the config file
// this will initialize the various Config data members
parseConfig(contents);
configStrToVal();
f.close();
return TRUE;
}
static bool saveConfig( QString saveFile )
{
QFile f( saveFile );
if ( !f.open(IO_WriteOnly) )
{
QMessageBox::warning(0,
"Warning","Cannot open file "+saveFile+
" for writing. Nothing saved!.",
"ok"
);
return FALSE; // failure
}
writeTemplateConfig(&f,TRUE); // write brief config file
return TRUE; // success
}
//--------------------------------------------------------------------------
Wizard::Wizard(int argc,char **argv) :
QMainWindow( 0, (QCString)"DoxyWizard v"+versionString )
{
// File popupmenu
hasChanged=FALSE;
fileTools = new QToolBar( this, "file operations" );
fileTools->setLabel( "File Operations" );
new QToolButton( QPixmap( file_xpm ), "New File", QString::null,
this, SLOT(newFile()), fileTools, "new file" );
//QToolButton * fileOpen =
new QToolButton( QPixmap( fileopen_xpm ), "Open File", QString::null,
this, SLOT(loadFile()), fileTools, "open file" );
//QToolButton * fileSave =
new QToolButton( QPixmap( filesave_xpm ), "Save File", QString::null,
this, SLOT(saveFile()), fileTools, "save file" );
QWhatsThis::whatsThisButton( fileTools );
QPopupMenu* file = new QPopupMenu;
file->insertItem( QIconSet(QPixmap(file_xpm)),
"&New", this, SLOT(newFile()), CTRL+Key_N );
file->insertItem( QIconSet(QPixmap(fileopen_xpm)),
"&Load", this, SLOT(loadFile()), CTRL+Key_O );
file->insertSeparator();
file->insertItem( QIconSet(QPixmap(filesave_xpm)),
"&Save", this, SLOT(saveFile()), CTRL+Key_S );
file->insertItem( "&Save as ...", this, SLOT(saveAsFile()) );
file->insertSeparator();
file->insertItem( "&Quit", this, SLOT(quit()), CTRL+Key_Q );
// Doxygen popupmenu
//QPopupMenu* doxygen = new QPopupMenu;
//int itemIndex = doxygen->insertItem( "&Run" );
//doxygen->setWhatsThis ( itemIndex, "Run doxygen with the current configuration file..." );
//doxygen->setItemEnabled( itemIndex, FALSE );
// Help popupmenu
QPopupMenu* help = new QPopupMenu;
help->insertItem( "&About", this, SLOT(about()), Key_F1 );
help->insertItem( "What's &This", this , SLOT(whatsThis()), SHIFT+Key_F1);
// menubar definition
menuBar()->insertItem( "&File", file );
//menuBar()->insertItem( "&Doxygen", doxygen );
menuBar()->insertSeparator();
menuBar()->insertItem( "&Help", help );
statusBar()->message("Welcome to DoxyWizard",messageTimeout);
cw = new ConfigFile( this );
connect(cw,SIGNAL(changed()),this,SLOT(changed()));
setCentralWidget( cw );
cw->show();
if (argc==2)
{
loadFile(argv[1]);
}
else
{
newFile();
}
refreshCaption();
resize( 640, 480 );
}
void Wizard::newFile()
{
if (hasChanged)
{
switch( QMessageBox::warning( this, "DoxyWizard", "Start a new file and lose changes?\n",
"Yes", "No", 0, 0, 1 ))
{
case 0:
break;
default: // command aborted by the user
return;
}
}
Config::init();
configFileName="Doxyfile";
cw->init();
}
void Wizard::loadFile(const char *fileName)
{
if (fileName==0)
{
configFileName = QFileDialog::getOpenFileName();
}
else
{
configFileName = fileName;
}
if ( !configFileName.isNull() )
{
//initData( configFileName );
loadConfig(configFileName);
cw->init();
statusBar()->message(configFileName, messageTimeout);
}
}
void Wizard::loadFile()
{
if (hasChanged)
{
switch( QMessageBox::warning(
this, "DoxyWizard", "Load a new file and lose changes?\n",
"Yes", "No", 0, 0, 1 ))
{
case 0:
break;
default: // command aborted by the user
return;
}
}
loadFile(0);
}
void Wizard::saveFile()
{
//printf("configFileName=`%s'\n",configFileName.data());
if (configFileName.isEmpty())
{
saveAsFile();
return;
}
else
{
saveConfig(configFileName);
statusBar()->message(configFileName + " saved", messageTimeout);
}
hasChanged = FALSE;
refreshCaption();
}
void Wizard::saveAsFile()
{
configFileName = QFileDialog::getSaveFileName();
if (configFileName.isNull())
{
statusBar()->message("Save aborted", messageTimeout );
return; // operation cancelled by the user
}
saveConfig(configFileName);
statusBar()->message("Saved as "+ configFileName, messageTimeout );
hasChanged = FALSE;
refreshCaption();
}
void Wizard::quit()
{
if (hasChanged)
{
switch( QMessageBox::warning( this, "DoxyWizard", "Quit and lose changes?\n",
"Yes", "No", 0, 0, 1 ))
{
case 0:
qApp->quit();
break;
case 1:
break;
}
}
else
{
qApp->quit();
}
}
void Wizard::changed()
{
hasChanged = TRUE;
refreshCaption();
}
void Wizard::refreshCaption()
{
QString s;
if (hasChanged) s=" *";
setCaption("Doxywizard - ["+configFileName+s+"]");
}
void Wizard::about()
{
QMessageBox::about(this, "DoxyWizard",
"<qt><center>A tool to create and edit configuration files "
"that can be read by doxygen.</center><p>"
"<center>Written by Dimitri van Heesch</center><p>"
"<center>(c) 2000</center></qt>"
);
}
//----------------------------------------------------------------------
ConfigFile::ConfigFile( QWidget *parent ) : QWidget( parent )
{
QVBoxLayout *layout = new QVBoxLayout( this );
// QTabWidget definition
QTabWidget *tab = new QTabWidget( this );
layout->addWidget( tab );
#CONFIG Widgets0
#CONFIG Widgets1
}
ConfigFile::~ConfigFile()
{
}
#CONFIG WidgetSlotImpl
void ConfigFile::init()
{
#CONFIG WidgetInit
}
//----------------------------------------------------------------------
int main(int argc,char **argv)
{
QApplication::setColorSpec( QApplication::NormalColor );
QApplication app(argc,argv);
Wizard wizard(argc,argv);
app.setMainWidget( &wizard );
wizard.show();
return app.exec();
}
/******************************************************************************
*
*
*
* Copyright (C) 2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#ifndef _DOXWIZARD_H
#define _DOXWIZARD_H
#include <qmainwindow.h>
class QToolBar;
class ConfigFile;
class InputBool;
class InputString;
class InputStrList;
class InputFile;
class InputDir;
class InputInt;
class Wizard : public QMainWindow
{
Q_OBJECT
public:
Wizard(int argc,char **argv);
~Wizard(){};
void loadFile(const char *s);
private slots:
void newFile();
void loadFile();
void saveFile();
void saveAsFile();
void quit();
void changed();
void about();
signals:
private:
void refreshCaption();
QToolBar *fileTools;
bool hasChanged;
ConfigFile *cw;
};
class ConfigFile : public QWidget
{
Q_OBJECT
public:
ConfigFile(QWidget *parent=0);
~ConfigFile();
void init();
signals:
void changed();
private slots:
#CONFIG WidgetSlots
private:
#CONFIG WidgetVars
};
#endif
/******************************************************************************
*
*
*
* Copyright (C) 2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#include "inputbool.h"
#include "pagewidget.h"
#include <qwindowsstyle.h>
InputBool::InputBool( const QString & text, PageWidget * parent, bool &flag )
: QCheckBox( text, parent->getLayout() ), state(flag)
{
QWindowsStyle *winStyle = new QWindowsStyle();
setChecked( flag );
setStyle( winStyle );
setMinimumSize( sizeHint() );
connect( this, SIGNAL(toggled(bool)), SLOT(setState(bool)) );
parent->addWidget(this);
}
void InputBool::init()
{
setChecked(state);
}
void InputBool::setState( bool s )
{
if (state!=s) emit changed();
state=s;
}
/******************************************************************************
*
*
*
* Copyright (C) 2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#ifndef _INPUTBOOL_H
#define _INPUTBOOL_H
#include <qcheckbox.h>
class PageWidget;
class InputBool : public QCheckBox
{
Q_OBJECT
public:
InputBool( const QString &text, PageWidget *parent, bool &flag );
~InputBool(){};
void init();
signals:
void changed();
private slots:
void setState(bool);
private:
bool &state;
};
#endif
/******************************************************************************
*
*
*
* Copyright (C) 2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#include "inputint.h"
#include "pagewidget.h"
#include <stdio.h>
#include <stdlib.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qwindowsstyle.h>
#include <qspinbox.h>
InputInt::InputInt( const QString & label, PageWidget *parent, int &val, int minVal,int maxVal )
: QWidget( parent->getLayout() ), m_val(val), m_minVal(minVal), m_maxVal(maxVal)
{
QHBoxLayout *layout = new QHBoxLayout( this, 5 );
lab = new QLabel( label, this );
lab->setMinimumSize( lab->sizeHint() );
sp = new QSpinBox( minVal,maxVal,1,this );
sp->setMinimumSize( sp->sizeHint() );
init();
layout->addWidget( lab );
layout->addWidget( sp );
layout->addStretch(1);
layout->activate();
setMinimumSize( sizeHint() );
connect(sp, SIGNAL(valueChanged(int)),
this, SLOT(valueChanged(int)) );
parent->addWidget(this);
}
void InputInt::valueChanged(int val)
{
if (val!=m_val) emit changed();
m_val = val;
}
void InputInt::setEnabled(bool state)
{
lab->setEnabled(state);
sp->setEnabled(state);
}
void InputInt::init()
{
m_val = QMAX(m_minVal,m_val);
m_val = QMIN(m_maxVal,m_val);
sp->setValue(m_val);
}
/******************************************************************************
*
*
*
* Copyright (C) 2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#ifndef _INPUTINT_H
#define _INPUTINT_H
#include <qwidget.h>
#include <qstring.h>
class QLabel;
class QSpinBox;
class PageWidget;
class InputInt : public QWidget
{
Q_OBJECT
public:
InputInt( const QString &text, PageWidget *parent, int &val,
int minVal, int maxVal );
~InputInt(){};
void setEnabled(bool);
void init();
private:
QLabel *lab;
QSpinBox *sp;
int &m_val;
int m_minVal;
int m_maxVal;
signals:
void changed();
private slots:
void valueChanged(int val);
};
#endif
/******************************************************************************
*
*
*
* Copyright (C) 2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#include "inputstring.h"
#include "pagewidget.h"
#include "pixmaps.h"
#include <qlabel.h>
#include <qlayout.h>
#include <qlineedit.h>
#include <qwindowsstyle.h>
#include <qcstring.h>
#include <qpushbutton.h>
#include <qfiledialog.h>
#include <qcombobox.h>
#include <qtooltip.h>
InputString::InputString( const QString & label,
PageWidget *parent, QCString &s, StringMode m )
: QWidget( parent->getLayout() ), str(s), sm(m), m_values(0), m_index(0)
{
if (m==StringFixed)
{
QHBoxLayout *layout = new QHBoxLayout( this, 5);
lab = new QLabel( label, this );
lab->setMinimumSize( lab->sizeHint() );
layout->addWidget( lab );
com = new QComboBox( this );
layout->addWidget( com );
layout->addStretch( 1 );
le=0;
br=0;
layout->activate();
setMinimumSize( sizeHint() );
}
else
{
QGridLayout *layout = new QGridLayout( this, 1, m==StringFree ? 1 : 3, 5 );
lab = new QLabel( label, this );
lab->setMinimumSize( lab->sizeHint() );
layout->addWidget( lab,0,0 );
le = new QLineEdit( this );
le->setMinimumSize( le->sizeHint() );
le->setText( s );
layout->addWidget( le,0,1 );
if (m==StringFile || m==StringDir)
{
QPixmap pixmap = QPixmap(m==StringFile ?
file_xpm :
folder_xpm );
br = new QPushButton( this );
br->setPixmap(pixmap);
br->setMinimumSize( br->sizeHint() );
if (m==StringFile)
QToolTip::add(br,"Browse to a file");
else
QToolTip::add(br,"Browse to a folder");
layout->addWidget( br,0,2 );
}
else
{
br=0;
}
com=0;
layout->activate();
setMinimumSize( sizeHint() );
}
if (le) connect( le, SIGNAL(textChanged(const QString&)),
this, SLOT(textChanged(const QString&)) );
if (br) connect( br, SIGNAL(clicked()), this, SLOT(browse()) );
if (com) connect( com, SIGNAL(activated(const QString &)),
this, SLOT(textChanged(const QString &)) );
parent->addWidget(this);
}
InputString::~InputString()
{
if (m_values) delete m_values;
}
void InputString::textChanged(const QString &s)
{
if (str!=(const char *)s)
{
str = s;
emit changed();
}
}
void InputString::setEnabled(bool state)
{
lab->setEnabled(state);
if (le) le->setEnabled(state);
if (br) br->setEnabled(state);
if (com) com->setEnabled(state);
}
void InputString::browse()
{
if (sm==StringFile)
{
QString fileName = QFileDialog::getOpenFileName();
if (!fileName.isNull())
{
le->setText( fileName );
if (str!=(const char *)le->text())
{
str = le->text();
emit changed();
}
}
}
else // sm==StringDir
{
QString dirName = QFileDialog::getExistingDirectory();
if (!dirName.isNull())
{
le->setText( dirName );
if (str!=(const char *)le->text())
{
str = le->text();
emit changed();
}
}
}
}
void InputString::clear()
{
le->setText("");
if (!str.isEmpty())
{
emit changed();
str = "";
}
}
void InputString::addValue(const char *s)
{
if (sm==StringFixed)
{
if (m_values==0) m_values = new QDict<int>;
m_values->setAutoDelete(TRUE);
m_values->insert(s,new int(m_index++));
com->insertItem(s);
}
}
void InputString::init()
{
if (sm==StringFixed)
{
int *itemIndex = m_values->find(str);
if (itemIndex)
{
com->setCurrentItem(*itemIndex);
}
else
{
com->setCurrentItem(0);
}
}
else
{
le->setText(str);
}
}
/******************************************************************************
*
*
*
* Copyright (C) 2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#ifndef _INPUTSTRING_H
#define _INPUTSTRING_H
#include <qwidget.h>
#include <qstring.h>
#include <qdict.h>
class QLabel;
class QLineEdit;
class QPushButton;
class QComboBox;
class PageWidget;
class InputString : public QWidget
{
Q_OBJECT
public:
enum StringMode { StringFree=0,
StringFile=1,
StringDir=2,
StringFixed=3
};
InputString( const QString &text, PageWidget *parent, QCString &s,
StringMode m=StringFree );
~InputString();
void setEnabled(bool);
void addValue(const char *s);
void init();
private:
QLabel *lab;
QLineEdit *le;
QPushButton *br;
QComboBox *com;
QCString &str;
StringMode sm;
QDict<int> *m_values;
int m_index;
signals:
void changed();
private slots:
void textChanged(const QString&);
void browse();
void clear();
};
#endif
/******************************************************************************
*
*
*
* Copyright (C) 2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#include "inputstrlist.h"
#include "pagewidget.h"
#include "pixmaps.h"
#include <qlabel.h>
#include <qlayout.h>
#include <qlineedit.h>
#include <qpushbutton.h>
#include <qlistbox.h>
#include <qstrlist.h>
#include <qstringlist.h>
#include <qfiledialog.h>
#include <qtooltip.h>
InputStrList::InputStrList( const QString & label,
PageWidget *parent, QStrList &sl, ListMode lm)
: QWidget(parent->getLayout()), strList(sl)
{
QGridLayout *layout = new QGridLayout( this, 2, 2, 5 );
lab = new QLabel( label, this );
lab->setMinimumSize( lab->sizeHint() );
layout->addWidget( lab,0,0 );
QWidget *dw = new QWidget(this); /* dummy widget used for layouting */
QHBoxLayout *boxlayout = new QHBoxLayout( dw, 0, 5 );
le = new QLineEdit( dw );
le->setMinimumSize( le->sizeHint() );
boxlayout->addWidget( le, 1 );
add = new QPushButton( dw );
add->setPixmap( QPixmap( add_xpm ));
add->setMinimumSize( add->sizeHint() );
QToolTip::add(add,"Add item");
boxlayout->addWidget( add );
del = new QPushButton( dw );
del->setPixmap( QPixmap( del_xpm ));
del->setMinimumSize( del->sizeHint() );
QToolTip::add(del,"Delete selected item");
boxlayout->addWidget( del );
upd = new QPushButton( dw );
upd->setPixmap( QPixmap( update_xpm ));
upd->setMinimumSize( upd->sizeHint() );
QToolTip::add(upd,"Update selected item");
boxlayout->addWidget( upd );
lb = new QListBox( this );
lb->setMinimumSize(400,100);
init();
lb->setVScrollBarMode(QScrollView::Auto);
lb->setHScrollBarMode(QScrollView::Auto);
brFile=0;
brDir=0;
if (lm!=ListString)
{
if (lm&ListFile)
{
brFile = new QPushButton(dw);
brFile->setPixmap( QPixmap(file_xpm) );
brFile->setMinimumSize(brFile->sizeHint());
QToolTip::add(brFile,"Browse to a file");
boxlayout->addWidget( brFile );
}
if (lm&ListDir)
{
brDir = new QPushButton(dw);
brDir->setPixmap( QPixmap(folder_xpm) );
brDir->setMinimumSize(brDir->sizeHint());
QToolTip::add(brDir,"Browse to a folder");
boxlayout->addWidget( brDir );
}
}
layout->addWidget( dw, 0,1 );
layout->addWidget( lb,1,1 );
layout->activate();
setMinimumSize( sizeHint() );
connect(le, SIGNAL(returnPressed()),
this, SLOT(addString()) );
connect(add, SIGNAL(clicked()),
this, SLOT(addString()) );
connect(del, SIGNAL(clicked()),
this, SLOT(delString()) );
connect(upd, SIGNAL(clicked()),
this, SLOT(updateString()) );
if (brFile)
{
connect(brFile, SIGNAL(clicked()),
this, SLOT(browseFiles()));
}
if (brDir)
{
connect(brDir, SIGNAL(clicked()),
this, SLOT(browseDir()));
}
connect(lb, SIGNAL(selected(const QString &)),
this, SLOT(selectText(const QString &)));
parent->addWidget(this);
strList=sl;
}
void InputStrList::addString()
{
if (!le->text().isEmpty())
{
lb->insertItem(le->text());
strList.append(le->text());
emit changed();
le->clear();
}
}
void InputStrList::delString()
{
if (lb->currentItem()!=-1)
{
int itemIndex = lb->currentItem();
lb->removeItem(itemIndex);
strList.remove(itemIndex);
emit changed();
}
}
void InputStrList::updateString()
{
if (lb->currentItem()!=-1 && !le->text().isEmpty())
{
lb->changeItem(le->text(),lb->currentItem());
strList.insert(lb->currentItem(),le->text());
strList.remove(lb->currentItem()+1);
emit changed();
}
}
void InputStrList::selectText(const QString &s)
{
le->setText(s);
}
void InputStrList::setEnabled(bool state)
{
lab->setEnabled(state);
le->setEnabled(state);
add->setEnabled(state);
del->setEnabled(state);
upd->setEnabled(state);
lb->setEnabled(state);
if (brFile) brFile->setEnabled(state);
if (brDir) brDir->setEnabled(state);
}
void InputStrList::browseFiles()
{
QStringList fileNames = QFileDialog::getOpenFileNames();
if (!fileNames.isEmpty())
{
QStringList::Iterator it;
for ( it= fileNames.begin(); it != fileNames.end(); ++it )
{
lb->insertItem(*it);
strList.append(*it);
emit changed();
}
le->setText(*fileNames.begin());
}
}
void InputStrList::browseDir()
{
QString dirName = QFileDialog::getExistingDirectory();
if (!dirName.isNull())
{
lb->insertItem(dirName);
strList.append(dirName);
emit changed();
le->setText(dirName);
}
}
void InputStrList::init()
{
le->clear();
lb->clear();
char *s = strList.first();
while (s)
{
lb->insertItem(s);
s = strList.next();
}
}
/******************************************************************************
*
*
*
* Copyright (C) 2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#ifndef _INPUTSTRLIST_H
#define _INPUTSTRLIST_H
#include <qwidget.h>
#include <qstring.h>
class QLabel;
class QLineEdit;
class QPushButton;
class QListBox;
class PageWidget;
class QStrList;
class InputStrList : public QWidget
{
Q_OBJECT
public:
enum ListMode { ListString=0,
ListFile=1,
ListDir=2,
ListFileDir=ListFile|ListDir
};
InputStrList( const QString &text, PageWidget *parent,
QStrList &sl, ListMode v=ListString );
~InputStrList() {};
void setEnabled(bool);
void init();
private:
QLabel *lab;
QLineEdit *le;
QPushButton *add;
QPushButton *del;
QPushButton *upd;
QPushButton *brFile;
QPushButton *brDir;
QListBox *lb;
QStrList &strList;
signals:
void changed();
private slots:
void addString();
void delString();
void updateString();
void selectText(const QString &s);
void browseFiles();
void browseDir();
};
#endif
/******************************************************************************
*
*
*
* Copyright (C) 2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#include <stdio.h>
#include <qtabwidget.h>
#include <qlayout.h>
#include "pagewidget.h"
FrameLayout::FrameLayout(QWidget *parent,const char *name,WFlags f)
: QFrame(parent,name,f)
{
lay = new QVBoxLayout(this,5,3,name);
}
FrameLayout::~FrameLayout()
{
}
void FrameLayout::addStretch(int stretch)
{
lay->addStretch(stretch);
}
void FrameLayout::addWidget(QWidget *w)
{
lay->addWidget(w);
}
PageWidget::PageWidget( QTabWidget *parent, const char *name )
: QScrollView ( parent,name )
{
// the Qt docs say that one has to insert the viewport() as a parent
// here but this does not work! Insert 0 does give the proper result!
lay = new FrameLayout(this);
addChild(lay);
setVScrollBarMode(QScrollView::Auto);
setHScrollBarMode(QScrollView::AlwaysOff);
m_parent=parent;
m_parent->addTab( this, name );
}
void PageWidget::addStretch(int stretch=0)
{
lay->addStretch(stretch);
//printf("Viewport SizeHint %d,%d\n",viewport()->sizeHint().width(),viewport()->sizeHint().height());
}
void PageWidget::addWidget(QWidget *w)
{
//printf("Adding widget height=%d\n",w->sizeHint().height());
lay->addWidget(w);
}
QWidget *PageWidget::getLayout() const
{
return lay;
}
void PageWidget::resizeEvent(QResizeEvent *e)
{
QScrollView::resizeEvent(e);
//printf("PageWidget::resizeEvent!\n");
lay->resize(viewport()->width(),QMAX(lay->height(),viewport()->height()));
}
void PageWidget::paintEvent(QPaintEvent *e)
{
QScrollView::paintEvent(e);
//printf("PageWidget::paintEvent()\n");
lay->resize(viewport()->width(),QMAX(lay->height(),viewport()->height()));
}
/******************************************************************************
*
*
*
* Copyright (C) 2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#ifndef _PAGEWIDGET_H
#define _PAGEWIDGET_H
#include <qscrollview.h>
class QTabWidget;
class QVBoxLayout;
class FrameLayout : public QFrame
{
Q_OBJECT
public:
FrameLayout(QWidget *parent=0, const char *name=0, WFlags g=0);
~FrameLayout();
void addStretch(int s=0);
void addWidget(QWidget *w);
private:
QVBoxLayout *lay;
};
class PageWidget : public QScrollView
{
Q_OBJECT
public:
PageWidget( QTabWidget *parent, const char *name );
~PageWidget() {};
//void frameChanged()
//{
// if (!layout()) return;
// layout()->setMargin(frameWidth());
//}
void addStretch(int stretch=0);
void addWidget(QWidget *w);
QWidget *getLayout() const;
protected:
void resizeEvent(QResizeEvent *e);
void paintEvent(QPaintEvent *e);
private:
FrameLayout *lay;
QTabWidget *m_parent;
};
#endif
/******************************************************************************
*
*
*
* Copyright (C) 2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#include "pixmaps.h"
static const char * const folder_xpm_data[] =
{
"16 16 6 1",
". c None",
"b c #ffff00",
"d c #000000",
"* c #999999",
"a c #cccccc",
"c c #ffffff",
"................",
"................",
"..*****.........",
".*ababa*........",
"*abababa******..",
"*cccccccccccc*d.",
"*cbababababab*d.",
"*cabababababa*d.",
"*cbababababab*d.",
"*cabababababa*d.",
"*cbababababab*d.",
"*cabababababa*d.",
"*cbababababab*d.",
"**************d.",
".dddddddddddddd.",
"................"
};
const char **folder_xpm = (const char **)folder_xpm_data;
static const char* const file_xpm_data[] =
{
"16 16 5 1",
". c #7f7f7f",
"# c None",
"c c #000000",
"b c #bfbfbf",
"a c #ffffff",
"################",
"#..........#####",
"#.aaaaaaaab.####",
"#.aaaaaaaaba.###",
"#.aaaaaaaacccc##",
"#.aaaaaaaaaabc##",
"#.aaaaaaaaaabc##",
"#.aaaaaaaaaabc##",
"#.aaaaaaaaaabc##",
"#.aaaaaaaaaabc##",
"#.aaaaaaaaaabc##",
"#.aaaaaaaaaabc##",
"#.aaaaaaaaaabc##",
"#.bbbbbbbbbbbc##",
"#ccccccccccccc##",
"################"
};
const char **file_xpm = (const char **)file_xpm_data;
static const char * const add_xpm_data[] =
{
"16 16 5 1",
". c None",
"* c #0328f9",
"# c #354396",
"a c #353740",
"c c #999999",
"................",
"......###.......",
"......#*ac......",
"......#*ac......",
"......#*ac......",
"......#*ac......",
".######*a#####..",
".#***********ac.",
".#aaaaa*aaaaaac.",
"..cccc#*acccccc.",
"......#*ac......",
"......#*ac......",
"......#*ac......",
"......#aac......",
".......ccc......",
"................"
};
const char **add_xpm = (const char **)add_xpm_data;
static const char * const del_xpm_data[] =
{
"16 16 5 1",
". c None",
"* c #0328f9",
"# c #354396",
"a c #353740",
"c c #999999",
"................",
"................",
"................",
"................",
"................",
"................",
".#############..",
".#***********ac.",
".aaaaaaaaaaaaac.",
"..ccccccccccccc.",
"................",
"................",
"................",
"................",
"................",
"................"
};
const char **del_xpm = (const char **)del_xpm_data;
static char *update_xpm_data[] =
{
"16 16 5 1",
/* colors */
". c #0328f9",
"# c #354396",
"a c #353740",
"b c None",
"c c #999999",
/* pixels */
"bbbbbbbbbbbbbbbb",
"bbbbbbbb#####acb",
"bbbbbbbb#....abb",
"bbc##cbb#...acbb",
"bb#..abb#....abb",
"bc#..abb#.a..acb",
"b#..acbbaac#..ab",
"b#..abbbcbb#..ab",
"b#..abbbbbb#..ab",
"b#..acbbbbc#..ab",
"bc#..#cbbc#..acb",
"bb#...####...acb",
"bbca........acbb",
"bbbbaa....aaccbb",
"bbbbbcaaaaccbbbb",
"bbbbbbbbbbbbbbbb"
};
const char **update_xpm = (const char **)update_xpm_data;
static const char *fileopen_xpm_data[] =
{
"16 13 5 1",
". c #040404",
"# c #808304",
"a c None",
"b c #f3f704",
"c c #f3f7f3",
"aaaaaaaaa...aaaa",
"aaaaaaaa.aaa.a.a",
"aaaaaaaaaaaaa..a",
"a...aaaaaaaa...a",
".bcb.......aaaaa",
".cbcbcbcbc.aaaaa",
".bcbcbcbcb.aaaaa",
".cbcb...........",
".bcb.#########.a",
".cb.#########.aa",
".b.#########.aaa",
"..#########.aaaa",
"...........aaaaa"
};
const char **fileopen_xpm = (const char **)fileopen_xpm_data;
/* XPM */
static const char *filesave_xpm_data[] =
{
"14 14 4 1",
". c #040404",
"# c #808304",
"a c #bfc2bf",
"b c None",
"..............",
".#.aaaaaaaa.a.",
".#.aaaaaaaa...",
".#.aaaaaaaa.#.",
".#.aaaaaaaa.#.",
".#.aaaaaaaa.#.",
".#.aaaaaaaa.#.",
".##........##.",
".############.",
".##.........#.",
".##......aa.#.",
".##......aa.#.",
".##......aa.#.",
"b............."
};
const char **filesave_xpm = (const char **)filesave_xpm_data;
/******************************************************************************
*
*
*
* Copyright (C) 2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#ifndef _PIXMAPS_H
#define _PIXMAPS_H
extern const char** folder_xpm;
extern const char** file_xpm;
extern const char** add_xpm;
extern const char** del_xpm;
extern const char** update_xpm;
extern const char** fileopen_xpm;
extern const char** filesave_xpm;
#endif
char versionString[]="0.1";
#ifndef VERSION_H
#define VERSION_H
extern char versionString[];
#endif
......@@ -26,6 +26,8 @@ f_plf_auto=NO
f_prefix=/usr
f_insttool=install
f_english=NO
f_configgen=NO
f_wizard=NO
while test -n "$1"; do
case $1 in
......@@ -62,6 +64,12 @@ while test -n "$1"; do
--install)
shift; f_insttool=$1
;;
--with-configgen)
f_configgen=YES
;;
--with-doxywizard)
f_wizard=YES
;;
-h | -help | --help)
f_help=y
;;
......@@ -78,7 +86,8 @@ if test "$f_help" = y; then
cat <<EOF
Usage: $0 [--help] [--shared] [--static] [--release] [--debug]
[--perl name] [--make name] [--dot name] [--platform target]
[--prefix dir] [--install name] [--english-only]
[--prefix dir] [--install name] [--english-only]
[--with-configgen] [--with-doxywizard]
Options:
......@@ -111,6 +120,13 @@ Options:
--english-only Include support for English only.
--with-configgen Build the configuration generator. This is only
useful for doxygen developers that want to add
new configuration options.
--with-doxywizard Build the GUI frontend for doxygen. This
requires Qt 2.x.x
EOF
test "$f_error" = y && exit 1
exit 0;
......@@ -316,6 +332,7 @@ TMAKE = $PWD/tmake/bin/tmake
MAKE = $f_make
PERL = $f_perl
RM = rm -f
CP = cp
VERSION = `cat VERSION`
INSTALL = $f_prefix
INSTTOOL = $f_insttool
......@@ -343,8 +360,9 @@ TMAKE_CXXFLAGS = -DENGLISH_ONLY
EOF
fi
for i in Makefile.in src/Makefile.in examples/Makefile.in \
doc/Makefile.in ; do
f_inmakefiles="Makefile.in src/Makefile.in examples/Makefile.in doc/Makefile.in addon/configgen/Makefile.in addon/doxywizard/Makefile.in"
for i in $f_inmakefiles ; do
SRC=$i
DST=`echo $i|sed 's%\(.*\).in$%\1%'`
TIME=`date`
......@@ -355,11 +373,26 @@ for i in Makefile.in src/Makefile.in examples/Makefile.in \
EOF
cat .makeconfig $SRC >> $DST
if test $i = Makefile.in; then
echo "configgen:" >> $DST
if test $f_configgen = YES; then
echo " $(MAKE) -C addon/configgen" >> $DST
fi
echo "doxywizard:" >> $DST
if test $f_wizard = YES; then
echo " \$(MAKE) -C addon/doxywizard" >> $DST
fi
echo "doxywizard_install:" >> $DST
if test $f_wizard = YES; then
echo " \$(MAKE) -C addon/doxywizard install" >> $DST
fi
fi
echo " Created $DST from $SRC..."
done
for i in src/doxygen.pro.in src/doxytag.pro.in \
src/doxysearch.pro.in ; do
f_inprofiles="src/doxygen.pro.in src/doxytag.pro.in src/doxysearch.pro.in addon/configgen/configgen.pro.in addon/doxywizard/doxywizard.pro.in"
for i in $f_inprofiles ; do
SRC=$i
DST=`echo $i|sed 's%\(.*\).in$%\1%'`
TIME=`date`
......
......@@ -62,6 +62,7 @@ documentation:
<li> \refitem cmde \e
<li> \refitem cmdendcode \endcode
<li> \refitem cmdendhtmlonly \endhtmlonly
<li> \refitem cmdendif \endif
<li> \refitem cmdendlatexonly \endlatexonly
<li> \refitem cmdendlink \endlink
<li> \refitem cmdendverbatim \endverbatim
......@@ -74,6 +75,7 @@ documentation:
<li> \refitem cmdfile \file
<li> \refitem cmdfn \fn
<li> \refitem cmdhtmlonly \htmlonly
<li> \refitem cmdif \if
<li> \refitem cmdimage \image
<li> \refitem cmdinclude \include
<li> \refitem cmdingroup \ingroup
......@@ -241,10 +243,12 @@ Doxygen. Unrecognized commands are treated as normal text.
in a list. The source code is scanned for documented members and classes.
If any are found, the names are cross-referenced with the documentation.
Source files or directories can be specified using the
\c EXAMPLE_PATH tag of Doxygen's configuration file.
\ref cfg_example_path "EXAMPLE_PATH"
tag of Doxygen's configuration file.
If \<file-name\> itself is not unique for the set of example files specified
by the \c EXAMPLE_PATH tag, you can include part of the absolute path
by the
\ref cfg_example_path "EXAMPLE_PATH" tag, you can include part of the absolute path
to disambiguate it.
If more that one source file is needed for the example,
......@@ -553,6 +557,16 @@ Doxygen. Unrecognized commands are treated as normal text.
a deprecated entity. Can be used to describe alternatives,
expected life span, etc.
<hr>
\subsection cmdendif \endif
\addindex \endif
Ends a conditional section that was started with \c \if.
For each \c \if one and only one matching \c \endif must follow.
\sa \ref cmdif "\\if"
<hr>
\subsection cmdexception \exception <exception-object> { exception description }
......@@ -571,6 +585,37 @@ Doxygen. Unrecognized commands are treated as normal text.
\par Note:
the tag \\exceptions is a synonym for this tag.
<hr>
\subsection cmdif \if <section-label>
\addindex \if
Starts a conditional documentation section. The section ends
with a matching \c \endif command. A conditional section is
disable by default. To enable it you must put the
section-label after the \ref cfg_enabled_sections "ENABLED_SECTIONS"
tag in the configuration
file. Conditional blocks can be nested. A nested section is
only enabled if all enclosing sections are enabled as well.
\par Example:
\verbatim
/*! Uncoditionally shown documentation.
* \if Cond1
* Only included if Cond1 is set.
* \endif
* \if Cond2
* Only included if Cond2 is set.
* \if Cond3
* Only included if Cond2 and Cond3 are set.
* \endif
* More text.
* \endif
* Unconditional text.
*/
\endverbatim
\sa section \ref cmdendif "\\endif".
<hr>
\subsection cmdinvariant \invariant { description of invariant }
......@@ -832,8 +877,9 @@ Doxygen. Unrecognized commands are treated as normal text.
verbatim including it in the documentation (as the \\include command does).
This is useful if you want to divide the source file into smaller pieces and
add documentation between the pieces.
Source files or directories can be specified using the \c EXAMPLE_PATH tag
of Doxygen's configuration file.
Source files or directories can be specified using the
\ref cfg_example_path "EXAMPLE_PATH"
tag of Doxygen's configuration file.
The class and member declarations and definitions inside the code fragment
are `remembered' during the parsing of the comment block that contained
......@@ -863,22 +909,26 @@ Doxygen. Unrecognized commands are treated as normal text.
This command can be used to include a source file as a block of code.
The command takes the name of an include file as an argument.
Source files or directories can be specified using the
\c EXAMPLE_PATH tag of Doxygen's configuration file.
\ref cfg_example_path "EXAMPLE_PATH"
tag of Doxygen's configuration file.
If \<file-name\> itself is not unique for the set of example files specified
by the \c EXAMPLE_PATH tag, you can include part of the absolute path
to disambiguate it.
by the
\ref cfg_example_path "EXAMPLE_PATH" tag, you can include part
of the absolute path to disambiguate it.
Using the \\include command is equivalent to inserting the file into
the documentation block and surrounding it
with \\code and \\endcode commands.
with \ref cmdcode "\\code" and \ref cmdendcode "\\endcode" commands.
The main purpose of the \\include command is to avoid code
duplication in case of example blocks that consist of multiple
source and header files.
For a line by line description of a source files use the
\\dontinclude command in combination with the \\line, \\skip, \\skipline,
\ref cmddontinclude "\\dontinclude" command in combination with
the \ref cmdline "\\line", \ref cmdskip "\\skip",
\ref cmdskipline "\\skipline",
and \\until commands.
\sa section \ref cmdexample "\\example" and \ref cmddontinclude "\\dontinclude".
......
......@@ -68,6 +68,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_doc_abspath DOC_ABSPATH
<li> \refitem cfg_doc_url DOC_URL
<li> \refitem cfg_enable_preprocessing ENABLE_PREPROCESSING
<li> \refitem cfg_enabled_sections ENABLED_SECTIONS
<li> \refitem cfg_example_path EXAMPLE_PATH
<li> \refitem cfg_example_patterns EXAMPLE_PATTERNS
<li> \refitem cfg_exclude EXCLUDE
......@@ -370,6 +371,13 @@ description.
the \c TAB_SIZE tag can be used to set the number of spaces in a tab.
Doxygen uses this value to replace tabs by spaces in code fragments.
\anchor cfg_enabled_sections
<dt>\c ENABLED_SECTIONS <dd>
\addindex ENABLED_SECTIONS
The \c ENABLE_SECTIONS tag can be used to enable conditional
documentation sections, marked by \ref cmdif "\\if" \<section-label\> ...
\ref cmdendif "\\endif" blocks.
</dl>
\subsection config_input Input related options
......
Name: doxygen
Version: 1.1.2-20000417
Version: 1.1.2-20000423
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
......
......@@ -1623,8 +1623,8 @@ void ClassDef::determineImplUsageRelation()
bool found=FALSE;
while ((i=re.match(type,p,&l))!=-1 && !found) // for each class name in the type
{
ClassDef *cd=getClass(name()+"::"+type.mid(i,l));
if (cd==0) cd=getClass(type.mid(i,l)); // TODO: also try inbetween scopes!
ClassDef *cd=getResolvedClass(name()+"::"+type.mid(i,l));
if (cd==0) cd=getResolvedClass(type.mid(i,l)); // TODO: also try inbetween scopes!
if (cd /*&& cd->isLinkable()*/) // class exists and is linkable
{
found=TRUE;
......
......@@ -18,6 +18,9 @@
#ifndef CLASSLIST_H
#define CLASSLIST_H
#include <qlist.h>
#include <qdict.h>
#include "classdef.h"
class ClassList : public QList<ClassDef>
......@@ -35,4 +38,11 @@ class ClassListIterator : public QListIterator<ClassDef>
ClassListIterator(const ClassList &list);
};
class ClassDict : public QDict<ClassDef>
{
public:
ClassDict(int size) : QDict<ClassDef>(size) {}
~ClassDict() {}
};
#endif
......@@ -10,9 +10,6 @@
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
#ifndef CONFIG_H
......@@ -34,92 +31,91 @@ struct Config
{
static void init();
static QCString projectName; // the name of the project
static QCString projectNumber; // the number of the project
static QCString outputDir; // the global output directory
static QCString htmlOutputDir; // the directory to put the HTML files
static QCString latexOutputDir; // the directory to put the Latex files
static QCString manOutputDir; // the directory to put the man pages
static QCString rtfOutputDir; // the directory to put the RTF files
static QCString outputLanguage; // the output language
static QCString headerFile; // the name of the personal HTML header
static QCString latexHeaderFile; // the name of the personal LaTeX header
static QCString footerFile; // the name of the personal HTML footer
static QCString cgiName; // the name of the CGI binary
static QCString cgiURL; // the absolute URL to the CGI binary
static QCString docURL; // the absolute URL to the documentation
static QCString binAbsPath; // the absolute path to the doxysearch
static QCString docAbsPath; // the absolute path to the documentation
static QCString perlPath; // the absolute path to perl
static QCString genTagFile; // the tag file to generate
static QCString inputFilter; // a filter command that is applied to input files
static QCString paperType; // the page type to generate docs for
static QCString manExtension; // extension the man page files
static QCString htmlStyleSheet; // user defined cascading style sheet
static QStrList ignorePrefixList; // list of prefixes to ignore for the alphabetical index
static QStrList includePath; // list of include paths
static QStrList examplePath; // list of example paths
static QStrList imagePath; // list of image paths
static QStrList inputSources; // list of input files
static QStrList excludeSources; // list of files to exclude from the input
static QStrList filePatternList; // list of file patterns
static QStrList excludePatternList; // list of patterns to exclude from input
static QStrList examplePatternList; // list of example patterns
static QStrList imagePatternList; // list of image paths
static QStrList tagFileList; // list of tag files
static QStrList extDocPathList; // list of external doc. directories.
static QStrList predefined; // list of predefined macro names.
static QStrList extraPackageList; // list of extra LaTeX packages.
static QStrList stripFromPath; // list of candidates to strip from the file path
static QStrList sectionFilterList; // list of section filters to are enabled
static bool quietFlag; // generate progress messages flag
static bool warningFlag; // generate warnings flag
static bool recursiveFlag; // scan directories recursively
static bool allExtFlag; // include all external classes flag
static bool searchEngineFlag; // generate search engine flag
static bool extractAllFlag; // gererate docs for all classes flag
static bool extractPrivateFlag; // generate docs for private members flag
static bool noIndexFlag; // generate condensed index flag
static bool generateHtml; // generate HTML output
static bool generateLatex; // generate Latex output
static bool generateMan; // generate Man pages
static bool preprocessingFlag; // enable preprocessing
static bool briefMemDescFlag; // enable `inline' brief member descr.
static bool hideMemberFlag; // hide undocumented members.
static bool hideClassFlag; // hide undocumented members.
static bool searchIncludeFlag; // search for included files
static bool macroExpansionFlag; // expand macros in the source.
static bool onlyPredefinedFlag; // expand only predefined macros
static bool fullPathNameFlag; // using full path name in output
static bool classDiagramFlag; // enable the generation of class diagrams.
static bool compactLatexFlag; // generate compact LaTeX documentation.
static bool repeatBriefFlag; // repeat brief descriptions.
static bool internalDocsFlag; // determines what happens to internal docs.
static bool caseSensitiveNames; // determines if output can be mixed case.
static bool verbatimHeaderFlag; // enable/disable generation of verb headers.
static QCString projectName; // the name of the project
static QCString projectNumber; // the number of the project
static QCString outputDir; // the global output directory
static QCString outputLanguage; // the output language
static bool quietFlag; // generate progress messages flag
static bool warningFlag; // generate warnings flag
static bool noIndexFlag; // generate condensed index flag
static bool extractAllFlag; // gererate docs for all classes flag
static bool extractPrivateFlag; // generate docs for private members flag
static bool hideMemberFlag; // hide undocumented members.
static bool hideClassFlag; // hide undocumented members.
static bool briefMemDescFlag; // enable `inline' brief member descr.
static bool repeatBriefFlag; // repeat brief descriptions.
static bool alwaysDetailsFlag; // show details description even if there is only a brief description?
static bool fullPathNameFlag; // using full path name in output
static QStrList stripFromPath; // list of candidates to strip from the file path
static bool internalDocsFlag; // determines what happens to internal docs.
static bool classDiagramFlag; // enable the generation of class diagrams.
static bool sourceBrowseFlag; // include source code in documentation.
static bool inlineSourceFlag; // inline the definition bodies in the docs?
static bool stripCommentsFlag; // strip special comments from code fragments?
static bool caseSensitiveNames; // determines if output can be mixed case.
static bool verbatimHeaderFlag; // enable/disable generation of verb headers.
static bool showIncFileFlag; // show include file in file documentation?
static bool autoBriefFlag; // javadoc comments behaves as Qt comments.
static bool inheritDocsFlag; // inheritance of documentation enabled?
static bool inlineInfoFlag; // show info about inline members?
static bool sortMembersFlag; // sort members alphabetically?
static int tabSize; // number of spaces in a tab
static QStrList sectionFilterList; // list of section filters that are enabled
static QStrList inputSources; // list of input files
static QStrList filePatternList; // list of file patterns
static bool recursiveFlag; // scan directories recursively
static QStrList excludeSources; // list of files to exclude from the input
static QStrList excludePatternList; // list of patterns to exclude from input
static QStrList examplePath; // list of example paths
static QStrList examplePatternList; // list of example patterns
static QStrList imagePath; // list of image paths
static QCString inputFilter; // a filter command that is applied to input files
static bool alphaIndexFlag; // should an alphabetical index be generated?
static int colsInAlphaIndex; // number of columns in the alphabetical index
static QStrList ignorePrefixList; // list of prefixes to ignore for the alphabetical index
static bool generateHtml; // generate HTML output
static QCString htmlOutputDir; // the directory to put the HTML files
static QCString headerFile; // the name of the personal HTML header
static QCString footerFile; // the name of the personal HTML footer
static QCString htmlStyleSheet; // user defined cascading style sheet
static bool htmlAlignMemberFlag; // align members in HTML using tables.
static bool sourceBrowseFlag; // include source code in documentation.
static bool autoBriefFlag; // javadoc comments behaves as Qt comments.
static bool htmlHelpFlag; // should html help files be generated?
static bool alphaIndexFlag; // should an alphabetical index be generated?
static bool pdfHyperFlag; // generate latex prepared creating hyperlinked pdfs.
static bool inheritDocsFlag; // inheritance of documentation enabled?
static bool inlineInfoFlag; // show info about inline members?
static bool alwaysDetailsFlag; // show details description even if there is only a brief description?
static int tabSize; // number of spaces in a tab
static int colsInAlphaIndex; // number of columns in the alphabetical index
static bool inlineSourceFlag; // inline the definition bodies in the docs?
static bool haveDotFlag; // indicates wether or not dot is present
static bool collGraphFlag; // collaboration graph
static bool includeGraphFlag; // include graph
static bool gfxHierarchyFlag; // flag to enable graphical hierarchy
static bool generateRTF; // generate RTF flag
static bool compactRTFFlag; // generate more compact RTF
static bool rtfHyperFlag; // generate hyper links in RTF
static bool showIncFileFlag; // show include file in file documentation?
static bool stripCommentsFlag; // strip special comments from code fragments?
static bool sortMembersFlag; // sort members alphabetically?
static bool latexBatchModeFlag; // continue after latex errors?
static bool htmlHelpFlag; // should html help files be generated?
static bool generateLatex; // generate Latex output
static QCString latexOutputDir; // the directory to put the Latex files
static bool compactLatexFlag; // generate compact LaTeX documentation.
static QCString paperType; // the page type to generate docs for
static QStrList extraPackageList; // list of extra LaTeX packages.
static QCString latexHeaderFile; // the name of the personal LaTeX header
static bool pdfHyperFlag; // generate latex prepared creating hyperlinked pdfs.
static bool latexBatchModeFlag; // continue after latex errors?
static bool generateRTF; // generate RTF flag
static QCString rtfOutputDir; // the directory to put the RTF files
static bool compactRTFFlag; // generate more compact RTF
static bool rtfHyperFlag; // generate hyper links in RTF
static bool generateMan; // generate Man pages
static QCString manOutputDir; // the directory to put the man pages
static QCString manExtension; // extension the man page files
static bool preprocessingFlag; // enable preprocessing
static bool macroExpansionFlag; // expand macros in the source.
static bool searchIncludeFlag; // search for included files
static QStrList includePath; // list of include paths
static QStrList predefined; // list of predefined macro names.
static bool onlyPredefinedFlag; // expand only predefined macros
static QStrList tagFileList; // list of tag files
static QCString genTagFile; // the tag file to generate
static bool allExtFlag; // include all external classes flag
static QCString perlPath; // the absolute path to perl
static bool haveDotFlag; // indicates wether or not dot is present
static bool collGraphFlag; // collaboration graph
static bool includeGraphFlag; // include graph
static bool gfxHierarchyFlag; // flag to enable graphical hierarchy
static bool searchEngineFlag; // generate search engine flag
static QCString cgiName; // the name of the CGI binary
static QCString cgiURL; // the absolute URL to the CGI binary
static QCString docURL; // the absolute URL to the documentation
static QCString docAbsPath; // the absolute path to the documentation
static QCString binAbsPath; // the absolute path to the doxysearch
static QStrList extDocPathList; // list of external doc. directories.
};
#endif
......@@ -10,9 +10,6 @@
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
%{
......@@ -66,92 +63,91 @@ void warn(const char *fmt, ...)
* exported variables
*/
QCString Config::projectName;
QCString Config::projectNumber;
QCString Config::outputDir;
QCString Config::htmlOutputDir = "html";
QCString Config::latexOutputDir = "latex";
QCString Config::manOutputDir = "man";
QCString Config::rtfOutputDir = "rtf";
QCString Config::projectName;
QCString Config::projectNumber;
QCString Config::outputDir;
QCString Config::outputLanguage = "English";
QCString Config::headerFile;
QCString Config::latexHeaderFile;
QCString Config::footerFile;
QCString Config::cgiName = "search.cgi";
QCString Config::cgiURL;
QCString Config::docURL;
QCString Config::binAbsPath = "/usr/local/bin/";
QCString Config::docAbsPath;
QCString Config::perlPath = "/usr/bin/perl";
QCString Config::genTagFile;
QCString Config::inputFilter;
QCString Config::paperType = "a4wide";
QCString Config::manExtension = ".3";
QCString Config::htmlStyleSheet;
QStrList Config::ignorePrefixList;
QStrList Config::includePath;
QStrList Config::examplePath;
QStrList Config::imagePath;
QStrList Config::inputSources;
bool Config::quietFlag = FALSE;
bool Config::warningFlag = TRUE;
bool Config::noIndexFlag = FALSE;
bool Config::extractAllFlag = FALSE;
bool Config::extractPrivateFlag = FALSE;
bool Config::hideMemberFlag = FALSE;
bool Config::hideClassFlag = FALSE;
bool Config::briefMemDescFlag = TRUE;
bool Config::repeatBriefFlag = TRUE;
bool Config::alwaysDetailsFlag = FALSE;
bool Config::fullPathNameFlag = FALSE;
QStrList Config::stripFromPath;
bool Config::internalDocsFlag = FALSE;
bool Config::classDiagramFlag = TRUE;
bool Config::sourceBrowseFlag = FALSE;
bool Config::inlineSourceFlag = FALSE;
bool Config::stripCommentsFlag = TRUE;
bool Config::caseSensitiveNames = FALSE;
bool Config::verbatimHeaderFlag = TRUE;
bool Config::showIncFileFlag = TRUE;
bool Config::autoBriefFlag = TRUE;
bool Config::inheritDocsFlag = TRUE;
bool Config::inlineInfoFlag = TRUE;
bool Config::sortMembersFlag = TRUE;
int Config::tabSize = 8;
QStrList Config::sectionFilterList;
QStrList Config::inputSources;
QStrList Config::filePatternList;
bool Config::recursiveFlag = FALSE;
QStrList Config::excludeSources;
QStrList Config::filePatternList;
QStrList Config::excludePatternList;
QStrList Config::examplePath;
QStrList Config::examplePatternList;
QStrList Config::imagePatternList;
QStrList Config::tagFileList;
QStrList Config::extDocPathList;
QStrList Config::predefined;
QStrList Config::extraPackageList;
QStrList Config::stripFromPath;
QStrList Config::sectionFilterList;
bool Config::quietFlag = FALSE;
bool Config::recursiveFlag = FALSE;
bool Config::allExtFlag = FALSE;
bool Config::searchEngineFlag = FALSE;
bool Config::extractAllFlag = FALSE;
bool Config::extractPrivateFlag = FALSE;
bool Config::noIndexFlag = FALSE;
bool Config::hideMemberFlag = FALSE;
bool Config::hideClassFlag = FALSE;
bool Config::macroExpansionFlag = FALSE;
bool Config::onlyPredefinedFlag = FALSE;
bool Config::fullPathNameFlag = FALSE;
bool Config::compactLatexFlag = FALSE;
bool Config::internalDocsFlag = FALSE;
bool Config::caseSensitiveNames = FALSE;
bool Config::sourceBrowseFlag = FALSE;
bool Config::htmlHelpFlag = FALSE;
bool Config::alphaIndexFlag = FALSE;
bool Config::pdfHyperFlag = FALSE;
bool Config::alwaysDetailsFlag = FALSE;
bool Config::inlineSourceFlag = FALSE;
bool Config::rtfHyperFlag = FALSE;
bool Config::compactRTFFlag = FALSE;
bool Config::haveDotFlag = FALSE;
bool Config::latexBatchModeFlag = FALSE;
bool Config::autoBriefFlag = TRUE;
bool Config::warningFlag = TRUE;
bool Config::generateHtml = TRUE;
bool Config::generateLatex = TRUE;
bool Config::generateMan = TRUE;
bool Config::generateRTF = FALSE;
bool Config::preprocessingFlag = TRUE;
bool Config::briefMemDescFlag = TRUE;
bool Config::searchIncludeFlag = TRUE;
bool Config::classDiagramFlag = TRUE;
bool Config::repeatBriefFlag = TRUE;
bool Config::verbatimHeaderFlag = TRUE;
QStrList Config::imagePath;
QCString Config::inputFilter;
bool Config::alphaIndexFlag = FALSE;
int Config::colsInAlphaIndex = 5;
QStrList Config::ignorePrefixList;
bool Config::generateHtml = TRUE;
QCString Config::htmlOutputDir = "html";
QCString Config::headerFile;
QCString Config::footerFile;
QCString Config::htmlStyleSheet;
bool Config::htmlAlignMemberFlag = TRUE;
bool Config::inheritDocsFlag = TRUE;
bool Config::inlineInfoFlag = TRUE;
bool Config::collGraphFlag = TRUE;
bool Config::includeGraphFlag = TRUE;
bool Config::gfxHierarchyFlag = TRUE;
bool Config::showIncFileFlag = TRUE;
bool Config::stripCommentsFlag = TRUE;
bool Config::sortMembersFlag = TRUE;
int Config::tabSize = 8;
int Config::colsInAlphaIndex = 5;
bool Config::htmlHelpFlag = FALSE;
bool Config::generateLatex = TRUE;
QCString Config::latexOutputDir = "latex";
bool Config::compactLatexFlag = FALSE;
QCString Config::paperType = "a4wide";
QStrList Config::extraPackageList;
QCString Config::latexHeaderFile;
bool Config::pdfHyperFlag = FALSE;
bool Config::latexBatchModeFlag = FALSE;
bool Config::generateRTF = FALSE;
QCString Config::rtfOutputDir = "rtf";
bool Config::compactRTFFlag = FALSE;
bool Config::rtfHyperFlag = FALSE;
bool Config::generateMan = TRUE;
QCString Config::manOutputDir = "man";
QCString Config::manExtension = ".3";
bool Config::preprocessingFlag = TRUE;
bool Config::macroExpansionFlag = FALSE;
bool Config::searchIncludeFlag = TRUE;
QStrList Config::includePath;
QStrList Config::predefined;
bool Config::onlyPredefinedFlag = FALSE;
QStrList Config::tagFileList;
QCString Config::genTagFile;
bool Config::allExtFlag = FALSE;
QCString Config::perlPath = "/usr/bin/perl";
bool Config::haveDotFlag = FALSE;
bool Config::collGraphFlag = TRUE;
bool Config::includeGraphFlag = TRUE;
bool Config::gfxHierarchyFlag = TRUE;
bool Config::searchEngineFlag = FALSE;
QCString Config::cgiName = "search.cgi";
QCString Config::cgiURL;
QCString Config::docURL;
QCString Config::docAbsPath;
QCString Config::binAbsPath = "/usr/local/bin/";
QStrList Config::extDocPathList;
/* -----------------------------------------------------------------
*
......@@ -166,8 +162,9 @@ static QCString * s=0;
static bool * b=0;
static QStrList * l=0;
static int lastState;
//static int lastEnvState;
static QCString elemStr;
//static QCString tabSizeString;
//static QCString colsInAlphaIndexString;
static QCString tabSizeString;
static QCString colsInAlphaIndexString;
......@@ -203,92 +200,91 @@ static int yyread(char *buf,int max_size)
<*>\0x0d
<Start,GetString,GetStrList,GetBool>"#" { BEGIN(SkipComment); }
<Start>"PROJECT_NAME"[ \t]*"=" { BEGIN(GetString); s=&Config::projectName; s->resize(0); }
<Start>"PROJECT_NUMBER"[ \t]*"=" { BEGIN(GetString); s=&Config::projectNumber; s->resize(0); }
<Start>"OUTPUT_DIRECTORY"[ \t]*"=" { BEGIN(GetString); s=&Config::outputDir; s->resize(0); }
<Start>"HTML_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::htmlOutputDir; s->resize(0); }
<Start>"MAN_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::manOutputDir; s->resize(0); }
<Start>"LATEX_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::latexOutputDir; s->resize(0); }
<Start>"RTF_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::rtfOutputDir; s->resize(0); }
<Start>"HTML_HEADER"[ \t]*"=" { BEGIN(GetString); s=&Config::headerFile; s->resize(0); }
<Start>"HTML_FOOTER"[ \t]*"=" { BEGIN(GetString); s=&Config::footerFile; s->resize(0); }
<Start>"LATEX_HEADER"[ \t]*"=" { BEGIN(GetString); s=&Config::latexHeaderFile; s->resize(0); }
<Start>"CGI_NAME"[ \t]*"=" { BEGIN(GetString); s=&Config::cgiName; s->resize(0); }
<Start>"CGI_URL"[ \t]*"=" { BEGIN(GetString); s=&Config::cgiURL; s->resize(0); }
<Start>"DOC_URL"[ \t]*"=" { BEGIN(GetString); s=&Config::docURL; s->resize(0); }
<Start>"BIN_ABSPATH"[ \t]*"=" { BEGIN(GetString); s=&Config::binAbsPath; s->resize(0); }
<Start>"DOC_ABSPATH"[ \t]*"=" { BEGIN(GetString); s=&Config::docAbsPath; s->resize(0); }
<Start>"PERL_PATH"[ \t]*"=" { BEGIN(GetString); s=&Config::perlPath; s->resize(0); }
<Start>"GENERATE_TAGFILE"[ \t]*"=" { BEGIN(GetString); s=&Config::genTagFile; s->resize(0); }
<Start>"INPUT_FILTER"[ \t]*"=" { BEGIN(GetString); s=&Config::inputFilter; s->resize(0); }
<Start>"PAPER_TYPE"[ \t]*"=" { BEGIN(GetString); s=&Config::paperType; s->resize(0); }
<Start>"OUTPUT_LANGUAGE"[ \t]*"=" { BEGIN(GetString); s=&Config::outputLanguage; s->resize(0); }
<Start>"MAN_EXTENSION"[ \t]*"=" { BEGIN(GetString); s=&Config::manExtension; s->resize(0); }
<Start>"TAB_SIZE"[ \t]*"=" { BEGIN(GetString); s=&tabSizeString; s->resize(0); }
<Start>"HTML_STYLESHEET"[ \t]*"=" { BEGIN(GetString); s=&Config::htmlStyleSheet; s->resize(0); }
<Start>"COLS_IN_ALPHA_INDEX"[ \t]*"=" { BEGIN(GetString); s=&colsInAlphaIndexString; s->resize(0); }
<Start>"IGNORE_PREFIX"[ \t]*"=" { BEGIN(GetStrList); l=&Config::ignorePrefixList; l->clear(); elemStr=""; }
<Start>"INCLUDE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::includePath; l->clear(); elemStr=""; }
<Start>"EXAMPLE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::examplePath; l->clear(); elemStr=""; }
<Start>"IMAGE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::imagePath; l->clear(); elemStr=""; }
<Start>"INPUT"[ \t]*"=" { BEGIN(GetStrList); l=&Config::inputSources; l->clear(); elemStr=""; }
<Start>"EXCLUDE"[ \t]*"=" { BEGIN(GetStrList); l=&Config::excludeSources; l->clear(); elemStr=""; }
<Start>"FILE_PATTERNS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::filePatternList; l->clear(); elemStr=""; }
<Start>"EXCLUDE_PATTERNS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::excludePatternList; l->clear(); elemStr=""; }
<Start>"EXAMPLE_PATTERNS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::examplePatternList; l->clear(); elemStr=""; }
<Start>"IMAGE_PATTERNS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::imagePatternList; l->clear(); elemStr=""; }
<Start>"TAGFILES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::tagFileList; l->clear(); elemStr=""; }
<Start>"EXT_DOC_PATHS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::extDocPathList; l->clear(); elemStr=""; }
<Start>"PREDEFINED"[ \t]*"=" { BEGIN(GetStrList); l=&Config::predefined; l->clear(); elemStr=""; }
<Start>"EXTRA_PACKAGES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::extraPackageList; l->clear(); elemStr=""; }
<Start>"STRIP_FROM_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::stripFromPath; l->clear(); elemStr=""; }
<Start>"ENABLED_SECTIONS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::sectionFilterList; l->clear(); elemStr=""; }
<Start>"QUIET"[ \t]*"=" { BEGIN(GetBool); b=&Config::quietFlag; }
<Start>"WARNINGS"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningFlag; }
<Start>"RECURSIVE"[ \t]*"=" { BEGIN(GetBool); b=&Config::recursiveFlag; }
<Start>"ALLEXTERNALS"[ \t]*"=" { BEGIN(GetBool); b=&Config::allExtFlag; }
<Start>"SEARCHENGINE"[ \t]*"=" { BEGIN(GetBool); b=&Config::searchEngineFlag; }
<Start>"EXTRACT_ALL"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractAllFlag; }
<Start>"EXTRACT_PRIVATE"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractPrivateFlag; }
<Start>"DISABLE_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::noIndexFlag; }
<Start>"GENERATE_LATEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateLatex; }
<Start>"GENERATE_HTML"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateHtml; }
<Start>"GENERATE_MAN"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateMan; }
<Start>"ENABLE_PREPROCESSING"[ \t]*"=" { BEGIN(GetBool); b=&Config::preprocessingFlag; }
<Start>"MACRO_EXPANSION"[ \t]*"=" { BEGIN(GetBool); b=&Config::macroExpansionFlag; }
<Start>"SEARCH_INCLUDES"[ \t]*"=" { BEGIN(GetBool); b=&Config::searchIncludeFlag; }
<Start>"BRIEF_MEMBER_DESC"[ \t]*"=" { BEGIN(GetBool); b=&Config::briefMemDescFlag; }
<Start>"ALWAYS_DETAILED_SEC"[ \t]*"=" { BEGIN(GetBool); b=&Config::alwaysDetailsFlag; }
<Start>"HIDE_UNDOC_MEMBERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::hideMemberFlag; }
<Start>"HIDE_UNDOC_CLASSES"[ \t]*"=" { BEGIN(GetBool); b=&Config::hideClassFlag; }
<Start>"EXPAND_ONLY_PREDEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::onlyPredefinedFlag; }
<Start>"FULL_PATH_NAMES"[ \t]*"=" { BEGIN(GetBool); b=&Config::fullPathNameFlag; }
<Start>"CLASS_DIAGRAMS"[ \t]*"=" { BEGIN(GetBool); b=&Config::classDiagramFlag; }
<Start>"COMPACT_LATEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::compactLatexFlag; }
<Start>"REPEAT_BRIEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::repeatBriefFlag; }
<Start>"INTERNAL_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::internalDocsFlag; }
<Start>"CASE_SENSE_NAMES"[ \t]*"=" { BEGIN(GetBool); b=&Config::caseSensitiveNames; }
<Start>"VERBATIM_HEADERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::verbatimHeaderFlag; }
<Start>"HTML_ALIGN_MEMBERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlAlignMemberFlag; }
<Start>"SOURCE_BROWSER"[ \t]*"=" { BEGIN(GetBool); b=&Config::sourceBrowseFlag; }
<Start>"JAVADOC_AUTOBRIEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::autoBriefFlag; }
<Start>"GENERATE_HTMLHELP"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlHelpFlag; }
<Start>"ALPHABETICAL_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::alphaIndexFlag; }
<Start>"PDF_HYPERLINKS"[ \t]*"=" { BEGIN(GetBool); b=&Config::pdfHyperFlag; }
<Start>"INHERIT_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::inheritDocsFlag; }
<Start>"INLINE_INFO"[ \t]*"=" { BEGIN(GetBool); b=&Config::inlineInfoFlag; }
<Start>"INLINE_SOURCES"[ \t]*"=" { BEGIN(GetBool); b=&Config::inlineSourceFlag; }
<Start>"HAVE_DOT"[ \t]*"=" { BEGIN(GetBool); b=&Config::haveDotFlag; }
<Start>"COLLABORATION_GRAPH"[ \t]*"=" { BEGIN(GetBool); b=&Config::collGraphFlag; }
<Start>"INCLUDE_GRAPH"[ \t]*"=" { BEGIN(GetBool); b=&Config::includeGraphFlag; }
<Start>"GRAPHICAL_HIERARCHY"[ \t]*"=" { BEGIN(GetBool); b=&Config::gfxHierarchyFlag; }
<Start>"GENERATE_RTF"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateRTF; }
<Start>"COMPACT_RTF"[ \t]*"=" { BEGIN(GetBool); b=&Config::compactRTFFlag; }
<Start>"RTF_HYPERLINKS"[ \t]*"=" { BEGIN(GetBool); b=&Config::rtfHyperFlag; }
<Start>"SHOW_INCLUDE_FILES"[ \t]*"=" { BEGIN(GetBool); b=&Config::showIncFileFlag; }
<Start>"STRIP_CODE_COMMENTS"[ \t]*"=" { BEGIN(GetBool); b=&Config::stripCommentsFlag; }
<Start>"SORT_MEMBER_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::sortMembersFlag; }
<Start>"LATEX_BATCHMODE"[ \t]*"=" { BEGIN(GetBool); b=&Config::latexBatchModeFlag; }
<Start>"PROJECT_NAME"[ \t]*"=" { BEGIN(GetString); s=&Config::projectName; s->resize(0); }
<Start>"PROJECT_NUMBER"[ \t]*"=" { BEGIN(GetString); s=&Config::projectNumber; s->resize(0); }
<Start>"OUTPUT_DIRECTORY"[ \t]*"=" { BEGIN(GetString); s=&Config::outputDir; s->resize(0); }
<Start>"OUTPUT_LANGUAGE"[ \t]*"=" { BEGIN(GetString); s=&Config::outputLanguage; s->resize(0); }
<Start>"QUIET"[ \t]*"=" { BEGIN(GetBool); b=&Config::quietFlag; }
<Start>"WARNINGS"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningFlag; }
<Start>"DISABLE_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::noIndexFlag; }
<Start>"EXTRACT_ALL"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractAllFlag; }
<Start>"EXTRACT_PRIVATE"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractPrivateFlag; }
<Start>"HIDE_UNDOC_MEMBERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::hideMemberFlag; }
<Start>"HIDE_UNDOC_CLASSES"[ \t]*"=" { BEGIN(GetBool); b=&Config::hideClassFlag; }
<Start>"BRIEF_MEMBER_DESC"[ \t]*"=" { BEGIN(GetBool); b=&Config::briefMemDescFlag; }
<Start>"REPEAT_BRIEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::repeatBriefFlag; }
<Start>"ALWAYS_DETAILED_SEC"[ \t]*"=" { BEGIN(GetBool); b=&Config::alwaysDetailsFlag; }
<Start>"FULL_PATH_NAMES"[ \t]*"=" { BEGIN(GetBool); b=&Config::fullPathNameFlag; }
<Start>"STRIP_FROM_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::stripFromPath; l->clear(); elemStr=""; }
<Start>"INTERNAL_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::internalDocsFlag; }
<Start>"CLASS_DIAGRAMS"[ \t]*"=" { BEGIN(GetBool); b=&Config::classDiagramFlag; }
<Start>"SOURCE_BROWSER"[ \t]*"=" { BEGIN(GetBool); b=&Config::sourceBrowseFlag; }
<Start>"INLINE_SOURCES"[ \t]*"=" { BEGIN(GetBool); b=&Config::inlineSourceFlag; }
<Start>"STRIP_CODE_COMMENTS"[ \t]*"=" { BEGIN(GetBool); b=&Config::stripCommentsFlag; }
<Start>"CASE_SENSE_NAMES"[ \t]*"=" { BEGIN(GetBool); b=&Config::caseSensitiveNames; }
<Start>"VERBATIM_HEADERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::verbatimHeaderFlag; }
<Start>"SHOW_INCLUDE_FILES"[ \t]*"=" { BEGIN(GetBool); b=&Config::showIncFileFlag; }
<Start>"JAVADOC_AUTOBRIEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::autoBriefFlag; }
<Start>"INHERIT_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::inheritDocsFlag; }
<Start>"INLINE_INFO"[ \t]*"=" { BEGIN(GetBool); b=&Config::inlineInfoFlag; }
<Start>"SORT_MEMBER_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::sortMembersFlag; }
<Start>"TAB_SIZE"[ \t]*"=" { BEGIN(GetString); s=&tabSizeString; s->resize(0); }
<Start>"ENABLED_SECTIONS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::sectionFilterList; l->clear(); elemStr=""; }
<Start>"INPUT"[ \t]*"=" { BEGIN(GetStrList); l=&Config::inputSources; l->clear(); elemStr=""; }
<Start>"FILE_PATTERNS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::filePatternList; l->clear(); elemStr=""; }
<Start>"RECURSIVE"[ \t]*"=" { BEGIN(GetBool); b=&Config::recursiveFlag; }
<Start>"EXCLUDE"[ \t]*"=" { BEGIN(GetStrList); l=&Config::excludeSources; l->clear(); elemStr=""; }
<Start>"EXCLUDE_PATTERNS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::excludePatternList; l->clear(); elemStr=""; }
<Start>"EXAMPLE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::examplePath; l->clear(); elemStr=""; }
<Start>"EXAMPLE_PATTERNS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::examplePatternList; l->clear(); elemStr=""; }
<Start>"IMAGE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::imagePath; l->clear(); elemStr=""; }
<Start>"INPUT_FILTER"[ \t]*"=" { BEGIN(GetString); s=&Config::inputFilter; s->resize(0); }
<Start>"ALPHABETICAL_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::alphaIndexFlag; }
<Start>"COLS_IN_ALPHA_INDEX"[ \t]*"=" { BEGIN(GetString); s=&colsInAlphaIndexString; s->resize(0); }
<Start>"IGNORE_PREFIX"[ \t]*"=" { BEGIN(GetStrList); l=&Config::ignorePrefixList; l->clear(); elemStr=""; }
<Start>"GENERATE_HTML"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateHtml; }
<Start>"HTML_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::htmlOutputDir; s->resize(0); }
<Start>"HTML_HEADER"[ \t]*"=" { BEGIN(GetString); s=&Config::headerFile; s->resize(0); }
<Start>"HTML_FOOTER"[ \t]*"=" { BEGIN(GetString); s=&Config::footerFile; s->resize(0); }
<Start>"HTML_STYLESHEET"[ \t]*"=" { BEGIN(GetString); s=&Config::htmlStyleSheet; s->resize(0); }
<Start>"HTML_ALIGN_MEMBERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlAlignMemberFlag; }
<Start>"GENERATE_HTMLHELP"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlHelpFlag; }
<Start>"GENERATE_LATEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateLatex; }
<Start>"LATEX_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::latexOutputDir; s->resize(0); }
<Start>"COMPACT_LATEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::compactLatexFlag; }
<Start>"PAPER_TYPE"[ \t]*"=" { BEGIN(GetString); s=&Config::paperType; s->resize(0); }
<Start>"EXTRA_PACKAGES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::extraPackageList; l->clear(); elemStr=""; }
<Start>"LATEX_HEADER"[ \t]*"=" { BEGIN(GetString); s=&Config::latexHeaderFile; s->resize(0); }
<Start>"PDF_HYPERLINKS"[ \t]*"=" { BEGIN(GetBool); b=&Config::pdfHyperFlag; }
<Start>"LATEX_BATCHMODE"[ \t]*"=" { BEGIN(GetBool); b=&Config::latexBatchModeFlag; }
<Start>"GENERATE_RTF"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateRTF; }
<Start>"RTF_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::rtfOutputDir; s->resize(0); }
<Start>"COMPACT_RTF"[ \t]*"=" { BEGIN(GetBool); b=&Config::compactRTFFlag; }
<Start>"RTF_HYPERLINKS"[ \t]*"=" { BEGIN(GetBool); b=&Config::rtfHyperFlag; }
<Start>"GENERATE_MAN"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateMan; }
<Start>"MAN_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::manOutputDir; s->resize(0); }
<Start>"MAN_EXTENSION"[ \t]*"=" { BEGIN(GetString); s=&Config::manExtension; s->resize(0); }
<Start>"ENABLE_PREPROCESSING"[ \t]*"=" { BEGIN(GetBool); b=&Config::preprocessingFlag; }
<Start>"MACRO_EXPANSION"[ \t]*"=" { BEGIN(GetBool); b=&Config::macroExpansionFlag; }
<Start>"SEARCH_INCLUDES"[ \t]*"=" { BEGIN(GetBool); b=&Config::searchIncludeFlag; }
<Start>"INCLUDE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::includePath; l->clear(); elemStr=""; }
<Start>"PREDEFINED"[ \t]*"=" { BEGIN(GetStrList); l=&Config::predefined; l->clear(); elemStr=""; }
<Start>"EXPAND_ONLY_PREDEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::onlyPredefinedFlag; }
<Start>"TAGFILES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::tagFileList; l->clear(); elemStr=""; }
<Start>"GENERATE_TAGFILE"[ \t]*"=" { BEGIN(GetString); s=&Config::genTagFile; s->resize(0); }
<Start>"ALLEXTERNALS"[ \t]*"=" { BEGIN(GetBool); b=&Config::allExtFlag; }
<Start>"PERL_PATH"[ \t]*"=" { BEGIN(GetString); s=&Config::perlPath; s->resize(0); }
<Start>"HAVE_DOT"[ \t]*"=" { BEGIN(GetBool); b=&Config::haveDotFlag; }
<Start>"COLLABORATION_GRAPH"[ \t]*"=" { BEGIN(GetBool); b=&Config::collGraphFlag; }
<Start>"INCLUDE_GRAPH"[ \t]*"=" { BEGIN(GetBool); b=&Config::includeGraphFlag; }
<Start>"GRAPHICAL_HIERARCHY"[ \t]*"=" { BEGIN(GetBool); b=&Config::gfxHierarchyFlag; }
<Start>"SEARCHENGINE"[ \t]*"=" { BEGIN(GetBool); b=&Config::searchEngineFlag; }
<Start>"CGI_NAME"[ \t]*"=" { BEGIN(GetString); s=&Config::cgiName; s->resize(0); }
<Start>"CGI_URL"[ \t]*"=" { BEGIN(GetString); s=&Config::cgiURL; s->resize(0); }
<Start>"DOC_URL"[ \t]*"=" { BEGIN(GetString); s=&Config::docURL; s->resize(0); }
<Start>"DOC_ABSPATH"[ \t]*"=" { BEGIN(GetString); s=&Config::docAbsPath; s->resize(0); }
<Start>"BIN_ABSPATH"[ \t]*"=" { BEGIN(GetString); s=&Config::binAbsPath; s->resize(0); }
<Start>"EXT_DOC_PATHS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::extDocPathList; l->clear(); elemStr=""; }
<Start>[a-z_A-Z0-9]+ { err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); }
<GetString,GetBool>\n { yyLineNr++; BEGIN(Start); }
<GetStrList>\n {
......@@ -378,140 +374,296 @@ static int yyread(char *buf,int max_size)
void dumpConfig()
{
printf("# General configuration options\n");
printf("projectName=`%s'\n",Config::projectName.data());
printf("outputDir=`%s'\n", Config::outputDir.data());
printf("headerFile=`%s'\n", Config::headerFile.data());
printf("footerFile=`%s'\n", Config::footerFile.data());
char *ip=Config::includePath.first();
while (ip)
printf("projectNumber=`%s'\n",Config::projectNumber.data());
printf("outputDir=`%s'\n",Config::outputDir.data());
printf("outputLanguage=`%s'\n",Config::outputLanguage.data());
printf("quietFlag=`%d'\n",Config::quietFlag);
printf("warningFlag=`%d'\n",Config::warningFlag);
printf("noIndexFlag=`%d'\n",Config::noIndexFlag);
printf("extractAllFlag=`%d'\n",Config::extractAllFlag);
printf("extractPrivateFlag=`%d'\n",Config::extractPrivateFlag);
printf("hideMemberFlag=`%d'\n",Config::hideMemberFlag);
printf("hideClassFlag=`%d'\n",Config::hideClassFlag);
printf("briefMemDescFlag=`%d'\n",Config::briefMemDescFlag);
printf("repeatBriefFlag=`%d'\n",Config::repeatBriefFlag);
printf("alwaysDetailsFlag=`%d'\n",Config::alwaysDetailsFlag);
printf("fullPathNameFlag=`%d'\n",Config::fullPathNameFlag);
{
char *is=Config::stripFromPath.first();
while (is)
{
printf("stripFromPath=`%s'\n",is);
is=Config::stripFromPath.next();
}
}
printf("internalDocsFlag=`%d'\n",Config::internalDocsFlag);
printf("classDiagramFlag=`%d'\n",Config::classDiagramFlag);
printf("sourceBrowseFlag=`%d'\n",Config::sourceBrowseFlag);
printf("inlineSourceFlag=`%d'\n",Config::inlineSourceFlag);
printf("stripCommentsFlag=`%d'\n",Config::stripCommentsFlag);
printf("caseSensitiveNames=`%d'\n",Config::caseSensitiveNames);
printf("verbatimHeaderFlag=`%d'\n",Config::verbatimHeaderFlag);
printf("showIncFileFlag=`%d'\n",Config::showIncFileFlag);
printf("autoBriefFlag=`%d'\n",Config::autoBriefFlag);
printf("inheritDocsFlag=`%d'\n",Config::inheritDocsFlag);
printf("inlineInfoFlag=`%d'\n",Config::inlineInfoFlag);
printf("sortMembersFlag=`%d'\n",Config::sortMembersFlag);
printf("tabSize=`%d'\n",Config::tabSize);
{
char *is=Config::sectionFilterList.first();
while (is)
{
printf("sectionFilterList=`%s'\n",is);
is=Config::sectionFilterList.next();
}
}
printf("# configuration options related to the input files\n");
{
char *is=Config::inputSources.first();
while (is)
{
printf("inputSources=`%s'\n",is);
is=Config::inputSources.next();
}
}
{
char *is=Config::filePatternList.first();
while (is)
{
printf("filePatternList=`%s'\n",is);
is=Config::filePatternList.next();
}
}
printf("recursiveFlag=`%d'\n",Config::recursiveFlag);
{
printf("includePath=`%s'\n",ip);
ip=Config::includePath.next();
char *is=Config::excludeSources.first();
while (is)
{
printf("excludeSources=`%s'\n",is);
is=Config::excludeSources.next();
}
}
printf("quiet=`%d'\n", Config::quietFlag);
printf("warnings=`%d'\n", Config::warningFlag);
char *is=Config::inputSources.first();
while (is)
{
printf("inputSources=`%s'\n",is);
is=Config::inputSources.next();
char *is=Config::excludePatternList.first();
while (is)
{
printf("excludePatternList=`%s'\n",is);
is=Config::excludePatternList.next();
}
}
char *fp=Config::filePatternList.first();
while (fp)
{
printf("filePattern=`%s'\n",fp);
fp=Config::filePatternList.next();
char *is=Config::examplePath.first();
while (is)
{
printf("examplePath=`%s'\n",is);
is=Config::examplePath.next();
}
}
{
char *is=Config::examplePatternList.first();
while (is)
{
printf("examplePatternList=`%s'\n",is);
is=Config::examplePatternList.next();
}
}
{
char *is=Config::imagePath.first();
while (is)
{
printf("imagePath=`%s'\n",is);
is=Config::imagePath.next();
}
}
printf("recusive=`%d'\n",Config::recursiveFlag);
printf("inputFilter=`%s'\n",Config::inputFilter.data());
char *tf=Config::tagFileList.first();
while (tf)
printf("# configuration options related to the alphabetical class index\n");
printf("alphaIndexFlag=`%d'\n",Config::alphaIndexFlag);
printf("colsInAlphaIndex=`%d'\n",Config::colsInAlphaIndex);
{
char *is=Config::ignorePrefixList.first();
while (is)
{
printf("ignorePrefixList=`%s'\n",is);
is=Config::ignorePrefixList.next();
}
}
printf("# configuration options related to the HTML output\n");
printf("generateHtml=`%d'\n",Config::generateHtml);
printf("htmlOutputDir=`%s'\n",Config::htmlOutputDir.data());
printf("headerFile=`%s'\n",Config::headerFile.data());
printf("footerFile=`%s'\n",Config::footerFile.data());
printf("htmlStyleSheet=`%s'\n",Config::htmlStyleSheet.data());
printf("htmlAlignMemberFlag=`%d'\n",Config::htmlAlignMemberFlag);
printf("htmlHelpFlag=`%d'\n",Config::htmlHelpFlag);
printf("# configuration options related to the LaTeX output\n");
printf("generateLatex=`%d'\n",Config::generateLatex);
printf("latexOutputDir=`%s'\n",Config::latexOutputDir.data());
printf("compactLatexFlag=`%d'\n",Config::compactLatexFlag);
printf("paperType=`%s'\n",Config::paperType.data());
{
char *is=Config::extraPackageList.first();
while (is)
{
printf("extraPackageList=`%s'\n",is);
is=Config::extraPackageList.next();
}
}
printf("latexHeaderFile=`%s'\n",Config::latexHeaderFile.data());
printf("pdfHyperFlag=`%d'\n",Config::pdfHyperFlag);
printf("latexBatchModeFlag=`%d'\n",Config::latexBatchModeFlag);
printf("# configuration options related to the RTF output\n");
printf("generateRTF=`%d'\n",Config::generateRTF);
printf("rtfOutputDir=`%s'\n",Config::rtfOutputDir.data());
printf("compactRTFFlag=`%d'\n",Config::compactRTFFlag);
printf("rtfHyperFlag=`%d'\n",Config::rtfHyperFlag);
printf("# configuration options related to the man page output\n");
printf("generateMan=`%d'\n",Config::generateMan);
printf("manOutputDir=`%s'\n",Config::manOutputDir.data());
printf("manExtension=`%s'\n",Config::manExtension.data());
printf("# Configuration options related to the preprocessor \n");
printf("preprocessingFlag=`%d'\n",Config::preprocessingFlag);
printf("macroExpansionFlag=`%d'\n",Config::macroExpansionFlag);
printf("searchIncludeFlag=`%d'\n",Config::searchIncludeFlag);
{
char *is=Config::includePath.first();
while (is)
{
printf("includePath=`%s'\n",is);
is=Config::includePath.next();
}
}
{
char *is=Config::predefined.first();
while (is)
{
printf("predefined=`%s'\n",is);
is=Config::predefined.next();
}
}
printf("onlyPredefinedFlag=`%d'\n",Config::onlyPredefinedFlag);
printf("# Configuration::addtions related to external references \n");
{
printf("tagFile=`%s'\n",tf);
tf=Config::tagFileList.next();
char *is=Config::tagFileList.first();
while (is)
{
printf("tagFileList=`%s'\n",is);
is=Config::tagFileList.next();
}
}
printf("allExternals=`%d'\n",Config::allExtFlag);
printf("searchEngine=`%d'\n",Config::searchEngineFlag);
printf("genTagFile=`%s'\n",Config::genTagFile.data());
printf("allExtFlag=`%d'\n",Config::allExtFlag);
printf("perlPath=`%s'\n",Config::perlPath.data());
printf("# Configuration options related to the dot tool \n");
printf("haveDotFlag=`%d'\n",Config::haveDotFlag);
printf("collGraphFlag=`%d'\n",Config::collGraphFlag);
printf("includeGraphFlag=`%d'\n",Config::includeGraphFlag);
printf("gfxHierarchyFlag=`%d'\n",Config::gfxHierarchyFlag);
printf("# Configuration::addtions related to the search engine \n");
printf("searchEngineFlag=`%d'\n",Config::searchEngineFlag);
printf("cgiName=`%s'\n",Config::cgiName.data());
printf("cgiURL=`%s'\n",Config::cgiURL.data());
printf("docURL=`%s'\n",Config::docURL.data());
printf("docAbsPath=`%s'\n",Config::docAbsPath.data());
printf("binAbsPath=`%s'\n",Config::binAbsPath.data());
char *ed=Config::extDocPathList.first();
while (ed)
{
printf("binAbsPathFile=`%s'\n",ed);
ed=Config::extDocPathList.next();
char *is=Config::extDocPathList.first();
while (is)
{
printf("extDocPathList=`%s'\n",is);
is=Config::extDocPathList.next();
}
}
}
void Config::init()
{
Config::projectName.resize(0);
Config::projectNumber.resize(0);
Config::projectName.resize(0);
Config::projectNumber.resize(0);
Config::outputDir.resize(0);
Config::htmlOutputDir = "html";
Config::latexOutputDir ="latex";
Config::manOutputDir ="man";
Config::rtfOutputDir = "rtf";
Config::outputLanguage = "English";
Config::headerFile.resize(0);
Config::latexHeaderFile.resize(0);
Config::footerFile.resize(0);
Config::cgiName = "search.cgi";
Config::cgiURL.resize(0);
Config::docURL.resize(0);
Config::binAbsPath = "/usr/local/bin/";
Config::docAbsPath.resize(0);
Config::perlPath = "/usr/bin/perl";
Config::genTagFile.resize(0);
Config::quietFlag = FALSE;
Config::warningFlag = TRUE;
Config::noIndexFlag = FALSE;
Config::extractAllFlag = FALSE;
Config::extractPrivateFlag = FALSE;
Config::hideMemberFlag = FALSE;
Config::hideClassFlag = FALSE;
Config::briefMemDescFlag = TRUE;
Config::repeatBriefFlag = TRUE;
Config::alwaysDetailsFlag = FALSE;
Config::fullPathNameFlag = FALSE;
Config::stripFromPath.clear();
Config::internalDocsFlag = FALSE;
Config::classDiagramFlag = TRUE;
Config::sourceBrowseFlag = FALSE;
Config::inlineSourceFlag = FALSE;
Config::stripCommentsFlag = TRUE;
Config::caseSensitiveNames = FALSE;
Config::verbatimHeaderFlag = TRUE;
Config::showIncFileFlag = TRUE;
Config::autoBriefFlag = TRUE;
Config::inheritDocsFlag = TRUE;
Config::inlineInfoFlag = TRUE;
Config::sortMembersFlag = TRUE;
Config::tabSize = 8;
Config::sectionFilterList.clear();
Config::inputSources.clear();
Config::filePatternList.clear();
Config::recursiveFlag = FALSE;
Config::excludeSources.clear();
Config::excludePatternList.clear();
Config::examplePath.clear();
Config::examplePatternList.clear();
Config::imagePath.clear();
Config::inputFilter.resize(0);
Config::alphaIndexFlag = FALSE;
Config::colsInAlphaIndex = 5;
Config::ignorePrefixList.clear();
Config::generateHtml = TRUE;
Config::htmlOutputDir = "html";
Config::headerFile.resize(0);
Config::footerFile.resize(0);
Config::htmlStyleSheet.resize(0);
Config::htmlAlignMemberFlag = TRUE;
Config::htmlHelpFlag = FALSE;
Config::generateLatex = TRUE;
Config::latexOutputDir = "latex";
Config::compactLatexFlag = FALSE;
Config::paperType = "a4wide";
Config::extraPackageList.clear();
Config::latexHeaderFile.resize(0);
Config::pdfHyperFlag = FALSE;
Config::latexBatchModeFlag = FALSE;
Config::generateRTF = FALSE;
Config::rtfOutputDir = "rtf";
Config::compactRTFFlag = FALSE;
Config::rtfHyperFlag = FALSE;
Config::generateMan = TRUE;
Config::manOutputDir = "man";
Config::manExtension = ".3";
Config::htmlStyleSheet.resize(0);
Config::ignorePrefixList.clear();
Config::includePath.clear();
Config::examplePath.clear();
Config::imagePath.clear();
Config::inputSources.clear();
Config::excludeSources.clear();
Config::filePatternList.clear();
Config::examplePatternList.clear();
Config::imagePatternList.clear();
Config::excludePatternList.clear();
Config::tagFileList.clear();
Config::extDocPathList.clear();
Config::preprocessingFlag = TRUE;
Config::macroExpansionFlag = FALSE;
Config::searchIncludeFlag = TRUE;
Config::includePath.clear();
Config::predefined.clear();
Config::extraPackageList.clear();
Config::stripFromPath.clear();
Config::sectionFilterList.clear();
Config::tabSize=8;
Config::colsInAlphaIndex=5;
Config::quietFlag = FALSE;
Config::recursiveFlag = FALSE;
Config::allExtFlag = FALSE;
Config::searchEngineFlag = FALSE;
Config::extractAllFlag = FALSE;
Config::extractPrivateFlag = FALSE;
Config::noIndexFlag = FALSE;
Config::hideMemberFlag = FALSE;
Config::hideClassFlag = FALSE;
Config::macroExpansionFlag = FALSE;
Config::onlyPredefinedFlag = FALSE;
Config::fullPathNameFlag = FALSE;
Config::compactLatexFlag = FALSE;
Config::internalDocsFlag = FALSE;
Config::caseSensitiveNames = FALSE;
Config::sourceBrowseFlag = FALSE;
Config::htmlHelpFlag = FALSE;
Config::alphaIndexFlag = FALSE;
Config::pdfHyperFlag = FALSE;
Config::alwaysDetailsFlag = FALSE;
Config::inlineSourceFlag = FALSE;
Config::haveDotFlag = FALSE;
Config::compactRTFFlag = FALSE;
Config::rtfHyperFlag = FALSE;
Config::latexBatchModeFlag = FALSE;
Config::warningFlag = TRUE;
Config::generateHtml = TRUE;
Config::generateLatex = TRUE;
Config::generateMan = TRUE;
Config::generateRTF = FALSE;
Config::preprocessingFlag = TRUE;
Config::briefMemDescFlag = TRUE;
Config::searchIncludeFlag = TRUE;
Config::classDiagramFlag = TRUE;
Config::repeatBriefFlag = TRUE;
Config::verbatimHeaderFlag = TRUE;
Config::htmlAlignMemberFlag = TRUE;
Config::autoBriefFlag = TRUE;
Config::inheritDocsFlag = TRUE;
Config::inlineInfoFlag = TRUE;
Config::collGraphFlag = TRUE;
Config::includeGraphFlag = TRUE;
Config::gfxHierarchyFlag = TRUE;
Config::showIncFileFlag = TRUE;
Config::stripCommentsFlag = TRUE;
Config::sortMembersFlag = TRUE;
Config::onlyPredefinedFlag = FALSE;
Config::tagFileList.clear();
Config::genTagFile.resize(0);
Config::allExtFlag = FALSE;
Config::perlPath = "/usr/bin/perl";
Config::haveDotFlag = FALSE;
Config::collGraphFlag = TRUE;
Config::includeGraphFlag = TRUE;
Config::gfxHierarchyFlag = TRUE;
Config::searchEngineFlag = FALSE;
Config::cgiName = "search.cgi";
Config::cgiURL.resize(0);
Config::docURL.resize(0);
Config::docAbsPath.resize(0);
Config::binAbsPath = "/usr/local/bin/";
Config::extDocPathList.clear();
}
static void writeBoolValue(QTextStream &t,bool v)
......@@ -573,6 +725,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# The format is:\n";
t << "# TAG = value [value, ...]\n";
t << "# Values that contain spaces should be placed between quotes (\" \")\n";
}
if (!sl)
{
t << "\n";
}
t << "#---------------------------------------------------------------------------\n";
......@@ -581,22 +736,22 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# The PROJECT_NAME tag is a single word (or a sequence of word surrounded\n";
t << "# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \n";
t << "# by quotes) that should identify the project. \n";
t << "\n";
}
t << "PROJECT_NAME = ";
t << "PROJECT_NAME = ";
writeStringValue(t,Config::projectName);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The PROJECT_NUMBER tag can be used to enter a project or revision number.\n" ;
t << "# The PROJECT_NUMBER tag can be used to enter a project or revision number. \n";
t << "# This could be handy for archiving the generated documentation or \n";
t << "# if some version control system is used.\n";
t << "\n";
}
t << "PROJECT_NUMBER = ";
t << "PROJECT_NUMBER = ";
writeStringValue(t,Config::projectNumber);
t << "\n";
if (!sl)
......@@ -608,304 +763,305 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# where doxygen was started. If left blank the current directory will be used.\n";
t << "\n";
}
t << "OUTPUT_DIRECTORY = ";
t << "OUTPUT_DIRECTORY = ";
writeStringValue(t,Config::outputDir);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The OUTPUT_LANGUAGE tag is used to specify the language in which all\n";
t << "# documentation generated by doxygen is written. Doxygen will use this\n";
t << "# information to generate all constant output in the proper language.\n";
t << "# The OUTPUT_LANGUAGE tag is used to specify the language in which all \n";
t << "# documentation generated by doxygen is written. Doxygen will use this \n";
t << "# information to generate all constant output in the proper language. \n";
t << "# The default language is English, other supported languages are: \n";
t << "# Dutch, French, Italian, Czech, Swedish, German and Japanese\n";
t << "# Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n";
t << "# Spanish and Russian\n";
t << "\n";
}
t << "OUTPUT_LANGUAGE = ";
t << "OUTPUT_LANGUAGE = ";
writeStringValue(t,Config::outputLanguage);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The QUIET tag can be used to turn on/off the messages that are generated\n";
t << "# by doxygen. Possible values are YES and NO. If left blank NO is used.\n";
t << "# The QUIET tag can be used to turn on/off the messages that are generated \n";
t << "# by doxygen. Possible values are YES and NO. If left blank NO is used. \n";
t << "\n";
}
t << "QUIET = ";
t << "QUIET = ";
writeBoolValue(t,Config::quietFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The WARNINGS tag can be used to turn on/off the warning messages that are\n";
t << "# generated by doxygen. Possible values are YES and NO. If left blank\n";
t << "# NO is used.\n";
t << "# The WARNINGS tag can be used to turn on/off the warning messages that are \n";
t << "# generated by doxygen. Possible values are YES and NO. If left blank \n";
t << "# NO is used. \n";
t << "\n";
}
t << "WARNINGS = ";
t << "WARNINGS = ";
writeBoolValue(t,Config::warningFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The DISABLE_INDEX tag can be used to turn on/off the condensed index at\n";
t << "# top of each HTML page. The value NO (the default) enables the index and\n";
t << "# the value YES disables it.\n";
t << "# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \n";
t << "# top of each HTML page. The value NO (the default) enables the index and \n";
t << "# the value YES disables it. \n";
t << "\n";
}
t << "DISABLE_INDEX = ";
t << "DISABLE_INDEX = ";
writeBoolValue(t,Config::noIndexFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the EXTRACT_ALL tag is set to YES all classes and functions will be\n";
t << "# included in the documentation, even if no documentation was available.\n";
t << "# If the EXTRACT_ALL tag is set to YES all classes and functions will be \n";
t << "# included in the documentation, even if no documentation was available. \n";
t << "\n";
}
t << "EXTRACT_ALL = ";
t << "EXTRACT_ALL = ";
writeBoolValue(t,Config::extractAllFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the EXTRACT_PRIVATE tag is set to YES all private members of a class\n";
t << "# will be included in the documentation.\n";
t << "# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \n";
t << "# will be included in the documentation. \n";
t << "\n";
}
t << "EXTRACT_PRIVATE = ";
writeBoolValue(t,Config::extractPrivateFlag);
t << "EXTRACT_PRIVATE = ";
writeBoolValue(t,Config::extractPrivateFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all\n";
t << "# undocumented members inside documented classes or files.\n";
t << "# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \n";
t << "# undocumented members inside documented classes or files. \n";
t << "\n";
}
t << "HIDE_UNDOC_MEMBERS = ";
t << "HIDE_UNDOC_MEMBERS = ";
writeBoolValue(t,Config::hideMemberFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the HIDE_UNDOC_CLASSESS tag is set to YES, Doxygen will hide all\n";
t << "# undocumented classes.\n";
t << "# If the HIDE_UNDOC_CLASSESS tag is set to YES, Doxygen will hide all \n";
t << "# undocumented classes. \n";
t << "\n";
}
t << "HIDE_UNDOC_CLASSES = ";
t << "HIDE_UNDOC_CLASSES = ";
writeBoolValue(t,Config::hideClassFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will\n";
t << "# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \n";
t << "# include brief member descriptions after the members that are listed in \n";
t << "# the file and class documentation (similar to JavaDoc).\n";
t << "# Set to NO to disable this.\n";
t << "# the file and class documentation (similar to JavaDoc). \n";
t << "# Set to NO to disable this. \n";
t << "\n";
}
t << "BRIEF_MEMBER_DESC = ";
t << "BRIEF_MEMBER_DESC = ";
writeBoolValue(t,Config::briefMemDescFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend\n";
t << "# the brief description of a member or function before the detailed description.\n";
t << "# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \n";
t << "# the brief description of a member or function before the detailed description. \n";
t << "# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \n";
t << "# brief descriptions will be completely suppressed.\n";
t << "# brief descriptions will be completely suppressed. \n";
t << "\n";
}
t << "REPEAT_BRIEF = ";
t << "REPEAT_BRIEF = ";
writeBoolValue(t,Config::repeatBriefFlag);
t << "\n";
if (!sl)
{
t <<"\n";
t << "# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then\n";
t << "# Doxygen will generate a detailed section even if there is only a brief\n";
t << "# description.\n";
t <<"\n";
t << "\n";
t << "# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \n";
t << "# Doxygen will generate a detailed section even if there is only a brief \n";
t << "# description. \n";
t << "\n";
}
t << "ALWAYS_DETAILED_SEC = ";
t << "ALWAYS_DETAILED_SEC = ";
writeBoolValue(t,Config::alwaysDetailsFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full\n";
t << "# path before files name in the file list and in the header files. If set\n" ;
t << "# to NO the shortest path that makes the file name unique will be used.\n";
t << "# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \n";
t << "# path before files name in the file list and in the header files. If set \n";
t << "# to NO the shortest path that makes the file name unique will be used. \n";
t << "\n";
}
t << "FULL_PATH_NAMES = ";
t << "FULL_PATH_NAMES = ";
writeBoolValue(t,Config::fullPathNameFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag\n";
t << "# can be used to strip a user defined part of the path. Stripping is\n" ;
t << "# only done if one of the specified strings matches the left-hand part of\n";
t << "# the path.\n";
t << "# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \n";
t << "# can be used to strip a user defined part of the path. Stripping is \n";
t << "# only done if one of the specified strings matches the left-hand part of \n";
t << "# the path. \n";
t << "\n";
}
t << "STRIP_FROM_PATH = ";
t << "STRIP_FROM_PATH = ";
writeStringList(t,Config::stripFromPath);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The INTERNAL_DOCS tag determines if documentation\n";
t << "# The INTERNAL_DOCS tag determines if documentation \n";
t << "# that is typed after a \\internal command is included. If the tag is set \n";
t << "# to NO (the default) then the documentation will be excluded.\n";
t << "# Set it to YES to include the internal documentation.\n";
t << "# to NO (the default) then the documentation will be excluded. \n";
t << "# Set it to YES to include the internal documentation. \n";
t << "\n";
}
t << "INTERNAL_DOCS = ";
t << "INTERNAL_DOCS = ";
writeBoolValue(t,Config::internalDocsFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will\n";
t << "# generate a class diagram (in Html and LaTeX) for classes with base or\n";
t << "# super classes. Setting the tag to NO turns the diagrams off.\n";
t << "# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \n";
t << "# generate a class diagram (in Html and LaTeX) for classes with base or \n";
t << "# super classes. Setting the tag to NO turns the diagrams off. \n";
t << "\n";
}
t << "CLASS_DIAGRAMS = ";
t << "CLASS_DIAGRAMS = ";
writeBoolValue(t,Config::classDiagramFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the SOURCE_BROWSER tag is set to YES then a list of source files will\n";
t << "# be generated. Documented entities will be cross-referenced with these sources.\n";
t << "# If the SOURCE_BROWSER tag is set to YES then a list of source files will \n";
t << "# be generated. Documented entities will be cross-referenced with these sources. \n";
t << "\n";
}
t << "SOURCE_BROWSER = ";
t << "SOURCE_BROWSER = ";
writeBoolValue(t,Config::sourceBrowseFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# Setting the INLINE_SOURCES tag to YES will include the body\n";
t << "# of functions and classes directly in the documentation.\n";
t << "# Setting the INLINE_SOURCES tag to YES will include the body \n";
t << "# of functions and classes directly in the documentation. \n";
t << "\n";
}
t << "INLINE_SOURCES = ";
t << "INLINE_SOURCES = ";
writeBoolValue(t,Config::inlineSourceFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct\n";
t << "# doxygen to hide any special comment blocks from generated source code\n";
t << "# fragments. Normal C and C++ comments will always remain visible.\n";
t << "# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \n";
t << "# doxygen to hide any special comment blocks from generated source code \n";
t << "# fragments. Normal C and C++ comments will always remain visible. \n";
t << "\n";
}
t << "STRIP_CODE_COMMENTS = ";
t << "STRIP_CODE_COMMENTS = ";
writeBoolValue(t,Config::stripCommentsFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the CASE_SENSE_NAMES tag is set to NO (the default) then Doxygen\n";
t << "# will only generate file names in lower case letters. If set to\n";
t << "# YES upper case letters are also allowed. This is useful if you have\n";
t << "# classes or files whose names only differ in case and if your file system\n";
t << "# supports case sensitive file names.\n";
t << "# If the CASE_SENSE_NAMES tag is set to NO (the default) then Doxygen \n";
t << "# will only generate file names in lower case letters. If set to \n";
t << "# YES upper case letters are also allowed. This is useful if you have \n";
t << "# classes or files whose names only differ in case and if your file system \n";
t << "# supports case sensitive file names. \n";
t << "\n";
}
t << "CASE_SENSE_NAMES = ";
t << "CASE_SENSE_NAMES = ";
writeBoolValue(t,Config::caseSensitiveNames);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen\n";
t << "# will generate a verbatim copy of the header file for each class for\n";
t << "# which an include is specified. Set to NO to disable this.\n";
t << "# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \n";
t << "# will generate a verbatim copy of the header file for each class for \n";
t << "# which an include is specified. Set to NO to disable this. \n";
t << "\n";
}
t << "VERBATIM_HEADERS = ";
t << "VERBATIM_HEADERS = ";
writeBoolValue(t,Config::verbatimHeaderFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen\n";
t << "# will put list of the files that are included by a file in the documentation\n";
t << "# of that file.\n";
t << "# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \n";
t << "# will put list of the files that are included by a file in the documentation \n";
t << "# of that file. \n";
t << "\n";
}
t << "SHOW_INCLUDE_FILES = ";
t << "SHOW_INCLUDE_FILES = ";
writeBoolValue(t,Config::showIncFileFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the JAVADOC_AUTOBRIEF tag is set to YES (the default) then Doxygen\n";
t << "# will interpret the first line (until the first dot) of a JavaDoc-style\n";
t << "# comment as the brief description. If set to NO, the Javadoc-style will\n";
t << "# behave just like the Qt-style comments.\n";
t << "# If the JAVADOC_AUTOBRIEF tag is set to YES (the default) then Doxygen \n";
t << "# will interpret the first line (until the first dot) of a JavaDoc-style \n";
t << "# comment as the brief description. If set to NO, the Javadoc-style will \n";
t << "# behave just like the Qt-style comments. \n";
t << "\n";
}
t << "JAVADOC_AUTOBRIEF = ";
t << "JAVADOC_AUTOBRIEF = ";
writeBoolValue(t,Config::autoBriefFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented\n";
t << "# member inherits the documentation from any documented member that it\n";
t << "# reimplements.\n";
t << "# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \n";
t << "# member inherits the documentation from any documented member that it \n";
t << "# reimplements. \n";
t << "\n";
}
t << "INHERIT_DOCS = ";
t << "INHERIT_DOCS = ";
writeBoolValue(t,Config::inheritDocsFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]\n";
t << "# is inserted in the documentation for inline members.\n";
t << "# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \n";
t << "# is inserted in the documentation for inline members. \n";
t << "\n";
}
t << "INLINE_INFO = ";
t << "INLINE_INFO = ";
writeBoolValue(t,Config::inlineInfoFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen\n";
t << "# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \n";
t << "# will sort the (detailed) documentation of file and class members \n";
t << "# alphabetically by member name. If set to NO the members will appear in\n";
t << "# declaration order.\n";
t << "# alphabetically by member name. If set to NO the members will appear in \n";
t << "# declaration order. \n";
t << "\n";
}
t << "SORT_MEMBER_DOCS = ";
t << "SORT_MEMBER_DOCS = ";
writeBoolValue(t,Config::sortMembersFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The TAB_SIZE tag can be used to set the number of spaces in a tab.\n";
t << "# Doxygen uses this value to replace tabs by spaces in code fragments.\n";
t << "# The TAB_SIZE tag can be used to set the number of spaces in a tab. \n";
t << "# Doxygen uses this value to replace tabs by spaces in code fragments. \n";
t << "\n";
}
t << "TAB_SIZE = ";
t << "TAB_SIZE = ";
writeIntValue(t,Config::tabSize);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The ENABLE_SECTIONS tag can be used to enable conditional\n";
t << "# documentation sections, marked by \\if sectionname ... \\endif.\n";
t << "# The ENABLE_SECTIONS tag can be used to enable conditional \n";
t << "# documentation sections, marked by \\if sectionname ... \\endif. \n";
t << "\n";
}
t << "ENABLED_SECTIONS = ";
t << "ENABLED_SECTIONS = ";
writeStringList(t,Config::sectionFilterList);
t << "\n";
if (!sl)
......@@ -921,10 +1077,10 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# The INPUT tag can be used to specify the files and/or directories that contain \n";
t << "# documented source files. You may enter file names like \"myfile.cpp\" or \n";
t << "# directories like \"/usr/src/myproject\". Separate the files or directories \n";
t << "# with spaces.\n";
t << "# with spaces. \n";
t << "\n";
}
t << "INPUT = ";
t << "INPUT = ";
writeStringList(t,Config::inputSources);
t << "\n";
if (!sl)
......@@ -933,43 +1089,43 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# If the value of the INPUT tag contains directories, you can use the \n";
t << "# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \n";
t << "# and *.h) to filter out the source-files in the directories. If left \n";
t << "# blank all files are included.\n";
t << "# blank all files are included. \n";
t << "\n";
}
t << "FILE_PATTERNS = ";
t << "FILE_PATTERNS = ";
writeStringList(t,Config::filePatternList);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The RECURSIVE tag can be used to turn specify whether or not subdirectories\n";
t << "# should be searched for input files as well. Possible values are YES and NO.\n";
t << "# If left blank NO is used.\n";
t << "# The RECURSIVE tag can be used to turn specify whether or not subdirectories \n";
t << "# should be searched for input files as well. Possible values are YES and NO. \n";
t << "# If left blank NO is used. \n";
t << "\n";
}
t << "RECURSIVE = ";
t << "RECURSIVE = ";
writeBoolValue(t,Config::recursiveFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The EXCLUDE tag can be used to specify files and/or directories that should\n";
t << "# The EXCLUDE tag can be used to specify files and/or directories that should \n";
t << "# excluded from the INPUT source files. This way you can easily exclude a \n";
t << "# subdirectory from a directory tree whose root is specified with the INPUT tag.\n";
t << "# subdirectory from a directory tree whose root is specified with the INPUT tag. \n";
t << "\n";
}
t << "EXCLUDE = ";
t << "EXCLUDE = ";
writeStringList(t,Config::excludeSources);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the value of the INPUT tag contains directories, you can use the\n";
t << "# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude\n";
t << "# certain files from those directories.\n";
t << "# If the value of the INPUT tag contains directories, you can use the \n";
t << "# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \n";
t << "# certain files from those directories. \n";
t << "\n";
}
t << "EXCLUDE_PATTERNS = ";
t << "EXCLUDE_PATTERNS = ";
writeStringList(t,Config::excludePatternList);
t << "\n";
if (!sl)
......@@ -977,48 +1133,47 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "\n";
t << "# The EXAMPLE_PATH tag can be used to specify one or more files or \n";
t << "# directories that contain example code fragments that are included (see \n";
t << "# the \\include command).\n";
t << "# the \\include command). \n";
t << "\n";
}
t << "EXAMPLE_PATH = ";
t << "EXAMPLE_PATH = ";
writeStringList(t,Config::examplePath);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the value of the EXAMPLE_PATH tag contains directories, you can use the\n";
t << "# If the value of the EXAMPLE_PATH tag contains directories, you can use the \n";
t << "# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \n";
t << "# and *.h) to filter out the source-files in the directories. If left \n";
t << "# blank all files are included.\n";
t << "# blank all files are included. \n";
t << "\n";
}
t << "EXAMPLE_PATTERNS = ";
t << "EXAMPLE_PATTERNS = ";
writeStringList(t,Config::examplePatternList);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The IMAGE_PATH tag can be used to specify one or more files or \n";
t << "# directories that contain image that are included in the documentation (see \n";
t << "# the \\image command).\n";
t << "# the \\image command). \n";
t << "\n";
}
t << "IMAGE_PATH = ";
t << "IMAGE_PATH = ";
writeStringList(t,Config::imagePath);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The INPUT_FILTER tag can be used to specify a program that doxygen should\n";
t << "# The INPUT_FILTER tag can be used to specify a program that doxygen should \n";
t << "# invoke to filter for each input file. Doxygen will invoke the filter program \n";
t << "# by executing (via popen()) the command <filter> <input-file>, where <filter>\n";
t << "# is the value of the INPUT_FILTER tag, and <input-file> is the name of an\n";
t << "# input file. Doxygen will then use the output that the filter program writes\n";
t << "# to standard output.\n";
t << "# by executing (via popen()) the command <filter> <input-file>, where <filter> \n";
t << "# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \n";
t << "# input file. Doxygen will then use the output that the filter program writes \n";
t << "# to standard output. \n";
t << "\n";
}
t << "INPUT_FILTER = ";
t << "INPUT_FILTER = ";
writeStringValue(t,Config::inputFilter);
t << "\n";
if (!sl)
......@@ -1026,126 +1181,126 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "\n";
}
t << "#---------------------------------------------------------------------------\n";
t << "# configuration options related to the HTML output\n";
t << "# configuration options related to the alphabetical class index\n";
t << "#---------------------------------------------------------------------------\n";
if (!sl)
{
t << "\n";
t << "# If the GENERATE_HTML tag is set to YES (the default) Doxygen will\n";
t << "# generate HTML output\n";
t << "# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \n";
t << "# of all compounds will be generated. Enable this if the project \n";
t << "# contains a lot of classes, structs, unions or interfaces. \n";
t << "\n";
}
t << "GENERATE_HTML = ";
writeBoolValue(t,Config::generateHtml);
t << "ALPHABETICAL_INDEX = ";
writeBoolValue(t,Config::alphaIndexFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.\n";
t << "# If a relative path is entered the value of OUTPUT_DIRECTORY will be\n";
t << "# put in front of it. If left blank `html' will be used as the default path.\n";
t << "# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \n";
t << "# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \n";
t << "# in which this list will be split (can be a number in the range [1..20]) \n";
t << "\n";
}
t << "HTML_OUTPUT = ";
writeStringValue(t,Config::htmlOutputDir);
t << "COLS_IN_ALPHA_INDEX = ";
writeIntValue(t,Config::colsInAlphaIndex);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The HTML_HEADER tag can be used to specify a personal HTML header for \n";
t << "# each generated HTML page. If it is left blank doxygen will generate a \n";
t << "# standard header.\n";
t << "# In case all classes in a project start with a common prefix, all \n";
t << "# classes will be put under the same header in the alphabetical index. \n";
t << "# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \n";
t << "# should be ignored while generating the index headers. \n";
t << "\n";
}
t << "HTML_HEADER = ";
writeStringValue(t,Config::headerFile);
t << "IGNORE_PREFIX = ";
writeStringList(t,Config::ignorePrefixList);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The HTML_FOOTER tag can be used to specify a personal HTML footer for \n";
t << "# each generated HTML page. If it is left blank doxygen will generate a \n";
t << "# standard footer.\n";
t << "\n";
}
t << "HTML_FOOTER = ";
writeStringValue(t,Config::footerFile);
t << "\n";
t << "#---------------------------------------------------------------------------\n";
t << "# configuration options related to the HTML output\n";
t << "#---------------------------------------------------------------------------\n";
if (!sl)
{
t << "\n";
t << "# The HTML_STYLESHEET tag can be used to specify a user defined cascading\n";
t << "# style sheet that is used by each HTML page. It can be used to \n";
t << "# fine-tune the look of the HTML output. If the tag is left blank doxygen\n";
t << "# will generate a default style sheet\n";
t << "# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \n";
t << "# generate HTML output. \n";
t << "\n";
}
t << "HTML_STYLESHEET = ";
writeStringValue(t,Config::htmlStyleSheet);
t << "GENERATE_HTML = ";
writeBoolValue(t,Config::generateHtml);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,\n";
t << "# files or namespaces will be aligned in HTML using tables. If set to\n";
t << "# NO a bullet list will be used.\n";
t << "# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \n";
t << "# If a relative path is entered the value of OUTPUT_DIRECTORY will be \n";
t << "# put in front of it. If left blank `html' will be used as the default path. \n";
t << "\n";
}
t << "HTML_ALIGN_MEMBERS = ";
writeBoolValue(t,Config::htmlAlignMemberFlag);
t << "HTML_OUTPUT = ";
writeStringValue(t,Config::htmlOutputDir);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the GENERATE_HTMLHELP tag is set to YES, additional index files\n";
t << "# will be generated that can be used as input for tools like the\n";
t << "# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)\n";
t << "# of the generated HTML documentation.\n";
t << "# The HTML_HEADER tag can be used to specify a personal HTML header for \n";
t << "# each generated HTML page. If it is left blank doxygen will generate a \n";
t << "# standard header.\n";
t << "\n";
}
t << "GENERATE_HTMLHELP = ";
writeBoolValue(t,Config::htmlHelpFlag);
t << "HTML_HEADER = ";
writeStringValue(t,Config::headerFile);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The HTML_FOOTER tag can be used to specify a personal HTML footer for \n";
t << "# each generated HTML page. If it is left blank doxygen will generate a \n";
t << "# standard footer.\n";
t << "\n";
}
t << "#---------------------------------------------------------------------------\n";
t << "# configuration options related to the alphabetical class index\n";
t << "#---------------------------------------------------------------------------\n";
t << "HTML_FOOTER = ";
writeStringValue(t,Config::footerFile);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index\n";
t << "# of all compounds will be generated. Enable this if the project\n";
t << "# contains a lot of classes, structs, unions or interfaces.\n";
t << "# The HTML_STYLESHEET tag can be used to specify a user defined cascading \n";
t << "# style sheet that is used by each HTML page. It can be used to \n";
t << "# fine-tune the look of the HTML output. If the tag is left blank doxygen \n";
t << "# will generate a default style sheet \n";
t << "\n";
}
t << "ALPHABETICAL_INDEX = ";
writeBoolValue(t,Config::alphaIndexFlag);
t << "HTML_STYLESHEET = ";
writeStringValue(t,Config::htmlStyleSheet);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then\n";
t << "# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns\n";
t << "# in which this list will be split (can be a number in the range [1..20])\n";
t << "# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \n";
t << "# files or namespaces will be aligned in HTML using tables. If set to \n";
t << "# NO a bullet list will be used. \n";
t << "\n";
}
t << "COLS_IN_ALPHA_INDEX = ";
writeIntValue(t,Config::colsInAlphaIndex);
t << "HTML_ALIGN_MEMBERS = ";
writeBoolValue(t,Config::htmlAlignMemberFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# In case all classes in a project start with a common prefix, all\n";
t << "# classes will be put under the same header in the alphabetical index.\n";
t << "# The IGNORE_PREFIX tag can be used to specify one or more prefixes that\n";
t << "# should be ignored while generating the index headers.\n";
t << "# If the GENERATE_HTMLHELP tag is set to YES, additional index files \n";
t << "# will be generated that can be used as input for tools like the \n";
t << "# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) \n";
t << "# of the generated HTML documentation. \n";
t << "\n";
}
t << "IGNORE_PREFIX = ";
writeStringList(t,Config::ignorePrefixList);
t << "GENERATE_HTMLHELP = ";
writeBoolValue(t,Config::htmlHelpFlag);
t << "\n";
if (!sl)
{
......@@ -1157,179 +1312,183 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will\n";
t << "# generate Latex output.\n";
t << "# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \n";
t << "# generate Latex output. \n";
t << "\n";
}
t << "GENERATE_LATEX = ";
t << "GENERATE_LATEX = ";
writeBoolValue(t,Config::generateLatex);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.\n";
t << "# If a relative path is entered the value of OUTPUT_DIRECTORY will be\n";
t << "# put in front of it. If left blank `latex' will be used as the default path.\n";
t << "# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \n";
t << "# If a relative path is entered the value of OUTPUT_DIRECTORY will be \n";
t << "# put in front of it. If left blank `latex' will be used as the default path. \n";
t << "\n";
}
t << "LATEX_OUTPUT = ";
t << "LATEX_OUTPUT = ";
writeStringValue(t,Config::latexOutputDir);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact\n";
t << "# LaTeX documents. This may be useful for small projects and may help to\n";
t << "# save some trees in general.\n";
t << "# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \n";
t << "# LaTeX documents. This may be useful for small projects and may help to \n";
t << "# save some trees in general. \n";
t << "\n";
}
t << "COMPACT_LATEX = ";
t << "COMPACT_LATEX = ";
writeBoolValue(t,Config::compactLatexFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The PAPER_TYPE tag can be used to set the paper type that is used\n";
t << "# The PAPER_TYPE tag can be used to set the paper type that is used \n";
t << "# by the printer. Possible values are: a4, a4wide, letter, legal and \n";
t << "# executive. If left blank a4wide will be used.\n";
t << "# executive. If left blank a4wide will be used. \n";
t << "\n";
}
t << "PAPER_TYPE = ";
t << "PAPER_TYPE = ";
writeStringValue(t,Config::paperType);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX\n";
t << "# packages that should be included in the LaTeX output.\n";
t << "# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \n";
t << "# packages that should be included in the LaTeX output. \n";
t << "\n";
}
t << "EXTRA_PACKAGES = ";
t << "EXTRA_PACKAGES = ";
writeStringList(t,Config::extraPackageList);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \n";
t << "# the generated latex document. The header should contain everything until\n";
t << "# the generated latex document. The header should contain everything until \n";
t << "# the first chapter. If it is left blank doxygen will generate a \n";
t << "# standard header. Notice: only use this tag if you know what you are doing!\n";
t << "# standard header. Notice: only use this tag if you know what you are doing! \n";
t << "\n";
}
t << "LATEX_HEADER = ";
t << "LATEX_HEADER = ";
writeStringValue(t,Config::latexHeaderFile);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated\n";
t << "# is prepared for conversion to pdf (using ps2pdf). The pdf file will\n";
t << "# contain links (just like the HTML output) instead of page references\n";
t << "# This makes the output suitable for online browsing using a pdf viewer.\n";
t << "# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \n";
t << "# is prepared for conversion to pdf (using ps2pdf). The pdf file will \n";
t << "# contain links (just like the HTML output) instead of page references \n";
t << "# This makes the output suitable for online browsing using a pdf viewer. \n";
t << "\n";
}
t << "PDF_HYPERLINKS = ";
t << "PDF_HYPERLINKS = ";
writeBoolValue(t,Config::pdfHyperFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\\\batchmode. \n";
t << "# command to the generated LaTeX files. This will instruct LaTeX to keep \n";
t << "# running if errors occur, instead of asking the user for help. \n";
t << "# This option is also used when generating formulas in HTML. \n";
t << "\n";
}
t << "LATEX_BATCHMODE = ";
writeBoolValue(t,Config::latexBatchModeFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.\n";
t << "# command to the generated LaTeX files. This will instruct LaTeX to keep\n";
t << "# running if errors occur, instead of asking the user for help.\n";
t << "# This option is also used when generating formulas in HTML.\n";
}
t << "LATEX_BATCHMODE = ";
writeBoolValue(t,Config::latexBatchModeFlag);
t << "\n";
t << "#---------------------------------------------------------------------------\n";
t << "# configuration options related to the RTF output\n";
t << "#---------------------------------------------------------------------------\n";
if (!sl)
{
t << "\n";
t << "# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output\n";
t << "# For now this is experimental and is disabled by default. The RTF output\n";
t << "# is optimised for Word 97 and may not look too pretty with other readers\n";
t << "# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \n";
t << "# For now this is experimental and is disabled by default. The RTF output \n";
t << "# is optimised for Word 97 and may not look too pretty with other readers \n";
t << "# or editors.\n";
t << "\n";
}
t << "GENERATE_RTF = ";
t << "GENERATE_RTF = ";
writeBoolValue(t,Config::generateRTF);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.\n";
t << "# If a relative path is entered the value of OUTPUT_DIRECTORY will be\n";
t << "# put in front of it. If left blank `rtf' will be used as the default path.\n";
t << "# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \n";
t << "# If a relative path is entered the value of OUTPUT_DIRECTORY will be \n";
t << "# put in front of it. If left blank `rtf' will be used as the default path. \n";
t << "\n";
}
t << "RTF_OUTPUT = ";
t << "RTF_OUTPUT = ";
writeStringValue(t,Config::rtfOutputDir);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the COMPACT_RTF tag is set to YES Doxygen generates more compact\n";
t << "# RTF documents. This may be useful for small projects and may help to\n";
t << "# save some trees in general.\n";
t << "# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \n";
t << "# RTF documents. This may be useful for small projects and may help to \n";
t << "# save some trees in general. \n";
t << "\n";
}
t << "COMPACT_RTF = ";
t << "COMPACT_RTF = ";
writeBoolValue(t,Config::compactRTFFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated\n";
t << "# will contain hyperlink fields. The RTF file will\n";
t << "# contain links (just like the HTML output) instead of page references.\n";
t << "# This makes the output suitable for online browsing using a WORD or other.\n";
t << "# programs which support those fields.\n";
t << "# Note: wordpad (write) and others do not support links.\n";
t << "# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \n";
t << "# will contain hyperlink fields. The RTF file will \n";
t << "# contain links (just like the HTML output) instead of page references. \n";
t << "# This makes the output suitable for online browsing using a WORD or other. \n";
t << "# programs which support those fields. \n";
t << "# Note: wordpad (write) and others do not support links. \n";
t << "\n";
}
t << "RTF_HYPERLINKS = ";
t << "RTF_HYPERLINKS = ";
writeBoolValue(t,Config::rtfHyperFlag);
t << "\n";
if (!sl)
{
t << "\n";
}
t << "#---------------------------------------------------------------------------\n";
t << "# configuration options related to the man page output\n";
t << "#---------------------------------------------------------------------------\n";
if (!sl)
{
t << "\n";
t << "# If the GENERATE_MAN tag is set to YES (the default) Doxygen will\n";
t << "# generate man pages\n";
t << "# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \n";
t << "# generate man pages \n";
t << "\n";
}
t << "GENERATE_MAN = ";
t << "GENERATE_MAN = ";
writeBoolValue(t,Config::generateMan);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The MAN_OUTPUT tag is used to specify where the man pages will be put.\n";
t << "# If a relative path is entered the value of OUTPUT_DIRECTORY will be\n";
t << "# put in front of it. If left blank `man' will be used as the default path.\n";
t << "# The MAN_OUTPUT tag is used to specify where the man pages will be put. \n";
t << "# If a relative path is entered the value of OUTPUT_DIRECTORY will be \n";
t << "# put in front of it. If left blank `man' will be used as the default path. \n";
t << "\n";
}
t << "MAN_OUTPUT = ";
t << "MAN_OUTPUT = ";
writeStringValue(t,Config::manOutputDir);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The MAN_EXTENSION tag determines the extension that is added to\n";
t << "# the generated man pages (default is the subroutine's section .3)\n";
t << "# The MAN_EXTENSION tag determines the extension that is added to \n";
t << "# the generated man pages (default is the subroutine's section .3) \n";
t << "\n";
}
t << "MAN_EXTENSION = ";
t << "MAN_EXTENSION = ";
writeStringValue(t,Config::manExtension);
t << "\n";
if (!sl)
......@@ -1337,14 +1496,14 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "\n";
}
t << "#---------------------------------------------------------------------------\n";
t << "# Configuration options related to the preprocessor \n";
t << "# Configuration options related to the preprocessor \n";
t << "#---------------------------------------------------------------------------\n";
if (!sl)
{
t << "\n";
t << "# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will\n";
t << "# evaluate all C-preprocessor directives found in the sources and include\n";
t << "# files.\n";
t << "# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \n";
t << "# evaluate all C-preprocessor directives found in the sources and include \n";
t << "# files. \n";
t << "\n";
}
t << "ENABLE_PREPROCESSING = ";
......@@ -1353,57 +1512,57 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro\n";
t << "# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \n";
t << "# names in the source code. If set to NO (the default) only conditional \n";
t << "# compilation will be performed.\n";
t << "# compilation will be performed. \n";
t << "\n";
}
t << "MACRO_EXPANSION = ";
t << "MACRO_EXPANSION = ";
writeBoolValue(t,Config::macroExpansionFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files\n";
t << "# in the INCLUDE_PATH (see below) will be search if a #include is found.\n";
t << "# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \n";
t << "# in the INCLUDE_PATH (see below) will be search if a #include is found. \n";
t << "\n";
}
t << "SEARCH_INCLUDES = ";
t << "SEARCH_INCLUDES = ";
writeBoolValue(t,Config::searchIncludeFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The INCLUDE_PATH tag can be used to specify one or more directories that\n";
t << "# contain include files that are not input files but should be processed by\n";
t << "# the preprocessor.\n" ;
t << "# The INCLUDE_PATH tag can be used to specify one or more directories that \n";
t << "# contain include files that are not input files but should be processed by \n";
t << "# the preprocessor. \n";
t << "\n";
}
t << "INCLUDE_PATH = ";
t << "INCLUDE_PATH = ";
writeStringList(t,Config::includePath);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The PREDEFINED tag can be used to specify one or more macro names that\n";
t << "# are defined before the preprocessor is started (similar to the -D option of\n";
t << "# gcc). The argument of the tag is a list of macros of the form: name\n";
t << "# The PREDEFINED tag can be used to specify one or more macro names that \n";
t << "# are defined before the preprocessor is started (similar to the -D option of \n";
t << "# gcc). The argument of the tag is a list of macros of the form: name \n";
t << "# or name=definition (no spaces). If the definition and the = are \n";
t << "# omitted =1 is assumed.\n";
t << "# omitted =1 is assumed. \n";
t << "\n";
}
t << "PREDEFINED = ";
t << "PREDEFINED = ";
writeStringList(t,Config::predefined);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES\n";
t << "# then the macro expansion is limited to the macros specified with the\n";
t << "# PREDEFINED tag.\n";
t << "# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \n";
t << "# then the macro expansion is limited to the macros specified with the \n";
t << "# PREDEFINED tag. \n";
t << "\n";
}
t << "EXPAND_ONLY_PREDEF = ";
t << "EXPAND_ONLY_PREDEF = ";
writeBoolValue(t,Config::onlyPredefinedFlag);
t << "\n";
if (!sl)
......@@ -1411,7 +1570,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "\n";
}
t << "#---------------------------------------------------------------------------\n";
t << "# Configuration options related to external references \n";
t << "# Configuration::addtions related to external references \n";
t << "#---------------------------------------------------------------------------\n";
if (!sl)
{
......@@ -1419,38 +1578,38 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# The TAGFILES tag can be used to specify one or more tagfiles. \n";
t << "\n";
}
t << "TAGFILES = ";
t << "TAGFILES = ";
writeStringList(t,Config::tagFileList);
t << "\n";
if (!sl)
{
t << "\n";
t << "# When a file name is specified after GENERATE_TAGFILE, doxygen will create\n";
t << "# a tag file that is based on the input files it reads.\n";
t << "# When a file name is specified after GENERATE_TAGFILE, doxygen will create \n";
t << "# a tag file that is based on the input files it reads. \n";
t << "\n";
}
t << "GENERATE_TAGFILE = ";
t << "GENERATE_TAGFILE = ";
writeStringValue(t,Config::genTagFile);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the ALLEXTERNALS tag is set to YES all external classes will be listed\n";
t << "# in the class index. If set to NO only the inherited external classes\n";
t << "# will be listed.\n";
t << "# If the ALLEXTERNALS tag is set to YES all external classes will be listed \n";
t << "# in the class index. If set to NO only the inherited external classes \n";
t << "# will be listed. \n";
t << "\n";
}
t << "ALLEXTERNALS = ";
t << "ALLEXTERNALS = ";
writeBoolValue(t,Config::allExtFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The PERL_PATH should be the absolute path and name of the perl script\n";
t << "# interpreter (i.e. the result of `which perl').\n";
t << "# The PERL_PATH should be the absolute path and name of the perl script \n";
t << "# interpreter (i.e. the result of `which perl'). \n";
t << "\n";
}
t << "PERL_PATH = ";
t << "PERL_PATH = ";
writeStringValue(t,Config::perlPath);
t << "\n";
if (!sl)
......@@ -1458,52 +1617,52 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "\n";
}
t << "#---------------------------------------------------------------------------\n";
t << "# Configuration options related to the dot tool \n";
t << "# Configuration options related to the dot tool \n";
t << "#---------------------------------------------------------------------------\n";
if (!sl)
{
t << "\n";
t << "# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is\n";
t << "# available from the path. This tool is part of Graphviz, a graph visualization\n";
t << "# toolkit from AT&T and Lucent Bell Labs. The other options in this section\n";
t << "# have no effect if this option is set to NO (the default)\n";
t << "# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \n";
t << "# available from the path. This tool is part of Graphviz, a graph visualization \n";
t << "# toolkit from AT&T and Lucent Bell Labs. The other options in this section \n";
t << "# have no effect if this option is set to NO (the default) \n";
t << "\n";
}
t << "HAVE_DOT = ";
t << "HAVE_DOT = ";
writeBoolValue(t,Config::haveDotFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen\n";
t << "# will generate a graph for each documented class showing the direct and\n";
t << "# indirect implementation dependencies (inheritance, containment, and\n";
t << "# class references variables) of the class with other documented classes.\n";
t << "# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \n";
t << "# will generate a graph for each documented class showing the direct and \n";
t << "# indirect implementation dependencies (inheritance, containment, and \n";
t << "# class references variables) of the class with other documented classes. \n";
t << "\n";
}
t << "COLLABORATION_GRAPH = ";
t << "COLLABORATION_GRAPH = ";
writeBoolValue(t,Config::collGraphFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the ENABLE_PREPROCESSING, INCLUDE_GRAPH, and HAVE_DOT tags are set to\n";
t << "# YES then doxygen will generate a graph for each documented file showing\n";
t << "# If the ENABLE_PREPROCESSING, INCLUDE_GRAPH, and HAVE_DOT tags are set to \n";
t << "# YES then doxygen will generate a graph for each documented file showing \n";
t << "# the direct and indirect include dependencies of the file with other \n";
t << "# documented files.\n";
t << "# documented files. \n";
t << "\n";
}
t << "INCLUDE_GRAPH = ";
t << "INCLUDE_GRAPH = ";
writeBoolValue(t,Config::includeGraphFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen\n";
t << "# will graphical hierarchy of all classes instead of a textual one.\n";
t << "# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \n";
t << "# will graphical hierarchy of all classes instead of a textual one. \n";
t << "\n";
}
t << "GRAPHICAL_HIERARCHY = ";
t << "GRAPHICAL_HIERARCHY = ";
writeBoolValue(t,Config::gfxHierarchyFlag);
t << "\n";
if (!sl)
......@@ -1511,81 +1670,81 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "\n";
}
t << "#---------------------------------------------------------------------------\n";
t << "# Configuration options related to the search engine \n";
t << "# Configuration::addtions related to the search engine \n";
t << "#---------------------------------------------------------------------------\n";
if (!sl)
{
t << "\n";
t << "# The SEARCHENGINE tag specifies whether or not a search engine should be \n";
t << "# used. If set to NO the values of all tags below this one will be ignored.\n";
t << "# used. If set to NO the values of all tags below this one will be ignored. \n";
t << "\n";
}
t << "SEARCHENGINE = ";
t << "SEARCHENGINE = ";
writeBoolValue(t,Config::searchEngineFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The CGI_NAME tag should be the name of the CGI script that\n";
t << "# starts the search engine (doxysearch) with the correct parameters.\n";
t << "# A script with this name will be generated by doxygen.\n";
t << "# The CGI_NAME tag should be the name of the CGI script that \n";
t << "# starts the search engine (doxysearch) with the correct parameters. \n";
t << "# A script with this name will be generated by doxygen. \n";
t << "\n";
}
t << "CGI_NAME = ";
t << "CGI_NAME = ";
writeStringValue(t,Config::cgiName);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The CGI_URL tag should be the absolute URL to the directory where the\n";
t << "# The CGI_URL tag should be the absolute URL to the directory where the \n";
t << "# cgi binaries are located. See the documentation of your http daemon for \n";
t << "# details.\n";
t << "# details. \n";
t << "\n";
}
t << "CGI_URL = ";
t << "CGI_URL = ";
writeStringValue(t,Config::cgiURL);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The DOC_URL tag should be the absolute URL to the directory where the\n";
t << "# The DOC_URL tag should be the absolute URL to the directory where the \n";
t << "# documentation is located. If left blank the absolute path to the \n";
t << "# documentation, with file:// prepended to it, will be used.\n";
t << "# documentation, with file:// prepended to it, will be used. \n";
t << "\n";
}
t << "DOC_URL = ";
t << "DOC_URL = ";
writeStringValue(t,Config::docURL);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The DOC_ABSPATH tag should be the absolute path to the directory where the\n";
t << "# documentation is located. If left blank the directory on the local machine\n";
t << "# will be used.\n";
t << "# The DOC_ABSPATH tag should be the absolute path to the directory where the \n";
t << "# documentation is located. If left blank the directory on the local machine \n";
t << "# will be used. \n";
t << "\n";
}
t << "DOC_ABSPATH = ";
t << "DOC_ABSPATH = ";
writeStringValue(t,Config::docAbsPath);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The BIN_ABSPATH tag must point to the directory where the doxysearch binary\n";
t << "# is installed.\n";
t << "# The BIN_ABSPATH tag must point to the directory where the doxysearch binary \n";
t << "# is installed. \n";
t << "\n";
}
t << "BIN_ABSPATH = ";
t << "BIN_ABSPATH = ";
writeStringValue(t,Config::binAbsPath);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The EXT_DOC_PATHS tag can be used to specify one or more paths to \n";
t << "# documentation generated for other projects. This allows doxysearch to search\n";
t << "# the documentation for these projects as well.\n";
t << "# documentation generated for other projects. This allows doxysearch to search \n";
t << "# the documentation for these projects as well. \n";
t << "\n";
}
t << "EXT_DOC_PATHS = ";
t << "EXT_DOC_PATHS = ";
writeStringList(t,Config::extDocPathList);
t << "\n";
}
......@@ -1714,44 +1873,43 @@ static void substEnvVarsInStrList(QStrList &sl)
void substituteEnvironmentVars()
{
substEnvVarsInString( Config::projectName );
substEnvVarsInString( Config::projectNumber );
substEnvVarsInString( Config::outputDir );
substEnvVarsInString( Config::htmlOutputDir );
substEnvVarsInString( Config::latexOutputDir );
substEnvVarsInString( Config::manOutputDir );
substEnvVarsInString( Config::rtfOutputDir );
substEnvVarsInString( Config::projectName );
substEnvVarsInString( Config::projectNumber );
substEnvVarsInString( Config::outputDir );
substEnvVarsInString( Config::outputLanguage );
substEnvVarsInString( Config::headerFile );
substEnvVarsInString( Config::latexHeaderFile );
substEnvVarsInString( Config::footerFile );
substEnvVarsInString( Config::cgiName );
substEnvVarsInString( Config::cgiURL );
substEnvVarsInString( Config::docURL );
substEnvVarsInString( Config::binAbsPath );
substEnvVarsInString( Config::docAbsPath );
substEnvVarsInString( Config::perlPath );
substEnvVarsInString( Config::genTagFile );
substEnvVarsInString( Config::inputFilter );
substEnvVarsInString( Config::paperType );
substEnvVarsInString( Config::manExtension );
substEnvVarsInString( Config::htmlStyleSheet );
substEnvVarsInStrList( Config::ignorePrefixList );
substEnvVarsInStrList( Config::includePath );
substEnvVarsInStrList( Config::examplePath );
substEnvVarsInStrList( Config::imagePath );
substEnvVarsInStrList( Config::inputSources );
substEnvVarsInStrList( Config::stripFromPath );
substEnvVarsInStrList( Config::sectionFilterList );
substEnvVarsInStrList( Config::inputSources );
substEnvVarsInStrList( Config::filePatternList );
substEnvVarsInStrList( Config::excludeSources );
substEnvVarsInStrList( Config::filePatternList );
substEnvVarsInStrList( Config::excludePatternList );
substEnvVarsInStrList( Config::examplePath );
substEnvVarsInStrList( Config::examplePatternList );
substEnvVarsInStrList( Config::imagePatternList );
substEnvVarsInStrList( Config::tagFileList );
substEnvVarsInStrList( Config::extDocPathList );
substEnvVarsInStrList( Config::predefined );
substEnvVarsInStrList( Config::imagePath );
substEnvVarsInString( Config::inputFilter );
substEnvVarsInStrList( Config::ignorePrefixList );
substEnvVarsInString( Config::htmlOutputDir );
substEnvVarsInString( Config::headerFile );
substEnvVarsInString( Config::footerFile );
substEnvVarsInString( Config::htmlStyleSheet );
substEnvVarsInString( Config::latexOutputDir );
substEnvVarsInString( Config::paperType );
substEnvVarsInStrList( Config::extraPackageList );
substEnvVarsInStrList( Config::stripFromPath );
substEnvVarsInStrList( Config::sectionFilterList );
substEnvVarsInString( Config::latexHeaderFile );
substEnvVarsInString( Config::rtfOutputDir );
substEnvVarsInString( Config::manOutputDir );
substEnvVarsInString( Config::manExtension );
substEnvVarsInStrList( Config::includePath );
substEnvVarsInStrList( Config::predefined );
substEnvVarsInStrList( Config::tagFileList );
substEnvVarsInString( Config::genTagFile );
substEnvVarsInString( Config::perlPath );
substEnvVarsInString( Config::cgiName );
substEnvVarsInString( Config::cgiURL );
substEnvVarsInString( Config::docURL );
substEnvVarsInString( Config::docAbsPath );
substEnvVarsInString( Config::binAbsPath );
substEnvVarsInStrList( Config::extDocPathList );
}
void checkConfig()
......@@ -1761,6 +1919,7 @@ void checkConfig()
// projectName[0]=toupper(projectName[0]);
//}
// set default man page extension if non is given by the user
if (Config::manExtension.isEmpty())
{
......@@ -1965,10 +2124,10 @@ void checkConfig()
}
// add default pattern if needed
if (Config::imagePatternList.count()==0)
{
Config::imagePatternList.append("*");
}
//if (Config::imagePatternList.count()==0)
//{
// Config::imagePatternList.append("*");
//}
// more checks needed if and only if the search engine is enabled.
if (Config::searchEngineFlag)
......
......@@ -166,6 +166,18 @@ class DotNodeList : public QList<DotNode>
//--------------------------------------------------------------------
/*! helper function that deletes all nodes in a connected graph, given
* one of the graph's nodes
*/
static void deleteNodes(DotNode *node)
{
static DotNodeList deletedNodes;
deletedNodes.setAutoDelete(TRUE);
node->deleteNode(deletedNodes); // collect nodes to be deleted.
deletedNodes.clear(); // actually remove the nodes.
}
DotNode::DotNode(int n,const char *lab,const char *url,int distance,bool isRoot)
: m_number(n), m_label(lab), m_url(url), m_isRoot(isRoot)
{
......@@ -237,39 +249,32 @@ void DotNode::removeParent(DotNode *n)
if (m_parents) m_parents->remove(n);
}
void DotNode::deleteNode()
void DotNode::deleteNode(DotNodeList &deletedList)
{
if (m_deleted) return; // avoid recursive loops in case the graph has cycles
m_deleted=TRUE;
if (m_parents!=0)
if (m_parents!=0) // delete all parent nodes of this node
{
QListIterator<DotNode> dnlip(*m_parents);
DotNode *pn;
for (dnlip.toFirst();(pn=dnlip.current());++dnlip)
{
pn->removeChild(this);
if (!pn->m_deleted)
{
pn->deleteNode();
}
// do not access pn after this!
//pn->removeChild(this);
pn->deleteNode(deletedList);
}
}
if (m_children!=0)
if (m_children!=0) // delete all child nodes of this node
{
QListIterator<DotNode> dnlic(*m_children);
DotNode *cn;
for (dnlic.toFirst();(cn=dnlic.current());++dnlic)
{
cn->removeParent(this);
if (!cn->m_deleted)
{
cn->deleteNode();
}
// do not access cn after this!
//cn->removeParent(this);
cn->deleteNode(deletedList);
}
}
delete this;
// add this node to the list of deleted nodes.
deletedList.append(this);
}
void DotNode::writeBox(QTextStream &t,bool hasNonReachableChildren)
......@@ -684,7 +689,7 @@ DotGfxHierarchyTable::~DotGfxHierarchyTable()
{
DotNode *oldNode=n;
n=m_rootNodes->next();
oldNode->deleteNode();
deleteNodes(oldNode);
}
delete m_rootNodes;
delete m_usedNodes;
......@@ -792,7 +797,7 @@ bool DotGfxUsageGraph::isTrivial() const
DotGfxUsageGraph::~DotGfxUsageGraph()
{
m_startNode->deleteNode();
deleteNodes(m_startNode);
delete m_usedNodes;
}
......@@ -1011,7 +1016,7 @@ DotInclDepGraph::DotInclDepGraph(FileDef *fd)
DotInclDepGraph::~DotInclDepGraph()
{
m_startNode->deleteNode();
deleteNodes(m_startNode);
delete m_usedNodes;
}
......
......@@ -56,7 +56,7 @@ class DotNode
);
void setDistance(int distance);
void addParent(DotNode *n);
void deleteNode();
void deleteNode(DotNodeList &deletedList);
void removeChild(DotNode *n);
void removeParent(DotNode *n);
int number() const { return m_number; }
......
......@@ -1265,12 +1265,7 @@ void buildMemberList(Entry *root)
md->setDefLine(root->startLine);
md->setDocumentation(root->doc);
md->setBriefDescription(root->brief);
//md->setBody(root->body);
md->setBodySegment(root->bodyLine,root->endBodyLine);
//if (root->mGrpId!=-1)
//{
// md->setMemberGroup(memberGroupDict[root->mGrpId]);
//}
md->setInline(root->inLine);
bool ambig;
md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig));
......@@ -1597,9 +1592,15 @@ void findFriends()
else if (!mmd->briefDescription().isEmpty() && !fmd->briefDescription().isEmpty())
fmd->setBriefDescription(mmd->briefDescription());
if (mmd->getStartBodyLine()==-1 && fmd->getStartBodyLine()!=-1)
{
mmd->setBodySegment(fmd->getStartBodyLine(),fmd->getEndBodyLine());
mmd->setBodyDef(fmd->getBodyDef());
}
else if (mmd->getStartBodyLine()!=-1 && fmd->getStartBodyLine()==-1)
{
fmd->setBodySegment(mmd->getStartBodyLine(),mmd->getEndBodyLine());
fmd->setBodyDef(mmd->getBodyDef());
}
}
}
}
......@@ -1724,7 +1725,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
{
baseClassName.prepend(scopeName.left(scopeOffset)+"::");
}
ClassDef *baseClass=getClass(baseClassName);
ClassDef *baseClass=getResolvedClass(baseClassName);
if (baseClassName!=root->name) // check for base class with the same name,
// look in the outer scope for a match
{
......@@ -1744,7 +1745,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
// but for now, we only look for the unspecializated base class.
templSpec=baseClassName.right(baseClassName.length()-i);
baseClassName=baseClassName.left(i);
baseClass=getClass(baseClassName);
baseClass=getResolvedClass(baseClassName);
//printf("baseClass=%p baseClass=%s templSpec=%s\n",
// baseClass,baseClassName.data(),templSpec.data());
}
......@@ -1766,7 +1767,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli)
{
QCString fName = nd->name()+"::"+baseClassName;
found = (baseClass=getClass(fName))!=0 && baseClass!=cd &&
found = (baseClass=getResolvedClass(fName))!=0 && baseClass!=cd &&
root->name!=fName;
}
}
......@@ -1775,7 +1776,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
{
NamespaceList *nl = nd->getUsedNamespaces();
QCString fName = nd->name()+"::"+baseClassName;
found = (baseClass=getClass(fName))!=0 && root->name!=fName;
found = (baseClass=getResolvedClass(fName))!=0 && root->name!=fName;
if (nl) // try to prepend any of the using namespace scopes.
{
NamespaceListIterator nli(*nl);
......@@ -1783,7 +1784,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli)
{
fName = nd->name()+"::"+baseClassName;
found = (baseClass=getClass(fName))!=0 && baseClass!=cd &&
found = (baseClass=getResolvedClass(fName))!=0 && baseClass!=cd &&
root->name!=fName;
}
}
......@@ -4935,7 +4936,7 @@ int main(int argc,char **argv)
s=Config::imagePath.first();
while (s)
{
readFileOrDirectory(s,0,&imageNameDict,0,&Config::imagePatternList,
readFileOrDirectory(s,0,&imageNameDict,0,0,
0,0,0);
s=Config::imagePath.next();
}
......
......@@ -79,7 +79,6 @@ class BufStr : public QCString
typedef QList<QCString> StringList;
typedef QDict<MemberDef> MemberDict;
typedef QDict<ClassDef> ClassDict;
typedef QDict<FileDef> FileDict;
typedef QDict<QCString> StringDict;
typedef QDict<PageInfo> PageDict;
......
#
#
#
# Copyright (C) 1997-1999 by Dimitri van Heesch.
# Copyright (C) 1997-2000 by Dimitri van Heesch.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby
......
......@@ -624,7 +624,7 @@ void HtmlGenerator::insertMemberAlign()
DBG_HTML(t << "<!-- insertMemberAlign -->" << endl)
if (Config::htmlAlignMemberFlag)
{
t << "&nbsp;</td><td valign=top>";
t << "&nbsp;</td><td valign=bottom>";
}
}
......@@ -652,7 +652,7 @@ void HtmlGenerator::endMemberDescription()
}
else
{
t << "</em></font></dl>";
t << "<br><br></em></font></dl>";
}
}
......
......@@ -167,6 +167,11 @@ void writeClassHierarchy(OutputList &ol)
for (;cli.current(); ++cli)
{
ClassDef *cd=cli.current();
//printf("class %s hasVisibleRoot=%d isVisibleInHierarchy=%d\n",
// cd->name().data(),
// hasVisibleRoot(cd->baseClasses()),
// cd->isVisibleInHierarchy()
// );
if (!hasVisibleRoot(cd->baseClasses()))
{
if (cd->isVisibleInHierarchy())
......@@ -197,11 +202,11 @@ void writeClassHierarchy(OutputList &ol)
ol.writeIndexItem(0,0,cd->name());
//if (hasHtmlHelp) htmlHelp->addContentsItem(cd->name(),"nodoc");
}
}
if (!cd->visited && cd->superClasses()->count()>0)
{
writeClassTree(ol,cd->superClasses(),cd->visited);
cd->visited=TRUE;
if (!cd->visited && cd->superClasses()->count()>0)
{
writeClassTree(ol,cd->superClasses(),cd->visited);
cd->visited=TRUE;
}
}
}
}
......
......@@ -634,12 +634,12 @@ void MemberDef::writeDeclaration(OutputList &ol,
else
{
type = type.left(i) + " { ... } " + type.right(type.length()-i-l);
linkifyText(ol,cname,name(),type);
linkifyText(ol,cname,name(),type,TRUE);
}
}
else
{
linkifyText(ol,cname,name(),type);
linkifyText(ol,cname,name(),type,TRUE);
}
bool htmlOn = ol.isEnabled(OutputGenerator::Html);
if (htmlOn && Config::htmlAlignMemberFlag && !type.isEmpty())
......@@ -995,14 +995,7 @@ 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);
}
parseCode(ol,scopeName,init,FALSE,0);
ol.endCodeFragment();
}
......
......@@ -31,6 +31,7 @@ NamespaceDef::NamespaceDef(const char *name,const char *ref) : Definition(name)
{
fileName="namespace_"+nameToFile(name);
classList = new ClassList;
classDict = new ClassDict(1009);
//memList = new MemberList;
usingList = 0;
setReference(ref);
......@@ -42,6 +43,7 @@ NamespaceDef::NamespaceDef(const char *name,const char *ref) : Definition(name)
NamespaceDef::~NamespaceDef()
{
delete classList;
delete classDict;
delete usingList;
delete memberGroupList;
delete memberGroupDict;
......@@ -54,7 +56,11 @@ void NamespaceDef::insertUsedFile(const char *f)
void NamespaceDef::insertClass(ClassDef *cd)
{
classList->append(cd);
if (classDict->find(cd->name())==0)
{
classList->append(cd);
classDict->insert(cd->name(),cd);
}
}
void NamespaceDef::addMemberToGroup(MemberDef *md,int groupId)
......
......@@ -27,6 +27,7 @@
class ClassDef;
class OutputList;
class ClassList;
class ClassDict;
class MemberDef;
class NamespaceList;
class MemberGroupDict;
......@@ -77,6 +78,7 @@ class NamespaceDef : public Definition
QCString fileName;
QStrList files;
ClassList *classList;
ClassDict *classDict;
NamespaceList *usingList;
MemberList allMemberList;
......
......@@ -836,6 +836,13 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type)
return result;
}
QCString extractName(const QCString &s)
{
uint i=0;
while (i<s.length() && isId(s.at(i))) i++;
return s.left(i);
}
/* ----------------------------------------------------------------- */
//static void addToBody(const char *text);
......@@ -2823,6 +2830,16 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
current->type=current->type.simplifyWhiteSpace();
current->args=current->args.simplifyWhiteSpace();
current->name=current->name.stripWhiteSpace();
if (!current->name.isEmpty() && current->type.left(8)=="typedef ")
{
// add typedef to dictionary
QCString dest = extractName(current->type.right(current->type.length()-8));
if (!dest.isEmpty())
{
//printf(">>>>>>>>>> adding %s->%s\n",current->name.data(),dest.data());
typedefDict.insert(current->name, new QCString(dest));
}
}
current->section = Entry::VARIABLE_SEC ;
current->fileName = yyFileName;
current->startLine = yyLineNr;
......@@ -3707,12 +3724,11 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
{
if (isTypedef)
{
// typedefDict.insert(yytext,new QCString(current->name));
// current->type.prepend("typedef ");
// current->extends
current->extends->append(
new BaseInfo(yytext,Public,Normal)
);
QCString dest = extractName(current->name);
typedefDict.insert(yytext,new QCString(current->name));
//current->extends->append(
// new BaseInfo(yytext,Public,Normal)
// );
}
current->type += ' ' ;
current->type += current->name ;
......
......@@ -10,8 +10,7 @@
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
* All output generated with Doxygen is not covered by this license.
*
*/
......@@ -39,6 +38,7 @@ class TranslatorRussian : public Translator
}
QCString trMemberTypedefDocumentation()
{
// Need additional translation
return " typedef";
}
QCString trMemberEnumerationDocumentation()
......@@ -71,7 +71,7 @@ class TranslatorRussian : public Translator
}
QCString trIncludeIncludingInheritedMembers()
{
return ", .";
return ", .";
}
QCString trGeneratedAutomatically(const char *s)
{ QCString result=" Doxygen";
......@@ -105,6 +105,7 @@ class TranslatorRussian : public Translator
}
QCString trCompoundList()
{
// Need additional translation
return " (compound list)";
}
QCString trFileList()
......@@ -117,6 +118,7 @@ class TranslatorRussian : public Translator
}
QCString trCompoundMembers()
{
// Need additional translation
return " (compound members)";
}
QCString trFileMembers()
......@@ -137,9 +139,555 @@ class TranslatorRussian : public Translator
}
QCString trClassHierarchyDescription()
{
// Need additional translation
return " (inheritance) , ";
}
QCString trFileListDescription(bool extractAll)
{
QCString result=" ";
if(!extractAll) result+=" ";
result+=" :";
return result;
}
QCString trCompoundListDescription()
{
return " , , "
":";
}
QCString trCompoundMembersDescription(bool extractAll)
{
// Need additional translation
QCString result=" ";
if(!extractAll) result+=" ";
result+=" ";
if(extractAll)
result+="the class documentation for each member:";
else
result+="the classes the belong to:";
return result;
}
QCString trFileMembersDescription(bool extractAll)
{
// Need additional translation
QCString result=" ";
if(!extractAll) result+=" ";
result+=" , (links) ";
if(extractAll)
result+="the class documentation for each member:";
else
result+="the classes the belong to:";
return result;
}
QCString trHeaderFilesDescription()
{
return " , API:";
}
QCString trExamplesDescription()
{
return " :";
}
QCString trRelatedPagesDescription()
{
// Need additional translation
return " :";
}
QCString trModulesDescription()
{
return " :";
}
QCString trNoDescriptionAvailable()
{
return " ";
}
QCString trDocumentation()
{
return "";
}
QCString trModuleIndex()
{
return " ";
}
QCString trHierarchicalIndex()
{
return " ";
}
QCString trCompoundIndex()
{
// Need additional translation
return " ";
}
QCString trFileIndex()
{
return " ";
}
QCString trModuleDocumentation()
{
return " ";
}
QCString trClassDocumentation()
{
return " ";
}
QCString trFileDocumentation()
{
return " ";
}
QCString trExampleDocumentation()
{
return " ";
}
QCString trPageDocumentation()
{
return " ";
}
QCString trReferenceManual()
{
return " ";
}
QCString trDefines()
{
// Need Translation
return " (Defines)";
}
QCString trFunctionPrototypes()
{
return " ";
}
QCString trTypedefs()
{
return " ";
}
QCString trEnumerations()
{
// Need Translation
return " (Enumerations)";
}
QCString trFunctions()
{
return ":";
}
QCString trVariables()
{
return ":";
}
QCString trEnumerationValues()
{
return " ";
}
QCString trAuthor()
{
return "";
}
QCString trDefineDocumentation()
{
return " (defines)";
}
QCString trFunctionPrototypeDocumentation()
{
return " ";
}
QCString trTypedefDocumentation()
{
return " ";
}
QCString trEnumerationTypeDocumentation()
{
return " ";
}
QCString trEnumerationValueDocumentation()
{
return " ";
}
QCString trFunctionDocumentation()
{
return " ";
}
QCString trVariableDocumentation()
{
return " ";
}
QCString trCompounds()
{
// need translation
return "Compounds";
}
QCString trFiles()
{
return "";
}
QCString trGeneratedAt(const char* date,const char* projName)
{
QCString result=(QCString)" "+date;
if(projName) result+=(QCString)" "+projName;
result+=(QCString)" ";
return result;
}
QCString trWrittenBy()
{
return " ";
}
QCString trClassDiagram(const char* clName)
{
return (QCString)" "+clName;
}
QCString trForInternalUseOnly()
{
return " .";
}
QCString trReimplementedForInternalREasons()
{
// need translation
return " ;"
" .";
}
QCString trWarning()
{
return "";
}
QCString trBugsAndLimitations()
{
return " ";
}
QCString trVersion()
{
return "";
}
QCString trDate()
{
return "";
}
QCString trAuthors()
{
return "()";
}
QCString trReturns()
{
return "";
}
QCString trSeeAlso()
{
return "";
}
QCString trParameters()
{
return "";
}
QCString trExceptions()
{
return "";
}
QCString trGeneratedBy()
{
return " ";
}
QCString trNamespaceList()
{
// Need translation
return " ";
}
QCString trNamespaceListDescription(bool extractAll)
{
// Need translation
QCString result=" ";
if(!extractAll) result+=" ";
result+=" :";
return result;
}
QCString trFriends()
{
return "";
}
QCString trRelatedFunctionDocumentation()
{
// need translation
return " ";
}
QCString trCompoundReference(const char* clName,ClassDef::CompoundType compType)
{
QCString result=(QCString)clName+" ";
switch(compType)
{
case ClassDef::Class: result+=" "; break;
case ClassDef::Struct: result+=" "; break;
case ClassDef::Union: result+=" "; break;
case ClassDef::Interface: result+=" "; break;
case ClassDef::Exception: result+=" "; break;
}
result+=" ";
return result;
}
QCString trFileReference(const char* fileName)
{
QCString result;
result+=(QCString)" "+fileName;
return result;
}
QCString trNamespaceReference(const char* namespaceName)
{
// need translation
QCString result=(QCString)" "+namespaceName;
return result;
}
QCString trPublicMembers()
{
return " ";
}
QCString trPublicSlots()
{
// need translation
return " (Slots)";
}
QCString trSignals()
{
return "";
}
QCString trStaticPublicMembers()
{
return " ";
}
QCString trProtectedMembers()
{
return " ";
}
QCString trProtectedSlots()
{
// need translation
return " (Slots)";
}
QCString trStaticProtectedSlots()
{
// need translation
return " (Slots)";
}
QCString trPrivateMembers()
{
return " ";
}
QCString trPrivateSlots()
{
// need translation
return " (Slots)";
}
QCString trStaticPrivateMembers()
{
return " ";
}
QCString trWriteList(int numEntries)
{
QCString result;
int i;
for(i=0;i<numEntries;i++)
{
result+=generateMarker(i);
if(i!=numEntries-1)
{
if(i<numEntries-2)
result+=", ";
else
result+=", ";
}
}
return result;
}
QCString trInheritsList(int numEntries)
{
// need translation
return " (Inherits) "+trWriteList(numEntries)+".";
}
QCString trInheritedByList(int numEntries)
{
// need translation
return " (Inherited By) "+trWriteList(numEntries)+".";
}
QCString trReimplementedInList(int numEntries)
{
return " "+trWriteList(numEntries)+".";
}
QCString trNamespaceMembers()
{
// Need translation
return " ";
}
QCString trNamespaceMemberDescription(bool extractAll)
{
QCString result=" ";
if(!extractAll) result+=" ";
result+=" ";
if(extractAll)
result+=" ";
else
result+=" ";
return result;
}
QCString trNamespaceIndex()
{
return " ";
}
QCString trNamespaceDocumentation()
{
return " ";
}
QCString trNamespaces()
{
return " ";
}
QCString trGeneratedFromFiles(ClassDef::CompoundType compType, bool single)
{
QCString result=(QCString)" ";
switch(compType)
{
case ClassDef::Class: result+=" "; break;
case ClassDef::Struct: result+=" "; break;
case ClassDef::Union: result+=" "; break;
case ClassDef::Interface: result+=" "; break;
case ClassDef::Exception: result+=" "; break;
}
result+=" ";
if(single)
result+=":";
else
result+=":";
return result;
}
QCString trAlphabeticalList()
{
return " ";
}
QCString trReturnValues()
{
return " ";
}
QCString trMainPage()
{
// need translation
return " (Main Page)";
}
QCString trPageAbbreviation()
{
return ".";
}
QCString trSources()
{
return " ";
}
QCString trDefinedAtLineInSourceFile()
{
return " @0 @1.";
}
QCString trDefinedInSourceFile()
{
return " @0.";
}
QCString trDeprecated()
{
return "";
}
QCString trCollaborationDiagram(const char* clName)
{
// need translation
return (QCString)" "+clName+":";
}
QCString trInclDepGraph(const char* fName)
{
// need translation
return (QCString)" "+fName+":";
}
QCString trConstructorDocumentation()
{
return " ";
}
QCString trGotoSourceCode()
{
// need translation
return " .";
}
QCString trGotoDocumentation()
{
return " .";
}
QCString trPrecondition()
{
// need translation
return " (Precondition)";
}
QCString trPostcondition()
{
// need translation
return " (Postcondition)";
}
QCString trInvariant()
{
// need translation
return "";
}
QCString trInitialValue()
{
return " :";
}
QCString trCode()
{
return " ";
}
QCString trGraphicalHierarchy()
{
// need translation
return " (?)";
}
QCString trGotoGraphicalHierarchy()
{
// need translation
return " ";
}
QCString trGotoTextualHierarchy()
{
// need translation
return " ";
}
QCString trPageIndex()
{
return " ";
}
QCString trNote()
{
return "";
}
QCString trPublicTypes()
{
return " ";
}
QCString trPublicAttribs()
{
return " ";
}
QCString trStaticPublicAttribs()
{
return " ";
}
QCString trProtectedTypes()
{
return " ";
}
QCString trProtectedAttribs()
{
return " ";
}
QCString trStaticProtectedAttribs()
{
return " ";
}
QCString trPrivateTypes()
{
return " ";
}
QCString trPrivateAttribs()
{
return " ";
}
QCString trStaticPrivateAttribs()
{
return " ";
}
};
#endif
......@@ -203,13 +203,39 @@ int guessSection(const char *name)
ClassDef *getClass(const char *name)
{
if (name==0 || name[0]=='\0') return 0;
// QCString *subst = typedefDict[name];
// if (subst)
// return classDict[subst->data()];
// else
return classDict[name];
}
ClassDef *getResolvedClass(const char *name)
{
if (name==0 || name[0]=='\0') return 0;
QCString *subst = typedefDict[name];
if (subst) // there is a typedef with this name
{
int count=0; // recursion detection guard
QCString *newSubst;
while ((newSubst=typedefDict[*subst]) && count<10)
{
subst=newSubst;
count++;
}
if (count==10)
{
warn("Warning: possible recursive typedef dependency detected for %s!\n",name);
return classDict[name];
}
else
{
//printf("getClass: subst %s->%s\n",name,subst->data());
return classDict[subst->data()];
}
}
else
{
return classDict[name];
}
}
QCString removeRedundantWhiteSpace(const QCString &s)
{
if (s.isEmpty()) return s;
......@@ -249,21 +275,45 @@ bool leftScopeMatch(const QCString &scope, const QCString &name)
);
}
void linkifyText(OutputList &ol,const char *scName,const char *name,const char *text)
void linkifyText(OutputList &ol,const char *scName,const char *name,const char *text,bool autoBreak)
{
//printf("scope=`%s' name=`%s' Text: `%s'\n",scName,name,text);
static QRegExp regExp("[a-z_A-Z][a-z_A-Z0-9:]*");
QCString txtStr=text;
OutputList result(&ol);
int strLen = txtStr.length();
//printf("linkifyText strtxt=%s strlen=%d\n",txtStr.data(),strLen);
int matchLen;
int index=0;
int newIndex;
int skipIndex=0;
int floatingIndex=0;
// read a word from the text string
while ((newIndex=regExp.match(txtStr,index,&matchLen))!=-1)
{
// add non-word part to the result
result.docify(txtStr.mid(skipIndex,newIndex-skipIndex));
floatingIndex+=newIndex-skipIndex;
if (strLen>30 && floatingIndex>25 && autoBreak) // try to insert a split point
{
QCString splitText = txtStr.mid(skipIndex,newIndex-skipIndex);
int splitLength = splitText.length();
int i=splitText.find('<');
if (i==-1) i=splitText.find(',');
if (i==-1) i=splitText.find(' ');
if (i!=-1) // add a link-break at i in case of Html output
{
ol.docify(splitText.left(i+1));
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.lineBreak();
ol.popGeneratorState();
ol.docify(splitText.right(splitLength-i-1));
}
floatingIndex=splitLength-i-1;
}
else
{
ol.docify(txtStr.mid(skipIndex,newIndex-skipIndex));
}
// get word from string
QCString word=txtStr.mid(newIndex,matchLen);
ClassDef *cd=0;
......@@ -300,7 +350,7 @@ void linkifyText(OutputList &ol,const char *scName,const char *name,const char *
// add link to the result
if (cd->isLinkable())
{
result.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,word);
ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,word);
found=TRUE;
}
}
......@@ -328,7 +378,7 @@ void linkifyText(OutputList &ol,const char *scName,const char *name,const char *
if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
if (d && d->isLinkable())
{
result.writeObjectLink(d->getReference(),d->getOutputFileBase(),
ol.writeObjectLink(d->getReference(),d->getOutputFileBase(),
md->anchor(),word);
found=TRUE;
}
......@@ -336,20 +386,19 @@ void linkifyText(OutputList &ol,const char *scName,const char *name,const char *
if (!found) // add word to the result
{
result.docify(word);
ol.docify(word);
}
}
else
{
result.docify(word);
ol.docify(word);
}
// set next start point in the string
skipIndex=index=newIndex+matchLen;
floatingIndex+=matchLen;
}
// add last part of the string to the result.
result.docify(txtStr.right(txtStr.length()-skipIndex));
//printf("linkify: %s\n",result.data());
ol+=result;
ol.docify(txtStr.right(txtStr.length()-skipIndex));
}
......
......@@ -40,7 +40,7 @@ extern void setAnchors(char id,MemberList *ml,int groupId=-1);
extern QCString fileToString(const char *name);
extern QCString dateToString(bool);
extern void linkifyText(OutputList &ol,const char *clName,const char *name,
const char *text);
const char *text,bool autoBreak=FALSE);
extern bool getDefs(const QCString &scopeName,const QCString &memberName,
const char *, MemberDef *&md,
ClassDef *&cd,FileDef *&fd,
......@@ -60,6 +60,7 @@ extern QCString convertSlashes(const QCString &s,bool dots=FALSE);
extern QCString substitute(const char *s,const char *src,const char *dst);
extern QCString resolveDefines(const char *n);
extern ClassDef *getClass(const char *key);
extern ClassDef *getResolvedClass(const char *key);
extern FileDef *findFileDef(const FileNameDict *fnDict,const char *n,
bool &ambig);
extern void showFileDefMatches(const FileNameDict *fnDict,const char *n);
......
......@@ -43,7 +43,7 @@ TMAKE_LFLAGS_DEBUG =
TMAKE_LFLAGS_SHLIB = -G -h $(TARGET1)
TMAKE_LFLAGS_SONAME =
TMAKE_LIBS = -lC
TMAKE_LIBS =
TMAKE_LIBS_X11 = -lXext -lX11 -lm
TMAKE_LIBS_QT = -lqt
TMAKE_LIBS_QT_OPENGL = -lqgl
......
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