view 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 source

# 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