diff options
author | Hans Raaf <hara@oderwat.de> | 2016-07-13 00:24:21 +0200 |
---|---|---|
committer | Hans Raaf <hara@oderwat.de> | 2016-07-13 00:25:31 +0200 |
commit | 3cea6e8a96f1d0b012ab37d64cb40c562efaeb52 (patch) | |
tree | ae11d9f22508bdb47532596e2cc2bd49a098fdf1 /lib/pure | |
parent | 6111d2ec21ebfa33939abc91bc79ac329b9c95c7 (diff) | |
download | Nim-3cea6e8a96f1d0b012ab37d64cb40c562efaeb52.tar.gz |
Added iterator for utf8 strings
Diffstat (limited to 'lib/pure')
-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)) |