glide up
This commit is contained in:
18
vendor/github.com/aokoli/goutils/.travis.yml
generated
vendored
Normal file
18
vendor/github.com/aokoli/goutils/.travis.yml
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
language: go
|
||||
|
||||
go:
|
||||
- 1.6
|
||||
- 1.7
|
||||
- 1.8
|
||||
- tip
|
||||
|
||||
script:
|
||||
- go test -v
|
||||
|
||||
notifications:
|
||||
webhooks:
|
||||
urls:
|
||||
- https://webhooks.gitter.im/e/06e3328629952dabe3e0
|
||||
on_success: change # options: [always|never|change] default: always
|
||||
on_failure: always # options: [always|never|change] default: always
|
||||
on_start: never # options: [always|never|change] default: always
|
||||
40
vendor/github.com/aokoli/goutils/README.md
generated
vendored
40
vendor/github.com/aokoli/goutils/README.md
generated
vendored
@@ -1,7 +1,10 @@
|
||||
GoUtils
|
||||
===========
|
||||
[](https://masterminds.github.io/stability/maintenance.html)
|
||||
[](https://godoc.org/github.com/Masterminds/goutils) [](https://travis-ci.org/Masterminds/goutils) [](https://ci.appveyor.com/project/mattfarina/goutils)
|
||||
|
||||
GoUtils provides users with utility functions to manipulate strings in various ways. It is a Go implementation of some
|
||||
|
||||
GoUtils provides users with utility functions to manipulate strings in various ways. It is a Go implementation of some
|
||||
string manipulation libraries of Java Apache Commons. GoUtils includes the following Java Apache Commons classes:
|
||||
* WordUtils
|
||||
* RandomStringUtils
|
||||
@@ -10,25 +13,25 @@ string manipulation libraries of Java Apache Commons. GoUtils includes the follo
|
||||
## Installation
|
||||
If you have Go set up on your system, from the GOPATH directory within the command line/terminal, enter this:
|
||||
|
||||
go get github.com/aokoli/goutils
|
||||
|
||||
go get github.com/Masterminds/goutils
|
||||
|
||||
If you do not have Go set up on your system, please follow the [Go installation directions from the documenation](http://golang.org/doc/install), and then follow the instructions above to install GoUtils.
|
||||
|
||||
|
||||
## Documentation
|
||||
GoUtils doc is available here: [](https://godoc.org/github.com/aokoli/goutils)
|
||||
## Documentation
|
||||
GoUtils doc is available here: [](https://godoc.org/github.com/Masterminds/goutils)
|
||||
|
||||
|
||||
## Usage
|
||||
The code snippets below show examples of how to use GoUtils. Some functions return errors while others do not. The first instance below, which does not return an error, is the `Initials` function (located within the `wordutils.go` file).
|
||||
|
||||
package main
|
||||
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/aokoli/goutils"
|
||||
"github.com/Masterminds/goutils"
|
||||
)
|
||||
|
||||
|
||||
func main() {
|
||||
|
||||
// EXAMPLE 1: A goutils function which returns no errors
|
||||
@@ -38,35 +41,30 @@ The code snippets below show examples of how to use GoUtils. Some functions retu
|
||||
Some functions return errors mainly due to illegal arguements used as parameters. The code example below illustrates how to deal with function that returns an error. In this instance, the function is the `Random` function (located within the `randomstringutils.go` file).
|
||||
|
||||
package main
|
||||
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/aokoli/goutils"
|
||||
"github.com/Masterminds/goutils"
|
||||
)
|
||||
|
||||
|
||||
func main() {
|
||||
|
||||
// EXAMPLE 2: A goutils function which returns an error
|
||||
rand1, err1 := goutils.Random (-1, 0, 0, true, true)
|
||||
|
||||
if err1 != nil {
|
||||
if err1 != nil {
|
||||
fmt.Println(err1) // Prints out error message because -1 was entered as the first parameter in goutils.Random(...)
|
||||
} else {
|
||||
fmt.Println(rand1)
|
||||
fmt.Println(rand1)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
## License
|
||||
GoUtils is licensed under the Apache License, Version 2.0. Please check the LICENSE.txt file or visit http://www.apache.org/licenses/LICENSE-2.0 for a copy of the license.
|
||||
GoUtils is licensed under the Apache License, Version 2.0. Please check the LICENSE.txt file or visit http://www.apache.org/licenses/LICENSE-2.0 for a copy of the license.
|
||||
|
||||
## Issue Reporting
|
||||
Make suggestions or report issues using the Git issue tracker: https://github.com/aokoli/goutils/issues
|
||||
Make suggestions or report issues using the Git issue tracker: https://github.com/Masterminds/goutils/issues
|
||||
|
||||
## Website
|
||||
* [GoUtils webpage](http://aokoli.github.io/goutils/)
|
||||
|
||||
## Mailing List
|
||||
Contact [okolialex@gmail.com](mailto:okolialex@mail.com) to be added to the mailing list. You will get updates on the
|
||||
status of the project and the potential direction it will be heading.
|
||||
|
||||
* [GoUtils webpage](http://Masterminds.github.io/goutils/)
|
||||
|
||||
21
vendor/github.com/aokoli/goutils/appveyor.yml
generated
vendored
Normal file
21
vendor/github.com/aokoli/goutils/appveyor.yml
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
version: build-{build}.{branch}
|
||||
|
||||
clone_folder: C:\gopath\src\github.com\Masterminds\goutils
|
||||
shallow_clone: true
|
||||
|
||||
environment:
|
||||
GOPATH: C:\gopath
|
||||
|
||||
platform:
|
||||
- x64
|
||||
|
||||
build: off
|
||||
|
||||
install:
|
||||
- go version
|
||||
- go env
|
||||
|
||||
test_script:
|
||||
- go test -v
|
||||
|
||||
deploy: off
|
||||
207
vendor/github.com/aokoli/goutils/randomstringutils.go
generated
vendored
207
vendor/github.com/aokoli/goutils/randomstringutils.go
generated
vendored
@@ -16,18 +16,16 @@ limitations under the License.
|
||||
|
||||
package goutils
|
||||
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"unicode"
|
||||
"math"
|
||||
"math/rand"
|
||||
"time"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
|
||||
// Provides the time-based seed used to generate random #s
|
||||
var RANDOM = rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||
// RANDOM provides the time-based seed used to generate random numbers
|
||||
var RANDOM = rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||
|
||||
/*
|
||||
RandomNonAlphaNumeric creates a random string whose length is the number of characters specified.
|
||||
@@ -40,11 +38,10 @@ Returns:
|
||||
string - the random string
|
||||
error - an error stemming from an invalid parameter within underlying function, RandomSeed(...)
|
||||
*/
|
||||
func RandomNonAlphaNumeric (count int) (string, error) {
|
||||
return RandomAlphaNumericCustom(count, false, false)
|
||||
func RandomNonAlphaNumeric(count int) (string, error) {
|
||||
return RandomAlphaNumericCustom(count, false, false)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
RandomAscii creates a random string whose length is the number of characters specified.
|
||||
Characters will be chosen from the set of characters whose ASCII value is between 32 and 126 (inclusive).
|
||||
@@ -57,10 +54,9 @@ Returns:
|
||||
error - an error stemming from an invalid parameter within underlying function, RandomSeed(...)
|
||||
*/
|
||||
func RandomAscii(count int) (string, error) {
|
||||
return Random(count, 32, 127, false, false)
|
||||
return Random(count, 32, 127, false, false)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
RandomNumeric creates a random string whose length is the number of characters specified.
|
||||
Characters will be chosen from the set of numeric characters.
|
||||
@@ -72,11 +68,10 @@ Returns:
|
||||
string - the random string
|
||||
error - an error stemming from an invalid parameter within underlying function, RandomSeed(...)
|
||||
*/
|
||||
func RandomNumeric (count int) (string, error) {
|
||||
return Random(count, 0, 0, false, true)
|
||||
func RandomNumeric(count int) (string, error) {
|
||||
return Random(count, 0, 0, false, true)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
RandomAlphabetic creates a random string whose length is the number of characters specified.
|
||||
Characters will be chosen from the set of alpha-numeric characters as indicated by the arguments.
|
||||
@@ -90,11 +85,10 @@ Returns:
|
||||
string - the random string
|
||||
error - an error stemming from an invalid parameter within underlying function, RandomSeed(...)
|
||||
*/
|
||||
func RandomAlphabetic (count int) (string, error) {
|
||||
return Random(count, 0, 0, true, false)
|
||||
func RandomAlphabetic(count int) (string, error) {
|
||||
return Random(count, 0, 0, true, false)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
RandomAlphaNumeric creates a random string whose length is the number of characters specified.
|
||||
Characters will be chosen from the set of alpha-numeric characters.
|
||||
@@ -106,8 +100,8 @@ Returns:
|
||||
string - the random string
|
||||
error - an error stemming from an invalid parameter within underlying function, RandomSeed(...)
|
||||
*/
|
||||
func RandomAlphaNumeric (count int) (string, error) {
|
||||
return Random(count, 0, 0, true, true)
|
||||
func RandomAlphaNumeric(count int) (string, error) {
|
||||
return Random(count, 0, 0, true, true)
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -121,16 +115,15 @@ Parameters:
|
||||
|
||||
Returns:
|
||||
string - the random string
|
||||
error - an error stemming from an invalid parameter within underlying function, RandomSeed(...)
|
||||
error - an error stemming from an invalid parameter within underlying function, RandomSeed(...)
|
||||
*/
|
||||
func RandomAlphaNumericCustom (count int, letters bool, numbers bool) (string, error) {
|
||||
return Random(count, 0, 0, letters, numbers)
|
||||
func RandomAlphaNumericCustom(count int, letters bool, numbers bool) (string, error) {
|
||||
return Random(count, 0, 0, letters, numbers)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Random creates a random string based on a variety of options, using default source of randomness.
|
||||
This method has exactly the same semantics as RandomSeed(int, int, int, bool, bool, []char, *rand.Rand), but
|
||||
This method has exactly the same semantics as RandomSeed(int, int, int, bool, bool, []char, *rand.Rand), but
|
||||
instead of using an externally supplied source of randomness, it uses the internal *rand.Rand instance.
|
||||
|
||||
Parameters:
|
||||
@@ -143,17 +136,16 @@ Parameters:
|
||||
|
||||
Returns:
|
||||
string - the random string
|
||||
error - an error stemming from an invalid parameter within underlying function, RandomSeed(...)
|
||||
error - an error stemming from an invalid parameter within underlying function, RandomSeed(...)
|
||||
*/
|
||||
func Random (count int, start int, end int, letters bool, numbers bool, chars ...rune) (string, error) {
|
||||
return RandomSeed (count, start, end, letters, numbers, chars, RANDOM)
|
||||
func Random(count int, start int, end int, letters bool, numbers bool, chars ...rune) (string, error) {
|
||||
return RandomSeed(count, start, end, letters, numbers, chars, RANDOM)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
RandomSeed creates a random string based on a variety of options, using supplied source of randomness.
|
||||
If the parameters start and end are both 0, start and end are set to ' ' and 'z', the ASCII printable characters, will be used,
|
||||
unless letters and numbers are both false, in which case, start and end are set to 0 and math.MaxInt32, respectively.
|
||||
If the parameters start and end are both 0, start and end are set to ' ' and 'z', the ASCII printable characters, will be used,
|
||||
unless letters and numbers are both false, in which case, start and end are set to 0 and math.MaxInt32, respectively.
|
||||
If chars is not nil, characters stored in chars that are between start and end are chosen.
|
||||
This method accepts a user-supplied *rand.Rand instance to use as a source of randomness. By seeding a single *rand.Rand instance
|
||||
with a fixed seed and using it for each call, the same random sequence of strings can be generated repeatedly and predictably.
|
||||
@@ -169,91 +161,90 @@ Parameters:
|
||||
|
||||
Returns:
|
||||
string - the random string
|
||||
error - an error stemming from invalid parameters: if count < 0; or the provided chars array is empty; or end <= start; or end > len(chars)
|
||||
error - an error stemming from invalid parameters: if count < 0; or the provided chars array is empty; or end <= start; or end > len(chars)
|
||||
*/
|
||||
func RandomSeed (count int, start int, end int, letters bool, numbers bool, chars []rune, random *rand.Rand) (string, error) {
|
||||
func RandomSeed(count int, start int, end int, letters bool, numbers bool, chars []rune, random *rand.Rand) (string, error) {
|
||||
|
||||
if count == 0 {
|
||||
return "", nil
|
||||
} else if count < 0 {
|
||||
err := fmt.Errorf("randomstringutils illegal argument: Requested random string length %v is less than 0.", count) // equiv to err := errors.New("...")
|
||||
return "", err
|
||||
}
|
||||
if chars != nil && len(chars) == 0 {
|
||||
err := fmt.Errorf("randomstringutils illegal argument: The chars array must not be empty")
|
||||
return "", err
|
||||
}
|
||||
if count == 0 {
|
||||
return "", nil
|
||||
} else if count < 0 {
|
||||
err := fmt.Errorf("randomstringutils illegal argument: Requested random string length %v is less than 0.", count) // equiv to err := errors.New("...")
|
||||
return "", err
|
||||
}
|
||||
if chars != nil && len(chars) == 0 {
|
||||
err := fmt.Errorf("randomstringutils illegal argument: The chars array must not be empty")
|
||||
return "", err
|
||||
}
|
||||
|
||||
if start == 0 && end == 0 {
|
||||
if chars != nil {
|
||||
end = len(chars)
|
||||
} else {
|
||||
if !letters && !numbers {
|
||||
end = math.MaxInt32
|
||||
} else {
|
||||
end = 'z' + 1
|
||||
start = ' '
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if end <= start {
|
||||
err := fmt.Errorf("randomstringutils illegal argument: Parameter end (%v) must be greater than start (%v)", end, start)
|
||||
return "", err
|
||||
}
|
||||
if start == 0 && end == 0 {
|
||||
if chars != nil {
|
||||
end = len(chars)
|
||||
} else {
|
||||
if !letters && !numbers {
|
||||
end = math.MaxInt32
|
||||
} else {
|
||||
end = 'z' + 1
|
||||
start = ' '
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if end <= start {
|
||||
err := fmt.Errorf("randomstringutils illegal argument: Parameter end (%v) must be greater than start (%v)", end, start)
|
||||
return "", err
|
||||
}
|
||||
|
||||
if chars != nil && end > len(chars) {
|
||||
err := fmt.Errorf("randomstringutils illegal argument: Parameter end (%v) cannot be greater than len(chars) (%v)", end, len(chars))
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
if chars != nil && end > len(chars) {
|
||||
err := fmt.Errorf("randomstringutils illegal argument: Parameter end (%v) cannot be greater than len(chars) (%v)", end, len(chars))
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
|
||||
buffer := make([]rune, count)
|
||||
gap := end - start
|
||||
buffer := make([]rune, count)
|
||||
gap := end - start
|
||||
|
||||
// high-surrogates range, (\uD800-\uDBFF) = 55296 - 56319
|
||||
// low-surrogates range, (\uDC00-\uDFFF) = 56320 - 57343
|
||||
|
||||
// high-surrogates range, (\uD800-\uDBFF) = 55296 - 56319
|
||||
// low-surrogates range, (\uDC00-\uDFFF) = 56320 - 57343
|
||||
for count != 0 {
|
||||
count--
|
||||
var ch rune
|
||||
if chars == nil {
|
||||
ch = rune(random.Intn(gap) + start)
|
||||
} else {
|
||||
ch = chars[random.Intn(gap)+start]
|
||||
}
|
||||
|
||||
for count != 0 {
|
||||
count--
|
||||
var ch rune
|
||||
if chars == nil {
|
||||
ch = rune(random.Intn(gap) + start)
|
||||
} else {
|
||||
ch = chars[random.Intn(gap) + start]
|
||||
}
|
||||
|
||||
if letters && unicode.IsLetter(ch) || numbers && unicode.IsDigit(ch) || !letters && !numbers {
|
||||
if ch >= 56320 && ch <= 57343 { // low surrogate range
|
||||
if count == 0 {
|
||||
count++
|
||||
} else {
|
||||
// Insert low surrogate
|
||||
buffer[count] = ch
|
||||
count--
|
||||
// Insert high surrogate
|
||||
buffer[count] = rune(55296 + random.Intn(128))
|
||||
}
|
||||
} else if ch >= 55296 && ch <= 56191 { // High surrogates range (Partial)
|
||||
if count == 0 {
|
||||
count++
|
||||
} else {
|
||||
// Insert low surrogate
|
||||
buffer[count] = rune(56320 + random.Intn(128))
|
||||
count--
|
||||
// Insert high surrogate
|
||||
buffer[count] = ch
|
||||
}
|
||||
} else if ch >= 56192 && ch <= 56319 {
|
||||
// private high surrogate, skip it
|
||||
count++
|
||||
} else {
|
||||
// not one of the surrogates*
|
||||
buffer[count] = ch
|
||||
}
|
||||
} else {
|
||||
count++
|
||||
}
|
||||
}
|
||||
return string(buffer), nil
|
||||
if letters && unicode.IsLetter(ch) || numbers && unicode.IsDigit(ch) || !letters && !numbers {
|
||||
if ch >= 56320 && ch <= 57343 { // low surrogate range
|
||||
if count == 0 {
|
||||
count++
|
||||
} else {
|
||||
// Insert low surrogate
|
||||
buffer[count] = ch
|
||||
count--
|
||||
// Insert high surrogate
|
||||
buffer[count] = rune(55296 + random.Intn(128))
|
||||
}
|
||||
} else if ch >= 55296 && ch <= 56191 { // High surrogates range (Partial)
|
||||
if count == 0 {
|
||||
count++
|
||||
} else {
|
||||
// Insert low surrogate
|
||||
buffer[count] = rune(56320 + random.Intn(128))
|
||||
count--
|
||||
// Insert high surrogate
|
||||
buffer[count] = ch
|
||||
}
|
||||
} else if ch >= 56192 && ch <= 56319 {
|
||||
// private high surrogate, skip it
|
||||
count++
|
||||
} else {
|
||||
// not one of the surrogates*
|
||||
buffer[count] = ch
|
||||
}
|
||||
} else {
|
||||
count++
|
||||
}
|
||||
}
|
||||
return string(buffer), nil
|
||||
}
|
||||
|
||||
53
vendor/github.com/aokoli/goutils/randomstringutils_test.go
generated
vendored
53
vendor/github.com/aokoli/goutils/randomstringutils_test.go
generated
vendored
@@ -1,92 +1,75 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
package goutils
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// ****************************** TESTS ********************************************
|
||||
|
||||
func TestRandomSeed(t *testing.T) {
|
||||
|
||||
|
||||
|
||||
// count, start, end, letters, numbers := 5, 0, 0, true, true
|
||||
random := rand.New(rand.NewSource(10))
|
||||
out := "3ip9v"
|
||||
|
||||
// Test 1: Simulating RandomAlphaNumeric(count int)
|
||||
if x, _ := RandomSeed (5, 0, 0, true, true, nil, random); x != out {
|
||||
if x, _ := RandomSeed(5, 0, 0, true, true, nil, random); x != out {
|
||||
t.Errorf("RandomSeed(%v, %v, %v, %v, %v, %v, %v) = %v, want %v", 5, 0, 0, true, true, nil, random, x, out)
|
||||
}
|
||||
|
||||
// Test 2: Simulating RandomAlphabetic(count int)
|
||||
out = "MBrbj"
|
||||
|
||||
if x, _ := RandomSeed (5, 0, 0, true, false, nil, random); x != out {
|
||||
if x, _ := RandomSeed(5, 0, 0, true, false, nil, random); x != out {
|
||||
t.Errorf("RandomSeed(%v, %v, %v, %v, %v, %v, %v) = %v, want %v", 5, 0, 0, true, false, nil, random, x, out)
|
||||
}
|
||||
|
||||
|
||||
// Test 3: Simulating RandomNumeric(count int)
|
||||
out = "88935"
|
||||
|
||||
if x, _ := RandomSeed (5, 0, 0, false, true, nil, random); x != out {
|
||||
if x, _ := RandomSeed(5, 0, 0, false, true, nil, random); x != out {
|
||||
t.Errorf("RandomSeed(%v, %v, %v, %v, %v, %v, %v) = %v, want %v", 5, 0, 0, false, true, nil, random, x, out)
|
||||
}
|
||||
|
||||
|
||||
// Test 4: Simulating RandomAscii(count int)
|
||||
out = "H_I;E"
|
||||
|
||||
if x, _ := RandomSeed (5, 32, 127, false, false, nil, random); x != out {
|
||||
if x, _ := RandomSeed(5, 32, 127, false, false, nil, random); x != out {
|
||||
t.Errorf("RandomSeed(%v, %v, %v, %v, %v, %v, %v) = %v, want %v", 5, 32, 127, false, false, nil, random, x, out)
|
||||
}
|
||||
|
||||
|
||||
// Test 5: Simulating RandomSeed(...) with custom chars
|
||||
chars := []rune {'1','2','3','a','b','c'}
|
||||
chars := []rune{'1', '2', '3', 'a', 'b', 'c'}
|
||||
out = "2b2ca"
|
||||
|
||||
if x, _ := RandomSeed (5, 0, 0, false, false, chars, random); x != out {
|
||||
if x, _ := RandomSeed(5, 0, 0, false, false, chars, random); x != out {
|
||||
t.Errorf("RandomSeed(%v, %v, %v, %v, %v, %v, %v) = %v, want %v", 5, 0, 0, false, false, chars, random, x, out)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// ****************************** EXAMPLES ********************************************
|
||||
|
||||
|
||||
func ExampleRandomSeed() {
|
||||
|
||||
var seed int64 = 10 // If you change this seed #, the random sequence below will change
|
||||
random := rand.New(rand.NewSource(seed))
|
||||
chars := []rune {'1','2','3','a','b','c'}
|
||||
var seed int64 = 10 // If you change this seed #, the random sequence below will change
|
||||
random := rand.New(rand.NewSource(seed))
|
||||
chars := []rune{'1', '2', '3', 'a', 'b', 'c'}
|
||||
|
||||
rand1, _ := RandomSeed (5, 0, 0, true, true, nil, random) // RandomAlphaNumeric (Alphabets and numbers possible)
|
||||
rand2, _ := RandomSeed (5, 0, 0, true, false, nil, random) // RandomAlphabetic (Only alphabets)
|
||||
rand3, _ := RandomSeed (5, 0, 0, false, true, nil, random) // RandomNumeric (Only numbers)
|
||||
rand4, _ := RandomSeed (5, 32, 127, false, false, nil, random) // RandomAscii (Alphabets, numbers, and other ASCII chars)
|
||||
rand5, _ := RandomSeed (5, 0, 0, true, true, chars, random) // RandomSeed with custom characters
|
||||
rand1, _ := RandomSeed(5, 0, 0, true, true, nil, random) // RandomAlphaNumeric (Alphabets and numbers possible)
|
||||
rand2, _ := RandomSeed(5, 0, 0, true, false, nil, random) // RandomAlphabetic (Only alphabets)
|
||||
rand3, _ := RandomSeed(5, 0, 0, false, true, nil, random) // RandomNumeric (Only numbers)
|
||||
rand4, _ := RandomSeed(5, 32, 127, false, false, nil, random) // RandomAscii (Alphabets, numbers, and other ASCII chars)
|
||||
rand5, _ := RandomSeed(5, 0, 0, true, true, chars, random) // RandomSeed with custom characters
|
||||
|
||||
fmt.Println(rand1)
|
||||
fmt.Println(rand2)
|
||||
fmt.Println(rand3)
|
||||
fmt.Println(rand4)
|
||||
fmt.Println(rand5)
|
||||
// Output:
|
||||
// Output:
|
||||
// 3ip9v
|
||||
// MBrbj
|
||||
// 88935
|
||||
|
||||
214
vendor/github.com/aokoli/goutils/stringutils.go
generated
vendored
214
vendor/github.com/aokoli/goutils/stringutils.go
generated
vendored
@@ -16,27 +16,25 @@ limitations under the License.
|
||||
|
||||
package goutils
|
||||
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"unicode"
|
||||
"bytes"
|
||||
"fmt"
|
||||
"strings"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
// Typically returned by functions where a searched item cannot be found
|
||||
const INDEX_NOT_FOUND = -1
|
||||
|
||||
const INDEX_NOT_FOUND = -1
|
||||
|
||||
/*
|
||||
Abbreviate abbreviates a string using ellipses. This will turn the string "Now is the time for all good men" into "Now is the time for..."
|
||||
|
||||
Specifically, the algorithm is as follows:
|
||||
Specifically, the algorithm is as follows:
|
||||
|
||||
- If str is less than maxWidth characters long, return it.
|
||||
- Else abbreviate it to (str[0:maxWidth - 3] + "...").
|
||||
- If maxWidth is less than 4, return an illegal argument error.
|
||||
- In no case will it return a string of length greater than maxWidth.
|
||||
- If str is less than maxWidth characters long, return it.
|
||||
- Else abbreviate it to (str[0:maxWidth - 3] + "...").
|
||||
- If maxWidth is less than 4, return an illegal argument error.
|
||||
- In no case will it return a string of length greater than maxWidth.
|
||||
|
||||
Parameters:
|
||||
str - the string to check
|
||||
@@ -46,15 +44,14 @@ Returns:
|
||||
string - abbreviated string
|
||||
error - if the width is too small
|
||||
*/
|
||||
func Abbreviate (str string, maxWidth int) (string, error) {
|
||||
func Abbreviate(str string, maxWidth int) (string, error) {
|
||||
return AbbreviateFull(str, 0, maxWidth)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
AbbreviateFull abbreviates a string using ellipses. This will turn the string "Now is the time for all good men" into "...is the time for..."
|
||||
This function works like Abbreviate(string, int), but allows you to specify a "left edge" offset. Note that this left edge is not
|
||||
necessarily going to be the leftmost character in the result, or the first character following the ellipses, but it will appear
|
||||
This function works like Abbreviate(string, int), but allows you to specify a "left edge" offset. Note that this left edge is not
|
||||
necessarily going to be the leftmost character in the result, or the first character following the ellipses, but it will appear
|
||||
somewhere in the result.
|
||||
In no case will it return a string of length greater than maxWidth.
|
||||
|
||||
@@ -67,39 +64,38 @@ Returns:
|
||||
string - abbreviated string
|
||||
error - if the width is too small
|
||||
*/
|
||||
func AbbreviateFull (str string, offset int, maxWidth int) (string, error) {
|
||||
if str == "" {
|
||||
return "", nil
|
||||
}
|
||||
if maxWidth < 4 {
|
||||
err := fmt.Errorf("stringutils illegal argument: Minimum abbreviation width is 4")
|
||||
return "", err
|
||||
}
|
||||
if len(str) <= maxWidth {
|
||||
return str, nil
|
||||
}
|
||||
if offset > len(str) {
|
||||
offset = len(str)
|
||||
}
|
||||
if len(str) - offset < (maxWidth - 3) { // 15 - 5 < 10 - 3 = 10 < 7
|
||||
offset = len(str) - (maxWidth - 3)
|
||||
}
|
||||
abrevMarker := "..."
|
||||
if offset <= 4 {
|
||||
return str[0:maxWidth - 3] + abrevMarker, nil// str.substring(0, maxWidth - 3) + abrevMarker;
|
||||
}
|
||||
if maxWidth < 7 {
|
||||
err := fmt.Errorf("stringutils illegal argument: Minimum abbreviation width with offset is 7")
|
||||
return "", err
|
||||
}
|
||||
if (offset + maxWidth - 3) < len(str) { // 5 + (10-3) < 15 = 12 < 15
|
||||
abrevStr, _ := Abbreviate(str[offset:len(str)], (maxWidth - 3))
|
||||
return abrevMarker + abrevStr, nil// abrevMarker + abbreviate(str.substring(offset), maxWidth - 3);
|
||||
}
|
||||
return abrevMarker + str[(len(str) - (maxWidth - 3)):len(str)], nil // abrevMarker + str.substring(str.length() - (maxWidth - 3));
|
||||
func AbbreviateFull(str string, offset int, maxWidth int) (string, error) {
|
||||
if str == "" {
|
||||
return "", nil
|
||||
}
|
||||
if maxWidth < 4 {
|
||||
err := fmt.Errorf("stringutils illegal argument: Minimum abbreviation width is 4")
|
||||
return "", err
|
||||
}
|
||||
if len(str) <= maxWidth {
|
||||
return str, nil
|
||||
}
|
||||
if offset > len(str) {
|
||||
offset = len(str)
|
||||
}
|
||||
if len(str)-offset < (maxWidth - 3) { // 15 - 5 < 10 - 3 = 10 < 7
|
||||
offset = len(str) - (maxWidth - 3)
|
||||
}
|
||||
abrevMarker := "..."
|
||||
if offset <= 4 {
|
||||
return str[0:maxWidth-3] + abrevMarker, nil // str.substring(0, maxWidth - 3) + abrevMarker;
|
||||
}
|
||||
if maxWidth < 7 {
|
||||
err := fmt.Errorf("stringutils illegal argument: Minimum abbreviation width with offset is 7")
|
||||
return "", err
|
||||
}
|
||||
if (offset + maxWidth - 3) < len(str) { // 5 + (10-3) < 15 = 12 < 15
|
||||
abrevStr, _ := Abbreviate(str[offset:len(str)], (maxWidth - 3))
|
||||
return abrevMarker + abrevStr, nil // abrevMarker + abbreviate(str.substring(offset), maxWidth - 3);
|
||||
}
|
||||
return abrevMarker + str[(len(str)-(maxWidth-3)):len(str)], nil // abrevMarker + str.substring(str.length() - (maxWidth - 3));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
DeleteWhiteSpace deletes all whitespaces from a string as defined by unicode.IsSpace(rune).
|
||||
It returns the string without whitespaces.
|
||||
@@ -111,26 +107,25 @@ Returns:
|
||||
the string without whitespaces
|
||||
*/
|
||||
func DeleteWhiteSpace(str string) string {
|
||||
if str == "" {
|
||||
return str
|
||||
}
|
||||
sz := len(str)
|
||||
var chs bytes.Buffer
|
||||
count := 0
|
||||
for i := 0; i < sz; i++ {
|
||||
ch := rune(str[i])
|
||||
if !unicode.IsSpace(ch) {
|
||||
chs.WriteRune(ch)
|
||||
count++
|
||||
}
|
||||
}
|
||||
if count == sz {
|
||||
return str
|
||||
}
|
||||
return chs.String()
|
||||
if str == "" {
|
||||
return str
|
||||
}
|
||||
sz := len(str)
|
||||
var chs bytes.Buffer
|
||||
count := 0
|
||||
for i := 0; i < sz; i++ {
|
||||
ch := rune(str[i])
|
||||
if !unicode.IsSpace(ch) {
|
||||
chs.WriteRune(ch)
|
||||
count++
|
||||
}
|
||||
}
|
||||
if count == sz {
|
||||
return str
|
||||
}
|
||||
return chs.String()
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
IndexOfDifference compares two strings, and returns the index at which the strings begin to differ.
|
||||
|
||||
@@ -142,26 +137,24 @@ Returns:
|
||||
the index where str1 and str2 begin to differ; -1 if they are equal
|
||||
*/
|
||||
func IndexOfDifference(str1 string, str2 string) int {
|
||||
if str1 == str2 {
|
||||
return INDEX_NOT_FOUND
|
||||
}
|
||||
if IsEmpty(str1) || IsEmpty(str2) {
|
||||
return 0
|
||||
}
|
||||
var i int;
|
||||
for i = 0; i < len(str1) && i < len(str2); i++ {
|
||||
if rune(str1[i]) != rune(str2[i]) {
|
||||
break
|
||||
}
|
||||
}
|
||||
if i < len(str2) || i < len(str1) {
|
||||
return i
|
||||
}
|
||||
return INDEX_NOT_FOUND
|
||||
if str1 == str2 {
|
||||
return INDEX_NOT_FOUND
|
||||
}
|
||||
if IsEmpty(str1) || IsEmpty(str2) {
|
||||
return 0
|
||||
}
|
||||
var i int
|
||||
for i = 0; i < len(str1) && i < len(str2); i++ {
|
||||
if rune(str1[i]) != rune(str2[i]) {
|
||||
break
|
||||
}
|
||||
}
|
||||
if i < len(str2) || i < len(str1) {
|
||||
return i
|
||||
}
|
||||
return INDEX_NOT_FOUND
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
IsBlank checks if a string is whitespace or empty (""). Observe the following behavior:
|
||||
|
||||
@@ -169,7 +162,7 @@ IsBlank checks if a string is whitespace or empty (""). Observe the following be
|
||||
goutils.IsBlank(" ") = true
|
||||
goutils.IsBlank("bob") = false
|
||||
goutils.IsBlank(" bob ") = false
|
||||
|
||||
|
||||
Parameter:
|
||||
str - the string to check
|
||||
|
||||
@@ -177,24 +170,23 @@ Returns:
|
||||
true - if the string is whitespace or empty ("")
|
||||
*/
|
||||
func IsBlank(str string) bool {
|
||||
strLen := len(str)
|
||||
if str == "" || strLen == 0 {
|
||||
return true
|
||||
}
|
||||
for i := 0; i < strLen; i++ {
|
||||
if unicode.IsSpace(rune(str[i])) == false {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
strLen := len(str)
|
||||
if str == "" || strLen == 0 {
|
||||
return true
|
||||
}
|
||||
for i := 0; i < strLen; i++ {
|
||||
if unicode.IsSpace(rune(str[i])) == false {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
IndexOf returns the index of the first instance of sub in str, with the search beginning from the
|
||||
/*
|
||||
IndexOf returns the index of the first instance of sub in str, with the search beginning from the
|
||||
index start point specified. -1 is returned if sub is not present in str.
|
||||
|
||||
An empty string ("") will return -1 (INDEX_NOT_FOUND). A negative start position is treated as zero.
|
||||
An empty string ("") will return -1 (INDEX_NOT_FOUND). A negative start position is treated as zero.
|
||||
A start position greater than the string length returns -1.
|
||||
|
||||
Parameters:
|
||||
@@ -207,26 +199,26 @@ Returns:
|
||||
*/
|
||||
func IndexOf(str string, sub string, start int) int {
|
||||
|
||||
if (start < 0) {
|
||||
start = 0
|
||||
}
|
||||
if start < 0 {
|
||||
start = 0
|
||||
}
|
||||
|
||||
if len(str) < start {
|
||||
return INDEX_NOT_FOUND
|
||||
}
|
||||
if len(str) < start {
|
||||
return INDEX_NOT_FOUND
|
||||
}
|
||||
|
||||
if IsEmpty(str) || IsEmpty(sub) {
|
||||
return INDEX_NOT_FOUND
|
||||
}
|
||||
if IsEmpty(str) || IsEmpty(sub) {
|
||||
return INDEX_NOT_FOUND
|
||||
}
|
||||
|
||||
partialIndex := strings.Index(str[start:len(str)], sub)
|
||||
if partialIndex == -1 {
|
||||
return INDEX_NOT_FOUND
|
||||
}
|
||||
return partialIndex + start
|
||||
partialIndex := strings.Index(str[start:len(str)], sub)
|
||||
if partialIndex == -1 {
|
||||
return INDEX_NOT_FOUND
|
||||
}
|
||||
return partialIndex + start
|
||||
}
|
||||
|
||||
// IsEmpty checks if a string is empty (""). Returns true if empty, and false otherwise.
|
||||
func IsEmpty(str string) bool {
|
||||
return len(str) == 0
|
||||
return len(str) == 0
|
||||
}
|
||||
|
||||
52
vendor/github.com/aokoli/goutils/stringutils_test.go
generated
vendored
52
vendor/github.com/aokoli/goutils/stringutils_test.go
generated
vendored
@@ -1,8 +1,8 @@
|
||||
package goutils
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"fmt"
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// ****************************** TESTS ********************************************
|
||||
@@ -26,7 +26,6 @@ func TestAbbreviate(t *testing.T) {
|
||||
t.Errorf("Abbreviate(%v, %v) = %v, want %v", in, maxWidth, x, out)
|
||||
}
|
||||
|
||||
|
||||
// Test 3
|
||||
out = "a..."
|
||||
maxWidth = 4
|
||||
@@ -36,7 +35,6 @@ func TestAbbreviate(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func TestAbbreviateFull(t *testing.T) {
|
||||
|
||||
// Test 1
|
||||
@@ -58,20 +56,16 @@ func TestAbbreviateFull(t *testing.T) {
|
||||
t.Errorf("AbbreviateFull(%v, %v, %v) = %v, want %v", in, offset, maxWidth, x, out)
|
||||
}
|
||||
|
||||
|
||||
// Test 3
|
||||
out = "...ijklmno"
|
||||
offset = 12
|
||||
maxWidth = 10
|
||||
|
||||
|
||||
if x, _ := AbbreviateFull(in, offset, maxWidth); x != out {
|
||||
t.Errorf("AbbreviateFull(%v, %v, %v) = %v, want %v", in, offset, maxWidth, x, out)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
func TestIndexOf(t *testing.T) {
|
||||
|
||||
// Test 1
|
||||
@@ -100,7 +94,6 @@ func TestIndexOf(t *testing.T) {
|
||||
t.Errorf("IndexOf(%v, %v, %v) = %v, want %v", str, sub, start, x, out)
|
||||
}
|
||||
|
||||
|
||||
// Test 4
|
||||
sub = "z"
|
||||
out = -1
|
||||
@@ -109,8 +102,7 @@ func TestIndexOf(t *testing.T) {
|
||||
t.Errorf("IndexOf(%v, %v, %v) = %v, want %v", str, sub, start, x, out)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestIsBlank(t *testing.T) {
|
||||
|
||||
@@ -137,9 +129,7 @@ func TestIsBlank(t *testing.T) {
|
||||
if x := IsBlank(str); x != out {
|
||||
t.Errorf("IndexOf(%v) = %v, want %v", str, x, out)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
func TestDeleteWhiteSpace(t *testing.T) {
|
||||
|
||||
@@ -158,8 +148,7 @@ func TestDeleteWhiteSpace(t *testing.T) {
|
||||
if x := DeleteWhiteSpace(str); x != out {
|
||||
t.Errorf("IndexOf(%v) = %v, want %v", str, x, out)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestIndexOfDifference(t *testing.T) {
|
||||
|
||||
@@ -170,8 +159,7 @@ func TestIndexOfDifference(t *testing.T) {
|
||||
if x := IndexOfDifference(str1, str2); x != out {
|
||||
t.Errorf("IndexOfDifference(%v, %v) = %v, want %v", str1, str2, x, out)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// ****************************** EXAMPLES ********************************************
|
||||
|
||||
@@ -184,13 +172,12 @@ func ExampleAbbreviate() {
|
||||
out4, _ := Abbreviate(str, 4)
|
||||
_, err1 := Abbreviate(str, 3)
|
||||
|
||||
|
||||
fmt.Println(out1)
|
||||
fmt.Println(out2)
|
||||
fmt.Println(out3)
|
||||
fmt.Println(out4)
|
||||
fmt.Println(err1)
|
||||
// Output:
|
||||
// Output:
|
||||
// abc...
|
||||
// abcdefg
|
||||
// abcdefg
|
||||
@@ -198,7 +185,6 @@ func ExampleAbbreviate() {
|
||||
// stringutils illegal argument: Minimum abbreviation width is 4
|
||||
}
|
||||
|
||||
|
||||
func ExampleAbbreviateFull() {
|
||||
|
||||
str := "abcdefghijklmno"
|
||||
@@ -215,7 +201,6 @@ func ExampleAbbreviateFull() {
|
||||
_, err1 := AbbreviateFull(str2, 0, 3)
|
||||
_, err2 := AbbreviateFull(str2, 5, 6)
|
||||
|
||||
|
||||
fmt.Println(out1)
|
||||
fmt.Println(out2)
|
||||
fmt.Println(out3)
|
||||
@@ -227,7 +212,7 @@ func ExampleAbbreviateFull() {
|
||||
fmt.Println(out9)
|
||||
fmt.Println(err1)
|
||||
fmt.Println(err2)
|
||||
// Output:
|
||||
// Output:
|
||||
// abcdefg...
|
||||
// abcdefg...
|
||||
// abcdefg...
|
||||
@@ -238,10 +223,9 @@ func ExampleAbbreviateFull() {
|
||||
// ...ijklmno
|
||||
// ...ijklmno
|
||||
// stringutils illegal argument: Minimum abbreviation width is 4
|
||||
// stringutils illegal argument: Minimum abbreviation width with offset is 7
|
||||
// stringutils illegal argument: Minimum abbreviation width with offset is 7
|
||||
}
|
||||
|
||||
|
||||
func ExampleIsBlank() {
|
||||
|
||||
out1 := IsBlank("")
|
||||
@@ -253,14 +237,13 @@ func ExampleIsBlank() {
|
||||
fmt.Println(out2)
|
||||
fmt.Println(out3)
|
||||
fmt.Println(out4)
|
||||
// Output:
|
||||
// Output:
|
||||
// true
|
||||
// true
|
||||
// false
|
||||
// false
|
||||
}
|
||||
|
||||
|
||||
func ExampleDeleteWhiteSpace() {
|
||||
|
||||
out1 := DeleteWhiteSpace(" ")
|
||||
@@ -272,18 +255,17 @@ func ExampleDeleteWhiteSpace() {
|
||||
fmt.Println(out2)
|
||||
fmt.Println(out3)
|
||||
fmt.Println(out4)
|
||||
// Output:
|
||||
//
|
||||
// Output:
|
||||
//
|
||||
// bob
|
||||
// bob
|
||||
// bob
|
||||
}
|
||||
|
||||
|
||||
func ExampleIndexOf() {
|
||||
|
||||
str := "abcdefgehije"
|
||||
out1 := IndexOf(str, "e", 0)
|
||||
out1 := IndexOf(str, "e", 0)
|
||||
out2 := IndexOf(str, "e", 5)
|
||||
out3 := IndexOf(str, "e", 8)
|
||||
out4 := IndexOf(str, "eh", 0)
|
||||
@@ -298,7 +280,7 @@ func ExampleIndexOf() {
|
||||
fmt.Println(out5)
|
||||
fmt.Println(out6)
|
||||
fmt.Println(out7)
|
||||
// Output:
|
||||
// Output:
|
||||
// 4
|
||||
// 7
|
||||
// 11
|
||||
@@ -307,12 +289,10 @@ func ExampleIndexOf() {
|
||||
// -1
|
||||
// -1
|
||||
}
|
||||
|
||||
|
||||
|
||||
func ExampleIndexOfDifference() {
|
||||
|
||||
out1 := IndexOfDifference("abc", "abc")
|
||||
out1 := IndexOfDifference("abc", "abc")
|
||||
out2 := IndexOfDifference("ab", "abxyz")
|
||||
out3 := IndexOfDifference("", "abc")
|
||||
out4 := IndexOfDifference("abcde", "abxyz")
|
||||
@@ -321,7 +301,7 @@ func ExampleIndexOfDifference() {
|
||||
fmt.Println(out2)
|
||||
fmt.Println(out3)
|
||||
fmt.Println(out4)
|
||||
// Output:
|
||||
// Output:
|
||||
// -1
|
||||
// 2
|
||||
// 0
|
||||
|
||||
331
vendor/github.com/aokoli/goutils/wordutils.go
generated
vendored
331
vendor/github.com/aokoli/goutils/wordutils.go
generated
vendored
@@ -14,9 +14,9 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
/*
|
||||
Package goutils provides utility functions to manipulate strings in various ways.
|
||||
The code snippets below show examples of how to use goutils. Some functions return
|
||||
The code snippets below show examples of how to use goutils. Some functions return
|
||||
errors while others do not, so usage would vary as a result.
|
||||
|
||||
Example:
|
||||
@@ -36,21 +36,21 @@ Example:
|
||||
|
||||
|
||||
// EXAMPLE 2: A goutils function which returns an error
|
||||
rand1, err1 := goutils.Random (-1, 0, 0, true, true)
|
||||
rand1, err1 := goutils.Random (-1, 0, 0, true, true)
|
||||
|
||||
if err1 != nil {
|
||||
if err1 != nil {
|
||||
fmt.Println(err1) // Prints out error message because -1 was entered as the first parameter in goutils.Random(...)
|
||||
} else {
|
||||
fmt.Println(rand1)
|
||||
fmt.Println(rand1)
|
||||
}
|
||||
}
|
||||
*/
|
||||
package goutils
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"bytes"
|
||||
"strings"
|
||||
"unicode"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
// VERSION indicates the current version of goutils
|
||||
@@ -68,8 +68,8 @@ Parameters:
|
||||
Returns:
|
||||
a line with newlines inserted
|
||||
*/
|
||||
func Wrap (str string, wrapLength int) string {
|
||||
return WrapCustom (str, wrapLength, "", false)
|
||||
func Wrap(str string, wrapLength int) string {
|
||||
return WrapCustom(str, wrapLength, "", false)
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -85,75 +85,74 @@ Parameters:
|
||||
Returns:
|
||||
a line with newlines inserted
|
||||
*/
|
||||
func WrapCustom (str string, wrapLength int, newLineStr string, wrapLongWords bool) string {
|
||||
func WrapCustom(str string, wrapLength int, newLineStr string, wrapLongWords bool) string {
|
||||
|
||||
if str == "" {
|
||||
return ""
|
||||
}
|
||||
if newLineStr == "" {
|
||||
newLineStr = "\n" // TODO Assumes "\n" is seperator. Explore SystemUtils.LINE_SEPARATOR from Apache Commons
|
||||
newLineStr = "\n" // TODO Assumes "\n" is seperator. Explore SystemUtils.LINE_SEPARATOR from Apache Commons
|
||||
}
|
||||
if wrapLength < 1 {
|
||||
wrapLength = 1
|
||||
}
|
||||
|
||||
inputLineLength := len(str)
|
||||
offset := 0
|
||||
inputLineLength := len(str)
|
||||
offset := 0
|
||||
|
||||
var wrappedLine bytes.Buffer
|
||||
var wrappedLine bytes.Buffer
|
||||
|
||||
for inputLineLength-offset > wrapLength {
|
||||
|
||||
if rune(str[offset]) == ' ' {
|
||||
for inputLineLength-offset > wrapLength {
|
||||
|
||||
if rune(str[offset]) == ' ' {
|
||||
offset++
|
||||
continue
|
||||
}
|
||||
|
||||
end := wrapLength + offset + 1
|
||||
spaceToWrapAt := strings.LastIndex(str[offset:end], " ") + offset
|
||||
spaceToWrapAt := strings.LastIndex(str[offset:end], " ") + offset
|
||||
|
||||
if spaceToWrapAt >= offset {
|
||||
if spaceToWrapAt >= offset {
|
||||
// normal word (not longer than wrapLength)
|
||||
wrappedLine.WriteString(str[offset:spaceToWrapAt])
|
||||
wrappedLine.WriteString(newLineStr)
|
||||
wrappedLine.WriteString(str[offset:spaceToWrapAt])
|
||||
wrappedLine.WriteString(newLineStr)
|
||||
offset = spaceToWrapAt + 1
|
||||
|
||||
} else {
|
||||
// long word or URL
|
||||
if wrapLongWords {
|
||||
end := wrapLength + offset
|
||||
// long words are wrapped one line at a time
|
||||
wrappedLine.WriteString(str[offset:end])
|
||||
wrappedLine.WriteString(newLineStr)
|
||||
offset += wrapLength
|
||||
} else {
|
||||
// long words aren't wrapped, just extended beyond limit
|
||||
end := wrapLength + offset
|
||||
spaceToWrapAt = strings.IndexRune(str[end:len(str)], ' ') + end
|
||||
if spaceToWrapAt >= 0 {
|
||||
wrappedLine.WriteString(str[offset:spaceToWrapAt])
|
||||
wrappedLine.WriteString(newLineStr)
|
||||
offset = spaceToWrapAt + 1
|
||||
} else {
|
||||
wrappedLine.WriteString(str[offset:len(str)])
|
||||
offset = inputLineLength
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// long word or URL
|
||||
if wrapLongWords {
|
||||
end := wrapLength + offset
|
||||
// long words are wrapped one line at a time
|
||||
wrappedLine.WriteString(str[offset:end])
|
||||
wrappedLine.WriteString(newLineStr)
|
||||
offset += wrapLength
|
||||
} else {
|
||||
// long words aren't wrapped, just extended beyond limit
|
||||
end := wrapLength + offset
|
||||
spaceToWrapAt = strings.IndexRune(str[end:len(str)], ' ') + end
|
||||
if spaceToWrapAt >= 0 {
|
||||
wrappedLine.WriteString(str[offset:spaceToWrapAt])
|
||||
wrappedLine.WriteString(newLineStr)
|
||||
offset = spaceToWrapAt + 1
|
||||
} else {
|
||||
wrappedLine.WriteString(str[offset:len(str)])
|
||||
offset = inputLineLength
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wrappedLine.WriteString(str[offset:len(str)])
|
||||
wrappedLine.WriteString(str[offset:len(str)])
|
||||
|
||||
return wrappedLine.String()
|
||||
return wrappedLine.String()
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Capitalize capitalizes all the delimiter separated words in a string. Only the first letter of each word is changed.
|
||||
Capitalize capitalizes all the delimiter separated words in a string. Only the first letter of each word is changed.
|
||||
To convert the rest of each word to lowercase at the same time, use CapitalizeFully(str string, delimiters ...rune).
|
||||
The delimiters represent a set of characters understood to separate words. The first string character
|
||||
and the first non-delimiter character after a delimiter will be capitalized. A "" input string returns "".
|
||||
The delimiters represent a set of characters understood to separate words. The first string character
|
||||
and the first non-delimiter character after a delimiter will be capitalized. A "" input string returns "".
|
||||
Capitalization uses the Unicode title case, normally equivalent to upper case.
|
||||
|
||||
Parameters:
|
||||
@@ -163,41 +162,39 @@ Parameters:
|
||||
Returns:
|
||||
capitalized string
|
||||
*/
|
||||
func Capitalize (str string, delimiters ...rune) string {
|
||||
func Capitalize(str string, delimiters ...rune) string {
|
||||
|
||||
var delimLen int
|
||||
|
||||
if delimiters == nil {
|
||||
|
||||
if delimiters == nil {
|
||||
delimLen = -1
|
||||
} else {
|
||||
delimLen = len(delimiters)
|
||||
}
|
||||
|
||||
if str == "" || delimLen == 0 {
|
||||
return str;
|
||||
}
|
||||
if str == "" || delimLen == 0 {
|
||||
return str
|
||||
}
|
||||
|
||||
buffer := []rune(str)
|
||||
capitalizeNext := true
|
||||
for i := 0; i < len(buffer); i++ {
|
||||
ch := buffer[i]
|
||||
if isDelimiter(ch, delimiters...) {
|
||||
capitalizeNext = true
|
||||
} else if capitalizeNext {
|
||||
buffer[i] = unicode.ToTitle(ch)
|
||||
capitalizeNext = false
|
||||
}
|
||||
}
|
||||
return string(buffer)
|
||||
buffer := []rune(str)
|
||||
capitalizeNext := true
|
||||
for i := 0; i < len(buffer); i++ {
|
||||
ch := buffer[i]
|
||||
if isDelimiter(ch, delimiters...) {
|
||||
capitalizeNext = true
|
||||
} else if capitalizeNext {
|
||||
buffer[i] = unicode.ToTitle(ch)
|
||||
capitalizeNext = false
|
||||
}
|
||||
}
|
||||
return string(buffer)
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
CapitalizeFully converts all the delimiter separated words in a string into capitalized words, that is each word is made up of a
|
||||
titlecase character and then a series of lowercase characters. The delimiters represent a set of characters understood
|
||||
to separate words. The first string character and the first non-delimiter character after a delimiter will be capitalized.
|
||||
CapitalizeFully converts all the delimiter separated words in a string into capitalized words, that is each word is made up of a
|
||||
titlecase character and then a series of lowercase characters. The delimiters represent a set of characters understood
|
||||
to separate words. The first string character and the first non-delimiter character after a delimiter will be capitalized.
|
||||
Capitalization uses the Unicode title case, normally equivalent to upper case.
|
||||
|
||||
Parameters:
|
||||
@@ -207,29 +204,27 @@ Parameters:
|
||||
Returns:
|
||||
capitalized string
|
||||
*/
|
||||
func CapitalizeFully (str string, delimiters ...rune) string {
|
||||
func CapitalizeFully(str string, delimiters ...rune) string {
|
||||
|
||||
var delimLen int
|
||||
var delimLen int
|
||||
|
||||
if delimiters == nil {
|
||||
delimLen = -1
|
||||
} else {
|
||||
if delimiters == nil {
|
||||
delimLen = -1
|
||||
} else {
|
||||
delimLen = len(delimiters)
|
||||
}
|
||||
|
||||
|
||||
if str == "" || delimLen == 0 {
|
||||
return str;
|
||||
}
|
||||
str = strings.ToLower(str)
|
||||
return Capitalize(str, delimiters...);
|
||||
if str == "" || delimLen == 0 {
|
||||
return str
|
||||
}
|
||||
str = strings.ToLower(str)
|
||||
return Capitalize(str, delimiters...)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Uncapitalize uncapitalizes all the whitespace separated words in a string. Only the first letter of each word is changed.
|
||||
The delimiters represent a set of characters understood to separate words. The first string character and the first non-delimiter
|
||||
character after a delimiter will be uncapitalized. Whitespace is defined by unicode.IsSpace(char).
|
||||
The delimiters represent a set of characters understood to separate words. The first string character and the first non-delimiter
|
||||
character after a delimiter will be uncapitalized. Whitespace is defined by unicode.IsSpace(char).
|
||||
|
||||
Parameters:
|
||||
str - the string to uncapitalize fully
|
||||
@@ -238,46 +233,45 @@ Parameters:
|
||||
Returns:
|
||||
uncapitalized string
|
||||
*/
|
||||
func Uncapitalize (str string, delimiters ...rune) string {
|
||||
func Uncapitalize(str string, delimiters ...rune) string {
|
||||
|
||||
var delimLen int
|
||||
|
||||
if delimiters == nil {
|
||||
|
||||
if delimiters == nil {
|
||||
delimLen = -1
|
||||
} else {
|
||||
delimLen = len(delimiters)
|
||||
}
|
||||
|
||||
if str == "" || delimLen == 0 {
|
||||
return str;
|
||||
}
|
||||
if str == "" || delimLen == 0 {
|
||||
return str
|
||||
}
|
||||
|
||||
buffer := []rune(str)
|
||||
uncapitalizeNext := true // TODO Always makes capitalize/un apply to first char.
|
||||
for i := 0; i < len(buffer); i++ {
|
||||
ch := buffer[i]
|
||||
if isDelimiter(ch, delimiters...) {
|
||||
uncapitalizeNext = true
|
||||
} else if uncapitalizeNext {
|
||||
buffer[i] = unicode.ToLower(ch)
|
||||
uncapitalizeNext = false
|
||||
}
|
||||
}
|
||||
return string(buffer)
|
||||
buffer := []rune(str)
|
||||
uncapitalizeNext := true // TODO Always makes capitalize/un apply to first char.
|
||||
for i := 0; i < len(buffer); i++ {
|
||||
ch := buffer[i]
|
||||
if isDelimiter(ch, delimiters...) {
|
||||
uncapitalizeNext = true
|
||||
} else if uncapitalizeNext {
|
||||
buffer[i] = unicode.ToLower(ch)
|
||||
uncapitalizeNext = false
|
||||
}
|
||||
}
|
||||
return string(buffer)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
SwapCase swaps the case of a string using a word based algorithm.
|
||||
|
||||
Conversion algorithm:
|
||||
|
||||
Upper case character converts to Lower case
|
||||
Title case character converts to Lower case
|
||||
Lower case character after Whitespace or at start converts to Title case
|
||||
Other Lower case character converts to Upper case
|
||||
Upper case character converts to Lower case
|
||||
Title case character converts to Lower case
|
||||
Lower case character after Whitespace or at start converts to Title case
|
||||
Other Lower case character converts to Upper case
|
||||
Whitespace is defined by unicode.IsSpace(char).
|
||||
|
||||
|
||||
Parameters:
|
||||
str - the string to swap case
|
||||
|
||||
@@ -285,39 +279,38 @@ Returns:
|
||||
the changed string
|
||||
*/
|
||||
func SwapCase(str string) string {
|
||||
if str == "" {
|
||||
return str
|
||||
}
|
||||
buffer := []rune(str)
|
||||
if str == "" {
|
||||
return str
|
||||
}
|
||||
buffer := []rune(str)
|
||||
|
||||
whitespace := true
|
||||
whitespace := true
|
||||
|
||||
for i := 0; i < len(buffer); i++ {
|
||||
ch := buffer[i]
|
||||
if unicode.IsUpper(ch) {
|
||||
buffer[i] = unicode.ToLower(ch)
|
||||
whitespace = false
|
||||
} else if unicode.IsTitle(ch) {
|
||||
buffer[i] = unicode.ToLower(ch)
|
||||
whitespace = false
|
||||
} else if unicode.IsLower(ch) {
|
||||
if whitespace {
|
||||
buffer[i] = unicode.ToTitle(ch)
|
||||
whitespace = false
|
||||
} else {
|
||||
buffer[i] = unicode.ToUpper(ch)
|
||||
}
|
||||
} else {
|
||||
whitespace = unicode.IsSpace(ch)
|
||||
}
|
||||
}
|
||||
return string(buffer);
|
||||
for i := 0; i < len(buffer); i++ {
|
||||
ch := buffer[i]
|
||||
if unicode.IsUpper(ch) {
|
||||
buffer[i] = unicode.ToLower(ch)
|
||||
whitespace = false
|
||||
} else if unicode.IsTitle(ch) {
|
||||
buffer[i] = unicode.ToLower(ch)
|
||||
whitespace = false
|
||||
} else if unicode.IsLower(ch) {
|
||||
if whitespace {
|
||||
buffer[i] = unicode.ToTitle(ch)
|
||||
whitespace = false
|
||||
} else {
|
||||
buffer[i] = unicode.ToUpper(ch)
|
||||
}
|
||||
} else {
|
||||
whitespace = unicode.IsSpace(ch)
|
||||
}
|
||||
}
|
||||
return string(buffer)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Initials extracts the initial letters from each word in the string. The first letter of the string and all first
|
||||
letters after the defined delimiters are returned as a new string. Their case is not changed. If the delimiters
|
||||
Initials extracts the initial letters from each word in the string. The first letter of the string and all first
|
||||
letters after the defined delimiters are returned as a new string. Their case is not changed. If the delimiters
|
||||
parameter is excluded, then Whitespace is used. Whitespace is defined by unicode.IsSpacea(char). An empty delimiter array returns an empty string.
|
||||
|
||||
Parameters:
|
||||
@@ -327,39 +320,37 @@ Returns:
|
||||
string of initial letters
|
||||
*/
|
||||
func Initials(str string, delimiters ...rune) string {
|
||||
if str == "" {
|
||||
return str
|
||||
}
|
||||
if delimiters != nil && len(delimiters) == 0 {
|
||||
return ""
|
||||
}
|
||||
strLen := len(str)
|
||||
var buf bytes.Buffer
|
||||
lastWasGap := true
|
||||
for i := 0; i < strLen; i++ {
|
||||
ch := rune(str[i])
|
||||
if str == "" {
|
||||
return str
|
||||
}
|
||||
if delimiters != nil && len(delimiters) == 0 {
|
||||
return ""
|
||||
}
|
||||
strLen := len(str)
|
||||
var buf bytes.Buffer
|
||||
lastWasGap := true
|
||||
for i := 0; i < strLen; i++ {
|
||||
ch := rune(str[i])
|
||||
|
||||
if isDelimiter(ch, delimiters...) {
|
||||
lastWasGap = true
|
||||
} else if lastWasGap {
|
||||
buf.WriteRune(ch)
|
||||
lastWasGap = false
|
||||
}
|
||||
}
|
||||
return buf.String()
|
||||
}
|
||||
if isDelimiter(ch, delimiters...) {
|
||||
lastWasGap = true
|
||||
} else if lastWasGap {
|
||||
buf.WriteRune(ch)
|
||||
lastWasGap = false
|
||||
}
|
||||
}
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
|
||||
|
||||
// private function (lower case func name)
|
||||
// private function (lower case func name)
|
||||
func isDelimiter(ch rune, delimiters ...rune) bool {
|
||||
if delimiters == nil {
|
||||
return unicode.IsSpace(ch)
|
||||
}
|
||||
for _, delimiter := range delimiters {
|
||||
if ch == delimiter {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
if delimiters == nil {
|
||||
return unicode.IsSpace(ch)
|
||||
}
|
||||
for _, delimiter := range delimiters {
|
||||
if ch == delimiter {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
121
vendor/github.com/aokoli/goutils/wordutils_test.go
generated
vendored
121
vendor/github.com/aokoli/goutils/wordutils_test.go
generated
vendored
@@ -1,8 +1,8 @@
|
||||
package goutils
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"fmt"
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// ****************************** TESTS ********************************************
|
||||
@@ -18,7 +18,6 @@ func TestWrapNormalWord(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func TestWrapCustomLongWordFalse(t *testing.T) {
|
||||
|
||||
in := "BobManuelBob Bob"
|
||||
@@ -32,7 +31,6 @@ func TestWrapCustomLongWordFalse(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func TestWrapCustomLongWordTrue(t *testing.T) {
|
||||
|
||||
in := "BobManuelBob Bob"
|
||||
@@ -46,96 +44,86 @@ func TestWrapCustomLongWordTrue(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func TestCapitalize(t *testing.T) {
|
||||
|
||||
|
||||
// Test 1: Checks if function works with 1 parameter, and default whitespace delimiter
|
||||
in := "test is going.well.thank.you.for inquiring"
|
||||
out := "Test Is Going.well.thank.you.for Inquiring"
|
||||
in := "test is going.well.thank.you.for inquiring"
|
||||
out := "Test Is Going.well.thank.you.for Inquiring"
|
||||
|
||||
if x := Capitalize(in); x != out {
|
||||
t.Errorf("Capitalize(%v) = %v, want %v", in, x, out)
|
||||
}
|
||||
|
||||
|
||||
// Test 2: Checks if function works with both parameters, with param 2 containing whitespace and '.'
|
||||
out = "Test Is Going.Well.Thank.You.For Inquiring"
|
||||
delimiters := []rune{' ', '.'}
|
||||
out = "Test Is Going.Well.Thank.You.For Inquiring"
|
||||
delimiters := []rune{' ', '.'}
|
||||
|
||||
if x := Capitalize(in, delimiters...); x != out {
|
||||
t.Errorf("Capitalize(%v) = %v, want %v", in, x, out)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
func TestCapitalizeFully(t *testing.T) {
|
||||
|
||||
// Test 1
|
||||
in := "tEsT iS goiNG.wELL.tHaNk.yOU.for inqUIrING"
|
||||
out := "Test Is Going.well.thank.you.for Inquiring"
|
||||
in := "tEsT iS goiNG.wELL.tHaNk.yOU.for inqUIrING"
|
||||
out := "Test Is Going.well.thank.you.for Inquiring"
|
||||
|
||||
if x := CapitalizeFully(in); x != out {
|
||||
t.Errorf("CapitalizeFully(%v) = %v, want %v", in, x, out)
|
||||
}
|
||||
|
||||
|
||||
// Test 2
|
||||
out = "Test Is Going.Well.Thank.You.For Inquiring"
|
||||
delimiters := []rune{' ', '.'}
|
||||
out = "Test Is Going.Well.Thank.You.For Inquiring"
|
||||
delimiters := []rune{' ', '.'}
|
||||
|
||||
if x := CapitalizeFully(in, delimiters...); x != out {
|
||||
t.Errorf("CapitalizeFully(%v) = %v, want %v", in, x, out)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func TestUncapitalize(t *testing.T) {
|
||||
|
||||
// Test 1: Checks if function works with 1 parameter, and default whitespace delimiter
|
||||
in := "This Is A.Test"
|
||||
out := "this is a.Test"
|
||||
in := "This Is A.Test"
|
||||
out := "this is a.Test"
|
||||
|
||||
if x := Uncapitalize(in); x != out {
|
||||
t.Errorf("Uncapitalize(%v) = %v, want %v", in, x, out)
|
||||
}
|
||||
|
||||
// Test 2: Checks if function works with both parameters, with param 2 containing whitespace and '.'
|
||||
out = "this is a.test"
|
||||
delimiters := []rune{' ', '.'}
|
||||
out = "this is a.test"
|
||||
delimiters := []rune{' ', '.'}
|
||||
|
||||
if x := Uncapitalize(in, delimiters...); x != out {
|
||||
t.Errorf("Uncapitalize(%v) = %v, want %v", in, x, out)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func TestSwapCase(t *testing.T) {
|
||||
|
||||
in := "This Is A.Test"
|
||||
out := "tHIS iS a.tEST"
|
||||
in := "This Is A.Test"
|
||||
out := "tHIS iS a.tEST"
|
||||
|
||||
if x := SwapCase(in); x != out {
|
||||
t.Errorf("SwapCase(%v) = %v, want %v", in, x, out)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func TestInitials(t *testing.T) {
|
||||
|
||||
// Test 1
|
||||
in := "John Doe.Ray"
|
||||
out := "JD"
|
||||
in := "John Doe.Ray"
|
||||
out := "JD"
|
||||
|
||||
if x := Initials(in); x != out {
|
||||
t.Errorf("Initials(%v) = %v, want %v", in, x, out)
|
||||
}
|
||||
|
||||
|
||||
// Test 2
|
||||
out = "JDR"
|
||||
delimiters := []rune{' ','.'}
|
||||
out = "JDR"
|
||||
delimiters := []rune{' ', '.'}
|
||||
|
||||
if x := Initials(in, delimiters...); x != out {
|
||||
t.Errorf("Initials(%v) = %v, want %v", in, x, out)
|
||||
@@ -143,24 +131,19 @@ func TestInitials(t *testing.T) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// ****************************** EXAMPLES ********************************************
|
||||
|
||||
func ExampleWrap() {
|
||||
|
||||
in := "Bob Manuel Bob Manuel"
|
||||
in := "Bob Manuel Bob Manuel"
|
||||
wrapLength := 10
|
||||
|
||||
fmt.Println (Wrap(in, wrapLength))
|
||||
// Output:
|
||||
fmt.Println(Wrap(in, wrapLength))
|
||||
// Output:
|
||||
// Bob Manuel
|
||||
// Bob Manuel
|
||||
}
|
||||
|
||||
|
||||
func ExampleWrapCustom_1() {
|
||||
|
||||
in := "BobManuelBob Bob"
|
||||
@@ -168,12 +151,11 @@ func ExampleWrapCustom_1() {
|
||||
newLineStr := "<br\\>"
|
||||
wrapLongWords := false
|
||||
|
||||
fmt.Println (WrapCustom(in, wrapLength, newLineStr, wrapLongWords))
|
||||
// Output:
|
||||
fmt.Println(WrapCustom(in, wrapLength, newLineStr, wrapLongWords))
|
||||
// Output:
|
||||
// BobManuelBob<br\>Bob
|
||||
}
|
||||
|
||||
|
||||
func ExampleWrapCustom_2() {
|
||||
|
||||
in := "BobManuelBob Bob"
|
||||
@@ -181,72 +163,63 @@ func ExampleWrapCustom_2() {
|
||||
newLineStr := "<br\\>"
|
||||
wrapLongWords := true
|
||||
|
||||
fmt.Println (WrapCustom(in, wrapLength, newLineStr, wrapLongWords))
|
||||
// Output:
|
||||
fmt.Println(WrapCustom(in, wrapLength, newLineStr, wrapLongWords))
|
||||
// Output:
|
||||
// BobManuelB<br\>ob Bob
|
||||
}
|
||||
|
||||
|
||||
|
||||
func ExampleCapitalize() {
|
||||
|
||||
in := "test is going.well.thank.you.for inquiring" // Compare input to CapitalizeFully example
|
||||
delimiters := []rune{' ', '.'}
|
||||
delimiters := []rune{' ', '.'}
|
||||
|
||||
fmt.Println (Capitalize(in))
|
||||
fmt.Println (Capitalize(in, delimiters...))
|
||||
fmt.Println(Capitalize(in))
|
||||
fmt.Println(Capitalize(in, delimiters...))
|
||||
// Output:
|
||||
// Test Is Going.well.thank.you.for Inquiring
|
||||
// Test Is Going.Well.Thank.You.For Inquiring
|
||||
// Test Is Going.Well.Thank.You.For Inquiring
|
||||
}
|
||||
|
||||
|
||||
|
||||
func ExampleCapitalizeFully() {
|
||||
|
||||
in := "tEsT iS goiNG.wELL.tHaNk.yOU.for inqUIrING" // Notice scattered capitalization
|
||||
delimiters := []rune{' ', '.'}
|
||||
|
||||
in := "tEsT iS goiNG.wELL.tHaNk.yOU.for inqUIrING" // Notice scattered capitalization
|
||||
delimiters := []rune{' ', '.'}
|
||||
|
||||
fmt.Println (CapitalizeFully(in))
|
||||
fmt.Println (CapitalizeFully(in, delimiters...))
|
||||
fmt.Println(CapitalizeFully(in))
|
||||
fmt.Println(CapitalizeFully(in, delimiters...))
|
||||
// Output:
|
||||
// Test Is Going.well.thank.you.for Inquiring
|
||||
// Test Is Going.Well.Thank.You.For Inquiring
|
||||
// Test Is Going.Well.Thank.You.For Inquiring
|
||||
}
|
||||
|
||||
|
||||
func ExampleUncapitalize() {
|
||||
|
||||
in := "This Is A.Test"
|
||||
delimiters := []rune{' ', '.'}
|
||||
in := "This Is A.Test"
|
||||
delimiters := []rune{' ', '.'}
|
||||
|
||||
fmt.Println (Uncapitalize(in))
|
||||
fmt.Println (Uncapitalize(in, delimiters...))
|
||||
fmt.Println(Uncapitalize(in))
|
||||
fmt.Println(Uncapitalize(in, delimiters...))
|
||||
// Output:
|
||||
// this is a.Test
|
||||
// this is a.test
|
||||
// this is a.test
|
||||
}
|
||||
|
||||
|
||||
func ExampleSwapCase() {
|
||||
|
||||
in := "This Is A.Test"
|
||||
fmt.Println (SwapCase(in))
|
||||
in := "This Is A.Test"
|
||||
fmt.Println(SwapCase(in))
|
||||
// Output:
|
||||
// tHIS iS a.tEST
|
||||
}
|
||||
|
||||
|
||||
func ExampleInitials() {
|
||||
|
||||
in := "John Doe.Ray"
|
||||
delimiters := []rune{' ','.'}
|
||||
in := "John Doe.Ray"
|
||||
delimiters := []rune{' ', '.'}
|
||||
|
||||
fmt.Println (Initials(in))
|
||||
fmt.Println (Initials(in, delimiters...))
|
||||
fmt.Println(Initials(in))
|
||||
fmt.Println(Initials(in, delimiters...))
|
||||
// Output:
|
||||
// JD
|
||||
// JDR
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user