summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/vendor/github.com/ryanuber/columnize
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/vendor/github.com/ryanuber/columnize')
-rw-r--r--vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/vendor/github.com/ryanuber/columnize/LICENSE20
-rw-r--r--vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/vendor/github.com/ryanuber/columnize/README.md69
-rw-r--r--vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/vendor/github.com/ryanuber/columnize/columnize.go178
3 files changed, 267 insertions, 0 deletions
diff --git a/vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/vendor/github.com/ryanuber/columnize/LICENSE b/vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/vendor/github.com/ryanuber/columnize/LICENSE
new file mode 100644
index 000000000..b9c0e2b68
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/vendor/github.com/ryanuber/columnize/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2016 Ryan Uber
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/vendor/github.com/ryanuber/columnize/README.md b/vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/vendor/github.com/ryanuber/columnize/README.md
new file mode 100644
index 000000000..e47634fc6
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/vendor/github.com/ryanuber/columnize/README.md
@@ -0,0 +1,69 @@
+Columnize
+=========
+
+Easy column-formatted output for golang
+
+[![Build Status](https://travis-ci.org/ryanuber/columnize.svg)](https://travis-ci.org/ryanuber/columnize)
+[![GoDoc](https://godoc.org/github.com/ryanuber/columnize?status.svg)](https://godoc.org/github.com/ryanuber/columnize)
+
+Columnize is a really small Go package that makes building CLI's a little bit
+easier. In some CLI designs, you want to output a number similar items in a
+human-readable way with nicely aligned columns. However, figuring out how wide
+to make each column is a boring problem to solve and eats your valuable time.
+
+Here is an example:
+
+```go
+package main
+
+import (
+ "fmt"
+ "github.com/ryanuber/columnize"
+)
+
+func main() {
+ output := []string{
+ "Name | Gender | Age",
+ "Bob | Male | 38",
+ "Sally | Female | 26",
+ }
+ result := columnize.SimpleFormat(output)
+ fmt.Println(result)
+}
+```
+
+As you can see, you just pass in a list of strings. And the result:
+
+```
+Name Gender Age
+Bob Male 38
+Sally Female 26
+```
+
+Columnize is tolerant of missing or empty fields, or even empty lines, so
+passing in extra lines for spacing should show up as you would expect.
+
+Configuration
+=============
+
+Columnize is configured using a `Config`, which can be obtained by calling the
+`DefaultConfig()` method. You can then tweak the settings in the resulting
+`Config`:
+
+```
+config := columnize.DefaultConfig()
+config.Delim = "|"
+config.Glue = " "
+config.Prefix = ""
+config.Empty = ""
+```
+
+* `Delim` is the string by which columns of **input** are delimited
+* `Glue` is the string by which columns of **output** are delimited
+* `Prefix` is a string by which each line of **output** is prefixed
+* `Empty` is a string used to replace blank values found in output
+
+You can then pass the `Config` in using the `Format` method (signature below) to
+have text formatted to your liking.
+
+See the [godoc](https://godoc.org/github.com/ryanuber/columnize) page for usage.
diff --git a/vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/vendor/github.com/ryanuber/columnize/columnize.go b/vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/vendor/github.com/ryanuber/columnize/columnize.go
new file mode 100644
index 000000000..bff014fac
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-sockaddr/cmd/sockaddr/vendor/github.com/ryanuber/columnize/columnize.go
@@ -0,0 +1,178 @@
+package columnize
+
+import (
+ "bytes"
+ "fmt"
+ "strings"
+)
+
+// Config can be used to tune certain parameters which affect the way
+// in which Columnize will format output text.
+type Config struct {
+ // The string by which the lines of input will be split.
+ Delim string
+
+ // The string by which columns of output will be separated.
+ Glue string
+
+ // The string by which columns of output will be prefixed.
+ Prefix string
+
+ // A replacement string to replace empty fields
+ Empty string
+}
+
+// DefaultConfig returns a *Config with default values.
+func DefaultConfig() *Config {
+ return &Config{
+ Delim: "|",
+ Glue: " ",
+ Prefix: "",
+ Empty: "",
+ }
+}
+
+// MergeConfig merges two config objects together and returns the resulting
+// configuration. Values from the right take precedence over the left side.
+func MergeConfig(a, b *Config) *Config {
+ var result Config = *a
+
+ // Return quickly if either side was nil
+ if a == nil || b == nil {
+ return &result
+ }
+
+ if b.Delim != "" {
+ result.Delim = b.Delim
+ }
+ if b.Glue != "" {
+ result.Glue = b.Glue
+ }
+ if b.Prefix != "" {
+ result.Prefix = b.Prefix
+ }
+ if b.Empty != "" {
+ result.Empty = b.Empty
+ }
+
+ return &result
+}
+
+// stringFormat, given a set of column widths and the number of columns in
+// the current line, returns a sprintf-style format string which can be used
+// to print output aligned properly with other lines using the same widths set.
+func stringFormat(c *Config, widths []int, columns int) string {
+ // Create the buffer with an estimate of the length
+ buf := bytes.NewBuffer(make([]byte, 0, (6+len(c.Glue))*columns))
+
+ // Start with the prefix, if any was given. The buffer will not return an
+ // error so it does not need to be handled
+ buf.WriteString(c.Prefix)
+
+ // Create the format string from the discovered widths
+ for i := 0; i < columns && i < len(widths); i++ {
+ if i == columns-1 {
+ buf.WriteString("%s\n")
+ } else {
+ fmt.Fprintf(buf, "%%-%ds%s", widths[i], c.Glue)
+ }
+ }
+ return buf.String()
+}
+
+// elementsFromLine returns a list of elements, each representing a single
+// item which will belong to a column of output.
+func elementsFromLine(config *Config, line string) []interface{} {
+ separated := strings.Split(line, config.Delim)
+ elements := make([]interface{}, len(separated))
+ for i, field := range separated {
+ value := strings.TrimSpace(field)
+
+ // Apply the empty value, if configured.
+ if value == "" && config.Empty != "" {
+ value = config.Empty
+ }
+ elements[i] = value
+ }
+ return elements
+}
+
+// runeLen calculates the number of visible "characters" in a string
+func runeLen(s string) int {
+ l := 0
+ for _ = range s {
+ l++
+ }
+ return l
+}
+
+// widthsFromLines examines a list of strings and determines how wide each
+// column should be considering all of the elements that need to be printed
+// within it.
+func widthsFromLines(config *Config, lines []string) []int {
+ widths := make([]int, 0, 8)
+
+ for _, line := range lines {
+ elems := elementsFromLine(config, line)
+ for i := 0; i < len(elems); i++ {
+ l := runeLen(elems[i].(string))
+ if len(widths) <= i {
+ widths = append(widths, l)
+ } else if widths[i] < l {
+ widths[i] = l
+ }
+ }
+ }
+ return widths
+}
+
+// Format is the public-facing interface that takes a list of strings and
+// returns nicely aligned column-formatted text.
+func Format(lines []string, config *Config) string {
+ conf := MergeConfig(DefaultConfig(), config)
+ widths := widthsFromLines(conf, lines)
+
+ // Estimate the buffer size
+ glueSize := len(conf.Glue)
+ var size int
+ for _, w := range widths {
+ size += w + glueSize
+ }
+ size *= len(lines)
+
+ // Create the buffer
+ buf := bytes.NewBuffer(make([]byte, 0, size))
+
+ // Create a cache for the string formats
+ fmtCache := make(map[int]string, 16)
+
+ // Create the formatted output using the format string
+ for _, line := range lines {
+ elems := elementsFromLine(conf, line)
+
+ // Get the string format using cache
+ numElems := len(elems)
+ stringfmt, ok := fmtCache[numElems]
+ if !ok {
+ stringfmt = stringFormat(conf, widths, numElems)
+ fmtCache[numElems] = stringfmt
+ }
+
+ fmt.Fprintf(buf, stringfmt, elems...)
+ }
+
+ // Get the string result
+ result := buf.String()
+
+ // Remove trailing newline without removing leading/trailing space
+ if n := len(result); n > 0 && result[n-1] == '\n' {
+ result = result[:n-1]
+ }
+
+ return result
+}
+
+// SimpleFormat is a convenience function to format text with the defaults.
+func SimpleFormat(lines []string) string {
+ return Format(lines, nil)
+}