| #!/usr/bin/env python3 |
| # |
| # Copyright 2016 Google Inc. All rights reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| """Create a copy of the emoji images that instantiates aliases, etc. as |
| symlinks.""" |
| from __future__ import print_function |
| |
| import argparse |
| import glob |
| import os |
| from os import path |
| import re |
| import shutil |
| |
| from nototools import tool_utils |
| |
| # copied from third_party/color_emoji/add_glyphs.py |
| |
| EXTRA_SEQUENCES = { |
| 'u1F46A': '1F468_200D_1F469_200D_1F466', # MWB |
| 'u1F491': '1F469_200D_2764_FE0F_200D_1F468', # WHM |
| 'u1F48F': '1F469_200D_2764_FE0F_200D_1F48B_200D_1F468', # WHKM |
| } |
| |
| # Flag aliases - from: to |
| FLAG_ALIASES = { |
| 'BV': 'NO', |
| 'CP': 'FR', |
| 'HM': 'AU', |
| 'SJ': 'NO', |
| 'UM': 'US', |
| } |
| |
| OMITTED_FLAGS = set( |
| 'BL BQ DG EA EH FK GF GP GS MF MQ NC PM RE TF WF XK YT'.split()) |
| |
| def _flag_str(ris_pair): |
| return '_'.join('%04x' % (ord(cp) - ord('A') + 0x1f1e6) |
| for cp in ris_pair) |
| |
| def _copy_files(src, dst): |
| """Copies files named 'emoji_u*.png' from dst to src, and return a set of |
| the names with 'emoji_u' and the extension stripped.""" |
| code_strings = set() |
| tool_utils.check_dir_exists(src) |
| dst = tool_utils.ensure_dir_exists(dst, clean=True) |
| for f in glob.glob(path.join(src, 'emoji_u*.png')): |
| shutil.copy(f, dst) |
| code_strings.add(path.splitext(path.basename(f))[0][7:]) |
| return code_strings |
| |
| |
| def _alias_people(code_strings, dst): |
| """Create aliases for people in dst, based on code_strings.""" |
| for src, ali in sorted(EXTRA_SEQUENCES.items()): |
| if src[1:].lower() in code_strings: |
| src_name = 'emoji_%s.png' % src.lower() |
| ali_name = 'emoji_u%s.png' % ali.lower() |
| print('creating symlink %s -> %s' % (ali_name, src_name)) |
| os.symlink(path.join(dst, src_name), path.join(dst, ali_name)) |
| else: |
| print('people image %s not found' % src, file=os.stderr) |
| |
| |
| def _alias_flags(code_strings, dst): |
| for ali, src in sorted(FLAG_ALIASES.items()): |
| src_str = _flag_str(src) |
| if src_str in code_strings: |
| src_name = 'emoji_u%s.png' % src_str |
| ali_name = 'emoji_u%s.png' % _flag_str(ali) |
| print('creating symlink %s (%s) -> %s (%s)' % (ali_name, ali, src_name, src)) |
| os.symlink(path.join(dst, src_name), path.join(dst, ali_name)) |
| else: |
| print('flag image %s (%s) not found' % (src_name, src), file=os.stderr) |
| |
| |
| def _alias_omitted_flags(code_strings, dst): |
| UNKNOWN_FLAG = 'fe82b' |
| if UNKNOWN_FLAG not in code_strings: |
| print('unknown flag missing', file=os.stderr) |
| return |
| dst_name = 'emoji_u%s.png' % UNKNOWN_FLAG |
| dst_path = path.join(dst, dst_name) |
| for ali in sorted(OMITTED_FLAGS): |
| ali_str = _flag_str(ali) |
| if ali_str in code_strings: |
| print('omitted flag %s has image %s' % (ali, ali_str), file=os.stderr) |
| continue |
| ali_name = 'emoji_u%s.png' % ali_str |
| print('creating symlink %s (%s) -> unknown_flag (%s)' % ( |
| ali_str, ali, dst_name)) |
| os.symlink(dst_path, path.join(dst, ali_name)) |
| |
| |
| def materialize_images(src, dst): |
| code_strings = _copy_files(src, dst) |
| _alias_people(code_strings, dst) |
| _alias_flags(code_strings, dst) |
| _alias_omitted_flags(code_strings, dst) |
| |
| def main(): |
| parser = argparse.ArgumentParser() |
| parser.add_argument( |
| '-s', '--srcdir', help='path to input sources', metavar='dir', |
| default = 'build/compressed_pngs') |
| parser.add_argument( |
| '-d', '--dstdir', help='destination for output images', metavar='dir') |
| args = parser.parse_args() |
| materialize_images(args.srcdir, args.dstdir) |
| |
| |
| if __name__ == '__main__': |
| main() |