Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>
redef var length is lazy do
if _bytelen == 0 then return 0
- var st = _first_byte
- var its = _items
- var ln = 0
- var lst = _last_byte
- while st <= lst do
- st += its.length_of_char_at(st)
- ln += 1
- end
- return ln
+ return _items.utf8_length(_first_byte, _last_byte)
end
redef fun reversed
if length_of_char_at(stpos) >= (endpos - stpos + 1) then return pos
return endpos
end
+
+ # Number of UTF-8 characters in `self` between positions `from` and `to`
+ fun utf8_length(from, to: Int): Int do
+ var st = from
+ var lst = to
+ var ln = 0
+ while st <= lst do
+ st += length_of_char_at(st)
+ ln += 1
+ end
+ return ln
+ end
end