view src/dbus-analyze-types.py @ 12919:248b8b39c671

[gaim-migrate @ 15272] Replace GaimBlistNodeAction with the more generic GaimMenuAction, this is in preparation for letting the chat room user list have extensible menus like the blist entries do. (I know it's not exactly the prettiest, and the callback isn't exactly type-safe, when we eventually gobjectify everything we can get some safety back by using (GObject, gpointer) but that's for later.) I'm planning to look into merging GaimPluginActions into GaimMenuActions as well. committer: Tailor Script <tailor@pidgin.im>
author Etan Reisner <pidgin@unreliablesource.net>
date Tue, 17 Jan 2006 23:22:19 +0000
parents 64fadbf3810f
children
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

options = {}

def toprint(match, line):
    if verbatim:
        return line
    else:
        return pattern % match

for arg in sys.argv[1:]:
    if arg[0:2] == "--":
        mylist = arg[2:].split("=",1)
        command = mylist[0]
        if len(mylist) > 1:
            options[command] = mylist[1]
        else:
            options[command] = None

keyword = options.get("keyword", "struct")
pattern = options.get("pattern", "%s")
verbatim = options.has_key("verbatim")

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*;")

print "/* Generated by %s.  Do not edit! */" % sys.argv[0]

myinput = iter(sys.stdin)

for line in myinput:
    match = structregexp1.match(line)
    if match is not None:
        print toprint(match.group(2), line)
        continue

    match = structregexp2.match(line)
    if match is not None:
        while True:
            if verbatim:
                print line.rstrip()
            line = myinput.next()
            match = structregexp3.match(line)
            if match is not None:
                print toprint(match.group(1), line)
                break
            if line[0] not in [" ", "\t", "{", "\n"]:
                if verbatim:
                    print line
                break