55import re
66import inspect
77
8+
89def main ():
910 use_neovim = sys .argv [1 ] == '--neovim'
1011
@@ -18,97 +19,109 @@ def main():
1819 print (e )
1920 sys .exit (1 )
2021
22+
2123class VimLParserException (Exception ):
2224 pass
2325
26+
2427class AttributeDict (dict ):
2528 __getattr__ = dict .__getitem__
2629 __setattr__ = dict .__setitem__
2730 __delattr__ = dict .__delitem__
2831
32+
2933pat_vim2py = {
30- "[0-9a-zA-Z]" : "[0-9a-zA-Z]" ,
31- "[@*!=><&~#]" : "[@*!=><&~#]" ,
32- "\\ <ARGOPT\\ >" : "\\ bARGOPT\\ b" ,
33- "\\ <BANG\\ >" : "\\ bBANG\\ b" ,
34- "\\ <EDITCMD\\ >" : "\\ bEDITCMD\\ b" ,
35- "\\ <NOTRLCOM\\ >" : "\\ bNOTRLCOM\\ b" ,
36- "\\ <TRLBAR\\ >" : "\\ bTRLBAR\\ b" ,
37- "\\ <USECTRLV\\ >" : "\\ bUSECTRLV\\ b" ,
38- "\\ <USERCMD\\ >" : "\\ bUSERCMD\\ b" ,
39- "\\ <\\ (XFILE\\ |FILES\\ |FILE1\\ )\\ >" : "\\ b(XFILE|FILES|FILE1)\\ b" ,
40- "\\ S" : "\\ S" ,
41- "\\ a" : "[A-Za-z]" ,
42- "\\ d" : "\\ d" ,
43- "\\ h" : "[A-Za-z_]" ,
44- "\\ s" : "\\ s" ,
45- "\\ v^d%[elete][lp]$" : "^d(elete|elet|ele|el|e)[lp]$" ,
46- "\\ v^s%(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])" : "^s(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])" ,
47- "\\ w" : "[0-9A-Za-z_]" ,
48- "\\ w\\ |[:#]" : "[0-9A-Za-z_]|[:#]" ,
49- "\\ x" : "[0-9A-Fa-f]" ,
50- "^++" : "^\+\+" ,
51- "^++bad=\\ (keep\\ |drop\\ |.\\ )\\ >" : "^\\ +\\ +bad=(keep|drop|.)\\ b" ,
52- "^++bad=drop" : "^\\ +\\ +bad=drop" ,
53- "^++bad=keep" : "^\\ +\\ +bad=keep" ,
54- "^++bin\\ >" : "^\\ +\\ +bin\\ b" ,
55- "^++edit\\ >" : "^\\ +\\ +edit\\ b" ,
56- "^++enc=\\ S" : "^\\ +\\ +enc=\\ S" ,
57- "^++encoding=\\ S" : "^\\ +\\ +encoding=\\ S" ,
58- "^++ff=\\ (dos\\ |unix\\ |mac\\ )\\ >" : "^\\ +\\ +ff=(dos|unix|mac)\\ b" ,
59- "^++fileformat=\\ (dos\\ |unix\\ |mac\\ )\\ >" : "^\\ +\\ +fileformat=(dos|unix|mac)\\ b" ,
60- "^++nobin\\ >" : "^\\ +\\ +nobin\\ b" ,
61- "^[A-Z]" : "^[A-Z]" ,
62- "^\\ $\\ w\\ +" : "^\\ $[0-9A-Za-z_]+" ,
63- "^\\ (!\\ |global\\ |vglobal\\ )$" : "^(!|global|vglobal)$" ,
64- "^\\ (WHILE\\ |FOR\\ )$" : "^(WHILE|FOR)$" ,
65- "^\\ (vimgrep\\ |vimgrepadd\\ |lvimgrep\\ |lvimgrepadd\\ )$" : "^(vimgrep|vimgrepadd|lvimgrep|lvimgrepadd)$" ,
66- "^\\ d" : "^\\ d" ,
67- "^\\ h" : "^[A-Za-z_]" ,
68- "^\\ s" : "^\\ s" ,
69- "^\\ s*\\ \\ " : "^\\ s*\\ \\ " ,
70- "^[ \\ t]$" : "^[ \\ t]$" ,
71- "^[A-Za-z]$" : "^[A-Za-z]$" ,
72- "^[0-9A-Za-z]$" : "^[0-9A-Za-z]$" ,
73- "^[0-9]$" : "^[0-9]$" ,
74- "^[0-9A-Fa-f]$" : "^[0-9A-Fa-f]$" ,
75- "^[0-9A-Za-z_]$" : "^[0-9A-Za-z_]$" ,
76- "^[A-Za-z_]$" : "^[A-Za-z_]$" ,
77- "^[0-9A-Za-z_:#]$" : "^[0-9A-Za-z_:#]$" ,
78- "^[A-Za-z_][0-9A-Za-z_]*$" : "^[A-Za-z_][0-9A-Za-z_]*$" ,
79- "^[A-Z]$" : "^[A-Z]$" ,
80- "^[a-z]$" : "^[a-z]$" ,
81- "^[vgslabwt]:$\\ |^\\ ([vgslabwt]:\\ )\\ ?[A-Za-z_][0-9A-Za-z_#]*$" : "^[vgslabwt]:$|^([vgslabwt]:)?[A-Za-z_][0-9A-Za-z_#]*$" ,
82- "^[0-7]$" : "^[0-7]$" ,
83- "^[0-9A-Fa-f][0-9A-Fa-f]$" : "^[0-9A-Fa-f][0-9A-Fa-f]$" ,
84- "^\.[0-9A-Fa-f]$" : "^\.[0-9A-Fa-f]$" ,
85- "^[0-9A-Fa-f][^0-9A-Fa-f]$" : "^[0-9A-Fa-f][^0-9A-Fa-f]$" ,
34+ "[0-9a-zA-Z]" : "[0-9a-zA-Z]" ,
35+ "[@*!=><&~#]" : "[@*!=><&~#]" ,
36+ "\\ <ARGOPT\\ >" : "\\ bARGOPT\\ b" ,
37+ "\\ <BANG\\ >" : "\\ bBANG\\ b" ,
38+ "\\ <EDITCMD\\ >" : "\\ bEDITCMD\\ b" ,
39+ "\\ <NOTRLCOM\\ >" : "\\ bNOTRLCOM\\ b" ,
40+ "\\ <TRLBAR\\ >" : "\\ bTRLBAR\\ b" ,
41+ "\\ <USECTRLV\\ >" : "\\ bUSECTRLV\\ b" ,
42+ "\\ <USERCMD\\ >" : "\\ bUSERCMD\\ b" ,
43+ "\\ <\\ (XFILE\\ |FILES\\ |FILE1\\ )\\ >" : "\\ b(XFILE|FILES|FILE1)\\ b" ,
44+ "\\ S" : "\\ S" ,
45+ "\\ a" : "[A-Za-z]" ,
46+ "\\ d" : "\\ d" ,
47+ "\\ h" : "[A-Za-z_]" ,
48+ "\\ s" : "\\ s" ,
49+ "\\ v^d%[elete][lp]$" : "^d(elete|elet|ele|el|e)[lp]$" ,
50+ "\\ v^s%(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])" : "^s(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])" ,
51+ "\\ w" : "[0-9A-Za-z_]" ,
52+ "\\ w\\ |[:#]" : "[0-9A-Za-z_]|[:#]" ,
53+ "\\ x" : "[0-9A-Fa-f]" ,
54+ "^++" : "^\+\+" ,
55+ "^++bad=\\ (keep\\ |drop\\ |.\\ )\\ >" : "^\\ +\\ +bad=(keep|drop|.)\\ b" ,
56+ "^++bad=drop" : "^\\ +\\ +bad=drop" ,
57+ "^++bad=keep" : "^\\ +\\ +bad=keep" ,
58+ "^++bin\\ >" : "^\\ +\\ +bin\\ b" ,
59+ "^++edit\\ >" : "^\\ +\\ +edit\\ b" ,
60+ "^++enc=\\ S" : "^\\ +\\ +enc=\\ S" ,
61+ "^++encoding=\\ S" : "^\\ +\\ +encoding=\\ S" ,
62+ "^++ff=\\ (dos\\ |unix\\ |mac\\ )\\ >" : "^\\ +\\ +ff=(dos|unix|mac)\\ b" ,
63+ "^++fileformat=\\ (dos\\ |unix\\ |mac\\ )\\ >" : "^\\ +\\ +fileformat=(dos|unix|mac)\\ b" ,
64+ "^++nobin\\ >" : "^\\ +\\ +nobin\\ b" ,
65+ "^[A-Z]" : "^[A-Z]" ,
66+ "^\\ $\\ w\\ +" : "^\\ $[0-9A-Za-z_]+" ,
67+ "^\\ (!\\ |global\\ |vglobal\\ )$" : "^(!|global|vglobal)$" ,
68+ "^\\ (WHILE\\ |FOR\\ )$" : "^(WHILE|FOR)$" ,
69+ "^\\ (vimgrep\\ |vimgrepadd\\ |lvimgrep\\ |lvimgrepadd\\ )$" : "^(vimgrep|vimgrepadd|lvimgrep|lvimgrepadd)$" ,
70+ "^\\ d" : "^\\ d" ,
71+ "^\\ h" : "^[A-Za-z_]" ,
72+ "^\\ s" : "^\\ s" ,
73+ "^\\ s*\\ \\ " : "^\\ s*\\ \\ " ,
74+ "^[ \\ t]$" : "^[ \\ t]$" ,
75+ "^[A-Za-z]$" : "^[A-Za-z]$" ,
76+ "^[0-9A-Za-z]$" : "^[0-9A-Za-z]$" ,
77+ "^[0-9]$" : "^[0-9]$" ,
78+ "^[0-9A-Fa-f]$" : "^[0-9A-Fa-f]$" ,
79+ "^[0-9A-Za-z_]$" : "^[0-9A-Za-z_]$" ,
80+ "^[A-Za-z_]$" : "^[A-Za-z_]$" ,
81+ "^[0-9A-Za-z_:#]$" : "^[0-9A-Za-z_:#]$" ,
82+ "^[A-Za-z_][0-9A-Za-z_]*$" : "^[A-Za-z_][0-9A-Za-z_]*$" ,
83+ "^[A-Z]$" : "^[A-Z]$" ,
84+ "^[a-z]$" : "^[a-z]$" ,
85+ "^[vgslabwt]:$\\ |^\\ ([vgslabwt]:\\ )\\ ?[A-Za-z_][0-9A-Za-z_#]*$" : "^[vgslabwt]:$|^([vgslabwt]:)?[A-Za-z_][0-9A-Za-z_#]*$" ,
86+ "^[0-7]$" : "^[0-7]$" ,
87+ "^[0-9A-Fa-f][0-9A-Fa-f]$" : "^[0-9A-Fa-f][0-9A-Fa-f]$" ,
88+ "^\.[0-9A-Fa-f]$" : "^\.[0-9A-Fa-f]$" ,
89+ "^[0-9A-Fa-f][^0-9A-Fa-f]$" : "^[0-9A-Fa-f][^0-9A-Fa-f]$" ,
8690}
8791
92+
8893def viml_add (lst , item ):
8994 lst .append (item )
9095
96+
9197def viml_call (func , * args ):
9298 func (* args )
9399
100+
94101def viml_char2nr (c ):
95102 return ord (c )
96103
104+
97105def viml_empty (obj ):
98106 return len (obj ) == 0
99107
108+
100109def viml_equalci (a , b ):
101110 return a .lower () == b .lower ()
102111
112+
103113def viml_eqreg (s , reg ):
104114 return re .search (pat_vim2py [reg ], s , re .IGNORECASE )
105115
116+
106117def viml_eqregh (s , reg ):
107118 return re .search (pat_vim2py [reg ], s )
108119
120+
109121def viml_eqregq (s , reg ):
110122 return re .search (pat_vim2py [reg ], s , re .IGNORECASE )
111123
124+
112125def viml_escape (s , chars ):
113126 r = ''
114127 for c in s :
@@ -118,18 +131,23 @@ def viml_escape(s, chars):
118131 r += c
119132 return r
120133
134+
121135def viml_extend (obj , item ):
122136 obj .extend (item )
123137
124- def viml_insert (lst , item , idx = 0 ):
138+
139+ def viml_insert (lst , item , idx = 0 ):
125140 lst .insert (idx , item )
126141
142+
127143def viml_join (lst , sep ):
128144 return sep .join (lst )
129145
146+
130147def viml_keys (obj ):
131148 return obj .keys ()
132149
150+
133151def viml_len (obj ):
134152 if type (obj ) is str :
135153 if sys .version_info < (3 , 0 ):
@@ -139,18 +157,21 @@ def viml_len(obj):
139157 return len (b )
140158 return len (obj )
141159
160+
142161def viml_printf (* args ):
143162 if len (args ) == 1 :
144163 return args [0 ]
145164 else :
146165 return args [0 ] % args [1 :]
147166
167+
148168def viml_range (start , end = None ):
149169 if end is None :
150170 return range (start )
151171 else :
152172 return range (start , end + 1 )
153173
174+
154175def viml_readfile (path ):
155176 lines = []
156177 f = open (path )
@@ -159,23 +180,28 @@ def viml_readfile(path):
159180 f .close ()
160181 return lines
161182
183+
162184def viml_remove (lst , idx ):
163185 del lst [idx ]
164186
187+
165188def viml_split (s , sep ):
166189 if sep == "\\ zs" :
167190 return s
168191 raise VimLParserException ("NotImplemented" )
169192
193+
170194def viml_str2nr (s , base = 10 ):
171195 return int (s , base )
172196
197+
173198def viml_string (obj ):
174199 return str (obj )
175200
201+
176202def viml_has_key (obj , key ):
177203 return key in obj
178204
205+
179206def viml_stridx (a , b ):
180207 return a .find (b )
181-
0 commit comments