define-snippets.py
author Andrew Gwozdziewycz <hg@apgwoz.com>
Wed Jul 29 13:00:01 2009 -0700 (2 years ago)
changeset 7 30ef849e9977
parent 2 621acc4a8281
permissions -rwxr-xr-x
* regenerated snippets based on new replacement strategy for filenames
     1 #!/usr/bin/env python
     2 
     3 import re
     4 
     5 FUNC_SKEL = """#contributor : Andrew Gwozdziewycz <web@apgwoz.com>
     6 #name : %(func_name)s(%(func_sig)s)
     7 # --
     8 %(func_name)s(%(func_args)s)$0"""
     9 
    10 func_args_re = re.compile('([a-zA-Z0-9_]+) \((.*?)\)')
    11 
    12 def split_func_args(file):
    13     fi = open(file)
    14     lines = [x for x in fi.xreadlines() if not x.startswith('  ')]
    15     fargs = []
    16     for n in lines:
    17         it = func_args_re.search(n)
    18         if it:
    19             print it.groups()
    20             fargs.append(it.groups())
    21     return fargs
    22 
    23 def parse_args(args):
    24     args = args.split('[')
    25     argsl = args[0].split(',')
    26     argsout = []
    27     for arg in argsl:
    28         arg = arg.strip()
    29         pieces = arg.split()
    30         if len(pieces) == 2:
    31             argsout.append(pieces[1])
    32     if len(args) > 1 and len(args[1]):
    33         newa = '[' + args[1].rstrip()
    34         if not newa.endswith(']'):
    35             newa += ']'
    36         if len(argsout):
    37             argsout[-1] += newa
    38         else:
    39             argsout.append(newa)
    40     return argsout
    41 
    42 def parse_definitions(file):
    43     functions = split_func_args(file)
    44     out = []
    45     for f in functions:
    46         args = parse_args(f[1])
    47         out.append((f[0], args))
    48     return out
    49     
    50 def generate_snippets(outpath, defs):
    51     for d in defs:
    52         ellipsis = ', '.join(['...'] * len(d[1]))
    53         args = ', '.join(['${%s}' % x for x in d[1]])
    54         filename = d[0].replace('_', '.', 1).replace('_', '-')
    55         f = open(outpath + '/' + filename, 'w')
    56         f.write(FUNC_SKEL % {'func_sig': ellipsis,
    57                            'func_name': d[0],
    58                            'func_args': args})
    59 
    60 if __name__ == "__main__":
    61     defs = parse_definitions("php-functions-with-args.txt")
    62     generate_snippets('php-mode', defs)