@@ -128,6 +128,8 @@ def viml_keys(obj):
128128 return obj .keys ()
129129
130130def viml_len (obj ):
131+ if type (obj ) is str :
132+ return len (obj .encode ('utf-8' ))
131133 return len (obj )
132134
133135def viml_printf (* args ):
@@ -2921,12 +2923,14 @@ def __init__(self, lines):
29212923 self .buf = []
29222924 self .pos = []
29232925 lnum = 0
2926+ offset = 0
29242927 while lnum < viml_len (lines ):
29252928 col = 0
29262929 for c in viml_split (lines [lnum ], "\\ zs" ):
29272930 viml_add (self .buf , c )
2928- viml_add (self .pos , [lnum + 1 , col + 1 ])
2931+ viml_add (self .pos , [lnum + 1 , col + 1 , offset ])
29292932 col += viml_len (c )
2933+ offset += viml_len (c )
29302934 while lnum + 1 < viml_len (lines ) and viml_eqregh (lines [lnum + 1 ], "^\\ s*\\ \\ " ):
29312935 skip = TRUE
29322936 col = 0
@@ -2936,14 +2940,17 @@ def __init__(self, lines):
29362940 skip = FALSE
29372941 else :
29382942 viml_add (self .buf , c )
2939- viml_add (self .pos , [lnum + 2 , col + 1 ])
2943+ viml_add (self .pos , [lnum + 2 , col + 1 , offset ])
29402944 col += viml_len (c )
2945+ offset += viml_len (c )
29412946 lnum += 1
2947+ offset += 1
29422948 viml_add (self .buf , "<EOL>" )
2943- viml_add (self .pos , [lnum + 1 , col + 1 ])
2949+ viml_add (self .pos , [lnum + 1 , col + 1 , offset ])
29442950 lnum += 1
2951+ offset += 1
29452952 # for <EOF>
2946- viml_add (self .pos , [lnum + 1 , 0 ])
2953+ viml_add (self .pos , [lnum + 1 , 0 , offset ])
29472954 self .i = 0
29482955
29492956 def eof (self ):
@@ -3015,8 +3022,8 @@ def getstr(self, begin, end):
30153022 return r
30163023
30173024 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 })
30203027
30213028 def setpos (self , pos ):
30223029 self .i = pos .i
0 commit comments