diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2016-07-21 20:00:22 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-21 20:00:22 +0200 |
commit | edcbfe991b3c6190fd5d10daaa996d635730393f (patch) | |
tree | 727cbb9ae49eaa6e6c2beb654158f25148209840 | |
parent | 5784e436624ac4f5118ee33c44b7705538e04020 (diff) | |
parent | 3cea6e8a96f1d0b012ab37d64cb40c562efaeb52 (diff) | |
download | Nim-edcbfe991b3c6190fd5d10daaa996d635730393f.tar.gz |
Merge pull request #4481 from oderwat/unicode-ext1
Added iterator for utf8 strings
-rw-r--r-- | lib/pure/unicode.nim | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/pure/unicode.nim b/lib/pure/unicode.nim index b5383c5d3..0cbe8de7a 100644 --- a/lib/pure/unicode.nim +++ b/lib/pure/unicode.nim @@ -1572,7 +1572,7 @@ proc isTitle*(s: string): bool {.noSideEffect, procvar, firstRune = true iterator runes*(s: string): Rune = - ## Iterates over any unicode character of the string ``s`` + ## Iterates over any unicode character of the string ``s`` returning runes var i = 0 result: Rune @@ -1580,6 +1580,14 @@ iterator runes*(s: string): Rune = fastRuneAt(s, i, result, true) yield result +iterator utf8*(s: string): string = + ## Iterates over any unicode character of the string ``s`` returning utf8 values + var o = 0 + while o < s.len: + let n = runeLenAt(s, o) + yield s[o.. (o+n-1)] + o += n + proc toRunes*(s: string): seq[Rune] = ## Obtains a sequence containing the Runes in ``s`` result = newSeq[Rune]() @@ -1777,6 +1785,12 @@ when isMainModule: # test for rune positioning and runeSubStr() let s = "Hänsel ««: 10,00€" + var t = "" + for c in s.utf8: + t.add c + + doAssert(s == t) + doAssert(runeReverseOffset(s, 1) == (20, 18)) doAssert(runeReverseOffset(s, 19) == (-1, 18)) |