import urllib.request
import os
URL = 'https://www.unicode.org/Public/vertical/revision-17/VerticalOrientation-17.txt'
FILE_NAME = 'VerticalOrientation-17.txt'
if not os.path.exists(FILE_NAME):
urllib.request.urlretrieve(URL, FILE_NAME)
ranges = []
with open(FILE_NAME) as f:
for line in f:
line = line.strip()
if not line:
continue
if line.startswith('#'):
continue
range, type = line.split(' ; ')
if type == 'R':
continue
elif type == 'U':
rust_type = 'Orientation::Upright'
elif type == 'Tu':
rust_type = 'Orientation::TransformedOrUpright'
elif type == 'Tr':
rust_type = 'Orientation::TransformedOrRotated'
if '..' in range:
start, end = range.split('..')
ranges.append([start, end, rust_type])
else:
ranges.append([range, None, rust_type])
merged_ranges = []
idx = 0
while idx < len(ranges):
range = ranges[idx]
merged_ranges.append(range)
idx += 1
if range[1] != None:
continue
last_char = int(range[0], 16) + 1
while idx < len(ranges):
next_range = ranges[idx]
if next_range[1] != None:
break
if last_char == int(next_range[0], 16) and range[2] == next_range[2]:
merged_ranges[-1][1] = next_range[0]
last_char += 1
idx += 1
else:
break
for range in merged_ranges:
if range[1]:
print('0x{}...0x{} => {},'.format(range[0], range[1], range[2]))
else:
print('0x{} => {},'.format(range[0], range[2]))