diff options
author | Dimitri van Heesch <doxygen@gmail.com> | 2020-08-05 07:44:33 (GMT) |
---|---|---|
committer | Dimitri van Heesch <doxygen@gmail.com> | 2020-08-05 07:44:33 (GMT) |
commit | 23c71a3253f41a84a5624863b29fec69f87396d5 (patch) | |
tree | 2bd19c2fda3a3f3ec8bb5ae84b18677c769810b9 /src/util.cpp | |
parent | c75c38455453c63b82abe2e4b6b1f8842a84f9d9 (diff) | |
download | Doxygen-23c71a3253f41a84a5624863b29fec69f87396d5.zip Doxygen-23c71a3253f41a84a5624863b29fec69f87396d5.tar.gz Doxygen-23c71a3253f41a84a5624863b29fec69f87396d5.tar.bz2 |
Moved stripIndentation() to util, make it safe for empty input
Diffstat (limited to 'src/util.cpp')
-rw-r--r-- | src/util.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/util.cpp b/src/util.cpp index ebf3cf1..6476648 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -7920,6 +7920,55 @@ QCString stripIndentation(const QCString &s) return result.data(); } +// strip up to \a indentationLevel spaces from each line in \a doc (excluding the first line) +static void stripIndentation(QCString &doc,const int indentationLevel) +{ + if (indentationLevel <= 0 || doc.isEmpty()) return; // nothing to strip + + // by stripping content the string will only become shorter so we write the results + // back into the input string and then resize it at the end. + char c; + const char *src = doc.data(); + char *dst = doc.rawData(); + bool insideIndent = false; // skip the initial line from stripping + int cnt = 0; + while ((c=*src++)!=0) + { + // invariant: dst<=src + switch(c) + { + case '\n': + *dst++ = c; + insideIndent = true; + cnt = indentationLevel; + break; + case ' ': + if (insideIndent) + { + if (cnt>0) // count down the spacing until the end of the indent + { + cnt--; + } + else // reached the end of the indent, start of the part of the line to keep + { + insideIndent = false; + *dst++ = c; + } + } + else // part after indent, copy to the output + { + *dst++ = c; + } + break; + default: + insideIndent = false; + *dst++ = c; + break; + } + } + doc.resize(dst-doc.data()+1); +} + bool fileVisibleInIndex(const FileDef *fd,bool &genSourceFile) { |