diff src/dbus-analyze-types.py @ 11146:1c5398ccbeb0

[gaim-migrate @ 13217] Gaim-DBUS signal export works with DBUS >= 0.35 Various gaim API functions available through DBUS committer: Tailor Script <tailor@pidgin.im>
author Piotr Zielinski <zielaj>
date Fri, 22 Jul 2005 19:47:29 +0000
parents
children ebb02ea3c789
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/dbus-analyze-types.py	Fri Jul 22 19:47:29 2005 +0000
@@ -0,0 +1,79 @@
+# This program takes a C header/source as the input and produces
+#
+# with --keyword=enum: the list of all enums
+# with --keyword=struct: the list of all structs
+#
+# the output styles:
+#
+# --enum    DBUS_POINTER_NAME1,
+#           DBUS_POINTER_NAME2,
+#           DBUS_POINTER_NAME3, 
+# 
+# --list    NAME1
+#           NAME2
+#           NAME3
+# 
+
+
+import re
+import sys
+
+myinput = iter(sys.stdin)
+
+def outputenum(name):
+    print "DBUS_POINTER_%s," % name
+
+def outputdeclare(name):
+    print "DECLARE_TYPE(%s, NONE);" % name
+
+def outputtext(name):
+    print name
+
+myoutput = outputtext
+keyword = "struct"
+
+for arg in sys.argv[1:]:
+    if arg[0:2] == "--":
+        mylist = arg[2:].split("=")
+        command = mylist[0]
+        if len(mylist) > 1:
+            value = mylist[1]
+        else:
+            value = None
+            
+    if command == "enum":
+        myoutput = outputenum
+    if command == "declare":
+        myoutput = outputdeclare
+    if command == "list":
+        myoutput = outputtext
+    if command == "keyword":
+        keyword = value
+        
+
+structregexp1 = re.compile(r"^(typedef\s+)?%s\s+\w+\s+(\w+)\s*;" % keyword)
+structregexp2 = re.compile(r"^(typedef\s+)?%s" % keyword)
+structregexp3 = re.compile(r"^}\s+(\w+)\s*;")
+
+for line in myinput:
+    match = structregexp1.match(line)
+    if match is not None:
+        myoutput(match.group(2))        
+        continue
+
+    match = structregexp2.match(line)
+    if match is not None:
+        while True:
+            line = myinput.next()
+            match = structregexp3.match(line)
+            if match is not None:
+                myoutput(match.group(1))
+                break
+            if line[0] not in [" ", "\t", "{", "\n"]:
+                break
+        
+
+
+
+    
+