summaryrefslogtreecommitdiffstats
path: root/src/IndentHandler.cpp
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2023-11-06 15:16:11 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2023-11-06 15:16:11 +0900
commit160e02ddca52028f07cf3650e365fc28800011ea (patch)
treeeb3ea76d5046993b04166cbdb17757c15793952a /src/IndentHandler.cpp
parent6b2298c21d21f5b2724ba6ec4b2b8c6ba2e76f21 (diff)
downloaduniversal-indent-gui-tqt-160e02ddca52028f07cf3650e365fc28800011ea.tar.gz
universal-indent-gui-tqt-160e02ddca52028f07cf3650e365fc28800011ea.zip
Add support for regex in uigui_uncrustify.ini. This allows to parse options with separators around the '=' sign
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'src/IndentHandler.cpp')
-rw-r--r--src/IndentHandler.cpp147
1 files changed, 133 insertions, 14 deletions
diff --git a/src/IndentHandler.cpp b/src/IndentHandler.cpp
index 588d6e4..142cb39 100644
--- a/src/IndentHandler.cpp
+++ b/src/IndentHandler.cpp
@@ -45,6 +45,7 @@
#include <tqpopupmenu.h>
#include <tqprocess.h>
#include <tqspinbox.h>
+#include <tqregexp.h>
#include <tqstringlist.h>
#include <tqtextcodec.h>
#include <tqtextstream.h>
@@ -577,6 +578,8 @@ bool IndentHandler::loadConfigFile(const TQString &filePathName)
{
TQFile cfgFile(filePathName);
TQString cfgFileData = TQString::null;
+ TQRegExp stringRegex("\"[^\"]*\"");
+ TQRegExp endParamRegex("\\s*(#.*)?" + m_cfgFileParameterEnding);
if (!cfgFile.exists())
{
@@ -601,8 +604,16 @@ bool IndentHandler::loadConfigFile(const TQString &filePathName)
// the true parameter string is longer than the false string
if (pBoolean.trueString.length() > pBoolean.falseString.length())
{
+ int index = -1;
// search for the true string
- int index = cfgFileData.find(pBoolean.trueString, 0, false);
+ if (m_useRegex)
+ {
+ index = cfgFileData.find(TQRegExp(pBoolean.trueString), 0);
+ }
+ else
+ {
+ index = cfgFileData.find(pBoolean.trueString, 0, false);
+ }
// if true string found set the parameter value to true
if (index != -1)
{
@@ -611,7 +622,14 @@ bool IndentHandler::loadConfigFile(const TQString &filePathName)
// if true string not found, search for false string
else
{
- index = cfgFileData.find(pBoolean.falseString, 0, false);
+ if (m_useRegex)
+ {
+ index = cfgFileData.find(TQRegExp(pBoolean.falseString), 0);
+ }
+ else
+ {
+ index = cfgFileData.find(pBoolean.falseString, 0, false);
+ }
// if false string found set the parameter value to false
if (index != -1)
{
@@ -628,7 +646,15 @@ bool IndentHandler::loadConfigFile(const TQString &filePathName)
else
{
// search for the false string
- int index = cfgFileData.find(pBoolean.falseString, 0, false);
+ int index = -1;
+ if (m_useRegex)
+ {
+ index = cfgFileData.find(TQRegExp(pBoolean.falseString), 0);
+ }
+ else
+ {
+ index = cfgFileData.find(pBoolean.falseString, 0, false);
+ }
// if false string found set the parameter value to false
if (index != -1)
{
@@ -637,7 +663,14 @@ bool IndentHandler::loadConfigFile(const TQString &filePathName)
// if false string not found, search for true string
else
{
- index = cfgFileData.find(pBoolean.trueString, 0, false);
+ if (m_useRegex)
+ {
+ index = cfgFileData.find(TQRegExp(pBoolean.trueString), 0);
+ }
+ else
+ {
+ index = cfgFileData.find(pBoolean.trueString, 0, false);
+ }
// if true string found set the parameter value to true
if (index != -1)
{
@@ -656,19 +689,42 @@ bool IndentHandler::loadConfigFile(const TQString &filePathName)
// Search for name of each numeric parameter and set the value found behind it.
for(const ParamNumeric &pNumeric : m_paramNumerics)
{
- int index = cfgFileData.find(pNumeric.paramCallName, 0);
+ TQRegExp pRegEx(pNumeric.paramCallName);
+ int index = -1;
+ if (m_useRegex)
+ {
+ index = pRegEx.search(cfgFileData);
+ }
+ else
+ {
+ index = cfgFileData.find(pNumeric.paramCallName, 0);
+ }
// parameter was found in config file
if (index != -1)
{
// set index after the parameter name, so in front of the number
- index += pNumeric.paramCallName.length();
+ if (m_useRegex)
+ {
+ index += pRegEx.matchedLength();
+ }
+ else
+ {
+ index += pNumeric.paramCallName.length();
+ }
// Find the end of the parameter by searching for set config file parameter ending. Most of
// time this is a carriage return.
- int crPos = cfgFileData.find(m_cfgFileParameterEnding, index + 1);
+ int crPos = index + 1;
+ if (m_useRegex)
+ {
+ crPos = endParamRegex.search(cfgFileData, index + 1);
+ }
+ else
+ {
+ crPos = cfgFileData.find(m_cfgFileParameterEnding, index + 1);
+ }
// get the number and convert it to int
- TQString test = cfgFileData.mid(index, crPos - index);
int paramValue = cfgFileData.mid(index, crPos - index).toInt(nullptr);
// disable the signal-slot connection. Otherwise signal is emmitted each time when value is
@@ -694,7 +750,17 @@ bool IndentHandler::loadConfigFile(const TQString &filePathName)
{
// The number of the found values for this parameter name.
int numberOfValues = 0;
- int index = cfgFileData.find(pString.paramCallName, 0, false);
+
+ TQRegExp pRegEx(pString.paramCallName);
+ int index = -1;
+ if (m_useRegex)
+ {
+ index = pRegEx.search(cfgFileData);
+ }
+ else
+ {
+ index = cfgFileData.find(pString.paramCallName, 0, false);
+ }
// If parameter was found in config file
if (index != -1)
{
@@ -704,26 +770,63 @@ bool IndentHandler::loadConfigFile(const TQString &filePathName)
numberOfValues++;
// Set index after the parameter name, so it points to the front of the string value.
- index += pString.paramCallName.length();
+ if (m_useRegex)
+ {
+ index += pRegEx.matchedLength();
+ }
+ else
+ {
+ index += pString.paramCallName.length();
+ }
// Find the end of the parameter by searching for set config file parameter ending. Most of
// time this is a carriage return.
- int crPos = cfgFileData.find(m_cfgFileParameterEnding, index + 1);
+ int crPos = index;
+ if (m_useRegex)
+ {
+ crPos = stringRegex.search(cfgFileData, index);
+ crPos += stringRegex.matchedLength();
+ }
+ else
+ {
+ crPos = cfgFileData.find(m_cfgFileParameterEnding, index);
+ }
// Get the string and remember it.
+ TQString paramStrVal = TQString::null;
+ if ((crPos - index) >= 2)
+ {
+ // Remove leading and trailing quotes
+ paramStrVal = TQString(cfgFileData.mid(index + 1, crPos - index - 2));
+ }
if (numberOfValues < 2)
{
- paramValueStr = TQString(cfgFileData.mid(index, crPos - index));
+ paramValueStr = paramStrVal;
}
// If the same parameter has been set multiple times, concatenate the strings dvivided by a
// |.
else
{
- paramValueStr = paramValueStr + "|" + TQString(cfgFileData.mid(index, crPos - index));
+ paramValueStr = paramValueStr + "|" + paramStrVal;
+ }
+
+ // Ignore till end of line if regex are used (this because there could a comment
+ // after the string itself in the configuration file
+ if (m_useRegex)
+ {
+ crPos = endParamRegex.search(cfgFileData, crPos);
+ crPos += stringRegex.matchedLength();
}
// Get next value for this setting, if one exists.
- index = cfgFileData.find(pString.paramCallName, crPos + 1, false);
+ if (m_useRegex)
+ {
+ index = pRegEx.search(cfgFileData, crPos);
+ }
+ else
+ {
+ index = cfgFileData.find(pString.paramCallName, crPos, false);
+ }
}
// Set the text for the line edit.
pString.lineEdit->setText(paramValueStr);
@@ -749,6 +852,14 @@ bool IndentHandler::loadConfigFile(const TQString &filePathName)
while (i < pMultiple.choicesStrings.count() && index == -1)
{
index = cfgFileData.find(pMultiple.choicesStrings[i], 0, false);
+ if (m_useRegex)
+ {
+ index = cfgFileData.find(TQRegExp(pMultiple.choicesStrings[i]), 0);
+ }
+ else
+ {
+ index = cfgFileData.find(pMultiple.choicesStrings[i], 0, false);
+ }
if (index != -1)
{
pMultiple.comboBox->setCurrentItem(i);
@@ -865,6 +976,14 @@ void IndentHandler::readIndentIniFile(const TQString &iniFilePath)
m_outputFileName = m_indenterSettings->value("header/outputFileName").toString();
m_fileTypes = m_indenterSettings->value("header/fileTypes").toString();
m_fileTypes.replace('|', " ");
+ if (m_indenterSettings->value("header/useRegex").toString() == "true")
+ {
+ m_useRegex = true;
+ }
+ else
+ {
+ m_useRegex = false;
+ }
// read the categories names which are separated by "|"
TQString categoriesStr = m_indenterSettings->value("header/categories").toString();