from __future__ import print_function import os from os import path import subprocess OUTPUT_DIR = '/tmp/placeholder_emoji' def generate_image(name, text): print(name, text.replace('\n', '_')) subprocess.check_call( ['convert', '-size', '100x100', 'label:%s' % text, '%s/%s' % (OUTPUT_DIR, name)]) def is_color_patch(cp): return cp >= 0x1f3fb and cp <= 0x1f3ff def has_color_patch(values): for v in values: if is_color_patch(v): return True return False def regional_to_ascii(cp): return unichr(ord('A') + cp - 0x1f1e6) def is_flag_sequence(values): if len(values) != 2: return False for v in values: v -= 0x1f1e6 if v < 0 or v > 25: return False return True def is_keycap_sequence(values): return len(values) == 2 and values[1] == 0x20e3 def get_keycap_text(values): return '-%c-' % unichr(values[0]) # convert gags on '[' char_map = { 0x1f468: 'M', 0x1f469: 'W', 0x1f466: 'B', 0x1f467: 'G', 0x2764: 'H', # heavy black heart, no var sel 0x1f48b: 'K', # kiss mark 0x200D: '-', # zwj placeholder 0xfe0f: '-', # variation selector placeholder 0x1f441: 'I', # Eye 0x1f5e8: 'W', # 'witness' (left speech bubble) } def get_combining_text(values): chars = [] for v in values: char = char_map.get(v, None) if not char: return None if char != '-': chars.append(char) return ''.join(chars) if not path.isdir(OUTPUT_DIR): os.makedirs(OUTPUT_DIR) with open('sequences.txt', 'r') as f: for seq in f: seq = seq.strip() text = None values = [int(code, 16) for code in seq.split('_')] if len(values) == 1: val = values[0] text = '%04X' % val # ensure upper case format elif is_flag_sequence(values): text = ''.join(regional_to_ascii(cp) for cp in values) elif has_color_patch(values): print('skipping color patch sequence %s' % seq) elif is_keycap_sequence(values): text = get_keycap_text(values) else: text = get_combining_text(values) if not text: print('missing %s' % seq) if text: if len(text) > 3: if len(text) == 4: hi = text[:2] lo = text[2:] else: hi = text[:-3] lo = text[-3:] text = '%s\n%s' % (hi, lo) generate_image('emoji_u%s.png' % seq, text)