mirror of
				https://github.com/jesseduffield/lazygit.git
				synced 2025-10-30 23:57:43 +02:00 
			
		
		
		
	Switched back to github.com/mgutz/str instaid of a copy of ToArgv
This commit is contained in:
		| @@ -11,6 +11,7 @@ import ( | ||||
| 	"unicode/utf8" | ||||
|  | ||||
| 	"github.com/kr/pty" | ||||
| 	"github.com/mgutz/str" | ||||
| ) | ||||
|  | ||||
| // RunCommandWithOutputLiveWrapper runs a command and return every word that gets written in stdout | ||||
| @@ -21,7 +22,7 @@ import ( | ||||
| func RunCommandWithOutputLiveWrapper(c *OSCommand, command string, output func(string) string) (errorMessage string, codeError error) { | ||||
| 	cmdOutput := []string{} | ||||
|  | ||||
| 	splitCmd := ToArgv(command) | ||||
| 	splitCmd := str.ToArgv(command) | ||||
| 	cmd := exec.Command(splitCmd[0], splitCmd[1:]...) | ||||
|  | ||||
| 	cmd.Env = os.Environ() | ||||
|   | ||||
| @@ -9,6 +9,7 @@ import ( | ||||
|  | ||||
| 	"github.com/jesseduffield/lazygit/pkg/config" | ||||
| 	"github.com/jesseduffield/lazygit/pkg/utils" | ||||
| 	"github.com/mgutz/str" | ||||
| 	"github.com/sirupsen/logrus" | ||||
| 	gitconfig "github.com/tcnksm/go-gitconfig" | ||||
| ) | ||||
| @@ -49,7 +50,7 @@ func NewOSCommand(log *logrus.Entry, config config.AppConfigurer) *OSCommand { | ||||
| // RunCommandWithOutput wrapper around commands returning their output and error | ||||
| func (c *OSCommand) RunCommandWithOutput(command string) (string, error) { | ||||
| 	c.Log.WithField("command", command).Info("RunCommand") | ||||
| 	splitCmd := ToArgv(command) | ||||
| 	splitCmd := str.ToArgv(command) | ||||
| 	c.Log.Info(splitCmd) | ||||
| 	return sanitisedCommandOutput( | ||||
| 		c.command(splitCmd[0], splitCmd[1:]...).CombinedOutput(), | ||||
|   | ||||
| @@ -1,114 +0,0 @@ | ||||
| // ToArgv is copied from github.com/mgutz/str | ||||
|  | ||||
| package commands | ||||
|  | ||||
| import "runtime" | ||||
|  | ||||
| // ToArgv converts string s into an argv for exec. | ||||
| func ToArgv(s string) []string { | ||||
| 	const ( | ||||
| 		InArg = iota | ||||
| 		InArgQuote | ||||
| 		OutOfArg | ||||
| 	) | ||||
| 	currentState := OutOfArg | ||||
| 	currentQuoteChar := "\x00" // to distinguish between ' and " quotations | ||||
| 	// this allows to use "foo'bar" | ||||
| 	currentArg := "" | ||||
| 	argv := []string{} | ||||
|  | ||||
| 	isQuote := func(c string) bool { | ||||
| 		return c == `"` || c == `'` | ||||
| 	} | ||||
|  | ||||
| 	isEscape := func(c string) bool { | ||||
| 		return c == `\` | ||||
| 	} | ||||
|  | ||||
| 	isWhitespace := func(c string) bool { | ||||
| 		return c == " " || c == "\t" | ||||
| 	} | ||||
|  | ||||
| 	L := len(s) | ||||
| 	for i := 0; i < L; i++ { | ||||
| 		c := s[i : i+1] | ||||
|  | ||||
| 		//fmt.Printf("c %s state %v arg %s argv %v i %d\n", c, currentState, currentArg, args, i) | ||||
| 		if isQuote(c) { | ||||
| 			switch currentState { | ||||
| 			case OutOfArg: | ||||
| 				currentArg = "" | ||||
| 				fallthrough | ||||
| 			case InArg: | ||||
| 				currentState = InArgQuote | ||||
| 				currentQuoteChar = c | ||||
|  | ||||
| 			case InArgQuote: | ||||
| 				if c == currentQuoteChar { | ||||
| 					currentState = InArg | ||||
| 				} else { | ||||
| 					currentArg += c | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 		} else if isWhitespace(c) { | ||||
| 			switch currentState { | ||||
| 			case InArg: | ||||
| 				argv = append(argv, currentArg) | ||||
| 				currentState = OutOfArg | ||||
| 			case InArgQuote: | ||||
| 				currentArg += c | ||||
| 			case OutOfArg: | ||||
| 				// nothing | ||||
| 			} | ||||
|  | ||||
| 		} else if isEscape(c) { | ||||
| 			switch currentState { | ||||
| 			case OutOfArg: | ||||
| 				currentArg = "" | ||||
| 				currentState = InArg | ||||
| 				fallthrough | ||||
| 			case InArg: | ||||
| 				fallthrough | ||||
| 			case InArgQuote: | ||||
| 				if i == L-1 { | ||||
| 					if runtime.GOOS == "windows" { | ||||
| 						// just add \ to end for windows | ||||
| 						currentArg += c | ||||
| 					} else { | ||||
| 						panic("Escape character at end string") | ||||
| 					} | ||||
| 				} else { | ||||
| 					if runtime.GOOS == "windows" { | ||||
| 						peek := s[i+1 : i+2] | ||||
| 						if peek != `"` { | ||||
| 							currentArg += c | ||||
| 						} | ||||
| 					} else { | ||||
| 						i++ | ||||
| 						c = s[i : i+1] | ||||
| 						currentArg += c | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} else { | ||||
| 			switch currentState { | ||||
| 			case InArg, InArgQuote: | ||||
| 				currentArg += c | ||||
|  | ||||
| 			case OutOfArg: | ||||
| 				currentArg = "" | ||||
| 				currentArg += c | ||||
| 				currentState = InArg | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if currentState == InArg { | ||||
| 		argv = append(argv, currentArg) | ||||
| 	} else if currentState == InArgQuote { | ||||
| 		panic("Starting quote has no ending quote.") | ||||
| 	} | ||||
|  | ||||
| 	return argv | ||||
| } | ||||
							
								
								
									
										5
									
								
								vendor/github.com/mgutz/str/CREDITS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/mgutz/str/CREDITS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| *   [string.js](http://stringjs.com) - I contributed several | ||||
|     functions to this project. | ||||
|  | ||||
| *   [bbgen.net](http://bbgen.net/blog/2011/06/string-to-argc-argv/) | ||||
|  | ||||
							
								
								
									
										21
									
								
								vendor/github.com/mgutz/str/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/mgutz/str/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| The MIT License (MIT) | ||||
|  | ||||
| Copyright (c) 2013-2014 Mario L. Gutierrez <mario@mgutz.com> | ||||
|  | ||||
| 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. | ||||
							
								
								
									
										649
									
								
								vendor/github.com/mgutz/str/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										649
									
								
								vendor/github.com/mgutz/str/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,649 @@ | ||||
| # str | ||||
|  | ||||
|     import "github.com/mgutz/str" | ||||
|  | ||||
| Package str is a comprehensive set of string functions to build more Go | ||||
| awesomeness. Str complements Go's standard packages and does not duplicate | ||||
| functionality found in `strings` or `strconv`. | ||||
|  | ||||
| Str is based on plain functions instead of object-based methods, consistent with | ||||
| Go standard string packages. | ||||
|  | ||||
|     str.Between("<a>foo</a>", "<a>", "</a>") == "foo" | ||||
|  | ||||
| Str supports pipelining instead of chaining | ||||
|  | ||||
|     s := str.Pipe("\nabcdef\n", Clean, BetweenF("a", "f"), ChompLeftF("bc")) | ||||
|  | ||||
| User-defined filters can be added to the pipeline by inserting a function or | ||||
| closure that returns a function with this signature | ||||
|  | ||||
|     func(string) string | ||||
|  | ||||
| ### Index | ||||
|  | ||||
| * [Variables](#variables) | ||||
| * [func  Between](#func | ||||
| [godoc](https://godoc.org/github.com/mgutz/str) | ||||
| between) | ||||
| * [func  BetweenF](#func--betweenf) | ||||
| * [func  Camelize](#func--camelize) | ||||
| * [func  Capitalize](#func--capitalize) | ||||
| * [func  CharAt](#func--charat) | ||||
| * [func  CharAtF](#func--charatf) | ||||
| * [func  ChompLeft](#func--chompleft) | ||||
| * [func  ChompLeftF](#func--chompleftf) | ||||
| * [func  ChompRight](#func--chompright) | ||||
| * [func  ChompRightF](#func--chomprightf) | ||||
| * [func  Classify](#func--classify) | ||||
| * [func  ClassifyF](#func--classifyf) | ||||
| * [func  Clean](#func--clean) | ||||
| * [func  Dasherize](#func--dasherize) | ||||
| * [func  DecodeHTMLEntities](#func--decodehtmlentities) | ||||
| * [func  EnsurePrefix](#func--ensureprefix) | ||||
| * [func  EnsurePrefixF](#func--ensureprefixf) | ||||
| * [func  EnsureSuffix](#func--ensuresuffix) | ||||
| * [func  EnsureSuffixF](#func--ensuresuffixf) | ||||
| * [func  EscapeHTML](#func--escapehtml) | ||||
| * [func  Humanize](#func--humanize) | ||||
| * [func  Iif](#func--iif) | ||||
| * [func  IndexOf](#func--indexof) | ||||
| * [func  IsAlpha](#func--isalpha) | ||||
| * [func  IsAlphaNumeric](#func--isalphanumeric) | ||||
| * [func  IsEmpty](#func--isempty) | ||||
| * [func  IsLower](#func--islower) | ||||
| * [func  IsNumeric](#func--isnumeric) | ||||
| * [func  IsUpper](#func--isupper) | ||||
| * [func  Left](#func--left) | ||||
| * [func  LeftF](#func--leftf) | ||||
| * [func  LeftOf](#func--leftof) | ||||
| * [func  Letters](#func--letters) | ||||
| * [func  Lines](#func--lines) | ||||
| * [func  Map](#func--map) | ||||
| * [func  Match](#func--match) | ||||
| * [func  Pad](#func--pad) | ||||
| * [func  PadF](#func--padf) | ||||
| * [func  PadLeft](#func--padleft) | ||||
| * [func  PadLeftF](#func--padleftf) | ||||
| * [func  PadRight](#func--padright) | ||||
| * [func  PadRightF](#func--padrightf) | ||||
| * [func  Pipe](#func--pipe) | ||||
| * [func  QuoteItems](#func--quoteitems) | ||||
| * [func  ReplaceF](#func--replacef) | ||||
| * [func  ReplacePattern](#func--replacepattern) | ||||
| * [func  ReplacePatternF](#func--replacepatternf) | ||||
| * [func  Reverse](#func--reverse) | ||||
| * [func  Right](#func--right) | ||||
| * [func  RightF](#func--rightf) | ||||
| * [func  RightOf](#func--rightof) | ||||
| * [func  SetTemplateDelimiters](#func--settemplatedelimiters) | ||||
| * [func  Slice](#func--slice) | ||||
| * [func  SliceContains](#func--slicecontains) | ||||
| * [func  SliceF](#func--slicef) | ||||
| * [func  SliceIndexOf](#func--sliceindexof) | ||||
| * [func  Slugify](#func--slugify) | ||||
| * [func  StripPunctuation](#func--strippunctuation) | ||||
| * [func  StripTags](#func--striptags) | ||||
| * [func  Substr](#func--substr) | ||||
| * [func  SubstrF](#func--substrf) | ||||
| * [func  Template](#func--template) | ||||
| * [func  TemplateDelimiters](#func--templatedelimiters) | ||||
| * [func  TemplateWithDelimiters](#func--templatewithdelimiters) | ||||
| * [func  ToArgv](#func--toargv) | ||||
| * [func  ToBool](#func--tobool) | ||||
| * [func  ToBoolOr](#func--toboolor) | ||||
| * [func  ToFloat32Or](#func--tofloat32or) | ||||
| * [func  ToFloat64Or](#func--tofloat64or) | ||||
| * [func  ToIntOr](#func--tointor) | ||||
| * [func  Underscore](#func--underscore) | ||||
| * [func  UnescapeHTML](#func--unescapehtml) | ||||
| * [func  WrapHTML](#func--wraphtml) | ||||
| * [func  WrapHTMLF](#func--wraphtmlf) | ||||
|  | ||||
|  | ||||
| #### Variables | ||||
|  | ||||
| ```go | ||||
| var ToFloatOr = ToFloat64Or | ||||
| ``` | ||||
| ToFloatOr parses as a float64 or returns defaultValue. | ||||
|  | ||||
| ```go | ||||
| var Verbose = false | ||||
| ``` | ||||
| Verbose flag enables console output for those functions that have counterparts | ||||
| in Go's excellent stadard packages. | ||||
|  | ||||
| #### func  [Between](#between) | ||||
|  | ||||
| ```go | ||||
| func Between(s, left, right string) string | ||||
| ``` | ||||
| Between extracts a string between left and right strings. | ||||
|  | ||||
| #### func  [BetweenF](#betweenf) | ||||
|  | ||||
| ```go | ||||
| func BetweenF(left, right string) func(string) string | ||||
| ``` | ||||
| BetweenF is the filter form for Between. | ||||
|  | ||||
| #### func  [Camelize](#camelize) | ||||
|  | ||||
| ```go | ||||
| func Camelize(s string) string | ||||
| ``` | ||||
| Camelize return new string which removes any underscores or dashes and convert a | ||||
| string into camel casing. | ||||
|  | ||||
| #### func  [Capitalize](#capitalize) | ||||
|  | ||||
| ```go | ||||
| func Capitalize(s string) string | ||||
| ``` | ||||
| Capitalize uppercases the first char of s and lowercases the rest. | ||||
|  | ||||
| #### func  [CharAt](#charat) | ||||
|  | ||||
| ```go | ||||
| func CharAt(s string, index int) string | ||||
| ``` | ||||
| CharAt returns a string from the character at the specified position. | ||||
|  | ||||
| #### func  [CharAtF](#charatf) | ||||
|  | ||||
| ```go | ||||
| func CharAtF(index int) func(string) string | ||||
| ``` | ||||
| CharAtF is the filter form of CharAt. | ||||
|  | ||||
| #### func  [ChompLeft](#chompleft) | ||||
|  | ||||
| ```go | ||||
| func ChompLeft(s, prefix string) string | ||||
| ``` | ||||
| ChompLeft removes prefix at the start of a string. | ||||
|  | ||||
| #### func  [ChompLeftF](#chompleftf) | ||||
|  | ||||
| ```go | ||||
| func ChompLeftF(prefix string) func(string) string | ||||
| ``` | ||||
| ChompLeftF is the filter form of ChompLeft. | ||||
|  | ||||
| #### func  [ChompRight](#chompright) | ||||
|  | ||||
| ```go | ||||
| func ChompRight(s, suffix string) string | ||||
| ``` | ||||
| ChompRight removes suffix from end of s. | ||||
|  | ||||
| #### func  [ChompRightF](#chomprightf) | ||||
|  | ||||
| ```go | ||||
| func ChompRightF(suffix string) func(string) string | ||||
| ``` | ||||
| ChompRightF is the filter form of ChompRight. | ||||
|  | ||||
| #### func  [Classify](#classify) | ||||
|  | ||||
| ```go | ||||
| func Classify(s string) string | ||||
| ``` | ||||
| Classify returns a camelized string with the first letter upper cased. | ||||
|  | ||||
| #### func  [ClassifyF](#classifyf) | ||||
|  | ||||
| ```go | ||||
| func ClassifyF(s string) func(string) string | ||||
| ``` | ||||
| ClassifyF is the filter form of Classify. | ||||
|  | ||||
| #### func  [Clean](#clean) | ||||
|  | ||||
| ```go | ||||
| func Clean(s string) string | ||||
| ``` | ||||
| Clean compresses all adjacent whitespace to a single space and trims s. | ||||
|  | ||||
| #### func  [Dasherize](#dasherize) | ||||
|  | ||||
| ```go | ||||
| func Dasherize(s string) string | ||||
| ``` | ||||
| Dasherize converts a camel cased string into a string delimited by dashes. | ||||
|  | ||||
| #### func  [DecodeHTMLEntities](#decodehtmlentities) | ||||
|  | ||||
| ```go | ||||
| func DecodeHTMLEntities(s string) string | ||||
| ``` | ||||
| DecodeHTMLEntities decodes HTML entities into their proper string | ||||
| representation. DecodeHTMLEntities is an alias for html.UnescapeString | ||||
|  | ||||
| #### func  [EnsurePrefix](#ensureprefix) | ||||
|  | ||||
| ```go | ||||
| func EnsurePrefix(s, prefix string) string | ||||
| ``` | ||||
| EnsurePrefix ensures s starts with prefix. | ||||
|  | ||||
| #### func  [EnsurePrefixF](#ensureprefixf) | ||||
|  | ||||
| ```go | ||||
| func EnsurePrefixF(prefix string) func(string) string | ||||
| ``` | ||||
| EnsurePrefixF is the filter form of EnsurePrefix. | ||||
|  | ||||
| #### func  [EnsureSuffix](#ensuresuffix) | ||||
|  | ||||
| ```go | ||||
| func EnsureSuffix(s, suffix string) string | ||||
| ``` | ||||
| EnsureSuffix ensures s ends with suffix. | ||||
|  | ||||
| #### func  [EnsureSuffixF](#ensuresuffixf) | ||||
|  | ||||
| ```go | ||||
| func EnsureSuffixF(suffix string) func(string) string | ||||
| ``` | ||||
| EnsureSuffixF is the filter form of EnsureSuffix. | ||||
|  | ||||
| #### func  [EscapeHTML](#escapehtml) | ||||
|  | ||||
| ```go | ||||
| func EscapeHTML(s string) string | ||||
| ``` | ||||
| EscapeHTML is alias for html.EscapeString. | ||||
|  | ||||
| #### func  [Humanize](#humanize) | ||||
|  | ||||
| ```go | ||||
| func Humanize(s string) string | ||||
| ``` | ||||
| Humanize transforms s into a human friendly form. | ||||
|  | ||||
| #### func  [Iif](#iif) | ||||
|  | ||||
| ```go | ||||
| func Iif(condition bool, truthy string, falsey string) string | ||||
| ``` | ||||
| Iif is short for immediate if. If condition is true return truthy else falsey. | ||||
|  | ||||
| #### func  [IndexOf](#indexof) | ||||
|  | ||||
| ```go | ||||
| func IndexOf(s string, needle string, start int) int | ||||
| ``` | ||||
| IndexOf finds the index of needle in s starting from start. | ||||
|  | ||||
| #### func  [IsAlpha](#isalpha) | ||||
|  | ||||
| ```go | ||||
| func IsAlpha(s string) bool | ||||
| ``` | ||||
| IsAlpha returns true if a string contains only letters from ASCII (a-z,A-Z). | ||||
| Other letters from other languages are not supported. | ||||
|  | ||||
| #### func  [IsAlphaNumeric](#isalphanumeric) | ||||
|  | ||||
| ```go | ||||
| func IsAlphaNumeric(s string) bool | ||||
| ``` | ||||
| IsAlphaNumeric returns true if a string contains letters and digits. | ||||
|  | ||||
| #### func  [IsEmpty](#isempty) | ||||
|  | ||||
| ```go | ||||
| func IsEmpty(s string) bool | ||||
| ``` | ||||
| IsEmpty returns true if the string is solely composed of whitespace. | ||||
|  | ||||
| #### func  [IsLower](#islower) | ||||
|  | ||||
| ```go | ||||
| func IsLower(s string) bool | ||||
| ``` | ||||
| IsLower returns true if s comprised of all lower case characters. | ||||
|  | ||||
| #### func  [IsNumeric](#isnumeric) | ||||
|  | ||||
| ```go | ||||
| func IsNumeric(s string) bool | ||||
| ``` | ||||
| IsNumeric returns true if a string contains only digits from 0-9. Other digits | ||||
| not in Latin (such as Arabic) are not currently supported. | ||||
|  | ||||
| #### func  [IsUpper](#isupper) | ||||
|  | ||||
| ```go | ||||
| func IsUpper(s string) bool | ||||
| ``` | ||||
| IsUpper returns true if s contains all upper case chracters. | ||||
|  | ||||
| #### func  [Left](#left) | ||||
|  | ||||
| ```go | ||||
| func Left(s string, n int) string | ||||
| ``` | ||||
| Left returns the left substring of length n. | ||||
|  | ||||
| #### func  [LeftF](#leftf) | ||||
|  | ||||
| ```go | ||||
| func LeftF(n int) func(string) string | ||||
| ``` | ||||
| LeftF is the filter form of Left. | ||||
|  | ||||
| #### func  [LeftOf](#leftof) | ||||
|  | ||||
| ```go | ||||
| func LeftOf(s string, needle string) string | ||||
| ``` | ||||
| LeftOf returns the substring left of needle. | ||||
|  | ||||
| #### func  [Letters](#letters) | ||||
|  | ||||
| ```go | ||||
| func Letters(s string) []string | ||||
| ``` | ||||
| Letters returns an array of runes as strings so it can be indexed into. | ||||
|  | ||||
| #### func  [Lines](#lines) | ||||
|  | ||||
| ```go | ||||
| func Lines(s string) []string | ||||
| ``` | ||||
| Lines convert windows newlines to unix newlines then convert to an Array of | ||||
| lines. | ||||
|  | ||||
| #### func  [Map](#map) | ||||
|  | ||||
| ```go | ||||
| func Map(arr []string, iterator func(string) string) []string | ||||
| ``` | ||||
| Map maps an array's iitem through an iterator. | ||||
|  | ||||
| #### func  [Match](#match) | ||||
|  | ||||
| ```go | ||||
| func Match(s, pattern string) bool | ||||
| ``` | ||||
| Match returns true if patterns matches the string | ||||
|  | ||||
| #### func  [Pad](#pad) | ||||
|  | ||||
| ```go | ||||
| func Pad(s, c string, n int) string | ||||
| ``` | ||||
| Pad pads string s on both sides with c until it has length of n. | ||||
|  | ||||
| #### func  [PadF](#padf) | ||||
|  | ||||
| ```go | ||||
| func PadF(c string, n int) func(string) string | ||||
| ``` | ||||
| PadF is the filter form of Pad. | ||||
|  | ||||
| #### func  [PadLeft](#padleft) | ||||
|  | ||||
| ```go | ||||
| func PadLeft(s, c string, n int) string | ||||
| ``` | ||||
| PadLeft pads s on left side with c until it has length of n. | ||||
|  | ||||
| #### func  [PadLeftF](#padleftf) | ||||
|  | ||||
| ```go | ||||
| func PadLeftF(c string, n int) func(string) string | ||||
| ``` | ||||
| PadLeftF is the filter form of PadLeft. | ||||
|  | ||||
| #### func  [PadRight](#padright) | ||||
|  | ||||
| ```go | ||||
| func PadRight(s, c string, n int) string | ||||
| ``` | ||||
| PadRight pads s on right side with c until it has length of n. | ||||
|  | ||||
| #### func  [PadRightF](#padrightf) | ||||
|  | ||||
| ```go | ||||
| func PadRightF(c string, n int) func(string) string | ||||
| ``` | ||||
| PadRightF is the filter form of Padright | ||||
|  | ||||
| #### func  [Pipe](#pipe) | ||||
|  | ||||
| ```go | ||||
| func Pipe(s string, funcs ...func(string) string) string | ||||
| ``` | ||||
| Pipe pipes s through one or more string filters. | ||||
|  | ||||
| #### func  [QuoteItems](#quoteitems) | ||||
|  | ||||
| ```go | ||||
| func QuoteItems(arr []string) []string | ||||
| ``` | ||||
| QuoteItems quotes all items in array, mostly for debugging. | ||||
|  | ||||
| #### func  [ReplaceF](#replacef) | ||||
|  | ||||
| ```go | ||||
| func ReplaceF(old, new string, n int) func(string) string | ||||
| ``` | ||||
| ReplaceF is the filter form of strings.Replace. | ||||
|  | ||||
| #### func  [ReplacePattern](#replacepattern) | ||||
|  | ||||
| ```go | ||||
| func ReplacePattern(s, pattern, repl string) string | ||||
| ``` | ||||
| ReplacePattern replaces string with regexp string. ReplacePattern returns a copy | ||||
| of src, replacing matches of the Regexp with the replacement string repl. Inside | ||||
| repl, $ signs are interpreted as in Expand, so for instance $1 represents the | ||||
| text of the first submatch. | ||||
|  | ||||
| #### func  [ReplacePatternF](#replacepatternf) | ||||
|  | ||||
| ```go | ||||
| func ReplacePatternF(pattern, repl string) func(string) string | ||||
| ``` | ||||
| ReplacePatternF is the filter form of ReplaceRegexp. | ||||
|  | ||||
| #### func  [Reverse](#reverse) | ||||
|  | ||||
| ```go | ||||
| func Reverse(s string) string | ||||
| ``` | ||||
| Reverse a string | ||||
|  | ||||
| #### func  [Right](#right) | ||||
|  | ||||
| ```go | ||||
| func Right(s string, n int) string | ||||
| ``` | ||||
| Right returns the right substring of length n. | ||||
|  | ||||
| #### func  [RightF](#rightf) | ||||
|  | ||||
| ```go | ||||
| func RightF(n int) func(string) string | ||||
| ``` | ||||
| RightF is the Filter version of Right. | ||||
|  | ||||
| #### func  [RightOf](#rightof) | ||||
|  | ||||
| ```go | ||||
| func RightOf(s string, prefix string) string | ||||
| ``` | ||||
| RightOf returns the substring to the right of prefix. | ||||
|  | ||||
| #### func  [SetTemplateDelimiters](#settemplatedelimiters) | ||||
|  | ||||
| ```go | ||||
| func SetTemplateDelimiters(opening, closing string) | ||||
| ``` | ||||
| SetTemplateDelimiters sets the delimiters for Template function. Defaults to | ||||
| "{{" and "}}" | ||||
|  | ||||
| #### func  [Slice](#slice) | ||||
|  | ||||
| ```go | ||||
| func Slice(s string, start, end int) string | ||||
| ``` | ||||
| Slice slices a string. If end is negative then it is the from the end of the | ||||
| string. | ||||
|  | ||||
| #### func  [SliceContains](#slicecontains) | ||||
|  | ||||
| ```go | ||||
| func SliceContains(slice []string, val string) bool | ||||
| ``` | ||||
| SliceContains determines whether val is an element in slice. | ||||
|  | ||||
| #### func  [SliceF](#slicef) | ||||
|  | ||||
| ```go | ||||
| func SliceF(start, end int) func(string) string | ||||
| ``` | ||||
| SliceF is the filter for Slice. | ||||
|  | ||||
| #### func  [SliceIndexOf](#sliceindexof) | ||||
|  | ||||
| ```go | ||||
| func SliceIndexOf(slice []string, val string) int | ||||
| ``` | ||||
| SliceIndexOf gets the indx of val in slice. Returns -1 if not found. | ||||
|  | ||||
| #### func  [Slugify](#slugify) | ||||
|  | ||||
| ```go | ||||
| func Slugify(s string) string | ||||
| ``` | ||||
| Slugify converts s into a dasherized string suitable for URL segment. | ||||
|  | ||||
| #### func  [StripPunctuation](#strippunctuation) | ||||
|  | ||||
| ```go | ||||
| func StripPunctuation(s string) string | ||||
| ``` | ||||
| StripPunctuation strips puncation from string. | ||||
|  | ||||
| #### func  [StripTags](#striptags) | ||||
|  | ||||
| ```go | ||||
| func StripTags(s string, tags ...string) string | ||||
| ``` | ||||
| StripTags strips all of the html tags or tags specified by the parameters | ||||
|  | ||||
| #### func  [Substr](#substr) | ||||
|  | ||||
| ```go | ||||
| func Substr(s string, index int, n int) string | ||||
| ``` | ||||
| Substr returns a substring of s starting at index of length n. | ||||
|  | ||||
| #### func  [SubstrF](#substrf) | ||||
|  | ||||
| ```go | ||||
| func SubstrF(index, n int) func(string) string | ||||
| ``` | ||||
| SubstrF is the filter form of Substr. | ||||
|  | ||||
| #### func  [Template](#template) | ||||
|  | ||||
| ```go | ||||
| func Template(s string, values map[string]interface{}) string | ||||
| ``` | ||||
| Template is a string template which replaces template placeholders delimited by | ||||
| "{{" and "}}" with values from map. The global delimiters may be set with | ||||
| SetTemplateDelimiters. | ||||
|  | ||||
| #### func  [TemplateDelimiters](#templatedelimiters) | ||||
|  | ||||
| ```go | ||||
| func TemplateDelimiters() (opening string, closing string) | ||||
| ``` | ||||
| TemplateDelimiters is the getter for the opening and closing delimiters for | ||||
| Template. | ||||
|  | ||||
| #### func  [TemplateWithDelimiters](#templatewithdelimiters) | ||||
|  | ||||
| ```go | ||||
| func TemplateWithDelimiters(s string, values map[string]interface{}, opening, closing string) string | ||||
| ``` | ||||
| TemplateWithDelimiters is string template with user-defineable opening and | ||||
| closing delimiters. | ||||
|  | ||||
| #### func  [ToArgv](#toargv) | ||||
|  | ||||
| ```go | ||||
| func ToArgv(s string) []string | ||||
| ``` | ||||
| ToArgv converts string s into an argv for exec. | ||||
|  | ||||
| #### func  [ToBool](#tobool) | ||||
|  | ||||
| ```go | ||||
| func ToBool(s string) bool | ||||
| ``` | ||||
| ToBool fuzzily converts truthy values. | ||||
|  | ||||
| #### func  [ToBoolOr](#toboolor) | ||||
|  | ||||
| ```go | ||||
| func ToBoolOr(s string, defaultValue bool) bool | ||||
| ``` | ||||
| ToBoolOr parses s as a bool or returns defaultValue. | ||||
|  | ||||
| #### func  [ToFloat32Or](#tofloat32or) | ||||
|  | ||||
| ```go | ||||
| func ToFloat32Or(s string, defaultValue float32) float32 | ||||
| ``` | ||||
| ToFloat32Or parses as a float32 or returns defaultValue on error. | ||||
|  | ||||
| #### func  [ToFloat64Or](#tofloat64or) | ||||
|  | ||||
| ```go | ||||
| func ToFloat64Or(s string, defaultValue float64) float64 | ||||
| ``` | ||||
| ToFloat64Or parses s as a float64 or returns defaultValue. | ||||
|  | ||||
| #### func  [ToIntOr](#tointor) | ||||
|  | ||||
| ```go | ||||
| func ToIntOr(s string, defaultValue int) int | ||||
| ``` | ||||
| ToIntOr parses s as an int or returns defaultValue. | ||||
|  | ||||
| #### func  [Underscore](#underscore) | ||||
|  | ||||
| ```go | ||||
| func Underscore(s string) string | ||||
| ``` | ||||
| Underscore returns converted camel cased string into a string delimited by | ||||
| underscores. | ||||
|  | ||||
| #### func  [UnescapeHTML](#unescapehtml) | ||||
|  | ||||
| ```go | ||||
| func UnescapeHTML(s string) string | ||||
| ``` | ||||
| UnescapeHTML is an alias for html.UnescapeString. | ||||
|  | ||||
| #### func  [WrapHTML](#wraphtml) | ||||
|  | ||||
| ```go | ||||
| func WrapHTML(s string, tag string, attrs map[string]string) string | ||||
| ``` | ||||
| WrapHTML wraps s within HTML tag having attributes attrs. Note, WrapHTML does | ||||
| not escape s value. | ||||
|  | ||||
| #### func  [WrapHTMLF](#wraphtmlf) | ||||
|  | ||||
| ```go | ||||
| func WrapHTMLF(tag string, attrs map[string]string) func(string) string | ||||
| ``` | ||||
| WrapHTMLF is the filter form of WrapHTML. | ||||
							
								
								
									
										1
									
								
								vendor/github.com/mgutz/str/VERSION
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/mgutz/str/VERSION
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| 1.1.0 | ||||
							
								
								
									
										19
									
								
								vendor/github.com/mgutz/str/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								vendor/github.com/mgutz/str/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| // Package str is a comprehensive set of string functions to build more | ||||
| // Go awesomeness. Str complements Go's standard packages and does not duplicate | ||||
| // functionality found in `strings` or  `strconv`. | ||||
| // | ||||
| // Str is based on plain functions instead of object-based methods, | ||||
| // consistent with Go standard string packages. | ||||
| // | ||||
| //      str.Between("<a>foo</a>", "<a>", "</a>") == "foo" | ||||
| // | ||||
| // Str supports pipelining instead of chaining | ||||
| // | ||||
| //      s := str.Pipe("\nabcdef\n", Clean, BetweenF("a", "f"), ChompLeftF("bc")) | ||||
| // | ||||
| // User-defined filters can be added to the pipeline by inserting a function | ||||
| // or closure that returns a function with this signature | ||||
| // | ||||
| //      func(string) string | ||||
| // | ||||
| package str | ||||
							
								
								
									
										337
									
								
								vendor/github.com/mgutz/str/funcsAO.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										337
									
								
								vendor/github.com/mgutz/str/funcsAO.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,337 @@ | ||||
| package str | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"html" | ||||
| 	//"log" | ||||
| 	"regexp" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| // Verbose flag enables console output for those functions that have | ||||
| // counterparts in Go's excellent stadard packages. | ||||
| var Verbose = false | ||||
| var templateOpen = "{{" | ||||
| var templateClose = "}}" | ||||
|  | ||||
| var beginEndSpacesRe = regexp.MustCompile("^\\s+|\\s+$") | ||||
| var camelizeRe = regexp.MustCompile(`(\-|_|\s)+(.)?`) | ||||
| var camelizeRe2 = regexp.MustCompile(`(\-|_|\s)+`) | ||||
| var capitalsRe = regexp.MustCompile("([A-Z])") | ||||
| var dashSpaceRe = regexp.MustCompile(`[-\s]+`) | ||||
| var dashesRe = regexp.MustCompile("-+") | ||||
| var isAlphaNumericRe = regexp.MustCompile(`[^0-9a-z\xC0-\xFF]`) | ||||
| var isAlphaRe = regexp.MustCompile(`[^a-z\xC0-\xFF]`) | ||||
| var nWhitespaceRe = regexp.MustCompile(`\s+`) | ||||
| var notDigitsRe = regexp.MustCompile(`[^0-9]`) | ||||
| var slugifyRe = regexp.MustCompile(`[^\w\s\-]`) | ||||
| var spaceUnderscoreRe = regexp.MustCompile("[_\\s]+") | ||||
| var spacesRe = regexp.MustCompile("[\\s\\xA0]+") | ||||
| var stripPuncRe = regexp.MustCompile(`[^\w\s]|_`) | ||||
| var templateRe = regexp.MustCompile(`([\-\[\]()*\s])`) | ||||
| var templateRe2 = regexp.MustCompile(`\$`) | ||||
| var underscoreRe = regexp.MustCompile(`([a-z\d])([A-Z]+)`) | ||||
| var whitespaceRe = regexp.MustCompile(`^[\s\xa0]*$`) | ||||
|  | ||||
| func min(a, b int) int { | ||||
| 	if a < b { | ||||
| 		return a | ||||
| 	} | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| func max(a, b int) int { | ||||
| 	if a > b { | ||||
| 		return a | ||||
| 	} | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| // Between extracts a string between left and right strings. | ||||
| func Between(s, left, right string) string { | ||||
| 	l := len(left) | ||||
| 	startPos := strings.Index(s, left) | ||||
| 	if startPos < 0 { | ||||
| 		return "" | ||||
| 	} | ||||
| 	endPos := IndexOf(s, right, startPos+l) | ||||
| 	//log.Printf("%s: left %s right %s start %d end %d", s, left, right, startPos+l, endPos) | ||||
| 	if endPos < 0 { | ||||
| 		return "" | ||||
| 	} else if right == "" { | ||||
| 		return s[endPos:] | ||||
| 	} else { | ||||
| 		return s[startPos+l : endPos] | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // BetweenF is the filter form for Between. | ||||
| func BetweenF(left, right string) func(string) string { | ||||
| 	return func(s string) string { | ||||
| 		return Between(s, left, right) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Camelize return new string which removes any underscores or dashes and convert a string into camel casing. | ||||
| func Camelize(s string) string { | ||||
| 	return camelizeRe.ReplaceAllStringFunc(s, func(val string) string { | ||||
| 		val = strings.ToUpper(val) | ||||
| 		val = camelizeRe2.ReplaceAllString(val, "") | ||||
| 		return val | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| // Capitalize uppercases the first char of s and lowercases the rest. | ||||
| func Capitalize(s string) string { | ||||
| 	return strings.ToUpper(s[0:1]) + strings.ToLower(s[1:]) | ||||
| } | ||||
|  | ||||
| // CharAt returns a string from the character at the specified position. | ||||
| func CharAt(s string, index int) string { | ||||
| 	l := len(s) | ||||
| 	shortcut := index < 0 || index > l-1 || l == 0 | ||||
| 	if shortcut { | ||||
| 		return "" | ||||
| 	} | ||||
| 	return s[index : index+1] | ||||
| } | ||||
|  | ||||
| // CharAtF is the filter form of CharAt. | ||||
| func CharAtF(index int) func(string) string { | ||||
| 	return func(s string) string { | ||||
| 		return CharAt(s, index) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // ChompLeft removes prefix at the start of a string. | ||||
| func ChompLeft(s, prefix string) string { | ||||
| 	if strings.HasPrefix(s, prefix) { | ||||
| 		return s[len(prefix):] | ||||
| 	} | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // ChompLeftF is the filter form of ChompLeft. | ||||
| func ChompLeftF(prefix string) func(string) string { | ||||
| 	return func(s string) string { | ||||
| 		return ChompLeft(s, prefix) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // ChompRight removes suffix from end of s. | ||||
| func ChompRight(s, suffix string) string { | ||||
| 	if strings.HasSuffix(s, suffix) { | ||||
| 		return s[:len(s)-len(suffix)] | ||||
| 	} | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // ChompRightF is the filter form of ChompRight. | ||||
| func ChompRightF(suffix string) func(string) string { | ||||
| 	return func(s string) string { | ||||
| 		return ChompRight(s, suffix) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Classify returns a camelized string with the first letter upper cased. | ||||
| func Classify(s string) string { | ||||
| 	return Camelize("-" + s) | ||||
| } | ||||
|  | ||||
| // ClassifyF is the filter form of Classify. | ||||
| func ClassifyF(s string) func(string) string { | ||||
| 	return func(s string) string { | ||||
| 		return Classify(s) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Clean compresses all adjacent whitespace to a single space and trims s. | ||||
| func Clean(s string) string { | ||||
| 	s = spacesRe.ReplaceAllString(s, " ") | ||||
| 	s = beginEndSpacesRe.ReplaceAllString(s, "") | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // Dasherize  converts a camel cased string into a string delimited by dashes. | ||||
| func Dasherize(s string) string { | ||||
| 	s = strings.TrimSpace(s) | ||||
| 	s = spaceUnderscoreRe.ReplaceAllString(s, "-") | ||||
| 	s = capitalsRe.ReplaceAllString(s, "-$1") | ||||
| 	s = dashesRe.ReplaceAllString(s, "-") | ||||
| 	s = strings.ToLower(s) | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // EscapeHTML is alias for html.EscapeString. | ||||
| func EscapeHTML(s string) string { | ||||
| 	if Verbose { | ||||
| 		fmt.Println("Use html.EscapeString instead of EscapeHTML") | ||||
| 	} | ||||
| 	return html.EscapeString(s) | ||||
| } | ||||
|  | ||||
| // DecodeHTMLEntities decodes HTML entities into their proper string representation. | ||||
| // DecodeHTMLEntities is an alias for html.UnescapeString | ||||
| func DecodeHTMLEntities(s string) string { | ||||
| 	if Verbose { | ||||
| 		fmt.Println("Use html.UnescapeString instead of DecodeHTMLEntities") | ||||
| 	} | ||||
| 	return html.UnescapeString(s) | ||||
| } | ||||
|  | ||||
| // EnsurePrefix ensures s starts with prefix. | ||||
| func EnsurePrefix(s, prefix string) string { | ||||
| 	if strings.HasPrefix(s, prefix) { | ||||
| 		return s | ||||
| 	} | ||||
| 	return prefix + s | ||||
| } | ||||
|  | ||||
| // EnsurePrefixF is the filter form of EnsurePrefix. | ||||
| func EnsurePrefixF(prefix string) func(string) string { | ||||
| 	return func(s string) string { | ||||
| 		return EnsurePrefix(s, prefix) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // EnsureSuffix ensures s ends with suffix. | ||||
| func EnsureSuffix(s, suffix string) string { | ||||
| 	if strings.HasSuffix(s, suffix) { | ||||
| 		return s | ||||
| 	} | ||||
| 	return s + suffix | ||||
| } | ||||
|  | ||||
| // EnsureSuffixF is the filter form of EnsureSuffix. | ||||
| func EnsureSuffixF(suffix string) func(string) string { | ||||
| 	return func(s string) string { | ||||
| 		return EnsureSuffix(s, suffix) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Humanize transforms s into a human friendly form. | ||||
| func Humanize(s string) string { | ||||
| 	if s == "" { | ||||
| 		return s | ||||
| 	} | ||||
| 	s = Underscore(s) | ||||
| 	var humanizeRe = regexp.MustCompile(`_id$`) | ||||
| 	s = humanizeRe.ReplaceAllString(s, "") | ||||
| 	s = strings.Replace(s, "_", " ", -1) | ||||
| 	s = strings.TrimSpace(s) | ||||
| 	s = Capitalize(s) | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // Iif is short for immediate if. If condition is true return truthy else falsey. | ||||
| func Iif(condition bool, truthy string, falsey string) string { | ||||
| 	if condition { | ||||
| 		return truthy | ||||
| 	} | ||||
| 	return falsey | ||||
| } | ||||
|  | ||||
| // IndexOf finds the index of needle in s starting from start. | ||||
| func IndexOf(s string, needle string, start int) int { | ||||
| 	l := len(s) | ||||
| 	if needle == "" { | ||||
| 		if start < 0 { | ||||
| 			return 0 | ||||
| 		} else if start < l { | ||||
| 			return start | ||||
| 		} else { | ||||
| 			return l | ||||
| 		} | ||||
| 	} | ||||
| 	if start < 0 || start > l-1 { | ||||
| 		return -1 | ||||
| 	} | ||||
| 	pos := strings.Index(s[start:], needle) | ||||
| 	if pos == -1 { | ||||
| 		return -1 | ||||
| 	} | ||||
| 	return start + pos | ||||
| } | ||||
|  | ||||
| // IsAlpha returns true if a string contains only letters from ASCII (a-z,A-Z). Other letters from other languages are not supported. | ||||
| func IsAlpha(s string) bool { | ||||
| 	return !isAlphaRe.MatchString(strings.ToLower(s)) | ||||
| } | ||||
|  | ||||
| // IsAlphaNumeric returns true if a string contains letters and digits. | ||||
| func IsAlphaNumeric(s string) bool { | ||||
| 	return !isAlphaNumericRe.MatchString(strings.ToLower(s)) | ||||
| } | ||||
|  | ||||
| // IsLower returns true if s comprised of all lower case characters. | ||||
| func IsLower(s string) bool { | ||||
| 	return IsAlpha(s) && s == strings.ToLower(s) | ||||
| } | ||||
|  | ||||
| // IsNumeric returns true if a string contains only digits from 0-9. Other digits not in Latin (such as Arabic) are not currently supported. | ||||
| func IsNumeric(s string) bool { | ||||
| 	return !notDigitsRe.MatchString(s) | ||||
| } | ||||
|  | ||||
| // IsUpper returns true if s contains all upper case chracters. | ||||
| func IsUpper(s string) bool { | ||||
| 	return IsAlpha(s) && s == strings.ToUpper(s) | ||||
| } | ||||
|  | ||||
| // IsEmpty returns true if the string is solely composed of whitespace. | ||||
| func IsEmpty(s string) bool { | ||||
| 	if s == "" { | ||||
| 		return true | ||||
| 	} | ||||
| 	return whitespaceRe.MatchString(s) | ||||
| } | ||||
|  | ||||
| // Left returns the left substring of length n. | ||||
| func Left(s string, n int) string { | ||||
| 	if n < 0 { | ||||
| 		return Right(s, -n) | ||||
| 	} | ||||
| 	return Substr(s, 0, n) | ||||
| } | ||||
|  | ||||
| // LeftF is the filter form of Left. | ||||
| func LeftF(n int) func(string) string { | ||||
| 	return func(s string) string { | ||||
| 		return Left(s, n) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // LeftOf returns the substring left of needle. | ||||
| func LeftOf(s string, needle string) string { | ||||
| 	return Between(s, "", needle) | ||||
| } | ||||
|  | ||||
| // Letters returns an array of runes as strings so it can be indexed into. | ||||
| func Letters(s string) []string { | ||||
| 	result := []string{} | ||||
| 	for _, r := range s { | ||||
| 		result = append(result, string(r)) | ||||
| 	} | ||||
| 	return result | ||||
| } | ||||
|  | ||||
| // Lines convert windows newlines to unix newlines then convert to an Array of lines. | ||||
| func Lines(s string) []string { | ||||
| 	s = strings.Replace(s, "\r\n", "\n", -1) | ||||
| 	return strings.Split(s, "\n") | ||||
| } | ||||
|  | ||||
| // Map maps an array's iitem through an iterator. | ||||
| func Map(arr []string, iterator func(string) string) []string { | ||||
| 	r := []string{} | ||||
| 	for _, item := range arr { | ||||
| 		r = append(r, iterator(item)) | ||||
| 	} | ||||
| 	return r | ||||
| } | ||||
|  | ||||
| // Match returns true if patterns matches the string | ||||
| func Match(s, pattern string) bool { | ||||
| 	r := regexp.MustCompile(pattern) | ||||
| 	return r.MatchString(s) | ||||
| } | ||||
							
								
								
									
										534
									
								
								vendor/github.com/mgutz/str/funcsPZ.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										534
									
								
								vendor/github.com/mgutz/str/funcsPZ.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,534 @@ | ||||
| package str | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"html" | ||||
| 	//"log" | ||||
| 	"math" | ||||
| 	"regexp" | ||||
| 	"runtime" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 	"unicode/utf8" | ||||
| ) | ||||
|  | ||||
| // Pad pads string s on both sides with c until it has length of n. | ||||
| func Pad(s, c string, n int) string { | ||||
| 	L := len(s) | ||||
| 	if L >= n { | ||||
| 		return s | ||||
| 	} | ||||
| 	n -= L | ||||
|  | ||||
| 	left := strings.Repeat(c, int(math.Ceil(float64(n)/2))) | ||||
| 	right := strings.Repeat(c, int(math.Floor(float64(n)/2))) | ||||
| 	return left + s + right | ||||
| } | ||||
|  | ||||
| // PadF is the filter form of Pad. | ||||
| func PadF(c string, n int) func(string) string { | ||||
| 	return func(s string) string { | ||||
| 		return Pad(s, c, n) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // PadLeft pads s on left side with c until it has length of n. | ||||
| func PadLeft(s, c string, n int) string { | ||||
| 	L := len(s) | ||||
| 	if L > n { | ||||
| 		return s | ||||
| 	} | ||||
| 	return strings.Repeat(c, (n-L)) + s | ||||
| } | ||||
|  | ||||
| // PadLeftF is the filter form of PadLeft. | ||||
| func PadLeftF(c string, n int) func(string) string { | ||||
| 	return func(s string) string { | ||||
| 		return PadLeft(s, c, n) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // PadRight pads s on right side with c until it has length of n. | ||||
| func PadRight(s, c string, n int) string { | ||||
| 	L := len(s) | ||||
| 	if L > n { | ||||
| 		return s | ||||
| 	} | ||||
| 	return s + strings.Repeat(c, n-L) | ||||
| } | ||||
|  | ||||
| // PadRightF is the filter form of Padright | ||||
| func PadRightF(c string, n int) func(string) string { | ||||
| 	return func(s string) string { | ||||
| 		return PadRight(s, c, n) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Pipe pipes s through one or more string filters. | ||||
| func Pipe(s string, funcs ...func(string) string) string { | ||||
| 	for _, fn := range funcs { | ||||
| 		s = fn(s) | ||||
| 	} | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // QuoteItems quotes all items in array, mostly for debugging. | ||||
| func QuoteItems(arr []string) []string { | ||||
| 	return Map(arr, func(s string) string { | ||||
| 		return strconv.Quote(s) | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| // ReplaceF is the filter form of strings.Replace. | ||||
| func ReplaceF(old, new string, n int) func(string) string { | ||||
| 	return func(s string) string { | ||||
| 		return strings.Replace(s, old, new, n) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // ReplacePattern replaces string with regexp string. | ||||
| // ReplacePattern returns a copy of src, replacing matches of the Regexp with the replacement string repl. Inside repl, $ signs are interpreted as in Expand, so for instance $1 represents the text of the first submatch. | ||||
| func ReplacePattern(s, pattern, repl string) string { | ||||
| 	r := regexp.MustCompile(pattern) | ||||
| 	return r.ReplaceAllString(s, repl) | ||||
| } | ||||
|  | ||||
| // ReplacePatternF is the filter form of ReplaceRegexp. | ||||
| func ReplacePatternF(pattern, repl string) func(string) string { | ||||
| 	return func(s string) string { | ||||
| 		return ReplacePattern(s, pattern, repl) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Reverse a string | ||||
| func Reverse(s string) string { | ||||
| 	cs := make([]rune, utf8.RuneCountInString(s)) | ||||
| 	i := len(cs) | ||||
| 	for _, c := range s { | ||||
| 		i-- | ||||
| 		cs[i] = c | ||||
| 	} | ||||
| 	return string(cs) | ||||
| } | ||||
|  | ||||
| // Right returns the right substring of length n. | ||||
| func Right(s string, n int) string { | ||||
| 	if n < 0 { | ||||
| 		return Left(s, -n) | ||||
| 	} | ||||
| 	return Substr(s, len(s)-n, n) | ||||
| } | ||||
|  | ||||
| // RightF is the Filter version of Right. | ||||
| func RightF(n int) func(string) string { | ||||
| 	return func(s string) string { | ||||
| 		return Right(s, n) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // RightOf returns the substring to the right of prefix. | ||||
| func RightOf(s string, prefix string) string { | ||||
| 	return Between(s, prefix, "") | ||||
| } | ||||
|  | ||||
| // SetTemplateDelimiters sets the delimiters for Template function. Defaults to "{{" and "}}" | ||||
| func SetTemplateDelimiters(opening, closing string) { | ||||
| 	templateOpen = opening | ||||
| 	templateClose = closing | ||||
| } | ||||
|  | ||||
| // Slice slices a string. If end is negative then it is the from the end | ||||
| // of the string. | ||||
| func Slice(s string, start, end int) string { | ||||
| 	if end > -1 { | ||||
| 		return s[start:end] | ||||
| 	} | ||||
| 	L := len(s) | ||||
| 	if L+end > 0 { | ||||
| 		return s[start : L-end] | ||||
| 	} | ||||
| 	return s[start:] | ||||
| } | ||||
|  | ||||
| // SliceF is the filter for Slice. | ||||
| func SliceF(start, end int) func(string) string { | ||||
| 	return func(s string) string { | ||||
| 		return Slice(s, start, end) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // SliceContains determines whether val is an element in slice. | ||||
| func SliceContains(slice []string, val string) bool { | ||||
| 	if slice == nil { | ||||
| 		return false | ||||
| 	} | ||||
|  | ||||
| 	for _, it := range slice { | ||||
| 		if it == val { | ||||
| 			return true | ||||
| 		} | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| // SliceIndexOf gets the indx of val in slice. Returns -1 if not found. | ||||
| func SliceIndexOf(slice []string, val string) int { | ||||
| 	if slice == nil { | ||||
| 		return -1 | ||||
| 	} | ||||
|  | ||||
| 	for i, it := range slice { | ||||
| 		if it == val { | ||||
| 			return i | ||||
| 		} | ||||
| 	} | ||||
| 	return -1 | ||||
| } | ||||
|  | ||||
| // Slugify converts s into a dasherized string suitable for URL segment. | ||||
| func Slugify(s string) string { | ||||
| 	sl := slugifyRe.ReplaceAllString(s, "") | ||||
| 	sl = strings.ToLower(sl) | ||||
| 	sl = Dasherize(sl) | ||||
| 	return sl | ||||
| } | ||||
|  | ||||
| // StripPunctuation strips puncation from string. | ||||
| func StripPunctuation(s string) string { | ||||
| 	s = stripPuncRe.ReplaceAllString(s, "") | ||||
| 	s = nWhitespaceRe.ReplaceAllString(s, " ") | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // StripTags strips all of the html tags or tags specified by the parameters | ||||
| func StripTags(s string, tags ...string) string { | ||||
| 	if len(tags) == 0 { | ||||
| 		tags = append(tags, "") | ||||
| 	} | ||||
| 	for _, tag := range tags { | ||||
| 		stripTagsRe := regexp.MustCompile(`(?i)<\/?` + tag + `[^<>]*>`) | ||||
| 		s = stripTagsRe.ReplaceAllString(s, "") | ||||
| 	} | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // Substr returns a substring of s starting at index of length n. | ||||
| func Substr(s string, index int, n int) string { | ||||
| 	L := len(s) | ||||
| 	if index < 0 || index >= L || s == "" { | ||||
| 		return "" | ||||
| 	} | ||||
| 	end := index + n | ||||
| 	if end >= L { | ||||
| 		end = L | ||||
| 	} | ||||
| 	if end <= index { | ||||
| 		return "" | ||||
| 	} | ||||
| 	return s[index:end] | ||||
| } | ||||
|  | ||||
| // SubstrF is the filter form of Substr. | ||||
| func SubstrF(index, n int) func(string) string { | ||||
| 	return func(s string) string { | ||||
| 		return Substr(s, index, n) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Template is a string template which replaces template placeholders delimited | ||||
| // by "{{" and "}}" with values from map. The global delimiters may be set with | ||||
| // SetTemplateDelimiters. | ||||
| func Template(s string, values map[string]interface{}) string { | ||||
| 	return TemplateWithDelimiters(s, values, templateOpen, templateClose) | ||||
| } | ||||
|  | ||||
| // TemplateDelimiters is the getter for the opening and closing delimiters for Template. | ||||
| func TemplateDelimiters() (opening string, closing string) { | ||||
| 	return templateOpen, templateClose | ||||
| } | ||||
|  | ||||
| // TemplateWithDelimiters is string template with user-defineable opening and closing delimiters. | ||||
| func TemplateWithDelimiters(s string, values map[string]interface{}, opening, closing string) string { | ||||
| 	escapeDelimiter := func(delim string) string { | ||||
| 		result := templateRe.ReplaceAllString(delim, "\\$1") | ||||
| 		return templateRe2.ReplaceAllString(result, "\\$") | ||||
| 	} | ||||
|  | ||||
| 	openingDelim := escapeDelimiter(opening) | ||||
| 	closingDelim := escapeDelimiter(closing) | ||||
| 	r := regexp.MustCompile(openingDelim + `(.+?)` + closingDelim) | ||||
| 	matches := r.FindAllStringSubmatch(s, -1) | ||||
| 	for _, submatches := range matches { | ||||
| 		match := submatches[0] | ||||
| 		key := submatches[1] | ||||
| 		//log.Printf("match %s key %s\n", match, key) | ||||
| 		if values[key] != nil { | ||||
| 			v := fmt.Sprintf("%v", values[key]) | ||||
| 			s = strings.Replace(s, match, v, -1) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| // ToArgv converts string s into an argv for exec. | ||||
| func ToArgv(s string) []string { | ||||
| 	const ( | ||||
| 		InArg = iota | ||||
| 		InArgQuote | ||||
| 		OutOfArg | ||||
| 	) | ||||
| 	currentState := OutOfArg | ||||
| 	currentQuoteChar := "\x00" // to distinguish between ' and " quotations | ||||
| 	// this allows to use "foo'bar" | ||||
| 	currentArg := "" | ||||
| 	argv := []string{} | ||||
|  | ||||
| 	isQuote := func(c string) bool { | ||||
| 		return c == `"` || c == `'` | ||||
| 	} | ||||
|  | ||||
| 	isEscape := func(c string) bool { | ||||
| 		return c == `\` | ||||
| 	} | ||||
|  | ||||
| 	isWhitespace := func(c string) bool { | ||||
| 		return c == " " || c == "\t" | ||||
| 	} | ||||
|  | ||||
| 	L := len(s) | ||||
| 	for i := 0; i < L; i++ { | ||||
| 		c := s[i : i+1] | ||||
|  | ||||
| 		//fmt.Printf("c %s state %v arg %s argv %v i %d\n", c, currentState, currentArg, args, i) | ||||
| 		if isQuote(c) { | ||||
| 			switch currentState { | ||||
| 			case OutOfArg: | ||||
| 				currentArg = "" | ||||
| 				fallthrough | ||||
| 			case InArg: | ||||
| 				currentState = InArgQuote | ||||
| 				currentQuoteChar = c | ||||
|  | ||||
| 			case InArgQuote: | ||||
| 				if c == currentQuoteChar { | ||||
| 					currentState = InArg | ||||
| 				} else { | ||||
| 					currentArg += c | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 		} else if isWhitespace(c) { | ||||
| 			switch currentState { | ||||
| 			case InArg: | ||||
| 				argv = append(argv, currentArg) | ||||
| 				currentState = OutOfArg | ||||
| 			case InArgQuote: | ||||
| 				currentArg += c | ||||
| 			case OutOfArg: | ||||
| 				// nothing | ||||
| 			} | ||||
|  | ||||
| 		} else if isEscape(c) { | ||||
| 			switch currentState { | ||||
| 			case OutOfArg: | ||||
| 				currentArg = "" | ||||
| 				currentState = InArg | ||||
| 				fallthrough | ||||
| 			case InArg: | ||||
| 				fallthrough | ||||
| 			case InArgQuote: | ||||
| 				if i == L-1 { | ||||
| 					if runtime.GOOS == "windows" { | ||||
| 						// just add \ to end for windows | ||||
| 						currentArg += c | ||||
| 					} else { | ||||
| 						panic("Escape character at end string") | ||||
| 					} | ||||
| 				} else { | ||||
| 					if runtime.GOOS == "windows" { | ||||
| 						peek := s[i+1 : i+2] | ||||
| 						if peek != `"` { | ||||
| 							currentArg += c | ||||
| 						} | ||||
| 					} else { | ||||
| 						i++ | ||||
| 						c = s[i : i+1] | ||||
| 						currentArg += c | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} else { | ||||
| 			switch currentState { | ||||
| 			case InArg, InArgQuote: | ||||
| 				currentArg += c | ||||
|  | ||||
| 			case OutOfArg: | ||||
| 				currentArg = "" | ||||
| 				currentArg += c | ||||
| 				currentState = InArg | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if currentState == InArg { | ||||
| 		argv = append(argv, currentArg) | ||||
| 	} else if currentState == InArgQuote { | ||||
| 		panic("Starting quote has no ending quote.") | ||||
| 	} | ||||
|  | ||||
| 	return argv | ||||
| } | ||||
|  | ||||
| // ToBool fuzzily converts truthy values. | ||||
| func ToBool(s string) bool { | ||||
| 	s = strings.ToLower(s) | ||||
| 	return s == "true" || s == "yes" || s == "on" || s == "1" | ||||
| } | ||||
|  | ||||
| // ToBoolOr parses s as a bool or returns defaultValue. | ||||
| func ToBoolOr(s string, defaultValue bool) bool { | ||||
| 	b, err := strconv.ParseBool(s) | ||||
| 	if err != nil { | ||||
| 		return defaultValue | ||||
| 	} | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| // ToIntOr parses s as an int or returns defaultValue. | ||||
| func ToIntOr(s string, defaultValue int) int { | ||||
| 	n, err := strconv.Atoi(s) | ||||
| 	if err != nil { | ||||
| 		return defaultValue | ||||
| 	} | ||||
| 	return n | ||||
| } | ||||
|  | ||||
| // ToFloat32Or parses as a float32 or returns defaultValue on error. | ||||
| func ToFloat32Or(s string, defaultValue float32) float32 { | ||||
| 	f, err := strconv.ParseFloat(s, 32) | ||||
| 	if err != nil { | ||||
| 		return defaultValue | ||||
| 	} | ||||
| 	return float32(f) | ||||
| } | ||||
|  | ||||
| // ToFloat64Or parses s as a float64 or returns defaultValue. | ||||
| func ToFloat64Or(s string, defaultValue float64) float64 { | ||||
| 	f, err := strconv.ParseFloat(s, 64) | ||||
| 	if err != nil { | ||||
| 		return defaultValue | ||||
| 	} | ||||
| 	return f | ||||
| } | ||||
|  | ||||
| // ToFloatOr parses as a float64 or returns defaultValue. | ||||
| var ToFloatOr = ToFloat64Or | ||||
|  | ||||
| // TODO This is not working yet. Go's regexp package does not have some | ||||
| // of the niceities in JavaScript | ||||
| // | ||||
| // Truncate truncates the string, accounting for word placement and chars count | ||||
| // adding a morestr (defaults to ellipsis) | ||||
| // func Truncate(s, morestr string, n int) string { | ||||
| // 	L := len(s) | ||||
| // 	if L <= n { | ||||
| // 		return s | ||||
| // 	} | ||||
| // | ||||
| // 	if morestr == "" { | ||||
| // 		morestr = "..." | ||||
| // 	} | ||||
| // | ||||
| // 	tmpl := func(c string) string { | ||||
| // 		if strings.ToUpper(c) != strings.ToLower(c) { | ||||
| // 			return "A" | ||||
| // 		} | ||||
| // 		return " " | ||||
| // 	} | ||||
| // 	template := s[0 : n+1] | ||||
| // 	var truncateRe = regexp.MustCompile(`.(?=\W*\w*$)`) | ||||
| // 	truncateRe.ReplaceAllStringFunc(template, tmpl) // 'Hello, world' -> 'HellAA AAAAA' | ||||
| // 	var wwRe = regexp.MustCompile(`\w\w`) | ||||
| // 	var whitespaceRe2 = regexp.MustCompile(`\s*\S+$`) | ||||
| // 	if wwRe.MatchString(template[len(template)-2:]) { | ||||
| // 		template = whitespaceRe2.ReplaceAllString(template, "") | ||||
| // 	} else { | ||||
| // 		template = strings.TrimRight(template, " \t\n") | ||||
| // 	} | ||||
| // | ||||
| // 	if len(template+morestr) > L { | ||||
| // 		return s | ||||
| // 	} | ||||
| // 	return s[0:len(template)] + morestr | ||||
| // } | ||||
| // | ||||
| //     truncate: function(length, pruneStr) { //from underscore.string, author: github.com/rwz | ||||
| //       var str = this.s; | ||||
| // | ||||
| //       length = ~~length; | ||||
| //       pruneStr = pruneStr || '...'; | ||||
| // | ||||
| //       if (str.length <= length) return new this.constructor(str); | ||||
| // | ||||
| //       var tmpl = function(c){ return c.toUpperCase() !== c.toLowerCase() ? 'A' : ' '; }, | ||||
| //         template = str.slice(0, length+1).replace(/.(?=\W*\w*$)/g, tmpl); // 'Hello, world' -> 'HellAA AAAAA' | ||||
| // | ||||
| //       if (template.slice(template.length-2).match(/\w\w/)) | ||||
| //         template = template.replace(/\s*\S+$/, ''); | ||||
| //       else | ||||
| //         template = new S(template.slice(0, template.length-1)).trimRight().s; | ||||
| // | ||||
| //       return (template+pruneStr).length > str.length ? new S(str) : new S(str.slice(0, template.length)+pruneStr); | ||||
| //     }, | ||||
|  | ||||
| // Underscore returns converted camel cased string into a string delimited by underscores. | ||||
| func Underscore(s string) string { | ||||
| 	if s == "" { | ||||
| 		return "" | ||||
| 	} | ||||
| 	u := strings.TrimSpace(s) | ||||
|  | ||||
| 	u = underscoreRe.ReplaceAllString(u, "${1}_$2") | ||||
| 	u = dashSpaceRe.ReplaceAllString(u, "_") | ||||
| 	u = strings.ToLower(u) | ||||
| 	if IsUpper(s[0:1]) { | ||||
| 		return "_" + u | ||||
| 	} | ||||
| 	return u | ||||
| } | ||||
|  | ||||
| // UnescapeHTML is an alias for html.UnescapeString. | ||||
| func UnescapeHTML(s string) string { | ||||
| 	if Verbose { | ||||
| 		fmt.Println("Use html.UnescapeString instead of UnescapeHTML") | ||||
| 	} | ||||
| 	return html.UnescapeString(s) | ||||
| } | ||||
|  | ||||
| // WrapHTML wraps s within HTML tag having attributes attrs. Note, | ||||
| // WrapHTML does not escape s value. | ||||
| func WrapHTML(s string, tag string, attrs map[string]string) string { | ||||
| 	escapeHTMLAttributeQuotes := func(v string) string { | ||||
| 		v = strings.Replace(v, "<", "<", -1) | ||||
| 		v = strings.Replace(v, "&", "&", -1) | ||||
| 		v = strings.Replace(v, "\"", """, -1) | ||||
| 		return v | ||||
| 	} | ||||
| 	if tag == "" { | ||||
| 		tag = "div" | ||||
| 	} | ||||
| 	el := "<" + tag | ||||
| 	for name, val := range attrs { | ||||
| 		el += " " + name + "=\"" + escapeHTMLAttributeQuotes(val) + "\"" | ||||
| 	} | ||||
| 	el += ">" + s + "</" + tag + ">" | ||||
| 	return el | ||||
| } | ||||
|  | ||||
| // WrapHTMLF is the filter form of WrapHTML. | ||||
| func WrapHTMLF(tag string, attrs map[string]string) func(string) string { | ||||
| 	return func(s string) string { | ||||
| 		return WrapHTML(s, tag, attrs) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										696
									
								
								vendor/github.com/mgutz/str/str_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										696
									
								
								vendor/github.com/mgutz/str/str_test.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,696 @@ | ||||
| package str | ||||
|  | ||||
| //import "testing" | ||||
| import "fmt" | ||||
|  | ||||
| //import "strings" | ||||
|  | ||||
| func ExampleBetween() { | ||||
| 	eg(1, Between("<a>foo</a>", "<a>", "</a>")) | ||||
| 	eg(2, Between("<a>foo</a></a>", "<a>", "</a>")) | ||||
| 	eg(3, Between("<a><a>foo</a></a>", "<a>", "</a>")) | ||||
| 	eg(4, Between("<a><a>foo</a></a>", "<a>", "</a>")) | ||||
| 	eg(5, Between("<a>foo", "<a>", "</a>")) | ||||
| 	eg(6, Between("Some strings } are very {weird}, dont you think?", "{", "}")) | ||||
| 	eg(7, Between("This is ateststring", "", "test")) | ||||
| 	eg(8, Between("This is ateststring", "test", "")) | ||||
| 	// Output: | ||||
| 	// 1: foo | ||||
| 	// 2: foo | ||||
| 	// 3: <a>foo | ||||
| 	// 4: <a>foo | ||||
| 	// 5: | ||||
| 	// 6: weird | ||||
| 	// 7: This is a | ||||
| 	// 8: string | ||||
| } | ||||
|  | ||||
| func ExampleBetweenF() { | ||||
| 	eg(1, Pipe("abc", BetweenF("a", "c"))) | ||||
| 	// Output: | ||||
| 	// 1: b | ||||
| } | ||||
|  | ||||
| func ExampleCamelize() { | ||||
| 	eg(1, Camelize("data_rate")) | ||||
| 	eg(2, Camelize("background-color")) | ||||
| 	eg(3, Camelize("-moz-something")) | ||||
| 	eg(4, Camelize("_car_speed_")) | ||||
| 	eg(5, Camelize("yes_we_can")) | ||||
| 	// Output: | ||||
| 	// 1: dataRate | ||||
| 	// 2: backgroundColor | ||||
| 	// 3: MozSomething | ||||
| 	// 4: CarSpeed | ||||
| 	// 5: yesWeCan | ||||
| } | ||||
|  | ||||
| func ExampleCapitalize() { | ||||
| 	eg(1, Capitalize("abc")) | ||||
| 	eg(2, Capitalize("ABC")) | ||||
| 	// Output: | ||||
| 	// 1: Abc | ||||
| 	// 2: Abc | ||||
| } | ||||
|  | ||||
| func ExampleCharAt() { | ||||
| 	eg(1, CharAt("abc", 1)) | ||||
| 	eg(2, CharAt("", -1)) | ||||
| 	eg(3, CharAt("", 0)) | ||||
| 	eg(4, CharAt("", 10)) | ||||
| 	eg(5, CharAt("abc", -1)) | ||||
| 	eg(6, CharAt("abc", 10)) | ||||
| 	// Output: | ||||
| 	// 1: b | ||||
| 	// 2: | ||||
| 	// 3: | ||||
| 	// 4: | ||||
| 	// 5: | ||||
| 	// 6: | ||||
| } | ||||
|  | ||||
| func ExampleCharAtF() { | ||||
| 	eg(1, Pipe("abc", CharAtF(1))) | ||||
| 	// Output: | ||||
| 	// 1: b | ||||
| } | ||||
|  | ||||
| func ExampleChompLeft() { | ||||
| 	eg(1, ChompLeft("foobar", "foo")) | ||||
| 	eg(2, ChompLeft("foobar", "bar")) | ||||
| 	eg(3, ChompLeft("", "foo")) | ||||
| 	eg(4, ChompLeft("", "")) | ||||
| 	eg(5, ChompLeft("foo", "")) | ||||
| 	// Output: | ||||
| 	// 1: bar | ||||
| 	// 2: foobar | ||||
| 	// 3: | ||||
| 	// 4: | ||||
| 	// 5: foo | ||||
| } | ||||
|  | ||||
| func ExampleChompLeftF() { | ||||
| 	eg(1, Pipe("abc", ChompLeftF("ab"))) | ||||
| 	// Output: | ||||
| 	// 1: c | ||||
| } | ||||
|  | ||||
| func ExampleChompRight() { | ||||
| 	eg(1, ChompRight("foobar", "foo")) | ||||
| 	eg(2, ChompRight("foobar", "bar")) | ||||
| 	eg(3, ChompRight("", "foo")) | ||||
| 	eg(4, ChompRight("", "")) | ||||
| 	// Output: | ||||
| 	// 1: foobar | ||||
| 	// 2: foo | ||||
| 	// 3: | ||||
| 	// 4: | ||||
| } | ||||
|  | ||||
| func ExampleChompRightF() { | ||||
| 	eg(1, Pipe("abc", ChompRightF("bc"))) | ||||
| 	// Output: | ||||
| 	// 1: a | ||||
| } | ||||
|  | ||||
| func ExampleClassify() { | ||||
| 	eg(1, Classify("data_rate")) | ||||
| 	eg(2, Classify("background-color")) | ||||
| 	eg(3, Classify("-moz-something")) | ||||
| 	eg(4, Classify("_car_speed_")) | ||||
| 	eg(5, Classify("yes_we_can")) | ||||
| 	// Output: | ||||
| 	// 1: DataRate | ||||
| 	// 2: BackgroundColor | ||||
| 	// 3: MozSomething | ||||
| 	// 4: CarSpeed | ||||
| 	// 5: YesWeCan | ||||
| } | ||||
|  | ||||
| func ExampleClean() { | ||||
| 	eg(1, Clean("clean")) | ||||
| 	eg(2, Clean("")) | ||||
| 	eg(3, Clean(" please\t    clean \t \n  me ")) | ||||
| 	// Output: | ||||
| 	// 1: clean | ||||
| 	// 2: | ||||
| 	// 3: please clean me | ||||
| } | ||||
|  | ||||
| func ExampleDasherize() { | ||||
| 	eg(1, Dasherize("dataRate")) | ||||
| 	eg(2, Dasherize("CarSpeed")) | ||||
| 	eg(3, Dasherize("yesWeCan")) | ||||
| 	eg(4, Dasherize("")) | ||||
| 	eg(5, Dasherize("ABC")) | ||||
| 	// Output: | ||||
| 	// 1: data-rate | ||||
| 	// 2: -car-speed | ||||
| 	// 3: yes-we-can | ||||
| 	// 4: | ||||
| 	// 5: -a-b-c | ||||
| } | ||||
|  | ||||
| func ExampleDecodeHTMLEntities() { | ||||
| 	eg(1, DecodeHTMLEntities("Ken Thompson & Dennis Ritchie")) | ||||
| 	eg(2, DecodeHTMLEntities("3 < 4")) | ||||
| 	eg(3, DecodeHTMLEntities("http://")) | ||||
| 	// Output: | ||||
| 	// 1: Ken Thompson & Dennis Ritchie | ||||
| 	// 2: 3 < 4 | ||||
| 	// 3: http:// | ||||
| } | ||||
|  | ||||
| func ExampleEnsurePrefix() { | ||||
| 	eg(1, EnsurePrefix("foobar", "foo")) | ||||
| 	eg(2, EnsurePrefix("bar", "foo")) | ||||
| 	eg(3, EnsurePrefix("", "")) | ||||
| 	eg(4, EnsurePrefix("foo", "")) | ||||
| 	eg(5, EnsurePrefix("", "foo")) | ||||
| 	// Output: | ||||
| 	// 1: foobar | ||||
| 	// 2: foobar | ||||
| 	// 3: | ||||
| 	// 4: foo | ||||
| 	// 5: foo | ||||
| } | ||||
|  | ||||
| func ExampleEnsurePrefixF() { | ||||
| 	eg(1, Pipe("dir", EnsurePrefixF("./"))) | ||||
| 	// Output: | ||||
| 	// 1: ./dir | ||||
| } | ||||
|  | ||||
| func ExampleEnsureSuffix() { | ||||
| 	eg(1, EnsureSuffix("foobar", "bar")) | ||||
| 	eg(2, EnsureSuffix("foo", "bar")) | ||||
| 	eg(3, EnsureSuffix("", "")) | ||||
| 	eg(4, EnsureSuffix("foo", "")) | ||||
| 	eg(5, EnsureSuffix("", "bar")) | ||||
| 	// Output: | ||||
| 	// 1: foobar | ||||
| 	// 2: foobar | ||||
| 	// 3: | ||||
| 	// 4: foo | ||||
| 	// 5: bar | ||||
| } | ||||
|  | ||||
| func ExampleHumanize() { | ||||
| 	eg(1, Humanize("the_humanize_string_method")) | ||||
| 	eg(2, Humanize("ThehumanizeStringMethod")) | ||||
| 	eg(3, Humanize("the humanize string method")) | ||||
| 	// Output: | ||||
| 	// 1: The humanize string method | ||||
| 	// 2: Thehumanize string method | ||||
| 	// 3: The humanize string method | ||||
| } | ||||
|  | ||||
| func ExampleIif() { | ||||
| 	eg(1, Iif(true, "T", "F")) | ||||
| 	eg(2, Iif(false, "T", "F")) | ||||
| 	// Output: | ||||
| 	// 1: T | ||||
| 	// 2: F | ||||
| } | ||||
|  | ||||
| func ExampleIndexOf() { | ||||
| 	eg(1, IndexOf("abcdef", "a", 0)) | ||||
| 	eg(2, IndexOf("abcdef", "a", 3)) | ||||
| 	eg(3, IndexOf("abcdef", "a", -2)) | ||||
| 	eg(4, IndexOf("abcdef", "a", 10)) | ||||
| 	eg(5, IndexOf("", "a", 0)) | ||||
| 	eg(6, IndexOf("abcdef", "", 2)) | ||||
| 	eg(7, IndexOf("abcdef", "", 1000)) | ||||
| 	// Output: | ||||
| 	// 1: 0 | ||||
| 	// 2: -1 | ||||
| 	// 3: -1 | ||||
| 	// 4: -1 | ||||
| 	// 5: -1 | ||||
| 	// 6: 2 | ||||
| 	// 7: 6 | ||||
| } | ||||
|  | ||||
| func ExampleIsAlpha() { | ||||
| 	eg(1, IsAlpha("afaf")) | ||||
| 	eg(2, IsAlpha("FJslfjkasfs")) | ||||
| 	eg(3, IsAlpha("áéúóúÁÉÍÓÚãõÃÕàèìòùÀÈÌÒÙâêîôûÂÊÎÔÛäëïöüÄËÏÖÜçÇ")) | ||||
| 	eg(4, IsAlpha("adflj43faljsdf")) | ||||
| 	eg(5, IsAlpha("33")) | ||||
| 	eg(6, IsAlpha("TT....TTTafafetstYY")) | ||||
| 	eg(7, IsAlpha("-áéúóúÁÉÍÓÚãõÃÕàèìòùÀÈÌÒÙâêîôûÂÊÎÔÛäëïöüÄËÏÖÜçÇ")) | ||||
| 	// Output: | ||||
| 	// 1: true | ||||
| 	// 2: true | ||||
| 	// 3: true | ||||
| 	// 4: false | ||||
| 	// 5: false | ||||
| 	// 6: false | ||||
| 	// 7: false | ||||
| } | ||||
|  | ||||
| func eg(index int, example interface{}) { | ||||
| 	output := fmt.Sprintf("%d: %v", index, example) | ||||
| 	fmt.Printf("%s\n", Clean(output)) | ||||
| } | ||||
|  | ||||
| func ExampleIsAlphaNumeric() { | ||||
| 	eg(1, IsAlphaNumeric("afaf35353afaf")) | ||||
| 	eg(2, IsAlphaNumeric("FFFF99fff")) | ||||
| 	eg(3, IsAlphaNumeric("99")) | ||||
| 	eg(4, IsAlphaNumeric("afff")) | ||||
| 	eg(5, IsAlphaNumeric("Infinity")) | ||||
| 	eg(6, IsAlphaNumeric("áéúóúÁÉÍÓÚãõÃÕàèìòùÀÈÌÒÙâêîôûÂÊÎÔÛäëïöüÄËÏÖÜçÇ1234567890")) | ||||
| 	eg(7, IsAlphaNumeric("-Infinity")) | ||||
| 	eg(8, IsAlphaNumeric("-33")) | ||||
| 	eg(9, IsAlphaNumeric("aaff..")) | ||||
| 	eg(10, IsAlphaNumeric(".áéúóúÁÉÍÓÚãõÃÕàèìòùÀÈÌÒÙâêîôûÂÊÎÔÛäëïöüÄËÏÖÜçÇ1234567890")) | ||||
| 	// Output: | ||||
| 	// 1: true | ||||
| 	// 2: true | ||||
| 	// 3: true | ||||
| 	// 4: true | ||||
| 	// 5: true | ||||
| 	// 6: true | ||||
| 	// 7: false | ||||
| 	// 8: false | ||||
| 	// 9: false | ||||
| 	// 10: false | ||||
| } | ||||
|  | ||||
| func ExampleIsEmpty() { | ||||
| 	eg(1, IsEmpty(" ")) | ||||
| 	eg(2, IsEmpty("\t\t\t   ")) | ||||
| 	eg(3, IsEmpty("\t\n ")) | ||||
| 	eg(4, IsEmpty("hi")) | ||||
| 	// Output: | ||||
| 	// 1: true | ||||
| 	// 2: true | ||||
| 	// 3: true | ||||
| 	// 4: false | ||||
| } | ||||
|  | ||||
| func ExampleIsLower() { | ||||
| 	eg(1, IsLower("a")) | ||||
| 	eg(2, IsLower("A")) | ||||
| 	eg(3, IsLower("abc")) | ||||
| 	eg(4, IsLower("aBc")) | ||||
| 	eg(5, IsLower("áéúóúãõàèìòùâêîôûäëïöüç")) | ||||
| 	eg(6, IsLower("hi jp")) | ||||
| 	eg(7, IsLower("ÁÉÍÓÚÃÕÀÈÌÒÙÂÊÎÔÛÄËÏÖÜÇ")) | ||||
| 	eg(8, IsLower("áéúóúãõàèìòùâêîôûäëïöüçÁ")) | ||||
| 	eg(9, IsLower("áéúóúãõàèìòùâêîôû äëïöüç")) | ||||
| 	// Output: | ||||
| 	// 1: true | ||||
| 	// 2: false | ||||
| 	// 3: true | ||||
| 	// 4: false | ||||
| 	// 5: true | ||||
| 	// 6: false | ||||
| 	// 7: false | ||||
| 	// 8: false | ||||
| 	// 9: false | ||||
| } | ||||
|  | ||||
| func ExampleIsNumeric() { | ||||
| 	eg(1, IsNumeric("3")) | ||||
| 	eg(2, IsNumeric("34.22")) | ||||
| 	eg(3, IsNumeric("-22.33")) | ||||
| 	eg(4, IsNumeric("NaN")) | ||||
| 	eg(5, IsNumeric("Infinity")) | ||||
| 	eg(6, IsNumeric("-Infinity")) | ||||
| 	eg(7, IsNumeric("JP")) | ||||
| 	eg(8, IsNumeric("-5")) | ||||
| 	eg(9, IsNumeric("00099242424")) | ||||
| 	// Output: | ||||
| 	// 1: true | ||||
| 	// 2: false | ||||
| 	// 3: false | ||||
| 	// 4: false | ||||
| 	// 5: false | ||||
| 	// 6: false | ||||
| 	// 7: false | ||||
| 	// 8: false | ||||
| 	// 9: true | ||||
| } | ||||
|  | ||||
| func ExampleIsUpper() { | ||||
| 	eg(1, IsUpper("a")) | ||||
| 	eg(2, IsUpper("A")) | ||||
| 	eg(3, IsUpper("ABC")) | ||||
| 	eg(4, IsUpper("aBc")) | ||||
| 	eg(5, IsUpper("áéúóúãõàèìòùâêîôûäëïöüç")) | ||||
| 	eg(6, IsUpper("HI JP")) | ||||
| 	eg(7, IsUpper("ÁÉÍÓÚÃÕÀÈÌÒÙÂÊÎÔÛÄËÏÖÜÇ")) | ||||
| 	eg(8, IsUpper("áéúóúãõàèìòùâêîôûäëïöüçÁ")) | ||||
| 	eg(9, IsUpper("ÁÉÍÓÚÃÕÀÈÌÒÙÂÊÎ ÔÛÄËÏÖÜÇ")) | ||||
| 	// Output: | ||||
| 	// 1: false | ||||
| 	// 2: true | ||||
| 	// 3: true | ||||
| 	// 4: false | ||||
| 	// 5: false | ||||
| 	// 6: false | ||||
| 	// 7: true | ||||
| 	// 8: false | ||||
| 	// 9: false | ||||
| } | ||||
|  | ||||
| func ExampleLeft() { | ||||
| 	eg(1, Left("abcdef", 0)) | ||||
| 	eg(2, Left("abcdef", 1)) | ||||
| 	eg(3, Left("abcdef", 4)) | ||||
| 	eg(4, Left("abcdef", -2)) | ||||
| 	// Output: | ||||
| 	// 1: | ||||
| 	// 2: a | ||||
| 	// 3: abcd | ||||
| 	// 4: ef | ||||
| } | ||||
|  | ||||
| func ExampleLeftOf() { | ||||
| 	eg(1, LeftOf("abcdef", "def")) | ||||
| 	eg(2, LeftOf("abcdef", "abc")) | ||||
| 	eg(3, LeftOf("abcdef", "")) | ||||
| 	eg(4, LeftOf("", "abc")) | ||||
| 	eg(5, LeftOf("abcdef", "xyz")) | ||||
| 	// Output: | ||||
| 	// 1: abc | ||||
| 	// 2: | ||||
| 	// 3: abcdef | ||||
| 	// 4: | ||||
| 	// 5: | ||||
| } | ||||
|  | ||||
| func ExampleLines() { | ||||
| 	eg(1, Lines("a\r\nb\nc\r\n")) | ||||
| 	eg(2, Lines("a\r\nb\nc\r\nd")) | ||||
| 	// Output: | ||||
| 	// 1: [a b c ] | ||||
| 	// 2: [a b c d] | ||||
| } | ||||
|  | ||||
| func ExampleMatch() { | ||||
| 	eg(1, Match("foobar", `^fo.*r$`)) | ||||
| 	eg(2, Match("foobar", `^fo.*x$`)) | ||||
| 	eg(3, Match("", `^fo.*x$`)) | ||||
| 	// Output: | ||||
| 	// 1: true | ||||
| 	// 2: false | ||||
| 	// 3: false | ||||
| } | ||||
|  | ||||
| func ExamplePad() { | ||||
| 	eg(1, Pad("hello", "x", 5)) | ||||
| 	eg(2, Pad("hello", "x", 10)) | ||||
| 	eg(3, Pad("hello", "x", 11)) | ||||
| 	eg(4, Pad("hello", "x", 6)) | ||||
| 	eg(5, Pad("hello", "x", 1)) | ||||
| 	// Output: | ||||
| 	// 1: hello | ||||
| 	// 2: xxxhelloxx | ||||
| 	// 3: xxxhelloxxx | ||||
| 	// 4: xhello | ||||
| 	// 5: hello | ||||
| } | ||||
|  | ||||
| func ExamplePadLeft() { | ||||
| 	eg(1, PadLeft("hello", "x", 5)) | ||||
| 	eg(2, PadLeft("hello", "x", 10)) | ||||
| 	eg(3, PadLeft("hello", "x", 11)) | ||||
| 	eg(4, PadLeft("hello", "x", 6)) | ||||
| 	eg(5, PadLeft("hello", "x", 1)) | ||||
| 	// Output: | ||||
| 	// 1: hello | ||||
| 	// 2: xxxxxhello | ||||
| 	// 3: xxxxxxhello | ||||
| 	// 4: xhello | ||||
| 	// 5: hello | ||||
| } | ||||
|  | ||||
| func ExamplePadRight() { | ||||
| 	eg(1, PadRight("hello", "x", 5)) | ||||
| 	eg(2, PadRight("hello", "x", 10)) | ||||
| 	eg(3, PadRight("hello", "x", 11)) | ||||
| 	eg(4, PadRight("hello", "x", 6)) | ||||
| 	eg(5, PadRight("hello", "x", 1)) | ||||
| 	// Output: | ||||
| 	// 1: hello | ||||
| 	// 2: helloxxxxx | ||||
| 	// 3: helloxxxxxx | ||||
| 	// 4: hellox | ||||
| 	// 5: hello | ||||
| } | ||||
|  | ||||
| func ExamplePipe() { | ||||
| 	eg(1, Pipe("\nabcdef   \n", Clean, BetweenF("a", "f"), ChompLeftF("bc"))) | ||||
| 	// Output: | ||||
| 	// 1: de | ||||
| } | ||||
|  | ||||
| func ExampleReplaceF() { | ||||
| 	eg(1, Pipe("abcdefab", ReplaceF("ab", "x", -1))) | ||||
| 	eg(2, Pipe("abcdefab", ReplaceF("ab", "x", 1))) | ||||
| 	eg(3, Pipe("abcdefab", ReplaceF("ab", "x", 0))) | ||||
| 	// Output: | ||||
| 	// 1: xcdefx | ||||
| 	// 2: xcdefab | ||||
| 	// 3: abcdefab | ||||
| } | ||||
|  | ||||
| func ExampleReplacePattern() { | ||||
| 	eg(1, ReplacePattern("aabbcc", `a`, "x")) | ||||
| 	// Output: | ||||
| 	// 1: xxbbcc | ||||
| } | ||||
|  | ||||
| func ExampleReplacePatternF() { | ||||
| 	eg(1, Pipe("aabbcc", ReplacePatternF(`a`, "x"))) | ||||
| 	// Output: | ||||
| 	// 1: xxbbcc | ||||
| } | ||||
|  | ||||
| func ExampleReverse() { | ||||
| 	eg(1, Reverse("abc")) | ||||
| 	eg(2, Reverse("中文")) | ||||
| 	// Output: | ||||
| 	// 1: cba | ||||
| 	// 2: 文中 | ||||
| } | ||||
|  | ||||
| func ExampleRight() { | ||||
| 	eg(1, Right("abcdef", 0)) | ||||
| 	eg(2, Right("abcdef", 1)) | ||||
| 	eg(3, Right("abcdef", 4)) | ||||
| 	eg(4, Right("abcdef", -2)) | ||||
| 	// Output: | ||||
| 	// 1: | ||||
| 	// 2: f | ||||
| 	// 3: cdef | ||||
| 	// 4: ab | ||||
| } | ||||
|  | ||||
| func ExampleRightOf() { | ||||
| 	eg(1, RightOf("abcdef", "abc")) | ||||
| 	eg(2, RightOf("abcdef", "def")) | ||||
| 	eg(3, RightOf("abcdef", "")) | ||||
| 	eg(4, RightOf("", "abc")) | ||||
| 	eg(5, RightOf("abcdef", "xyz")) | ||||
| 	// Output: | ||||
| 	// 1: def | ||||
| 	// 2: | ||||
| 	// 3: abcdef | ||||
| 	// 4: | ||||
| 	// 5: | ||||
| } | ||||
|  | ||||
| func ExampleRightF() { | ||||
| 	eg(1, Pipe("abcdef", RightF(3))) | ||||
| 	// Output: | ||||
| 	// 1: def | ||||
| } | ||||
|  | ||||
| func ExampleSliceContains() { | ||||
| 	eg(1, SliceContains([]string{"foo", "bar"}, "foo")) | ||||
| 	eg(2, SliceContains(nil, "foo")) | ||||
| 	eg(3, SliceContains([]string{"foo", "bar"}, "bah")) | ||||
| 	eg(4, SliceContains([]string{"foo", "bar"}, "")) | ||||
| 	// Output: | ||||
| 	// 1: true | ||||
| 	// 2: false | ||||
| 	// 3: false | ||||
| 	// 4: false | ||||
| } | ||||
|  | ||||
| func ExampleSliceIndexOf() { | ||||
| 	eg(1, SliceIndexOf([]string{"foo", "bar"}, "foo")) | ||||
| 	eg(2, SliceIndexOf(nil, "foo")) | ||||
| 	eg(3, SliceIndexOf([]string{"foo", "bar"}, "bah")) | ||||
| 	eg(4, SliceIndexOf([]string{"foo", "bar"}, "")) | ||||
| 	eg(5, SliceIndexOf([]string{"foo", "bar"}, "bar")) | ||||
| 	// Output: | ||||
| 	// 1: 0 | ||||
| 	// 2: -1 | ||||
| 	// 3: -1 | ||||
| 	// 4: -1 | ||||
| 	// 5: 1 | ||||
| } | ||||
|  | ||||
| func ExampleSlugify() { | ||||
| 	eg(1, Slugify("foo bar")) | ||||
| 	eg(2, Slugify("foo/bar bah")) | ||||
| 	eg(3, Slugify("foo-bar--bah")) | ||||
| 	// Output: | ||||
| 	// 1: foo-bar | ||||
| 	// 2: foobar-bah | ||||
| 	// 3: foo-bar-bah | ||||
| } | ||||
|  | ||||
| func ExampleStripPunctuation() { | ||||
| 	eg(1, StripPunctuation("My, st[ring] *full* of %punct)")) | ||||
| 	// Output: | ||||
| 	// 1: My string full of punct | ||||
| } | ||||
|  | ||||
| func ExampleStripTags() { | ||||
| 	eg(1, StripTags("<p>just <b>some</b> text</p>")) | ||||
| 	eg(2, StripTags("<p>just <b>some</b> text</p>", "p")) | ||||
| 	eg(3, StripTags("<a><p>just <b>some</b> text</p></a>", "a", "p")) | ||||
| 	eg(4, StripTags("<a><p>just <b>some</b> text</p></a>", "b")) | ||||
| 	// Output: | ||||
| 	// 1: just some text | ||||
| 	// 2: just <b>some</b> text | ||||
| 	// 3: just <b>some</b> text | ||||
| 	// 4: <a><p>just some text</p></a> | ||||
| } | ||||
|  | ||||
| func ExampleSubstr() { | ||||
| 	eg(1, Substr("abcdef", 2, -1)) | ||||
| 	eg(2, Substr("abcdef", 2, 0)) | ||||
| 	eg(3, Substr("abcdef", 2, 1)) | ||||
| 	eg(4, Substr("abcdef", 2, 3)) | ||||
| 	eg(5, Substr("abcdef", 2, 4)) | ||||
| 	eg(6, Substr("abcdef", 2, 100)) | ||||
| 	eg(7, Substr("abcdef", 0, 1)) | ||||
| 	// Output: | ||||
| 	// 1: | ||||
| 	// 2: | ||||
| 	// 3: c | ||||
| 	// 4: cde | ||||
| 	// 5: cdef | ||||
| 	// 6: cdef | ||||
| 	// 7: a | ||||
| } | ||||
|  | ||||
| func ExampleTemplateWithDelimiters() { | ||||
| 	eg(1, TemplateWithDelimiters("Hello {{name}} at {{date-year}}", map[string]interface{}{"name": "foo", "date-year": 2014}, "{{", "}}")) | ||||
| 	eg(2, TemplateWithDelimiters("Hello #{name} at #{date-year}", map[string]interface{}{"name": "foo", "date-year": 2014}, "#{", "}")) | ||||
| 	eg(3, TemplateWithDelimiters("Hello (name) at (date-year)", map[string]interface{}{"name": "foo", "date-year": 2014}, "(", ")")) | ||||
| 	eg(4, TemplateWithDelimiters("Hello [name] at [date-year]", map[string]interface{}{"name": "foo", "date-year": 2014}, "[", "]")) | ||||
| 	eg(5, TemplateWithDelimiters("Hello *name* at *date-year*", map[string]interface{}{"name": "foo", "date-year": 2014}, "*", "*")) | ||||
| 	eg(6, TemplateWithDelimiters("Hello $name$ at $date-year$", map[string]interface{}{"name": "foo", "date-year": 2014}, "$", "$")) | ||||
| 	// Output: | ||||
| 	// 1: Hello foo at 2014 | ||||
| 	// 2: Hello foo at 2014 | ||||
| 	// 3: Hello foo at 2014 | ||||
| 	// 4: Hello foo at 2014 | ||||
| 	// 5: Hello foo at 2014 | ||||
| 	// 6: Hello foo at 2014 | ||||
| } | ||||
|  | ||||
| func ExampleTemplate() { | ||||
| 	eg(1, Template("Hello {{name}} at {{date-year}}", map[string]interface{}{"name": "foo", "date-year": 2014})) | ||||
| 	eg(2, Template("Hello {{name}}", map[string]interface{}{"name": ""})) | ||||
| 	SetTemplateDelimiters("{", "}") | ||||
| 	eg(3, Template("Hello {name} at {date-year}", map[string]interface{}{"name": "foo", "date-year": 2014})) | ||||
| 	// Output: | ||||
| 	// 1: Hello foo at 2014 | ||||
| 	// 2: Hello | ||||
| 	// 3: Hello foo at 2014 | ||||
| } | ||||
|  | ||||
| func ExampleToArgv() { | ||||
| 	eg(1, QuoteItems(ToArgv(`GO_ENV=test gosu --watch foo@release "some quoted string 'inside'"`))) | ||||
| 	eg(2, QuoteItems(ToArgv(`gosu foo\ bar`))) | ||||
| 	eg(3, QuoteItems(ToArgv(`gosu --test="some arg" -w -s a=123`))) | ||||
| 	// Output: | ||||
| 	// 1: ["GO_ENV=test" "gosu" "--watch" "foo@release" "some quoted string 'inside'"] | ||||
| 	// 2: ["gosu" "foo bar"] | ||||
| 	// 3: ["gosu" "--test=some arg" "-w" "-s" "a=123"] | ||||
| } | ||||
|  | ||||
| func ExampleToBool() { | ||||
| 	eg(1, ToBool("true")) | ||||
| 	eg(2, ToBool("yes")) | ||||
| 	eg(3, ToBool("1")) | ||||
| 	eg(4, ToBool("on")) | ||||
| 	eg(5, ToBool("false")) | ||||
| 	eg(6, ToBool("no")) | ||||
| 	eg(7, ToBool("0")) | ||||
| 	eg(8, ToBool("off")) | ||||
| 	eg(9, ToBool("")) | ||||
| 	eg(10, ToBool("?")) | ||||
| 	// Output: | ||||
| 	// 1: true | ||||
| 	// 2: true | ||||
| 	// 3: true | ||||
| 	// 4: true | ||||
| 	// 5: false | ||||
| 	// 6: false | ||||
| 	// 7: false | ||||
| 	// 8: false | ||||
| 	// 9: false | ||||
| 	// 10: false | ||||
| } | ||||
|  | ||||
| func ExampleToBoolOr() { | ||||
| 	eg(1, ToBoolOr("foo", true)) | ||||
| 	eg(2, ToBoolOr("foo", false)) | ||||
| 	eg(3, ToBoolOr("true", false)) | ||||
| 	eg(4, ToBoolOr("", true)) | ||||
| 	// Output: | ||||
| 	// 1: true | ||||
| 	// 2: false | ||||
| 	// 3: true | ||||
| 	// 4: true | ||||
| } | ||||
|  | ||||
| func ExampleToIntOr() { | ||||
| 	eg(1, ToIntOr("foo", 0)) | ||||
| 	eg(2, ToIntOr("", 1)) | ||||
| 	eg(3, ToIntOr("100", 0)) | ||||
| 	eg(4, ToIntOr("-1", 1)) | ||||
| 	// Output: | ||||
| 	// 1: 0 | ||||
| 	// 2: 1 | ||||
| 	// 3: 100 | ||||
| 	// 4: -1 | ||||
| } | ||||
|  | ||||
| func ExampleUnderscore() { | ||||
| 	eg(1, Underscore("fooBar")) | ||||
| 	eg(2, Underscore("FooBar")) | ||||
| 	eg(3, Underscore("")) | ||||
| 	eg(4, Underscore("x")) | ||||
| 	// Output: | ||||
| 	// 1: foo_bar | ||||
| 	// 2: _foo_bar | ||||
| 	// 3: | ||||
| 	// 4: x | ||||
| } | ||||
|  | ||||
| func ExampleWrapHTML() { | ||||
| 	eg(1, WrapHTML("foo", "span", nil)) | ||||
| 	eg(2, WrapHTML("foo", "", nil)) | ||||
| 	eg(3, WrapHTML("foo", "", map[string]string{"class": "bar"})) | ||||
| 	// Output: | ||||
| 	// 1: <span>foo</span> | ||||
| 	// 2: <div>foo</div> | ||||
| 	// 3: <div class="bar">foo</div> | ||||
| } | ||||
|  | ||||
| func ExampleWrapHTMLF() { | ||||
| 	eg(1, Pipe("foo", WrapHTMLF("div", nil))) | ||||
| 	// Output: | ||||
| 	// 1: <div>foo</div> | ||||
| } | ||||
							
								
								
									
										6
									
								
								vendor/vendor.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/vendor.json
									
									
									
									
										vendored
									
									
								
							| @@ -13,6 +13,12 @@ | ||||
| 			"path": "github.com/kr/pty", | ||||
| 			"revision": "fa756f09eeb418bf1cc6268c66ceaad9bb98f598", | ||||
| 			"revisionTime": "2018-06-20T15:12:22Z" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"checksumSHA1": "vUGW1FVEUqtyx20qMHuSZS4i4rU=", | ||||
| 			"path": "github.com/mgutz/str", | ||||
| 			"revision": "968bf66e3da857419e4f6e71b2d5c9ae95682dc4", | ||||
| 			"revisionTime": "2015-06-23T15:38:27Z" | ||||
| 		} | ||||
| 	], | ||||
| 	"rootPath": "github.com/jesseduffield/lazygit" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user