1*4882a593Smuzhiyun#! /usr/bin/env python3 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun 6*4882a593Smuzhiyunimport sys 7*4882a593Smuzhiyuntry: 8*4882a593Smuzhiyun import xml.etree.cElementTree as etree 9*4882a593Smuzhiyunexcept: 10*4882a593Smuzhiyun import xml.etree.ElementTree as etree 11*4882a593Smuzhiyun 12*4882a593Smuzhiyundef child (elem, name): 13*4882a593Smuzhiyun for e in elem.getchildren(): 14*4882a593Smuzhiyun if e.tag == name: 15*4882a593Smuzhiyun return e 16*4882a593Smuzhiyun return None 17*4882a593Smuzhiyun 18*4882a593Smuzhiyundef children (elem, name=None): 19*4882a593Smuzhiyun l = elem.getchildren() 20*4882a593Smuzhiyun if name: 21*4882a593Smuzhiyun l = [e for e in l if e.tag == name] 22*4882a593Smuzhiyun return l 23*4882a593Smuzhiyun 24*4882a593Smuzhiyunif len(sys.argv) < 2 or sys.argv[1] in ('-h', '--help'): 25*4882a593Smuzhiyun print('oe-trim-schemas: error: the following arguments are required: schema\n' 26*4882a593Smuzhiyun 'Usage: oe-trim-schemas schema\n\n' 27*4882a593Smuzhiyun 'OpenEmbedded trim schemas - remove unneeded schema locale translations\n' 28*4882a593Smuzhiyun ' from gconf schema files\n\n' 29*4882a593Smuzhiyun 'arguments:\n' 30*4882a593Smuzhiyun ' schema gconf schema file to trim\n') 31*4882a593Smuzhiyun sys.exit(2) 32*4882a593Smuzhiyun 33*4882a593Smuzhiyunxml = etree.parse(sys.argv[1]) 34*4882a593Smuzhiyun 35*4882a593Smuzhiyunfor schema in child(xml.getroot(), "schemalist").getchildren(): 36*4882a593Smuzhiyun e = child(schema, "short") 37*4882a593Smuzhiyun if e is not None: 38*4882a593Smuzhiyun schema.remove(e) 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun e = child(schema, "long") 41*4882a593Smuzhiyun if e is not None: 42*4882a593Smuzhiyun schema.remove(e) 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun for locale in children(schema, "locale"): 45*4882a593Smuzhiyun # One locale must exist so leave C locale... 46*4882a593Smuzhiyun a = locale.attrib.get("name") 47*4882a593Smuzhiyun if a == 'C': 48*4882a593Smuzhiyun continue 49*4882a593Smuzhiyun e = child(locale, "default") 50*4882a593Smuzhiyun if e is None: 51*4882a593Smuzhiyun schema.remove(locale) 52*4882a593Smuzhiyun else: 53*4882a593Smuzhiyun e = child(locale, "short") 54*4882a593Smuzhiyun if e is not None: 55*4882a593Smuzhiyun locale.remove(e) 56*4882a593Smuzhiyun e = child(locale, "long") 57*4882a593Smuzhiyun if e is not None: 58*4882a593Smuzhiyun locale.remove(e) 59*4882a593Smuzhiyun 60*4882a593Smuzhiyunxml.write(sys.stdout, "UTF-8") 61*4882a593Smuzhiyun 62