summaryrefslogtreecommitdiff
path: root/vendor/k8s.io/kubernetes/third_party/forked/golang
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/k8s.io/kubernetes/third_party/forked/golang')
-rw-r--r--vendor/k8s.io/kubernetes/third_party/forked/golang/LICENSE27
-rw-r--r--vendor/k8s.io/kubernetes/third_party/forked/golang/PATENTS22
-rw-r--r--vendor/k8s.io/kubernetes/third_party/forked/golang/expansion/expand.go102
3 files changed, 151 insertions, 0 deletions
diff --git a/vendor/k8s.io/kubernetes/third_party/forked/golang/LICENSE b/vendor/k8s.io/kubernetes/third_party/forked/golang/LICENSE
new file mode 100644
index 000000000..744875676
--- /dev/null
+++ b/vendor/k8s.io/kubernetes/third_party/forked/golang/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2012 The Go Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/k8s.io/kubernetes/third_party/forked/golang/PATENTS b/vendor/k8s.io/kubernetes/third_party/forked/golang/PATENTS
new file mode 100644
index 000000000..733099041
--- /dev/null
+++ b/vendor/k8s.io/kubernetes/third_party/forked/golang/PATENTS
@@ -0,0 +1,22 @@
+Additional IP Rights Grant (Patents)
+
+"This implementation" means the copyrightable works distributed by
+Google as part of the Go project.
+
+Google hereby grants to You a perpetual, worldwide, non-exclusive,
+no-charge, royalty-free, irrevocable (except as stated in this section)
+patent license to make, have made, use, offer to sell, sell, import,
+transfer and otherwise run, modify and propagate the contents of this
+implementation of Go, where such license applies only to those patent
+claims, both currently owned or controlled by Google and acquired in
+the future, licensable by Google that are necessarily infringed by this
+implementation of Go. This grant does not include claims that would be
+infringed only as a consequence of further modification of this
+implementation. If you or your agent or exclusive licensee institute or
+order or agree to the institution of patent litigation against any
+entity (including a cross-claim or counterclaim in a lawsuit) alleging
+that this implementation of Go or any code incorporated within this
+implementation of Go constitutes direct or contributory patent
+infringement, or inducement of patent infringement, then any patent
+rights granted to you under this License for this implementation of Go
+shall terminate as of the date such litigation is filed.
diff --git a/vendor/k8s.io/kubernetes/third_party/forked/golang/expansion/expand.go b/vendor/k8s.io/kubernetes/third_party/forked/golang/expansion/expand.go
new file mode 100644
index 000000000..6bf0ea8ce
--- /dev/null
+++ b/vendor/k8s.io/kubernetes/third_party/forked/golang/expansion/expand.go
@@ -0,0 +1,102 @@
+package expansion
+
+import (
+ "bytes"
+)
+
+const (
+ operator = '$'
+ referenceOpener = '('
+ referenceCloser = ')'
+)
+
+// syntaxWrap returns the input string wrapped by the expansion syntax.
+func syntaxWrap(input string) string {
+ return string(operator) + string(referenceOpener) + input + string(referenceCloser)
+}
+
+// MappingFuncFor returns a mapping function for use with Expand that
+// implements the expansion semantics defined in the expansion spec; it
+// returns the input string wrapped in the expansion syntax if no mapping
+// for the input is found.
+func MappingFuncFor(context ...map[string]string) func(string) string {
+ return func(input string) string {
+ for _, vars := range context {
+ val, ok := vars[input]
+ if ok {
+ return val
+ }
+ }
+
+ return syntaxWrap(input)
+ }
+}
+
+// Expand replaces variable references in the input string according to
+// the expansion spec using the given mapping function to resolve the
+// values of variables.
+func Expand(input string, mapping func(string) string) string {
+ var buf bytes.Buffer
+ checkpoint := 0
+ for cursor := 0; cursor < len(input); cursor++ {
+ if input[cursor] == operator && cursor+1 < len(input) {
+ // Copy the portion of the input string since the last
+ // checkpoint into the buffer
+ buf.WriteString(input[checkpoint:cursor])
+
+ // Attempt to read the variable name as defined by the
+ // syntax from the input string
+ read, isVar, advance := tryReadVariableName(input[cursor+1:])
+
+ if isVar {
+ // We were able to read a variable name correctly;
+ // apply the mapping to the variable name and copy the
+ // bytes into the buffer
+ buf.WriteString(mapping(read))
+ } else {
+ // Not a variable name; copy the read bytes into the buffer
+ buf.WriteString(read)
+ }
+
+ // Advance the cursor in the input string to account for
+ // bytes consumed to read the variable name expression
+ cursor += advance
+
+ // Advance the checkpoint in the input string
+ checkpoint = cursor + 1
+ }
+ }
+
+ // Return the buffer and any remaining unwritten bytes in the
+ // input string.
+ return buf.String() + input[checkpoint:]
+}
+
+// tryReadVariableName attempts to read a variable name from the input
+// string and returns the content read from the input, whether that content
+// represents a variable name to perform mapping on, and the number of bytes
+// consumed in the input string.
+//
+// The input string is assumed not to contain the initial operator.
+func tryReadVariableName(input string) (string, bool, int) {
+ switch input[0] {
+ case operator:
+ // Escaped operator; return it.
+ return input[0:1], false, 1
+ case referenceOpener:
+ // Scan to expression closer
+ for i := 1; i < len(input); i++ {
+ if input[i] == referenceCloser {
+ return input[1:i], true, i + 1
+ }
+ }
+
+ // Incomplete reference; return it.
+ return string(operator) + string(referenceOpener), false, 1
+ default:
+ // Not the beginning of an expression, ie, an operator
+ // that doesn't begin an expression. Return the operator
+ // and the first rune in the string.
+ return (string(operator) + string(input[0])), false, 1
+ }
+}