diff options
Diffstat (limited to 'src/config.h')
-rw-r--r-- | src/config.h | 571 |
1 files changed, 426 insertions, 145 deletions
diff --git a/src/config.h b/src/config.h index 0bdaffa..b67b97c 100644 --- a/src/config.h +++ b/src/config.h @@ -1,164 +1,445 @@ -/* This file was generated by configgen on Mon Mar 19 20:34:58 2001 - * from config_templ.h +#ifndef CONFIG_H +#define CONFIG_H + +#include "qtbc.h" +#include <qstrlist.h> +#include <qfile.h> +#include <qdict.h> +#include <qlist.h> +#include <qtextstream.h> + + +/*! \brief Abstract base class for any configuration option. * - * DO NOT EDIT! */ +class ConfigOption +{ + public: -/****************************************************************************** - * - * + enum OptionType { O_Info, O_List, O_Enum, O_String, O_Int, O_Bool }; + enum { MAX_OPTION_LENGTH = 23 }; + ConfigOption(OptionType t) : m_kind(t) + { + m_spaces.fill(' ',40); + } + virtual ~ConfigOption() + { + } + void addDependency(const char *dep) + { + m_dependency = dep; + } + OptionType kind() const { return m_kind; } + virtual void writeTemplate(QTextStream &t,bool sl) = 0; + virtual void convertStrToVal() {} + virtual void substEnvVars() {} + virtual void init() {} + QCString name() const { return m_name; } + QCString docs() const { return m_doc; } + QCString dependsOn() const { return m_dependency; } + + protected: + + QCString convertToComment(const QCString &s) + { + QCString result; + if (s.isEmpty()) return result; + else + { + result+="# "; + QCString tmp=s.stripWhiteSpace(); + char *p=tmp.data(); + char c; + while ((c=*p++)) + { + if (c=='\n') result+="\n# "; + else result+=c; + } + result+='\n'; + } + return result; + } + + void writeBoolValue(QTextStream &t,bool v) + { + if (v) t << "YES"; else t << "NO"; + } + + void writeIntValue(QTextStream &t,int i) + { + t << i; + } + + 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; + } + } + + 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; + } + } + + QCString m_spaces; + QCString m_name; + QCString m_doc; + QCString m_dependency; + OptionType m_kind; +}; + +/*! \brief Section marker for grouping the configuration options * - * Copyright (C) 1997-2001 by Dimitri van Heesch. + */ +class ConfigInfo : public ConfigOption +{ + public: + ConfigInfo(const char *name,const char *doc) + : ConfigOption(O_Info) + { + m_name = name; + m_doc = doc; + } + void writeTemplate(QTextStream &t, bool sl) + { + if (!sl) + { + t << "\n"; + } + t << "#---------------------------------------------------------------------------\n"; + t << "# " << m_doc << endl; + t << "#---------------------------------------------------------------------------\n"; + } +}; + +/*! \brief Option of the list type. * - * 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. + */ +class ConfigList : public ConfigOption +{ + public: + enum WidgetType { String, File, Dir, FileAndDir }; + ConfigList(const char *name,const char *doc) + : ConfigOption(O_List) + { + m_name = name; + m_doc = doc; + m_widgetType = String; + } + void addValue(const char *v) { m_value.append(v); } + void setWidgetType(WidgetType w) { m_widgetType = w; } + WidgetType widgetType() const { return m_widgetType; } + QStrList *valueRef() { return &m_value; } + void writeTemplate(QTextStream &t,bool sl) + { + if (!sl) + { + t << endl; + t << convertToComment(m_doc); + t << endl; + } + t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "= "; + writeStringList(t,m_value); + t << "\n"; + } + void substEnvVars(); + private: + QStrList m_value; + WidgetType m_widgetType; +}; + +/*! \brief Option of the enum type. * */ +class ConfigEnum : public ConfigOption +{ + public: + ConfigEnum(const char *name,const char *doc,const char *defVal) + : ConfigOption(O_Enum) + { + m_name = name; + m_doc = doc; + m_value = defVal; + m_defValue = defVal; + } + void addValue(const char *v) { m_valueRange.append(v); } + QStrListIterator iterator() + { + return QStrListIterator(m_valueRange); + } + QCString *valueRef() { return &m_value; } + void writeTemplate(QTextStream &t,bool sl) + { + if (!sl) + { + t << endl; + t << convertToComment(m_doc); + t << endl; + } + t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "= "; + writeStringValue(t,m_value); + t << "\n"; + } + void init() { m_value = m_defValue.copy(); } -#ifndef CONFIG_H -#define CONFIG_H + private: + QStrList m_valueRange; + QCString m_value; + QCString m_defValue; +}; -#ifndef DOXYWIZARD -#include "qtbc.h" -#endif -#include <qstrlist.h> -#include <qfile.h> +/*! \brief Option of the string type. + * + */ +class ConfigString : public ConfigOption +{ + public: + enum WidgetType { String, File, Dir }; + ConfigString(const char *name,const char *doc) + : ConfigOption(O_String) + { + m_name = name; + m_doc = doc; + m_widgetType = String; + } + ~ConfigString() + { + } + void setWidgetType(WidgetType w) { m_widgetType = w; } + WidgetType widgetType() const { return m_widgetType; } + void setDefaultValue(const char *v) { m_defValue = v; } + QCString *valueRef() { return &m_value; } + void writeTemplate(QTextStream &t,bool sl) + { + if (!sl) + { + t << endl; + t << convertToComment(m_doc); + t << endl; + } + t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "= "; + writeStringValue(t,m_value); + t << "\n"; + } + void substEnvVars(); + void init() { m_value = m_defValue.copy(); } + + private: + QCString m_value; + QCString m_defValue; + WidgetType m_widgetType; +}; -extern void parseConfig(const QCString &config,const char *fn); -extern void writeTemplateConfig(QFile *f,bool shortList); -extern void checkConfig(); -extern void configStrToVal(); -extern void substituteEnvironmentVars(); +/*! \brief Option of the integer type. + * + */ +class ConfigInt : public ConfigOption +{ + public: + ConfigInt(const char *name,const char *doc,int minVal,int maxVal,int defVal) + : ConfigOption(O_Int) + { + m_name = name; + m_doc = doc; + m_value = defVal; + m_defValue = defVal; + m_minVal = minVal; + m_maxVal = maxVal; + } + QCString *valueStringRef() { return &m_valueString; } + int *valueRef() { return &m_value; } + int minVal() const { return m_minVal; } + int maxVal() const { return m_maxVal; } + void convertStrToVal(); + void writeTemplate(QTextStream &t,bool sl) + { + if (!sl) + { + t << endl; + t << convertToComment(m_doc); + t << endl; + } + t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "= "; + writeIntValue(t,m_value); + t << "\n"; + } + void init() { m_value = m_defValue; } + private: + int m_value; + int m_defValue; + int m_minVal; + int m_maxVal; + QCString m_valueString; +}; + +/*! \brief Option of the boolean type. + * + */ +class ConfigBool : public ConfigOption +{ + public: + ConfigBool(const char *name,const char *doc,bool defVal) + : ConfigOption(O_Bool) + { + m_name = name; + m_doc = doc; + m_value = defVal; + m_defValue = defVal; + } + bool *valueRef() { return &m_value; } + void writeTemplate(QTextStream &t,bool sl) + { + if (!sl) + { + t << endl; + t << convertToComment(m_doc); + t << endl; + } + t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "= "; + writeBoolValue(t,m_value); + t << "\n"; + } + void init() { m_value = m_defValue; } + private: + bool m_value; + bool m_defValue; +}; -/*! \brief Namespace for configuration variables +/*! \brief Singleton for configuration variables. * - * This struct acts as a namespace that holds the global static variables + * This object holds the global static variables * read from a user-supplied configuration file. + * The static member instance() can be used to get + * a pointer to the one and only instance. */ 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 outputLanguage; /*!< the output language */ - static bool extractAllFlag; /*!< generate docs for all classes flag */ - static bool extractPrivateFlag; /*!< generate docs for private members flag */ - static bool extractStaticFlag; /*!< generate docs for static 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 hideScopeNames; /*!< hide the name of the scope. */ - static bool verbatimHeaderFlag; /*!< enable/disable generation of verb headers. */ - static bool showIncFileFlag; /*!< show include file in file documentation? */ - static bool autoBriefFlag; /*!< should 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 bool distributeDocFlag; /*!< distribute docs over member group? */ - static int tabSize; /*!< number of spaces in a tab */ - static QStrList sectionFilterList; /*!< list of section filters that are enabled */ - static bool generateTodoList; /*!< do we want a todo list? */ - static bool generateTestList; /*!< do we want a test list? */ - static bool generateBugList; /*!< do we want a bug list? */ - static QStrList aliasList; /*!< list of aliases */ - static int maxInitLines; /*!< when do we hide values of variable and defines? */ - static bool optimizeForCFlag; /*!< do we parse C code? */ - static bool showUsedFilesFlag; /*!< do we show the list of used files for classes and structs? */ - static bool quietFlag; /*!< generate progress messages flag */ - static bool warningFlag; /*!< generate warnings flag */ - static bool warningUndocFlag; /*!< generate undocumented warnings */ - static QCString warnFormat; /*!< format of the warning messages */ - static QCString warnLogFile; /*!< log file to write warning to */ - 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 filterForSourceFlag; /*!< do we filter source 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 htmlHelpFlag; /*!< should html help files be generated? */ - static bool htmlHelpChiFlag; /*!< should chi file be generated? */ - static bool htmlHelpTocFlag; /*!< should a binary table of contents be generated? */ - static bool htmlHelpTocExpandFlag; /*!< should module elements be displayed in the table of contents? */ - static bool noIndexFlag; /*!< generate condensed index flag */ - static int enumValuesPerLine; /*!< number of enum values that are put on one line */ - static bool ftvHelpFlag; /*!< should a folder tree view be generated? */ - static int treeViewWidth; /*!< What is the width of the treeview panel? */ - 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 usePDFLatexFlag; /*!< use pdflatex instead of plain latex */ - 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 QCString rtfStylesheetFile; /*!< file to load stylesheet definitions from */ - static QCString rtfExtensionsFile; /*!< file to load rtf extensions from */ - 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 onlyPredefinedFlag; /*!< expand only predefined macros */ - static bool searchIncludeFlag; /*!< search for included files */ - static QStrList includePath; /*!< list of include paths */ - static QStrList includeFilePatternList; /*!< list of include file patterns */ - static QStrList predefined; /*!< list of predefined macro names. */ - static QStrList expandAsDefinedList; /*!< list of defines to expand */ - 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 classGraphFlag; /*!< class graph */ - static bool collGraphFlag; /*!< collaboration graph */ - static bool includeGraphFlag; /*!< include graph */ - static bool includedByGraphFlag; /*!< depends on include graph */ - static bool gfxHierarchyFlag; /*!< flag to enable graphical hierarchy */ - static QCString dotPath; /*!< path to the dot tool */ - static int maxDotGraphWidth; /*!< max dot graph width */ - static int maxDotGraphHeight; /*!< max dot graph height */ - static bool generateLegend; /*!< generate legend page */ - static bool dotCleanUp; /*!< remove intermedia dot files? */ - 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. */ + public: + static Config *instance() + { + if (m_instance==0) m_instance = new Config; + return m_instance; + } + + void writeTemplate(QFile *f,bool shortIndex); + void convertStrToVal(); + void substituteEnvironmentVars(); + void check(); + void init(); + void parse(const QCString &config,const char *fn); + QListIterator<ConfigOption> iterator() + { + return QListIterator<ConfigOption>(*m_options); + } + + //////////////////////// + // get functions + //////////////////////// + QCString &getString(const char *name) const; + QStrList &getList(const char *name) const; + QCString &getEnum(const char *name) const; + int &getInt(const char *name) const; + bool &getBool(const char *name) const; + ConfigOption *get(const char *name) const + { + return m_dict->find(name); + } + + //////////////////////// + // add functions + //////////////////////// + ConfigInfo *addInfo(const char *name,const char *doc) + { + ConfigInfo *result = new ConfigInfo(name,doc); + m_options->append(result); + return result; + } + ConfigString *addString(const char *name, + const char *doc) + { + ConfigString *result = new ConfigString(name,doc); + m_options->append(result); + m_dict->insert(name,result); + return result; + } + ConfigEnum *addEnum(const char *name, + const char *doc, + const char *defVal) + { + ConfigEnum *result = new ConfigEnum(name,doc,defVal); + m_options->append(result); + m_dict->insert(name,result); + return result; + } + ConfigList *addList(const char *name, + const char *doc) + { + ConfigList *result = new ConfigList(name,doc); + m_options->append(result); + m_dict->insert(name,result); + return result; + } + ConfigInt *addInt(const char *name, + const char *doc, + int minVal,int maxVal,int defVal) + { + ConfigInt *result = new ConfigInt(name,doc,minVal,maxVal,defVal); + m_options->append(result); + m_dict->insert(name,result); + return result; + } + ConfigBool *addBool(const char *name, + const char *doc, + bool defVal) + { + ConfigBool *result = new ConfigBool(name,doc,defVal); + m_options->append(result); + m_dict->insert(name,result); + return result; + } + protected: + Config() + { + m_options = new QList<ConfigOption>; + m_dict = new QDict<ConfigOption>(257); + m_options->setAutoDelete(TRUE); + m_initialized = FALSE; + create(); + } + ~Config() + { + delete m_options; + delete m_dict; + } + void create(); + + private: + QList<ConfigOption> *m_options; + QDict<ConfigOption> *m_dict; + static Config *m_instance; + bool m_initialized; }; #endif |