Switch to removeSuffix name and modify the string in place
This commit is contained in:
parent
94149f7a48
commit
99b29b3e97
1 changed files with 27 additions and 46 deletions
|
|
@ -168,52 +168,6 @@ proc cmpIgnoreStyle*(a, b: string): int {.noSideEffect,
|
||||||
inc(i)
|
inc(i)
|
||||||
inc(j)
|
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
|
proc strip*(s: string, leading = true, trailing = true, chars: set[char] = Whitespace): string
|
||||||
{.noSideEffect, rtl, extern: "nsuStrip".} =
|
{.noSideEffect, rtl, extern: "nsuStrip".} =
|
||||||
|
|
@ -1441,6 +1395,33 @@ proc format*(formatstr: string, a: varargs[string, `$`]): string {.noSideEffect,
|
||||||
|
|
||||||
{.pop.}
|
{.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:
|
when isMainModule:
|
||||||
doAssert align("abc", 4) == " abc"
|
doAssert align("abc", 4) == " abc"
|
||||||
doAssert align("a", 0) == "a"
|
doAssert align("a", 0) == "a"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue