11146
|
1 # This program takes a C header/source as the input and produces
|
|
2 #
|
|
3 # with --keyword=enum: the list of all enums
|
|
4 # with --keyword=struct: the list of all structs
|
|
5 #
|
|
6 # the output styles:
|
|
7 #
|
|
8 # --enum DBUS_POINTER_NAME1,
|
|
9 # DBUS_POINTER_NAME2,
|
|
10 # DBUS_POINTER_NAME3,
|
|
11 #
|
|
12 # --list NAME1
|
|
13 # NAME2
|
|
14 # NAME3
|
|
15 #
|
|
16
|
|
17
|
|
18 import re
|
|
19 import sys
|
|
20
|
|
21 myinput = iter(sys.stdin)
|
|
22
|
|
23 def outputenum(name):
|
|
24 print "DBUS_POINTER_%s," % name
|
|
25
|
|
26 def outputdeclare(name):
|
|
27 print "DECLARE_TYPE(%s, NONE);" % name
|
|
28
|
|
29 def outputtext(name):
|
|
30 print name
|
|
31
|
|
32 myoutput = outputtext
|
|
33 keyword = "struct"
|
|
34
|
|
35 for arg in sys.argv[1:]:
|
|
36 if arg[0:2] == "--":
|
|
37 mylist = arg[2:].split("=")
|
|
38 command = mylist[0]
|
|
39 if len(mylist) > 1:
|
|
40 value = mylist[1]
|
|
41 else:
|
|
42 value = None
|
|
43
|
|
44 if command == "enum":
|
|
45 myoutput = outputenum
|
|
46 if command == "declare":
|
|
47 myoutput = outputdeclare
|
|
48 if command == "list":
|
|
49 myoutput = outputtext
|
|
50 if command == "keyword":
|
|
51 keyword = value
|
|
52
|
|
53
|
|
54 structregexp1 = re.compile(r"^(typedef\s+)?%s\s+\w+\s+(\w+)\s*;" % keyword)
|
|
55 structregexp2 = re.compile(r"^(typedef\s+)?%s" % keyword)
|
|
56 structregexp3 = re.compile(r"^}\s+(\w+)\s*;")
|
|
57
|
|
58 for line in myinput:
|
|
59 match = structregexp1.match(line)
|
|
60 if match is not None:
|
|
61 myoutput(match.group(2))
|
|
62 continue
|
|
63
|
|
64 match = structregexp2.match(line)
|
|
65 if match is not None:
|
|
66 while True:
|
|
67 line = myinput.next()
|
|
68 match = structregexp3.match(line)
|
|
69 if match is not None:
|
|
70 myoutput(match.group(1))
|
|
71 break
|
|
72 if line[0] not in [" ", "\t", "{", "\n"]:
|
|
73 break
|
|
74
|
|
75
|
|
76
|
|
77
|
|
78
|
|
79
|