diff --git a/flag_info.py b/flag_info.py new file mode 100755 index 000000000..ab48d223d --- /dev/null +++ b/flag_info.py @@ -0,0 +1,84 @@ +#!/usr/bin/python +# +# 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. + +"""Quick tool to display count/ids of flag images in a directory named +either using ASCII upper case pairs or the emoji_u+codepoint_sequence +names.""" + +import argparse +import re +import glob +import os +from os import path + +def _flag_names_from_emoji_file_names(src): + def _flag_char(char_str): + return unichr(ord('A') + int(char_str, 16) - 0x1f1e6) + flag_re = re.compile('emoji_u(1f1[0-9a-f]{2})_(1f1[0-9a-f]{2}).png') + flags = set() + for f in glob.glob(path.join(src, 'emoji_u*.png')): + m = flag_re.match(path.basename(f)) + if not m: + continue + flag_short_name = _flag_char(m.group(1)) + _flag_char(m.group(2)) + flags.add(flag_short_name) + return flags + + +def _flag_names_from_file_names(src): + flag_re = re.compile('([A-Z]{2}).png') + flags = set() + for f in glob.glob(path.join(src, '*.png')): + m = flag_re.match(path.basename(f)) + if not m: + print 'no match' + continue + flags.add(m.group(1)) + return flags + + +def _dump_flag_info(names): + prev = None + print '%d flags' % len(names) + for n in sorted(names): + if n[0] != prev: + if prev: + print + prev = n[0] + print n, + print + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + '-s', '--srcdir', help='location of files', metavar='dir', + required=True) + parser.add_argument( + '-n', '--name_type', help='type of names', metavar='type', + choices=['ascii', 'codepoint'], required=True) + args = parser.parse_args() + + if args.name_type == 'ascii': + names = _flag_names_from_file_names(args.srcdir) + else: + names = _flag_names_from_emoji_file_names(args.srcdir) + print args.srcdir + _dump_flag_info(names) + + +if __name__ == '__main__': + main() diff --git a/materialize_emoji_images.py b/materialize_emoji_images.py new file mode 100755 index 000000000..c5d2858fe --- /dev/null +++ b/materialize_emoji_images.py @@ -0,0 +1,125 @@ +#!/usr/bin/python +# +# 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.""" + +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 >> os.stderr, 'people image %s not found' % src + + +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 >> os.stderr, 'flag image %s (%s) not found' % (src_name, src) + + +def _alias_omitted_flags(code_strings, dst): + UNKNOWN_FLAG = 'fe82b' + if UNKNOWN_FLAG not in code_strings: + print >> os.stderr, 'unknown flag missing' + 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 >> os.stderr, 'omitted flag %s has image %s' % (ali, ali_str) + 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()