diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2018-10-14 09:48:54 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2018-10-14 09:48:54 +0200 |
commit | 7f81519f4114dbb49fcd68ca2361920bf374fb1c (patch) | |
tree | d9bfda80a7fb6db385504aeaa1bd16570fd139b4 /lib | |
parent | 4808ef72dbfb44634a1afe4d88e657abe17cbfd5 (diff) | |
download | Nim-7f81519f4114dbb49fcd68ca2361920bf374fb1c.tar.gz |
strutils/unicode: deprecate isLower and friends operating on complete strings; fixes #7963 properly
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pure/strutils.nim | 57 | ||||
-rw-r--r-- | lib/pure/unicode.nim | 47 |
2 files changed, 19 insertions, 85 deletions
diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim index d8122a181..296901558 100644 --- a/lib/pure/strutils.nim +++ b/lib/pure/strutils.nim @@ -117,7 +117,8 @@ template isImpl(call) = if not call(c): return false proc isAlphaAscii*(s: string): bool {.noSideEffect, procvar, - rtl, extern: "nsuIsAlphaAsciiStr".} = + rtl, extern: "nsuIsAlphaAsciiStr", + deprecated: "Deprecated since version 0.20 since its semantics are unclear".} = ## Checks whether or not `s` is alphabetical. ## ## This checks a-z, A-Z ASCII characters only. @@ -127,7 +128,8 @@ proc isAlphaAscii*(s: string): bool {.noSideEffect, procvar, isImpl isAlphaAscii proc isAlphaNumeric*(s: string): bool {.noSideEffect, procvar, - rtl, extern: "nsuIsAlphaNumericStr".} = + rtl, extern: "nsuIsAlphaNumericStr", + deprecated: "Deprecated since version 0.20 since its semantics are unclear".} = ## Checks whether or not `s` is alphanumeric. ## ## This checks a-z, A-Z, 0-9 ASCII characters only. @@ -137,7 +139,8 @@ proc isAlphaNumeric*(s: string): bool {.noSideEffect, procvar, isImpl isAlphaNumeric proc isDigit*(s: string): bool {.noSideEffect, procvar, - rtl, extern: "nsuIsDigitStr".} = + rtl, extern: "nsuIsDigitStr", + deprecated: "Deprecated since version 0.20 since its semantics are unclear".} = ## Checks whether or not `s` is a numeric value. ## ## This checks 0-9 ASCII characters only. @@ -147,7 +150,8 @@ proc isDigit*(s: string): bool {.noSideEffect, procvar, isImpl isDigit proc isSpaceAscii*(s: string): bool {.noSideEffect, procvar, - rtl, extern: "nsuIsSpaceAsciiStr".} = + rtl, extern: "nsuIsSpaceAsciiStr", + deprecated: "Deprecated since version 0.20 since its semantics are unclear".} = ## Checks whether or not `s` is completely whitespace. ## ## Returns true if all characters in `s` are whitespace @@ -169,7 +173,8 @@ template isCaseImpl(s, charProc, skipNonAlpha) = return false return if skipNonAlpha: hasAtleastOneAlphaChar else: true -proc isLowerAscii*(s: string, skipNonAlpha: bool): bool = +proc isLowerAscii*(s: string, skipNonAlpha: bool): bool {. + deprecated: "Deprecated since version 0.20 since its semantics are unclear".} = ## Checks whether ``s`` is lower case. ## ## This checks ASCII characters only. @@ -185,7 +190,8 @@ proc isLowerAscii*(s: string, skipNonAlpha: bool): bool = ## an empty string. isCaseImpl(s, isLowerAscii, skipNonAlpha) -proc isUpperAscii*(s: string, skipNonAlpha: bool): bool = +proc isUpperAscii*(s: string, skipNonAlpha: bool): bool {. + deprecated: "Deprecated since version 0.20 since its semantics are unclear".} = ## Checks whether ``s`` is upper case. ## ## This checks ASCII characters only. @@ -2534,35 +2540,18 @@ when isMainModule: doAssert isAlphaAscii('A') doAssert(not isAlphaAscii('$')) - doAssert isAlphaAscii("Rasp") - doAssert isAlphaAscii("Args") - doAssert(not isAlphaAscii("$Tomato")) - doAssert isAlphaNumeric('3') doAssert isAlphaNumeric('R') doAssert(not isAlphaNumeric('!')) - doAssert isAlphaNumeric("34ABc") - doAssert isAlphaNumeric("Rad") - doAssert isAlphaNumeric("1234") - doAssert(not isAlphaNumeric("@nose")) - doAssert isDigit('3') doAssert(not isDigit('a')) doAssert(not isDigit('%')) - doAssert isDigit("12533") - doAssert(not isDigit("12.33")) - doAssert(not isDigit("A45b")) - doAssert isSpaceAscii('\t') doAssert isSpaceAscii('\l') doAssert(not isSpaceAscii('A')) - doAssert isSpaceAscii("\t\l \v\r\f") - doAssert isSpaceAscii(" ") - doAssert(not isSpaceAscii("ABc \td")) - doAssert(isNilOrWhitespace("")) doAssert(isNilOrWhitespace(" ")) doAssert(isNilOrWhitespace("\t\l \v\r\f")) @@ -2575,33 +2564,11 @@ when isMainModule: doAssert(not isLowerAscii('&')) doAssert(not isLowerAscii(' ')) - doAssert isLowerAscii("abcd", false) - doAssert(not isLowerAscii("33aa", false)) - doAssert(not isLowerAscii("a b", false)) - - doAssert(not isLowerAscii("abCD", true)) - doAssert isLowerAscii("33aa", true) - doAssert isLowerAscii("a b", true) - doAssert isLowerAscii("1, 2, 3 go!", true) - doAssert(not isLowerAscii(" ", true)) - doAssert(not isLowerAscii("(*&#@(^#$ ", true)) # None of the string chars are alphabets - doAssert isUpperAscii('A') doAssert(not isUpperAscii('b')) doAssert(not isUpperAscii('5')) doAssert(not isUpperAscii('%')) - doAssert isUpperAscii("ABC", false) - doAssert(not isUpperAscii("A#$", false)) - doAssert(not isUpperAscii("A B", false)) - - doAssert(not isUpperAscii("AAcc", true)) - doAssert isUpperAscii("A#$", true) - doAssert isUpperAscii("A B", true) - doAssert isUpperAscii("1, 2, 3 GO!", true) - doAssert(not isUpperAscii(" ", true)) - doAssert(not isUpperAscii("(*&#@(^#$ ", true)) # None of the string chars are alphabets - doAssert rsplit("foo bar", seps=Whitespace) == @["foo", "bar"] doAssert rsplit(" foo bar", seps=Whitespace, maxsplit=1) == @[" foo", "bar"] doAssert rsplit(" foo bar ", seps=Whitespace, maxsplit=1) == @[" foo bar", ""] diff --git a/lib/pure/unicode.nim b/lib/pure/unicode.nim index 978f569ac..f210dba21 100644 --- a/lib/pure/unicode.nim +++ b/lib/pure/unicode.nim @@ -1435,7 +1435,8 @@ template runeCaseCheck(s, runeProc, skipNonAlpha) = return false return if skipNonAlpha: hasAtleastOneAlphaRune else: true -proc isLower*(s: string, skipNonAlpha: bool): bool = +proc isLower*(s: string, skipNonAlpha: bool): bool {. + deprecated: "Deprecated since version 0.20 since its semantics are unclear".} = ## Checks whether ``s`` is lower case. ## ## If ``skipNonAlpha`` is true, returns true if all alphabetical @@ -1449,7 +1450,8 @@ proc isLower*(s: string, skipNonAlpha: bool): bool = ## an empty string. runeCaseCheck(s, isLower, skipNonAlpha) -proc isUpper*(s: string, skipNonAlpha: bool): bool = +proc isUpper*(s: string, skipNonAlpha: bool): bool {. + deprecated: "Deprecated since version 0.20 since its semantics are unclear".} = ## Checks whether ``s`` is upper case. ## ## If ``skipNonAlpha`` is true, returns true if all alphabetical @@ -1608,12 +1610,13 @@ proc title*(s: string): string {.noSideEffect, procvar, rune.fastToUTF8Copy(result, lastIndex) proc isTitle*(s: string): bool {.noSideEffect, procvar, - rtl, extern: "nuc$1Str".}= + rtl, extern: "nuc$1Str", + deprecated: "Deprecated since version 0.20 since its semantics are unclear".}= ## Checks whether or not `s` is a unicode title. ## ## Returns true if the first character in each word inside `s` ## are upper case and there is at least one character in `s`. - if s.len() == 0: + if s.len == 0: return false result = true @@ -1764,12 +1767,6 @@ when isMainModule: doAssert capitalize("foo") == "Foo" doAssert capitalize("") == "" - doAssert isTitle("Foo") - doAssert(not isTitle("Foo bar")) - doAssert(not isTitle("αlpha Βeta")) - doAssert(isTitle("Αlpha Βeta Γamma")) - doAssert(not isTitle("fFoo")) - doAssert swapCase("FooBar") == "fOObAR" doAssert swapCase(" ") == " " doAssert swapCase("Αlpha Βeta Γamma") == "αLPHA βETA γAMMA" @@ -1797,38 +1794,8 @@ when isMainModule: doAssert(not isLower(' '.Rune)) - doAssert isLower("a", false) - doAssert isLower("γ", true) - doAssert(not isLower("Γ", false)) - doAssert(not isLower("4", true)) - doAssert(not isLower("", false)) - doAssert isLower("abcdγ", false) - doAssert(not isLower("33aaΓ", false)) - doAssert(not isLower("a b", false)) - - doAssert(not isLower("abCDΓ", true)) - doAssert isLower("a b", true) - doAssert isLower("1, 2, 3 go!", true) - doAssert(not isLower(" ", true)) - doAssert(not isLower("(*&#@(^#$✓ ", true)) # None of the string runes are alphabets - doAssert(not isUpper(' '.Rune)) - doAssert isUpper("Γ", false) - doAssert(not isUpper("α", false)) - doAssert(not isUpper("", false)) - doAssert isUpper("ΑΒΓ", false) - doAssert(not isUpper("A#$β", false)) - doAssert(not isUpper("A B", false)) - - doAssert(not isUpper("b", true)) - doAssert(not isUpper("✓", true)) - doAssert(not isUpper("AAccβ", true)) - doAssert isUpper("A B", true) - doAssert isUpper("1, 2, 3 GO!", true) - doAssert(not isUpper(" ", true)) - doAssert(not isUpper("(*&#@(^#$✓ ", true)) # None of the string runes are alphabets - doAssert toUpper("Γ") == "Γ" doAssert toUpper("b") == "B" doAssert toUpper("α") == "Α" |