diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-11-17 23:45:56 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2021-11-17 23:45:56 +0000 |
commit | 31c5543e83aa734fda0a5e76b98ce8a414d78015 (patch) | |
tree | dc3acfe345e925075344f63289cd00a2d010d34c | |
parent | 486f71253fd8dce3156f36f0007c81b4315405a3 (diff) | |
parent | 4ffaf821454895728b25fc5666040864cf3cc367 (diff) | |
download | noto-fonts-androidx-slidingpanelayout-release.tar.gz |
Merge "Snap for 7924970 from be8a7617da8765fdcb3abe35d9f1578b1cc8d45a to androidx-slidingpanelayout-release" into androidx-slidingpanelayout-releaseandroidx-slidingpanelayout-release
15 files changed, 899 insertions, 375 deletions
diff --git a/emoji-compat/Android.mk b/emoji-compat-flatbuffers/Android.mk index bc47046..76bd918 100644 --- a/emoji-compat/Android.mk +++ b/emoji-compat-flatbuffers/Android.mk @@ -15,7 +15,7 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) -LOCAL_MODULE := noto-emoji-compat-java +LOCAL_MODULE := noto-emoji-compat-flatbuffers-java LOCAL_SRC_FILES := $(call all-java-files-under, src/java) LOCAL_SDK_VERSION := current diff --git a/emoji-compat/build.gradle b/emoji-compat-flatbuffers/build.gradle index 34acb79..20d8dfb 100644 --- a/emoji-compat/build.gradle +++ b/emoji-compat-flatbuffers/build.gradle @@ -14,26 +14,8 @@ * limitations under the License. */ -apply plugin: 'java' -apply plugin: 'org.anarres.jarjar' -apply plugin: 'maven' - -ext { - flatbuffersDir = '../../flatbuffers' -} - -buildscript { - boolean unbundleBuild = (new File("unbundled-build")).exists() - repositories { - maven { url '../../../prebuilts/androidx/external' } - if (unbundleBuild) { - jcenter() - } - } - - dependencies { - classpath 'org.anarres.jarjar:jarjar-gradle:1.0.1' - } +plugins { + id("java") } sourceSets { @@ -48,27 +30,7 @@ compileJava { } dependencies { - compile 'com.google.flatbuffers:flatbuffers-java:1.8.0' -} - -jarjar.repackage('rename') { - destinationName "noto-emoji-compat-java.jar" - from 'com.google.flatbuffers:flatbuffers-java:1.8.0' - from files(sourceSets.main.output.classesDirs) - dependsOn sourceSets.main.output - classRename 'com.google.flatbuffers.**', 'androidx.text.emoji.flatbuffer.@1' -} - -configurations { - parser -} - -artifacts { - parser(rename.destinationPath) { - name 'noto-emoji-compat' - type 'jar' - builtBy rename - } + implementation("com.google.flatbuffers:flatbuffers-java:1.12.0") } // The "javadoc" task is unused so we don't want it to appear in the output of `./gradlew tasks` diff --git a/emoji-compat/data/emoji_metadata.fbs b/emoji-compat-flatbuffers/data/emoji_metadata.fbs index 23d0db9..23d0db9 100644 --- a/emoji-compat/data/emoji_metadata.fbs +++ b/emoji-compat-flatbuffers/data/emoji_metadata.fbs diff --git a/emoji-compat/data/flatbuffer_header.txt b/emoji-compat-flatbuffers/data/flatbuffer_header.txt index d67f3a8..2b40a04 100644 --- a/emoji-compat/data/flatbuffer_header.txt +++ b/emoji-compat-flatbuffers/data/flatbuffer_header.txt @@ -14,16 +14,3 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -package androidx.text.emoji.flatbuffer; - -import com.google.flatbuffers.FlatBufferBuilder; -import com.google.flatbuffers.Table; - -import java.nio.ByteBuffer; -import java.nio.ByteOrder; - -/** - * Automatically generated by the FlatBuffers compiler, do not modify. - */ -@SuppressWarnings("unused")
\ No newline at end of file diff --git a/emoji-compat/jarjar-rules.txt b/emoji-compat-flatbuffers/jarjar-rules.txt index fdc3188..fdc3188 100644 --- a/emoji-compat/jarjar-rules.txt +++ b/emoji-compat-flatbuffers/jarjar-rules.txt diff --git a/emoji-compat/settings.gradle b/emoji-compat-flatbuffers/settings.gradle index 5e6c61e..5e6c61e 100644 --- a/emoji-compat/settings.gradle +++ b/emoji-compat-flatbuffers/settings.gradle diff --git a/emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java b/emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java new file mode 100644 index 0000000..0b2a694 --- /dev/null +++ b/emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java @@ -0,0 +1,89 @@ +// CHECKSTYLE:OFF Generated code +/* + * Copyright (C) 2017 The Android Open Source Project + * + * 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. + */ + +// automatically generated by the FlatBuffers compiler, do not modify + +package androidx.text.emoji.flatbuffer; + +import java.nio.*; +import java.lang.*; +import java.util.*; +import com.google.flatbuffers.*; + +@SuppressWarnings("unused") +public final class MetadataItem extends Table { + public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); } + public static MetadataItem getRootAsMetadataItem(ByteBuffer _bb) { return getRootAsMetadataItem(_bb, new MetadataItem()); } + public static MetadataItem getRootAsMetadataItem(ByteBuffer _bb, MetadataItem obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); } + public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); } + public MetadataItem __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; } + + public int id() { int o = __offset(4); return o != 0 ? bb.getInt(o + bb_pos) : 0; } + public boolean emojiStyle() { int o = __offset(6); return o != 0 ? 0!=bb.get(o + bb_pos) : false; } + public short sdkAdded() { int o = __offset(8); return o != 0 ? bb.getShort(o + bb_pos) : 0; } + public short compatAdded() { int o = __offset(10); return o != 0 ? bb.getShort(o + bb_pos) : 0; } + public short width() { int o = __offset(12); return o != 0 ? bb.getShort(o + bb_pos) : 0; } + public short height() { int o = __offset(14); return o != 0 ? bb.getShort(o + bb_pos) : 0; } + public int codepoints(int j) { int o = __offset(16); return o != 0 ? bb.getInt(__vector(o) + j * 4) : 0; } + public int codepointsLength() { int o = __offset(16); return o != 0 ? __vector_len(o) : 0; } + public IntVector codepointsVector() { return codepointsVector(new IntVector()); } + public IntVector codepointsVector(IntVector obj) { int o = __offset(16); return o != 0 ? obj.__assign(__vector(o), bb) : null; } + public ByteBuffer codepointsAsByteBuffer() { return __vector_as_bytebuffer(16, 4); } + public ByteBuffer codepointsInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 16, 4); } + + public static int createMetadataItem(FlatBufferBuilder builder, + int id, + boolean emojiStyle, + short sdkAdded, + short compatAdded, + short width, + short height, + int codepointsOffset) { + builder.startTable(7); + MetadataItem.addCodepoints(builder, codepointsOffset); + MetadataItem.addId(builder, id); + MetadataItem.addHeight(builder, height); + MetadataItem.addWidth(builder, width); + MetadataItem.addCompatAdded(builder, compatAdded); + MetadataItem.addSdkAdded(builder, sdkAdded); + MetadataItem.addEmojiStyle(builder, emojiStyle); + return MetadataItem.endMetadataItem(builder); + } + + public static void startMetadataItem(FlatBufferBuilder builder) { builder.startTable(7); } + public static void addId(FlatBufferBuilder builder, int id) { builder.addInt(0, id, 0); } + public static void addEmojiStyle(FlatBufferBuilder builder, boolean emojiStyle) { builder.addBoolean(1, emojiStyle, false); } + public static void addSdkAdded(FlatBufferBuilder builder, short sdkAdded) { builder.addShort(2, sdkAdded, 0); } + public static void addCompatAdded(FlatBufferBuilder builder, short compatAdded) { builder.addShort(3, compatAdded, 0); } + public static void addWidth(FlatBufferBuilder builder, short width) { builder.addShort(4, width, 0); } + public static void addHeight(FlatBufferBuilder builder, short height) { builder.addShort(5, height, 0); } + public static void addCodepoints(FlatBufferBuilder builder, int codepointsOffset) { builder.addOffset(6, codepointsOffset, 0); } + public static int createCodepointsVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addInt(data[i]); return builder.endVector(); } + public static void startCodepointsVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); } + public static int endMetadataItem(FlatBufferBuilder builder) { + int o = builder.endTable(); + return o; + } + + public static final class Vector extends BaseVector { + public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; } + + public MetadataItem get(int j) { return get(new MetadataItem(), j); } + public MetadataItem get(MetadataItem obj, int j) { return obj.__assign(__indirect(__element(j), bb), bb); } + } +} + diff --git a/emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataList.java b/emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataList.java new file mode 100644 index 0000000..6330098 --- /dev/null +++ b/emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataList.java @@ -0,0 +1,76 @@ +// CHECKSTYLE:OFF Generated code +/* + * Copyright (C) 2017 The Android Open Source Project + * + * 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. + */ + +// automatically generated by the FlatBuffers compiler, do not modify + +package androidx.text.emoji.flatbuffer; + +import java.nio.*; +import java.lang.*; +import java.util.*; +import com.google.flatbuffers.*; + +@SuppressWarnings("unused") +public final class MetadataList extends Table { + public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); } + public static MetadataList getRootAsMetadataList(ByteBuffer _bb) { return getRootAsMetadataList(_bb, new MetadataList()); } + public static MetadataList getRootAsMetadataList(ByteBuffer _bb, MetadataList obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); } + public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); } + public MetadataList __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; } + + public int version() { int o = __offset(4); return o != 0 ? bb.getInt(o + bb_pos) : 0; } + public androidx.text.emoji.flatbuffer.MetadataItem list(int j) { return list(new androidx.text.emoji.flatbuffer.MetadataItem(), j); } + public androidx.text.emoji.flatbuffer.MetadataItem list(androidx.text.emoji.flatbuffer.MetadataItem obj, int j) { int o = __offset(6); return o != 0 ? obj.__assign(__indirect(__vector(o) + j * 4), bb) : null; } + public int listLength() { int o = __offset(6); return o != 0 ? __vector_len(o) : 0; } + public androidx.text.emoji.flatbuffer.MetadataItem.Vector listVector() { return listVector(new androidx.text.emoji.flatbuffer.MetadataItem.Vector()); } + public androidx.text.emoji.flatbuffer.MetadataItem.Vector listVector(androidx.text.emoji.flatbuffer.MetadataItem.Vector obj) { int o = __offset(6); return o != 0 ? obj.__assign(__vector(o), 4, bb) : null; } + public String sourceSha() { int o = __offset(8); return o != 0 ? __string(o + bb_pos) : null; } + public ByteBuffer sourceShaAsByteBuffer() { return __vector_as_bytebuffer(8, 1); } + public ByteBuffer sourceShaInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 8, 1); } + + public static int createMetadataList(FlatBufferBuilder builder, + int version, + int listOffset, + int sourceShaOffset) { + builder.startTable(3); + MetadataList.addSourceSha(builder, sourceShaOffset); + MetadataList.addList(builder, listOffset); + MetadataList.addVersion(builder, version); + return MetadataList.endMetadataList(builder); + } + + public static void startMetadataList(FlatBufferBuilder builder) { builder.startTable(3); } + public static void addVersion(FlatBufferBuilder builder, int version) { builder.addInt(0, version, 0); } + public static void addList(FlatBufferBuilder builder, int listOffset) { builder.addOffset(1, listOffset, 0); } + public static int createListVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); } + public static void startListVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); } + public static void addSourceSha(FlatBufferBuilder builder, int sourceShaOffset) { builder.addOffset(2, sourceShaOffset, 0); } + public static int endMetadataList(FlatBufferBuilder builder) { + int o = builder.endTable(); + return o; + } + public static void finishMetadataListBuffer(FlatBufferBuilder builder, int offset) { builder.finish(offset); } + public static void finishSizePrefixedMetadataListBuffer(FlatBufferBuilder builder, int offset) { builder.finishSizePrefixed(offset); } + + public static final class Vector extends BaseVector { + public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; } + + public MetadataList get(int j) { return get(new MetadataList(), j); } + public MetadataList get(MetadataList obj, int j) { return obj.__assign(__indirect(__element(j), bb), bb); } + } +} + diff --git a/emoji-compat/createfont.py b/emoji-compat/createfont.py index fb9dc5a..39204f8 100755 --- a/emoji-compat/createfont.py +++ b/emoji-compat/createfont.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # # Copyright (C) 2017 The Android Open Source Project # @@ -43,8 +43,6 @@ After execution the following files are generated if they don't exist otherwise, - src/java/android/support/text/emoji/flatbuffer/* """ -from __future__ import print_function - import contextlib import csv import hashlib @@ -52,24 +50,25 @@ import itertools import json import os import shutil +import subprocess import sys import tempfile from fontTools import ttLib ########### UPDATE OR CHECK WHEN A NEW FONT IS BEING GENERATED ########### # Last Android SDK Version -SDK_VERSION = 29 +SDK_VERSION = 30 # metadata version that will be embedded into font. If there are updates to the font that would # cause data/emoji_metadata.txt to change, this integer number should be incremented. This number # defines in which EmojiCompat metadata version the emoji is added to the font. -METADATA_VERSION = 5 +METADATA_VERSION = 7 ####### main directories where output files are created ####### SCRIPT_DIR = os.path.abspath(os.path.dirname(__file__)) FONT_DIR = os.path.join(SCRIPT_DIR, 'font') DATA_DIR = os.path.join(SCRIPT_DIR, 'data') SUPPORTED_EMOJIS_DIR = os.path.join(SCRIPT_DIR, 'supported-emojis') -JAVA_SRC_DIR = os.path.join(SCRIPT_DIR, 'src', 'java') +JAVA_SRC_DIR = os.path.join('src', 'java') ####### output files ####### # font file FONT_PATH = os.path.join(FONT_DIR, 'NotoColorEmojiCompat.ttf') @@ -91,10 +90,12 @@ ANDROID_EMOJIS_SEQ_FILE = os.path.join('additions', 'emoji-sequences.txt') EMOJI_STYLE_OVERRIDE_FILE = os.path.join('additions', 'emoji-data.txt') # emoji metadata file INPUT_META_FILE = OUTPUT_META_FILE +# default flatbuffer module location (if not specified by caller) +FLATBUFFER_MODULE_DIR = os.path.join(SCRIPT_DIR, '..', 'emoji-compat-flatbuffers') # flatbuffer schema -FLATBUFFER_SCHEMA = os.path.join(DATA_DIR, 'emoji_metadata.fbs') +FLATBUFFER_SCHEMA = os.path.join(FLATBUFFER_MODULE_DIR, 'data', 'emoji_metadata.fbs') # file path for java header, it will be prepended to flatbuffer java files -FLATBUFFER_HEADER = os.path.join(DATA_DIR, "flatbuffer_header.txt") +FLATBUFFER_HEADER = os.path.join(FLATBUFFER_MODULE_DIR, 'data', 'flatbuffer_header.txt') # temporary emoji metadata json output file OUTPUT_JSON_FILE_NAME = 'emoji_metadata.json' # temporary binary file generated by flatbuffer @@ -106,7 +107,7 @@ FLATBUFFER_JAVA_PATH = os.path.join(FLATBUFFER_PACKAGE_PATH) FLATBUFFER_METADATA_LIST_JAVA = "MetadataList.java" FLATBUFFER_METADATA_ITEM_JAVA = "MetadataItem.java" # directory under source where flatbuffer java files will be copied into -FLATBUFFER_JAVA_TARGET = os.path.join(JAVA_SRC_DIR, FLATBUFFER_PACKAGE_PATH) +FLATBUFFER_JAVA_TARGET = os.path.join(FLATBUFFER_MODULE_DIR, JAVA_SRC_DIR, FLATBUFFER_PACKAGE_PATH) # meta tag name used in the font to embed the emoji metadata. This value is also used in # MetadataListReader.java in order to locate the metadata location. EMOJI_META_TAG_NAME = 'Emji' @@ -131,29 +132,28 @@ def codepoint_to_string(codepoints): """Converts a list of codepoints into a string separated with space.""" return ' '.join([to_hex_str(x) for x in codepoints]) -def prepend_header_to_file(file_path): +def prepend_header_to_file(file_path, header_path): """Prepends the header to the file. Used to update flatbuffer java files with header, comments and annotations.""" with open(file_path, "r+") as original_file: - with open(FLATBUFFER_HEADER, "r") as copyright_file: + with open(header_path, "r") as copyright_file: original_content = original_file.read() - start_index = original_content.index("public final class") original_file.seek(0) - original_file.write(copyright_file.read() + "\n" + original_content[start_index:]) + original_file.write(copyright_file.read() + "\n" + original_content) -def update_flatbuffer_java_files(flatbuffer_java_dir): +def update_flatbuffer_java_files(flatbuffer_java_dir, header_dir, target_dir): """Prepends headers to flatbuffer java files and copies to the final destination""" tmp_metadata_list = flatbuffer_java_dir + FLATBUFFER_METADATA_LIST_JAVA tmp_metadata_item = flatbuffer_java_dir + FLATBUFFER_METADATA_ITEM_JAVA - prepend_header_to_file(tmp_metadata_list) - prepend_header_to_file(tmp_metadata_item) + prepend_header_to_file(tmp_metadata_list, header_dir) + prepend_header_to_file(tmp_metadata_item, header_dir) - if not os.path.exists(FLATBUFFER_JAVA_TARGET): - os.makedirs(FLATBUFFER_JAVA_TARGET) + if not os.path.exists(target_dir): + os.makedirs(target_dir) - shutil.copy(tmp_metadata_list, FLATBUFFER_JAVA_TARGET + FLATBUFFER_METADATA_LIST_JAVA) - shutil.copy(tmp_metadata_item, FLATBUFFER_JAVA_TARGET + FLATBUFFER_METADATA_ITEM_JAVA) + shutil.copy(tmp_metadata_list, os.path.join(target_dir, FLATBUFFER_METADATA_LIST_JAVA)) + shutil.copy(tmp_metadata_item, os.path.join(target_dir, FLATBUFFER_METADATA_ITEM_JAVA)) def create_test_data(unicode_path): """Read all the emojis in the unicode files and update the test file""" @@ -422,14 +422,14 @@ def inject_meta_into_font(ttf, flatbuffer_bin_filename): if not 'meta' in ttf: ttf['meta'] = ttLib.getTableClass('meta')() meta = ttf['meta'] - with open(flatbuffer_bin_filename) as flatbuffer_bin_file: + with open(flatbuffer_bin_filename, 'rb') as flatbuffer_bin_file: meta.data[EMOJI_META_TAG_NAME] = flatbuffer_bin_file.read() # sort meta tables for faster access update_ttlib_orig_sort() -def validate_input_files(font_path, unicode_path): +def validate_input_files(font_path, unicode_path, flatbuffer_path): """Validate the existence of font file and the unicode files""" if not os.path.isfile(font_path): raise ValueError("Font file does not exist: " + font_path) @@ -445,10 +445,20 @@ def validate_input_files(font_path, unicode_path): if not os.path.isfile(emoji_filename): raise ValueError("Unicode emoji data file does not exist: " + emoji_filename) + if not os.path.isdir(flatbuffer_path): + raise ValueError( + "Flatbuffer directory does not exist or is not a directory " + flatbuffer_path) + + flatbuffer_filenames = [os.path.join(flatbuffer_path, FLATBUFFER_SCHEMA), + os.path.join(flatbuffer_path, FLATBUFFER_HEADER)] + for flatbuffer_filename in flatbuffer_filenames: + if not os.path.isfile(flatbuffer_filename): + raise ValueError("Flatbuffer file does not exist: " + flatbuffer_filename) + def add_file_to_sha(sha_algo, file_path): with open(file_path, 'rb') as input_file: - for data in iter(lambda: input_file.read(8192), ''): + for data in iter(lambda: input_file.read(8192), b''): sha_algo.update(data) def create_sha_from_source_files(font_paths): @@ -463,7 +473,7 @@ class EmojiFontCreator(object): """Creates the EmojiCompat font""" def __init__(self, font_path, unicode_path): - validate_input_files(font_path, unicode_path) + validate_input_files(font_path, unicode_path, FLATBUFFER_MODULE_DIR) self.font_path = font_path self.unicode_path = unicode_path @@ -491,7 +501,7 @@ class EmojiFontCreator(object): """Read image size data from CBDT.""" cbdt = ttf['CBDT'] for strike_data in cbdt.strikeData: - for key, data in strike_data.iteritems(): + for key, data in strike_data.items(): data.decompile() self.glyph_to_image_metrics_map[key] = data.metrics @@ -501,7 +511,7 @@ class EmojiFontCreator(object): cmap = ttf['cmap'] for table in cmap.tables: if table.format == 12 and table.platformID == 3 and table.platEncID == 10: - for codepoint, glyph_name in table.cmap.iteritems(): + for codepoint, glyph_name in table.cmap.items(): glyph_to_codepoint_map[glyph_name] = codepoint self.update_emoji_data([codepoint], glyph_name) return table @@ -546,7 +556,7 @@ class EmojiFontCreator(object): glyph_names = [x["input"] for x in seq] codepoints = [glyph_to_codepoint_map[x] for x in glyph_names] outputs = [x["output"] for x in seq if x["output"]] - nonempty_outputs = filter(lambda x: x.strip() , outputs) + nonempty_outputs = list(filter(lambda x: x.strip() , outputs)) if len(nonempty_outputs) == 0: print("Warning: no output glyph is set for " + str(glyph_names)) continue @@ -561,12 +571,12 @@ class EmojiFontCreator(object): def get_substitutions(self, lookup_list, index): result = [] for x in lookup_list.Lookup[index].SubTable: - for input, output in x.mapping.iteritems(): + for input, output in x.mapping.items(): result.append({"input": input, "output": output}) return result def add_gsub_ligature_subtable(self, subtable, glyph_to_codepoint_map): - for name, ligatures in subtable.ligatures.iteritems(): + for name, ligatures in subtable.ligatures.items(): for ligature in ligatures: glyph_names = [name] + ligature.Component codepoints = [glyph_to_codepoint_map[x] for x in glyph_names] @@ -649,8 +659,14 @@ class EmojiFontCreator(object): total_emoji_count = self.write_metadata_json(output_json_file) # create the flatbuffers binary and java classes - sys_command = 'flatc -o {0} -b -j {1} {2}' - os.system(sys_command.format(tmp_dir, FLATBUFFER_SCHEMA, output_json_file)) + flatc_command = ['flatc', + '-o', + tmp_dir, + '-b', + '-j', + FLATBUFFER_SCHEMA, + output_json_file] + subprocess.check_output(flatc_command) # inject metadata binary into font inject_meta_into_font(ttf, flatbuffer_bin_file) @@ -662,7 +678,9 @@ class EmojiFontCreator(object): # save the new font ttf.save(FONT_PATH) - update_flatbuffer_java_files(flatbuffer_java_dir) + update_flatbuffer_java_files(flatbuffer_java_dir, #tmp dir + FLATBUFFER_HEADER, + FLATBUFFER_JAVA_TARGET) create_test_data(self.unicode_path) @@ -678,9 +696,17 @@ def print_usage(): print("Please specify a path to font and unicode files.\n" "usage: createfont.py noto-color-emoji-path unicode-dir-path") - -if __name__ == '__main__': - if len(sys.argv) < 3: +def parse_args(argv): + # parse manually to avoid any extra dependencies + if len(argv) < 3: print_usage() sys.exit(1) - EmojiFontCreator(sys.argv[1], sys.argv[2]).create_font() + return (sys.argv[1], sys.argv[2]) + +def main(): + font_file, unicode_dir = parse_args(sys.argv) + EmojiFontCreator(font_file, unicode_dir).create_font() + + +if __name__ == '__main__': + main() diff --git a/emoji-compat/data/emoji_metadata.txt b/emoji-compat/data/emoji_metadata.txt index 3c5cdf4..6bee6fa 100644 --- a/emoji-compat/data/emoji_metadata.txt +++ b/emoji-compat/data/emoji_metadata.txt @@ -3244,3 +3244,337 @@ F0CDE 29 5 1F9D1 200D 1F9B2 F0CDF 29 5 1F9D1 200D 1F9B3
F0CE0 29 5 1F9D1 200D 1F9BC
F0CE1 29 5 1F9D1 200D 1F9BD
+F0CE2 30 6 26A7
+F0CE3 30 6 1F6D6
+F0CE4 30 6 1F6D7
+F0CE5 30 6 1F6FB
+F0CE6 30 6 1F6FC
+F0CE7 30 6 1F90C
+F0CE8 30 6 1F972
+F0CE9 30 6 1F977
+F0CEA 30 6 1F978
+F0CEB 30 6 1F9A3
+F0CEC 30 6 1F9A4
+F0CED 30 6 1F9AB
+F0CEE 30 6 1F9AC
+F0CEF 30 6 1F9AD
+F0CF0 30 6 1F9CB
+F0CF1 30 6 1FA74
+F0CF2 30 6 1FA83
+F0CF3 30 6 1FA84
+F0CF4 30 6 1FA85
+F0CF5 30 6 1FA86
+F0CF6 30 6 1FA96
+F0CF7 30 6 1FA97
+F0CF8 30 6 1FA98
+F0CF9 30 6 1FA99
+F0CFA 30 6 1FA9A
+F0CFB 30 6 1FA9B
+F0CFC 30 6 1FA9C
+F0CFD 30 6 1FA9D
+F0CFE 30 6 1FA9E
+F0CFF 30 6 1FA9F
+F0D00 30 6 1FAA0
+F0D01 30 6 1FAA1
+F0D02 30 6 1FAA2
+F0D03 30 6 1FAA3
+F0D04 30 6 1FAA4
+F0D05 30 6 1FAA5
+F0D06 30 6 1FAA6
+F0D07 30 6 1FAA7
+F0D08 30 6 1FAA8
+F0D09 30 6 1FAB0
+F0D0A 30 6 1FAB1
+F0D0B 30 6 1FAB2
+F0D0C 30 6 1FAB3
+F0D0D 30 6 1FAB4
+F0D0E 30 6 1FAB5
+F0D0F 30 6 1FAB6
+F0D10 30 6 1FAC0
+F0D11 30 6 1FAC1
+F0D12 30 6 1FAC2
+F0D13 30 6 1FAD0
+F0D14 30 6 1FAD1
+F0D15 30 6 1FAD2
+F0D16 30 6 1FAD3
+F0D17 30 6 1FAD4
+F0D18 30 6 1FAD5
+F0D19 30 6 1FAD6
+F0D1A 30 6 1F3F3 200D 26A7
+F0D1B 30 6 1F408 200D 2B1B
+F0D1C 30 6 1F43B 200D 2744
+F0D1D 30 6 1F468 1F3FB 200D 1F37C
+F0D1E 30 6 1F468 1F3FC 200D 1F37C
+F0D1F 30 6 1F468 1F3FD 200D 1F37C
+F0D20 30 6 1F468 1F3FE 200D 1F37C
+F0D21 30 6 1F468 1F3FF 200D 1F37C
+F0D22 30 6 1F468 200D 1F37C
+F0D23 30 6 1F469 1F3FB 200D 1F37C
+F0D24 30 6 1F469 1F3FC 200D 1F37C
+F0D25 30 6 1F469 1F3FD 200D 1F37C
+F0D26 30 6 1F469 1F3FE 200D 1F37C
+F0D27 30 6 1F469 1F3FF 200D 1F37C
+F0D28 30 6 1F469 200D 1F37C
+F0D29 30 6 1F470 1F3FB 200D 2640
+F0D2A 30 6 1F470 1F3FB 200D 2642
+F0D2B 30 6 1F470 1F3FC 200D 2640
+F0D2C 30 6 1F470 1F3FC 200D 2642
+F0D2D 30 6 1F470 1F3FD 200D 2640
+F0D2E 30 6 1F470 1F3FD 200D 2642
+F0D2F 30 6 1F470 1F3FE 200D 2640
+F0D30 30 6 1F470 1F3FE 200D 2642
+F0D31 30 6 1F470 1F3FF 200D 2640
+F0D32 30 6 1F470 1F3FF 200D 2642
+F0D33 30 6 1F470 200D 2640
+F0D34 30 6 1F470 200D 2642
+F0D35 30 6 1F90C 1F3FB
+F0D36 30 6 1F90C 1F3FC
+F0D37 30 6 1F90C 1F3FD
+F0D38 30 6 1F90C 1F3FE
+F0D39 30 6 1F90C 1F3FF
+F0D3A 30 6 1F935 1F3FB 200D 2640
+F0D3B 30 6 1F935 1F3FB 200D 2642
+F0D3C 30 6 1F935 1F3FC 200D 2640
+F0D3D 30 6 1F935 1F3FC 200D 2642
+F0D3E 30 6 1F935 1F3FD 200D 2640
+F0D3F 30 6 1F935 1F3FD 200D 2642
+F0D40 30 6 1F935 1F3FE 200D 2640
+F0D41 30 6 1F935 1F3FE 200D 2642
+F0D42 30 6 1F935 1F3FF 200D 2640
+F0D43 30 6 1F935 1F3FF 200D 2642
+F0D44 30 6 1F935 200D 2640
+F0D45 30 6 1F935 200D 2642
+F0D46 30 6 1F977 1F3FB
+F0D47 30 6 1F977 1F3FC
+F0D48 30 6 1F977 1F3FD
+F0D49 30 6 1F977 1F3FE
+F0D4A 30 6 1F977 1F3FF
+F0D4B 30 6 1F9D1 1F3FB 200D 1F37C
+F0D4C 30 6 1F9D1 1F3FB 200D 1F384
+F0D4D 30 6 1F9D1 1F3FC 200D 1F37C
+F0D4E 30 6 1F9D1 1F3FC 200D 1F384
+F0D4F 30 6 1F9D1 1F3FD 200D 1F37C
+F0D50 30 6 1F9D1 1F3FD 200D 1F384
+F0D51 30 6 1F9D1 1F3FE 200D 1F37C
+F0D52 30 6 1F9D1 1F3FE 200D 1F384
+F0D53 30 6 1F9D1 1F3FF 200D 1F37C
+F0D54 30 6 1F9D1 1F3FF 200D 1F384
+F0D55 30 6 1F9D1 200D 1F37C
+F0D56 30 6 1F9D1 200D 1F384
+F0D57 30 7 2764 200D 1F525
+F0D58 30 7 2764 200D 1FA79
+F0D59 30 7 1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FB
+F0D5A 30 7 1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FC
+F0D5B 30 7 1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FD
+F0D5C 30 7 1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FE
+F0D5D 30 7 1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FF
+F0D5E 30 7 1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FB
+F0D5F 30 7 1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FC
+F0D60 30 7 1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FD
+F0D61 30 7 1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FE
+F0D62 30 7 1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FF
+F0D63 30 7 1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FB
+F0D64 30 7 1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FC
+F0D65 30 7 1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FD
+F0D66 30 7 1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FE
+F0D67 30 7 1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FF
+F0D68 30 7 1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FB
+F0D69 30 7 1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FC
+F0D6A 30 7 1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FD
+F0D6B 30 7 1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FE
+F0D6C 30 7 1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FF
+F0D6D 30 7 1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FB
+F0D6E 30 7 1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FC
+F0D6F 30 7 1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FD
+F0D70 30 7 1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FE
+F0D71 30 7 1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FF
+F0D72 30 7 1F468 1F3FB 200D 2764 200D 1F468 1F3FB
+F0D73 30 7 1F468 1F3FB 200D 2764 200D 1F468 1F3FC
+F0D74 30 7 1F468 1F3FB 200D 2764 200D 1F468 1F3FD
+F0D75 30 7 1F468 1F3FB 200D 2764 200D 1F468 1F3FE
+F0D76 30 7 1F468 1F3FB 200D 2764 200D 1F468 1F3FF
+F0D77 30 7 1F468 1F3FC 200D 2764 200D 1F468 1F3FB
+F0D78 30 7 1F468 1F3FC 200D 2764 200D 1F468 1F3FC
+F0D79 30 7 1F468 1F3FC 200D 2764 200D 1F468 1F3FD
+F0D7A 30 7 1F468 1F3FC 200D 2764 200D 1F468 1F3FE
+F0D7B 30 7 1F468 1F3FC 200D 2764 200D 1F468 1F3FF
+F0D7C 30 7 1F468 1F3FD 200D 2764 200D 1F468 1F3FB
+F0D7D 30 7 1F468 1F3FD 200D 2764 200D 1F468 1F3FC
+F0D7E 30 7 1F468 1F3FD 200D 2764 200D 1F468 1F3FD
+F0D7F 30 7 1F468 1F3FD 200D 2764 200D 1F468 1F3FE
+F0D80 30 7 1F468 1F3FD 200D 2764 200D 1F468 1F3FF
+F0D81 30 7 1F468 1F3FE 200D 2764 200D 1F468 1F3FB
+F0D82 30 7 1F468 1F3FE 200D 2764 200D 1F468 1F3FC
+F0D83 30 7 1F468 1F3FE 200D 2764 200D 1F468 1F3FD
+F0D84 30 7 1F468 1F3FE 200D 2764 200D 1F468 1F3FE
+F0D85 30 7 1F468 1F3FE 200D 2764 200D 1F468 1F3FF
+F0D86 30 7 1F468 1F3FF 200D 2764 200D 1F468 1F3FB
+F0D87 30 7 1F468 1F3FF 200D 2764 200D 1F468 1F3FC
+F0D88 30 7 1F468 1F3FF 200D 2764 200D 1F468 1F3FD
+F0D89 30 7 1F468 1F3FF 200D 2764 200D 1F468 1F3FE
+F0D8A 30 7 1F468 1F3FF 200D 2764 200D 1F468 1F3FF
+F0D8B 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FB
+F0D8C 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FC
+F0D8D 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FD
+F0D8E 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FE
+F0D8F 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FF
+F0D90 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FB
+F0D91 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FC
+F0D92 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FD
+F0D93 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FE
+F0D94 30 7 1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FF
+F0D95 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FB
+F0D96 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FC
+F0D97 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FD
+F0D98 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FE
+F0D99 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FF
+F0D9A 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FB
+F0D9B 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FC
+F0D9C 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FD
+F0D9D 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FE
+F0D9E 30 7 1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FF
+F0D9F 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FB
+F0DA0 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FC
+F0DA1 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FD
+F0DA2 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FE
+F0DA3 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FF
+F0DA4 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FB
+F0DA5 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FC
+F0DA6 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FD
+F0DA7 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FE
+F0DA8 30 7 1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FF
+F0DA9 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FB
+F0DAA 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FC
+F0DAB 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FD
+F0DAC 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FE
+F0DAD 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FF
+F0DAE 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FB
+F0DAF 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FC
+F0DB0 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FD
+F0DB1 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FE
+F0DB2 30 7 1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FF
+F0DB3 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FB
+F0DB4 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FC
+F0DB5 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FD
+F0DB6 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FE
+F0DB7 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FF
+F0DB8 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FB
+F0DB9 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FC
+F0DBA 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FD
+F0DBB 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FE
+F0DBC 30 7 1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FF
+F0DBD 30 7 1F469 1F3FB 200D 2764 200D 1F468 1F3FB
+F0DBE 30 7 1F469 1F3FB 200D 2764 200D 1F468 1F3FC
+F0DBF 30 7 1F469 1F3FB 200D 2764 200D 1F468 1F3FD
+F0DC0 30 7 1F469 1F3FB 200D 2764 200D 1F468 1F3FE
+F0DC1 30 7 1F469 1F3FB 200D 2764 200D 1F468 1F3FF
+F0DC2 30 7 1F469 1F3FB 200D 2764 200D 1F469 1F3FB
+F0DC3 30 7 1F469 1F3FB 200D 2764 200D 1F469 1F3FC
+F0DC4 30 7 1F469 1F3FB 200D 2764 200D 1F469 1F3FD
+F0DC5 30 7 1F469 1F3FB 200D 2764 200D 1F469 1F3FE
+F0DC6 30 7 1F469 1F3FB 200D 2764 200D 1F469 1F3FF
+F0DC7 30 7 1F469 1F3FC 200D 2764 200D 1F468 1F3FB
+F0DC8 30 7 1F469 1F3FC 200D 2764 200D 1F468 1F3FC
+F0DC9 30 7 1F469 1F3FC 200D 2764 200D 1F468 1F3FD
+F0DCA 30 7 1F469 1F3FC 200D 2764 200D 1F468 1F3FE
+F0DCB 30 7 1F469 1F3FC 200D 2764 200D 1F468 1F3FF
+F0DCC 30 7 1F469 1F3FC 200D 2764 200D 1F469 1F3FB
+F0DCD 30 7 1F469 1F3FC 200D 2764 200D 1F469 1F3FC
+F0DCE 30 7 1F469 1F3FC 200D 2764 200D 1F469 1F3FD
+F0DCF 30 7 1F469 1F3FC 200D 2764 200D 1F469 1F3FE
+F0DD0 30 7 1F469 1F3FC 200D 2764 200D 1F469 1F3FF
+F0DD1 30 7 1F469 1F3FD 200D 2764 200D 1F468 1F3FB
+F0DD2 30 7 1F469 1F3FD 200D 2764 200D 1F468 1F3FC
+F0DD3 30 7 1F469 1F3FD 200D 2764 200D 1F468 1F3FD
+F0DD4 30 7 1F469 1F3FD 200D 2764 200D 1F468 1F3FE
+F0DD5 30 7 1F469 1F3FD 200D 2764 200D 1F468 1F3FF
+F0DD6 30 7 1F469 1F3FD 200D 2764 200D 1F469 1F3FB
+F0DD7 30 7 1F469 1F3FD 200D 2764 200D 1F469 1F3FC
+F0DD8 30 7 1F469 1F3FD 200D 2764 200D 1F469 1F3FD
+F0DD9 30 7 1F469 1F3FD 200D 2764 200D 1F469 1F3FE
+F0DDA 30 7 1F469 1F3FD 200D 2764 200D 1F469 1F3FF
+F0DDB 30 7 1F469 1F3FE 200D 2764 200D 1F468 1F3FB
+F0DDC 30 7 1F469 1F3FE 200D 2764 200D 1F468 1F3FC
+F0DDD 30 7 1F469 1F3FE 200D 2764 200D 1F468 1F3FD
+F0DDE 30 7 1F469 1F3FE 200D 2764 200D 1F468 1F3FE
+F0DDF 30 7 1F469 1F3FE 200D 2764 200D 1F468 1F3FF
+F0DE0 30 7 1F469 1F3FE 200D 2764 200D 1F469 1F3FB
+F0DE1 30 7 1F469 1F3FE 200D 2764 200D 1F469 1F3FC
+F0DE2 30 7 1F469 1F3FE 200D 2764 200D 1F469 1F3FD
+F0DE3 30 7 1F469 1F3FE 200D 2764 200D 1F469 1F3FE
+F0DE4 30 7 1F469 1F3FE 200D 2764 200D 1F469 1F3FF
+F0DE5 30 7 1F469 1F3FF 200D 2764 200D 1F468 1F3FB
+F0DE6 30 7 1F469 1F3FF 200D 2764 200D 1F468 1F3FC
+F0DE7 30 7 1F469 1F3FF 200D 2764 200D 1F468 1F3FD
+F0DE8 30 7 1F469 1F3FF 200D 2764 200D 1F468 1F3FE
+F0DE9 30 7 1F469 1F3FF 200D 2764 200D 1F468 1F3FF
+F0DEA 30 7 1F469 1F3FF 200D 2764 200D 1F469 1F3FB
+F0DEB 30 7 1F469 1F3FF 200D 2764 200D 1F469 1F3FC
+F0DEC 30 7 1F469 1F3FF 200D 2764 200D 1F469 1F3FD
+F0DED 30 7 1F469 1F3FF 200D 2764 200D 1F469 1F3FE
+F0DEE 30 7 1F469 1F3FF 200D 2764 200D 1F469 1F3FF
+F0DEF 30 7 1F48F 1F3FB
+F0DF0 30 7 1F48F 1F3FC
+F0DF1 30 7 1F48F 1F3FD
+F0DF2 30 7 1F48F 1F3FE
+F0DF3 30 7 1F48F 1F3FF
+F0DF4 30 7 1F491 1F3FB
+F0DF5 30 7 1F491 1F3FC
+F0DF6 30 7 1F491 1F3FD
+F0DF7 30 7 1F491 1F3FE
+F0DF8 30 7 1F491 1F3FF
+F0DF9 30 7 1F62E 200D 1F4A8
+F0DFA 30 7 1F635 200D 1F4AB
+F0DFB 30 7 1F636 200D 1F32B
+F0DFC 30 7 1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FC
+F0DFD 30 7 1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FD
+F0DFE 30 7 1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FE
+F0DFF 30 7 1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FF
+F0E00 30 7 1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FB
+F0E01 30 7 1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FD
+F0E02 30 7 1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FE
+F0E03 30 7 1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FF
+F0E04 30 7 1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FB
+F0E05 30 7 1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FC
+F0E06 30 7 1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FE
+F0E07 30 7 1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FF
+F0E08 30 7 1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FB
+F0E09 30 7 1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FC
+F0E0A 30 7 1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FD
+F0E0B 30 7 1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FF
+F0E0C 30 7 1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FB
+F0E0D 30 7 1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FC
+F0E0E 30 7 1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FD
+F0E0F 30 7 1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FE
+F0E10 30 7 1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FC
+F0E11 30 7 1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FD
+F0E12 30 7 1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FE
+F0E13 30 7 1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FF
+F0E14 30 7 1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FB
+F0E15 30 7 1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FD
+F0E16 30 7 1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FE
+F0E17 30 7 1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FF
+F0E18 30 7 1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FB
+F0E19 30 7 1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FC
+F0E1A 30 7 1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FE
+F0E1B 30 7 1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FF
+F0E1C 30 7 1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FB
+F0E1D 30 7 1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FC
+F0E1E 30 7 1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FD
+F0E1F 30 7 1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FF
+F0E20 30 7 1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FB
+F0E21 30 7 1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FC
+F0E22 30 7 1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FD
+F0E23 30 7 1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FE
+F0E24 30 7 1F9D4 1F3FB 200D 2640
+F0E25 30 7 1F9D4 1F3FB 200D 2642
+F0E26 30 7 1F9D4 1F3FC 200D 2640
+F0E27 30 7 1F9D4 1F3FC 200D 2642
+F0E28 30 7 1F9D4 1F3FD 200D 2640
+F0E29 30 7 1F9D4 1F3FD 200D 2642
+F0E2A 30 7 1F9D4 1F3FE 200D 2640
+F0E2B 30 7 1F9D4 1F3FE 200D 2642
+F0E2C 30 7 1F9D4 1F3FF 200D 2640
+F0E2D 30 7 1F9D4 1F3FF 200D 2642
+F0E2E 30 7 1F9D4 200D 2640
+F0E2F 30 7 1F9D4 200D 2642
diff --git a/emoji-compat/font/NotoColorEmojiCompat.ttf b/emoji-compat/font/NotoColorEmojiCompat.ttf Binary files differindex 20d32a8..9cc330f 100644 --- a/emoji-compat/font/NotoColorEmojiCompat.ttf +++ b/emoji-compat/font/NotoColorEmojiCompat.ttf diff --git a/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java b/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java deleted file mode 100644 index 49a1e2b..0000000 --- a/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java +++ /dev/null @@ -1,160 +0,0 @@ -// CHECKSTYLE:OFF Generated code -/* - * Copyright (C) 2017 The Android Open Source Project - * - * 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. - */ - -package androidx.text.emoji.flatbuffer; - -import com.google.flatbuffers.FlatBufferBuilder; -import com.google.flatbuffers.Table; - -import java.nio.ByteBuffer; -import java.nio.ByteOrder; - -/** - * Automatically generated by the FlatBuffers compiler, do not modify. - */ -@SuppressWarnings("unused") -public final class MetadataItem extends Table { - public static MetadataItem getRootAsMetadataItem(ByteBuffer _bb) { - return getRootAsMetadataItem(_bb, new MetadataItem()); - } - - public static MetadataItem getRootAsMetadataItem(ByteBuffer _bb, MetadataItem obj) { - _bb.order(ByteOrder.LITTLE_ENDIAN); - return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); - } - - public void __init(int _i, ByteBuffer _bb) { - bb_pos = _i; - bb = _bb; - } - - public MetadataItem __assign(int _i, ByteBuffer _bb) { - __init(_i, _bb); - return this; - } - - public int id() { - int o = __offset(4); - return o != 0 ? bb.getInt(o + bb_pos) : 0; - } - - public boolean emojiStyle() { - int o = __offset(6); - return o != 0 ? 0 != bb.get(o + bb_pos) : false; - } - - public short sdkAdded() { - int o = __offset(8); - return o != 0 ? bb.getShort(o + bb_pos) : 0; - } - - public short compatAdded() { - int o = __offset(10); - return o != 0 ? bb.getShort(o + bb_pos) : 0; - } - - public short width() { - int o = __offset(12); - return o != 0 ? bb.getShort(o + bb_pos) : 0; - } - - public short height() { - int o = __offset(14); - return o != 0 ? bb.getShort(o + bb_pos) : 0; - } - - public int codepoints(int j) { - int o = __offset(16); - return o != 0 ? bb.getInt(__vector(o) + j * 4) : 0; - } - - public int codepointsLength() { - int o = __offset(16); - return o != 0 ? __vector_len(o) : 0; - } - - public ByteBuffer codepointsAsByteBuffer() { - return __vector_as_bytebuffer(16, 4); - } - - public static int createMetadataItem(FlatBufferBuilder builder, - int id, - boolean emojiStyle, - short sdkAdded, - short compatAdded, - short width, - short height, - int codepointsOffset) { - builder.startObject(7); - MetadataItem.addCodepoints(builder, codepointsOffset); - MetadataItem.addId(builder, id); - MetadataItem.addHeight(builder, height); - MetadataItem.addWidth(builder, width); - MetadataItem.addCompatAdded(builder, compatAdded); - MetadataItem.addSdkAdded(builder, sdkAdded); - MetadataItem.addEmojiStyle(builder, emojiStyle); - return MetadataItem.endMetadataItem(builder); - } - - public static void startMetadataItem(FlatBufferBuilder builder) { - builder.startObject(7); - } - - public static void addId(FlatBufferBuilder builder, int id) { - builder.addInt(0, id, 0); - } - - public static void addEmojiStyle(FlatBufferBuilder builder, boolean emojiStyle) { - builder.addBoolean(1, emojiStyle, false); - } - - public static void addSdkAdded(FlatBufferBuilder builder, short sdkAdded) { - builder.addShort(2, sdkAdded, 0); - } - - public static void addCompatAdded(FlatBufferBuilder builder, short compatAdded) { - builder.addShort(3, compatAdded, 0); - } - - public static void addWidth(FlatBufferBuilder builder, short width) { - builder.addShort(4, width, 0); - } - - public static void addHeight(FlatBufferBuilder builder, short height) { - builder.addShort(5, height, 0); - } - - public static void addCodepoints(FlatBufferBuilder builder, int codepointsOffset) { - builder.addOffset(6, codepointsOffset, 0); - } - - public static int createCodepointsVector(FlatBufferBuilder builder, int[] data) { - builder.startVector(4, data.length, 4); - for (int i = data.length - 1; i >= 0; i--) builder.addInt(data[i]); - return builder.endVector(); - } - - public static void startCodepointsVector(FlatBufferBuilder builder, int numElems) { - builder.startVector(4, numElems, 4); - } - - public static int endMetadataItem(FlatBufferBuilder builder) { - int o = builder.endObject(); - return o; - } -} - diff --git a/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataList.java b/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataList.java deleted file mode 100644 index 97b12a4..0000000 --- a/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataList.java +++ /dev/null @@ -1,124 +0,0 @@ -// CHECKSTYLE:OFF Generated code -/* - * Copyright (C) 2017 The Android Open Source Project - * - * 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. - */ - -package androidx.text.emoji.flatbuffer; - -import com.google.flatbuffers.FlatBufferBuilder; -import com.google.flatbuffers.Table; - -import java.nio.ByteBuffer; -import java.nio.ByteOrder; - -/** - * Automatically generated by the FlatBuffers compiler, do not modify. - */ -@SuppressWarnings("unused") -public final class MetadataList extends Table { - public static MetadataList getRootAsMetadataList(ByteBuffer _bb) { - return getRootAsMetadataList(_bb, new MetadataList()); - } - - public static MetadataList getRootAsMetadataList(ByteBuffer _bb, MetadataList obj) { - _bb.order(ByteOrder.LITTLE_ENDIAN); - return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); - } - - public void __init(int _i, ByteBuffer _bb) { - bb_pos = _i; - bb = _bb; - } - - public MetadataList __assign(int _i, ByteBuffer _bb) { - __init(_i, _bb); - return this; - } - - public int version() { - int o = __offset(4); - return o != 0 ? bb.getInt(o + bb_pos) : 0; - } - - public MetadataItem list(int j) { - return list(new MetadataItem(), j); - } - - public MetadataItem list(MetadataItem obj, int j) { - int o = __offset(6); - return o != 0 ? obj.__assign(__indirect(__vector(o) + j * 4), bb) : null; - } - - public int listLength() { - int o = __offset(6); - return o != 0 ? __vector_len(o) : 0; - } - - public String sourceSha() { - int o = __offset(8); - return o != 0 ? __string(o + bb_pos) : null; - } - - public ByteBuffer sourceShaAsByteBuffer() { - return __vector_as_bytebuffer(8, 1); - } - - public static int createMetadataList(FlatBufferBuilder builder, - int version, - int listOffset, - int sourceShaOffset) { - builder.startObject(3); - MetadataList.addSourceSha(builder, sourceShaOffset); - MetadataList.addList(builder, listOffset); - MetadataList.addVersion(builder, version); - return MetadataList.endMetadataList(builder); - } - - public static void startMetadataList(FlatBufferBuilder builder) { - builder.startObject(3); - } - - public static void addVersion(FlatBufferBuilder builder, int version) { - builder.addInt(0, version, 0); - } - - public static void addList(FlatBufferBuilder builder, int listOffset) { - builder.addOffset(1, listOffset, 0); - } - - public static int createListVector(FlatBufferBuilder builder, int[] data) { - builder.startVector(4, data.length, 4); - for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); - return builder.endVector(); - } - - public static void startListVector(FlatBufferBuilder builder, int numElems) { - builder.startVector(4, numElems, 4); - } - - public static void addSourceSha(FlatBufferBuilder builder, int sourceShaOffset) { - builder.addOffset(2, sourceShaOffset, 0); - } - - public static int endMetadataList(FlatBufferBuilder builder) { - int o = builder.endObject(); - return o; - } - - public static void finishMetadataListBuffer(FlatBufferBuilder builder, int offset) { - builder.finish(offset); - } -} - diff --git a/emoji-compat/supported-emojis/emojis.txt b/emoji-compat/supported-emojis/emojis.txt index f39c2e2..a4818c0 100644 --- a/emoji-compat/supported-emojis/emojis.txt +++ b/emoji-compat/supported-emojis/emojis.txt @@ -670,6 +670,7 @@ 1F3F0 1F3F3 FE0F 1F3F3 FE0F 200D 1F308 +1F3F3 FE0F 200D 26A7 FE0F 1F3F4 1F3F4 200D 2620 FE0F 1F3F4 E0067 E0062 E0065 E006E E0067 E007F @@ -694,6 +695,7 @@ 1F406 1F407 1F408 +1F408 200D 2B1B 1F408 FE0F 1F409 1F40A @@ -750,6 +752,7 @@ 1F439 1F43A 1F43B +1F43B 200D 2744 FE0F 1F43C 1F43D 1F43E @@ -882,6 +885,7 @@ 1F468 1F3FB 1F468 1F3FB 200D 1F33E 1F468 1F3FB 200D 1F373 +1F468 1F3FB 200D 1F37C 1F468 1F3FB 200D 1F393 1F468 1F3FB 200D 1F3A4 1F468 1F3FB 200D 1F3A8 @@ -907,9 +911,20 @@ 1F468 1F3FB 200D 2695 FE0F 1F468 1F3FB 200D 2696 FE0F 1F468 1F3FB 200D 2708 FE0F +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF 1F468 1F3FC 1F468 1F3FC 200D 1F33E 1F468 1F3FC 200D 1F373 +1F468 1F3FC 200D 1F37C 1F468 1F3FC 200D 1F393 1F468 1F3FC 200D 1F3A4 1F468 1F3FC 200D 1F3A8 @@ -935,9 +950,20 @@ 1F468 1F3FC 200D 2695 FE0F 1F468 1F3FC 200D 2696 FE0F 1F468 1F3FC 200D 2708 FE0F +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF 1F468 1F3FD 1F468 1F3FD 200D 1F33E 1F468 1F3FD 200D 1F373 +1F468 1F3FD 200D 1F37C 1F468 1F3FD 200D 1F393 1F468 1F3FD 200D 1F3A4 1F468 1F3FD 200D 1F3A8 @@ -963,9 +989,20 @@ 1F468 1F3FD 200D 2695 FE0F 1F468 1F3FD 200D 2696 FE0F 1F468 1F3FD 200D 2708 FE0F +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF 1F468 1F3FE 1F468 1F3FE 200D 1F33E 1F468 1F3FE 200D 1F373 +1F468 1F3FE 200D 1F37C 1F468 1F3FE 200D 1F393 1F468 1F3FE 200D 1F3A4 1F468 1F3FE 200D 1F3A8 @@ -991,9 +1028,20 @@ 1F468 1F3FE 200D 2695 FE0F 1F468 1F3FE 200D 2696 FE0F 1F468 1F3FE 200D 2708 FE0F +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF 1F468 1F3FF 1F468 1F3FF 200D 1F33E 1F468 1F3FF 200D 1F373 +1F468 1F3FF 200D 1F37C 1F468 1F3FF 200D 1F393 1F468 1F3FF 200D 1F3A4 1F468 1F3FF 200D 1F3A8 @@ -1019,8 +1067,19 @@ 1F468 1F3FF 200D 2695 FE0F 1F468 1F3FF 200D 2696 FE0F 1F468 1F3FF 200D 2708 FE0F +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF 1F468 200D 1F33E 1F468 200D 1F373 +1F468 200D 1F37C 1F468 200D 1F393 1F468 200D 1F3A4 1F468 200D 1F3A8 @@ -1063,6 +1122,7 @@ 1F469 1F3FB 1F469 1F3FB 200D 1F33E 1F469 1F3FB 200D 1F373 +1F469 1F3FB 200D 1F37C 1F469 1F3FB 200D 1F393 1F469 1F3FB 200D 1F3A4 1F469 1F3FB 200D 1F3A8 @@ -1092,9 +1152,30 @@ 1F469 1F3FB 200D 2695 FE0F 1F469 1F3FB 200D 2696 FE0F 1F469 1F3FB 200D 2708 FE0F +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FB +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FC +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FD +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FE +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FF +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF 1F469 1F3FC 1F469 1F3FC 200D 1F33E 1F469 1F3FC 200D 1F373 +1F469 1F3FC 200D 1F37C 1F469 1F3FC 200D 1F393 1F469 1F3FC 200D 1F3A4 1F469 1F3FC 200D 1F3A8 @@ -1124,9 +1205,30 @@ 1F469 1F3FC 200D 2695 FE0F 1F469 1F3FC 200D 2696 FE0F 1F469 1F3FC 200D 2708 FE0F +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FB +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FC +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FD +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FE +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FF +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF 1F469 1F3FD 1F469 1F3FD 200D 1F33E 1F469 1F3FD 200D 1F373 +1F469 1F3FD 200D 1F37C 1F469 1F3FD 200D 1F393 1F469 1F3FD 200D 1F3A4 1F469 1F3FD 200D 1F3A8 @@ -1156,9 +1258,30 @@ 1F469 1F3FD 200D 2695 FE0F 1F469 1F3FD 200D 2696 FE0F 1F469 1F3FD 200D 2708 FE0F +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FB +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FC +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FD +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FE +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FF +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF 1F469 1F3FE 1F469 1F3FE 200D 1F33E 1F469 1F3FE 200D 1F373 +1F469 1F3FE 200D 1F37C 1F469 1F3FE 200D 1F393 1F469 1F3FE 200D 1F3A4 1F469 1F3FE 200D 1F3A8 @@ -1188,9 +1311,30 @@ 1F469 1F3FE 200D 2695 FE0F 1F469 1F3FE 200D 2696 FE0F 1F469 1F3FE 200D 2708 FE0F +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FB +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FC +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FD +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FE +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FF +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF 1F469 1F3FF 1F469 1F3FF 200D 1F33E 1F469 1F3FF 200D 1F373 +1F469 1F3FF 200D 1F37C 1F469 1F3FF 200D 1F393 1F469 1F3FF 200D 1F3A4 1F469 1F3FF 200D 1F3A8 @@ -1220,8 +1364,29 @@ 1F469 1F3FF 200D 2695 FE0F 1F469 1F3FF 200D 2696 FE0F 1F469 1F3FF 200D 2708 FE0F +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FB +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FC +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FD +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FE +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FF +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF 1F469 200D 1F33E 1F469 200D 1F373 +1F469 200D 1F37C 1F469 200D 1F393 1F469 200D 1F3A4 1F469 200D 1F3A8 @@ -1300,10 +1465,22 @@ 1F46F 200D 2642 FE0F 1F470 1F470 1F3FB +1F470 1F3FB 200D 2640 FE0F +1F470 1F3FB 200D 2642 FE0F 1F470 1F3FC +1F470 1F3FC 200D 2640 FE0F +1F470 1F3FC 200D 2642 FE0F 1F470 1F3FD +1F470 1F3FD 200D 2640 FE0F +1F470 1F3FD 200D 2642 FE0F 1F470 1F3FE +1F470 1F3FE 200D 2640 FE0F +1F470 1F3FE 200D 2642 FE0F 1F470 1F3FF +1F470 1F3FF 200D 2640 FE0F +1F470 1F3FF 200D 2642 FE0F +1F470 200D 2640 FE0F +1F470 200D 2642 FE0F 1F471 1F471 1F3FB 1F471 1F3FB 200D 2640 FE0F @@ -1495,8 +1672,18 @@ 1F48D 1F48E 1F48F +1F48F 1F3FB +1F48F 1F3FC +1F48F 1F3FD +1F48F 1F3FE +1F48F 1F3FF 1F490 1F491 +1F491 1F3FB +1F491 1F3FC +1F491 1F3FD +1F491 1F3FE +1F491 1F3FF 1F492 1F493 1F494 @@ -1884,6 +2071,7 @@ 1F62C 1F62D 1F62E +1F62E 200D 1F4A8 1F62F 1F630 1F631 @@ -1891,7 +2079,9 @@ 1F633 1F634 1F635 +1F635 200D 1F4AB 1F636 +1F636 200D 1F32B FE0F 1F637 1F638 1F639 @@ -2196,6 +2386,8 @@ 1F6D1 1F6D2 1F6D5 +1F6D6 +1F6D7 1F6E0 FE0F 1F6E1 FE0F 1F6E2 FE0F @@ -2214,6 +2406,8 @@ 1F6F8 1F6F9 1F6FA +1F6FB +1F6FC 1F7E0 1F7E1 1F7E2 @@ -2226,6 +2420,12 @@ 1F7E9 1F7EA 1F7EB +1F90C +1F90C 1F3FB +1F90C 1F3FC +1F90C 1F3FD +1F90C 1F3FE +1F90C 1F3FF 1F90D 1F90E 1F90F @@ -2355,10 +2555,22 @@ 1F934 1F3FF 1F935 1F935 1F3FB +1F935 1F3FB 200D 2640 FE0F +1F935 1F3FB 200D 2642 FE0F 1F935 1F3FC +1F935 1F3FC 200D 2640 FE0F +1F935 1F3FC 200D 2642 FE0F 1F935 1F3FD +1F935 1F3FD 200D 2640 FE0F +1F935 1F3FD 200D 2642 FE0F 1F935 1F3FE +1F935 1F3FE 200D 2640 FE0F +1F935 1F3FE 200D 2642 FE0F 1F935 1F3FF +1F935 1F3FF 200D 2640 FE0F +1F935 1F3FF 200D 2642 FE0F +1F935 200D 2640 FE0F +1F935 200D 2642 FE0F 1F936 1F936 1F3FB 1F936 1F3FC @@ -2524,10 +2736,18 @@ 1F96F 1F970 1F971 +1F972 1F973 1F974 1F975 1F976 +1F977 +1F977 1F3FB +1F977 1F3FC +1F977 1F3FD +1F977 1F3FE +1F977 1F3FF +1F978 1F97A 1F97B 1F97C @@ -2569,12 +2789,17 @@ 1F9A0 1F9A1 1F9A2 +1F9A3 +1F9A4 1F9A5 1F9A6 1F9A7 1F9A8 1F9A9 1F9AA +1F9AB +1F9AC +1F9AD 1F9AE 1F9AF 1F9B0 @@ -2653,6 +2878,7 @@ 1F9C8 1F9C9 1F9CA +1F9CB 1F9CD 1F9CD 1F3FB 1F9CD 1F3FB 200D 2640 FE0F @@ -2712,6 +2938,8 @@ 1F9D1 1F3FB 1F9D1 1F3FB 200D 1F33E 1F9D1 1F3FB 200D 1F373 +1F9D1 1F3FB 200D 1F37C +1F9D1 1F3FB 200D 1F384 1F9D1 1F3FB 200D 1F393 1F9D1 1F3FB 200D 1F3A4 1F9D1 1F3FB 200D 1F3A8 @@ -2738,9 +2966,19 @@ 1F9D1 1F3FB 200D 2695 FE0F 1F9D1 1F3FB 200D 2696 FE0F 1F9D1 1F3FB 200D 2708 FE0F +1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC +1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD +1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE +1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF +1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FC +1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FD +1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FE +1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FF 1F9D1 1F3FC 1F9D1 1F3FC 200D 1F33E 1F9D1 1F3FC 200D 1F373 +1F9D1 1F3FC 200D 1F37C +1F9D1 1F3FC 200D 1F384 1F9D1 1F3FC 200D 1F393 1F9D1 1F3FC 200D 1F3A4 1F9D1 1F3FC 200D 1F3A8 @@ -2767,9 +3005,19 @@ 1F9D1 1F3FC 200D 2695 FE0F 1F9D1 1F3FC 200D 2696 FE0F 1F9D1 1F3FC 200D 2708 FE0F +1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB +1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD +1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE +1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF +1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FB +1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FD +1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FE +1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FF 1F9D1 1F3FD 1F9D1 1F3FD 200D 1F33E 1F9D1 1F3FD 200D 1F373 +1F9D1 1F3FD 200D 1F37C +1F9D1 1F3FD 200D 1F384 1F9D1 1F3FD 200D 1F393 1F9D1 1F3FD 200D 1F3A4 1F9D1 1F3FD 200D 1F3A8 @@ -2796,9 +3044,19 @@ 1F9D1 1F3FD 200D 2695 FE0F 1F9D1 1F3FD 200D 2696 FE0F 1F9D1 1F3FD 200D 2708 FE0F +1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB +1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC +1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE +1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF +1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FB +1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FC +1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FE +1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FF 1F9D1 1F3FE 1F9D1 1F3FE 200D 1F33E 1F9D1 1F3FE 200D 1F373 +1F9D1 1F3FE 200D 1F37C +1F9D1 1F3FE 200D 1F384 1F9D1 1F3FE 200D 1F393 1F9D1 1F3FE 200D 1F3A4 1F9D1 1F3FE 200D 1F3A8 @@ -2825,9 +3083,19 @@ 1F9D1 1F3FE 200D 2695 FE0F 1F9D1 1F3FE 200D 2696 FE0F 1F9D1 1F3FE 200D 2708 FE0F +1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB +1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC +1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD +1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF +1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FB +1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FC +1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FD +1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FF 1F9D1 1F3FF 1F9D1 1F3FF 200D 1F33E 1F9D1 1F3FF 200D 1F373 +1F9D1 1F3FF 200D 1F37C +1F9D1 1F3FF 200D 1F384 1F9D1 1F3FF 200D 1F393 1F9D1 1F3FF 200D 1F3A4 1F9D1 1F3FF 200D 1F3A8 @@ -2854,8 +3122,18 @@ 1F9D1 1F3FF 200D 2695 FE0F 1F9D1 1F3FF 200D 2696 FE0F 1F9D1 1F3FF 200D 2708 FE0F +1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB +1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC +1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD +1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE +1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FB +1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FC +1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FD +1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FE 1F9D1 200D 1F33E 1F9D1 200D 1F373 +1F9D1 200D 1F37C +1F9D1 200D 1F384 1F9D1 200D 1F393 1F9D1 200D 1F3A4 1F9D1 200D 1F3A8 @@ -2892,10 +3170,22 @@ 1F9D3 1F3FF 1F9D4 1F9D4 1F3FB +1F9D4 1F3FB 200D 2640 FE0F +1F9D4 1F3FB 200D 2642 FE0F 1F9D4 1F3FC +1F9D4 1F3FC 200D 2640 FE0F +1F9D4 1F3FC 200D 2642 FE0F 1F9D4 1F3FD +1F9D4 1F3FD 200D 2640 FE0F +1F9D4 1F3FD 200D 2642 FE0F 1F9D4 1F3FE +1F9D4 1F3FE 200D 2640 FE0F +1F9D4 1F3FE 200D 2642 FE0F 1F9D4 1F3FF +1F9D4 1F3FF 200D 2640 FE0F +1F9D4 1F3FF 200D 2642 FE0F +1F9D4 200D 2640 FE0F +1F9D4 200D 2642 FE0F 1F9D5 1F9D5 1F3FB 1F9D5 1F3FC @@ -3088,18 +3378,59 @@ 1FA71 1FA72 1FA73 +1FA74 1FA78 1FA79 1FA7A 1FA80 1FA81 1FA82 +1FA83 +1FA84 +1FA85 +1FA86 1FA90 1FA91 1FA92 1FA93 1FA94 1FA95 +1FA96 +1FA97 +1FA98 +1FA99 +1FA9A +1FA9B +1FA9C +1FA9D +1FA9E +1FA9F +1FAA0 +1FAA1 +1FAA2 +1FAA3 +1FAA4 +1FAA5 +1FAA6 +1FAA7 +1FAA8 +1FAB0 +1FAB1 +1FAB2 +1FAB3 +1FAB4 +1FAB5 +1FAB6 +1FAC0 +1FAC1 +1FAC2 +1FAD0 +1FAD1 +1FAD2 +1FAD3 +1FAD4 +1FAD5 +1FAD6 203C FE0F 2049 FE0F 2122 FE0F @@ -3234,6 +3565,7 @@ 26A0 FE0F 26A1 26A1 FE0F +26A7 FE0F 26AA 26AA FE0F 26AB @@ -3343,6 +3675,8 @@ 2763 FE0F 2764 2764 FE0F +2764 FE0F 200D 1F525 +2764 FE0F 200D 1FA79 2795 2796 2797 diff --git a/emoji/NotoColorEmoji.ttf b/emoji/NotoColorEmoji.ttf Binary files differindex caf75a0..98fadf4 100644 --- a/emoji/NotoColorEmoji.ttf +++ b/emoji/NotoColorEmoji.ttf |