view libpurple/dbus-analyze-types.py @ 18603:5610c2ea0d94

revert 'no visible tabs when only one conversation' as it proved unpopular. Made tabs only fill the entire width of the notebook when there's only one tab to avoid http://pidgin.im/~deryni/that_just_looks_dumb.png
author Sean Egan <seanegan@gmail.com>
date Sun, 22 Jul 2007 08:14:16 +0000
parents 5fe8042783c1
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