From a790b4aefe37b616ec4563877e01aa5f99447c85 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Sun, 23 Apr 2000 18:39:17 +0000 Subject: Release-1.1.2-20000423 --- INSTALL | 8 +- Makefile.in | 22 +- README | 4 +- VERSION | 2 +- addon/configgen/Makefile.in | 42 + addon/configgen/config_templ.h | 37 + addon/configgen/config_templ.l | 729 ++++++++++++++++ addon/configgen/configgen.cpp | 1530 +++++++++++++++++++++++++++++++++ addon/configgen/configgen.pro.in | 20 + addon/configgen/qtbc.h | 43 + addon/doxywizard/Makefile.in | 52 ++ addon/doxywizard/doxywizard.pro.in | 52 ++ addon/doxywizard/doxywizard.t | 45 + addon/doxywizard/doxywizard_templ.cpp | 348 ++++++++ addon/doxywizard/doxywizard_templ.h | 75 ++ addon/doxywizard/inputbool.cpp | 42 + addon/doxywizard/inputbool.h | 42 + addon/doxywizard/inputint.cpp | 67 ++ addon/doxywizard/inputint.h | 51 ++ addon/doxywizard/inputstring.cpp | 184 ++++ addon/doxywizard/inputstring.h | 66 ++ addon/doxywizard/inputstrlist.cpp | 210 +++++ addon/doxywizard/inputstrlist.h | 69 ++ addon/doxywizard/pagewidget.cpp | 86 ++ addon/doxywizard/pagewidget.h | 63 ++ addon/doxywizard/pixmaps.cpp | 204 +++++ addon/doxywizard/pixmaps.h | 26 + addon/doxywizard/version.cpp | 1 + addon/doxywizard/version.h | 6 + configure | 43 +- doc/commands.doc | 68 +- doc/config.doc | 8 + packages/rpm/doxygen.spec | 2 +- src/classdef.cpp | 4 +- src/classlist.h | 10 + src/config.h | 172 ++-- src/config.l | 1463 +++++++++++++++++-------------- src/dot.cpp | 43 +- src/dot.h | 2 +- src/doxygen.cpp | 23 +- src/doxygen.h | 1 - src/doxygen.t | 2 +- src/htmlgen.cpp | 4 +- src/index.cpp | 15 +- src/memberdef.cpp | 13 +- src/namespacedef.cpp | 8 +- src/namespacedef.h | 2 + src/scanner.l | 28 +- src/translator_ru.h | 556 +++++++++++- src/util.cpp | 77 +- src/util.h | 3 +- tmake/lib/solaris-cc/tmake.conf | 2 +- 52 files changed, 5828 insertions(+), 847 deletions(-) create mode 100644 addon/configgen/Makefile.in create mode 100644 addon/configgen/config_templ.h create mode 100644 addon/configgen/config_templ.l create mode 100644 addon/configgen/configgen.cpp create mode 100644 addon/configgen/configgen.pro.in create mode 100644 addon/configgen/qtbc.h create mode 100644 addon/doxywizard/Makefile.in create mode 100644 addon/doxywizard/doxywizard.pro.in create mode 100644 addon/doxywizard/doxywizard.t create mode 100644 addon/doxywizard/doxywizard_templ.cpp create mode 100644 addon/doxywizard/doxywizard_templ.h create mode 100644 addon/doxywizard/inputbool.cpp create mode 100644 addon/doxywizard/inputbool.h create mode 100644 addon/doxywizard/inputint.cpp create mode 100644 addon/doxywizard/inputint.h create mode 100644 addon/doxywizard/inputstring.cpp create mode 100644 addon/doxywizard/inputstring.h create mode 100644 addon/doxywizard/inputstrlist.cpp create mode 100644 addon/doxywizard/inputstrlist.h create mode 100644 addon/doxywizard/pagewidget.cpp create mode 100644 addon/doxywizard/pagewidget.h create mode 100644 addon/doxywizard/pixmaps.cpp create mode 100644 addon/doxywizard/pixmaps.h create mode 100644 addon/doxywizard/version.cpp create mode 100644 addon/doxywizard/version.h diff --git a/INSTALL b/INSTALL index 35ff4de..9138291 100644 --- a/INSTALL +++ b/INSTALL @@ -1,4 +1,4 @@ -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) diff --git a/Makefile.in b/Makefile.in index fc4ea9e..defb3a4 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,11 +1,13 @@ -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: + diff --git a/README b/README index 27c3e81..61b4b34 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -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) diff --git a/VERSION b/VERSION index 6aad396..d6a9c3c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.1.2-20000417 +1.1.2-20000423 diff --git a/addon/configgen/Makefile.in b/addon/configgen/Makefile.in new file mode 100644 index 0000000..aa8dd7a --- /dev/null +++ b/addon/configgen/Makefile.in @@ -0,0 +1,42 @@ +# +# +# +# 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: diff --git a/addon/configgen/config_templ.h b/addon/configgen/config_templ.h new file mode 100644 index 0000000..f895bab --- /dev/null +++ b/addon/configgen/config_templ.h @@ -0,0 +1,37 @@ +/****************************************************************************** + * + * $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 +#include + +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 diff --git a/addon/configgen/config_templ.l b/addon/configgen/config_templ.l new file mode 100644 index 0000000..a86156c --- /dev/null +++ b/addon/configgen/config_templ.l @@ -0,0 +1,729 @@ +/****************************************************************************** + * + * $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 +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "config.h" +#include "version.h" + +#ifdef DOXYWIZARD +#include +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 +"#" { BEGIN(SkipComment); } +#CONFIG Rules +[a-z_A-Z0-9]+ { err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); } +\n { yyLineNr++; BEGIN(Start); } +\n { + yyLineNr++; + if (!elemStr.isEmpty()) + { + //printf("elemStr1=`%s'\n",elemStr.data()); + l->append(elemStr); + } + BEGIN(Start); + } +[ \t]+ { + if (!elemStr.isEmpty()) + { + //printf("elemStr2=`%s'\n",elemStr.data()); + l->append(elemStr); + } + elemStr.resize(0); + } +[^ \"\t\r\n]+ { (*s)+=yytext; } +"\"" { lastState=YY_START; + BEGIN(GetQuotedString); + tmpString.resize(0); + } + /* +"\$\(" { + //printf(">> Enter env\n"); + lastEnvState=YY_START; + BEGIN(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); + } + */ +"\""|"\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); + } +"\\\"" { + tmpString+='"'; + } +. { tmpString+=*yytext; } +[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); + } + } +[^ \#\"\t\r\n]+ { + elemStr+=yytext; + } +\n { yyLineNr++; BEGIN(Start); } +\\[ \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 +#include +#include +#include +#include + +#include + +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 optionList; + static QDict 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::optionList; +QDict 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 << "\"" << 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 << "\"" << 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 << "\"" << 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 << "\"" << 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 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: couldn╢t 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 , where \n" + "is the value of the INPUT_FILTER tag, and 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", + // "don╢t know\n"); +} diff --git a/addon/configgen/configgen.pro.in b/addon/configgen/configgen.pro.in new file mode 100644 index 0000000..26b9c51 --- /dev/null +++ b/addon/configgen/configgen.pro.in @@ -0,0 +1,20 @@ +# +# +# +# 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 diff --git a/addon/configgen/qtbc.h b/addon/configgen/qtbc.h new file mode 100644 index 0000000..d03672f --- /dev/null +++ b/addon/configgen/qtbc.h @@ -0,0 +1,43 @@ +/****************************************************************************** + * + * $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 + +#if QT_VERSION >= 200 + +#define GCI QCollection::Item + +#include +#include +inline QCString convertToQCString(const QString &s) { return s.local8Bit(); } + +#else /* QT_VERSION < 200 */ + +#include +#define QCString QString +inline QCString convertToQCString(const QCString &s) { return s; } + +#endif + +#endif diff --git a/addon/doxywizard/Makefile.in b/addon/doxywizard/Makefile.in new file mode 100644 index 0000000..4e8779b --- /dev/null +++ b/addon/doxywizard/Makefile.in @@ -0,0 +1,52 @@ +# +# +# +# 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: diff --git a/addon/doxywizard/doxywizard.pro.in b/addon/doxywizard/doxywizard.pro.in new file mode 100644 index 0000000..36b9639 --- /dev/null +++ b/addon/doxywizard/doxywizard.pro.in @@ -0,0 +1,52 @@ +# +# +# +# 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 diff --git a/addon/doxywizard/doxywizard.t b/addon/doxywizard/doxywizard.t new file mode 100644 index 0000000..bebb1be --- /dev/null +++ b/addon/doxywizard/doxywizard.t @@ -0,0 +1,45 @@ +# +# +# +# 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 diff --git a/addon/doxywizard/doxywizard_templ.cpp b/addon/doxywizard/doxywizard_templ.cpp new file mode 100644 index 0000000..4ec430d --- /dev/null +++ b/addon/doxywizard/doxywizard_templ.cpp @@ -0,0 +1,348 @@ +/****************************************************************************** + * + * + * + * 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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", + "
A tool to create and edit configuration files " + "that can be read by doxygen.

" + "

Written by Dimitri van Heesch

" + "

(c) 2000
" + ); +} + +//---------------------------------------------------------------------- + +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(); +} diff --git a/addon/doxywizard/doxywizard_templ.h b/addon/doxywizard/doxywizard_templ.h new file mode 100644 index 0000000..e0c228e --- /dev/null +++ b/addon/doxywizard/doxywizard_templ.h @@ -0,0 +1,75 @@ +/****************************************************************************** + * + * + * + * 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 + +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 diff --git a/addon/doxywizard/inputbool.cpp b/addon/doxywizard/inputbool.cpp new file mode 100644 index 0000000..b0db14b --- /dev/null +++ b/addon/doxywizard/inputbool.cpp @@ -0,0 +1,42 @@ +/****************************************************************************** + * + * + * + * 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 + +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; +} + diff --git a/addon/doxywizard/inputbool.h b/addon/doxywizard/inputbool.h new file mode 100644 index 0000000..9102be7 --- /dev/null +++ b/addon/doxywizard/inputbool.h @@ -0,0 +1,42 @@ +/****************************************************************************** + * + * + * + * 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 + +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 diff --git a/addon/doxywizard/inputint.cpp b/addon/doxywizard/inputint.cpp new file mode 100644 index 0000000..54d7d02 --- /dev/null +++ b/addon/doxywizard/inputint.cpp @@ -0,0 +1,67 @@ +/****************************************************************************** + * + * + * + * 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 +#include +#include +#include +#include +#include + +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); +} diff --git a/addon/doxywizard/inputint.h b/addon/doxywizard/inputint.h new file mode 100644 index 0000000..ad6d2de --- /dev/null +++ b/addon/doxywizard/inputint.h @@ -0,0 +1,51 @@ +/****************************************************************************** + * + * + * + * 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 +#include + +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 diff --git a/addon/doxywizard/inputstring.cpp b/addon/doxywizard/inputstring.cpp new file mode 100644 index 0000000..2895a18 --- /dev/null +++ b/addon/doxywizard/inputstring.cpp @@ -0,0 +1,184 @@ +/****************************************************************************** + * + * + * + * 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 +#include +#include +#include +#include +#include +#include +#include +#include + + +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; + 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); + } +} diff --git a/addon/doxywizard/inputstring.h b/addon/doxywizard/inputstring.h new file mode 100644 index 0000000..5928b80 --- /dev/null +++ b/addon/doxywizard/inputstring.h @@ -0,0 +1,66 @@ +/****************************************************************************** + * + * + * + * 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 +#include +#include + +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 *m_values; + int m_index; + + signals: + void changed(); + + private slots: + void textChanged(const QString&); + void browse(); + void clear(); + +}; + +#endif diff --git a/addon/doxywizard/inputstrlist.cpp b/addon/doxywizard/inputstrlist.cpp new file mode 100644 index 0000000..60bc4bf --- /dev/null +++ b/addon/doxywizard/inputstrlist.cpp @@ -0,0 +1,210 @@ +/****************************************************************************** + * + * + * + * 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 +#include +#include +#include +#include +#include +#include +#include +#include + +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(); + } +} diff --git a/addon/doxywizard/inputstrlist.h b/addon/doxywizard/inputstrlist.h new file mode 100644 index 0000000..496aeed --- /dev/null +++ b/addon/doxywizard/inputstrlist.h @@ -0,0 +1,69 @@ +/****************************************************************************** + * + * + * + * 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 +#include + +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 diff --git a/addon/doxywizard/pagewidget.cpp b/addon/doxywizard/pagewidget.cpp new file mode 100644 index 0000000..48ab092 --- /dev/null +++ b/addon/doxywizard/pagewidget.cpp @@ -0,0 +1,86 @@ +/****************************************************************************** + * + * + * + * 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 + +#include +#include +#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())); +} + + + diff --git a/addon/doxywizard/pagewidget.h b/addon/doxywizard/pagewidget.h new file mode 100644 index 0000000..1f188ad --- /dev/null +++ b/addon/doxywizard/pagewidget.h @@ -0,0 +1,63 @@ +/****************************************************************************** + * + * + * + * 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 + +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 diff --git a/addon/doxywizard/pixmaps.cpp b/addon/doxywizard/pixmaps.cpp new file mode 100644 index 0000000..e3631c5 --- /dev/null +++ b/addon/doxywizard/pixmaps.cpp @@ -0,0 +1,204 @@ +/****************************************************************************** + * + * + * + * 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; + diff --git a/addon/doxywizard/pixmaps.h b/addon/doxywizard/pixmaps.h new file mode 100644 index 0000000..6c0bb97 --- /dev/null +++ b/addon/doxywizard/pixmaps.h @@ -0,0 +1,26 @@ +/****************************************************************************** + * + * + * + * 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 diff --git a/addon/doxywizard/version.cpp b/addon/doxywizard/version.cpp new file mode 100644 index 0000000..5a00b3e --- /dev/null +++ b/addon/doxywizard/version.cpp @@ -0,0 +1 @@ +char versionString[]="0.1"; diff --git a/addon/doxywizard/version.h b/addon/doxywizard/version.h new file mode 100644 index 0000000..d7d5f13 --- /dev/null +++ b/addon/doxywizard/version.h @@ -0,0 +1,6 @@ +#ifndef VERSION_H +#define VERSION_H + +extern char versionString[]; + +#endif diff --git a/configure b/configure index e8ca4e1..d5389ec 100755 --- a/configure +++ b/configure @@ -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 <> $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` diff --git a/doc/commands.doc b/doc/commands.doc index 87af4ba..c5ca24e 100644 --- a/doc/commands.doc +++ b/doc/commands.doc @@ -62,6 +62,7 @@ documentation:
  • \refitem cmde \e
  • \refitem cmdendcode \endcode
  • \refitem cmdendhtmlonly \endhtmlonly +
  • \refitem cmdendif \endif
  • \refitem cmdendlatexonly \endlatexonly
  • \refitem cmdendlink \endlink
  • \refitem cmdendverbatim \endverbatim @@ -74,6 +75,7 @@ documentation:
  • \refitem cmdfile \file
  • \refitem cmdfn \fn
  • \refitem cmdhtmlonly \htmlonly +
  • \refitem cmdif \if
  • \refitem cmdimage \image
  • \refitem cmdinclude \include
  • \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 \ 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. + +
    +\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" +
    \subsection cmdexception \exception { exception description } @@ -572,6 +586,37 @@ Doxygen. Unrecognized commands are treated as normal text. the tag \\exceptions is a synonym for this tag.
    +\subsection cmdif \if + + \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". + +
    \subsection cmdinvariant \invariant { description of invariant } \addindex \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 \ 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". diff --git a/doc/config.doc b/doc/config.doc index 188d14a..da21c74 100644 --- a/doc/config.doc +++ b/doc/config.doc @@ -68,6 +68,7 @@ followed by the descriptions of the tags grouped by category.
  • \refitem cfg_doc_abspath DOC_ABSPATH
  • \refitem cfg_doc_url DOC_URL
  • \refitem cfg_enable_preprocessing ENABLE_PREPROCESSING +
  • \refitem cfg_enabled_sections ENABLED_SECTIONS
  • \refitem cfg_example_path EXAMPLE_PATH
  • \refitem cfg_example_patterns EXAMPLE_PATTERNS
  • \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 +
    \c ENABLED_SECTIONS
    + \addindex ENABLED_SECTIONS + The \c ENABLE_SECTIONS tag can be used to enable conditional + documentation sections, marked by \ref cmdif "\\if" \ ... + \ref cmdendif "\\endif" blocks. + \subsection config_input Input related options diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec index 733dd63..6d26724 100644 --- a/packages/rpm/doxygen.spec +++ b/packages/rpm/doxygen.spec @@ -1,5 +1,5 @@ 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 diff --git a/src/classdef.cpp b/src/classdef.cpp index 8055a76..c7ac3ca 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -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; diff --git a/src/classlist.h b/src/classlist.h index 332eeec..4692ac0 100644 --- a/src/classlist.h +++ b/src/classlist.h @@ -18,6 +18,9 @@ #ifndef CLASSLIST_H #define CLASSLIST_H +#include +#include + #include "classdef.h" class ClassList : public QList @@ -35,4 +38,11 @@ class ClassListIterator : public QListIterator ClassListIterator(const ClassList &list); }; +class ClassDict : public QDict +{ + public: + ClassDict(int size) : QDict(size) {} + ~ClassDict() {} +}; + #endif diff --git a/src/config.h b/src/config.h index a18fce0..a4ed72d 100644 --- a/src/config.h +++ b/src/config.h @@ -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 diff --git a/src/config.l b/src/config.l index faaebda..2600a26 100644 --- a/src/config.l +++ b/src/config.l @@ -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 "#" { BEGIN(SkipComment); } -"PROJECT_NAME"[ \t]*"=" { BEGIN(GetString); s=&Config::projectName; s->resize(0); } -"PROJECT_NUMBER"[ \t]*"=" { BEGIN(GetString); s=&Config::projectNumber; s->resize(0); } -"OUTPUT_DIRECTORY"[ \t]*"=" { BEGIN(GetString); s=&Config::outputDir; s->resize(0); } -"HTML_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::htmlOutputDir; s->resize(0); } -"MAN_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::manOutputDir; s->resize(0); } -"LATEX_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::latexOutputDir; s->resize(0); } -"RTF_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::rtfOutputDir; s->resize(0); } -"HTML_HEADER"[ \t]*"=" { BEGIN(GetString); s=&Config::headerFile; s->resize(0); } -"HTML_FOOTER"[ \t]*"=" { BEGIN(GetString); s=&Config::footerFile; s->resize(0); } -"LATEX_HEADER"[ \t]*"=" { BEGIN(GetString); s=&Config::latexHeaderFile; s->resize(0); } -"CGI_NAME"[ \t]*"=" { BEGIN(GetString); s=&Config::cgiName; s->resize(0); } -"CGI_URL"[ \t]*"=" { BEGIN(GetString); s=&Config::cgiURL; s->resize(0); } -"DOC_URL"[ \t]*"=" { BEGIN(GetString); s=&Config::docURL; s->resize(0); } -"BIN_ABSPATH"[ \t]*"=" { BEGIN(GetString); s=&Config::binAbsPath; s->resize(0); } -"DOC_ABSPATH"[ \t]*"=" { BEGIN(GetString); s=&Config::docAbsPath; s->resize(0); } -"PERL_PATH"[ \t]*"=" { BEGIN(GetString); s=&Config::perlPath; s->resize(0); } -"GENERATE_TAGFILE"[ \t]*"=" { BEGIN(GetString); s=&Config::genTagFile; s->resize(0); } -"INPUT_FILTER"[ \t]*"=" { BEGIN(GetString); s=&Config::inputFilter; s->resize(0); } -"PAPER_TYPE"[ \t]*"=" { BEGIN(GetString); s=&Config::paperType; s->resize(0); } -"OUTPUT_LANGUAGE"[ \t]*"=" { BEGIN(GetString); s=&Config::outputLanguage; s->resize(0); } -"MAN_EXTENSION"[ \t]*"=" { BEGIN(GetString); s=&Config::manExtension; s->resize(0); } -"TAB_SIZE"[ \t]*"=" { BEGIN(GetString); s=&tabSizeString; s->resize(0); } -"HTML_STYLESHEET"[ \t]*"=" { BEGIN(GetString); s=&Config::htmlStyleSheet; s->resize(0); } -"COLS_IN_ALPHA_INDEX"[ \t]*"=" { BEGIN(GetString); s=&colsInAlphaIndexString; s->resize(0); } -"IGNORE_PREFIX"[ \t]*"=" { BEGIN(GetStrList); l=&Config::ignorePrefixList; l->clear(); elemStr=""; } -"INCLUDE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::includePath; l->clear(); elemStr=""; } -"EXAMPLE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::examplePath; l->clear(); elemStr=""; } -"IMAGE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::imagePath; l->clear(); elemStr=""; } -"INPUT"[ \t]*"=" { BEGIN(GetStrList); l=&Config::inputSources; l->clear(); elemStr=""; } -"EXCLUDE"[ \t]*"=" { BEGIN(GetStrList); l=&Config::excludeSources; l->clear(); elemStr=""; } -"FILE_PATTERNS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::filePatternList; l->clear(); elemStr=""; } -"EXCLUDE_PATTERNS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::excludePatternList; l->clear(); elemStr=""; } -"EXAMPLE_PATTERNS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::examplePatternList; l->clear(); elemStr=""; } -"IMAGE_PATTERNS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::imagePatternList; l->clear(); elemStr=""; } -"TAGFILES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::tagFileList; l->clear(); elemStr=""; } -"EXT_DOC_PATHS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::extDocPathList; l->clear(); elemStr=""; } -"PREDEFINED"[ \t]*"=" { BEGIN(GetStrList); l=&Config::predefined; l->clear(); elemStr=""; } -"EXTRA_PACKAGES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::extraPackageList; l->clear(); elemStr=""; } -"STRIP_FROM_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::stripFromPath; l->clear(); elemStr=""; } -"ENABLED_SECTIONS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::sectionFilterList; l->clear(); elemStr=""; } -"QUIET"[ \t]*"=" { BEGIN(GetBool); b=&Config::quietFlag; } -"WARNINGS"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningFlag; } -"RECURSIVE"[ \t]*"=" { BEGIN(GetBool); b=&Config::recursiveFlag; } -"ALLEXTERNALS"[ \t]*"=" { BEGIN(GetBool); b=&Config::allExtFlag; } -"SEARCHENGINE"[ \t]*"=" { BEGIN(GetBool); b=&Config::searchEngineFlag; } -"EXTRACT_ALL"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractAllFlag; } -"EXTRACT_PRIVATE"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractPrivateFlag; } -"DISABLE_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::noIndexFlag; } -"GENERATE_LATEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateLatex; } -"GENERATE_HTML"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateHtml; } -"GENERATE_MAN"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateMan; } -"ENABLE_PREPROCESSING"[ \t]*"=" { BEGIN(GetBool); b=&Config::preprocessingFlag; } -"MACRO_EXPANSION"[ \t]*"=" { BEGIN(GetBool); b=&Config::macroExpansionFlag; } -"SEARCH_INCLUDES"[ \t]*"=" { BEGIN(GetBool); b=&Config::searchIncludeFlag; } -"BRIEF_MEMBER_DESC"[ \t]*"=" { BEGIN(GetBool); b=&Config::briefMemDescFlag; } -"ALWAYS_DETAILED_SEC"[ \t]*"=" { BEGIN(GetBool); b=&Config::alwaysDetailsFlag; } -"HIDE_UNDOC_MEMBERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::hideMemberFlag; } -"HIDE_UNDOC_CLASSES"[ \t]*"=" { BEGIN(GetBool); b=&Config::hideClassFlag; } -"EXPAND_ONLY_PREDEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::onlyPredefinedFlag; } -"FULL_PATH_NAMES"[ \t]*"=" { BEGIN(GetBool); b=&Config::fullPathNameFlag; } -"CLASS_DIAGRAMS"[ \t]*"=" { BEGIN(GetBool); b=&Config::classDiagramFlag; } -"COMPACT_LATEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::compactLatexFlag; } -"REPEAT_BRIEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::repeatBriefFlag; } -"INTERNAL_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::internalDocsFlag; } -"CASE_SENSE_NAMES"[ \t]*"=" { BEGIN(GetBool); b=&Config::caseSensitiveNames; } -"VERBATIM_HEADERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::verbatimHeaderFlag; } -"HTML_ALIGN_MEMBERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlAlignMemberFlag; } -"SOURCE_BROWSER"[ \t]*"=" { BEGIN(GetBool); b=&Config::sourceBrowseFlag; } -"JAVADOC_AUTOBRIEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::autoBriefFlag; } -"GENERATE_HTMLHELP"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlHelpFlag; } -"ALPHABETICAL_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::alphaIndexFlag; } -"PDF_HYPERLINKS"[ \t]*"=" { BEGIN(GetBool); b=&Config::pdfHyperFlag; } -"INHERIT_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::inheritDocsFlag; } -"INLINE_INFO"[ \t]*"=" { BEGIN(GetBool); b=&Config::inlineInfoFlag; } -"INLINE_SOURCES"[ \t]*"=" { BEGIN(GetBool); b=&Config::inlineSourceFlag; } -"HAVE_DOT"[ \t]*"=" { BEGIN(GetBool); b=&Config::haveDotFlag; } -"COLLABORATION_GRAPH"[ \t]*"=" { BEGIN(GetBool); b=&Config::collGraphFlag; } -"INCLUDE_GRAPH"[ \t]*"=" { BEGIN(GetBool); b=&Config::includeGraphFlag; } -"GRAPHICAL_HIERARCHY"[ \t]*"=" { BEGIN(GetBool); b=&Config::gfxHierarchyFlag; } -"GENERATE_RTF"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateRTF; } -"COMPACT_RTF"[ \t]*"=" { BEGIN(GetBool); b=&Config::compactRTFFlag; } -"RTF_HYPERLINKS"[ \t]*"=" { BEGIN(GetBool); b=&Config::rtfHyperFlag; } -"SHOW_INCLUDE_FILES"[ \t]*"=" { BEGIN(GetBool); b=&Config::showIncFileFlag; } -"STRIP_CODE_COMMENTS"[ \t]*"=" { BEGIN(GetBool); b=&Config::stripCommentsFlag; } -"SORT_MEMBER_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::sortMembersFlag; } -"LATEX_BATCHMODE"[ \t]*"=" { BEGIN(GetBool); b=&Config::latexBatchModeFlag; } +"PROJECT_NAME"[ \t]*"=" { BEGIN(GetString); s=&Config::projectName; s->resize(0); } +"PROJECT_NUMBER"[ \t]*"=" { BEGIN(GetString); s=&Config::projectNumber; s->resize(0); } +"OUTPUT_DIRECTORY"[ \t]*"=" { BEGIN(GetString); s=&Config::outputDir; s->resize(0); } +"OUTPUT_LANGUAGE"[ \t]*"=" { BEGIN(GetString); s=&Config::outputLanguage; s->resize(0); } +"QUIET"[ \t]*"=" { BEGIN(GetBool); b=&Config::quietFlag; } +"WARNINGS"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningFlag; } +"DISABLE_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::noIndexFlag; } +"EXTRACT_ALL"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractAllFlag; } +"EXTRACT_PRIVATE"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractPrivateFlag; } +"HIDE_UNDOC_MEMBERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::hideMemberFlag; } +"HIDE_UNDOC_CLASSES"[ \t]*"=" { BEGIN(GetBool); b=&Config::hideClassFlag; } +"BRIEF_MEMBER_DESC"[ \t]*"=" { BEGIN(GetBool); b=&Config::briefMemDescFlag; } +"REPEAT_BRIEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::repeatBriefFlag; } +"ALWAYS_DETAILED_SEC"[ \t]*"=" { BEGIN(GetBool); b=&Config::alwaysDetailsFlag; } +"FULL_PATH_NAMES"[ \t]*"=" { BEGIN(GetBool); b=&Config::fullPathNameFlag; } +"STRIP_FROM_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::stripFromPath; l->clear(); elemStr=""; } +"INTERNAL_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::internalDocsFlag; } +"CLASS_DIAGRAMS"[ \t]*"=" { BEGIN(GetBool); b=&Config::classDiagramFlag; } +"SOURCE_BROWSER"[ \t]*"=" { BEGIN(GetBool); b=&Config::sourceBrowseFlag; } +"INLINE_SOURCES"[ \t]*"=" { BEGIN(GetBool); b=&Config::inlineSourceFlag; } +"STRIP_CODE_COMMENTS"[ \t]*"=" { BEGIN(GetBool); b=&Config::stripCommentsFlag; } +"CASE_SENSE_NAMES"[ \t]*"=" { BEGIN(GetBool); b=&Config::caseSensitiveNames; } +"VERBATIM_HEADERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::verbatimHeaderFlag; } +"SHOW_INCLUDE_FILES"[ \t]*"=" { BEGIN(GetBool); b=&Config::showIncFileFlag; } +"JAVADOC_AUTOBRIEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::autoBriefFlag; } +"INHERIT_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::inheritDocsFlag; } +"INLINE_INFO"[ \t]*"=" { BEGIN(GetBool); b=&Config::inlineInfoFlag; } +"SORT_MEMBER_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::sortMembersFlag; } +"TAB_SIZE"[ \t]*"=" { BEGIN(GetString); s=&tabSizeString; s->resize(0); } +"ENABLED_SECTIONS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::sectionFilterList; l->clear(); elemStr=""; } +"INPUT"[ \t]*"=" { BEGIN(GetStrList); l=&Config::inputSources; l->clear(); elemStr=""; } +"FILE_PATTERNS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::filePatternList; l->clear(); elemStr=""; } +"RECURSIVE"[ \t]*"=" { BEGIN(GetBool); b=&Config::recursiveFlag; } +"EXCLUDE"[ \t]*"=" { BEGIN(GetStrList); l=&Config::excludeSources; l->clear(); elemStr=""; } +"EXCLUDE_PATTERNS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::excludePatternList; l->clear(); elemStr=""; } +"EXAMPLE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::examplePath; l->clear(); elemStr=""; } +"EXAMPLE_PATTERNS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::examplePatternList; l->clear(); elemStr=""; } +"IMAGE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::imagePath; l->clear(); elemStr=""; } +"INPUT_FILTER"[ \t]*"=" { BEGIN(GetString); s=&Config::inputFilter; s->resize(0); } +"ALPHABETICAL_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::alphaIndexFlag; } +"COLS_IN_ALPHA_INDEX"[ \t]*"=" { BEGIN(GetString); s=&colsInAlphaIndexString; s->resize(0); } +"IGNORE_PREFIX"[ \t]*"=" { BEGIN(GetStrList); l=&Config::ignorePrefixList; l->clear(); elemStr=""; } +"GENERATE_HTML"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateHtml; } +"HTML_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::htmlOutputDir; s->resize(0); } +"HTML_HEADER"[ \t]*"=" { BEGIN(GetString); s=&Config::headerFile; s->resize(0); } +"HTML_FOOTER"[ \t]*"=" { BEGIN(GetString); s=&Config::footerFile; s->resize(0); } +"HTML_STYLESHEET"[ \t]*"=" { BEGIN(GetString); s=&Config::htmlStyleSheet; s->resize(0); } +"HTML_ALIGN_MEMBERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlAlignMemberFlag; } +"GENERATE_HTMLHELP"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlHelpFlag; } +"GENERATE_LATEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateLatex; } +"LATEX_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::latexOutputDir; s->resize(0); } +"COMPACT_LATEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::compactLatexFlag; } +"PAPER_TYPE"[ \t]*"=" { BEGIN(GetString); s=&Config::paperType; s->resize(0); } +"EXTRA_PACKAGES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::extraPackageList; l->clear(); elemStr=""; } +"LATEX_HEADER"[ \t]*"=" { BEGIN(GetString); s=&Config::latexHeaderFile; s->resize(0); } +"PDF_HYPERLINKS"[ \t]*"=" { BEGIN(GetBool); b=&Config::pdfHyperFlag; } +"LATEX_BATCHMODE"[ \t]*"=" { BEGIN(GetBool); b=&Config::latexBatchModeFlag; } +"GENERATE_RTF"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateRTF; } +"RTF_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::rtfOutputDir; s->resize(0); } +"COMPACT_RTF"[ \t]*"=" { BEGIN(GetBool); b=&Config::compactRTFFlag; } +"RTF_HYPERLINKS"[ \t]*"=" { BEGIN(GetBool); b=&Config::rtfHyperFlag; } +"GENERATE_MAN"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateMan; } +"MAN_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::manOutputDir; s->resize(0); } +"MAN_EXTENSION"[ \t]*"=" { BEGIN(GetString); s=&Config::manExtension; s->resize(0); } +"ENABLE_PREPROCESSING"[ \t]*"=" { BEGIN(GetBool); b=&Config::preprocessingFlag; } +"MACRO_EXPANSION"[ \t]*"=" { BEGIN(GetBool); b=&Config::macroExpansionFlag; } +"SEARCH_INCLUDES"[ \t]*"=" { BEGIN(GetBool); b=&Config::searchIncludeFlag; } +"INCLUDE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::includePath; l->clear(); elemStr=""; } +"PREDEFINED"[ \t]*"=" { BEGIN(GetStrList); l=&Config::predefined; l->clear(); elemStr=""; } +"EXPAND_ONLY_PREDEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::onlyPredefinedFlag; } +"TAGFILES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::tagFileList; l->clear(); elemStr=""; } +"GENERATE_TAGFILE"[ \t]*"=" { BEGIN(GetString); s=&Config::genTagFile; s->resize(0); } +"ALLEXTERNALS"[ \t]*"=" { BEGIN(GetBool); b=&Config::allExtFlag; } +"PERL_PATH"[ \t]*"=" { BEGIN(GetString); s=&Config::perlPath; s->resize(0); } +"HAVE_DOT"[ \t]*"=" { BEGIN(GetBool); b=&Config::haveDotFlag; } +"COLLABORATION_GRAPH"[ \t]*"=" { BEGIN(GetBool); b=&Config::collGraphFlag; } +"INCLUDE_GRAPH"[ \t]*"=" { BEGIN(GetBool); b=&Config::includeGraphFlag; } +"GRAPHICAL_HIERARCHY"[ \t]*"=" { BEGIN(GetBool); b=&Config::gfxHierarchyFlag; } +"SEARCHENGINE"[ \t]*"=" { BEGIN(GetBool); b=&Config::searchEngineFlag; } +"CGI_NAME"[ \t]*"=" { BEGIN(GetString); s=&Config::cgiName; s->resize(0); } +"CGI_URL"[ \t]*"=" { BEGIN(GetString); s=&Config::cgiURL; s->resize(0); } +"DOC_URL"[ \t]*"=" { BEGIN(GetString); s=&Config::docURL; s->resize(0); } +"DOC_ABSPATH"[ \t]*"=" { BEGIN(GetString); s=&Config::docAbsPath; s->resize(0); } +"BIN_ABSPATH"[ \t]*"=" { BEGIN(GetString); s=&Config::binAbsPath; s->resize(0); } +"EXT_DOC_PATHS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::extDocPathList; l->clear(); elemStr=""; } [a-z_A-Z0-9]+ { err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); } \n { yyLineNr++; BEGIN(Start); } \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 , where \n"; - t << "# is the value of the INPUT_FILTER tag, and 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 , where \n"; + t << "# is the value of the INPUT_FILTER tag, and 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) diff --git a/src/dot.cpp b/src/dot.cpp index 3c59fd6..f4f5fbc 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -166,6 +166,18 @@ class DotNodeList : public QList //-------------------------------------------------------------------- + +/*! 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 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 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; } diff --git a/src/dot.h b/src/dot.h index 97ba7a0..1b679c8 100644 --- a/src/dot.h +++ b/src/dot.h @@ -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; } diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 9c51f74..3028d67 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -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(); } diff --git a/src/doxygen.h b/src/doxygen.h index aa8f4b4..93a2a27 100644 --- a/src/doxygen.h +++ b/src/doxygen.h @@ -79,7 +79,6 @@ class BufStr : public QCString typedef QList StringList; typedef QDict MemberDict; -typedef QDict ClassDict; typedef QDict FileDict; typedef QDict StringDict; typedef QDict PageDict; diff --git a/src/doxygen.t b/src/doxygen.t index 3cff9b1..f887a68 100644 --- a/src/doxygen.t +++ b/src/doxygen.t @@ -1,7 +1,7 @@ # # # -# 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 diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 17a9763..1ecf21a 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -624,7 +624,7 @@ void HtmlGenerator::insertMemberAlign() DBG_HTML(t << "" << endl) if (Config::htmlAlignMemberFlag) { - t << " "; + t << " "; } } @@ -652,7 +652,7 @@ void HtmlGenerator::endMemberDescription() } else { - t << ""; + t << "

    "; } } diff --git a/src/index.cpp b/src/index.cpp index 62cf84d..bad6e18 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -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; + } } } } diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 36d4945..2f6aae7 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -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(); } diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index b1fb93a..b74f933 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -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) diff --git a/src/namespacedef.h b/src/namespacedef.h index 797bf6b..13458c8 100644 --- a/src/namespacedef.h +++ b/src/namespacedef.h @@ -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; diff --git a/src/scanner.l b/src/scanner.l index ae2cc8f..171ca71 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -836,6 +836,13 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type) return result; } +QCString extractName(const QCString &s) +{ + uint i=0; + while (itype=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 ; diff --git a/src/translator_ru.h b/src/translator_ru.h index e6b33e8..1e58553 100644 --- a/src/translator_ru.h +++ b/src/translator_ru.h @@ -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;idata()]; -// 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)); } diff --git a/src/util.h b/src/util.h index a238ddf..b23a505 100644 --- a/src/util.h +++ b/src/util.h @@ -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); diff --git a/tmake/lib/solaris-cc/tmake.conf b/tmake/lib/solaris-cc/tmake.conf index 7f82383..09a8316 100755 --- a/tmake/lib/solaris-cc/tmake.conf +++ b/tmake/lib/solaris-cc/tmake.conf @@ -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 -- cgit v0.12