Added iterator for utf8 strings
This commit is contained in:
parent
6111d2ec21
commit
3cea6e8a96
1 changed files with 15 additions and 1 deletions
|
|
@ -1572,7 +1572,7 @@ proc isTitle*(s: string): bool {.noSideEffect, procvar,
|
||||||
firstRune = true
|
firstRune = true
|
||||||
|
|
||||||
iterator runes*(s: string): Rune =
|
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
|
var
|
||||||
i = 0
|
i = 0
|
||||||
result: Rune
|
result: Rune
|
||||||
|
|
@ -1580,6 +1580,14 @@ iterator runes*(s: string): Rune =
|
||||||
fastRuneAt(s, i, result, true)
|
fastRuneAt(s, i, result, true)
|
||||||
yield result
|
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] =
|
proc toRunes*(s: string): seq[Rune] =
|
||||||
## Obtains a sequence containing the Runes in ``s``
|
## Obtains a sequence containing the Runes in ``s``
|
||||||
result = newSeq[Rune]()
|
result = newSeq[Rune]()
|
||||||
|
|
@ -1777,6 +1785,12 @@ when isMainModule:
|
||||||
# test for rune positioning and runeSubStr()
|
# test for rune positioning and runeSubStr()
|
||||||
let s = "Hänsel ««: 10,00€"
|
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, 1) == (20, 18))
|
||||||
doAssert(runeReverseOffset(s, 19) == (-1, 18))
|
doAssert(runeReverseOffset(s, 19) == (-1, 18))
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue