2 replace all actions have been performed: - "SPDX-License-Identifier: AGPL-3.0-only" to "SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial" - "Please see LICENSE in the repository root for full details." to "Please see LICENSE files in the repository root for full details."
83 lines
2.6 KiB
Python
Executable File
83 lines
2.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
||
|
||
# Copyright 2024 New Vector Ltd.
|
||
#
|
||
# SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||
# Please see LICENSE files in the repository root for full details.
|
||
|
||
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('<?xml version="1.0" ?>', '<?xml version="1.0" encoding="utf-8"?>') \
|
||
.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)
|