/ tools / scripts / misc / reset_reason / reset_reason.py
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