(self, name, args)
| 173 | }""") |
| 174 | |
| 175 | def write_arguments(self, name, args): |
| 176 | def esc(s): |
| 177 | s = s.replace("{", "\\{").replace("}", "\\}").replace("'", "") |
| 178 | return s |
| 179 | self.writeln("_" + name.replace(" ", "_") + "()\n{") |
| 180 | res = [] |
| 181 | for arg in args: |
| 182 | if len(arg.get_parameters()) > 1: |
| 183 | a = "{'" + "','".join(arg.get_parameters()) + "'}'" |
| 184 | else: |
| 185 | a = "'" + arg.get_parameters()[0] |
| 186 | |
| 187 | usage = arg.get_usage() |
| 188 | |
| 189 | # no argument, just a flag |
| 190 | if usage == None: |
| 191 | res.append(a + "[" + esc(arg.desc) + "]::'") |
| 192 | continue |
| 193 | |
| 194 | # number argument |
| 195 | m = re.search('<(int|double|percent|line|value|bytes)>$', usage) |
| 196 | if m != None: |
| 197 | res.append(a + "[" + esc(arg.desc + "; <"+m.group(1)+">") + "]:num:'") |
| 198 | continue |
| 199 | |
| 200 | # file argument |
| 201 | m = re.search('<(path/to/(file|bin)\.?(.*))>$', usage) |
| 202 | if m != None: |
| 203 | if len(m.group(3)) > 0: |
| 204 | res.append(a + "[" + esc(arg.desc + "; <"+m.group(2)+">")+"]:file:_files -g \"*."+esc(m.group(3))+"\"'") |
| 205 | else: |
| 206 | res.append(a + "[" + esc(arg.desc + "; <"+m.group(2)+">")+"]:file:_files'") |
| 207 | continue |
| 208 | |
| 209 | # dir argument |
| 210 | m = re.search('<(path/to/dir|dir)>$', usage) |
| 211 | if m != None: |
| 212 | res.append(a + "[" + esc(arg.desc + "; <path/to/dir>")+"]:dir:_files -/'") |
| 213 | continue |
| 214 | |
| 215 | # list of options |
| 216 | m = re.search('\((.*)\)$', usage) |
| 217 | if m != None: |
| 218 | options = m.group(1).split("|") |
| 219 | res.append(a + "[" + esc(arg.desc) + "]:argument:(" + " ".join(map(lambda x: esc(x), options)) + ")'") |
| 220 | continue |
| 221 | |
| 222 | # arguments without completion |
| 223 | m = re.search('({.*}|<move_type>|<move>|<arg1 arg2 ... argn>|<string>)$', usage) |
| 224 | if m != None: |
| 225 | options = m.group(1).split("|") |
| 226 | res.append(a + "[" + esc(arg.desc + "; "+m.group(1))+"]:argument:'") |
| 227 | continue |
| 228 | |
| 229 | # no match, just add default help |
| 230 | print "ERROR: Argument with unknown usage found: " + self.name |
| 231 | sys.exit(1) |
| 232 | #res.append(a + "[" + esc(arg.desc) + "]:argument:'") |
no test coverage detected