reset_reason.py
1 from collections import OrderedDict, namedtuple 2 from os.path import isfile, join 3 from pprint import pprint 4 import argparse 5 import git 6 import os 7 import pickle 8 import re 9 import subprocess 10 import sys 11 import tempfile 12 import yaml 13 14 15 # Extract enums from filename 16 def get_enums(filename): 17 enums = {} 18 current_enum = {} 19 description = None 20 with open(filename, "r") as source_file: 21 lines = source_file.readlines() 22 enum_started = False 23 val = 0 24 25 for line in lines: 26 if re.match(r"^\s?(?:typedef )?enum\s?{\s?", line): 27 enum_started = True 28 continue 29 30 end_match = re.match(r"^\s?}\s?(?P<name>[A-Za-z0-9_]+)\s?;", line) 31 if enum_started and end_match: 32 enum_started = False 33 34 enums[end_match.group("name")] = current_enum 35 current_enum = {} 36 continue 37 38 if re.match(r"^\s+\/\/", line): 39 description = line.split("//")[1].strip() 40 continue 41 42 if enum_started: 43 match = re.match(r"^\s*(?P<name>[A-Za-z0-9_]+)(?:\s?=\s?)?(?P<value>[0-9]+)?\s?,\s?", line) 44 45 # Skip empty lines 46 if match is None: 47 continue 48 49 name = match.group("name") 50 if match.group("value"): 51 val = int(match.group("value")) 52 53 current_enum[val] = name 54 55 val += 1 56 57 return enums 58 59 parser = argparse.ArgumentParser() 60 parser.add_argument("filename", help="filename to parse") 61 args = parser.parse_args() 62 pprint(get_enums(args.filename)) 63