summaryrefslogtreecommitdiffstats
path: root/addon/configgen/configgen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'addon/configgen/configgen.cpp')
-rw-r--r--addon/configgen/configgen.cpp1530
1 files changed, 1530 insertions, 0 deletions
diff --git a/addon/configgen/configgen.cpp b/addon/configgen/configgen.cpp
new file mode 100644
index 0000000..553db76
--- /dev/null
+++ b/addon/configgen/configgen.cpp
@@ -0,0 +1,1530 @@
+/******************************************************************************
+ *
+ *
+ *
+ * Copyright (C) 2000 by Joerg Baumann & Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * All output generated with Doxygen is not covered by this license.
+ *
+ */
+
+// includes
+
+#include "qtbc.h"
+#include <qtextstream.h>
+#include <qfile.h>
+#include <qlist.h>
+#include <qdict.h>
+#include <qstringlist.h>
+
+#include <stdio.h>
+
+static QString spaces=" ";
+
+void init(); // defined below
+
+// Iterate over all options calling the spezified method
+#define FORALL(x) \
+{\
+ ConfigOption *co=ConfigOption::optionList.first();\
+ while (co)\
+ {\
+ co->x;\
+ co=ConfigOption::optionList.next();\
+ }\
+}
+
+/*! convert a normal string \a s into a string that can be embedded in C code.
+ * The \a prefix string will be placed before each string line and the
+ * \a postfix string will be placed after each string.
+ */
+static void stringToC(QTextStream &t,QCString &s,
+ const char *prefix,const char *postfix)
+{
+ int i=0,l=s.length();
+ bool eol=TRUE;
+ for (i=0;i<l;i++)
+ {
+ char c;
+ switch ((c=s[i]))
+ {
+ case '\n':
+ t << postfix << endl;
+ eol=TRUE;
+ break;
+ case '\\':
+ case '"':
+ if (eol) t << prefix;
+ t << "\\" << (char)c;
+ eol=FALSE;
+ break;
+ default:
+ if (eol) t << prefix;
+ eol=FALSE;
+ t << (char)c;
+ break;
+ }
+ }
+ if (!eol) t << postfix << endl;
+}
+
+class ConfigBool;
+
+/*! baseclass for options */
+class ConfigOption
+{
+ public:
+ static QList<ConfigOption> optionList;
+ static QDict<ConfigOption> optionDict;
+ QCString getVarName() const { return varName; }
+
+ virtual ~ConfigOption() {}
+
+ virtual void printHeader(QTextStream &t)
+ {
+ t << " static " << type << " " << varName
+ << "; // " << shortDesc << endl;
+ }
+ virtual void printStatic(QTextStream &) {}
+ virtual void printConfig(QTextStream &t)
+ {
+ t << type << " Config::" << varName;
+ if (!defaultValue.isEmpty()) t << " = \"" << defaultValue << "\"";
+ t << ";" << endl;
+ }
+ virtual void printRules(QTextStream &)
+ {
+ }
+ virtual void printDump(QTextStream &)
+ {
+ }
+ virtual void printCheck(QTextStream &t)
+ {
+ // FIXME
+ if (!check.isEmpty()) t << check << endl;
+ }
+ virtual void printInit(QTextStream &t)
+ {
+ t << " Config::" << varName << " = "
+ << defaultValue << ";" << endl;
+ }
+ virtual void printTemplate(QTextStream &t)
+ {
+ t << " if (!sl)" << endl;
+ t << " {" << endl;
+ t << " t << \"\\n\";" << endl;
+ stringToC(t,longDesc," t << \"# ","\\n\";");
+ t << " t << \"\\n\";" << endl;
+ t << " }" << endl;
+ t << " t << \"" << cfgName << " = \";" << endl;
+ t << " " << writeFunc << "(t,Config::" << varName << ");" << endl;
+ t << " t << \"\\n\";" << endl;
+ }
+ virtual void printSubstEnv(QTextStream &) {}
+ virtual void printWidgets(QTextStream &,int) = 0;
+ virtual void addDependency(ConfigOption *)
+ {
+ fprintf(stderr,"Error: dependency add for non boolean option!\n");
+ }
+ void setDependsOn(ConfigBool *b) { depends=b; }
+
+ protected:
+ ConfigOption(const char * var,const char * cfg,const char * value,
+ const char * short_,const char * long_,const char * type_,
+ const char * type2_,const char * writeFunc_
+ ):
+ varName(var), cfgName(cfg), defaultValue(value), shortDesc(short_),
+ longDesc(long_), type(type_), type2(type2_), writeFunc(writeFunc_)
+ {
+ if (optionDict.find(var)!=0)
+ {
+ fprintf(stderr,"Error: configuration variable found more than once!\n");
+ }
+ else
+ {
+ optionList.append(this);
+ optionDict.insert(var,this);
+ }
+ depends=0;
+ }
+
+ void tclQuote(QTextStream &t,const char *s)
+ {
+ t << "{";
+ for (const char *p=s;*p!=0;p++)
+ {
+ if (strchr("{}",*p)) t << '\\';
+ t << (*p);
+ }
+ t << "} ";
+ }
+
+ QCString varName; // name as in Config::name
+ QCString cfgName; // name as in cfgfile
+ QCString defaultValue; // default value
+ QCString shortDesc; // short description
+ QCString longDesc; // long description
+ QCString type,type2; //
+ QCString writeFunc; //
+ QCString check; //
+ ConfigBool *depends;
+};
+
+QList<ConfigOption> ConfigOption::optionList;
+QDict<ConfigOption> ConfigOption::optionDict;
+
+void addDependency(const char *src,const char *dst)
+{
+ ConfigOption *sopt = ConfigOption::optionDict.find(src);
+ ConfigOption *dopt = ConfigOption::optionDict.find(dst);
+ if (!sopt)
+ {
+ fprintf(stderr,"Error: option %s not defined!\n",src);
+ }
+ if (!dopt)
+ {
+ fprintf(stderr,"Error: option %s not defined!\n",dst);
+ }
+ dopt->addDependency(sopt);
+ sopt->setDependsOn((ConfigBool *)dopt);
+}
+
+
+class ConfigInfo : public ConfigOption
+{
+ public:
+ ConfigInfo(const char *var,const char * short_)
+ : ConfigOption(var,"","",short_,"","","","") {}
+ static void add(const char *var,const char * short_);
+ void printHeader(QTextStream &) {}
+ void printConfig(QTextStream &) {}
+ void printRules(QTextStream &) {}
+ virtual void printTemplate(QTextStream &t)
+ {
+ t << " if (!sl)" << endl;
+ t << " {" << endl;
+ t << " t << \"\\n\";" << endl;
+ t << " }" << endl;
+ t << " t << \"#---------------------------------------------------------------------------\\n\";" << endl;
+ t << " t << \"# " << shortDesc << "\\n\";" << endl;
+ t << " t << \"#---------------------------------------------------------------------------\\n\";" << endl;
+ }
+ virtual void printInit(QTextStream &) {}
+ virtual void printDump(QTextStream &t)
+ {
+ t << " printf(\"# " << shortDesc << "\\n\");" << endl;
+ }
+ virtual void printWidgets(QTextStream &t,int pass)
+ {
+ switch(pass)
+ {
+ case 0:
+ t << " PageWidget *" << varName << " = new PageWidget( tab, \""
+ << varName << "\" );" << endl;
+ break;
+ case 1:
+ t << " " << varName << "->addStretch(1);" << endl;
+ break;
+ default:
+ break;
+ }
+ }
+ QCString getVarName() { return varName; }
+};
+
+class ConfigList : public ConfigOption
+{
+ public:
+ enum WidgetType { String, File, Dir, FileAndDir };
+ ConfigList(ConfigInfo *parent,const char * var,const char * cfg,const char * value,
+ const char * short_,const char * long_, WidgetType w)
+ : ConfigOption(var,cfg,value,short_,long_,"QStrList","List","writeStringList"),
+ m_parent(parent),
+ m_widgetType(w)
+ {
+ }
+ static void add(const char * var,const char * cfg,const char * value,
+ const char * short_,const char * long_,WidgetType w=String);
+ virtual void printRules(QTextStream &t)
+ {
+ t << "<Start>\"" << cfgName << "\"[ \\t]*\"=\"";
+ t << spaces.left(22-cfgName.length());
+ t << "{ BEGIN(GetStrList); l=&Config::" << varName;
+ t << "; l->clear(); elemStr=\"\"; }" << endl;
+ }
+ virtual void printInit(QTextStream &t)
+ {
+ t << " Config::" << varName;
+ if (!defaultValue.isEmpty())
+ {
+ t << " = \"" << defaultValue << "\"";
+ }
+ else
+ {
+ t << ".clear()";
+ }
+ t << ";" << endl;
+ }
+ virtual void printDump(QTextStream &t)
+ {
+ t << " {" << endl;
+ t << " char *is=Config::" << varName << ".first();" << endl;
+ t << " while (is)" << endl;
+ t << " {" << endl;
+ t << " printf(\"" << varName << "=`%s'\\n\",is);" << endl;
+ t << " is=Config::" << varName << ".next();" << endl;
+ t << " }" << endl;
+ t << " }" << endl;
+ }
+ virtual void printSubstEnv(QTextStream &t)
+ {
+ t << " substEnvVarsInStrList( Config::" << varName << " );" << endl;
+ }
+ virtual void printWidgets(QTextStream &t,int pass)
+ {
+ switch (pass)
+ {
+ case 0:
+ {
+ t << " " << varName << " = new InputStrList( \"" << cfgName
+ << "\", " << m_parent->getVarName() << ", Config::" << varName;
+ if (m_widgetType!=String)
+ {
+ t << ",";
+ switch(m_widgetType)
+ {
+ case File: t << "InputStrList::ListFile"; break;
+ case Dir: t << "InputStrList::ListDir"; break;
+ case FileAndDir: t << "InputStrList::ListFileDir"; break;
+ default: break;
+ }
+ }
+ t << " );" << endl;
+ t << " QWhatsThis::add(" << varName << ", " << endl;
+ stringToC(t,longDesc," \"","\"");
+ t << " );" << endl;
+ t << " connect(" << varName
+ << ",SIGNAL(changed()),this,SIGNAL(changed()));" << endl;
+ }
+ break;
+ case 2:
+ {
+ t << " InputStrList *" << varName << ";" << endl;
+ }
+ break;
+ case 5:
+ {
+ t << " " << varName << "->init();" << endl;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ private:
+ ConfigInfo *m_parent;
+ WidgetType m_widgetType;
+};
+
+class ConfigString : public ConfigOption
+{
+ public:
+ enum WidgetType { String, File, Dir };
+ ConfigString(ConfigInfo *parent, const char * var,const char * cfg,const char * value,
+ const char * short_,const char * long_, WidgetType w
+ )
+ : ConfigOption(var,cfg,value,short_,long_,
+ "QCString","String","writeStringValue"
+ ),
+ m_parent(parent),
+ m_widgetType(w)
+ {
+ }
+
+ static void add(const char * var,const char * cfg,const char * value,
+ const char * short_,const char * long_,WidgetType w=String);
+ static void addFixedValue(const char *var, const char *value);
+
+ virtual void printRules(QTextStream &t)
+ {
+ t << "<Start>\"" << cfgName << "\"[ \\t]*\"=\"";
+ t << spaces.left(22-cfgName.length());
+ t << "{ BEGIN(GetString); s=&Config::" << varName;
+ t << "; s->resize(0); }" << endl;
+ }
+ virtual void printInit(QTextStream &t)
+ {
+ t << " Config::" << varName;
+ if (!defaultValue.isEmpty()) t << " = \"" << defaultValue << "\"";
+ else t << ".resize(0)";
+ t << ";" << endl;
+ }
+ virtual void printDump(QTextStream &t)
+ {
+ t << " printf(\"" << varName << "=`%s'\\n\",Config::" << varName << ".data());" << endl;
+ }
+ virtual void printSubstEnv(QTextStream &t)
+ {
+ t << " substEnvVarsInString( Config::" << varName << " );" << endl;
+ }
+ virtual void printWidgets(QTextStream &t,int pass)
+ {
+ switch (pass)
+ {
+ case 0:
+ {
+ t << " " << varName << " = new InputString( \"" << cfgName
+ << "\", " << m_parent->getVarName() << ", Config::" << varName;
+ if (m_widgetType!=String || m_values.count()>0)
+ {
+ t << ",";
+ switch (m_widgetType)
+ {
+ case File:
+ t << "InputString::StringFile";
+ break;
+ case Dir:
+ t << "InputString::StringDir";
+ break;
+ default:
+ t << "InputString::StringFixed";
+ break;
+ }
+ }
+
+ t << " );" << endl;
+ t << " QWhatsThis::add(" << varName << ", " << endl;
+ stringToC(t,longDesc," \"","\"");
+ t << " );" << endl;
+ t << " connect(" << varName
+ << ",SIGNAL(changed()),this,SIGNAL(changed()));" << endl;
+ if (m_values.count()>0)
+ {
+ for ( QStringList::Iterator it = m_values.begin(); it != m_values.end(); ++it )
+ {
+ t << " " << varName << "->addValue(\"" << (*it) << "\");" << endl;
+ }
+ }
+ }
+ break;
+ case 2:
+ {
+ t << " InputString *" << varName << ";" << endl;
+ }
+ break;
+ case 5:
+ {
+ t << " " << varName << "->init();" << endl;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ void addValue(const char *val)
+ {
+ m_values.append(val);
+ }
+ private:
+ ConfigInfo *m_parent;
+ WidgetType m_widgetType;
+ QStringList m_values;
+};
+
+class ConfigInt : public ConfigOption
+{
+ public:
+ ConfigInt(ConfigInfo *parent,const char * var,const char * cfg,const char * value,
+ const char * short_,const char * long_,int minVal,int maxVal)
+ : ConfigOption(var,cfg,value,short_,long_,"int ","Int","writeIntValue"),
+ m_parent(parent), m_minVal(minVal), m_maxVal(maxVal)
+ {
+ }
+ static void add(const char * var,const char * cfg,const char * value,
+ const char * short_,const char * long_,int minVal,int maxVal);
+ virtual void printConfig(QTextStream &t)
+ {
+ t << type << " Config::" << varName;
+ if (!defaultValue.isEmpty()) t << " = " << defaultValue;
+ t << ";" << endl;
+ }
+ virtual void printRules(QTextStream &t)
+ {
+ t << "<Start>\"" << cfgName << "\"[ \\t]*\"=\"";
+ t << spaces.left(22-cfgName.length());
+ t << "{ BEGIN(GetString); s=&" << varName;
+ t << "String; s->resize(0); }" << endl;
+ }
+ virtual void printStatic(QTextStream &t)
+ {
+ t << "static QCString " << varName << "String;" << endl;
+ }
+ virtual void printDump(QTextStream &t)
+ {
+ t << " printf(\"" << varName << "=`%d'\\n\",Config::" << varName << ");" << endl;
+ }
+ virtual void printWidgets(QTextStream &t,int pass)
+ {
+ switch (pass)
+ {
+ case 0:
+ {
+ t << " " << varName << " = new InputInt( \"" << cfgName
+ << "\", " << m_parent->getVarName() << ", Config::"
+ << varName << "," << m_minVal << "," << m_maxVal << " );" << endl;
+ t << " QWhatsThis::add(" << varName << ", " << endl;
+ stringToC(t,longDesc," \"","\"");
+ t << " );" << endl;
+ t << " connect(" << varName
+ << ",SIGNAL(changed()),this,SIGNAL(changed()));" << endl;
+ }
+ break;
+ case 2:
+ {
+ t << " InputInt *" << varName << ";" << endl;
+ }
+ break;
+ case 5:
+ {
+ t << " " << varName << "->init();" << endl;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ private:
+ ConfigInfo *m_parent;
+ int m_minVal;
+ int m_maxVal;
+};
+
+class ConfigBool : public ConfigOption
+{
+ public:
+ ConfigBool(ConfigInfo *parent,const char * var,const char * cfg,const char * value,
+ const char * short_,const char * long_)
+ : ConfigOption(var,cfg,value,short_,long_,"bool ","Bool","writeBoolValue"),
+ m_parent(parent) {}
+ static void add(const char * var,const char * cfg,const char * value,
+ const char * short_,const char * long_);
+ virtual void printConfig(QTextStream &t)
+ {
+ t << type << " Config::" << varName;
+ if (!defaultValue.isEmpty()) t << " = " << defaultValue;
+ t << ";" << endl;
+ }
+ virtual void printRules(QTextStream &t)
+ {
+ t << "<Start>\"" << cfgName << "\"[ \\t]*\"=\"";
+ t << spaces.left(22-cfgName.length());
+ t << "{ BEGIN(GetBool); b=&Config::" << varName;
+ t << "; }" << endl;
+ }
+ virtual void printDump(QTextStream &t)
+ {
+ t << " printf(\"" << varName << "=`%d'\\n\",Config::" << varName << ");" << endl;
+ }
+ virtual void printWidgets(QTextStream &t,int pass)
+ {
+ switch (pass)
+ {
+ case 0:
+ {
+ t << " " << varName << " = new InputBool( \"" << cfgName
+ << "\", " << m_parent->getVarName() << ", Config::" << varName << " );" << endl;
+ t << " QWhatsThis::add(" << varName << ", " << endl;
+ stringToC(t,longDesc," \"","\"");
+ t << " );" << endl;
+ t << " connect(" << varName
+ << ",SIGNAL(changed()),this,SIGNAL(changed()));" << endl;
+ if (dependencies.count()>0)
+ {
+ t << " connect(" << varName << ",SIGNAL(toggled(bool)),SLOT("
+ << varName << "Toggle(bool)));" << endl;
+ }
+ }
+ break;
+ case 1:
+ {
+ if (dependencies.count()>0)
+ {
+ t << " " << varName << "Toggle(Config::" << varName << ");" << endl;
+ }
+ }
+ break;
+ case 2:
+ {
+ t << " InputBool *" << varName << ";" << endl;
+ }
+ break;
+ case 3:
+ {
+ if (dependencies.count()>0)
+ {
+ t << " void " << varName << "Toggle(bool);" << endl;
+ }
+ }
+ break;
+ case 4:
+ {
+ if (dependencies.count()>0)
+ {
+ t << "void ConfigFile::" << varName << "Toggle(bool state)" << endl;
+ t << "{" << endl;
+ ConfigOption *o=dependencies.first();
+ while (o)
+ {
+ t << " " << o->getVarName() << "->setEnabled(state);" << endl;
+ o=dependencies.next();
+ }
+ t << "}" << endl << endl;
+ }
+ }
+ break;
+ case 5:
+ {
+ t << " " << varName << "->init();" << endl;
+ }
+ default:
+ break;
+ }
+ }
+ virtual void addDependency(ConfigOption *o)
+ {
+ dependencies.append(o);
+ }
+ private:
+ ConfigInfo *m_parent;
+ QList<ConfigOption> dependencies;
+};
+
+static ConfigInfo *g_lastConfigInfo;
+
+void ConfigList::add(const char * var,const char * cfg,const char * value,
+ const char * short_,const char * long_,WidgetType w)
+{
+ ConfigOption* o=new ConfigList(g_lastConfigInfo,var,cfg,value,short_,long_,w);
+ ASSERT(o!=0);
+ ASSERT(g_lastConfigInfo!=0);
+ //optionList.append(o);
+}
+
+void ConfigString::add(const char * var,const char * cfg,const char * value,
+ const char * short_,const char * long_,WidgetType w)
+{
+ ConfigOption* o=new ConfigString(g_lastConfigInfo,var,cfg,value,short_,long_,w);
+ ASSERT(o!=0);
+ ASSERT(g_lastConfigInfo!=0);
+ //optionList.append(o);
+}
+
+void ConfigInt::add(const char * var,const char * cfg,const char * value,
+ const char * short_,const char * long_,int minVal, int maxVal)
+{
+ ConfigOption* o=new ConfigInt(g_lastConfigInfo,var,cfg,value,
+ short_,long_,minVal,maxVal);
+ ASSERT(o!=0);
+ ASSERT(g_lastConfigInfo!=0);
+ //optionList.append(o);
+}
+
+void ConfigBool::add(const char * var,const char * cfg,const char * value,
+ const char * short_,const char * long_)
+{
+ ConfigOption* o=new ConfigBool(g_lastConfigInfo,var,cfg,value,short_,long_);
+ ASSERT(o!=0);
+ ASSERT(g_lastConfigInfo!=0);
+ //optionList.append(o);
+}
+
+void ConfigInfo::add(const char * var,const char * short_)
+{
+ g_lastConfigInfo =new ConfigInfo(var,short_);
+ ASSERT(g_lastConfigInfo!=0);
+ //optionList.append(g_lastConfigInfo);
+}
+
+void ConfigString::addFixedValue(const char *var, const char *value)
+{
+ ConfigString *cs = (ConfigString *)optionDict[var];
+ if (cs==0)
+ {
+ fprintf(stderr,"ConfigString::addFixedValue: unknown variable %s\n",var);
+ }
+ else
+ {
+ cs->addValue(value);
+ }
+}
+
+
+int main(int argc,char * argv[])
+{
+ // check arguments
+ if (argc!=2)
+ {
+ fprintf(stderr,"usage: %s config-template\n",argv[0]);
+ exit(1);
+ }
+
+ init(); // create options
+ QFile ctfile(argv[1]);
+
+ // open template file
+ if (!ctfile.open(IO_ReadOnly))
+ {
+ fprintf(stderr,"Error: 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 <filter> <input-file>, where <filter> \n"
+ "is the value of the INPUT_FILTER tag, and <input-file> is the name of an \n"
+ "input file. Doxygen will then use the output that the filter program writes \n"
+ "to standard output. \n",
+ ConfigString::File
+ );
+
+ //-----------------------------------------------------------------------------------------------
+ ConfigInfo::add( "Index","configuration options related to the alphabetical class index");
+ //-----------------------------------------------------------------------------------------------
+
+ ConfigBool::add( "alphaIndexFlag",
+ "ALPHABETICAL_INDEX",
+ "FALSE",
+ "should an alphabetical index be generated?",
+ "If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \n"
+ "of all compounds will be generated. Enable this if the project \n"
+ "contains a lot of classes, structs, unions or interfaces. \n"
+ );
+ ConfigInt::add( "colsInAlphaIndex",
+ "COLS_IN_ALPHA_INDEX",
+ "5",
+ "number of columns in the alphabetical index",
+ "If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \n"
+ "the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \n"
+ "in which this list will be split (can be a number in the range [1..20]) \n",
+ 1,20
+ );
+ ConfigList::add( "ignorePrefixList",
+ "IGNORE_PREFIX",
+ "",
+ "list of prefixes to ignore for the alphabetical index",
+ "In case all classes in a project start with a common prefix, all \n"
+ "classes will be put under the same header in the alphabetical index. \n"
+ "The IGNORE_PREFIX tag can be used to specify one or more prefixes that \n"
+ "should be ignored while generating the index headers. \n"
+ );
+ //-----------------------------------------------------------------------------------------------
+ ConfigInfo::add( "HTML","configuration options related to the HTML output");
+ //-----------------------------------------------------------------------------------------------
+ ConfigBool::add( "generateHtml",
+ "GENERATE_HTML",
+ "TRUE",
+ "generate HTML output",
+ "If the GENERATE_HTML tag is set to YES (the default) Doxygen will \n"
+ "generate HTML output. \n"
+ );
+ ConfigString::add("htmlOutputDir",
+ "HTML_OUTPUT",
+ "html",
+ "the directory to put the HTML files",
+ "The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \n"
+ "If a relative path is entered the value of OUTPUT_DIRECTORY will be \n"
+ "put in front of it. If left blank `html' will be used as the default path. \n",
+ ConfigString::Dir
+ );
+ addDependency("htmlOutputDir","generateHtml");
+ ConfigString::add("headerFile",
+ "HTML_HEADER",
+ "",
+ "the name of the personal HTML header",
+ "The HTML_HEADER tag can be used to specify a personal HTML header for \n"
+ "each generated HTML page. If it is left blank doxygen will generate a \n"
+ "standard header.\n",
+ ConfigString::File
+ );
+ addDependency("headerFile","generateHtml");
+ ConfigString::add("footerFile",
+ "HTML_FOOTER",
+ "",
+ "the name of the personal HTML footer",
+ "The HTML_FOOTER tag can be used to specify a personal HTML footer for \n"
+ "each generated HTML page. If it is left blank doxygen will generate a \n"
+ "standard footer.\n",
+ ConfigString::File
+ );
+ addDependency("footerFile","generateHtml");
+ ConfigString::add("htmlStyleSheet",
+ "HTML_STYLESHEET",
+ "",
+ "user defined cascading style sheet",
+ "The HTML_STYLESHEET tag can be used to specify a user defined cascading \n"
+ "style sheet that is used by each HTML page. It can be used to \n"
+ "fine-tune the look of the HTML output. If the tag is left blank doxygen \n"
+ "will generate a default style sheet \n",
+ ConfigString::File
+ );
+ addDependency("htmlStyleSheet","generateHtml");
+ ConfigBool::add( "htmlAlignMemberFlag",
+ "HTML_ALIGN_MEMBERS",
+ "TRUE",
+ "align members in HTML using tables.",
+ "If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \n"
+ "files or namespaces will be aligned in HTML using tables. If set to \n"
+ "NO a bullet list will be used. \n"
+ );
+ addDependency("htmlAlignMemberFlag","generateHtml");
+ ConfigBool::add( "htmlHelpFlag",
+ "GENERATE_HTMLHELP",
+ "FALSE",
+ "should html help files be generated?",
+ "If the GENERATE_HTMLHELP tag is set to YES, additional index files \n"
+ "will be generated that can be used as input for tools like the \n"
+ "Microsoft HTML help workshop to generate a compressed HTML help file (.chm) \n"
+ "of the generated HTML documentation. \n"
+ );
+ addDependency("htmlHelpFlag","generateHtml");
+ //-----------------------------------------------------------------------------------------------
+ ConfigInfo::add( "LaTeX","configuration options related to the LaTeX output");
+ //-----------------------------------------------------------------------------------------------
+ ConfigBool::add( "generateLatex",
+ "GENERATE_LATEX",
+ "TRUE",
+ "generate Latex output",
+ "If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \n"
+ "generate Latex output. \n"
+ );
+ ConfigString::add("latexOutputDir",
+ "LATEX_OUTPUT",
+ "latex",
+ "the directory to put the Latex files",
+ "The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \n"
+ "If a relative path is entered the value of OUTPUT_DIRECTORY will be \n"
+ "put in front of it. If left blank `latex' will be used as the default path. \n",
+ ConfigString::Dir
+ );
+ addDependency("latexOutputDir","generateLatex");
+ ConfigBool::add( "compactLatexFlag",
+ "COMPACT_LATEX",
+ "FALSE",
+ "generate compact LaTeX documentation.",
+ "If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \n"
+ "LaTeX documents. This may be useful for small projects and may help to \n"
+ "save some trees in general. \n"
+ );
+ addDependency("compactLatexFlag","generateLatex");
+ ConfigString::add("paperType",
+ "PAPER_TYPE",
+ "a4wide",
+ "the page type to generate docs for",
+ "The PAPER_TYPE tag can be used to set the paper type that is used \n"
+ "by the printer. Possible values are: a4, a4wide, letter, legal and \n"
+ "executive. If left blank a4wide will be used. \n"
+ );
+ ConfigString::addFixedValue("paperType","a4");
+ ConfigString::addFixedValue("paperType","a4wide");
+ ConfigString::addFixedValue("paperType","letter");
+ ConfigString::addFixedValue("paperType","legal");
+ ConfigString::addFixedValue("paperType","executive");
+ addDependency("paperType","generateLatex");
+ ConfigList::add( "extraPackageList",
+ "EXTRA_PACKAGES",
+ "",
+ "list of extra LaTeX packages.",
+ "The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \n"
+ "packages that should be included in the LaTeX output. \n"
+ );
+ addDependency("extraPackageList","generateLatex");
+ ConfigString::add("latexHeaderFile",
+ "LATEX_HEADER",
+ "",
+ "the name of the personal LaTeX header",
+ "The LATEX_HEADER tag can be used to specify a personal LaTeX header for \n"
+ "the generated latex document. The header should contain everything until \n"
+ "the first chapter. If it is left blank doxygen will generate a \n"
+ "standard header. Notice: only use this tag if you know what you are doing! \n",
+ ConfigString::File
+ );
+ addDependency("latexHeaderFile","generateLatex");
+ ConfigBool::add( "pdfHyperFlag",
+ "PDF_HYPERLINKS",
+ "FALSE",
+ "generate latex prepared creating hyperlinked pdfs.",
+ "If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \n"
+ "is prepared for conversion to pdf (using ps2pdf). The pdf file will \n"
+ "contain links (just like the HTML output) instead of page references \n"
+ "This makes the output suitable for online browsing using a pdf viewer. \n"
+ );
+ addDependency("pdfHyperFlag","generateLatex");
+ ConfigBool::add( "latexBatchModeFlag",
+ "LATEX_BATCHMODE",
+ "FALSE",
+ "continue after latex errors?",
+ "If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\\\batchmode. \n"
+ "command to the generated LaTeX files. This will instruct LaTeX to keep \n"
+ "running if errors occur, instead of asking the user for help. \n"
+ "This option is also used when generating formulas in HTML. \n"
+ );
+ addDependency("latexBatchModeFlag","generateLatex");
+ //-----------------------------------------------------------------------------------------------
+ ConfigInfo::add( "RTF","configuration options related to the RTF output");
+ //-----------------------------------------------------------------------------------------------
+ ConfigBool::add( "generateRTF",
+ "GENERATE_RTF",
+ "FALSE",
+ "generate RTF flag",
+ "If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \n"
+ "For now this is experimental and is disabled by default. The RTF output \n"
+ "is optimised for Word 97 and may not look too pretty with other readers \n"
+ "or editors.\n"
+ );
+ ConfigString::add("rtfOutputDir",
+ "RTF_OUTPUT",
+ "rtf",
+ "the directory to put the RTF files",
+ "The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \n"
+ "If a relative path is entered the value of OUTPUT_DIRECTORY will be \n"
+ "put in front of it. If left blank `rtf' will be used as the default path. \n",
+ ConfigString::Dir
+ );
+ addDependency("rtfOutputDir","generateRTF");
+ ConfigBool::add( "compactRTFFlag",
+ "COMPACT_RTF",
+ "FALSE",
+ "generate more compact RTF",
+ "If the COMPACT_RTF tag is set to YES Doxygen generates more compact \n"
+ "RTF documents. This may be useful for small projects and may help to \n"
+ "save some trees in general. \n"
+ );
+ addDependency("compactRTFFlag","generateRTF");
+ ConfigBool::add( "rtfHyperFlag",
+ "RTF_HYPERLINKS",
+ "FALSE",
+ "generate hyper links in RTF",
+ "If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \n"
+ "will contain hyperlink fields. The RTF file will \n"
+ "contain links (just like the HTML output) instead of page references. \n"
+ "This makes the output suitable for online browsing using a WORD or other. \n"
+ "programs which support those fields. \n"
+ "Note: wordpad (write) and others do not support links. \n"
+ );
+ addDependency("rtfHyperFlag","generateRTF");
+ //-----------------------------------------------------------------------------------------------
+ ConfigInfo::add( "Man","configuration options related to the man page output");
+ //-----------------------------------------------------------------------------------------------
+ ConfigBool::add( "generateMan",
+ "GENERATE_MAN",
+ "TRUE",
+ "generate Man pages",
+ "If the GENERATE_MAN tag is set to YES (the default) Doxygen will \n"
+ "generate man pages \n"
+ );
+ ConfigString::add("manOutputDir",
+ "MAN_OUTPUT",
+ "man",
+ "the directory to put the man pages",
+ "The MAN_OUTPUT tag is used to specify where the man pages will be put. \n"
+ "If a relative path is entered the value of OUTPUT_DIRECTORY will be \n"
+ "put in front of it. If left blank `man' will be used as the default path. \n",
+ ConfigString::Dir
+ );
+ addDependency("manOutputDir","generateMan");
+ ConfigString::add("manExtension",
+ "MAN_EXTENSION",
+ ".3",
+ "extension the man page files",
+ "The MAN_EXTENSION tag determines the extension that is added to \n"
+ "the generated man pages (default is the subroutine's section .3) \n"
+ );
+ addDependency("manExtension","generateMan");
+ //-----------------------------------------------------------------------------------------------
+ ConfigInfo::add( "Preprocessor","Configuration options related to the preprocessor ");
+ //-----------------------------------------------------------------------------------------------
+ ConfigBool::add( "preprocessingFlag",
+ "ENABLE_PREPROCESSING",
+ "TRUE",
+ "enable preprocessing",
+ "If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \n"
+ "evaluate all C-preprocessor directives found in the sources and include \n"
+ "files. \n"
+ );
+ ConfigBool::add( "macroExpansionFlag",
+ "MACRO_EXPANSION",
+ "FALSE",
+ "expand macros in the source.",
+ "If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \n"
+ "names in the source code. If set to NO (the default) only conditional \n"
+ "compilation will be performed. \n"
+ );
+ addDependency("macroExpansionFlag","preprocessingFlag");
+ ConfigBool::add( "searchIncludeFlag",
+ "SEARCH_INCLUDES",
+ "TRUE",
+ "search for included files",
+ "If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \n"
+ "in the INCLUDE_PATH (see below) will be search if a #include is found. \n"
+ );
+ addDependency("searchIncludeFlag","preprocessingFlag");
+ ConfigList::add( "includePath",
+ "INCLUDE_PATH",
+ "",
+ "list of include paths",
+ "The INCLUDE_PATH tag can be used to specify one or more directories that \n"
+ "contain include files that are not input files but should be processed by \n"
+ "the preprocessor. \n",
+ ConfigList::Dir
+ );
+ addDependency("includePath","preprocessingFlag");
+ ConfigList::add( "predefined",
+ "PREDEFINED",
+ "",
+ "list of predefined macro names.",
+ "The PREDEFINED tag can be used to specify one or more macro names that \n"
+ "are defined before the preprocessor is started (similar to the -D option of \n"
+ "gcc). The argument of the tag is a list of macros of the form: name \n"
+ "or name=definition (no spaces). If the definition and the = are \n"
+ "omitted =1 is assumed. \n"
+ );
+ addDependency("predefined","preprocessingFlag");
+ ConfigBool::add( "onlyPredefinedFlag",
+ "EXPAND_ONLY_PREDEF",
+ "FALSE",
+ "expand only predefined macros",
+ "If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \n"
+ "then the macro expansion is limited to the macros specified with the \n"
+ "PREDEFINED tag. \n"
+ );
+ addDependency("onlyPredefinedFlag","preprocessingFlag");
+ //-----------------------------------------------------------------------------------------------
+ ConfigInfo::add( "External","Configuration::addtions related to external references ");
+ //-----------------------------------------------------------------------------------------------
+ ConfigList::add( "tagFileList",
+ "TAGFILES",
+ "",
+ "list of tag files",
+ "The TAGFILES tag can be used to specify one or more tagfiles. \n",
+ ConfigList::File
+ );
+ ConfigString::add("genTagFile",
+ "GENERATE_TAGFILE",
+ "",
+ "the tag file to generate",
+ "When a file name is specified after GENERATE_TAGFILE, doxygen will create \n"
+ "a tag file that is based on the input files it reads. \n",
+ ConfigString::File
+ );
+ ConfigBool::add( "allExtFlag",
+ "ALLEXTERNALS",
+ "FALSE",
+ "include all external classes flag",
+ "If the ALLEXTERNALS tag is set to YES all external classes will be listed \n"
+ "in the class index. If set to NO only the inherited external classes \n"
+ "will be listed. \n"
+ );
+ ConfigString::add("perlPath",
+ "PERL_PATH",
+ "/usr/bin/perl",
+ "the absolute path to perl",
+ "The PERL_PATH should be the absolute path and name of the perl script \n"
+ "interpreter (i.e. the result of `which perl'). \n",
+ ConfigString::Dir
+ );
+ //-----------------------------------------------------------------------------------------------
+ ConfigInfo::add( "Dot","Configuration options related to the dot tool ");
+ //-----------------------------------------------------------------------------------------------
+ ConfigBool::add( "haveDotFlag",
+ "HAVE_DOT",
+ "FALSE",
+ "indicates wether or not dot is present",
+ "If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \n"
+ "available from the path. This tool is part of Graphviz, a graph visualization \n"
+ "toolkit from AT&T and Lucent Bell Labs. The other options in this section \n"
+ "have no effect if this option is set to NO (the default) \n"
+ );
+ ConfigBool::add( "collGraphFlag",
+ "COLLABORATION_GRAPH",
+ "TRUE",
+ "collaboration graph",
+ "If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \n"
+ "will generate a graph for each documented class showing the direct and \n"
+ "indirect implementation dependencies (inheritance, containment, and \n"
+ "class references variables) of the class with other documented classes. \n"
+ );
+ addDependency("collGraphFlag","haveDotFlag");
+ ConfigBool::add( "includeGraphFlag",
+ "INCLUDE_GRAPH",
+ "TRUE",
+ "include graph",
+ "If the ENABLE_PREPROCESSING, INCLUDE_GRAPH, and HAVE_DOT tags are set to \n"
+ "YES then doxygen will generate a graph for each documented file showing \n"
+ "the direct and indirect include dependencies of the file with other \n"
+ "documented files. \n"
+ );
+ addDependency("includeGraphFlag","haveDotFlag");
+ ConfigBool::add( "gfxHierarchyFlag",
+ "GRAPHICAL_HIERARCHY",
+ "TRUE",
+ "flag to enable graphical hierarchy",
+ "If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \n"
+ "will graphical hierarchy of all classes instead of a textual one. \n"
+ );
+ addDependency("gfxHierarchyFlag","haveDotFlag");
+
+ //-----------------------------------------------------------------------------------------------
+ ConfigInfo::add( "Search","Configuration::addtions related to the search engine ");
+ //-----------------------------------------------------------------------------------------------
+ ConfigBool::add( "searchEngineFlag",
+ "SEARCHENGINE",
+ "FALSE",
+ "generate search engine flag",
+ "The SEARCHENGINE tag specifies whether or not a search engine should be \n"
+ "used. If set to NO the values of all tags below this one will be ignored. \n"
+ );
+ ConfigString::add("cgiName",
+ "CGI_NAME",
+ "search.cgi",
+ "the name of the CGI binary",
+ "The CGI_NAME tag should be the name of the CGI script that \n"
+ "starts the search engine (doxysearch) with the correct parameters. \n"
+ "A script with this name will be generated by doxygen. \n"
+ );
+ addDependency("cgiName","searchEngineFlag");
+ ConfigString::add("cgiURL",
+ "CGI_URL",
+ "",
+ "the absolute URL to the CGI binary",
+ "The CGI_URL tag should be the absolute URL to the directory where the \n"
+ "cgi binaries are located. See the documentation of your http daemon for \n"
+ "details. \n"
+ );
+ addDependency("cgiURL","searchEngineFlag");
+ ConfigString::add("docURL",
+ "DOC_URL",
+ "",
+ "the absolute URL to the documentation",
+ "The DOC_URL tag should be the absolute URL to the directory where the \n"
+ "documentation is located. If left blank the absolute path to the \n"
+ "documentation, with file:// prepended to it, will be used. \n"
+ );
+ addDependency("docURL","searchEngineFlag");
+ ConfigString::add("docAbsPath",
+ "DOC_ABSPATH",
+ "",
+ "the absolute path to the documentation",
+ "The DOC_ABSPATH tag should be the absolute path to the directory where the \n"
+ "documentation is located. If left blank the directory on the local machine \n"
+ "will be used. \n",
+ ConfigString::Dir
+ );
+ addDependency("docAbsPath","searchEngineFlag");
+ ConfigString::add("binAbsPath",
+ "BIN_ABSPATH",
+ "/usr/local/bin/",
+ "the absolute path to the doxysearch",
+ "The BIN_ABSPATH tag must point to the directory where the doxysearch binary \n"
+ "is installed. \n",
+ ConfigString::Dir
+ );
+ addDependency("binAbsPath","searchEngineFlag");
+ ConfigList::add( "extDocPathList",
+ "EXT_DOC_PATHS",
+ "",
+ "list of external doc. directories.",
+ "The EXT_DOC_PATHS tag can be used to specify one or more paths to \n"
+ "documentation generated for other projects. This allows doxysearch to search \n"
+ "the documentation for these projects as well. \n",
+ ConfigList::Dir
+ );
+ addDependency("extDocPathList","searchEngineFlag");
+
+ // The IMAGE_PATTERNS tag is now officially obsolete.
+ //-----------------------------------------------------------------------------------------------
+ //ConfigInfo::add("not used");
+ //-----------------------------------------------------------------------------------------------
+ //ConfigList::add("imagePatternList",
+ // "IMAGE_PATTERNS",
+ // "",
+ // "list of image paths",
+ // "donīt know\n");
+}