From 6e373d13608b864078c99a69d92ca2f6d551c8ee Mon Sep 17 00:00:00 2001 From: Seigo Nonaka Date: Mon, 14 Jun 2021 17:36:10 -0700 Subject: Extract flag font from NotoColorEmoji Bug: 188926991 Test: Manually done Test: atest NotoColorEmojiFontUpdatabilityTest Test: atest UpdatableSystemFontTest Change-Id: Id3dd5abb02a373b5d7181fa42dbf386fc704f69a --- emoji-compat/Android.bp | 5 +++ emoji-compat/createfont.py | 52 +++++++++++++++++++++++++++++ emoji-compat/font/NotoColorEmojiCompat.ttf | Bin 10254400 -> 9302928 bytes emoji-compat/font/NotoColorEmojiFlags.ttf | Bin 0 -> 849060 bytes fonts.mk | 1 + 5 files changed, 58 insertions(+) create mode 100644 emoji-compat/font/NotoColorEmojiFlags.ttf diff --git a/emoji-compat/Android.bp b/emoji-compat/Android.bp index c6b71ee..cf33d75 100644 --- a/emoji-compat/Android.bp +++ b/emoji-compat/Android.bp @@ -54,6 +54,11 @@ prebuilt_font { }, } +prebuilt_font { + name: "NotoColorEmojiFlags.ttf", + src: "font/NotoColorEmojiFlags.ttf", +} + // To use in other build rules. genrule { name: "NotoColorEmojiTtf", diff --git a/emoji-compat/createfont.py b/emoji-compat/createfont.py index 39204f8..fb8e810 100755 --- a/emoji-compat/createfont.py +++ b/emoji-compat/createfont.py @@ -49,11 +49,14 @@ import hashlib import itertools import json import os +import re import shutil import subprocess import sys import tempfile from fontTools import ttLib +from fontTools.ttLib.tables import otTables +from nototools import font_data ########### UPDATE OR CHECK WHEN A NEW FONT IS BEING GENERATED ########### # Last Android SDK Version @@ -120,6 +123,12 @@ STD_VARIANTS_EMOJI_STYLE = 'EMOJI STYLE' DEFAULT_EMOJI_ID = 0xF0001 EMOJI_STYLE_VS = 0xFE0F +# The reference code point to be used for filling metrics of wartermark glyph +WATERMARK_REF_CODE_POINT = 0x1F600 +# The code point and glyph name used for watermark. +WATERMARK_NEW_CODE_POINT = 0x10FF00 +WATERMARK_NEW_GLYPH_ID = 'u10FF00' + def to_hex_str(value): """Converts given int value to hex without the 0x prefix""" return format(value, 'X') @@ -614,6 +623,46 @@ class EmojiFontCreator(object): for emoji_data in emoji_data_list: csvwriter.writerow(emoji_data.create_txt_row()) + def add_watermark(self, ttf): + cmap = ttf.getBestCmap() + gsub = ttf['GSUB'].table + + # Obtain Version string + m = re.search('^Version (\d*)\.(\d*)', font_data.font_version(ttf)) + if not m: + raise ValueError('The font does not have proper version string.') + major = m.group(1) + minor = m.group(2) + # Replace the dot with space since NotoColorEmoji does not have glyph for dot. + glyphs = [cmap[ord(x)] for x in '%s %s' % (major, minor)] + + # Update Glyph metrics + ttf.getGlyphOrder().append(WATERMARK_NEW_GLYPH_ID) + refGlyphId = cmap[WATERMARK_REF_CODE_POINT] + ttf['hmtx'].metrics[WATERMARK_NEW_GLYPH_ID] = ttf['hmtx'].metrics[refGlyphId] + ttf['vmtx'].metrics[WATERMARK_NEW_GLYPH_ID] = ttf['vmtx'].metrics[refGlyphId] + + # Add new Glyph to cmap + font_data.add_to_cmap(ttf, { WATERMARK_NEW_CODE_POINT : WATERMARK_NEW_GLYPH_ID }) + + # Add lookup table for the version string. + lookups = gsub.LookupList.Lookup + new_lookup = otTables.Lookup() + new_lookup.LookupType = 2 # Multiple Substitution Subtable. + new_lookup.LookupFlag = 0 + new_subtable = otTables.MultipleSubst() + new_subtable.mapping = { WATERMARK_NEW_GLYPH_ID : tuple(glyphs) } + new_lookup.SubTable = [ new_subtable ] + new_lookup_index = len(lookups) + lookups.append(new_lookup) + + # Add feature + feature = next(x for x in gsub.FeatureList.FeatureRecord if x.FeatureTag == 'ccmp') + if not feature: + raise ValueError("Font doesn't contain ccmp feature.") + + feature.Feature.LookupListIndex.append(new_lookup_index) + def create_font(self): """Creates the EmojiCompat font. :param font_path: path to Android NotoColorEmoji font @@ -671,6 +720,9 @@ class EmojiFontCreator(object): # inject metadata binary into font inject_meta_into_font(ttf, flatbuffer_bin_file) + # add wartermark glyph for manual verification. + self.add_watermark(ttf) + # update CBDT and CBLC versions since older android versions cannot read > 2.0 ttf['CBDT'].version = 2.0 ttf['CBLC'].version = 2.0 diff --git a/emoji-compat/font/NotoColorEmojiCompat.ttf b/emoji-compat/font/NotoColorEmojiCompat.ttf index 2325304..a48438e 100644 Binary files a/emoji-compat/font/NotoColorEmojiCompat.ttf and b/emoji-compat/font/NotoColorEmojiCompat.ttf differ diff --git a/emoji-compat/font/NotoColorEmojiFlags.ttf b/emoji-compat/font/NotoColorEmojiFlags.ttf new file mode 100644 index 0000000..3219460 Binary files /dev/null and b/emoji-compat/font/NotoColorEmojiFlags.ttf differ diff --git a/fonts.mk b/fonts.mk index 3ee7169..67d4e30 100644 --- a/fonts.mk +++ b/fonts.mk @@ -18,6 +18,7 @@ PRODUCT_PACKAGES := \ NotoColorEmoji.ttf \ + NotoColorEmojiFlags.ttf \ NotoNaskhArabic-Bold.ttf \ NotoNaskhArabic-Regular.ttf \ NotoNaskhArabicUI-Bold.ttf \ -- cgit v1.2.3 From 10609ea31f757bd0d11f6204fba323042c71a09c Mon Sep 17 00:00:00 2001 From: Seigo Nonaka Date: Fri, 25 Jun 2021 16:36:54 -0700 Subject: Update NotoColorEmoji to 2.028 Bug: 186055484 Test: Manually done Change-Id: I5a82e9ff3c264e99125612dc34466a6f437ce71d --- emoji-compat/font/NotoColorEmojiCompat.ttf | Bin 9302928 -> 8964704 bytes emoji-compat/font/NotoColorEmojiFlags.ttf | Bin 849060 -> 843492 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/emoji-compat/font/NotoColorEmojiCompat.ttf b/emoji-compat/font/NotoColorEmojiCompat.ttf index a48438e..4a7a981 100644 Binary files a/emoji-compat/font/NotoColorEmojiCompat.ttf and b/emoji-compat/font/NotoColorEmojiCompat.ttf differ diff --git a/emoji-compat/font/NotoColorEmojiFlags.ttf b/emoji-compat/font/NotoColorEmojiFlags.ttf index 3219460..7c1afac 100644 Binary files a/emoji-compat/font/NotoColorEmojiFlags.ttf and b/emoji-compat/font/NotoColorEmojiFlags.ttf differ -- cgit v1.2.3