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
|
#!/usr/bin/env python
import warnings
warnings.filterwarnings("ignore", "apt API not stable yet", FutureWarning)
import apt, re, sys
apt_cache = apt.Cache()
# most spoken languages of the world, prioritized
priority_langs = [ 'en', 'es', 'xh', 'pt', 'de', 'fr', 'bn', 'hi', 'ar', 'ru',
'zh-hans', 'ja']
# dependencies of scim* packages which are language specific (not already on
# ubuntu-desktop)
scim_extra_depends = {
# Japanese
'scim-anthy': set(['anthy', 'libanthy0']),
# Chinese
'scim-chewing': set(['libchewing3', 'libchewing3-data']),
'scim-pinyin': set(),
'scim-tables-zh': set(['scim-modules-table']),
# Korean
'scim-hangul': set(),
# various languages
'scim-tables-additional': set(['scim-modules-table']),
}
extra_pkgs_counted = {'gnome': set(), 'kde': set(), '(gnome|kde)': set()}
def language_size(lang, mode):
'''Return the cumulative size of all language packs related to the given
language code.'''
sum = 0
name_re = re.compile('^language-pack-(?:%s-)?%s(?:-|$)' % (mode, lang))
for p in apt_cache.keys():
if name_re.match(p):
sum += apt_cache[p].candidate.size
if sum == 0:
raise Exception('Invalid language: %s' % lang)
# add required scim packages from language-support
if apt_cache.has_key('language-support-' + lang):
for d in apt_cache['language-support-' + lang].candidate.dependencies:
dep = d.or_dependencies[0].name
if dep.startswith('scim') and dep not in extra_pkgs_counted[mode]:
sum += apt_cache[dep].candidate.size
extra_pkgs_counted[mode].add(dep)
for extra_dep in scim_extra_depends[dep] - extra_pkgs_counted[mode]:
sum += apt_cache[extra_dep].candidate.size
extra_pkgs_counted[mode].add(extra_dep)
return sum
def all_languages():
'''Return list of all available languages.'''
langs = []
for p in apt_cache.keys():
if p.startswith('language-pack-'):
comps = p.split('-')
if len(comps) == 3 and comps[2] != 'zh':
langs.append(comps[2])
if len(comps) == 4 and comps[2] == 'zh' and comps[3] != 'base':
langs.append('%s-%s' % (comps[2], comps[3]))
return langs
def main():
# prioritize languages
langs = all_languages()
langs.sort()
priority_langs.reverse()
for pl in priority_langs:
if pl in langs:
langs.remove(pl)
langs.insert(0, pl)
gnomesum = 0
kdesum = 0
gnomekdesum = 0
for l in langs:
gsize = language_size(l, 'gnome')
ksize = language_size(l, 'kde')
gksize = language_size(l, '(gnome|kde)')
gnomesum += gsize
kdesum += ksize
gnomekdesum += gksize
if len(sys.argv) > 1 and sys.argv[1] == 'MB':
print "%-5s G: %8.2f K: %8.2f G+K: %8.2f GSum: %8.2f KSum: %8.2f G+KSum: %8.2f" % \
(l, gsize/1048576., ksize/1048576., gksize/1048576.,
gnomesum/1048576., kdesum/1048576., gnomekdesum/1048576.)
else:
print "%-5s G: %10i K: %10i G+K: %10i GSum: %10i KSum: %10i G+KSum: %10i" % \
(l, gsize, ksize, gksize, gnomesum, kdesum, gnomekdesum)
if __name__ == '__main__':
main()
|