diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim index a0fa7a2370..4def0b3e80 100644 --- a/lib/pure/strutils.nim +++ b/lib/pure/strutils.nim @@ -168,52 +168,6 @@ proc cmpIgnoreStyle*(a, b: string): int {.noSideEffect, inc(i) inc(j) -proc chomp*(s: string, chars: set[char] = Newlines): string {.noSideEffect, rtl.} = - var last = len(s) - 1 - - if chars == Newlines: - if s[last] == '\10': - last -= 1 - - if s[last] == '\13': - last -= 1 - - else: - if s[last] in chars: - last -= 1 - - return s[0..last] - -proc chomp*(s: string, c: char): string {.noSideEffect, rtl.} = - chomp(s, chars = {c}) - -proc chomp*(s: string, suffix: string): string {.noSideEffect, rtl.} = - var last = len(s) - 1 - - if suffix == "": - var previous: char - while last > 0: - - if s[last] == '\13' and previous == '\13': - break - - elif s[last] == '\13': - last -= 1 - previous = '\13' - - elif s[last] == '\10': - last -= 1 - previous = '\10' - - else: - break - - if s.endsWith(suffix): - last -= len(suffix) - - return s[0..last] - -{.pop.} proc strip*(s: string, leading = true, trailing = true, chars: set[char] = Whitespace): string {.noSideEffect, rtl, extern: "nsuStrip".} = @@ -1441,6 +1395,33 @@ proc format*(formatstr: string, a: varargs[string, `$`]): string {.noSideEffect, {.pop.} +proc removeSuffix*(s: var string, chars: set[char] = Newlines) {.rtl.} = + var last = len(s) - 1 + + if chars == Newlines: + if s[last] == '\10': + last -= 1 + + if s[last] == '\13': + last -= 1 + + else: + if s[last] in chars: + last -= 1 + + s.setLen(last + 1) + +proc removeSuffix*(s: var string, c: char) {.rtl.} = + removeSuffix(s, chars = {c}) + +proc removeSuffix*(s: var string, suffix: string) {.rtl.} = + var newLen = s.len + + if s.endsWith(suffix): + newLen -= len(suffix) + + s.setLen(newLen) + when isMainModule: doAssert align("abc", 4) == " abc" doAssert align("a", 0) == "a"