140 lines
3.3 KiB
Python
Executable file
140 lines
3.3 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
import sys
|
|
import os
|
|
import re
|
|
import io
|
|
|
|
|
|
def fail(message):
|
|
print(message)
|
|
sys.exit(1)
|
|
|
|
|
|
# For simplicity and compactness, we pre-define the
|
|
# emoji code planes to ensure that all of the currently-used
|
|
# emoji ranges within them are combined.
|
|
big_ranges = [
|
|
(
|
|
0x1F600,
|
|
0x1F64F,
|
|
),
|
|
(
|
|
0x1F300,
|
|
0x1F5FF,
|
|
),
|
|
(
|
|
0x1F680,
|
|
0x1F6FF,
|
|
),
|
|
(
|
|
0x2600,
|
|
0x26FF,
|
|
),
|
|
(
|
|
0x2700,
|
|
0x27BF,
|
|
),
|
|
(
|
|
0xFE00,
|
|
0xFE0F,
|
|
),
|
|
(
|
|
0x1F900,
|
|
0x1F9FF,
|
|
),
|
|
(
|
|
65024,
|
|
65039,
|
|
),
|
|
(
|
|
8400,
|
|
8447,
|
|
),
|
|
]
|
|
|
|
if __name__ == "__main__":
|
|
src_filename = "emoji-data.txt"
|
|
src_dir_path = os.path.dirname(__file__)
|
|
src_file_path = os.path.join(src_dir_path, src_filename)
|
|
print("src_file_path", src_file_path)
|
|
if not os.path.exists(src_file_path):
|
|
fail("Could not find input file")
|
|
|
|
with io.open(src_file_path, "r", encoding="utf-8") as f:
|
|
text = f.read()
|
|
|
|
lines = text.split("\n")
|
|
raw_ranges = []
|
|
for line in lines:
|
|
if "#" in line:
|
|
line = line[: line.index("#")].strip()
|
|
if ";" not in line:
|
|
continue
|
|
print("line:", line)
|
|
range_text = line[: line.index(";")]
|
|
print("\t:", range_text)
|
|
if ".." in range_text:
|
|
range_start_hex_string, range_end_hex_string = range_text.split("..")
|
|
else:
|
|
range_start_hex_string = range_end_hex_string = range_text.strip()
|
|
range_start = int(range_start_hex_string.strip(), 16)
|
|
range_end = int(range_end_hex_string.strip(), 16)
|
|
print("\t", range_start, range_end)
|
|
|
|
raw_ranges.append(
|
|
(
|
|
range_start,
|
|
range_end,
|
|
)
|
|
)
|
|
|
|
raw_ranges += big_ranges
|
|
|
|
raw_ranges.sort(key=lambda a: a[0])
|
|
|
|
new_ranges = []
|
|
for range_start, range_end in raw_ranges:
|
|
if len(new_ranges) > 0:
|
|
last_range = new_ranges[-1]
|
|
# print 'last_range', last_range
|
|
last_range_start, last_range_end = last_range
|
|
if range_start >= last_range_start and range_start <= last_range_end + 1:
|
|
# if last_range_end + 1 == range_start:
|
|
new_ranges = new_ranges[:-1]
|
|
print(
|
|
"merging",
|
|
last_range_start,
|
|
last_range_end,
|
|
"and",
|
|
range_start,
|
|
range_end,
|
|
)
|
|
new_ranges.append(
|
|
(
|
|
last_range_start,
|
|
max(range_end, last_range_end),
|
|
)
|
|
)
|
|
continue
|
|
|
|
new_ranges.append(
|
|
(
|
|
range_start,
|
|
range_end,
|
|
)
|
|
)
|
|
|
|
print()
|
|
for range_start, range_end in new_ranges:
|
|
# print '0x%X...0x%X, // %d Emotions' % (range_start, range_end, (1 + range_end - range_start), )
|
|
print(
|
|
"EmojiRange(rangeStart:0x%X, rangeEnd:0x%X),"
|
|
% (
|
|
range_start,
|
|
range_end,
|
|
)
|
|
)
|
|
print("new_ranges:", len(new_ranges))
|
|
print()
|
|
print("Copy and paste the code above into DisplayableText.swift")
|
|
print()
|