1.7.1
This commit is contained in:
parent
14bb3ab1bf
commit
e24bd7fd2f
@ -20,3 +20,4 @@ doxygen-1.6.0.src.tar.gz
|
|||||||
doxygen-1.6.1.src.tar.gz
|
doxygen-1.6.1.src.tar.gz
|
||||||
doxygen-1.6.2.src.tar.gz
|
doxygen-1.6.2.src.tar.gz
|
||||||
doxygen-1.6.2-20100208.tar.gz
|
doxygen-1.6.2-20100208.tar.gz
|
||||||
|
doxygen-1.7.1.src.tar.gz
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
diff -up doxygen-1.6.0/addon/doxywizard/Makefile.in.config doxygen-1.6.0/addon/doxywizard/Makefile.in
|
diff -up doxygen-1.7.1/addon/doxywizard/Makefile.in.config doxygen-1.7.1/addon/doxywizard/Makefile.in
|
||||||
--- doxygen-1.6.0/addon/doxywizard/Makefile.in.config 2009-07-13 22:09:03.000000000 +0200
|
--- doxygen-1.7.1/addon/doxywizard/Makefile.in.config 2010-05-23 16:51:31.000000000 +0200
|
||||||
+++ doxygen-1.6.0/addon/doxywizard/Makefile.in 2009-08-21 16:42:13.000000000 +0200
|
+++ doxygen-1.7.1/addon/doxywizard/Makefile.in 2010-07-19 13:38:33.000000000 +0200
|
||||||
@@ -10,8 +10,6 @@
|
@@ -10,8 +10,6 @@
|
||||||
# See the GNU General Public License for more details.
|
# See the GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
|
|
||||||
-QMAKE=qmake
|
-QMAKE=qmake $(MKSPECS)
|
||||||
-
|
-
|
||||||
all: Makefile.doxywizard
|
all: Makefile.doxywizard
|
||||||
$(MAKE) -f Makefile.doxywizard
|
$(MAKE) -f Makefile.doxywizard
|
||||||
@ -26,15 +26,15 @@ diff -up doxygen-1.6.0/addon/doxywizard/Makefile.in.config doxygen-1.6.0/addon/d
|
|||||||
rm doxywizard.1
|
rm doxywizard.1
|
||||||
|
|
||||||
FORCE:
|
FORCE:
|
||||||
diff -up doxygen-1.6.0/configure.config doxygen-1.6.0/configure
|
diff -up doxygen-1.7.1/configure.config doxygen-1.7.1/configure
|
||||||
--- doxygen-1.6.0/configure.config 2009-08-20 14:15:07.000000000 +0200
|
--- doxygen-1.7.1/configure.config 2010-06-25 11:46:38.000000000 +0200
|
||||||
+++ doxygen-1.6.0/configure 2009-08-21 16:41:36.000000000 +0200
|
+++ doxygen-1.7.1/configure 2010-07-19 12:03:53.000000000 +0200
|
||||||
@@ -268,9 +268,10 @@ if test "$f_wizard" = YES; then
|
@@ -268,9 +268,10 @@ if test "$f_wizard" = YES; then
|
||||||
if test -z "$QTDIR"; then
|
if test -z "$QTDIR"; then
|
||||||
echo " QTDIR environment variable not set!"
|
echo " QTDIR environment variable not set!"
|
||||||
echo -n " Checking for Qt..."
|
echo -n " Checking for Qt..."
|
||||||
- for d in /usr/{lib,share,qt}/{qt-4,qt4,qt,qt*,4}; do
|
- for d in /usr/{lib,share,qt}/{qt-4,qt4,qt,qt*,4} /usr; do
|
||||||
+ for d in /usr/{lib64,lib,share,qt}/{qt-4,qt4,qt,qt*,4}; do
|
+ for d in /usr/{lib64,lib,share,qt}/{qt-4,qt4,qt,qt*,4} /usr; do
|
||||||
if test -x "$d/bin/qmake"; then
|
if test -x "$d/bin/qmake"; then
|
||||||
QTDIR=$d
|
QTDIR=$d
|
||||||
+ QMAKE=$d/bin/qmake
|
+ QMAKE=$d/bin/qmake
|
||||||
@ -50,9 +50,9 @@ diff -up doxygen-1.6.0/configure.config doxygen-1.6.0/configure
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
if test "$f_dot" != NO; then
|
if test "$f_dot" != NO; then
|
||||||
diff -up doxygen-1.6.0/Makefile.in.config doxygen-1.6.0/Makefile.in
|
diff -up doxygen-1.7.1/Makefile.in.config doxygen-1.7.1/Makefile.in
|
||||||
--- doxygen-1.6.0/Makefile.in.config 2009-08-14 15:58:42.000000000 +0200
|
--- doxygen-1.7.1/Makefile.in.config 2009-08-20 21:41:13.000000000 +0200
|
||||||
+++ doxygen-1.6.0/Makefile.in 2009-08-21 16:34:02.000000000 +0200
|
+++ doxygen-1.7.1/Makefile.in 2010-07-19 12:03:53.000000000 +0200
|
||||||
@@ -44,8 +44,6 @@ distclean: clean
|
@@ -44,8 +44,6 @@ distclean: clean
|
||||||
|
|
||||||
DATE=$(shell date "+%B %Y")
|
DATE=$(shell date "+%B %Y")
|
||||||
@ -62,9 +62,9 @@ diff -up doxygen-1.6.0/Makefile.in.config doxygen-1.6.0/Makefile.in
|
|||||||
install: doxywizard_install
|
install: doxywizard_install
|
||||||
$(INSTTOOL) -d $(DESTDIR)/$(INSTALL)/bin
|
$(INSTTOOL) -d $(DESTDIR)/$(INSTALL)/bin
|
||||||
$(INSTTOOL) -m 755 bin/doxygen $(DESTDIR)/$(INSTALL)/bin
|
$(INSTTOOL) -m 755 bin/doxygen $(DESTDIR)/$(INSTALL)/bin
|
||||||
diff -up doxygen-1.6.0/tmake/lib/linux-g++/tmake.conf.config doxygen-1.6.0/tmake/lib/linux-g++/tmake.conf
|
diff -up doxygen-1.7.1/tmake/lib/linux-g++/tmake.conf.config doxygen-1.7.1/tmake/lib/linux-g++/tmake.conf
|
||||||
--- doxygen-1.6.0/tmake/lib/linux-g++/tmake.conf.config 2008-12-06 14:16:20.000000000 +0100
|
--- doxygen-1.7.1/tmake/lib/linux-g++/tmake.conf.config 2008-12-06 14:16:20.000000000 +0100
|
||||||
+++ doxygen-1.6.0/tmake/lib/linux-g++/tmake.conf 2009-08-21 16:34:02.000000000 +0200
|
+++ doxygen-1.7.1/tmake/lib/linux-g++/tmake.conf 2010-07-19 12:03:53.000000000 +0200
|
||||||
@@ -11,7 +11,7 @@ TMAKE_CC = gcc
|
@@ -11,7 +11,7 @@ TMAKE_CC = gcc
|
||||||
TMAKE_CFLAGS = -pipe
|
TMAKE_CFLAGS = -pipe
|
||||||
TMAKE_CFLAGS_WARN_ON = -Wall -W -fno-exceptions
|
TMAKE_CFLAGS_WARN_ON = -Wall -W -fno-exceptions
|
18
doxygen.spec
18
doxygen.spec
@ -1,16 +1,12 @@
|
|||||||
Summary: A documentation system for C/C++
|
Summary: A documentation system for C/C++
|
||||||
Name: doxygen
|
Name: doxygen
|
||||||
Version: 1.6.2
|
Version: 1.7.1
|
||||||
Release: 1.svn20100208%{?dist}
|
Release: 1%{?dist}
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Url: http://www.stack.nl/~dimitri/doxygen/index.html
|
Url: http://www.stack.nl/~dimitri/doxygen/index.html
|
||||||
# Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
|
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
|
||||||
# The source was created for a subversion checkout:
|
Patch1: doxygen-1.7.1-config.patch
|
||||||
# svn co http://doxygen.svn.sourceforge.net/svnroot/doxygen/tags/Release_1_6_2_20100208 doxygen-1.6.2-20100208
|
|
||||||
Source0: %{name}-%{version}-20100208.tar.gz
|
|
||||||
Patch1: doxygen-1.6.0-config.patch
|
|
||||||
Patch2: doxygen-1.6.2-timestamp.patch
|
Patch2: doxygen-1.6.2-timestamp.patch
|
||||||
Patch3: doxywizard-missing-config.patch
|
|
||||||
|
|
||||||
Group: Development/Tools
|
Group: Development/Tools
|
||||||
# No version is specified.
|
# No version is specified.
|
||||||
@ -45,11 +41,10 @@ Doxywizard is a GUI for creating and editing configuration files that
|
|||||||
are used by doxygen.
|
are used by doxygen.
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n %{name}-%{version}-20100208
|
%setup -q
|
||||||
|
|
||||||
%patch1 -p1 -b .config
|
%patch1 -p1 -b .config
|
||||||
%patch2 -p1 -b .timestamp
|
%patch2 -p1 -b .timestamp
|
||||||
%patch3 -p1 -b .wizconfig
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
unset QTDIR
|
unset QTDIR
|
||||||
@ -102,6 +97,9 @@ rm -rf %{buildroot}
|
|||||||
%{_mandir}/man1/doxywizard*
|
%{_mandir}/man1/doxywizard*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Jul 19 2010 Than Ngo <than@redhat.com> - 1.7.1-1
|
||||||
|
- 1.7.1
|
||||||
|
|
||||||
* Fri Feb 12 2010 Than Ngo <than@redhat.com> - 1.6.2-1.svn20100208
|
* Fri Feb 12 2010 Than Ngo <than@redhat.com> - 1.6.2-1.svn20100208
|
||||||
- fix #555526, snapshot 1.6.2-20100208
|
- fix #555526, snapshot 1.6.2-20100208
|
||||||
|
|
||||||
|
@ -1,565 +0,0 @@
|
|||||||
diff -Nur doxygen-1.6.2-20100208.orig/addon/doxywizard/config.h doxygen-1.6.2-20100208/addon/doxywizard/config.h
|
|
||||||
--- doxygen-1.6.2-20100208.orig/addon/doxywizard/config.h 1970-01-01 01:00:00.000000000 +0100
|
|
||||||
+++ doxygen-1.6.2-20100208/addon/doxywizard/config.h 2008-11-21 12:30:03.000000000 +0100
|
|
||||||
@@ -0,0 +1,18 @@
|
|
||||||
+#ifndef CONFIG_H
|
|
||||||
+#define CONFIG_H
|
|
||||||
+
|
|
||||||
+#include <QHash>
|
|
||||||
+#include <QString>
|
|
||||||
+
|
|
||||||
+class Input;
|
|
||||||
+class QTextStream;
|
|
||||||
+class QTextCodec;
|
|
||||||
+
|
|
||||||
+bool parseConfig(
|
|
||||||
+ const QString &fileName,
|
|
||||||
+ const QHash<QString,Input *> &options
|
|
||||||
+ );
|
|
||||||
+
|
|
||||||
+void writeStringValue(QTextStream &t,QTextCodec *codec,const QString &s);
|
|
||||||
+
|
|
||||||
+#endif
|
|
||||||
diff -Nur doxygen-1.6.2-20100208.orig/addon/doxywizard/config.l doxygen-1.6.2-20100208/addon/doxywizard/config.l
|
|
||||||
--- doxygen-1.6.2-20100208.orig/addon/doxywizard/config.l 1970-01-01 01:00:00.000000000 +0100
|
|
||||||
+++ doxygen-1.6.2-20100208/addon/doxywizard/config.l 2009-02-15 16:48:43.000000000 +0100
|
|
||||||
@@ -0,0 +1,539 @@
|
|
||||||
+/******************************************************************************
|
|
||||||
+ *
|
|
||||||
+ * $Id: config_templ.l,v 1.8 2001/01/01 10:15:16 root Exp $
|
|
||||||
+ *
|
|
||||||
+ * Copyright (C) 1997-2007 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 "config.h"
|
|
||||||
+#include "input.h"
|
|
||||||
+#include <QtCore>
|
|
||||||
+
|
|
||||||
+#define MAX_INCLUDE_DEPTH 10
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+/* -----------------------------------------------------------------
|
|
||||||
+ *
|
|
||||||
+ * static variables
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+struct ConfigFileState
|
|
||||||
+{
|
|
||||||
+ int lineNr;
|
|
||||||
+ FILE *file;
|
|
||||||
+ YY_BUFFER_STATE oldState;
|
|
||||||
+ YY_BUFFER_STATE newState;
|
|
||||||
+ QString fileName;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+static const QHash<QString,Input*> *g_options;
|
|
||||||
+static FILE *g_file;
|
|
||||||
+static QString g_yyFileName;
|
|
||||||
+static QString g_includeName;
|
|
||||||
+static QVariant g_includePathList;
|
|
||||||
+static QStack<ConfigFileState*> g_includeStack;
|
|
||||||
+static int g_includeDepth;
|
|
||||||
+static QVariant *g_arg;
|
|
||||||
+static Input *g_curOption=0;
|
|
||||||
+static QString g_elemStr;
|
|
||||||
+static QTextCodec *g_codec = QTextCodec::codecForName("UTF-8");
|
|
||||||
+static QString g_codecName = QString::fromAscii("UTF-8");
|
|
||||||
+static int g_lastState;
|
|
||||||
+static QByteArray g_tmpString;
|
|
||||||
+
|
|
||||||
+/* -----------------------------------------------------------------
|
|
||||||
+ */
|
|
||||||
+#undef YY_INPUT
|
|
||||||
+#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
|
|
||||||
+
|
|
||||||
+static int yyread(char *buf,int maxSize)
|
|
||||||
+{
|
|
||||||
+ // no file included
|
|
||||||
+ if (g_includeStack.isEmpty())
|
|
||||||
+ {
|
|
||||||
+ return fread(buf,1,maxSize,g_file);
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ return fread(buf,1,maxSize,g_includeStack.top()->file);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void config_err(const char *fmt, ...)
|
|
||||||
+{
|
|
||||||
+ va_list args;
|
|
||||||
+ va_start(args, fmt);
|
|
||||||
+ vfprintf(stderr, fmt, args);
|
|
||||||
+ va_end(args);
|
|
||||||
+}
|
|
||||||
+void config_warn(const char *fmt, ...)
|
|
||||||
+{
|
|
||||||
+ va_list args;
|
|
||||||
+ va_start(args, fmt);
|
|
||||||
+ vfprintf(stderr, fmt, args);
|
|
||||||
+ va_end(args);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void substEnvVarsInStrList(QStringList &sl);
|
|
||||||
+static void substEnvVarsInString(QString &s);
|
|
||||||
+
|
|
||||||
+static void checkEncoding()
|
|
||||||
+{
|
|
||||||
+ Input *option = g_options->value(QString::fromAscii("DOXYFILE_ENCODING"));
|
|
||||||
+ if (option && option->value().toString()!=g_codecName)
|
|
||||||
+ {
|
|
||||||
+ QTextCodec *newCodec = QTextCodec::codecForName(option->value().toString().toAscii());
|
|
||||||
+ if (newCodec)
|
|
||||||
+ {
|
|
||||||
+ g_codec = newCodec;
|
|
||||||
+ g_codecName = option->value().toString();
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static FILE *tryPath(const QString &path,const QString &fileName)
|
|
||||||
+{
|
|
||||||
+ QString absName=!path.isEmpty() ? path+QString::fromAscii("/")+fileName : fileName;
|
|
||||||
+ QFileInfo fi(absName);
|
|
||||||
+ if (fi.exists() && fi.isFile())
|
|
||||||
+ {
|
|
||||||
+ FILE *f = fopen(absName.toLocal8Bit(),"r");
|
|
||||||
+ if (f==NULL)
|
|
||||||
+ config_err("Error: could not open file %s for reading\n",absName.toLatin1().data());
|
|
||||||
+ else
|
|
||||||
+ return f;
|
|
||||||
+ }
|
|
||||||
+ return NULL;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static FILE *findFile(const QString &fileName)
|
|
||||||
+{
|
|
||||||
+ if (QFileInfo(fileName).isAbsolute()) // absolute path
|
|
||||||
+ {
|
|
||||||
+ return tryPath(QString(), fileName);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // relative path, try with include paths in the list
|
|
||||||
+ QStringList sl = g_includePathList.toStringList();
|
|
||||||
+ substEnvVarsInStrList(sl);
|
|
||||||
+ foreach (QString s, sl)
|
|
||||||
+ {
|
|
||||||
+ FILE *f = tryPath(s,fileName);
|
|
||||||
+ if (f) return f;
|
|
||||||
+ }
|
|
||||||
+ // try cwd if g_includePathList fails
|
|
||||||
+ return tryPath(QString::fromAscii("."),fileName);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void readIncludeFile(const QString &incName)
|
|
||||||
+{
|
|
||||||
+ if (g_includeDepth==MAX_INCLUDE_DEPTH)
|
|
||||||
+ {
|
|
||||||
+ config_err("Error: maximum include depth (%d) reached, %s is not included. Aborting...\n",
|
|
||||||
+ MAX_INCLUDE_DEPTH,qPrintable(incName));
|
|
||||||
+ exit(1);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ QString inc = incName;
|
|
||||||
+ substEnvVarsInString(inc);
|
|
||||||
+ inc = inc.trimmed();
|
|
||||||
+ uint incLen = inc.length();
|
|
||||||
+ if (inc.at(0)==QChar::fromAscii('"') &&
|
|
||||||
+ inc.at(incLen-1)==QChar::fromAscii('"')) // strip quotes
|
|
||||||
+ {
|
|
||||||
+ inc=inc.mid(1,incLen-2);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ FILE *f = findFile(inc);
|
|
||||||
+ if (f) // 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.toLatin1().data());
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+ // store the state of the old file
|
|
||||||
+ ConfigFileState *fs=new ConfigFileState;
|
|
||||||
+ fs->oldState=YY_CURRENT_BUFFER;
|
|
||||||
+ fs->fileName=g_yyFileName;
|
|
||||||
+ fs->file=f;
|
|
||||||
+ // push the state on the stack
|
|
||||||
+ g_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;
|
|
||||||
+ g_yyFileName=inc;
|
|
||||||
+ g_includeDepth++;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ config_err("Error: @INCLUDE = %s: not found!\n",inc.toLatin1().data());
|
|
||||||
+ exit(1);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+%}
|
|
||||||
+
|
|
||||||
+%option nounput
|
|
||||||
+%option noyywrap
|
|
||||||
+%option yylineno
|
|
||||||
+
|
|
||||||
+%x Start
|
|
||||||
+%x SkipComment
|
|
||||||
+%x SkipInvalid
|
|
||||||
+%x GetString
|
|
||||||
+%x GetStrList
|
|
||||||
+%x GetQuotedString
|
|
||||||
+%x GetEnvVar
|
|
||||||
+%x Include
|
|
||||||
+
|
|
||||||
+%%
|
|
||||||
+
|
|
||||||
+<*>\0x0d
|
|
||||||
+<Start,GetString,GetStrList,SkipInvalid>"#" { BEGIN(SkipComment); }
|
|
||||||
+<Start>[a-z_A-Z][a-z_A-Z0-9]*[ \t]*"=" { QString cmd = g_codec->toUnicode(yytext);
|
|
||||||
+ cmd=cmd.left(cmd.length()-1).trimmed();
|
|
||||||
+ g_curOption = g_options->value(cmd);
|
|
||||||
+ if (g_curOption==0) // oops not known
|
|
||||||
+ {
|
|
||||||
+ config_err("Warning: ignoring unsupported tag `%s' at line %d, file %s\n",
|
|
||||||
+ qPrintable(cmd),yylineno,qPrintable(g_yyFileName));
|
|
||||||
+ BEGIN(SkipInvalid);
|
|
||||||
+ }
|
|
||||||
+ else // known tag
|
|
||||||
+ {
|
|
||||||
+ //option->setEncoding(encoding);
|
|
||||||
+ g_arg = &g_curOption->value();
|
|
||||||
+ switch(g_curOption->kind())
|
|
||||||
+ {
|
|
||||||
+ case Input::StrList:
|
|
||||||
+ g_elemStr = QString();
|
|
||||||
+ *g_arg = QStringList();
|
|
||||||
+ BEGIN(GetStrList);
|
|
||||||
+ break;
|
|
||||||
+ case Input::String:
|
|
||||||
+ BEGIN(GetString);
|
|
||||||
+ break;
|
|
||||||
+ case Input::Int:
|
|
||||||
+ BEGIN(GetString);
|
|
||||||
+ break;
|
|
||||||
+ case Input::Bool:
|
|
||||||
+ BEGIN(GetString);
|
|
||||||
+ break;
|
|
||||||
+ case Input::Obsolete:
|
|
||||||
+ config_err("Warning: Tag `%s' at line %d of file %s has become obsolete.\n"
|
|
||||||
+ "To avoid this warning please update your configuration "
|
|
||||||
+ "file using \"doxygen -u\"\n", qPrintable(cmd),
|
|
||||||
+ yylineno,qPrintable(g_yyFileName));
|
|
||||||
+ BEGIN(SkipInvalid);
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+<Start>[a-z_A-Z][a-z_A-Z0-9]*[ \t]*"+=" { QString cmd=g_codec->toUnicode(yytext);
|
|
||||||
+ cmd=cmd.left(cmd.length()-2).trimmed();
|
|
||||||
+ g_curOption = g_options->value(cmd);
|
|
||||||
+ if (g_curOption==0) // oops not known
|
|
||||||
+ {
|
|
||||||
+ config_err("Warning: ignoring unsupported tag `%s' at line %d, file %s\n",
|
|
||||||
+ yytext,yylineno,qPrintable(g_yyFileName));
|
|
||||||
+ BEGIN(SkipInvalid);
|
|
||||||
+ }
|
|
||||||
+ else // known tag
|
|
||||||
+ {
|
|
||||||
+ switch(g_curOption->kind())
|
|
||||||
+ {
|
|
||||||
+ case Input::StrList:
|
|
||||||
+ g_arg = &g_curOption->value();
|
|
||||||
+ g_elemStr=QString();
|
|
||||||
+ BEGIN(GetStrList);
|
|
||||||
+ break;
|
|
||||||
+ case Input::String:
|
|
||||||
+ case Input::Int:
|
|
||||||
+ case Input::Bool:
|
|
||||||
+ config_err("Warning: operator += not supported for `%s'. Ignoring line at line %d, file %s\n",
|
|
||||||
+ yytext,yylineno,qPrintable(g_yyFileName));
|
|
||||||
+ BEGIN(SkipInvalid);
|
|
||||||
+ break;
|
|
||||||
+ case Input::Obsolete:
|
|
||||||
+ config_err("Warning: Tag `%s' at line %d of file %s has become obsolete.\n"
|
|
||||||
+ "To avoid this warning please update your configuration "
|
|
||||||
+ "file using \"doxygen -u\"\n",
|
|
||||||
+ qPrintable(cmd),yylineno,qPrintable(g_yyFileName));
|
|
||||||
+ BEGIN(SkipInvalid);
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+<Start>"@INCLUDE_PATH"[ \t]*"=" { BEGIN(GetStrList); g_arg=&g_includePathList; *g_arg = QStringList(); g_elemStr=QString(); }
|
|
||||||
+ /* include a config file */
|
|
||||||
+<Start>"@INCLUDE"[ \t]*"=" { BEGIN(Include);}
|
|
||||||
+<Include>([^ \"\t\r\n]+)|("\""[^\n\"]+"\"") {
|
|
||||||
+ readIncludeFile(g_codec->toUnicode(yytext));
|
|
||||||
+ BEGIN(Start);
|
|
||||||
+ }
|
|
||||||
+<<EOF>> {
|
|
||||||
+ //printf("End of include file\n");
|
|
||||||
+ //printf("Include stack depth=%d\n",g_includeStack.count());
|
|
||||||
+ if (g_includeStack.isEmpty())
|
|
||||||
+ {
|
|
||||||
+ //printf("Terminating scanner!\n");
|
|
||||||
+ yyterminate();
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ ConfigFileState *fs = g_includeStack.pop();
|
|
||||||
+ fclose(fs->file);
|
|
||||||
+ YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER;
|
|
||||||
+ yy_switch_to_buffer( fs->oldState );
|
|
||||||
+ yy_delete_buffer( oldBuf );
|
|
||||||
+ g_yyFileName=fs->fileName;
|
|
||||||
+ delete fs;
|
|
||||||
+ g_includeDepth--;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+<Start>[a-z_A-Z0-9]+ { config_err("Warning: ignoring unknown tag `%s' at line %d, file %s\n",yytext,yylineno,qPrintable(g_yyFileName)); }
|
|
||||||
+<GetString,SkipInvalid>\n { BEGIN(Start); }
|
|
||||||
+<GetStrList>\n {
|
|
||||||
+ if (!g_elemStr.isEmpty())
|
|
||||||
+ {
|
|
||||||
+ //printf("elemStr1=`%s'\n",elemStr.toLatin1().data());
|
|
||||||
+ *g_arg = QVariant(g_arg->toStringList() << g_elemStr);
|
|
||||||
+ }
|
|
||||||
+ BEGIN(Start);
|
|
||||||
+ }
|
|
||||||
+<GetStrList>[ \t]+ {
|
|
||||||
+ if (!g_elemStr.isEmpty())
|
|
||||||
+ {
|
|
||||||
+ //printf("elemStr2=`%s'\n",elemStr.toLatin1().data());
|
|
||||||
+ *g_arg = QVariant(g_arg->toStringList() << g_elemStr);
|
|
||||||
+ }
|
|
||||||
+ g_elemStr = QString();
|
|
||||||
+ }
|
|
||||||
+<GetString>[^ \"\t\r\n]+ {
|
|
||||||
+ *g_arg = QVariant(g_codec->toUnicode(yytext));
|
|
||||||
+ checkEncoding();
|
|
||||||
+ }
|
|
||||||
+<GetString,GetStrList,SkipInvalid>"\"" { g_lastState=YY_START;
|
|
||||||
+ BEGIN(GetQuotedString);
|
|
||||||
+ g_tmpString="";
|
|
||||||
+ }
|
|
||||||
+<GetQuotedString>"\""|"\n" {
|
|
||||||
+ // we add a bogus space to signal that the string was quoted. This space will be stripped later on.
|
|
||||||
+ g_tmpString+=" ";
|
|
||||||
+ //printf("Quoted String = `%s'\n",tmpString.toLatin1().data());
|
|
||||||
+ if (g_lastState==GetString)
|
|
||||||
+ {
|
|
||||||
+ *g_arg = g_codec->toUnicode(g_tmpString);
|
|
||||||
+ checkEncoding();
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ g_elemStr+=g_codec->toUnicode(g_tmpString);
|
|
||||||
+ }
|
|
||||||
+ if (*yytext=='\n')
|
|
||||||
+ {
|
|
||||||
+ config_err("Warning: Missing end quote (\") on line %d, file %s\n",yylineno,
|
|
||||||
+ qPrintable(g_yyFileName));
|
|
||||||
+ }
|
|
||||||
+ BEGIN(g_lastState);
|
|
||||||
+ }
|
|
||||||
+<GetQuotedString>"\\\"" {
|
|
||||||
+ g_tmpString+='"';
|
|
||||||
+ }
|
|
||||||
+<GetQuotedString>. { g_tmpString+=*yytext; }
|
|
||||||
+<GetStrList>[^ \#\"\t\r\n]+ {
|
|
||||||
+ g_elemStr+=g_codec->toUnicode(yytext);
|
|
||||||
+ }
|
|
||||||
+<SkipComment>\n { BEGIN(Start); }
|
|
||||||
+<SkipComment>\\[ \r\t]*\n { BEGIN(Start); }
|
|
||||||
+<*>\\[ \r\t]*\n { }
|
|
||||||
+<*>\n
|
|
||||||
+<*>.
|
|
||||||
+
|
|
||||||
+%%
|
|
||||||
+
|
|
||||||
+/*@ ----------------------------------------------------------------------------
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+static void substEnvVarsInString(QString &s)
|
|
||||||
+{
|
|
||||||
+ static QRegExp re(QString::fromAscii("\\$\\([a-z_A-Z0-9]+\\)"));
|
|
||||||
+ if (s.isEmpty()) return;
|
|
||||||
+ int p=0;
|
|
||||||
+ int i,l;
|
|
||||||
+ //printf("substEnvVarInString(%s) start\n",s.toLatin1().data());
|
|
||||||
+ while ((i=re.indexIn(s,p))!=-1)
|
|
||||||
+ {
|
|
||||||
+ l = re.matchedLength();
|
|
||||||
+ //printf("Found environment var s.mid(%d,%d)=`%s'\n",i+2,l-3,s.mid(i+2,l-3).toLatin1().data());
|
|
||||||
+ QString env=g_codec->toUnicode(getenv(s.mid(i+2,l-3).toLatin1()));
|
|
||||||
+ 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
|
|
||||||
+ }
|
|
||||||
+ s=s.trimmed(); // to strip the bogus space that was added when an argument
|
|
||||||
+ // has quotes
|
|
||||||
+ //printf("substEnvVarInString(%s) end\n",s.toLatin1().data());
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void substEnvVarsInStrList(QStringList &sl)
|
|
||||||
+{
|
|
||||||
+ QStringList out;
|
|
||||||
+
|
|
||||||
+ foreach (QString result, sl)
|
|
||||||
+ {
|
|
||||||
+ // an argument with quotes will have an extra space at the end, so wasQuoted will be TRUE.
|
|
||||||
+ bool wasQuoted = (result.indexOf(QChar::fromAscii(' '))!=-1) ||
|
|
||||||
+ (result.indexOf(QChar::fromAscii('\t'))!=-1);
|
|
||||||
+ // here we strip the quote again
|
|
||||||
+ substEnvVarsInString(result);
|
|
||||||
+
|
|
||||||
+ //printf("Result %s was quoted=%d\n",result.toLatin1().data(),wasQuoted);
|
|
||||||
+
|
|
||||||
+ 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++)
|
|
||||||
+ {
|
|
||||||
+ QChar c=0;
|
|
||||||
+ // skip until start of new word
|
|
||||||
+ while (i<l && ((c=result.at(i))==QChar::fromAscii(' ') || c==QChar::fromAscii('\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))!=QChar::fromAscii(' ') &&
|
|
||||||
+ c!=QChar::fromAscii('\t') &&
|
|
||||||
+ c!=QChar::fromAscii('"'))) i++;
|
|
||||||
+ if (i<l) // not at the end of the string
|
|
||||||
+ {
|
|
||||||
+ if (c==QChar::fromAscii('"')) // word within quotes
|
|
||||||
+ {
|
|
||||||
+ p=i+1;
|
|
||||||
+ for (i++;i<l;i++)
|
|
||||||
+ {
|
|
||||||
+ c=result.at(i);
|
|
||||||
+ if (c==QChar::fromAscii('"')) // end quote
|
|
||||||
+ {
|
|
||||||
+ out += result.mid(p,i-p);
|
|
||||||
+ p=i+1;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ else if (c==QChar::fromAscii('\\')) // skip escaped stuff
|
|
||||||
+ {
|
|
||||||
+ i++;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ else if (c==QChar::fromAscii(' ') || c==QChar::fromAscii('\t')) // separator
|
|
||||||
+ {
|
|
||||||
+ out += result.mid(p,i-p);
|
|
||||||
+ p=i+1;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ if (p!=l) // add the leftover as a string
|
|
||||||
+ {
|
|
||||||
+ out += result.right(l-p);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ else // just goto the next element in the list
|
|
||||||
+ {
|
|
||||||
+ out += result;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ sl = out;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+//--------------------------------------------------------------------------
|
|
||||||
+
|
|
||||||
+bool parseConfig(
|
|
||||||
+ const QString &fileName,
|
|
||||||
+ const QHash<QString,Input *> &options
|
|
||||||
+ )
|
|
||||||
+{
|
|
||||||
+ g_file = fopen(fileName.toLocal8Bit(),"r");
|
|
||||||
+ if (g_file==NULL) return false;
|
|
||||||
+ g_options = &options;
|
|
||||||
+ g_yyFileName = fileName;
|
|
||||||
+ g_includeStack.clear();
|
|
||||||
+ g_includeDepth = 0;
|
|
||||||
+ configrestart( configin );
|
|
||||||
+ BEGIN( Start );
|
|
||||||
+ configlex();
|
|
||||||
+ QHashIterator<QString, Input*> i(options);
|
|
||||||
+ while (i.hasNext())
|
|
||||||
+ {
|
|
||||||
+ i.next();
|
|
||||||
+ if (i.value())
|
|
||||||
+ {
|
|
||||||
+ //printf("Updating: %s\n",qPrintable(i.key()));
|
|
||||||
+ i.value()->update();
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ printf("Invalid option: %s\n",qPrintable(i.key()));
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ fclose(g_file);
|
|
||||||
+ return true;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void writeStringValue(QTextStream &t,QTextCodec *codec,const QString &s)
|
|
||||||
+{
|
|
||||||
+ QChar c;
|
|
||||||
+ bool needsEscaping=FALSE;
|
|
||||||
+ // convert the string back to it original encoding
|
|
||||||
+ //QByteArray se = codec->fromUnicode(s);
|
|
||||||
+ t.setCodec(codec);
|
|
||||||
+ const QChar *p=s.data();
|
|
||||||
+ if (!s.isEmpty() && !p->isNull())
|
|
||||||
+ {
|
|
||||||
+ while (!(c=*p++).isNull() && !needsEscaping)
|
|
||||||
+ {
|
|
||||||
+ needsEscaping = (c==QChar::fromAscii(' ') ||
|
|
||||||
+ c==QChar::fromAscii('\n') ||
|
|
||||||
+ c==QChar::fromAscii('\t') ||
|
|
||||||
+ c==QChar::fromAscii('"'));
|
|
||||||
+ }
|
|
||||||
+ if (needsEscaping)
|
|
||||||
+ {
|
|
||||||
+ t << "\"";
|
|
||||||
+ p=s.data();
|
|
||||||
+ while (!p->isNull())
|
|
||||||
+ {
|
|
||||||
+ if (*p ==QChar::fromAscii(' ') &&
|
|
||||||
+ *(p+1)==QChar::fromAscii('\0')) break; // skip inserted space at the end
|
|
||||||
+ if (*p ==QChar::fromAscii('"')) t << "\\"; // escape quotes
|
|
||||||
+ t << *p++;
|
|
||||||
+ }
|
|
||||||
+ t << "\"";
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ t << s;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
Loading…
Reference in New Issue
Block a user