#!/usr/bin/env python3 import re import sys from xml.dom import minidom file = sys.argv[1] content = minidom.parse(file) # sort content by value of tag name newContent = minidom.Document() resources = newContent.createElement('resources') resources.setAttribute('xmlns:xliff', 'urn:oasis:names:tc:xliff:document:1.2') newContent.appendChild(resources) resource = dict() ### Strings for elem in content.getElementsByTagName('string'): name = elem.attributes['name'].value # Continue if value is empty child = elem.firstChild if child is None: # Print an error to stderr print('Warning: Empty content for string: ' + name + " in file " + file, file=sys.stderr) continue value = child.nodeValue # Continue if string is empty if value == '""': # Print an error to stderr print('Warning: Empty string value for string: ' + name + " in file " + file, file=sys.stderr) continue resource[name] = elem.cloneNode(True) ### Plurals for elem in content.getElementsByTagName('plurals'): plural = newContent.createElement('plurals') name = elem.attributes['name'].value plural.setAttribute('name', name) for it in elem.childNodes: if it.nodeType != it.ELEMENT_NODE: continue # Continue if value is empty child = it.firstChild if child is None: # Print an error to stderr print('Warning: Empty content for plurals: ' + name + " in file " + file, file=sys.stderr) continue value = child.nodeValue # Continue if string is empty if value == '""': # Print an error to stderr print('Warning: Empty item value for plurals: ' + name + " in file " + file, file=sys.stderr) continue plural.appendChild(it.cloneNode(True)) if plural.hasChildNodes(): resource[name] = plural for key in sorted(resource.keys()): resources.appendChild(resource[key]) result = newContent.toprettyxml(indent=" ") \ .replace('', '') \ .replace('"', '"') \ .replace('...', '…') ## Replace space by unbreakable space before punctuation result = re.sub(r" ([\?\!\:…])", r" \1", result) # Special treatment for French wording if 'values-fr' in file: ## Replace ' with ’ result = re.sub(r"([cdjlmnsu])\\\'", r"\1’", result, flags=re.IGNORECASE) with open(file, "w") as text_file: text_file.write(result)