Wed, 20 Jun 2018 02:13:44 -0400
prefs: Add binding versions of pref widget functions.
These just bind settings to existing widgets and copy the saved value to
the widget, except for combos which are produced from runtime lists.
Those are populated in a similar way as before.
There are some extra _bind_ words that will probably be dropped once the
other functions are unused.
# This program takes a C source as the input and produces the list of # all signals registered. # # Output is: # <signal name="Changed"> # <arg name="new_value" type="b"/> # </signal> from __future__ import absolute_import, division, print_function import argparse import fileinput import re import sys # List "excluded" contains signals that shouldn't be exported via # DBus. If you remove a signal from this list, please make sure # that it does not break "make" with the configure option # "--enable-dbus" turned on. excluded = [ # purple_dbus_signal_emit_purple prevents our "dbus-method-called" # signal from being propagated to dbus. "dbus-method-called", ] registerregex = re.compile( "purple_signal_register[^;]+\"([\w\-]+)\"[^;]+(purple_marshal_\w+)[^;]+;") nameregex = re.compile('[-_][a-z]') parser = argparse.ArgumentParser() parser.add_argument('input', nargs='*', help='Input files (or stdin if not specified)') parser.add_argument('-o', '--output', type=argparse.FileType('w'), help='Output to file instead of stdout') cmd_args = parser.parse_args() print("/* Generated by %s. Do not edit! */" % (sys.argv[0], ), file=cmd_args.output) print("const char *dbus_signals = ", file=cmd_args.output) input = ''.join(list(fileinput.input(cmd_args.input))) for match in registerregex.finditer(input): signal = match.group(1) marshal = match.group(2) if signal in excluded: continue signal = nameregex.sub(lambda x: x.group()[1].upper(), '-' + signal) print("\" <signal name='%s'>\\n\"" % (signal, ), file=cmd_args.output) args = marshal.split('_') # ['purple', 'marshal', <return type>, '', args...] if len(args) > 4: for arg in args[4:]: if arg == "POINTER": type = 'p' elif arg == "ENUM": type = 'i' elif arg == "INT": type = 'i' elif arg == "UINT": type = 'u' elif arg == "INT64": type = 'x' elif arg == "UINT64": type = 't' elif arg == "BOOLEAN": type = 'b' print("\" <arg type='%s'/>\\n\"" % (type, ), file=cmd_args.output) print("\" </signal>\\n\"", file=cmd_args.output) print(";", file=cmd_args.output)