File: enum-convertor.py

package info (click to toggle)
gnome-packagekit 3.4.2-2
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 21,088 kB
  • sloc: ansic: 20,866; sh: 11,484; xml: 9,629; python: 1,179; makefile: 866
file content (112 lines) | stat: -rw-r--r-- 4,497 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/env python

from re import compile,DOTALL,MULTILINE

icons = compile("static const PkEnumMatch enum_([^\]]+)_icon_name\[\] = {(.*?)};", DOTALL|MULTILINE)
animations = compile("static const PkEnumMatch enum_([^\]]+)_animation\[\] = {(.*?)};", DOTALL|MULTILINE)
values = compile("PK_([A-Z_]+)_ENUM_([A-Z0-9_]+),\s+\"([^\"]+)\"")

present = compile("gpk_([a-z]+?)_enum_to_localised_present \(Pk[A-Za-z]+? [a-z]+?\)(.*?)}", DOTALL|MULTILINE)
past = compile("gpk_([a-z]+?)_enum_to_localised_past \(Pk[A-Za-z]+? [a-z]+?\)(.*?)}", DOTALL|MULTILINE)
descs = compile("gpk_([a-z]+?)_enum_to_localised_message \(Pk[A-Za-z]+? [a-z]+?\)(.*?)}", DOTALL|MULTILINE)
string_values = compile("case PK_([A-Z_]+?)_ENUM_([A-Z0-9_]+?):\n\s+text = (_\(\".+?\"\));\n", MULTILINE|DOTALL)
strings = compile("gpk_([a-z]+?)_enum_to_localised_text \(Pk[A-Za-z]+? [a-z]+?\)(.*?)}", DOTALL|MULTILINE)
string_values = compile("case PK_([A-Z_]+?)_ENUM_([A-Z0-9_]+?):\n\s+text = (_\(\".+?\"\));\n", MULTILINE|DOTALL)
string_sub_values = compile("case PK_([A-Z_]+?)_ENUM_([A-Z0-9_]+?):\n\s+text = g_strdup_printf\([\\t\\s]*?(_\(\".+?\"\)), ([A-Z_]+?)\);\n", MULTILINE|DOTALL)

inp = open("../src/gpk-enum.c").read()

header = '''"""
Provides human readable strings, icon names and animations for internal 
enumerations

This file was autogenerated from src/gpk-enum.c by msg-converter.py
"""

from packagekit.enums import *
import gettext
from gettext import gettext as _

gettext.textdomain("gnome-packagekit")

GPK_BUGZILLA_URL = "https://bugs.freedesktop.org/"
'''
print(header)

# Extract icon names
for (name, data) in icons.findall(inp):
    print("ICONS_%s = {" % name.upper())
    for match in values.findall(data):
        print("    %s_%s:'%s'," % match)
    print("    }\n")
    print("def get_%s_icon_name_from_enum(enum):" % name)
    print("   if ICONS_%s.has_key(enum):" % name.upper())
    print("       return ICONS_%s[enum]" % name.upper())
    print("   else:")
    print("       return None\n")

# Extract animations
for (name, data) in animations.findall(inp):
    print("ANIMATIONS_%s = {" % name.upper())
    for match in values.findall(data):
        print("    %s_%s:'%s'," % match)
    print("    }\n")
    print("def get_%s_animation_name_from_enum(enum):" % name)
    print("   if ANIMATIONS_%s.has_key(enum):" % name.upper())
    print("       return ANIMATIONS_%s[enum]" % name.upper())
    print("   else:")
    print("       return None\n")

# Extract past messages
for (name, data) in past.findall(inp):
    print("PAST_%s = {" % name.upper())
    for match in string_sub_values.findall(data):
        print("    %s_%s:%s %% %s," % match)
    for match in string_values.findall(data):
        print("    %s_%s:%s," % match)
    print("    }\n")
    print("def get_%s_localised_past_from_enum(enum):" % name)
    print("   if PAST_%s.has_key(enum):" % name.upper())
    print("       return PAST_%s[enum]" % name.upper())
    print("   else:")
    print("       return None\n")


# Extract present messages
for (name, data) in present.findall(inp):
    print("PRESENT_%s = {" % name.upper())
    for match in string_sub_values.findall(data):
        print("    %s_%s:%s %% %s," % match)
    for match in string_values.findall(data):
        print("    %s_%s:%s," % match)
    print("    }\n")
    print("def get_%s_localised_present_from_enum(enum):" % name)
    print("   if PRESENT_%s.has_key(enum):" % name.upper())
    print("       return PRESENT_%s[enum]" % name.upper())
    print("   else:")
    print("       return None\n")

# Extract messages
for (name, data) in descs.findall(inp):
    print("DESCS_%s = {" % name.upper())
    for match in string_sub_values.findall(data):
        print("    %s_%s:%s %% %s," % match)
    for match in string_values.findall(data):
        print("    %s_%s:%s," % match)
    print("    }\n")
    print("def get_%s_description_from_enum(enum):" % name)
    print("   if DESCS_%s.has_key(enum):" % name.upper())
    print("       return DESCS_%s[enum]" % name.upper())
    print("   else:")
    print("       return None\n")

for (name, data) in strings.findall(inp):
    print("STRINGS_%s = {" % name.upper())
    for match in string_values.findall(data):
        print("    %s_%s:%s," % match)
    print("    }\n")
    print("def get_%s_string_from_enum(enum):" % name)
    print("   if STRINGS_%s.has_key(enum):" % name.upper())
    print("       return STRINGS_%s[enum]" % name.upper())
    print("   else:")
    print("       return None\n")