summaryrefslogtreecommitdiffstats
path: root/addon
diff options
context:
space:
mode:
authorDimitri van Heesch <dimitri@stack.nl>2001-04-01 17:28:27 (GMT)
committerDimitri van Heesch <dimitri@stack.nl>2001-04-01 17:28:27 (GMT)
commitc47269c4f1fb1387d6876075f3b2e935354d5b76 (patch)
tree9ab56725fa008f006370f074ed17023811bbc55f /addon
parentb11bb229001fbb79399e3c21860ae6fb4608e77a (diff)
downloadDoxygen-c47269c4f1fb1387d6876075f3b2e935354d5b76.zip
Doxygen-c47269c4f1fb1387d6876075f3b2e935354d5b76.tar.gz
Doxygen-c47269c4f1fb1387d6876075f3b2e935354d5b76.tar.bz2
Release-1.2.6-20010401
Diffstat (limited to 'addon')
-rw-r--r--addon/configgen/Makefile.in42
-rw-r--r--addon/configgen/README13
-rw-r--r--addon/configgen/config_templ.h42
-rw-r--r--addon/configgen/config_templ.l1004
-rw-r--r--addon/configgen/configgen.cpp1887
-rw-r--r--addon/configgen/configgen.pro.in20
-rw-r--r--addon/doxywizard/Makefile.in32
-rw-r--r--addon/doxywizard/doxywizard.cpp540
-rw-r--r--addon/doxywizard/doxywizard.h111
-rw-r--r--addon/doxywizard/doxywizard.pro.in7
-rw-r--r--addon/doxywizard/input.h14
-rw-r--r--addon/doxywizard/inputbool.cpp8
-rw-r--r--addon/doxywizard/inputbool.h10
-rw-r--r--addon/doxywizard/inputint.cpp2
-rw-r--r--addon/doxywizard/inputint.h7
-rw-r--r--addon/doxywizard/inputstring.cpp2
-rw-r--r--addon/doxywizard/inputstring.h8
-rw-r--r--addon/doxywizard/inputstrlist.cpp2
-rw-r--r--addon/doxywizard/inputstrlist.h7
-rw-r--r--addon/doxywizard/pagewidget.cpp2
-rw-r--r--addon/doxywizard/pagewidget.h2
-rw-r--r--addon/doxywizard/pixmaps.cpp2
-rw-r--r--addon/doxywizard/pixmaps.h2
-rw-r--r--addon/doxywizard/qtbc.h (renamed from addon/configgen/qtbc.h)6
-rw-r--r--addon/xmlgen/xml.cpp34
-rw-r--r--addon/xmlgen/xmlgen.pro.in12
-rw-r--r--addon/xmlread/qtbc.h2
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.
*