@@ -128,6 +128,8 @@ def viml_keys(obj):
128
128
return obj .keys ()
129
129
130
130
def viml_len (obj ):
131
+ if type (obj ) is str :
132
+ return len (obj .encode ('utf-8' ))
131
133
return len (obj )
132
134
133
135
def viml_printf (* args ):
@@ -2921,12 +2923,14 @@ def __init__(self, lines):
2921
2923
self .buf = []
2922
2924
self .pos = []
2923
2925
lnum = 0
2926
+ offset = 0
2924
2927
while lnum < viml_len (lines ):
2925
2928
col = 0
2926
2929
for c in viml_split (lines [lnum ], "\\ zs" ):
2927
2930
viml_add (self .buf , c )
2928
- viml_add (self .pos , [lnum + 1 , col + 1 ])
2931
+ viml_add (self .pos , [lnum + 1 , col + 1 , offset ])
2929
2932
col += viml_len (c )
2933
+ offset += viml_len (c )
2930
2934
while lnum + 1 < viml_len (lines ) and viml_eqregh (lines [lnum + 1 ], "^\\ s*\\ \\ " ):
2931
2935
skip = TRUE
2932
2936
col = 0
@@ -2936,14 +2940,17 @@ def __init__(self, lines):
2936
2940
skip = FALSE
2937
2941
else :
2938
2942
viml_add (self .buf , c )
2939
- viml_add (self .pos , [lnum + 2 , col + 1 ])
2943
+ viml_add (self .pos , [lnum + 2 , col + 1 , offset ])
2940
2944
col += viml_len (c )
2945
+ offset += viml_len (c )
2941
2946
lnum += 1
2947
+ offset += 1
2942
2948
viml_add (self .buf , "<EOL>" )
2943
- viml_add (self .pos , [lnum + 1 , col + 1 ])
2949
+ viml_add (self .pos , [lnum + 1 , col + 1 , offset ])
2944
2950
lnum += 1
2951
+ offset += 1
2945
2952
# for <EOF>
2946
- viml_add (self .pos , [lnum + 1 , 0 ])
2953
+ viml_add (self .pos , [lnum + 1 , 0 , offset ])
2947
2954
self .i = 0
2948
2955
2949
2956
def eof (self ):
@@ -3015,8 +3022,8 @@ def getstr(self, begin, end):
3015
3022
return r
3016
3023
3017
3024
def getpos (self ):
3018
- lnum , col = self .pos [self .i ]
3019
- return AttributeDict ({"i" :self .i , "lnum" :lnum , "col" :col })
3025
+ lnum , col , offset = self .pos [self .i ]
3026
+ return AttributeDict ({"i" :self .i , "lnum" :lnum , "col" :col , "offset" : offset })
3020
3027
3021
3028
def setpos (self , pos ):
3022
3029
self .i = pos .i
0 commit comments