diff --git a/add_aliases.py b/add_aliases.py index 55722e3fa..92fa8ea32 100755 --- a/add_aliases.py +++ b/add_aliases.py @@ -14,6 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +from __future__ import print_function import argparse import glob import os @@ -31,7 +32,7 @@ DATA_ROOT = path.dirname(path.abspath(__file__)) def str_to_seq(seq_str): res = [int(s, 16) for s in seq_str.split('_')] if 0xfe0f in res: - print '0xfe0f in file name: %s' % seq_str + print('0xfe0f in file name: %s' % seq_str) res = [x for x in res if x != 0xfe0f] return tuple(res) @@ -66,7 +67,7 @@ def read_emoji_aliases(filename): als_seq = tuple([int(x, 16) for x in als.split('_')]) trg_seq = tuple([int(x, 16) for x in trg.split('_')]) except: - print 'cannot process alias %s -> %s' % (als, trg) + print('cannot process alias %s -> %s' % (als, trg)) continue result[als_seq] = trg_seq return result @@ -82,7 +83,7 @@ def add_aliases( be done. Dstdir will be created if necessary, even if dry_run is true.""" if not path.isdir(srcdir): - print >> sys.stderr, '%s is not a directory' % srcdir + print('%s is not a directory' % srcdir, file=sys.stderr) return if not dstdir: @@ -104,8 +105,8 @@ def add_aliases( alias_exists = False for als, trg in sorted(aliases.items()): if trg not in seq_to_file: - print >> sys.stderr, 'target %s for %s does not exist' % ( - seq_to_str(trg), seq_to_str(als)) + print('target %s for %s does not exist' % ( + seq_to_str(trg), seq_to_str(als)), file=sys.stderr) continue alias_name = '%s%s.%s' % (prefix, seq_to_str(als), ext) alias_path = path.join(dstdir, alias_name) @@ -113,7 +114,7 @@ def add_aliases( if replace: aliases_to_replace.append(alias_name) else: - print >> sys.stderr, 'alias %s exists' % seq_to_str(als) + print('alias %s exists' % seq_to_str(als), file=sys.stderr) alias_exists = True continue target_file = seq_to_file[trg] @@ -123,15 +124,15 @@ def add_aliases( if not dry_run: for k in sorted(aliases_to_replace): os.remove(path.join(dstdir, k)) - print 'replacing %d files' % len(aliases_to_replace) + print('replacing %d files' % len(aliases_to_replace)) elif alias_exists: - print >> sys.stderr, 'aborting, aliases exist.' + print('aborting, aliases exist.', file=sys.stderr) return for k, v in sorted(aliases_to_create.items()): if dry_run: msg = 'replace ' if k in aliases_to_replace else '' - print '%s%s -> %s' % (msg, k, v) + print('%s%s -> %s' % (msg, k, v)) else: try: if copy: @@ -143,10 +144,10 @@ def add_aliases( else: raise Exception('can\'t create cross-directory symlinks yet') except Exception as e: - print >> sys.stderr, 'failed to create %s -> %s' % (k, v) + print('failed to create %s -> %s' % (k, v), file=sys.stderr) raise Exception('oops, ' + str(e)) - print 'created %d %s' % ( - len(aliases_to_create), 'copies' if copy else 'symlinks') + print('created %d %s' % ( + len(aliases_to_create), 'copies' if copy else 'symlinks')) def main(): diff --git a/add_svg_glyphs.py b/add_svg_glyphs.py index ee917b52d..0f7a6b3bf 100755 --- a/add_svg_glyphs.py +++ b/add_svg_glyphs.py @@ -16,6 +16,7 @@ # Google Author(s): Doug Felt """Tool to update GSUB, hmtx, cmap, glyf tables with svg image glyphs.""" +from __future__ import print_function import argparse import glob diff --git a/check_emoji_sequences.py b/check_emoji_sequences.py index d2147e5f6..083e0d5a8 100755 --- a/check_emoji_sequences.py +++ b/check_emoji_sequences.py @@ -15,6 +15,7 @@ # limitations under the License. """Compare emoji image file namings against unicode property data.""" +from __future__ import print_function import argparse import collections @@ -95,9 +96,9 @@ def _check_valid_emoji(sorted_seq_to_filepath): not_emoji[cp].append(fp) if len(not_emoji): - print >> sys.stderr, '%d non-emoji found:' % len(not_emoji) + print('%d non-emoji found:' % len(not_emoji), file=sys.stderr) for cp in sorted(not_emoji): - print >> sys.stderr, '%04x (in %s)' % (cp, ', '.join(not_emoji[cp])) + print('%04x (in %s)' % (cp, ', '.join(not_emoji[cp])), file=sys.stderr) def _check_zwj(sorted_seq_to_filepath): @@ -109,21 +110,21 @@ def _check_zwj(sorted_seq_to_filepath): if ZWJ not in seq: continue if seq[0] == 0x200d: - print >> sys.stderr, 'zwj at head of sequence in %s' % fp + print('zwj at head of sequence in %s' % fp, file=sys.stderr) if len(seq) == 1: continue if seq[-1] == 0x200d: - print >> sys.stderr, 'zwj at end of sequence in %s' % fp + print('zwj at end of sequence in %s' % fp, file=sys.stderr) for i, cp in enumerate(seq): if cp == ZWJ: if i > 0: pcp = seq[i-1] if pcp != EMOJI_PRESENTATION_VS and not unicode_data.is_emoji(pcp): - print >> sys.stderr, 'non-emoji %04x preceeds ZWJ in %s' % (pcp, fp) + print('non-emoji %04x preceeds ZWJ in %s' % (pcp, fp), file=sys.stderr) if i < len(seq) - 1: fcp = seq[i+1] if not unicode_data.is_emoji(fcp): - print >> sys.stderr, 'non-emoji %04x follows ZWJ in %s' % (fcp, fp) + print('non-emoji %04x follows ZWJ in %s' % (fcp, fp), file=sys.stderr) def _check_flags(sorted_seq_to_filepath): @@ -136,11 +137,11 @@ def _check_flags(sorted_seq_to_filepath): if have_reg == None: have_reg = is_reg elif have_reg != is_reg: - print >> sys.stderr, 'mix of regional and non-regional in %s' % fp + print('mix of regional and non-regional in %s' % fp, file=sys.stderr) if have_reg and len(seq) > 2: # We provide dummy glyphs for regional indicators, so there are sequences # with single regional indicator symbols. - print >> sys.stderr, 'regional indicator sequence length != 2 in %s' % fp + print('regional indicator sequence length != 2 in %s' % fp, file=sys.stderr) def _check_skintone(sorted_seq_to_filepath): @@ -153,13 +154,13 @@ def _check_skintone(sorted_seq_to_filepath): if _is_skintone_modifier(cp): if i == 0: if len(seq) > 1: - print >> sys.stderr, 'skin color selector first in sequence %s' % fp + print('skin color selector first in sequence %s' % fp, file=sys.stderr) # standalone are ok continue pcp = seq[i-1] if not unicode_data.is_emoji_modifier_base(pcp): - print >> sys.stderr, ( - 'emoji skintone modifier applied to non-base at %d: %s' % (i, fp)) + print(( + 'emoji skintone modifier applied to non-base at %d: %s' % (i, fp)), file=sys.stderr) elif unicode_data.is_emoji_modifier_base(cp): if i < len(seq) - 1 and _is_skintone_modifier(seq[i+1]): base_to_modifiers[cp].add(seq[i+1]) @@ -167,9 +168,9 @@ def _check_skintone(sorted_seq_to_filepath): base_to_modifiers[cp] = set() for cp, modifiers in sorted(base_to_modifiers.iteritems()): if len(modifiers) != 5: - print >> sys.stderr, 'emoji base %04x has %d modifiers defined (%s) in %s' % ( + print('emoji base %04x has %d modifiers defined (%s) in %s' % ( cp, len(modifiers), - ', '.join('%04x' % cp for cp in sorted(modifiers)), fp) + ', '.join('%04x' % cp for cp in sorted(modifiers)), fp), file=sys.stderr) def _check_zwj_sequences(seq_to_filepath): @@ -189,7 +190,7 @@ def _check_zwj_sequences(seq_to_filepath): for seq, fp in zwj_seq_to_filepath.iteritems(): if seq not in zwj_sequence_to_name: if seq not in zwj_sequence_without_vs_to_name_canonical: - print >> sys.stderr, 'zwj sequence not defined: %s' % fp + print('zwj sequence not defined: %s' % fp, file=sys.stderr) else: _, can = zwj_sequence_without_vs_to_name_canonical[seq] # print >> sys.stderr, 'canonical sequence %s contains vs: %s' % ( @@ -211,7 +212,7 @@ def read_emoji_aliases(): try: trg_seq = tuple([int(x, 16) for x in trg.split('_')]) except: - print 'cannot process alias %s -> %s' % (als, trg) + print('cannot process alias %s -> %s' % (als, trg)) continue result[als_seq] = trg_seq return result @@ -229,11 +230,11 @@ def _check_coverage(seq_to_filepath): aliases = read_emoji_aliases() for k, v in sorted(aliases.items()): if v not in seq_to_filepath and v not in non_vs_to_canonical: - print 'alias %s missing target %s' % (_seq_string(k), _seq_string(v)) + print('alias %s missing target %s' % (_seq_string(k), _seq_string(v))) continue if k in seq_to_filepath or k in non_vs_to_canonical: - print 'alias %s already exists as %s (%s)' % ( - _seq_string(k), _seq_string(v), seq_name(v)) + print('alias %s already exists as %s (%s)' % ( + _seq_string(k), _seq_string(v), seq_name(v))) continue filename = seq_to_filepath.get(v) or seq_to_filepath[non_vs_to_canonical[v]] seq_to_filepath[k] = 'alias:' + filename @@ -242,13 +243,13 @@ def _check_coverage(seq_to_filepath): emoji = sorted(unicode_data.get_emoji(age=age)) for cp in emoji: if tuple([cp]) not in seq_to_filepath: - print 'missing single %04x (%s)' % (cp, unicode_data.name(cp, '')) + print('missing single %04x (%s)' % (cp, unicode_data.name(cp, ''))) # special characters # all but combining enclosing keycap are currently marked as emoji for cp in [ord('*'), ord('#'), ord(u'\u20e3')] + range(0x30, 0x3a): if cp not in emoji and tuple([cp]) not in seq_to_filepath: - print 'missing special %04x (%s)' % (cp, unicode_data.name(cp)) + print('missing special %04x (%s)' % (cp, unicode_data.name(cp))) # combining sequences comb_seq_to_name = sorted( @@ -258,22 +259,22 @@ def _check_coverage(seq_to_filepath): # strip vs and try again non_vs_seq = strip_vs(seq) if non_vs_seq not in seq_to_filepath: - print 'missing combining sequence %s (%s)' % (_seq_string(seq), name) + print('missing combining sequence %s (%s)' % (_seq_string(seq), name)) # flag sequences flag_seq_to_name = sorted( unicode_data.get_emoji_flag_sequences(age=age).iteritems()) for seq, name in flag_seq_to_name: if seq not in seq_to_filepath: - print 'missing flag sequence %s (%s)' % (_seq_string(seq), name) + print('missing flag sequence %s (%s)' % (_seq_string(seq), name)) # skin tone modifier sequences mod_seq_to_name = sorted( unicode_data.get_emoji_modifier_sequences(age=age).iteritems()) for seq, name in mod_seq_to_name: if seq not in seq_to_filepath: - print 'missing modifier sequence %s (%s)' % ( - _seq_string(seq), name) + print('missing modifier sequence %s (%s)' % ( + _seq_string(seq), name)) # zwj sequences # some of ours include the emoji presentation variation selector and some @@ -294,14 +295,14 @@ def _check_coverage(seq_to_filepath): else: test_seq = seq if test_seq not in zwj_seq_without_vs: - print 'missing (canonical) zwj sequence %s (%s)' % ( - _seq_string(seq), name) + print('missing (canonical) zwj sequence %s (%s)' % ( + _seq_string(seq), name)) # check for 'unknown flag' # this is either emoji_ufe82b or 'unknown_flag', we filter out things that # don't start with our prefix so 'unknown_flag' would be excluded by default. if tuple([0xfe82b]) not in seq_to_filepath: - print 'missing unknown flag PUA fe82b' + print('missing unknown flag PUA fe82b') def check_sequence_to_filepath(seq_to_filepath): @@ -322,7 +323,7 @@ def create_sequence_to_filepath(name_to_dirpath, prefix, suffix): result = {} for name, dirname in name_to_dirpath.iteritems(): if not name.startswith(prefix): - print 'expected prefix "%s" for "%s"' % (prefix, name) + print('expected prefix "%s" for "%s"' % (prefix, name)) continue segments = name[len(prefix): -len(suffix)].split('_') @@ -330,12 +331,12 @@ def create_sequence_to_filepath(name_to_dirpath, prefix, suffix): seq = [] for s in segments: if not segment_re.match(s): - print 'bad codepoint name "%s" in %s/%s' % (s, dirname, name) + print('bad codepoint name "%s" in %s/%s' % (s, dirname, name)) segfail = True continue n = int(s, 16) if n > 0x10ffff: - print 'codepoint "%s" out of range in %s/%s' % (s, dirname, name) + print('codepoint "%s" out of range in %s/%s' % (s, dirname, name)) segfail = True continue seq.append(n) @@ -356,8 +357,8 @@ def collect_name_to_dirpath(directory, prefix, suffix): if not f.endswith(suffix): continue if f in result: - print >> sys.stderr, 'duplicate file "%s" in %s and %s ' % ( - f, dirname, result[f]) + print('duplicate file "%s" in %s and %s ' % ( + f, dirname, result[f]), file=sys.stderr) continue result[f] = dirname return result @@ -375,15 +376,15 @@ def collect_name_to_dirpath_with_override(dirs, prefix, suffix): def run_check(dirs, prefix, suffix): - print 'Checking files with prefix "%s" and suffix "%s" in:\n %s' % ( - prefix, suffix, '\n '.join(dirs)) + print('Checking files with prefix "%s" and suffix "%s" in:\n %s' % ( + prefix, suffix, '\n '.join(dirs))) name_to_dirpath = collect_name_to_dirpath_with_override( dirs, prefix=prefix, suffix=suffix) - print 'checking %d names' % len(name_to_dirpath) + print('checking %d names' % len(name_to_dirpath)) seq_to_filepath = create_sequence_to_filepath(name_to_dirpath, prefix, suffix) - print 'checking %d sequences' % len(seq_to_filepath) + print('checking %d sequences' % len(seq_to_filepath)) check_sequence_to_filepath(seq_to_filepath) - print 'done.' + print('done.') def main(): diff --git a/flag_glyph_name.py b/flag_glyph_name.py index da9690075..50c266b8c 100755 --- a/flag_glyph_name.py +++ b/flag_glyph_name.py @@ -15,6 +15,7 @@ # limitations under the License. """Generate a glyph name for flag emojis.""" +from __future__ import print_function __author__ = 'roozbeh@google.com (Roozbeh Pournader)' @@ -48,8 +49,8 @@ def flag_code_to_glyph_name(flag_code): def main(): - print ' '.join([ - flag_code_to_glyph_name(flag_code) for flag_code in sys.argv[1:]]) + print(' '.join([ + flag_code_to_glyph_name(flag_code) for flag_code in sys.argv[1:]])) if __name__ == '__main__': main() diff --git a/flag_info.py b/flag_info.py index ab48d223d..233243f7d 100755 --- a/flag_info.py +++ b/flag_info.py @@ -17,6 +17,7 @@ """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.""" +from __future__ import print_function import argparse import re @@ -44,7 +45,7 @@ def _flag_names_from_file_names(src): for f in glob.glob(path.join(src, '*.png')): m = flag_re.match(path.basename(f)) if not m: - print 'no match' + print('no match') continue flags.add(m.group(1)) return flags @@ -52,14 +53,14 @@ def _flag_names_from_file_names(src): def _dump_flag_info(names): prev = None - print '%d flags' % len(names) + print('%d flags' % len(names)) for n in sorted(names): if n[0] != prev: if prev: - print + print() prev = n[0] - print n, - print + print(n, end=' ') + print() def main(): @@ -76,7 +77,7 @@ def main(): names = _flag_names_from_file_names(args.srcdir) else: names = _flag_names_from_emoji_file_names(args.srcdir) - print args.srcdir + print(args.srcdir) _dump_flag_info(names) diff --git a/generate_emoji_html.py b/generate_emoji_html.py index a971fc6ac..8e0d56ca7 100755 --- a/generate_emoji_html.py +++ b/generate_emoji_html.py @@ -19,6 +19,7 @@ This takes a list of directories containing emoji image files, and builds an html page presenting the images along with their composition (for sequences) and unicode names (for individual emoji).""" +from __future__ import print_function import argparse import codecs @@ -109,11 +110,11 @@ def _get_desc(key_tuple, aliases, dir_infos, basepaths): if cp_key in aliases: fp = get_key_filepath(aliases[cp_key]) else: - print 'no alias for %s' % unicode_data.seq_to_string(cp_key) + print('no alias for %s' % unicode_data.seq_to_string(cp_key)) if not fp: - print 'no part for %s in %s' % ( + print('no part for %s in %s' % ( unicode_data.seq_to_string(cp_key), - unicode_data.seq_to_string(key_tuple)) + unicode_data.seq_to_string(key_tuple))) return fp def _get_part(cp): @@ -153,7 +154,7 @@ def _get_name(key_tuple, annotations): elif key_tuple == (0xfe82b,): seq_name = '(unknown flag PUA codepoint)' else: - print 'no name for %s' % unicode_data.seq_to_string(key_tuple) + print('no name for %s' % unicode_data.seq_to_string(key_tuple)) seq_name = '(oops)' return CELL_PREFIX + seq_name @@ -308,8 +309,8 @@ def _get_image_data(image_dir, ext, prefix): continue result[cps] = filename if fails: - print >> sys.stderr, 'get_image_data failed (%s, %s, %s):\n %s' % ( - image_dir, ext, prefix, '\n '.join(fails)) + print('get_image_data failed (%s, %s, %s):\n %s' % ( + image_dir, ext, prefix, '\n '.join(fails)), file=sys.stderr) raise ValueError('get image data failed') return result @@ -356,9 +357,9 @@ def _add_aliases(keys, aliases): v_str = unicode_data.seq_to_string(v) if k in keys: msg = '' if v in keys else ' but it\'s not present' - print 'have alias image %s, should use %s%s' % (k_str, v_str, msg) + print('have alias image %s, should use %s%s' % (k_str, v_str, msg)) elif v not in keys: - print 'can\'t use alias %s, no image matching %s' % (k_str, v_str) + print('can\'t use alias %s, no image matching %s' % (k_str, v_str)) to_add = {k for k, v in aliases.iteritems() if k not in keys and v in keys} return keys | to_add @@ -449,9 +450,9 @@ def _instantiate_template(template, arg_dict): keyset = set(arg_dict.keys()) extra_args = keyset - ids if extra_args: - print >> sys.stderr, ( + print(( 'the following %d args are unused:\n%s' % - (len(extra_args), ', '.join(sorted(extra_args)))) + (len(extra_args), ', '.join(sorted(extra_args)))), file=sys.stderr) return string.Template(template).substitute(arg_dict) @@ -605,7 +606,7 @@ def main(): file_parts = path.splitext(args.outfile) if file_parts[1] != '.html': args.outfile = file_parts[0] + '.html' - print 'added .html extension to filename:\n%s' % args.outfile + print('added .html extension to filename:\n%s' % args.outfile) if args.annotate: annotations = _parse_annotation_file(args.annotate) diff --git a/generate_emoji_name_data.py b/generate_emoji_name_data.py index e90e3e597..8933a20c9 100755 --- a/generate_emoji_name_data.py +++ b/generate_emoji_name_data.py @@ -16,6 +16,7 @@ # limitations under the License. """Generate name data for emoji resources. Currently in json format.""" +from __future__ import print_function import argparse import collections @@ -277,24 +278,24 @@ def generate_names( verbose=False): srcdir = tool_utils.resolve_path(src_dir) if not path.isdir(srcdir): - print >> sys.stderr, '%s is not a directory' % src_dir + print('%s is not a directory' % src_dir, file=sys.stderr) return if omit_groups: unknown_groups = set(omit_groups) - set(unicode_data.get_emoji_groups()) if unknown_groups: - print >> sys.stderr, 'did not recognize %d group%s: %s' % ( + print('did not recognize %d group%s: %s' % ( len(unknown_groups), '' if len(unknown_groups) == 1 else 's', - ', '.join('"%s"' % g for g in omit_groups if g in unknown_groups)) - print >> sys.stderr, 'valid groups are:\n %s' % ( - '\n '.join(g for g in unicode_data.get_emoji_groups())) + ', '.join('"%s"' % g for g in omit_groups if g in unknown_groups)), file=sys.stderr) + print('valid groups are:\n %s' % ( + '\n '.join(g for g in unicode_data.get_emoji_groups())), file=sys.stderr) return - print 'omitting %d group%s: %s' % ( + print('omitting %d group%s: %s' % ( len(omit_groups), '' if len(omit_groups) == 1 else 's', - ', '.join('"%s"' % g for g in omit_groups)) + ', '.join('"%s"' % g for g in omit_groups))) else: # might be None - print 'keeping all groups' + print('keeping all groups') omit_groups = [] # make sure the destination exists @@ -302,9 +303,9 @@ def generate_names( tool_utils.resolve_path(dst_dir)) # _get_image_data returns canonical cp sequences - print 'src dir:', srcdir + print('src dir:', srcdir) seq_to_file = generate_emoji_html._get_image_data(srcdir, 'png', 'emoji_u') - print 'seq to file has %d sequences' % len(seq_to_file) + print('seq to file has %d sequences' % len(seq_to_file)) # Aliases add non-gendered versions using gendered images for the most part. # But when we display the images, we don't distinguish genders in the @@ -328,9 +329,9 @@ def generate_names( if unicode_data.is_regional_indicator_seq(seq): replace_seq = canonical_aliases[seq] if seq in seq_to_file: - print 'warning, alias %s has file %s' % ( + print('warning, alias %s has file %s' % ( unicode_data.regional_indicator_seq_to_string(seq), - seq_to_file[seq]) + seq_to_file[seq])) continue replace_file = seq_to_file.get(replace_seq) if replace_file: @@ -352,11 +353,11 @@ def generate_names( skipcount += 1 if verbose: if group != last_skipped_group: - print 'group %s' % group + print('group %s' % group) last_skipped_group = group - print ' %s (%s)' % ( + print(' %s (%s)' % ( unicode_data.seq_to_string(seq), - ', '.join(unicode_data.name(cp, 'x') for cp in seq)) + ', '.join(unicode_data.name(cp, 'x') for cp in seq))) if skip_limit >= 0 and skipcount > skip_limit: raise Exception('skipped too many items') else: @@ -368,7 +369,7 @@ def generate_names( indent = 2 if pretty_print else None separators = None if pretty_print else (',', ':') json.dump(data, f, indent=indent, separators=separators) - print 'wrote %s' % outfile + print('wrote %s' % outfile) def main(): diff --git a/generate_emoji_placeholders.py b/generate_emoji_placeholders.py index 48b508231..d429fa578 100644 --- a/generate_emoji_placeholders.py +++ b/generate_emoji_placeholders.py @@ -1,3 +1,4 @@ +from __future__ import print_function import os from os import path import subprocess @@ -5,7 +6,7 @@ import subprocess OUTPUT_DIR = '/tmp/placeholder_emoji' def generate_image(name, text): - print name, text.replace('\n', '_') + print(name, text.replace('\n', '_')) subprocess.check_call( ['convert', '-size', '100x100', 'label:%s' % text, '%s/%s' % (OUTPUT_DIR, name)]) @@ -75,13 +76,13 @@ with open('sequences.txt', 'r') as f: 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 + 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 + print('missing %s' % seq) if text: if len(text) > 3: diff --git a/generate_test_html.py b/generate_test_html.py index ed119ad90..21ab1c640 100755 --- a/generate_test_html.py +++ b/generate_test_html.py @@ -15,6 +15,7 @@ # # Google Author(s): Doug Felt +from __future__ import print_function import argparse import os import os.path @@ -120,9 +121,9 @@ View using Firefox 26 and later. text_parts.append(text) if verbosity and glyph and not found_initial_glyph: - print "Did not find glyph '%s', using initial glyph '%s'" % (glyph, initial_glyph_str) + print("Did not find glyph '%s', using initial glyph '%s'" % (glyph, initial_glyph_str)) elif verbosity > 1 and not glyph: - print "Using initial glyph '%s'" % initial_glyph_str + print("Using initial glyph '%s'" % initial_glyph_str) lines = [header % font_name] lines.append(body_head % {'font':font_name, 'glyph':initial_glyph_str, @@ -133,28 +134,28 @@ View using Firefox 26 and later. with open(html_name, 'w') as fp: fp.write(output) if verbosity: - print 'Wrote ' + html_name + print('Wrote ' + html_name) def do_generate_fonts(template_file, font_basename, pairs, reuse=0, verbosity=1): out_woff = font_basename + '.woff' if reuse > 1 and os.path.isfile(out_woff) and os.access(out_woff, os.R_OK): if verbosity: - print 'Reusing ' + out_woff + print('Reusing ' + out_woff) return out_ttx = font_basename + '.ttx' if reuse == 0: add_svg_glyphs.add_image_glyphs(template_file, out_ttx, pairs, verbosity=verbosity) elif verbosity: - print 'Reusing ' + out_ttx + print('Reusing ' + out_ttx) quiet=verbosity < 2 font = ttx.TTFont(flavor='woff', quiet=quiet) font.importXML(out_ttx, quiet=quiet) font.save(out_woff) if verbosity: - print 'Wrote ' + out_woff + print('Wrote ' + out_woff) def main(argv): @@ -193,7 +194,7 @@ def main(argv): if not out_basename: out_basename = args.template_file.split('.')[0] # exclude e.g. '.tmpl.ttx' if args.v: - print "Output basename is %s." % out_basename + print("Output basename is %s." % out_basename) do_generate_fonts(args.template_file, out_basename, pairs, reuse=args.reuse_font, verbosity=args.v) do_generate_test_html(out_basename, pairs, glyph=args.glyph, verbosity=args.v) diff --git a/materialize_emoji_images.py b/materialize_emoji_images.py index 53cb9afb7..d8a8b0e86 100755 --- a/materialize_emoji_images.py +++ b/materialize_emoji_images.py @@ -16,6 +16,7 @@ """Create a copy of the emoji images that instantiates aliases, etc. as symlinks.""" +from __future__ import print_function import argparse import glob @@ -68,10 +69,10 @@ def _alias_people(code_strings, dst): 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) + 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 + print('people image %s not found' % src, file=os.stderr) def _alias_flags(code_strings, dst): @@ -80,27 +81,27 @@ def _alias_flags(code_strings, dst): 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) + 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) + 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 >> os.stderr, 'unknown flag missing' + 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 >> os.stderr, 'omitted flag %s has image %s' % (ali, ali_str) + 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) + print('creating symlink %s (%s) -> unknown_flag (%s)' % ( + ali_str, ali, dst_name)) os.symlink(dst_path, path.join(dst, ali_name)) diff --git a/strip_vs_from_filenames.py b/strip_vs_from_filenames.py index 3882c1c4d..f27cb3c2f 100755 --- a/strip_vs_from_filenames.py +++ b/strip_vs_from_filenames.py @@ -14,6 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +from __future__ import print_function import argparse import glob import os @@ -51,17 +52,17 @@ def strip_vs_from_filenames(imagedir, prefix, ext, dry_run=False): if seq and EMOJI_VS in seq: newname = '%s%s.%s' % (prefix, seq_to_str(strip_vs(seq)), ext) if newname in names: - print >> sys.stderr, '%s non-vs name %s already exists.' % ( - name, newname) + print('%s non-vs name %s already exists.' % ( + name, newname), file=sys.stderr) return renames[name] = newname for k, v in renames.iteritems(): if dry_run: - print '%s -> %s' % (k, v) + print('%s -> %s' % (k, v)) else: os.rename(path.join(imagedir, k), path.join(imagedir, v)) - print 'renamed %d files in %s' % (len(renames), imagedir) + print('renamed %d files in %s' % (len(renames), imagedir)) def main(): diff --git a/third_party/color_emoji/emoji_builder.py b/third_party/color_emoji/emoji_builder.py index c847fdbf8..67434a304 100644 --- a/third_party/color_emoji/emoji_builder.py +++ b/third_party/color_emoji/emoji_builder.py @@ -18,6 +18,7 @@ # +from __future__ import print_function import sys, struct, StringIO from png import PNG import os @@ -374,7 +375,7 @@ def main (argv): argv.remove (key) if len (argv) < 4: - print >>sys.stderr, """ + print(""" Usage: emoji_builder.py [-V] [-O] [-U] [-A] font.ttf out-font.ttf strike-prefix... @@ -403,7 +404,7 @@ By default they are dropped. If -C is given, unused chunks (color profile, etc) are NOT dropped from the PNG images when embedding. By default they are dropped. -""" +""", file=sys.stderr) sys.exit (1) font_file = argv[1] @@ -424,16 +425,16 @@ By default they are dropped. pass - print + print() font = ttx.TTFont (font_file) - print "Loaded font '%s'." % font_file + print("Loaded font '%s'." % font_file) font_metrics = FontMetrics (font['head'].unitsPerEm, font['hhea'].ascent, -font['hhea'].descent) - print "Font metrics: upem=%d ascent=%d descent=%d." % \ - (font_metrics.upem, font_metrics.ascent, font_metrics.descent) + print("Font metrics: upem=%d ascent=%d descent=%d." % \ + (font_metrics.upem, font_metrics.ascent, font_metrics.descent)) glyph_metrics = font['hmtx'].metrics unicode_cmap = font['cmap'].getcmap (3, 10) if not unicode_cmap: @@ -453,11 +454,11 @@ By default they are dropped. return cp >= 0xfe00 and cp <= 0xfe0f for img_prefix in img_prefixes: - print + print() img_files = {} glb = "%s*.png" % img_prefix - print "Looking for images matching '%s'." % glb + print("Looking for images matching '%s'." % glb) for img_file in glob.glob (glb): codes = img_file[len (img_prefix):-4] if "_" in codes: @@ -467,13 +468,13 @@ By default they are dropped. else: cp = int(codes, 16) if is_vs(cp): - print "ignoring unexpected vs input %04x" % cp + print("ignoring unexpected vs input %04x" % cp) continue uchars = unichr(cp) img_files[uchars] = img_file if not img_files: raise Exception ("No image files found in '%s'." % glb) - print "Found images for %d characters in '%s'." % (len (img_files), glb) + print("Found images for %d characters in '%s'." % (len (img_files), glb)) glyph_imgs = {} advance = width = height = 0 @@ -482,7 +483,7 @@ By default they are dropped. try: glyph_name = unicode_cmap.cmap[ord (uchars)] except: - print "no cmap entry for %x" % ord(uchars) + print("no cmap entry for %x" % ord(uchars)) raise ValueError("%x" % ord(uchars)) else: glyph_name = get_glyph_name_from_gsub (uchars, font, unicode_cmap.cmap) @@ -501,11 +502,11 @@ By default they are dropped. glyphs = sorted (glyph_imgs.keys ()) if not glyphs: raise Exception ("No common characters found between font and '%s'." % glb) - print "Embedding images for %d glyphs for this strike." % len (glyphs) + print("Embedding images for %d glyphs for this strike." % len (glyphs)) advance, width, height = (div (x, len (glyphs)) for x in (advance, width, height)) strike_metrics = StrikeMetrics (font_metrics, advance, width, height) - print "Strike ppem set to %d." % (strike_metrics.y_ppem) + print("Strike ppem set to %d." % (strike_metrics.y_ppem)) ebdt.start_strike (strike_metrics) ebdt.write_glyphs (glyphs, glyph_imgs, image_format) @@ -513,21 +514,21 @@ By default they are dropped. eblc.write_strike (strike_metrics, glyph_maps) - print + print() ebdt = ebdt.data () add_font_table (font, 'CBDT', ebdt) - print "CBDT table synthesized: %d bytes." % len (ebdt) + print("CBDT table synthesized: %d bytes." % len (ebdt)) eblc.end_strikes () eblc = eblc.data () add_font_table (font, 'CBLC', eblc) - print "CBLC table synthesized: %d bytes." % len (eblc) + print("CBLC table synthesized: %d bytes." % len (eblc)) - print + print() if 'keep_outlines' not in options: drop_outline_tables (font) - print "Dropped outline ('glyf', 'CFF ') and related tables." + print("Dropped outline ('glyf', 'CFF ') and related tables.") # hack removal of cmap pua entry for unknown flag glyph. If we try to # remove it earlier, getGlyphID dies. Need to restructure all of this @@ -535,7 +536,7 @@ By default they are dropped. font_data.delete_from_cmap(font, [0xfe82b]) font.save (out_file) - print "Output font '%s' generated." % out_file + print("Output font '%s' generated." % out_file) if __name__ == '__main__':