Some procs to deal with Rune position base indexing.
It can't be perfect but at least one can index on rune position efficiently.
This commit is contained in:
parent
99be6dce81
commit
1138cf5234
1 changed files with 19 additions and 0 deletions
|
|
@ -183,6 +183,25 @@ proc `$`*(runes: seq[Rune]): string =
|
||||||
result = ""
|
result = ""
|
||||||
for rune in runes: result.add(rune.toUTF8)
|
for rune in runes: result.add(rune.toUTF8)
|
||||||
|
|
||||||
|
proc runeOffset*(s: string, pos:int): int =
|
||||||
|
## Returns the byte position of unicode character at position in s
|
||||||
|
var
|
||||||
|
i = 0
|
||||||
|
o = 0
|
||||||
|
while i < pos:
|
||||||
|
o += runeLenAt(s, o)
|
||||||
|
inc i
|
||||||
|
o
|
||||||
|
|
||||||
|
proc rune*(s: string, pos:int): Rune =
|
||||||
|
## Returns the unicode character at position pos
|
||||||
|
fastRuneAt(s, runeOffset(s, pos), result, false)
|
||||||
|
|
||||||
|
proc runeStr*(s: string, pos:int): string =
|
||||||
|
## Returns the unicode character at position pos as UTF8 String
|
||||||
|
let o = runeOffset(s, pos)
|
||||||
|
s[o.. (o+runeLenAt(s, o)-1)]
|
||||||
|
|
||||||
const
|
const
|
||||||
alphaRanges = [
|
alphaRanges = [
|
||||||
0x00d8, 0x00f6, # -
|
0x00d8, 0x00f6, # -
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue