-- import "github.com/go-leap/str"
var (
// Eq aliases `strings.EqualFold` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
Eq = strings.EqualFold
// Fmt aliases `fmt.Sprintf` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `fmt` import.
Fmt = fmt.Sprintf
// From aliases `fmt.Sprint` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `fmt` import.
From = fmt.Sprint
// Has aliases `strings.Contains` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
Has = strings.Contains
// IdxB aliases `strings.IndexByte` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
IdxB = strings.IndexByte
// IdxR aliases `strings.IndexRune` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
IdxR = strings.IndexRune
// Int aliases `strconv.Itoa` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strconv` import.
Int = strconv.Itoa
// Join aliases `strings.Join` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
Join = strings.Join
// LastB aliases `strings.LastIndexByte` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
LastB = strings.LastIndexByte
// Last aliases `strings.LastIndex` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
Last = strings.LastIndex
// Lo aliases `strings.ToLower` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
Lo = strings.ToLower
// NumRunes aliases `unicode/utf8.RuneCountInString` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `unicode/utf8` import.
NumRunes = utf8.RuneCountInString
// Pos aliases `strings.Index` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
Pos = strings.Index
// Pref aliases `strings.HasPrefix` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
Pref = strings.HasPrefix
// Reader aliases `strings.NewReader` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
Reader = strings.NewReader
// Repl aliases `strings.NewReplacer` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
Repl = strings.NewReplacer
// Suff aliases `strings.HasSuffix` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
Suff = strings.HasSuffix
// Trim aliases `strings.TrimSpace` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
Trim = strings.TrimSpace
// TrimL aliases `strings.TrimLeft` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
TrimL = strings.TrimLeft
// TrimLR aliases `strings.Trim` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
TrimLR = strings.Trim
// TrimPref aliases `strings.TrimPrefix` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
TrimPref = strings.TrimPrefix
// TrimR aliases `strings.TrimRight` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
TrimR = strings.TrimRight
// TrimSuff aliases `strings.TrimSuffix` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
TrimSuff = strings.TrimSuffix
// Up aliases `strings.ToUpper` — merely a handy short-hand during rapid iteration in non-critical code-paths that already do import `ustr` to not have to repeatedly pull in and out the extra `strings` import.
Up = strings.ToUpper
)func AfterFirst(s string, needle string, otherwise string) stringAfterFirst returns the suffix of s beginning right after the first occurrence
of needle, or otherwise if no match.
func AfterLast(s string, needle string, otherwise string) stringAfterLast returns the suffix of s beginning right after the last occurrence of
needle, or otherwise if no match.
func BeforeFirst(s string, needle string, otherwise string) stringBeforeFirst returns the prefix of s up to the first occurrence of needle, or
otherwise if no match.
func BeforeFirstSpace(s string, otherwise string) stringBeforeFirstSpace returns the prefix of s up to the first occurrence of a
rune satisfying unicode.IsSpace, or otherwise if no match.
func BeforeLast(s string, needle string, otherwise string) stringBeforeLast returns the prefix of s up to the last occurrence of needle, or
otherwise if no match.
func Begins(s string, ok func(rune) bool) boolBegins returns whether the first rune in s satisfies ok.
func BeginsAndContainsOnly(s string, begins func(rune) bool, containsOnly ...func(rune) bool) boolBeginsAndContainsOnly returns whether the first rune in s satisfies begins
and all runes in s satisfy all predicates in containsOnly.
func BeginsLetter(s string) boolBeginsLetter returns whether the first rune in s satisfies unicode.IsLetter.
func BeginsLower(s string) boolBeginsLower returns whether the first rune in s satisfies both
unicode.IsLetter and unicode.IsLower.
func BeginsUpper(s string) boolBeginsUpper returns whether the first rune in s satisfies both
unicode.IsLetter and unicode.IsUpper.
func BreakOnFirstOrPref(s string, needle string) (prefix string, suffix string)BreakOnFirstOrPref returns the prefix and suffix next to the first needle
encountered in s. (If no match, suffix is "" and prefix will be s.)
func BreakOnFirstOrSuff(s string, needle string) (prefix string, suffix string)BreakOnFirstOrSuff returns the prefix and suffix next to the first needle
encountered in s. (If no match, prefix is "" and suffix will be s.)
func BreakOnLast(s string, needle string) (prefix string, suffix string)BreakOnLast returns the prefix and suffix next to the last needle encountered
in s. (If no match, prefix is "" and suffix will be s.)
func Case(s string, runeIndex int, upper bool) stringCase returns s with the rune at runeIndex (not byte index) guaranteed to be
upper-case if upper, or lower-case if not.
func CaseLo(s string, runeIndex int) stringCaseLo returns s with the rune at runeIndex (not byte index) guaranteed to
be lower-case.
func CaseSnake(s string) stringCaseSnake returns a snake-cased attempt at s (based on unicode.IsLetter).
func CaseUp(s string, runeIndex int) stringCaseUp returns s with the rune at runeIndex (not byte index) guaranteed to
be upper-case.
func Combine(s1 string, sep string, s2 string) stringCombine returns s1 or s2 or s1 + sep + s2, depending on their emptiness.
func CommonPrefix(s ...string) (pref string)CommonPrefix finds the prefix pref that all values in s share, if any.
func CountPrefixRunes(s string, prefix rune) (n int)CountPrefixRunes returns how many occurrences of prefix are leading in s.
func Drop(s string, r byte) stringDrop is a lower-level, byte-based TrimRight.
func Fewest(strs []string, substr string, otherwise func([]string) string) (s string)Fewest returns the s in strs with the lowest strings.Count of substr. If
the count is identical for all, it returns otherwise(strs) (if supplied).
func Filter(strs []string, check func(string) bool) (filtered []string)Filter returns all strs that satisfy check.
func FirstIn(s string, subStrings ...string) stringFirstIn returns the first in subStrings to satisfy strings.Contains(s, substr), or "".
func FirstOf(strs ...string) (s string)FirstOf returns the first non-empty s encountered in strs.
func ForEachOccurrenceInBetween(s string, subStrStart string, subStrEnd string, modify func(string) string) stringForEachOccurrenceInBetween finds occurrences between two separators and calls
modify for each of them, changing that occurrence in s to its return value;
finally it returns s with all applied modifications.
For example, it could be used to modify all hrefs in markdown links using simply
the separators "](" and ")" --- modify would receive each inner href value.
func HasAny(s string, ok func(rune) bool) boolHasAny returns whether any rune in s satisfies ok.
func HasAnyOf(s string, anyOneOf ...byte) boolHasAnyOf returns whether s contains any of the bytes in anyOneOf.
func HasOneOf(s string, subStrings ...string) boolHasOneOf returns whether s contains any of the specified subStrings.
func IdxBMatching(s string, needle byte, skipOneForEachAdditionalOccurrenceOf byte) (idx int)IdxBMatching returns, for example, 3 for ("x[y]", ']', '[') but 6 (not 5) for
("x[y[z]]", ']', '[').
func IdxRMatching(s string, needle rune, skipOneForEachAdditionalOccurrenceOf rune) (idx int)IdxRMatching returns, for example, 3 for ("x[y]", ']', '[') but 6 (not 5) for
("x[y[z]]", ']', '[').
func If(check bool, then string, otherwise string) stringIf returns then if check, else otherwise.
func In(s string, strs ...string) boolIn returns whether strs contains s.
func Index(strs []string, check func(string) bool) intfunc Int64(i int64) stringInt64 aliases strconv.FormatInt(i, 10) — merely a handy short-hand during
rapid iteration in non-critical code-paths that already do import ustr to not
have to repeatedly pull in and out the extra strconv import.
func IsLen1And(s string, anyOneOf ...byte) boolIsLen1And returns whether s is equal to any of the bytes in anyOneOf.
func IsLower(s string) boolIsLower returns whether all unicode.IsLetter runes in s satisfy
unicode.IsLower.
func IsRepeat(s string, first rune) boolIsRepeat returns whether s contains nothing but one-or-more occurrences of
first. If first is 0, it is initialized from the first rune in s.
func IsUpper(s string) boolIsUpper returns whether all unicode.IsLetter runes in s satisfy
unicode.IsUpper.
func JoinB(s []string, b byte) stringJoinB is like strings.Join but with a byte-length char as separator.
func Longest(strs []string) (s string)Longest returns the longest s in strs.
func Map(strs []string, f func(string) string) (items []string)Map applies f to each string in strs and returns the results in items.
func Merge(s []string, with []string, dropIf func(string) bool) []stringMerge returns a slice with the items of s and with, no duplicates, no
guaranteed ordering. If dropIf is given, it is called to prevent values from
being included in the return slice.
func NamedPlaceholders(begin byte, end byte) func(string, ...string) stringNamedPlaceholders is an occasionally-preferable alternative to fmt.Sprintf or
strings.Replace / strings.Replacer for (fully stringly-typed)
"micro-templating":
repl := ustr.NamedPlaceHolders('(', ']')
hi := repl("Hello (name]!", "name", "world")The delimiter begin and end chars may well be equal, if so desired. When
called, the returned func traverses its string arg exactly once, ie. it does
not re-process the replacements or its final result. It searches through its
name-value-pairs once per fully-delimited-substring. Any of those occurrences
not found in its name-value-pairs are left in-place including the delimiters.
func Plu(n int, s string) (r string)Plu returns (if s is, say, "foo") "1 foo" or "0 foos" or "2 foos", so
appends "s" to s unless n is 1. The pluralizer is English-language-oriented
and covers no corner-cases such as "bus" and the likes, but for simple
command-line programs it's cheap.
func Pref1Of(s string, prefixes ...string) stringPref1Of returns the first of the specified (non-empty) prefixes that s
begins with, or "".
func Repeat(s string, n int) (str []byte)Repeat is a somewhat leaner version of strings.Repeat.
func RepeatB(b byte, n int) (s []byte)RepeatB is like Repeat but a single byte-length char.
func ReplB(s string, oldNew ...byte) stringReplB replaces individual bytes in s based on the given old-new pairs:
because for some few strings.Replace / strings.Replacer scenarios, nothing
more is needed.
func Replace(s string, oldNewPairs ...string) stringReplace allocates a one-off throw-away strings.NewReplacer to perform the
specified replacements if oldNewPairs has more than 1 pair (2 elements);
otherwise, calls strings.Replace.
func Rune(s string, runeIndex int, f func(rune) rune) stringRune returns s with the rune at runeIndex (not byte index) changed by f.
func Sans(strs []string, excludedStrs ...string) []stringSans returns strs without the specified excludedStrs.
func Shortest(strs []string) (shortest string)Shortest returns the shortest in strs.
func ShortestAndLongest(s ...string) (lenShortest int, lenLongest int)ShortestAndLongest returns the length of the shortest item in s, as well as
the length of the longest. Both will return as -1 if s is empty.
func Similes(s string, candidates ...string) (sim []string)Similes for when Levenshtein seems overkill.. cheap & naive but handy
func Skip(s string, r byte) stringSkip is a lower-level, byte-based TrimLeft.
func Sortable(s []string, less func(string, string) bool) sort.Interfacefunc Split(s string, sep string) (splits []string)Split returns an empty slice if s is emtpy, otherwise calls strings.Split.
func SplitB(s string, sep byte, initialCap int) (splits []string)SplitB returns an empty slice if s is emtpy, otherwise it's like Split but
with a byte separator.
func SplitByWhitespaceAndReJoinBySpace(s string) stringSplitByWhitespaceAndJoin returns s with all occurrences of multiple subsequent
unicode.IsSpace runes in a row collapsed into one single white-space (" ")
rune.
func SplitR(s string, sep rune, initialCap int) (splits []string)SplitR returns an empty slice if s is emtpy, otherwise it's like Split but
with a rune separator.
func Times(s string, n int) stringTimes converts Repeat to string.
func ToBool(s string, fallback bool) boolToBool returns either the bool denoted by s, or fallback.
func ToF64(s string, fallback float64) float64ToF64 returns either the float64 denoted by s, or fallback.
func ToI64(s string, base int, fallback int64) int64ToI64 returns either the int64 denoted by s, or fallback.
func ToInt(s string, fallback int) intToInt returns either the int denoted by s (in base 10), or fallback.
func ToUi64(s string, base int, fallback uint64) uint64ToUi64 returns either the uint64 denoted by s, or fallback.
func Uint64s(joinBy byte, values []uint64) stringUint64s joins together the hex-formatted values.
func Until(s string, needle string) stringUntil is a convenience short-hand for BeforeFirst(s, needle, s).
type Buf struct {
ustd.BytesWriter
}Buf used to wrap bytes.Buffer, now wraps ustd.BytesWriter.
func (me *Buf) String() stringString returns me.Data converted to string.
func (me *Buf) Write(s string)Write is equivalent to / short-hand for me.BytesWriter.WriteString(s).
func (me *Buf) Writef(s string, args ...interface{})Writef uses fmt.Sprintf.
func (me *Buf) Writeln(s string)Writeln appends \n to s then writes.
func (me *Buf) Writelnf(s string, args ...interface{})Writelnf uses fmt.Sprintf.
type Pat stringPat is a most-simplistic, overly-rudimentary, simplest-of-simpletons string
pattern matcher. It allows a single asterisk * wild-card at its beginning, its
end, or both, as described in Pat.Match. This covers a bafflingly substantial
amount of real-world use-cases — if more is needed, Go's path.Match, reg-exps
etc. will deliver instead.
func (me Pat) AllMatch(strs ...string) boolAllMatch returns whether all the specified strs satisfy me.Match.
func (me Pat) FirstMatch(strs ...string) stringFirstMatch returns the first in strs that me.Matches, or "".
func (me Pat) Match(s string) boolMatch returns whether s matches me, which could:
-
begin and end with an asterisk
*wildcard: "contains" semantics -
only begin with an asterisk
*wildcard: "endsWith" semantics -
only end with an asterisk
*wildcard: "beginsWith" semantics -
only consist of an asterisk
*wildcard: always matches anys -
otherwise: matches if
s == me.
type Pats []PatPats is a slice of Pats.
func (me *Pats) Add(pats ...Pat)Add appends all the specified pats to me.
func (me Pats) FirstMatch(s string) PatFirstMatch returns the first Pat in me to Match(s), or "".
func (me Pats) NoMatch(s string) boolNoMatch returns whether not a single Pat in me does Match(s).