summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2016-07-21 20:00:22 +0200
committerGitHub <noreply@github.com>2016-07-21 20:00:22 +0200
commitedcbfe991b3c6190fd5d10daaa996d635730393f (patch)
tree727cbb9ae49eaa6e6c2beb654158f25148209840
parent5784e436624ac4f5118ee33c44b7705538e04020 (diff)
parent3cea6e8a96f1d0b012ab37d64cb40c562efaeb52 (diff)
downloadNim-edcbfe991b3c6190fd5d10daaa996d635730393f.tar.gz
Merge pull request #4481 from oderwat/unicode-ext1
Added iterator for utf8 strings
-rw-r--r--lib/pure/unicode.nim16
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))