diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2001-04-01 17:28:27 (GMT) |
---|---|---|
committer | Dimitri van Heesch <dimitri@stack.nl> | 2001-04-01 17:28:27 (GMT) |
commit | c47269c4f1fb1387d6876075f3b2e935354d5b76 (patch) | |
tree | 9ab56725fa008f006370f074ed17023811bbc55f /addon | |
parent | b11bb229001fbb79399e3c21860ae6fb4608e77a (diff) | |
download | Doxygen-c47269c4f1fb1387d6876075f3b2e935354d5b76.zip Doxygen-c47269c4f1fb1387d6876075f3b2e935354d5b76.tar.gz Doxygen-c47269c4f1fb1387d6876075f3b2e935354d5b76.tar.bz2 |
Release-1.2.6-20010401
Diffstat (limited to 'addon')
27 files changed, 743 insertions, 3077 deletions
diff --git a/addon/configgen/Makefile.in b/addon/configgen/Makefile.in deleted file mode 100644 index f5ad09a..0000000 --- a/addon/configgen/Makefile.in +++ /dev/null @@ -1,42 +0,0 @@ -# -# -# -# Copyright (C) 1997-2001 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 - $(ENV) $(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: - $(ENV) $(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/README b/addon/configgen/README deleted file mode 100644 index 717ca2e..0000000 --- a/addon/configgen/README +++ /dev/null @@ -1,13 +0,0 @@ -The configgen tool is used to: -- generate the parser for the configuration file based on - the templates config_templ.h and config_templ.l -- generate the GUI frontend "doxywizard" for creating a configuration - file based on the templates doxywizard_templ.h and doxywizard_templ.cpp - -If you want to add a new configuration option to doxygen, -then you should add a new entry the init() function in configgen.cpp - -After that you can do a "make install" in this directory to update -the config.l and config.h in doxygen's source directory. - --Dimitri diff --git a/addon/configgen/config_templ.h b/addon/configgen/config_templ.h deleted file mode 100644 index eca1a95..0000000 --- a/addon/configgen/config_templ.h +++ /dev/null @@ -1,42 +0,0 @@ -/****************************************************************************** - * - * - * - * Copyright (C) 1997-2001 by Dimitri van Heesch. - * - * Permission to use, copy, modify, and distribute this software and its - * documentation under the terms of the GNU General Public License is hereby - * granted. No representations are made about the suitability of this software - * for any purpose. It is provided "as is" without express or implied warranty. - * See the GNU General Public License for more details. - * - */ - -#ifndef CONFIG_H -#define CONFIG_H - -#ifndef DOXYWIZARD -#include "qtbc.h" -#endif -#include <qstrlist.h> -#include <qfile.h> - -extern void parseConfig(const QCString &config,const char *fn); -extern void writeTemplateConfig(QFile *f,bool shortList); -extern void checkConfig(); -extern void configStrToVal(); -extern void substituteEnvironmentVars(); - -/*! \brief Namespace for configuration variables - * - * This struct acts as a namespace that holds the global static variables - * read from a user-supplied configuration file. - */ -struct Config -{ - static void init(); - -#CONFIG Header -}; - -#endif diff --git a/addon/configgen/config_templ.l b/addon/configgen/config_templ.l deleted file mode 100644 index c4310f3..0000000 --- a/addon/configgen/config_templ.l +++ /dev/null @@ -1,1004 +0,0 @@ -/****************************************************************************** - * - * - * - * Copyright (C) 1997-2001 by Dimitri van Heesch. - * - * Permission to use, copy, modify, and distribute this software and its - * documentation under the terms of the GNU General Public License is hereby - * granted. No representations are made about the suitability of this software - * for any purpose. It is provided "as is" without express or implied warranty. - * See the GNU General Public License for more details. - * - */ - -%{ - -/* - * includes - */ -#include <stdio.h> -#include <stdlib.h> -#include <iostream.h> -#include <assert.h> -#include <ctype.h> - -#include <qfileinfo.h> -#include <qdir.h> -#include <qtextstream.h> -#include <qregexp.h> -#include <qstack.h> - -#include "config.h" -#include "version.h" - -#ifdef DOXYWIZARD -#include <stdarg.h> -void err(const char *fmt, ...) -{ - va_list args; - va_start(args, fmt); - vfprintf(stderr, fmt, args); - va_end(args); -} -void warn_cont(const char *fmt, ...) -{ - va_list args; - va_start(args, fmt); - vfprintf(stderr, fmt, args); - va_end(args); -} -void initWarningFormat() -{ -} -#else -#include "doxygen.h" -#include "message.h" -#include "pre.h" -#include "version.h" -#include "language.h" -#endif - -#define MAX_INCLUDE_DEPTH 10 -#define YY_NEVER_INTERACTIVE 1 -#define YY_NO_UNPUT - -/* ----------------------------------------------------------------- - * - * exported variables - */ - -#CONFIG Config - -/* ----------------------------------------------------------------- - * - * static variables - */ - -struct ConfigFileState -{ - int lineNr; - FILE *filePtr; - YY_BUFFER_STATE oldState; - YY_BUFFER_STATE newState; - QCString fileName; -}; - -static const char *inputString; -static int inputPosition; -static int yyLineNr; -static QCString yyFileName; -static QCString tmpString; -static QCString *s=0; -static bool *b=0; -static QStrList *l=0; -static int lastState; -static QCString elemStr; -static QCString includeName; -static QStrList includePathList; -static QStack<ConfigFileState> includeStack; -static int includeDepth; - -#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) -{ - // no file included - if (includeStack.isEmpty()) - { - int c=0; - while( c < max_size && inputString[inputPosition] ) - { - *buf = inputString[inputPosition++] ; - c++; buf++; - } - return c; - } - else - { - //assert(includeStack.current()->newState==YY_CURRENT_BUFFER); - return fread(buf,1,max_size,includeStack.current()->filePtr); - } -} - - -static FILE *tryPath(const char *path,const char *fileName) -{ - QCString absName=(QCString)path+"/"+fileName; - QFileInfo fi(absName); - if (fi.exists() && fi.isFile()) - { - FILE *f=fopen(absName,"r"); - if (!f) err("Error: could not open file %s for reading\n",absName.data()); - return f; - } - return 0; -} - -static void substEnvVarsInStrList(QStrList &sl); -static void substEnvVarsInString(QCString &s); - -static FILE *findFile(const char *fileName) -{ - substEnvVarsInStrList(includePathList); - char *s=includePathList.first(); - while (s) // try each of the include paths - { - FILE *f = tryPath(s,fileName); - if (f) return f; - s=includePathList.next(); - } - // try cwd if includePathList fails - return tryPath(".",fileName); -} - -static void readIncludeFile(const char *incName) -{ - if (includeDepth==MAX_INCLUDE_DEPTH) { - err("Error: maximum include depth (%d) reached, %s is not included. Aborting...\n", - MAX_INCLUDE_DEPTH,incName); - exit(1); - } - - QCString inc = incName; - substEnvVarsInString(inc); - inc = inc.stripWhiteSpace(); - uint incLen = inc.length(); - if (inc.at(0)=='"' && inc.at(incLen-1)=='"') // strip quotes - { - inc=inc.mid(1,incLen-2); - } - - FILE *f; - - //printf("Searching for `%s'\n",incFileName.data()); - if ((f=findFile(inc))) // see if the include file can be found - { - // For debugging -#if SHOW_INCLUDES - for (i=0;i<includeStack.count();i++) msg(" "); - msg("@INCLUDE = %s: parsing...\n",inc.data()); -#endif - - // store the state of the old file - ConfigFileState *fs=new ConfigFileState; - fs->oldState=YY_CURRENT_BUFFER; - fs->lineNr=yyLineNr; - fs->fileName=yyFileName; - fs->filePtr=f; - // push the state on the stack - includeStack.push(fs); - // set the scanner to the include file - yy_switch_to_buffer(yy_create_buffer(f, YY_BUF_SIZE)); - fs->newState=YY_CURRENT_BUFFER; - yyFileName=inc; - includeDepth++; - } - else - { - err("Error: @INCLUDE = %s: not found!\n",inc.data()); - exit(1); - } -} - - -%} - -%option noyywrap - -%x Start -%x SkipComment -%x GetString -%x GetBool -%x GetStrList -%x GetQuotedString -%x GetEnvVar -%x Include - -%% - -<*>\0x0d -<Start,GetString,GetStrList,GetBool>"#" { BEGIN(SkipComment); } -#CONFIG Rules - -<Start>"@INCLUDE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&includePathList; l->clear(); elemStr=""; } - /* include a config file */ -<Start>"@INCLUDE"[ \t]*"=" { BEGIN(Include);} -<Include>([^ \"\t\r\n]+)|("\""[^\n\"]+"\"") { - readIncludeFile(yytext); - BEGIN(Start); - } -<<EOF>> { - //printf("End of include file\n"); - //printf("Include stack depth=%d\n",g_includeStack.count()); - if (includeStack.isEmpty()) - { - //printf("Terminating scanner!\n"); - yyterminate(); - } - else - { - ConfigFileState *fs=includeStack.pop(); - fclose(fs->filePtr); - YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER; - yy_switch_to_buffer( fs->oldState ); - yy_delete_buffer( oldBuf ); - yyLineNr=fs->lineNr; - yyFileName=fs->fileName; - delete fs; fs=0; - includeDepth--; - } - } - -<Start>[a-z_A-Z0-9]+ { err("Warning: ignoring unknown tag `%s' at line %d, file %s\n",yytext,yyLineNr,yyFileName.data()); } -<GetString,GetBool>\n { yyLineNr++; BEGIN(Start); } -<GetStrList>\n { - yyLineNr++; - if (!elemStr.isEmpty()) - { - //printf("elemStr1=`%s'\n",elemStr.data()); - l->append(elemStr); - } - BEGIN(Start); - } -<GetStrList>[ \t]+ { - if (!elemStr.isEmpty()) - { - //printf("elemStr2=`%s'\n",elemStr.data()); - l->append(elemStr); - } - elemStr.resize(0); - } -<GetString>[^ \"\t\r\n]+ { (*s)+=yytext; } -<GetString,GetStrList>"\"" { lastState=YY_START; - BEGIN(GetQuotedString); - tmpString.resize(0); - } -<GetQuotedString>"\""|"\n" { - //printf("Quoted String = `%s'\n",tmpString.data()); - if (lastState==GetString) - (*s)+=tmpString; - else - elemStr+=tmpString; - if (*yytext=='\n') - { - err("Warning: Missing end quote (\") on line %d, file %s\n",yyLineNr,yyFileName.data()); - yyLineNr++; - } - BEGIN(lastState); - } -<GetQuotedString>"\\\"" { - tmpString+='"'; - } -<GetQuotedString>. { tmpString+=*yytext; } -<GetBool>[a-zA-Z]+ { - QCString bs=yytext; - bs=bs.upper(); - if (bs=="YES") - *b=TRUE; - else if (bs=="NO") - *b=FALSE; - else - { - *b=FALSE; - warn_cont("Warning: Invalid value `%s' for " - "boolean tag in line %d, file %s; use YES or NO\n", - bs.data(),yyLineNr,yyFileName.data()); - } - } -<GetStrList>[^ \#\"\t\r\n]+ { - elemStr+=yytext; - } -<SkipComment>\n { yyLineNr++; BEGIN(Start); } -<SkipComment>\\[ \r\t]*\n { yyLineNr++; BEGIN(Start); } -<*>\\[ \r\t]*\n { yyLineNr++; } -<*>. -<*>\n { yyLineNr++ ; } - -%% - -/*@ ---------------------------------------------------------------------------- - */ - - -void dumpConfig() -{ -#CONFIG Dump -} - -void Config::init() -{ -#CONFIG Init -} - -static void writeBoolValue(QTextStream &t,bool v) -{ - if (v) t << "YES"; else t << "NO"; -} - -static void writeIntValue(QTextStream &t,int i) -{ - t << i; -} - -static void writeStringValue(QTextStream &t,QCString &s) -{ - const char *p=s.data(); - char c; - bool hasBlanks=FALSE; - if (p) - { - while ((c=*p++)!=0 && !hasBlanks) hasBlanks = (c==' ' || c=='\n' || c=='\t'); - if (hasBlanks) - t << "\"" << s << "\""; - else - t << s; - } -} - -static void writeStringList(QTextStream &t,QStrList &l) -{ - const char *p = l.first(); - bool first=TRUE; - while (p) - { - char c; - const char *s=p; - bool hasBlanks=FALSE; - while ((c=*p++)!=0 && !hasBlanks) hasBlanks = (c==' ' || c=='\n' || c=='\t'); - if (!first) t << " "; - first=FALSE; - if (hasBlanks) t << "\"" << s << "\""; else t << s; - p = l.next(); - if (p) t << " \\" << endl; - } -} - -void writeTemplateConfig(QFile *f,bool sl) -{ - QTextStream t(f); -#ifdef DOXYWIZARD - t << "# Doxygen configuration generated by Doxywizard version " << versionString << endl; -#else - t << "# Doxyfile " << versionString << endl << endl; -#endif - if (!sl) - { - t << "# This file describes the settings to be used by doxygen for a project\n"; - t << "#\n"; - t << "# All text after a hash (#) is considered a comment and will be ignored\n"; - t << "# The format is:\n"; - t << "# TAG = value [value, ...]\n"; - t << "# For lists items can also be appended using:\n"; - t << "# TAG += value [value, ...]\n"; - t << "# Values that contain spaces should be placed between quotes (\" \")\n"; - } -#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_cont("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_cont("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; - } - - if (enumValuesPerLineString.isEmpty()) - { - Config::enumValuesPerLine=4; - } - else - { - bool ok; - int cols = enumValuesPerLineString.toInt(&ok); - if (!ok || cols<1 || cols>20) - { - warn_cont("Warning: argument of ENUM_VALUES_PER_LINE is not a valid number in the range [1..20]!\n" - "Using the default of 4!\n"); - cols = 4; - } - Config::enumValuesPerLine=cols; - } - - if (treeViewWidthString.isEmpty()) - { - Config::treeViewWidth=250; - } - else - { - bool ok; - int width = treeViewWidthString.toInt(&ok); - if (!ok || width<0 || width>1500) - { - warn_cont("Warning: argument of TREEVIEW_WIDTH is not a valid number in the range [0..1500]!\n" - "Using the default of 250!\n"); - width = 250; - } - Config::treeViewWidth=width; - } - - if (maxDotGraphWidthString.isEmpty()) - { - Config::maxDotGraphWidth=1024; - } - else - { - bool ok; - int width =maxDotGraphWidthString.toInt(&ok); - if (!ok) - { - warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [100..30000]!\n" - "Using the default of 1024 pixels!\n"); - width=1024; - } - else if (width<100) // clip to lower bound - { - width=100; - } - else if (width>30000) // clip to upper bound - { - width=30000; - } - Config::maxDotGraphWidth=width; - } - - if (maxDotGraphHeightString.isEmpty()) - { - Config::maxDotGraphHeight=1024; - } - else - { - bool ok; - int height =maxDotGraphHeightString.toInt(&ok); - if (!ok) - { - warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [100..30000]!\n" - "Using the default of 1024 pixels!\n"); - height=1024; - } - else if (height<100) // clip to lower bound - { - height=100; - } - else if (height>30000) // clip to upper bound - { - height=30000; - } - Config::maxDotGraphHeight=height; - } - - if (maxInitLinesString.isEmpty()) - { - Config::maxInitLines=30; - } - else - { - bool ok; - int maxLines =maxInitLinesString.toInt(&ok); - if (!ok) - { - warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [100..30000]!\n" - "Using the default of 1024 pixels!\n"); - maxLines=30; - } - else if (maxLines<0) // clip to lower bound - { - maxLines=0; - } - else if (maxLines>10000) // clip to upper bound - { - maxLines=10000; - } - Config::maxInitLines=maxLines; - } -} - -static void substEnvVarsInString(QCString &s) -{ - static QRegExp re("\\$\\([a-z_A-Z0-9]+\\)"); - if (s.isEmpty()) return; - 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+env.length(); // next time start at the end of the expanded string - } - //printf("substEnvVarInString(%s) end\n",s.data()); -} - -static void substEnvVarsInStrList(QStrList &sl) -{ - char *s = sl.first(); - while (s) - { - QCString result(s); - bool wasQuoted = (result.find(' ')!=-1) || (result.find('\t')!=-1); - substEnvVarsInString(result); - - if (!wasQuoted) /* as a result of the expansion, a single string - may have expanded into a list, which we'll - add to sl. If the orginal string already - contained multiple elements no further - splitting is done to allow quoted items with spaces! */ - { - - - - int l=result.length(); - int i,p=0; - // skip spaces - // search for a "word" - for (i=0;i<l;i++) - { - char c; - // skip until start of new word - while (i<l && ((c=result.at(i))==' ' || c=='\t')) i++; - p=i; // p marks the start index of the word - // skip until end of a word - while (i<l && ((c=result.at(i))!=' ' && c!='\t' && c!='"')) i++; - if (i<l) // not at the end of the string - { - if (c=='"') // word within quotes - { - p=i+1; - for (i++;i<l;i++) - { - c=result.at(i); - if (c=='"') // end quote - { - // replace the string in the list and go to the next item. - sl.insert(sl.at(),result.mid(p,i-p)); // insert new item before current item. - sl.next(); // current item is now the old item - p=i+1; - break; - } - else if (c=='\\') // skip escaped stuff - { - i++; - } - } - } - else if (c==' ' || c=='\t') // separator - { - // replace the string in the list and go to the next item. - sl.insert(sl.at(),result.mid(p,i-p)); // insert new item before current item. - sl.next(); // current item is now the old item - p=i+1; - } - } - } - if (p!=l) // add the leftover as a string - { - // replace the string in the list and go to the next item. - sl.insert(sl.at(),result.right(l-p)); // insert new item before current item. - sl.next(); // current item is now the old item - } - - // remove the old unexpanded string from the list - i=sl.at(); - sl.remove(); // current item index changes if the last element is removed. - if (sl.at()==i) // not last item - s = sl.current(); - else // just removed last item - s = 0; - } - else // just goto the next element in the list - { - s=sl.next(); - } - } -} - - -void substituteEnvironmentVars() -{ -#CONFIG Substenv -} - -void checkConfig() -{ - //if (!projectName.isEmpty()) - //{ - // projectName[0]=toupper(projectName[0]); - //} - - if (Config::warnFormat.isEmpty()) - { - Config::warnFormat="$file:$line $text"; - } - else - { - if (Config::warnFormat.find("$file")==-1) - { - err("Error: warning format does not contain a $file tag!\n"); - exit(1); - } - if (Config::warnFormat.find("$line")==-1) - { - err("Error: warning format does not contain a $line tag!\n"); - exit(1); - } - if (Config::warnFormat.find("$text")==-1) - { - err("Error: wanring format foes not contain a $text tag!\n"); - exit(1); - } - } - initWarningFormat(); - - // set default man page extension if non is given by the user - if (Config::manExtension.isEmpty()) - { - Config::manExtension=".3"; - } - - Config::paperType = Config::paperType.lower().stripWhiteSpace(); - if (Config::paperType.isEmpty()) - { - Config::paperType = "a4wide"; - } - if (Config::paperType!="a4" && Config::paperType!="a4wide" && Config::paperType!="letter" && - Config::paperType!="legal" && Config::paperType!="executive") - { - err("Error: Unknown page type specified"); - } - - Config::outputLanguage=Config::outputLanguage.stripWhiteSpace(); - if (Config::outputLanguage.isEmpty()) - { - Config::outputLanguage = "English"; -#ifndef DOXYWIZARD - setTranslator("English"); -#endif - } - else - { -#ifndef DOXYWIZARD - if (!setTranslator(Config::outputLanguage)) - { - err("Error: Output language %s not supported! Using English instead.\n", - Config::outputLanguage.data()); - } -#endif - } - - // expand the relative stripFromPath values - char *sfp = Config::stripFromPath.first(); - while (sfp) - { - QCString path = sfp; - if (path.at(0)!='/' && (path.length()<=2 || path.at(1)!=':')) - { - QFileInfo fi(path); - if (fi.exists() && fi.isDir()) - { - int i = Config::stripFromPath.at(); - Config::stripFromPath.remove(); - if (Config::stripFromPath.at()==i) // did not remove last item - Config::stripFromPath.insert(i,fi.absFilePath()+"/"); - else - Config::stripFromPath.append(fi.absFilePath()+"/"); - } - } - sfp = Config::stripFromPath.next(); - } - - - // Test to see if HTML header is valid - if (!Config::headerFile.isEmpty()) - { - QFileInfo fi(Config::headerFile); - if (!fi.exists()) - { - err("Error: tag HTML_HEADER: header file `%s' " - "does not exist\n",Config::headerFile.data()); - exit(1); - } - } - // Test to see if HTML footer is valid - if (!Config::footerFile.isEmpty()) - { - QFileInfo fi(Config::footerFile); - if (!fi.exists()) - { - err("Error: tag HTML_FOOTER: footer file `%s' " - "does not exist\n",Config::footerFile.data()); - exit(1); - } - } - // Test to see if LaTeX header is valid - if (!Config::latexHeaderFile.isEmpty()) - { - QFileInfo fi(Config::latexHeaderFile); - if (!fi.exists()) - { - err("Error: tag LATEX_HEADER: header file `%s' " - "does not exist\n",Config::latexHeaderFile.data()); - exit(1); - } - } - // check include path - char *s=Config::includePath.first(); - while (s) - { - QFileInfo fi(s); - if (!fi.exists()) err("Warning: tag INCLUDE_PATH: include path `%s' " - "does not exist\n",s); -#ifndef DOXYWIZARD - addSearchDir(fi.absFilePath()); -#endif - s=Config::includePath.next(); - } - - // check aliases - s=Config::aliasList.first(); - while (s) - { - QRegExp re("[a-z_A-Z][a-z_A-Z0-9]*[ \t]*="); - QCString alias=s; - alias=alias.stripWhiteSpace(); - if (alias.find(re)!=0) - { - err("Illegal alias format `%s'. Use \"name=value\"\n",alias.data()); - } - s=Config::aliasList.next(); - } - - // check dot path - if (!Config::dotPath.isEmpty()) - { - if (Config::dotPath.find('\\')!=-1) - { - if (Config::dotPath.at(Config::dotPath.length()-1)!='\\') - { - Config::dotPath+='\\'; - } - } - else if (Config::dotPath.find('/')!=-1) - { - if (Config::dotPath.at(Config::dotPath.length()-1)!='/') - { - Config::dotPath+='/'; - } - } -#if defined(_WIN32) - QFileInfo dp(Config::dotPath+"dot.exe"); -#else - QFileInfo dp(Config::dotPath+"dot"); -#endif - if (!dp.exists() || !dp.isFile()) - { - err("Warning: the dot tool could not be found at %s\n",Config::dotPath.data()); - Config::dotPath=""; - } - else - { - Config::dotPath=dp.dirPath(TRUE)+"/"; -#if defined(_WIN32) // convert slashes - uint i=0,l=Config::dotPath.length(); - for (i=0;i<l;i++) if (Config::dotPath.at(i)=='/') Config::dotPath.at(i)='\\'; -#endif - } - } - else // make sure the string is empty but not null! - { - Config::dotPath=""; - } - - // check input - if (Config::inputSources.count()==0) - { - err("Error: tag INPUT: no input files specified after the INPUT tag.\n"); - exit(1); - } - else - { - s=Config::inputSources.first(); - while (s) - { - QFileInfo fi(s); - if (!fi.exists()) - { - err("Error: tag INPUT: input source `%s' does not exist\n",s); - exit(1); - } - s=Config::inputSources.next(); - } - } - - // add default pattern if needed - if (Config::filePatternList.isEmpty()) - { - Config::filePatternList.append("*"); - } - - // add default pattern if needed - if (Config::examplePatternList.isEmpty()) - { - Config::examplePatternList.append("*"); - } - - // add default pattern if needed - //if (Config::imagePatternList.isEmpty()) - //{ - // Config::imagePatternList.append("*"); - //} - - // more checks needed if and only if the search engine is enabled. - if (Config::searchEngineFlag) - { - // check cgi name - if (Config::cgiName.isEmpty()) - { - err("Error: tag CGI_NAME: no cgi script name after the CGI_NAME tag.\n"); - exit(1); - } - // check cgi URL - if (Config::cgiURL.isEmpty()) - { - err("Error: tag CGI_URL: no URL to cgi directory specified.\n"); - exit(1); - } - else if (Config::cgiURL.left(7)!="http://" && - Config::cgiURL.left(8)!="https://" - ) - { - err("Error: tag CGI_URL: URL to cgi directory is invalid (must " - "start with http:// or https://).\n"); - exit(1); - } - // check documentation URL - if (Config::docURL.isEmpty()) - { - Config::docURL = Config::outputDir.copy().prepend("file://").append("html"); - } - else if (Config::docURL.left(7)!="http://" && - Config::docURL.left(8)!="https://" && - Config::docURL.left(7)!="file://" - ) - { - err("Error: tag DOC_URL: URL to documentation is invalid or " - "not absolute.\n"); - exit(1); - } - // check absolute documentation path - if (Config::docAbsPath.isEmpty()) - { - Config::docAbsPath = Config::outputDir+"/html"; - } - else if (Config::docAbsPath[0]!='/' && Config::docAbsPath[1]!=':') - { - err("Error: tag DOC_ABSPATH: path is not absolute!\n"); - exit(1); - } - // check path to doxysearch - if (Config::binAbsPath.isEmpty()) - { - err("Error: tag BIN_ABSPATH: no absolute path to doxysearch " - "specified.\n"); - exit(1); - } - else if (Config::binAbsPath[0]!='/' && Config::binAbsPath[1]!=':') - { - err("Error: tag BIN_ABSPATH: path is not absolute!\n"); - exit(1); - } - - // check perl path - bool found=FALSE; - if (Config::perlPath.isEmpty()) - { - QFileInfo fi; - fi.setFile("/usr/bin/perl"); - if (fi.exists()) - { - Config::perlPath="/usr/bin/perl"; - found=TRUE; - } - else - { - fi.setFile("/usr/local/bin/perl"); - if (fi.exists()) - { - Config::perlPath="/usr/local/bin/perl"; - found=TRUE; - } - } - } - if (!found) - { - QFileInfo fi(Config::perlPath); - if (!fi.exists()) - { - warn_cont("Warning: tag PERL_PATH: perl interpreter not found at default or" - "user specified (%s) location\n", - Config::perlPath.data()); - } - } - } - -#undef PUTENV -#if defined(_WIN32) && !defined(__GNUC__) -#define PUTENV _putenv -#else -#define PUTENV putenv -#endif - if (Config::haveDotFlag) PUTENV("DOTFONTPATH=."); - -} - -void parseConfig(const QCString &s,const char *fn) -{ - inputString = s; - inputPosition = 0; - yyLineNr = 1; - yyFileName=fn; - includeStack.setAutoDelete(TRUE); - includeStack.clear(); - includeDepth = 0; - configYYrestart( configYYin ); - BEGIN( Start ); - configYYlex(); -} - -//extern "C" { // some bogus code to keep the compiler happy -// int configYYwrap() { return 1 ; } -//} diff --git a/addon/configgen/configgen.cpp b/addon/configgen/configgen.cpp deleted file mode 100644 index db2c42f..0000000 --- a/addon/configgen/configgen.cpp +++ /dev/null @@ -1,1887 +0,0 @@ -/****************************************************************************** - * - * - * - * 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 <qstrlist.h> -#include <qdatetime.h> - -#include <stdio.h> -#include <stdlib.h> - -#define MAX_OPTION_LENGTH 23 - -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; - t << spaces.left(MAX_OPTION_LENGTH-cfgName.length()); - t << "= \";" << 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) - { - // rule for assignment - t << "<Start>\"" << cfgName << "\"[ \\t]*\"=\""; - t << spaces.left(MAX_OPTION_LENGTH-cfgName.length()); - t << "{ BEGIN(GetStrList); l=&Config::" << varName; - t << "; l->clear(); elemStr=\"\"; }" << endl; - - // rule for appending - t << "<Start>\"" << cfgName << "\"[ \\t]*\"+=\""; - t << spaces.left(MAX_OPTION_LENGTH-cfgName.length()-1); - t << "{ BEGIN(GetStrList); l=&Config::" << varName; - t << "; elemStr=\"\"; }" << endl; - } - virtual void printInit(QTextStream &t) - { - 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(MAX_OPTION_LENGTH-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) - { - char *s = m_values.first(); - while (s) - { - t << " " << varName << "->addValue(\"" << s << "\");" << endl; - s = m_values.next(); - } - } - } - 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; - QStrList 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(MAX_OPTION_LENGTH-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(MAX_OPTION_LENGTH-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); - - t << "/* This file was generated by configgen on " - << QDateTime::currentDateTime().toString() - << "\n * from " << argv[1] << "\n *\n * DO NOT EDIT!\n */\n\n"; - - // process template file - while (!ctfile.atEnd()) - { - int l = ctfile.readLine(buf,maxLineLen-1); - if (l>1 && buf[l-2]=='\r') // remove the \r for the folks using Windows - { - buf[l-2]='\n'; - buf[l-1]='\r'; - } - 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" - "Korean, Hungarian, Norwegian, Spanish, Romanian, Russian, Croatian, \n" - "Polish, Portuguese and Slovene.\n" - ); - ConfigString::addFixedValue("outputLanguage","Croatian"); - ConfigString::addFixedValue("outputLanguage","Czech"); - ConfigString::addFixedValue("outputLanguage","Dutch"); - ConfigString::addFixedValue("outputLanguage","English"); - ConfigString::addFixedValue("outputLanguage","French"); - ConfigString::addFixedValue("outputLanguage","Finnish"); - ConfigString::addFixedValue("outputLanguage","German"); - ConfigString::addFixedValue("outputLanguage","Hungarian"); - ConfigString::addFixedValue("outputLanguage","Italian"); - ConfigString::addFixedValue("outputLanguage","Japanese"); - ConfigString::addFixedValue("outputLanguage","Korean"); - ConfigString::addFixedValue("outputLanguage","Norwegian"); - ConfigString::addFixedValue("outputLanguage","Romanian"); - ConfigString::addFixedValue("outputLanguage","Russian"); - ConfigString::addFixedValue("outputLanguage","Polish"); - ConfigString::addFixedValue("outputLanguage","Portuguese"); - ConfigString::addFixedValue("outputLanguage","Slovene"); - ConfigString::addFixedValue("outputLanguage","Spanish"); - ConfigString::addFixedValue("outputLanguage","Swedish"); - ConfigBool::add( "extractAllFlag", - "EXTRACT_ALL", - "FALSE", - "generate docs for all classes flag", - "If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \n" - "documentation are documented, even if no documentation was available. \n" - "Private class members and static file members will be hidden unless \n" - "the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES \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( "extractStaticFlag", - "EXTRACT_STATIC", - "FALSE", - "generate docs for static members flag", - "If the EXTRACT_STATIC tag is set to YES all static members of a file \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 of documented classes, files or namespaces. \n" - "If set to NO (the default) these members will be included in the \n" - "various overviews, but no documentation section is generated. \n" - "This option has no effect if EXTRACT_ALL is enabled. \n" - ); - ConfigBool::add( "hideClassFlag", - "HIDE_UNDOC_CLASSES", - "FALSE", - "hide undocumented members.", - "If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \n" - "undocumented classes that are normally visible in the class hierarchy. \n" - "If set to NO (the default) these class will be included in the various \n" - "overviews. This option has no effect if EXTRACT_ALL is enabled. \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. It is allowed to use relative paths in the argument list.\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", - "TRUE", - "determines if output can be mixed case.", - "If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \n" - "file names in lower case letters. If set to YES upper case letters are also \n" - "allowed. This is useful if you have classes or files whose names only differ \n" - "in case and if your file system supports case sensitive file names. Windows \n" - "users are adviced to set this option to NO.\n" - ); - ConfigBool::add( "hideScopeNames", - "HIDE_SCOPE_NAMES", - "FALSE", - "hide the name of the scope.", - "If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \n" - "will show members with their full class and namespace scopes in the \n" - "documentation. If set to YES the scope will be hidden. \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", - "FALSE", - "should javadoc comments behaves as Qt comments.", - "If the JAVADOC_AUTOBRIEF tag is set to YES 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 \n" - "comments will behave just like the Qt-style comments (thus requiring an \n" - "explict @brief command for a brief description. \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" - ); - ConfigBool::add( "distributeDocFlag", - "DISTRIBUTE_GROUP_DOC", - "FALSE", - "distribute docs over member group?", - "If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \n" - "tag is set to YES, then doxygen will reuse the documentation of the first \n" - "member in the group (if any) for the other members of the group. By default \n" - "all members of a group must be documented explicitly.\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" - ); - ConfigBool::add( "generateTodoList", - "GENERATE_TODOLIST", - "TRUE", - "do we want a todo list?", - "The GENERATE_TODOLIST tag can be used to enable (YES) or \n" - "disable (NO) the todo list. This list is created by putting \\todo \n" - "commands in the documentation.\n" - ); - ConfigBool::add( "generateTestList", - "GENERATE_TESTLIST", - "TRUE", - "do we want a test list?", - "The GENERATE_TESTLIST tag can be used to enable (YES) or \n" - "disable (NO) the test list. This list is created by putting \\test \n" - "commands in the documentation.\n" - ); - ConfigBool::add( "generateBugList", - "GENERATE_BUGLIST", - "TRUE", - "do we want a bug list?", - "The GENERATE_BUGLIST tag can be used to enable (YES) or \n" - "disable (NO) the bug list. This list is created by putting \\bug \n" - "commands in the documentation.\n" - ); - ConfigList::add( "aliasList", - "ALIASES", - "", - "list of aliases", - "This tag can be used to specify a number of aliases that acts \n" - "as commands in the documentation. An alias has the form \"name=value\". \n" - "For example adding \"sideeffect=\\par Side Effects:\\n\" will allow you to \n" - "put the command \\sideeffect (or @sideeffect) in the documentation, which \n" - "will result in a user defined paragraph with heading \"Side Effects:\". \n" - "You can put \\n's in the value part of an alias to insert newlines. \n" - ); - ConfigInt::add( "maxInitLines", - "MAX_INITIALIZER_LINES", - "30", - "when do we hide values of variable and defines?", - "The MAX_INITIALIZER_LINES tag determines the maximum number of lines \n" - "the initial value of a variable or define consist of for it to appear in \n" - "the documentation. If the initializer consists of more lines than specified \n" - "here it will be hidden. Use a value of 0 to hide initializers completely. \n" - "The appearance of the initializer of individual variables and defines in the \n" - "documentation can be controlled using \\showinitializer or \\hideinitializer \n" - "command in the documentation regardless of this setting. \n", - 0,10000 - ); - ConfigBool::add( "optimizeForCFlag", - "OPTIMIZE_OUTPUT_FOR_C", - "FALSE", - "do we parse C code?", - "Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources \n" - "only. Doxygen will then generate output that is more tailored for C. \n" - "For instance some of the names that are used will be different. The list \n" - "of all members will be omitted, etc. \n" - ); - ConfigBool::add( "showUsedFilesFlag", - "SHOW_USED_FILES", - "TRUE", - "do we show the list of used files for classes and structs?", - "Set the SHOW_USED_FILES tag to NO to disable the list of files generated \n" - "at the bottom of the documentation of classes and structs. If set to YES the \n" - "list will mention the files that were used to generate the documentation. \n" - ); - //----------------------------------------------------------------------------------------------- - ConfigInfo::add( "Messages","configuration options related to warning and progress messages"); - //----------------------------------------------------------------------------------------------- - 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( "warningUndocFlag", - "WARN_IF_UNDOCUMENTED", - "TRUE", - "generate undocumented warnings", - "If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \n" - "for undocumented members. If EXTRACT_ALL is set to YES then this flag will \n" - "automatically be disabled. \n" - ); - ConfigString::add("warnFormat", - "WARN_FORMAT", - "$file:$line: $text", - "format of the warning messages", - "The WARN_FORMAT tag determines the format of the warning messages that \n" - "doxygen can produce. The string should contain the $file, $line, and $text \n" - "tags, which will be replaced by the file and line number from which the \n" - "warning originated and the warning text. \n" - ); - ConfigString::add("warnLogFile", - "WARN_LOGFILE", - "", - "log file to write warning to", - "The WARN_LOGFILE tag can be used to specify a file to which warning \n" - "and error messages should be written. If left blank the output is written \n" - "to stderr. \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 - ); - ConfigBool::add( "filterForSourceFlag", - "FILTER_SOURCE_FILES", - "FALSE", - "do we filter source files?", - "If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \n" - "INPUT_FILTER) will be used to filter the input files when producing source \n" - "files to browse. \n" - ); - - //----------------------------------------------------------------------------------------------- - 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"); - ConfigBool::add( "htmlHelpChiFlag", - "GENERATE_CHI", - "FALSE", - "should chi file be generated?", - "If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \n" - "controls if a separate .chi index file is generated (YES) or that \n" - "it should be included in the master .chm file (NO).\n" - ); - addDependency("htmlHelpChiFlag","generateHtml"); - ConfigBool::add( "htmlHelpTocFlag", - "BINARY_TOC", - "FALSE", - "should a binary table of contents be generated?", - "If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \n" - "controls whether a binary table of contents is generated (YES) or a \n" - "normal table of contents (NO) in the .chm file.\n" - ); - addDependency("htmlHelpTocFlag","generateHtml"); - ConfigBool::add( "htmlHelpTocExpandFlag", - "TOC_EXPAND", - "FALSE", - "should module elements be displayed in the table of contents?", - "The TOC_EXPAND flag can be set YES to add extra items for group members \n" - "to the contents of the Html help documentation and to the tree view. \n" - ); - addDependency("htmlHelpTocExpandFlag","generateHtml"); - 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" - ); - addDependency("noIndexFlag","generateHtml"); - ConfigInt::add( "enumValuesPerLine", - "ENUM_VALUES_PER_LINE", - "4", - "number of enum values that are put on one line", - "This tag can be used to set the number of enum values (range [1..20]) \n" - "that doxygen will group on one line in the generated HTML documentation. \n", - 1,20 - ); - addDependency("enumValuesPerLine","generateHtml"); - ConfigBool::add( "ftvHelpFlag", - "GENERATE_TREEVIEW", - "FALSE", - "should a folder tree view be generated?", - "If the GENERATE_TREEVIEW tag is set to YES, a side panel will be\n" - "generated containing a tree-like index structure (just like the one that \n" - "is generated for HTML Help). For this to work a browser that supports \n" - "JavaScript and frames is required (for instance Netscape 4.0+ \n" - "or Internet explorer 4.0+). " - ); - addDependency("ftvHelpFlag","generateHtml"); - ConfigInt::add( "treeViewWidth", - "TREEVIEW_WIDTH", - "250", - "What is the width of the treeview panel?", - "If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \n" - "used to set the initial width (in pixels) of the frame in which the tree \n" - "is shown. \n", - 0,1500 - ); - addDependency("treeViewWidth","generateHtml"); - -// TODO: integrate this option -// ConfigBool::add( "htmlHelpGroupsOnly", -// "HTMLHELP_GROUPS_ONLY", -// "FALSE", -// "should \\ingroup's be used to create HTML Help hierarchy?", -// "If the HTMLHELP_GROUPS_ONLY tag is set to YES, documented objects are \n" -// "displayed in the HTML Help tree if and only if they are \n" -// "placed in a user-defined group using the \\ingroup markup. \n" -// "Use \\defgroup to define a group before adding objects to a group. \n" -// "Also affects FTV Help (see GENERATE_FTVHELP tag). \n" -// ); -// addDependency("htmlHelpGroupsOnly","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( "usePDFLatexFlag", - "USE_PDFLATEX", - "FALSE", - "use pdflatex instead of plain latex", - "If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \n" - "plain latex in the generated Makefile. Set this option to YES to get a \n" - "higher quality PDF documentation. \n" - ); - addDependency("usePDFLatexFlag","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", - "TRUE", - "generate RTF flag", - "If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \n" - "The RTF output is optimised for Word 97 and may not look very pretty with \n" - "other RTF readers 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"); - ConfigString::add("rtfStylesheetFile", - "RTF_STYLESHEET_FILE", - "", - "file to load stylesheet definitions from", - "Load stylesheet definitions from file. Syntax is similar to doxygen's \n" - "config file, i.e. a series of assigments. You only have to provide \n" - "replacements, missing definitions are set to their default value. \n", - ConfigString::File - ); - addDependency("rtfStylesheetFile","generateRTF"); - ConfigString::add("rtfExtensionsFile", - "RTF_EXTENSIONS_FILE", - "", - "file to load rtf extensions from", - "Set optional variables used in the generation of an rtf document. \n" - "Syntax is similar to doxygen's config file.\n", - ConfigString::File - ); - addDependency("rtfExtensionsFile","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( "XML","configuration options related to the XML output"); - //----------------------------------------------------------------------------------------------- - //ConfigBool::add( "generateXML", - // "GENERATE_XML", - // "FALSE", - // "generate XML output", - // "If the GENERATE_XML tag is set to YES Doxygen will \n" - // "generate an XML file that captures the structure of \n" - // "the code including all documentation. Warning: This feature \n" - // "is still experimental and very incomplete.\n" - // ); - //----------------------------------------------------------------------------------------------- - 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. Macro expansion can be done in a controlled \n" - "way by setting EXPAND_ONLY_PREDEF to YES. \n" - ); - addDependency("macroExpansionFlag","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 and EXPAND_AS_PREDEFINED tags. \n" - ); - addDependency("onlyPredefinedFlag","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( "includeFilePatternList", - "INCLUDE_FILE_PATTERNS", - "", - "list of include file patterns", - "You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \n" - "patterns (like *.h and *.hpp) to filter out the header-files in the \n" - "directories. If left blank, the patterns specified with FILE_PATTERNS will \n" - "be used. \n" - ); - addDependency("includeFilePatternList","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"); - ConfigList::add( "expandAsDefinedList", - "EXPAND_AS_DEFINED", - "", - "list of defines to expand", - "If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then \n" - "this tag can be used to specify a list of macro names that should be expanded. \n" - "The macro definition that is found in the sources will be used. \n" - "Use the PREDEFINED tag if you want to use a different macro definition. \n" - ); - //----------------------------------------------------------------------------------------------- - 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( "classGraphFlag", - "CLASS_GRAPH", - "TRUE", - "class graph", - "If the CLASS_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 inheritance relations. Setting this tag to YES will force the \n" - "the CLASS_DIAGRAMS tag to NO.\n" - ); - addDependency("classGraphFlag","haveDotFlag"); - 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( "includedByGraphFlag", - "INCLUDED_BY_GRAPH", - "TRUE", - "depends on include graph", - "If the ENABLE_PREPROCESSING, INCLUDED_BY_GRAPH, and HAVE_DOT tags are set to \n" - "YES then doxygen will generate a graph for each documented header file showing \n" - "the documented files that directly or indirectly include this file \n" - ); - addDependency("includedByGraphFlag","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"); - ConfigString::add("dotPath", - "DOT_PATH", - "", - "path to the dot tool", - "The tag DOT_PATH can be used to specify the path where the dot tool can be \n" - "found. If left blank, it is assumed the dot tool can be found on the path. \n", - ConfigString::Dir - ); - addDependency("dotPath","haveDotFlag"); - ConfigInt::add( "maxDotGraphWidth", - "MAX_DOT_GRAPH_WIDTH", - "1024", - "max dot graph width", - "The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width \n" - "(in pixels) of the graphs generated by dot. If a graph becomes larger than \n" - "this value, doxygen will try to truncate the graph, so that it fits within \n" - "the specified constraint. Beware that most browsers cannot cope with very \n" - "large images. \n", - 100,30000 - ); - addDependency("maxDotGraphWidth","haveDotFlag"); - ConfigInt::add( "maxDotGraphHeight", - "MAX_DOT_GRAPH_HEIGHT", - "1024", - "max dot graph height", - "The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height \n" - "(in pixels) of the graphs generated by dot. If a graph becomes larger than \n" - "this value, doxygen will try to truncate the graph, so that it fits within \n" - "the specified constraint. Beware that most browsers cannot cope with very \n" - "large images. \n", - 100,30000 - ); - addDependency("maxDotGraphHeight","haveDotFlag"); - ConfigBool::add( "generateLegend", - "GENERATE_LEGEND", - "TRUE", - "generate legend page", - "If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \n" - "generate a legend page explaining the meaning of the various boxes and \n" - "arrows in the dot generated graphs. \n" - ); - addDependency("generateLegend","haveDotFlag"); - ConfigBool::add( "dotCleanUp", - "DOT_CLEANUP", - "TRUE", - "remove intermedia dot files?", - "If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \n" - "remove the intermedate dot files that are used to generate \n" - "the various graphs. \n" - ); - addDependency("dotCleanUp","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. -} diff --git a/addon/configgen/configgen.pro.in b/addon/configgen/configgen.pro.in deleted file mode 100644 index 12ddf92..0000000 --- a/addon/configgen/configgen.pro.in +++ /dev/null @@ -1,20 +0,0 @@ -# -# -# -# Copyright (C) 1997-2001 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/doxywizard/Makefile.in b/addon/doxywizard/Makefile.in index 249190a..65995b5 100644 --- a/addon/doxywizard/Makefile.in +++ b/addon/doxywizard/Makefile.in @@ -1,5 +1,5 @@ # -# +# $Id$ # # Copyright (C) 1997-2001 by Dimitri van Heesch. # @@ -10,30 +10,17 @@ # 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 +all: config.l config.h Makefile.doxywizard $(MAKE) -f Makefile.doxywizard $@ -Makefile.doxywizard: doxywizard.pro doxywizard.t - $(ENV) $(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.l: + $(CP) ../../src/config.l config.l -config.h: $(CFGGENBIN_DIR)/configgen $(CFGGENSRC_DIR)/config_templ.h - $(CFGGENBIN_DIR)/configgen $(CFGGENSRC_DIR)/config_templ.h >config.h +config.h: + $(CP) ../../src/config.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) +Makefile.doxywizard: doxywizard.pro + $(ENV) $(PERL) $(TMAKE) doxywizard.pro >Makefile.doxywizard tmake: $(ENV) $(PERL) $(TMAKE) doxywizard.pro >Makefile.doxywizard @@ -42,8 +29,7 @@ clean: Makefile.doxywizard $(MAKE) -f Makefile.doxywizard clean distclean: clean - $(RM) doxywizard.cpp doxywizard.h \ - config.l config.h config.cpp Makefile.doxywizard + $(RM) Makefile.doxywizard config.l config.h config.cpp install: $(INSTTOOL) -d $(INSTALL)/bin diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp new file mode 100644 index 0000000..8ceecbb --- /dev/null +++ b/addon/doxywizard/doxywizard.cpp @@ -0,0 +1,540 @@ +/****************************************************************************** + * + * $Id$ + * + * Copyright (C) 1997-2001 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + */ + +#include <stdio.h> +#include <stdlib.h> +#include <qmainwindow.h> +#include <qpopupmenu.h> +#include <qfileinfo.h> +#include <qmenubar.h> +#include <qstatusbar.h> +#include <qfiledialog.h> +#include <qmessagebox.h> +#include <qapplication.h> +#include <qwhatsthis.h> +#include <qlayout.h> +#include <qtabwidget.h> +#include <qtoolbar.h> +#include <qtoolbutton.h> + +#include "doxywizard.h" +#include "pagewidget.h" +#include "inputbool.h" +#include "inputstring.h" +#include "inputstrlist.h" +#include "inputint.h" +#include "config.h" +#include "version.h" +#include "pixmaps.h" + +QString configFileName; + +const int messageTimeout = 4000; //!< status bar message timeout in millisec. + +//------------------------------------------------------------------------- + +static bool loadConfig( QString loadFile ) +{ + QFileInfo fi( loadFile ); + if ( !fi.exists() ) + { + QMessageBox::warning(0, + "Warning","Input file "+loadFile+ + " does not exist! Starting new file.", + "ok" + ); + return FALSE; + } + QFile f( loadFile ); + if ( !f.open(IO_ReadOnly) ) + { + QMessageBox::warning(0, + "Warning","Cannot open input "+loadFile+ + " for reading!.", + "abort" + ); + exit(1); + } + + // set config values to their defaults + Config::instance()->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 + Config::instance()->parse(contents,loadFile); + Config::instance()->convertStrToVal(); + + 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 + } + + Config::instance()->writeTemplate(&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" ); + + //Micha: QToolButton * = + new QToolButton( QPixmap( rundoxygen_xpm ), "Save and Run doxygen", QString::null, + this, SLOT(runDoxygen()), fileTools, "save and run doxygen" ); + + + 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( QIconSet(QPixmap(rundoxygen_xpm)), + "&Run", this, SLOT(runDoxygen()), CTRL+Key_R ); + doxygen->setWhatsThis ( itemIndex, "Run doxygen with the current configuration file..." ); + + // 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::instance()->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 ); +} + +//Micha +// TODO: Use QProcess to show the output in a window +void Wizard::runDoxygen() +{ + saveFile(); + QString s = "doxygen " + configFileName; + system((const char*)s); + statusBar()->message("doxygen completed: "+ configFileName, messageTimeout ); + hasChanged = FALSE; + refreshCaption(); +} + + +void Wizard::quit() +{ + if (hasChanged) + { + switch( QMessageBox::warning( this, "DoxyWizard", "Quit and lose changes?\n", + "Yes", "No", 0, 0, 1 )) + { + case 0: + qApp->quit(); + break; + case 1: + break; + } + } + else + { + qApp->quit(); + } +} + +void Wizard::changed() +{ + hasChanged = TRUE; + refreshCaption(); +} + +void Wizard::refreshCaption() +{ + QString s; + if (hasChanged) s=" *"; + setCaption("Doxywizard - ["+configFileName+s+"]"); +} + +void Wizard::about() +{ + QMessageBox::about(this, "DoxyWizard", + "<qt><center>A tool to create and edit configuration files " + "that can be read by doxygen.</center><p>" + "<center>Written by Dimitri van Heesch</center><p>" + "<center>(c) 2000</center></qt>" + ); +} + +//---------------------------------------------------------------------- + + +ConfigFile::ConfigFile( QWidget *parent ) : QWidget( parent ) +{ + + m_dependencies = new QDict< QList<IInput> >(257); + m_dependencies->setAutoDelete(TRUE); + m_inputWidgets = new QDict< IInput >; + m_switches = new QDict< QObject >; + + QVBoxLayout *layout = new QVBoxLayout( this ); + + // QTabWidget definition + QTabWidget *tab = new QTabWidget( this ); + layout->addWidget( tab ); + + QListIterator<ConfigOption> options = Config::instance()->iterator(); + PageWidget *page = 0; + ConfigOption *option = 0; + for (options.toFirst();(option=options.current());++options) + { + switch(option->kind()) + { + case ConfigOption::O_Info: + if (page) page->addStretch(1); + page = new PageWidget( tab, option->name() ); + QWhatsThis::add(page, option->docs().simplifyWhiteSpace() ); + break; + case ConfigOption::O_String: + { + ASSERT(page!=0); + InputString::StringMode sm; + switch(((ConfigString *)option)->widgetType()) + { + case ConfigString::String: sm=InputString::StringFree; break; + case ConfigString::File: sm=InputString::StringFile; break; + case ConfigString::Dir: sm=InputString::StringDir; break; + } + InputString *inputString = new InputString( + option->name(), // name + page, // widget + *((ConfigString *)option)->valueRef(), // variable + sm // type + ); + QWhatsThis::add(inputString, option->docs().simplifyWhiteSpace() ); + connect(inputString,SIGNAL(changed()),SIGNAL(changed())); + m_inputWidgets->insert(option->name(),inputString); + addDependency(m_switches,option->dependsOn(),option->name()); + } + break; + case ConfigOption::O_Enum: + { + ASSERT(page!=0); + InputString *inputString = new InputString( + option->name(), // name + page, // widget + *((ConfigEnum *)option)->valueRef(), // variable + InputString::StringFixed // type + ); + QStrListIterator sli=((ConfigEnum *)option)->iterator(); + for (sli.toFirst();sli.current();++sli) + { + inputString->addValue(sli.current()); + } + QWhatsThis::add(inputString, option->docs().simplifyWhiteSpace() ); + connect(inputString,SIGNAL(changed()),SIGNAL(changed())); + m_inputWidgets->insert(option->name(),inputString); + addDependency(m_switches,option->dependsOn(),option->name()); + } + break; + case ConfigOption::O_List: + { + ASSERT(page!=0); + InputStrList::ListMode lm; + switch(((ConfigList *)option)->widgetType()) + { + case ConfigList::String: lm=InputStrList::ListString; break; + case ConfigList::File: lm=InputStrList::ListFile; break; + case ConfigList::Dir: lm=InputStrList::ListDir; break; + case ConfigList::FileAndDir: lm=InputStrList::ListFileDir; break; + } + InputStrList *inputStrList = new InputStrList( + option->name(), // name + page, // widget + *((ConfigList *)option)->valueRef(), // variable + lm // type + ); + QWhatsThis::add(inputStrList, option->docs().simplifyWhiteSpace() ); + connect(inputStrList,SIGNAL(changed()),SIGNAL(changed())); + m_inputWidgets->insert(option->name(),inputStrList); + addDependency(m_switches,option->dependsOn(),option->name()); + } + break; + break; + case ConfigOption::O_Bool: + { + ASSERT(page!=0); + InputBool *inputBool = new InputBool( + option->name(), // name + page, // widget + *((ConfigBool *)option)->valueRef() // variable + ); + QWhatsThis::add(inputBool, option->docs().simplifyWhiteSpace() ); + connect(inputBool,SIGNAL(changed()),SIGNAL(changed())); + m_inputWidgets->insert(option->name(),inputBool); + addDependency(m_switches,option->dependsOn(),option->name()); + } + break; + case ConfigOption::O_Int: + { + ASSERT(page!=0); + InputInt *inputInt = new InputInt( + option->name(), // name + page, // widget + *((ConfigInt *)option)->valueRef(), // variable + ((ConfigInt *)option)->minVal(), // min value + ((ConfigInt *)option)->maxVal() // max value + ); + QWhatsThis::add(inputInt, option->docs().simplifyWhiteSpace() ); + connect(inputInt,SIGNAL(changed()),SIGNAL(changed())); + m_inputWidgets->insert(option->name(),inputInt); + addDependency(m_switches,option->dependsOn(),option->name()); + } + break; + } + } + if (page) page->addStretch(1); + + QDictIterator<QObject> di(*m_switches); + QObject *obj = 0; + for (di.toFirst();(obj=di.current());++di) + { + connect(obj,SIGNAL(toggle(const char *,bool)),SLOT(toggle(const char *,bool))); + // UGLY HACK: assumes each item depends on a boolean without checking! + emit toggle(di.currentKey(),((InputBool *)obj)->getState()); + } + +} + +ConfigFile::~ConfigFile() +{ + delete m_dependencies; + delete m_inputWidgets; + delete m_switches; +} + +void ConfigFile::addDependency(QDict<QObject> *switches, + const QCString &dep,const QCString &name) +{ + if (!dep.isEmpty()) + { + IInput *parent = m_inputWidgets->find(dep); + ASSERT(parent!=0); + IInput *child = m_inputWidgets->find(name); + ASSERT(child!=0); + if (switches->find(dep)==0) + { + switches->insert(dep,parent->qobject()); + } + QList<IInput> *list = m_dependencies->find(dep); + if (list==0) + { + list = new QList<IInput>; + m_dependencies->insert(dep,list); + } + list->append(child); + } +} + +void ConfigFile::toggle(const char *name,bool state) +{ + QList<IInput> *inputs = m_dependencies->find(name); + ASSERT(inputs!=0); + IInput *input = inputs->first(); + while (input) + { + input->setEnabled(state); + input = inputs->next(); + } +} + +void ConfigFile::init() +{ + QDictIterator<IInput> di(*m_inputWidgets); + IInput *input = 0; + for (di.toFirst();(input=di.current());++di) + { + input->init(); + } + QDictIterator<QObject> dio(*m_switches); + QObject *obj = 0; + for (dio.toFirst();(obj=dio.current());++dio) + { + connect(obj,SIGNAL(toggle(const char *,bool)),SLOT(toggle(const char *,bool))); + // UGLY HACK: assumes each item depends on a boolean without checking! + emit toggle(dio.currentKey(),((InputBool *)obj)->getState()); + } + +} + +//---------------------------------------------------------------------- + +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.h b/addon/doxywizard/doxywizard.h new file mode 100644 index 0000000..f78733e --- /dev/null +++ b/addon/doxywizard/doxywizard.h @@ -0,0 +1,111 @@ +/****************************************************************************** + * + * $Id$ + * + * Copyright (C) 1997-2001 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + */ + +#ifndef _DOXWIZARD_H +#define _DOXWIZARD_H + +#include <qmainwindow.h> +#include <qlist.h> +#include <qdict.h> + +class IInput; +class QToolBar; +class QWidget; +class QObject; +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(); + void runDoxygen(); // Micha + + signals: + + private: + void refreshCaption(); + QToolBar *fileTools; + bool hasChanged; + ConfigFile *cw; +}; + +class ConfigWidget +{ + public: + enum Kind { Int, String, StrList, Bool }; + + ConfigWidget(QWidget *w,Kind k) : m_widget(w), m_kind(k) {} + + Kind kind() const { return m_kind; } + + InputString *getString() const + { return m_kind==String ? (InputString *)m_widget : 0; } + + InputBool *getBool() const + { return m_kind==Bool ? (InputBool *)m_widget : 0; } + + InputStrList *getStrList() const + { return m_kind==StrList ? (InputStrList *)m_widget : 0; } + + InputInt *getInt() const + { return m_kind==Int ? (InputInt *)m_widget : 0; } + + private: + QWidget *m_widget; + Kind m_kind; +}; + +class ConfigFile : public QWidget +{ + Q_OBJECT + + public: + ConfigFile(QWidget *parent=0); + ~ConfigFile(); + void init(); + void addDependency(QDict<QObject> *switches, + const QCString &dep,const QCString &name); + + signals: + void changed(); + + private slots: + void toggle(const char *,bool); + + private: + QDict<IInput> *m_inputWidgets; + QDict< QList<IInput> > *m_dependencies; + QDict<QObject> *m_switches; +}; + +#endif diff --git a/addon/doxywizard/doxywizard.pro.in b/addon/doxywizard/doxywizard.pro.in index b7a690f..649c395 100644 --- a/addon/doxywizard/doxywizard.pro.in +++ b/addon/doxywizard/doxywizard.pro.in @@ -1,5 +1,5 @@ # -# +# $Id$ # # Copyright (C) 1997-2001 by Dimitri van Heesch. # @@ -22,24 +22,24 @@ 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 \ + config.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 \ + config.cpp \ pixmaps.cpp # where to put the objects @@ -50,3 +50,4 @@ MOC_DIR = moc # extra C++ compiler options TMAKE_CXXFLAGS += -DDOXYWIZARD + diff --git a/addon/doxywizard/input.h b/addon/doxywizard/input.h new file mode 100644 index 0000000..ab9bcf5 --- /dev/null +++ b/addon/doxywizard/input.h @@ -0,0 +1,14 @@ +#ifndef _INPUT_H +#define _INPUT_H + +class QObject; + +class IInput +{ + public: + virtual void init() = 0; + virtual void setEnabled(bool) = 0; + virtual QObject *qobject() = 0; +}; + +#endif diff --git a/addon/doxywizard/inputbool.cpp b/addon/doxywizard/inputbool.cpp index c63696a..4ac2f8a 100644 --- a/addon/doxywizard/inputbool.cpp +++ b/addon/doxywizard/inputbool.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2001 by Dimitri van Heesch. * @@ -36,7 +36,11 @@ void InputBool::init() void InputBool::setState( bool s ) { - if (state!=s) emit changed(); + if (state!=s) + { + emit changed(); + emit toggle(text(),s); + } state=s; } diff --git a/addon/doxywizard/inputbool.h b/addon/doxywizard/inputbool.h index 2bd8d7a..9c2511f 100644 --- a/addon/doxywizard/inputbool.h +++ b/addon/doxywizard/inputbool.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2001 by Dimitri van Heesch. * @@ -17,9 +17,11 @@ #include <qcheckbox.h> +#include "input.h" + class PageWidget; -class InputBool : public QCheckBox +class InputBool : public QCheckBox, public IInput { Q_OBJECT @@ -27,9 +29,13 @@ class InputBool : public QCheckBox InputBool( const QString &text, PageWidget *parent, bool &flag ); ~InputBool(){}; void init(); + void setEnabled(bool b) { QCheckBox::setEnabled(b); } + QObject *qobject() { return this; } + bool getState() const { return state; } signals: void changed(); + void toggle(const char *,bool); private slots: void setState(bool); diff --git a/addon/doxywizard/inputint.cpp b/addon/doxywizard/inputint.cpp index 702988c..d6173c4 100644 --- a/addon/doxywizard/inputint.cpp +++ b/addon/doxywizard/inputint.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2001 by Dimitri van Heesch. * diff --git a/addon/doxywizard/inputint.h b/addon/doxywizard/inputint.h index 434cb39..28da9cf 100644 --- a/addon/doxywizard/inputint.h +++ b/addon/doxywizard/inputint.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2001 by Dimitri van Heesch. * @@ -18,11 +18,13 @@ #include <qwidget.h> #include <qstring.h> +#include "input.h" + class QLabel; class QSpinBox; class PageWidget; -class InputInt : public QWidget +class InputInt : public QWidget, public IInput { Q_OBJECT @@ -32,6 +34,7 @@ class InputInt : public QWidget ~InputInt(){}; void setEnabled(bool); void init(); + QObject *qobject() { return this; } private: QLabel *lab; diff --git a/addon/doxywizard/inputstring.cpp b/addon/doxywizard/inputstring.cpp index a20ba68..e43fc93 100644 --- a/addon/doxywizard/inputstring.cpp +++ b/addon/doxywizard/inputstring.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2001 by Dimitri van Heesch. * diff --git a/addon/doxywizard/inputstring.h b/addon/doxywizard/inputstring.h index e1b42cf..794f93e 100644 --- a/addon/doxywizard/inputstring.h +++ b/addon/doxywizard/inputstring.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2001 by Dimitri van Heesch. * @@ -19,13 +19,16 @@ #include <qstring.h> #include <qdict.h> +#include "qtbc.h" +#include "input.h" + class QLabel; class QLineEdit; class QPushButton; class QComboBox; class PageWidget; -class InputString : public QWidget +class InputString : public QWidget, public IInput { Q_OBJECT @@ -42,6 +45,7 @@ class InputString : public QWidget void setEnabled(bool); void addValue(const char *s); void init(); + QObject *qobject() { return this; } private: QLabel *lab; diff --git a/addon/doxywizard/inputstrlist.cpp b/addon/doxywizard/inputstrlist.cpp index 9ab9a5b..c6c34f4 100644 --- a/addon/doxywizard/inputstrlist.cpp +++ b/addon/doxywizard/inputstrlist.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2001 by Dimitri van Heesch. * diff --git a/addon/doxywizard/inputstrlist.h b/addon/doxywizard/inputstrlist.h index 3bf6371..e60b036 100644 --- a/addon/doxywizard/inputstrlist.h +++ b/addon/doxywizard/inputstrlist.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2001 by Dimitri van Heesch. * @@ -18,6 +18,8 @@ #include <qwidget.h> #include <qstring.h> +#include "input.h" + class QLabel; class QLineEdit; class QPushButton; @@ -25,7 +27,7 @@ class QListBox; class PageWidget; class QStrList; -class InputStrList : public QWidget +class InputStrList : public QWidget, public IInput { Q_OBJECT @@ -41,6 +43,7 @@ class InputStrList : public QWidget ~InputStrList() {}; void setEnabled(bool); void init(); + QObject *qobject() { return this; } private: QLabel *lab; diff --git a/addon/doxywizard/pagewidget.cpp b/addon/doxywizard/pagewidget.cpp index 7e6920b..67d4d57 100644 --- a/addon/doxywizard/pagewidget.cpp +++ b/addon/doxywizard/pagewidget.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2001 by Dimitri van Heesch. * diff --git a/addon/doxywizard/pagewidget.h b/addon/doxywizard/pagewidget.h index 6d238df..266fcc4 100644 --- a/addon/doxywizard/pagewidget.h +++ b/addon/doxywizard/pagewidget.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2001 by Dimitri van Heesch. * diff --git a/addon/doxywizard/pixmaps.cpp b/addon/doxywizard/pixmaps.cpp index 5f2497b..6c7199b 100644 --- a/addon/doxywizard/pixmaps.cpp +++ b/addon/doxywizard/pixmaps.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2001 by Dimitri van Heesch. * diff --git a/addon/doxywizard/pixmaps.h b/addon/doxywizard/pixmaps.h index 7ec854e..144fee3 100644 --- a/addon/doxywizard/pixmaps.h +++ b/addon/doxywizard/pixmaps.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2001 by Dimitri van Heesch. * diff --git a/addon/configgen/qtbc.h b/addon/doxywizard/qtbc.h index 3bbdc7a..13b6fea 100644 --- a/addon/configgen/qtbc.h +++ b/addon/doxywizard/qtbc.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2001 by Dimitri van Heesch. * @@ -26,11 +26,13 @@ #if QT_VERSION >= 200 +#include <locale.h> + #define GCI QCollection::Item #include <qcstring.h> #include <qstring.h> -inline QCString convertToQCString(const QString &s) { return s.local8Bit(); } +inline QCString convertToQCString(const QString &s) { return s.latin1(); } #else /* QT_VERSION < 200 */ diff --git a/addon/xmlgen/xml.cpp b/addon/xmlgen/xml.cpp index ecb3fce..a624426 100644 --- a/addon/xmlgen/xml.cpp +++ b/addon/xmlgen/xml.cpp @@ -60,7 +60,7 @@ class TextGeneratorXMLImpl : public TextGeneratorIntf void generateDTD() { - QCString fileName=Config::outputDir+"/xml/doxygen.dtd"; + QCString fileName=Config::instance()->getString("OUTPUT_DIRECTORY")+"/xml/doxygen.dtd"; QFile f(fileName); if (!f.open(IO_WriteOnly)) { @@ -440,49 +440,49 @@ void generateXMLForFile(FileDef *fd,QTextStream &t) void generateXML() { - if (Config::outputDir.isEmpty()) - Config::outputDir=QDir::currentDirPath(); + if (Config::instance()->getString("OUTPUT_DIRECTORY").isEmpty()) + Config::instance()->getString("OUTPUT_DIRECTORY")=QDir::currentDirPath(); else { - QDir dir(Config::outputDir); + QDir dir(Config::instance()->getString("OUTPUT_DIRECTORY")); if (!dir.exists()) { dir.setPath(QDir::currentDirPath()); - if (!dir.mkdir(Config::outputDir)) + if (!dir.mkdir(Config::instance()->getString("OUTPUT_DIRECTORY"))) { err("Error: tag OUTPUT_DIRECTORY: Output directory `%s' does not " - "exist and cannot be created\n",Config::outputDir.data()); + "exist and cannot be created\n",Config::instance()->getString("OUTPUT_DIRECTORY").data()); exit(1); } - else if (!Config::quietFlag) + else if (!Config::instance()->getBool("QUIET")) { err("Notice: Output directory `%s' does not exist. " - "I have created it for you.\n", Config::outputDir.data()); + "I have created it for you.\n", Config::instance()->getString("OUTPUT_DIRECTORY").data()); } - dir.cd(Config::outputDir); + dir.cd(Config::instance()->getString("OUTPUT_DIRECTORY")); } - Config::outputDir=dir.absPath(); + Config::instance()->getString("OUTPUT_DIRECTORY")=dir.absPath(); } - QDir dir(Config::outputDir); + QDir dir(Config::instance()->getString("OUTPUT_DIRECTORY")); if (!dir.exists()) { dir.setPath(QDir::currentDirPath()); - if (!dir.mkdir(Config::outputDir)) + if (!dir.mkdir(Config::instance()->getString("OUTPUT_DIRECTORY"))) { - err("Cannot create directory %s\n",Config::outputDir.data()); + err("Cannot create directory %s\n",Config::instance()->getString("OUTPUT_DIRECTORY").data()); return; } } - QDir xmlDir(Config::outputDir+"/xml"); - if (!xmlDir.exists() && !xmlDir.mkdir(Config::outputDir+"/xml")) + QDir xmlDir(Config::instance()->getString("OUTPUT_DIRECTORY")+"/xml"); + if (!xmlDir.exists() && !xmlDir.mkdir(Config::instance()->getString("OUTPUT_DIRECTORY")+"/xml")) { - err("Could not create xml directory in %s\n",Config::outputDir.data()); + err("Could not create xml directory in %s\n",Config::instance()->getString("OUTPUT_DIRECTORY").data()); return; } generateDTD(); - QCString fileName=Config::outputDir+"/xml/doxygen.xml"; + QCString fileName=Config::instance()->getString("OUTPUT_DIRECTORY")+"/xml/doxygen.xml"; QFile f(fileName); if (!f.open(IO_WriteOnly)) { diff --git a/addon/xmlgen/xmlgen.pro.in b/addon/xmlgen/xmlgen.pro.in index c16db47..2f29fd3 100644 --- a/addon/xmlgen/xmlgen.pro.in +++ b/addon/xmlgen/xmlgen.pro.in @@ -3,18 +3,18 @@ CONFIG = console warn_on $extraopt HEADERS = xml.h xml_dtd.h SOURCES = main.cpp xml.cpp DEPENDPATH = ../../src -unix:LIBS += -L../../lib -ldoxygen -lqtools +unix:LIBS += -L../../lib -ldoxygen -ldoxycfg -lqtools win32:INCLUDEPATH += . -win32-mingw:LIBS += -L../../lib -ldoxygen -lqtools -win32-msvc:LIBS += qtools.lib doxygen.lib shell32.lib +win32-mingw:LIBS += -L../../lib -ldoxygen -ldoxycfg -lqtools +win32-msvc:LIBS += qtools.lib doxygen.lib doxycfg.lib shell32.lib win32-msvc:TMAKE_LFLAGS += /LIBPATH:..\..\lib -win32-borland:LIBS += qtools.lib doxygen.lib shell32.lib +win32-borland:LIBS += qtools.lib doxygen.lib doxycfg.lib shell32.lib win32-borland:TMAKE_LFLAGS += -L..\..\lib win32:TMAKE_CXXFLAGS += -DQT_NODLL INCLUDEPATH += ../../qtools ../../src DESTDIR = ../../bin TARGET = doxygen_xml -unix:TARGETDEPS = ../../lib/libdoxygen.a -win32:TARGETDEPS = ..\..\lib\doxygen.lib +unix:TARGETDEPS = ../../lib/libdoxygen.a ../../lib/libdoxycfg.a +win32:TARGETDEPS = ..\..\lib\doxygen.lib ../../lib/doxycfg.lib OBJECTS_DIR = obj diff --git a/addon/xmlread/qtbc.h b/addon/xmlread/qtbc.h index 51f62dd..13b6fea 100644 --- a/addon/xmlread/qtbc.h +++ b/addon/xmlread/qtbc.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * + * $Id$ * * Copyright (C) 1997-2001 by Dimitri van Heesch. * |