Blame generate_emoji_placeholders.py

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