diff options
author | Dimitri van Heesch <doxygen@gmail.com> | 2019-08-06 18:30:19 (GMT) |
---|---|---|
committer | Dimitri van Heesch <doxygen@gmail.com> | 2019-08-06 18:30:19 (GMT) |
commit | c60743a4b63f71f2cced85b729cc0d32b66e0500 (patch) | |
tree | 33a1b18dfdc6a1a21a166b912fd111530aa5f828 /src/util.cpp | |
parent | 533c5cadfad41763f294c49f8cb7a19fbc5a19d8 (diff) | |
download | Doxygen-c60743a4b63f71f2cced85b729cc0d32b66e0500.zip Doxygen-c60743a4b63f71f2cced85b729cc0d32b66e0500.tar.gz Doxygen-c60743a4b63f71f2cced85b729cc0d32b66e0500.tar.bz2 |
Some fixes and restructuring
- moved unescapeCharsInString to util.cpp
- restructured flow keyword counting
- make flow keyword counting work for python and fortran code as well
Diffstat (limited to 'src/util.cpp')
-rw-r--r-- | src/util.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/util.cpp b/src/util.cpp index e028660..69f91d5 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -5564,6 +5564,76 @@ QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscor return growBuf.get(); } +QCString unescapeCharsInString(const char *s) +{ + static bool caseSenseNames = Config_getBool(CASE_SENSE_NAMES); + QCString result; + const char *p = s; + if (p) + { + char c; + while ((c=*p++)) + { + if (c=='_') // 2 or 3 character escape + { + switch (*p) + { + case '_': result+=c; p++; break; // __ -> '_' + case '1': result+=':'; p++; break; // _1 -> ':' + case '2': result+='/'; p++; break; // _2 -> '/' + case '3': result+='<'; p++; break; // _3 -> '<' + case '4': result+='>'; p++; break; // _4 -> '>' + case '5': result+='*'; p++; break; // _5 -> '*' + case '6': result+='&'; p++; break; // _6 -> '&' + case '7': result+='|'; p++; break; // _7 -> '|' + case '8': result+='.'; p++; break; // _8 -> '.' + case '9': result+='!'; p++; break; // _9 -> '!' + case '0': // 3 character escape + switch (*(p+1)) + { + case '0': result+=','; p+=2; break; // _00 -> ',' + case '1': result+=' '; p+=2; break; // _01 -> ' ' + case '2': result+='{'; p+=2; break; // _02 -> '{' + case '3': result+='}'; p+=2; break; // _03 -> '}' + case '4': result+='?'; p+=2; break; // _04 -> '?' + case '5': result+='^'; p+=2; break; // _05 -> '^' + case '6': result+='%'; p+=2; break; // _06 -> '%' + case '7': result+='('; p+=2; break; // _07 -> '(' + case '8': result+=')'; p+=2; break; // _08 -> ')' + case '9': result+='+'; p+=2; break; // _09 -> '+' + case 'a': result+='='; p+=2; break; // _0a -> '=' + case 'b': result+='$'; p+=2; break; // _0b -> '$' + case 'c': result+='\\'; p+=2; break;// _0c -> '\' + case 'd': result+='@'; p+=2; break; // _0d -> '@' + case 'e': result+=']'; p+=2; break; // _0e -> ']' + case 'f': result+='['; p+=2; break; // _0f -> '[' + default: // unknown escape, just pass underscore character as-is + result+=c; + break; + } + break; + default: + if (!caseSenseNames && c>='a' && c<='z') // lower to upper case escape, _a -> 'A' + { + result+=toupper(*p); + p++; + } + else // unknown escape, pass underscore character as-is + { + result+=c; + } + break; + } + } + else // normal character; pass as is + { + result+=c; + } + } + } + return result; +} + /*! This function determines the file name on disk of an item * given its name, which could be a class name with template * arguments, so special characters need to be escaped. |