41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
|
#!/usr/bin/python3
|
||
|
#
|
||
|
# This script turns localedata/SUPPORTED (whose path is passed as the
|
||
|
# first argument) into a normalized list of LANGUAGE "_" REGION pairs.
|
||
|
# (If there is no REGION defined, only LANGUAGE is used.) The list
|
||
|
# is written to standard output, with one element per line.
|
||
|
|
||
|
import sys
|
||
|
|
||
|
supported, = sys.argv[1:]
|
||
|
|
||
|
# Pairs seen so far. Used to suppress duplicates.
|
||
|
seen = set()
|
||
|
with open(supported) as inp:
|
||
|
for line in inp:
|
||
|
if line.startswith("#") or line == "SUPPORTED-LOCALES=\\\n":
|
||
|
# Comment or prefix.
|
||
|
continue
|
||
|
if not line.endswith(" \\\n"):
|
||
|
raise IOError("line without continuation: " + repr(line))
|
||
|
try:
|
||
|
slash = line.index("/")
|
||
|
except ValueError:
|
||
|
raise IOError("line without slash: " + repr(line))
|
||
|
spec = line[:slash]
|
||
|
for separator in ".@":
|
||
|
try:
|
||
|
# Strip charset, variant specifiers.
|
||
|
spec = spec[:spec.index(separator)]
|
||
|
except ValueError:
|
||
|
pass
|
||
|
seen.add(spec)
|
||
|
|
||
|
# The C locale does not correspond to a language.
|
||
|
seen.remove("C")
|
||
|
|
||
|
# The glibc source file is not sorted.
|
||
|
for spec in sorted(seen):
|
||
|
print(spec)
|
||
|
print() # The Lua generator produces a trailing newline.
|