From d9e320acb53d129e3be5776b57b1a8da057c1107 Mon Sep 17 00:00:00 2001 From: Doug Felt Date: Thu, 5 Nov 2015 11:15:15 -0800 Subject: [PATCH] updates to support tr51 emoji sequences --- Makefile | 2 + build_emoji_set.py | 47 ++++++++++++++++++++---- third_party/color_emoji/emoji_builder.py | 11 ++++-- 3 files changed, 48 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index 74cd544c2..006dd964f 100644 --- a/Makefile +++ b/Makefile @@ -92,6 +92,8 @@ endif %.ttx: %.ttx.tmpl $(ADD_GLYPHS) $(UNI) $(PNG128_FLAGS) python $(ADD_GLYPHS) "$<" "$@" "$(EMOJI_PNG128)" + + %.ttf: %.ttx @rm -f "$@" ttx "$<" diff --git a/build_emoji_set.py b/build_emoji_set.py index 3f0708bfe..dc3d2ff55 100644 --- a/build_emoji_set.py +++ b/build_emoji_set.py @@ -10,11 +10,11 @@ from os import path import re import shutil -DST = "/tmp/placeholder_emoji_plus" +DST = '/tmp/placeholder_emoji_plus' -SRC_PLACEHOLDER = "/tmp/placeholder_emoji" -SRC_NOTO = "/usr/local/google/users/dougfelt/newnoto/noto-emoji/png/128" -SRC_DRAFT = "/usr/local/google/home/dougfelt/Downloads/PNG_latest_working_draft" +SRC_PLACEHOLDER = '/usr/local/google/users/dougfelt/emoji_images/placeholder' +SRC_NOTO = '/usr/local/google/users/dougfelt/newnoto/noto-emoji/png/128' +SRC_DRAFT = '/usr/local/google/users/dougfelt/emoji_images/png_thurs' # First, scan the draft images and select which ones to use. This does # two things: @@ -29,6 +29,10 @@ FIXED_NAMES = {} VAR_PAT = re.compile(r'(.*?)\((\d+)\)\.png') for fname in glob.glob(path.join(SRC_DRAFT, '*.png')): name = path.basename(fname) + if 'alt' in name: + print 'skip %s' % name + continue + m = VAR_PAT.match(name) if m: name = '%s.png' % m.group(1).lower() @@ -47,22 +51,49 @@ for name in UPDATED_NAMES: print 'using updated image %s for %s' % (fname, name) FIXED_NAMES[name] = fname +EXCLUDE_PAT = re.compile(r'emoji_u1f3f[bcdef].png') +remove = [name for name in FIXED_NAMES if EXCLUDE_PAT.match(name)] +for name in remove: + print 'removing %s' % name + del FIXED_NAMES[name] + + # Now, recreate the destination directory and copy the data into it. if path.isdir(DST): shutil.rmtree(DST) os.makedirs(DST) -SKIP_PLACEHOLDERS = frozenset([ +def flag_emoji_name(flag_ascii): + return 'emoji_u%s.png' % '_'.join( + '%04x' % (ord(cp) - ord('A') + 0x1f1e6) for cp in flag_ascii) + +SKIP_FLAGS = [flag_emoji_name(name) for name in [ + 'AC', 'AQ', 'BL', 'BQ', 'BV', 'CP', 'DG', 'EA', 'EH', 'FK', + 'GF', 'GP', 'GS', 'HM', 'IC', 'MF', 'MQ', 'NC', 'PM', 'RE', + 'SH', 'SJ', 'TA', 'TF', 'UM', 'WF', 'XK', 'YT', + ]] + +def emoji_name(val): + return 'emoji_u%04x.png' % val + +SKIP_SWATCHES = [emoji_name(val) for val in range(0x1f3fb, 0x1f3ff + 1)] + +# these are placeholders for emoji that have a single codepoint yet +# also have a decomposition. +# we want to use the image for the single codepoint. +SKIP_SINGLE_CP_EMOJI = [ 'emoji_u1f468_200d_1f469_200d_1f466.png', 'emoji_u1f469_200d_2764_fe0f_200d_1f468.png', 'emoji_u1f469_200d_2764_fe0f_200d_1f48b_200d_1f468.png', -]) +] -for fname in glob.glob(path.join(SRC_PLACEHOLDER, '*.png')): +SKIP_PLACEHOLDERS = frozenset(SKIP_FLAGS + SKIP_SWATCHES + SKIP_SINGLE_CP_EMOJI) + +for fname in sorted(glob.glob(path.join(SRC_PLACEHOLDER, '*.png'))): basename = path.basename(fname) if basename in SKIP_PLACEHOLDERS: - print 'skip %s' % basename + print 'skip placeholder %s' % basename continue shutil.copy(fname, DST) diff --git a/third_party/color_emoji/emoji_builder.py b/third_party/color_emoji/emoji_builder.py index 844102ab5..0092b0751 100644 --- a/third_party/color_emoji/emoji_builder.py +++ b/third_party/color_emoji/emoji_builder.py @@ -109,8 +109,11 @@ class CBDT: line_height = (ascent + descent) * y_ppem / float (upem) line_ascent = ascent * y_ppem / float (upem) y_bearing = int (round (line_ascent - .5 * (line_height - height))) + # fudge y_bearing if calculations are a bit off + if y_bearing == 128: + y_bearing = 127 advance = width - print "small glyph metrics h: %d w: %d a: %d" % (height, width, advance) + print "small glyph metrics h: %d w: %d" % (height, width) # smallGlyphMetrics # Type Name # BYTE height @@ -123,9 +126,9 @@ class CBDT: height, width, x_bearing, y_bearing, advance)) - except: - raise ValueError("h: %d w: %d a: %d x: %d y: 5d" % ( - height, width, advance, x_braring, y_bearing)) + except Exception as e: + raise ValueError("%s, h: %d w: %d x: %d y: %d %d a:" % ( + e, height, width, x_bearing, y_bearing, advance)) def write_format1 (self, png):