Mercurial > pidgin
view libpurple/dbus-analyze-signals.py @ 31167:060739bdc84d
Suppress msgfmt errors by removing c-format markers
This is unfortunate, but it's the best that I could come up with. The
translator, Khaled Hosny, informed me that C does not allow you to skip
positional format string arguments, and printf(3) on my system agrees.
It does work on glibc, but I'm not sure if gettext guarantees this. It
does make other guarantees about the printf implementation above those
from C, but this involves replacing the printf function if the native one
doesn't provide it. So, even assuming that gettext's printf allows this
like glibc's does, gettext may not replace the printf function if the
native C printf provides positional arguments but does not allow skipping
them.
Finally, intltool-update does not seem to put the c-format marker back,
which actually surprised me. So we'll see how this goes long-term.
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Wed, 26 Jan 2011 18:48:19 +0000 |
parents | 9f6b8e5998ec |
children |
line wrap: on
line source
# 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> 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]') print "/* Generated by %s. Do not edit! */" % sys.argv[0] print "const char *dbus_signals = " for match in registerregex.finditer(sys.stdin.read()): 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 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 print "\" </signal>\\n\"" print ";"