serenity/Meta/check-emoji.py

68 lines
2.7 KiB
Python
Executable file

#!/usr/bin/env python3
import os
import re
import sys
RE_INVALID_CHAR = re.compile('[^A-FU0-9+_]')
RE_MISSING_UNDERSCORE = re.compile('[^_]U')
RE_MISSING_LETTER_U = re.compile('_(?!U)')
RE_MISSING_SIGN_PLUS = re.compile('U(?!\\+)')
def any_problems_here():
found_invalid_filenames = False
for filename in os.listdir():
if not filename.endswith('.png'):
print(f'Non-png file {filename} does not belong in the emoji directory')
found_invalid_filenames = True
break
filename = filename[:-len('.png')]
if RE_INVALID_CHAR.search(filename):
print(f'Filename {filename}.png contains invalid characters in its filename. Only uppercase letters'
' A-F and U, numbers, +, and _ should be used.')
found_invalid_filenames = True
break
if 'U+0' in filename:
print(f'Filename {filename}.png contains codepoint(s) with leading zeros. Leading zeros should be'
' removed from codepoint(s).')
found_invalid_filenames = True
break
if '+U' in filename:
print(f'Filename {filename}.png is incorrectly named. "_" should be used as a separator between'
' codepoints, not "+".')
found_invalid_filenames = True
break
if RE_MISSING_UNDERSCORE.search(filename):
print(f'Filename {filename}.png is missing an underscore "_" between codepoints.')
found_invalid_filenames = True
break
if RE_MISSING_LETTER_U.search(filename):
print(f'Filename {filename}.png is either missing a "U" to indicate the start of a codepoint,'
' or has a spurious underscore ("_").')
found_invalid_filenames = True
break
if RE_MISSING_SIGN_PLUS.search(filename):
print(f'Filename {filename}.png is either missing a "+" after a "U", or has a spurious "U".')
found_invalid_filenames = True
break
if 'U+FE0F' in filename:
print(f'Filename {filename}.png should not include any emoji presentation selectors. U+FE0F codepoints'
' should be removed from the filename.')
found_invalid_filenames = True
break
code_points = [int(code_point[len('U+'):], 16) for code_point in filename.split('_')]
if any(code_point > 0x10ffff for code_point in code_points):
print(f'Filename {filename}.png contains a code point exceeding U+10FFFF')
found_invalid_filenames = True
break
return found_invalid_filenames
if __name__ == '__main__':
os.chdir(os.path.dirname(__file__) + "/../Base/res/emoji/")
if any_problems_here():
sys.exit(1)