summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitri van Heesch <doxygen@gmail.com>2020-10-29 19:46:13 (GMT)
committerDimitri van Heesch <doxygen@gmail.com>2020-10-29 19:46:13 (GMT)
commit539b3bbef61dc7dec8cd5987dc2dbb7a2a956a83 (patch)
treecc79e5bfec2f232c56cd321b92361727af7ac84f
parent356c6e1d77416aa61db869ca10e5f9974e715e42 (diff)
downloadDoxygen-539b3bbef61dc7dec8cd5987dc2dbb7a2a956a83.zip
Doxygen-539b3bbef61dc7dec8cd5987dc2dbb7a2a956a83.tar.gz
Doxygen-539b3bbef61dc7dec8cd5987dc2dbb7a2a956a83.tar.bz2
Some further simplications and modernizations
-rw-r--r--src/util.cpp80
1 files changed, 30 insertions, 50 deletions
diff --git a/src/util.cpp b/src/util.cpp
index 2b53cde..69e2e0d 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -5942,8 +5942,7 @@ static QCString replaceAliasArguments(StringUnorderedSet &aliasesProcessed,
//printf("----- replaceAliasArguments(val=[%s],args=[%s])\n",aliasValue.data(),argList.data());
// first make a list of arguments from the comma separated argument list
- QList<QCString> args;
- args.setAutoDelete(TRUE);
+ std::vector<QCString> args;
int i,l=(int)argList.length();
int s=0;
for (i=0;i<l;i++)
@@ -5951,7 +5950,7 @@ static QCString replaceAliasArguments(StringUnorderedSet &aliasesProcessed,
char c = argList.at(i);
if (c==',' && (i==0 || argList.at(i-1)!='\\'))
{
- args.append(new QCString(argList.mid(s,i-s)));
+ args.push_back(QCString(argList.mid(s,i-s)));
s=i+1; // start of next argument
}
else if (c=='@' || c=='\\')
@@ -5960,77 +5959,58 @@ static QCString replaceAliasArguments(StringUnorderedSet &aliasesProcessed,
i+=findEndOfCommand(argList.data()+i+1);
}
}
- if (l>s) args.append(new QCString(argList.right(l-s)));
+ if (l>s) args.push_back(QCString(argList.right(l-s)));
//printf("found %d arguments\n",args.count());
// next we look for the positions of the markers and add them to a list
- QList<Marker> markerList;
- markerList.setAutoDelete(TRUE);
+ std::vector<Marker> markerList;
l = aliasValue.length();
+ char pc='\0';
+ bool insideMarkerId=false;
int markerStart=0;
- int markerEnd=0;
+ auto isDigit = [](char c) { return c>='0' && c<='9'; };
for (i=0;i<l;i++)
{
- if (markerStart>0 && !(aliasValue.at(i)>='0' && aliasValue.at(i)<='9'))
+ char c = aliasValue.at(i);
+ if (insideMarkerId && !isDigit(c)) // found end of a markerId
{
- if (markerEnd>markerStart) // end of marker
- {
- int markerLen = markerEnd-markerStart;
- markerList.append(new Marker(markerStart-1, // include backslash
- atoi(aliasValue.mid(markerStart,markerLen)),markerLen+1));
- //printf("found marker at %d with len %d and number %d\n",
- // markerStart-1,markerLen+1,atoi(aliasValue.mid(markerStart,markerLen)));
- }
- markerStart=0;
- markerEnd=0;
- }
- // check for escaped command sign
- if ((aliasValue.at(i) == '@' || aliasValue.at(i) == '\\') &&
- (((i+1)<l) && (aliasValue.at(i+1) == '@' || aliasValue.at(i+1) == '\\')))
- {
- markerStart=0;
- markerEnd=0;
- i++;
- continue;
+ insideMarkerId = false;
+ int markerLen = i-markerStart;
+ markerList.push_back(Marker(markerStart-1,
+ atoi(aliasValue.mid(markerStart,markerLen)),
+ markerLen+1));
}
- if (markerStart==0 && aliasValue.at(i)=='\\') // start of a possible \xx marker
+ if (c=='\\' && (pc=='@' || pc=='\\')) // found escaped backslash
{
- markerStart=i+1;
+ // skip
+ pc = '\0';
}
- else if (markerStart>0 && aliasValue.at(i)>='0' && aliasValue.at(i)<='9')
+ else
{
- // read digit that make up the marker number
- markerEnd=i+1;
+ if (isDigit(c) && pc=='\\') // found start of a markerId
+ {
+ insideMarkerId=true;
+ markerStart=i;
+ }
+ pc = c;
}
}
- if (markerStart>0)
- {
- markerEnd=l;
- }
- if (markerStart>0 && markerEnd>markerStart)
- {
- int markerLen = markerEnd-markerStart;
- markerList.append(new Marker(markerStart-1, // include backslash
- atoi(aliasValue.mid(markerStart,markerLen)),markerLen+1));
- //printf("found marker at %d with len %d and number %d\n",
- // markerStart-1,markerLen+1,atoi(aliasValue.mid(markerStart,markerLen)));
- }
// then we replace the markers with the corresponding arguments in one pass
QCString result;
int p=0;
- for (i=0;i<(int)markerList.count();i++)
+ for (i=0;i<(int)markerList.size();i++)
{
- Marker *m = markerList.at(i);
- result+=aliasValue.mid(p,m->pos-p);
+ const Marker &m = markerList.at(i);
+ result+=aliasValue.mid(p,m.pos-p);
//printf("part before marker %d: '%s'\n",i,aliasValue.mid(p,m->pos-p).data());
- if (m->number>0 && m->number<=(int)args.count()) // valid number
+ if (m.number>0 && m.number<=(int)args.size()) // valid number
{
- result+=expandAliasRec(aliasesProcessed,*args.at(m->number-1),TRUE);
+ result+=expandAliasRec(aliasesProcessed,args.at(m.number-1),TRUE);
//printf("marker index=%d pos=%d number=%d size=%d replacement %s\n",i,m->pos,m->number,m->size,
// args.at(m->number-1)->data());
}
- p=m->pos+m->size; // continue after the marker
+ p=m.pos+m.size; // continue after the marker
}
result+=aliasValue.right(l-p); // append remainder
//printf("string after replacement of markers: '%s'\n",result.data());