diff options
author | Matthew Heon <matthew.heon@gmail.com> | 2017-11-01 11:24:59 -0400 |
---|---|---|
committer | Matthew Heon <matthew.heon@gmail.com> | 2017-11-01 11:24:59 -0400 |
commit | a031b83a09a8628435317a03f199cdc18b78262f (patch) | |
tree | bc017a96769ce6de33745b8b0b1304ccf38e9df0 /vendor/github.com/renstrom/dedent/dedent.go | |
parent | 2b74391cd5281f6fdf391ff8ad50fd1490f6bf89 (diff) | |
download | podman-a031b83a09a8628435317a03f199cdc18b78262f.tar.gz podman-a031b83a09a8628435317a03f199cdc18b78262f.tar.bz2 podman-a031b83a09a8628435317a03f199cdc18b78262f.zip |
Initial checkin from CRI-O repo
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
Diffstat (limited to 'vendor/github.com/renstrom/dedent/dedent.go')
-rw-r--r-- | vendor/github.com/renstrom/dedent/dedent.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/vendor/github.com/renstrom/dedent/dedent.go b/vendor/github.com/renstrom/dedent/dedent.go new file mode 100644 index 000000000..f58dc47d5 --- /dev/null +++ b/vendor/github.com/renstrom/dedent/dedent.go @@ -0,0 +1,56 @@ +package dedent + +import ( + "regexp" + "strings" +) + +var whitespaceOnly = regexp.MustCompile("(?m)^[ \t]+$") +var leadingWhitespace = regexp.MustCompile("(?m)(^[ \t]*)") + +// Dedent removes any common leading whitespace from every line in s. +// +// This can be used to make multiline strings to line up with the left edge of +// the display, while still presenting them in the source code in indented +// form. +func Dedent(s string) string { + s = whitespaceOnly.ReplaceAllString(s, "") + margin := findMargin(s) + if len(margin) == 0 { + return s + } + return regexp.MustCompile("(?m)^"+margin).ReplaceAllString(s, "") +} + +// Look for the longest leading string of spaces and tabs common to all lines. +func findMargin(s string) string { + var margin string + + indents := leadingWhitespace.FindAllString(s, -1) + numIndents := len(indents) + for i, indent := range indents { + // Don't use last row if it is empty + if i == numIndents-1 && indent == "" { + break + } + + if margin == "" { + margin = indent + } else if strings.HasPrefix(indent, margin) { + // Current line more deeply indented than previous winner: + // no change (previous winner is still on top). + continue + } else if strings.HasPrefix(margin, indent) { + // Current line consistent with and no deeper than previous winner: + // it's the new winner. + margin = indent + } else { + // Current line and previous winner have no common whitespace: + // there is no margin. + margin = "" + break + } + } + + return margin +} |