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."
72 lines
2.4 KiB
Python
Executable File
72 lines
2.4 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 sys
|
|
from xml.dom import minidom
|
|
|
|
file = sys.argv[1]
|
|
|
|
# Dict of forbidden terms, with exceptions for some String name
|
|
# Keys are the terms, values are the exceptions.
|
|
forbiddenTerms = {
|
|
"Element": [
|
|
# Those 2 strings are only used in debug version
|
|
"screen_advanced_settings_element_call_base_url",
|
|
"screen_advanced_settings_element_call_base_url_description",
|
|
# only used for element.io homeserver, so it's fine
|
|
"screen_server_confirmation_message_login_element_dot_io",
|
|
# "Be in your element", will probably be changed on the forks, so we can ignore.
|
|
"screen_onboarding_welcome_title",
|
|
# Contains "Element Call"
|
|
"screen_incoming_call_subtitle_android",
|
|
# Contains "Element X"
|
|
"screen_room_timeline_legacy_call",
|
|
]
|
|
}
|
|
|
|
content = minidom.parse(file)
|
|
|
|
errors = []
|
|
|
|
### Strings
|
|
for elem in content.getElementsByTagName('string'):
|
|
name = elem.attributes['name'].value
|
|
# Continue if value is empty
|
|
child = elem.firstChild
|
|
if child is None:
|
|
# Should not happen
|
|
continue
|
|
value = child.nodeValue
|
|
# If value contains a forbidden term, add the error to errors
|
|
for (term, exceptions) in forbiddenTerms.items():
|
|
if term in value and name not in exceptions:
|
|
errors.append('Forbidden term "' + term + '" in string: "' + name + '": ' + value)
|
|
|
|
### Plurals
|
|
for elem in content.getElementsByTagName('plurals'):
|
|
name = elem.attributes['name'].value
|
|
for it in elem.childNodes:
|
|
if it.nodeType != it.ELEMENT_NODE:
|
|
continue
|
|
# Continue if value is empty
|
|
child = it.firstChild
|
|
if child is None:
|
|
# Should not happen
|
|
continue
|
|
value = child.nodeValue
|
|
# If value contains a forbidden term, add the error to errors
|
|
for (term, exceptions) in forbiddenTerms.items():
|
|
if term in value and name not in exceptions:
|
|
errors.append('Forbidden term "' + term + '" in plural: "' + name + '": ' + value)
|
|
|
|
# If errors is not empty print the report
|
|
if errors:
|
|
print('Error(s) in file ' + file + ":", file=sys.stderr)
|
|
for error in errors:
|
|
print(" - " + error, file=sys.stderr)
|
|
sys.exit(1)
|