From 9b2564369d1769c6bce4695057c2b0184a1457e2 Mon Sep 17 00:00:00 2001 From: albert-github Date: Fri, 14 Feb 2020 15:44:45 +0100 Subject: Doxywizard unknown configuration enum values Analogous to pull request #7586 a wrong value is given check e.g `OUTPUT_LANGUAGE = dutch` --- addon/doxywizard/config_doxyw.l | 35 +++++++++++++++++++++++++++++------ addon/doxywizard/inputstring.cpp | 12 ++++++++++++ addon/doxywizard/inputstring.h | 2 ++ 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/addon/doxywizard/config_doxyw.l b/addon/doxywizard/config_doxyw.l index 59fa427..4018af7 100644 --- a/addon/doxywizard/config_doxyw.l +++ b/addon/doxywizard/config_doxyw.l @@ -12,6 +12,10 @@ %option never-interactive %option prefix="config_doxywYY" +%top{ +#include +} + %{ /* @@ -19,6 +23,7 @@ */ #include "config.h" #include "input.h" +#include "inputstring.h" #include #include @@ -29,6 +34,7 @@ #include #include #include +#include #define YY_NO_UNISTD_H 1 @@ -216,6 +222,7 @@ static void readIncludeFile(const QString &incName) %x SkipComment %x SkipInvalid %x GetString +%x GetEnum %x GetStrList %x GetQuotedString %x GetEnvVar @@ -224,7 +231,7 @@ static void readIncludeFile(const QString &incName) %% <*>\0x0d -"#" { BEGIN(SkipComment); } +"#" { BEGIN(SkipComment); } [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); @@ -246,7 +253,14 @@ static void readIncludeFile(const QString &incName) BEGIN(GetStrList); break; case Input::String: - BEGIN(GetString); + if (dynamic_cast(g_curOption)->stringMode() == InputString::StringFixed) + { + BEGIN(GetEnum); + } + else + { + BEGIN(GetString); + } break; case Input::Int: BEGIN(GetString); @@ -328,7 +342,7 @@ static void readIncludeFile(const QString &incName) } [a-z_A-Z0-9]+ { config_warn("ignoring unknown tag '%s' at line %d, file %s\n",yytext,yylineno,qPrintable(g_yyFileName)); } -\n { BEGIN(Start); } +\n { BEGIN(Start); } \n { if (!g_elemStr.isEmpty()) { @@ -345,11 +359,15 @@ static void readIncludeFile(const QString &incName) } g_elemStr = QString(); } -[^ \"\t\r\n]+ { +[^ \"\t\r\n]+ { *g_arg = QVariant(g_codec->toUnicode(yytext)); checkEncoding(); } -"\"" { g_lastState=YY_START; +[^ \"\t\r\n]+ { + InputString *cur = dynamic_cast(g_curOption); + *g_arg = cur->checkEnumVal(g_codec->toUnicode(yytext)); + } +"\"" { g_lastState=YY_START; BEGIN(GetQuotedString); g_tmpString=""; } @@ -357,11 +375,16 @@ static void readIncludeFile(const QString &incName) // 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",qPrintable(tmpString)); - if (g_lastState==GetString) + if (g_lastState==GetString) { *g_arg = g_codec->toUnicode(g_tmpString); checkEncoding(); } + else if (g_lastState==GetEnum) + { + InputString *cur = dynamic_cast(g_curOption); + *g_arg = cur->checkEnumVal(g_codec->toUnicode(g_tmpString)); + } else { g_elemStr+=g_codec->toUnicode(g_tmpString); diff --git a/addon/doxywizard/inputstring.cpp b/addon/doxywizard/inputstring.cpp index 5c0f2c9..2f81b5b 100644 --- a/addon/doxywizard/inputstring.cpp +++ b/addon/doxywizard/inputstring.cpp @@ -253,3 +253,15 @@ void InputString::writeValue(QTextStream &t,QTextCodec *codec) writeStringValue(t,codec,m_str); } +QString InputString::checkEnumVal(const QString &value) +{ + QString val = value.trimmed().toLower(); + QStringList::Iterator it; + for ( it= m_values.begin(); it != m_values.end(); ++it ) + { + QString enumVal = *it; + if (enumVal.toLower() == val) return enumVal; + } + + return m_default; +} diff --git a/addon/doxywizard/inputstring.h b/addon/doxywizard/inputstring.h index 4f4a7f7..1520584 100644 --- a/addon/doxywizard/inputstring.h +++ b/addon/doxywizard/inputstring.h @@ -50,6 +50,7 @@ class InputString : public QObject, public Input QVariant &value(); void update(); Kind kind() const { return String; } + StringMode stringMode() const { return m_sm; } QString docs() const { return m_docs; } QString id() const { return m_id; } QString templateDocs() const { return m_tdocs; } @@ -59,6 +60,7 @@ class InputString : public QObject, public Input void writeValue(QTextStream &t,QTextCodec *codec); void setTemplateDocs(const QString &docs) { m_tdocs = docs; } bool isEmpty() { return m_str.isEmpty(); } + QString checkEnumVal(const QString &value); public slots: void reset(); -- cgit v0.12