diff options
| author | Zher Huei Lee | 2017-10-11 16:27:54 +0800 |
|---|---|---|
| committer | Zher Huei Lee | 2017-11-01 07:20:20 +0800 |
| commit | 0804dd53364107001f31948a9ec9fe331bc92a4a (patch) | |
| tree | b40719054bdae31832e870a17d88ab7a20ff8ba9 /core/ustring.cpp | |
| parent | 29ea79e065cb1ecffec6b8ad17d9996f21abf1cb (diff) | |
| download | godot-0804dd53364107001f31948a9ec9fe331bc92a4a.tar.gz godot-0804dd53364107001f31948a9ec9fe331bc92a4a.tar.zst godot-0804dd53364107001f31948a9ec9fe331bc92a4a.zip | |
Diffstat (limited to 'core/ustring.cpp')
| -rw-r--r-- | core/ustring.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/core/ustring.cpp b/core/ustring.cpp index 80881f1ad..415494ddc 100644 --- a/core/ustring.cpp +++ b/core/ustring.cpp @@ -2757,6 +2757,48 @@ CharType String::ord_at(int p_idx) const { return operator[](p_idx); } +String String::dedent() const { + + String new_string; + String indent; + bool has_indent = false; + bool has_text = false; + int line_start = 0; + int indent_stop = -1; + + for (int i = 0; i < length(); i++) { + + CharType c = operator[](i); + if (c == '\n') { + if (has_text) + new_string += substr(indent_stop, i - indent_stop); + new_string += "\n"; + has_text = false; + line_start = i + 1; + indent_stop = -1; + } else if (!has_text) { + if (c > 32) { + has_text = true; + if (!has_indent) { + has_indent = true; + indent = substr(line_start, i - line_start); + indent_stop = i; + } + } + if (has_indent && indent_stop < 0) { + int j = i - line_start; + if (j >= indent.length() || c != indent[j]) + indent_stop = i; + } + } + } + + if (has_text) + new_string += substr(indent_stop, length() - indent_stop); + + return new_string; +} + String String::strip_edges(bool left, bool right) const { int len = length(); |
