summaryrefslogtreecommitdiffstats
path: root/src/util.cpp
diff options
context:
space:
mode:
authorDimitri van Heesch <doxygen@gmail.com>2020-08-05 07:44:33 (GMT)
committerDimitri van Heesch <doxygen@gmail.com>2020-08-05 07:44:33 (GMT)
commit23c71a3253f41a84a5624863b29fec69f87396d5 (patch)
tree2bd19c2fda3a3f3ec8bb5ae84b18677c769810b9 /src/util.cpp
parentc75c38455453c63b82abe2e4b6b1f8842a84f9d9 (diff)
downloadDoxygen-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.cpp49
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)
{