summaryrefslogtreecommitdiffstats
path: root/src/util.cpp
diff options
context:
space:
mode:
authoralbert-github <albert.tests@gmail.com>2020-10-29 12:31:13 (GMT)
committeralbert-github <albert.tests@gmail.com>2020-10-29 12:31:13 (GMT)
commita4b4398ff7b14f0b5fdccac6bb6334da38ef581d (patch)
tree49651765b6bf2fcc033930433cd78d266f1f8045 /src/util.cpp
parent34792e9871354e5d750ae7990b6038740b57dbf3 (diff)
downloadDoxygen-a4b4398ff7b14f0b5fdccac6bb6334da38ef581d.zip
Doxygen-a4b4398ff7b14f0b5fdccac6bb6334da38ef581d.tar.gz
Doxygen-a4b4398ff7b14f0b5fdccac6bb6334da38ef581d.tar.bz2
Handling commands for backslash and at-sign in ALIASES
When we have an command like `\\`, `\@`, `@@` or `@\`in ALIASES this should not disturb the recognition of the replacement strings like `\2`, so e.g. `\\2` should not be replaced by `\y` but remain `\\2` (assuming the `\2` is linked to `y` in an ALIASES). This issue was found after #8137 had been fixed and was already present in older versions as well.
Diffstat (limited to 'src/util.cpp')
-rw-r--r--src/util.cpp33
1 files changed, 21 insertions, 12 deletions
diff --git a/src/util.cpp b/src/util.cpp
index 8a3ad8c..2b53cde 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -5971,18 +5971,9 @@ static QCString replaceAliasArguments(StringUnorderedSet &aliasesProcessed,
int markerEnd=0;
for (i=0;i<l;i++)
{
- if (markerStart==0 && aliasValue.at(i)=='\\') // start of a \xx marker
+ if (markerStart>0 && !(aliasValue.at(i)>='0' && aliasValue.at(i)<='9'))
{
- markerStart=i+1;
- }
- else if (markerStart>0 && aliasValue.at(i)>='0' && aliasValue.at(i)<='9')
- {
- // read digit that make up the marker number
- markerEnd=i+1;
- }
- else
- {
- if (markerStart>0 && markerEnd>markerStart) // end of marker
+ if (markerEnd>markerStart) // end of marker
{
int markerLen = markerEnd-markerStart;
markerList.append(new Marker(markerStart-1, // include backslash
@@ -5990,9 +5981,27 @@ static QCString replaceAliasArguments(StringUnorderedSet &aliasesProcessed,
//printf("found marker at %d with len %d and number %d\n",
// markerStart-1,markerLen+1,atoi(aliasValue.mid(markerStart,markerLen)));
}
- markerStart=(aliasValue.at(i)=='\\' ? i+1 : 0);
+ 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;
+ }
+ if (markerStart==0 && aliasValue.at(i)=='\\') // start of a possible \xx marker
+ {
+ markerStart=i+1;
+ }
+ else if (markerStart>0 && aliasValue.at(i)>='0' && aliasValue.at(i)<='9')
+ {
+ // read digit that make up the marker number
+ markerEnd=i+1;
+ }
}
if (markerStart>0)
{