summaryrefslogtreecommitdiffstats
path: root/src/config.l
diff options
context:
space:
mode:
Diffstat (limited to 'src/config.l')
-rw-r--r--src/config.l125
1 files changed, 111 insertions, 14 deletions
diff --git a/src/config.l b/src/config.l
index b8e92a8..a806aa7 100644
--- a/src/config.l
+++ b/src/config.l
@@ -28,6 +28,7 @@
#include <qfileinfo.h>
#include <qdir.h>
#include <qtextstream.h>
+#include <qregexp.h>
#include "config.h"
#include "version.h"
@@ -57,6 +58,7 @@ void warn(const char *fmt, ...)
#endif
#define YY_NEVER_INTERACTIVE 1
+#define YY_NO_UNPUT
/* -----------------------------------------------------------------
*
@@ -100,6 +102,7 @@ QStrList Config::extDocPathList;
QStrList Config::predefined;
QStrList Config::extraPackageList;
QStrList Config::stripFromPath;
+QStrList Config::sectionFilterList;
bool Config::quietFlag = FALSE;
bool Config::recursiveFlag = FALSE;
bool Config::allExtFlag = FALSE;
@@ -162,7 +165,7 @@ static QCString * s=0;
static bool * b=0;
static QStrList * l=0;
static int lastState;
-static int lastEnvState;
+//static int lastEnvState;
static QCString elemStr;
static QCString tabSizeString;
static QCString colsInAlphaIndexString;
@@ -238,6 +241,7 @@ static int yyread(char *buf,int max_size)
<Start>"PREDEFINED"[ \t]*"=" { BEGIN(GetStrList); l=&Config::predefined; l->clear(); elemStr=""; }
<Start>"EXTRA_PACKAGES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::extraPackageList; l->clear(); elemStr=""; }
<Start>"STRIP_FROM_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::stripFromPath; l->clear(); elemStr=""; }
+<Start>"ENABLED_SECTIONS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::sectionFilterList; l->clear(); elemStr=""; }
<Start>"QUIET"[ \t]*"=" { BEGIN(GetBool); b=&Config::quietFlag; }
<Start>"WARNINGS"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningFlag; }
<Start>"RECURSIVE"[ \t]*"=" { BEGIN(GetBool); b=&Config::recursiveFlag; }
@@ -283,6 +287,7 @@ static int yyread(char *buf,int max_size)
<Start>"SHOW_INCLUDE_FILES"[ \t]*"=" { BEGIN(GetBool); b=&Config::showIncFileFlag; }
<Start>"STRIP_CODE_COMMENTS"[ \t]*"=" { BEGIN(GetBool); b=&Config::stripCommentsFlag; }
<Start>"SORT_MEMBER_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::sortMembersFlag; }
+<Start>"LATEX_BATCHMODE"[ \t]*"=" { BEGIN(GetBool); b=&Config::latexBatchModeFlag; }
<Start>[a-z_A-Z0-9]+ { err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); }
<GetString,GetBool>\n { yyLineNr++; BEGIN(Start); }
<GetStrList>\n {
@@ -302,11 +307,12 @@ static int yyread(char *buf,int max_size)
}
elemStr.resize(0);
}
-<GetString>[^ \"\$\t\r\n]+ { (*s)+=yytext; }
+<GetString>[^ \"\t\r\n]+ { (*s)+=yytext; }
<GetString,GetStrList>"\"" { lastState=YY_START;
BEGIN(GetQuotedString);
tmpString.resize(0);
}
+ /*
<GetString,GetStrList,GetQuotedString>"\$\(" {
//printf(">> Enter env\n");
lastEnvState=YY_START;
@@ -321,6 +327,7 @@ static int yyread(char *buf,int max_size)
for (i=l-1;i>=0;i--) unput(env[i]);
BEGIN(lastEnvState);
}
+ */
<GetQuotedString>"\""|"\n" {
//printf("Quoted String = `%s'\n",tmpString.data());
if (lastState==GetString)
@@ -353,7 +360,7 @@ static int yyread(char *buf,int max_size)
bs.data(),yyLineNr);
}
}
-<GetStrList>[^ \#\"\$\t\r\n]+ {
+<GetStrList>[^ \#\"\t\r\n]+ {
elemStr+=yytext;
}
<SkipComment>\n { yyLineNr++; BEGIN(Start); }
@@ -455,6 +462,7 @@ void Config::init()
Config::predefined.clear();
Config::extraPackageList.clear();
Config::stripFromPath.clear();
+ Config::sectionFilterList.clear();
Config::tabSize=8;
Config::colsInAlphaIndex=5;
Config::quietFlag = FALSE;
@@ -892,6 +900,16 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
+ t << "# The ENABLE_SECTIONS tag can be used to enable conditional\n";
+ t << "# documentation sections, marked by \\if sectionname ... \\endif.\n";
+ t << "\n";
+ }
+ t << "ENABLED_SECTIONS = ";
+ writeStringList(t,Config::sectionFilterList);
+ t << "\n";
+ if (!sl)
+ {
+ t << "\n";
}
t << "#---------------------------------------------------------------------------\n";
t << "# configuration options related to the input files\n";
@@ -1224,10 +1242,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# running if errors occur, instead of asking the user for help.\n";
t << "# This option is also used when generating formulas in HTML.\n";
}
- if (!sl)
- {
- t << "LATEX_BATCHMODE = ";
- }
+ t << "LATEX_BATCHMODE = ";
writeBoolValue(t,Config::latexBatchModeFlag);
t << "\n";
t << "#---------------------------------------------------------------------------\n";
@@ -1574,13 +1589,8 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "\n";
}
-void checkConfig()
+void configStrToVal()
{
- //if (!projectName.isEmpty())
- //{
- // projectName[0]=toupper(projectName[0]);
- //}
-
if (tabSizeString.isEmpty())
{
Config::tabSize=8;
@@ -1613,7 +1623,94 @@ void checkConfig()
}
Config::colsInAlphaIndex=cols;
}
-
+}
+
+static void substEnvVarsInString(QCString &s)
+{
+ QRegExp re("\\$([a-z_A-Z0-9]+)");
+ int p=0;
+ int i,l;
+ //printf("substEnvVarInString(%s) start\n",s.data());
+ while ((i=re.match(s,p,&l))!=-1)
+ {
+ //printf("Found environment var s.mid(%d,%d)=`%s'\n",i+2,l-3,s.mid(i+2,l-3).data());
+ const char *env=getenv(s.mid(i+2,l-3));
+ s = s.left(i)+QCString(env)+s.right(s.length()-i-l);
+ p=i+l;
+ }
+ //printf("substEnvVarInString(%s) end\n",s.data());
+}
+
+static void substEnvVarsInStrList(QStrList &sl)
+{
+ char *s = sl.first();
+ while (s)
+ {
+ QCString result(s);
+ substEnvVarsInString(result);
+
+ // replace the string in the list and go to the next item.
+ sl.insert(sl.at(),result); // insert new item before current item.
+ sl.next(); // current item is now the old item
+ int 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;
+ }
+}
+
+
+void substituteEnvironmentVars()
+{
+ substEnvVarsInString( Config::projectName );
+ substEnvVarsInString( Config::projectNumber );
+ substEnvVarsInString( Config::outputDir );
+ substEnvVarsInString( Config::htmlOutputDir );
+ substEnvVarsInString( Config::latexOutputDir );
+ substEnvVarsInString( Config::manOutputDir );
+ substEnvVarsInString( Config::rtfOutputDir );
+ substEnvVarsInString( Config::outputLanguage );
+ substEnvVarsInString( Config::headerFile );
+ substEnvVarsInString( Config::latexHeaderFile );
+ substEnvVarsInString( Config::footerFile );
+ substEnvVarsInString( Config::cgiName );
+ substEnvVarsInString( Config::cgiURL );
+ substEnvVarsInString( Config::docURL );
+ substEnvVarsInString( Config::binAbsPath );
+ substEnvVarsInString( Config::docAbsPath );
+ substEnvVarsInString( Config::perlPath );
+ substEnvVarsInString( Config::genTagFile );
+ substEnvVarsInString( Config::inputFilter );
+ substEnvVarsInString( Config::paperType );
+ substEnvVarsInString( Config::manExtension );
+ substEnvVarsInString( Config::htmlStyleSheet );
+ substEnvVarsInStrList( Config::ignorePrefixList );
+ substEnvVarsInStrList( Config::includePath );
+ substEnvVarsInStrList( Config::examplePath );
+ substEnvVarsInStrList( Config::imagePath );
+ substEnvVarsInStrList( Config::inputSources );
+ substEnvVarsInStrList( Config::excludeSources );
+ substEnvVarsInStrList( Config::filePatternList );
+ substEnvVarsInStrList( Config::excludePatternList );
+ substEnvVarsInStrList( Config::examplePatternList );
+ substEnvVarsInStrList( Config::imagePatternList );
+ substEnvVarsInStrList( Config::tagFileList );
+ substEnvVarsInStrList( Config::extDocPathList );
+ substEnvVarsInStrList( Config::predefined );
+ substEnvVarsInStrList( Config::extraPackageList );
+ substEnvVarsInStrList( Config::stripFromPath );
+ substEnvVarsInStrList( Config::sectionFilterList );
+}
+
+void checkConfig()
+{
+ //if (!projectName.isEmpty())
+ //{
+ // projectName[0]=toupper(projectName[0]);
+ //}
+
// set default man page extension if non is given by the user
if (Config::manExtension.isEmpty())
{