diff options
author | android-build-prod (mdb) <android-build-team-robot@google.com> | 2021-02-02 18:44:38 +0000 |
---|---|---|
committer | android-build-prod (mdb) <android-build-team-robot@google.com> | 2021-02-02 18:44:38 +0000 |
commit | 07b3a1ef6b190103cca82a331633a16996a529c2 (patch) | |
tree | 471b23b811715c7e9c41e45454a5db22d7a5d2a3 | |
parent | 96d3692b434cd152d08d2b1f39b3b27d4a498f1b (diff) | |
parent | 755fc3c1972d24b311836ad2d8972c6830a56ecb (diff) | |
download | noto-fonts-07b3a1ef6b190103cca82a331633a16996a529c2.tar.gz |
Snap for 7118807 from 755fc3c1972d24b311836ad2d8972c6830a56ecb to androidx-paging-release
Change-Id: Ie8c6b42c0742ef8aec44adb21dec2302d6de2f98
111 files changed, 3030 insertions, 674 deletions
diff --git a/Android.bp b/Android.bp new file mode 100644 index 0000000..ba958b8 --- /dev/null +++ b/Android.bp @@ -0,0 +1,24 @@ +// +// Copyright (C) 2018 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. + +filegroup { + name: "recovery_noto-fonts_dep", + export_to_make_var: "recovery_noto-fonts_dep", + srcs: [ + "cjk/*.ttc", + "other/*.otf", + "other/*.ttf", + ], +} diff --git a/Android.mk b/Android.mk deleted file mode 100644 index 3cfee0c..0000000 --- a/Android.mk +++ /dev/null @@ -1,335 +0,0 @@ -# Copyright (C) 2013 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. - -NOTO_DIR := $(call my-dir) - -include $(call all-makefiles-under,$(NOTO_DIR)) - -# We have to use BUILD_PREBUILT instead of PRODUCT_COPY_FILES, -# to copy over the NOTICE file. -############################################################################# -# $(1): The source file name in LOCAL_PATH. -# It also serves as the module name and the dest file name. -############################################################################# -define build-one-font-module -$(eval include $(CLEAR_VARS))\ -$(eval LOCAL_MODULE := $(1))\ -$(eval LOCAL_SRC_FILES := $(1))\ -$(eval LOCAL_MODULE_CLASS := ETC)\ -$(eval LOCAL_MODULE_TAGS := optional)\ -$(eval LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts)\ -$(eval include $(BUILD_PREBUILT)) -endef - - -############################################################################# -# First "build" the Noto CJK fonts, which have a different directory and -# copyright holder. These are not included in MINIMAL_FONT_FOOTPRINT builds. -############################################################################# -ifneq ($(MINIMAL_FONT_FOOTPRINT),true) -LOCAL_PATH := $(NOTO_DIR)/cjk - -font_src_files := \ - NotoSansCJK-Regular.ttc - -$(foreach f, $(font_src_files), $(call build-one-font-module, $(f))) -font_src_files := - -endif # !MINIMAL_FONT_FOOTPRINT - -############################################################################# -# Similary "build" the Noto CJK fonts for serif family. -# These are not included in SMALLER_FONT_FOOTPRINT builds. -############################################################################# -ifeq ($(filter true,$(EXCLUDE_SERIF_FONTS) $(SMALLER_FONT_FOOTPRINT)),) -LOCAL_PATH := $(NOTO_DIR)/cjk - -font_src_files := \ - NotoSerifCJK-Regular.ttc - -$(foreach f, $(font_src_files), $(call build-one-font-module, $(f))) -font_src_files := - -endif # !EXCLUDE_SERIF_FONTS && !SMALLER_FONT_FOOTPRINT - -############################################################################# -# Now "build" the Noto Color Emoji font, which is in its own directory. It is -# not included in the MINIMAL_FONT_FOOTPRINT builds. -############################################################################# -ifneq ($(MINIMAL_FONT_FOOTPRINT),true) -LOCAL_PATH := $(NOTO_DIR)/emoji - -font_src_files := \ - NotoColorEmoji.ttf - -$(foreach f, $(font_src_files), $(call build-one-font-module, $(f))) -font_src_files := - -endif # !MINIMAL_FONT_FOOTPRINT - -############################################################################# -# Now "build" the rest of the fonts, which live in a separate subdirectory. -############################################################################# -LOCAL_PATH := $(NOTO_DIR)/other - -############################################################################# -# The following fonts are included in all builds. -############################################################################# -font_src_files := \ - NotoSerif-Regular.ttf \ - NotoSerif-Bold.ttf \ - NotoSerif-Italic.ttf \ - NotoSerif-BoldItalic.ttf - -############################################################################# -# The following fonts are excluded from SMALLER_FONT_FOOTPRINT builds. -############################################################################# -ifneq ($(SMALLER_FONT_FOOTPRINT),true) -font_src_files += \ - NotoSansAdlam-Regular.ttf \ - NotoSansAhom-Regular.otf \ - NotoSansAnatolianHieroglyphs-Regular.otf \ - NotoSansAvestan-Regular.ttf \ - NotoSansBalinese-Regular.ttf \ - NotoSansBamum-Regular.ttf \ - NotoSansBassaVah-Regular.otf \ - NotoSansBatak-Regular.ttf \ - NotoSansBengali-Bold.ttf \ - NotoSansBengali-Regular.ttf \ - NotoSansBengaliUI-Bold.ttf \ - NotoSansBengaliUI-Regular.ttf \ - NotoSansBhaiksuki-Regular.otf \ - NotoSansBrahmi-Regular.ttf \ - NotoSansBuginese-Regular.ttf \ - NotoSansBuhid-Regular.ttf \ - NotoSansCanadianAboriginal-Regular.ttf \ - NotoSansCarian-Regular.ttf \ - NotoSansChakma-Regular.ttf \ - NotoSansCham-Bold.ttf \ - NotoSansCham-Regular.ttf \ - NotoSansCherokee-Regular.ttf \ - NotoSansCoptic-Regular.ttf \ - NotoSansCuneiform-Regular.ttf \ - NotoSansCypriot-Regular.ttf \ - NotoSansDeseret-Regular.ttf \ - NotoSansEgyptianHieroglyphs-Regular.ttf \ - NotoSansElbasan-Regular.otf \ - NotoSansEthiopic-Bold.ttf \ - NotoSansEthiopic-Regular.ttf \ - NotoSansGlagolitic-Regular.ttf \ - NotoSansGothic-Regular.ttf \ - NotoSansGujarati-Bold.ttf \ - NotoSansGujarati-Regular.ttf \ - NotoSansGujaratiUI-Bold.ttf \ - NotoSansGujaratiUI-Regular.ttf \ - NotoSansGurmukhi-Bold.ttf \ - NotoSansGurmukhi-Regular.ttf \ - NotoSansGurmukhiUI-Bold.ttf \ - NotoSansGurmukhiUI-Regular.ttf \ - NotoSansHanunoo-Regular.ttf \ - NotoSansHatran-Regular.otf \ - NotoSansImperialAramaic-Regular.ttf \ - NotoSansInscriptionalPahlavi-Regular.ttf \ - NotoSansInscriptionalParthian-Regular.ttf \ - NotoSansJavanese-Regular.ttf \ - NotoSansKaithi-Regular.ttf \ - NotoSansKannada-Bold.ttf \ - NotoSansKannada-Regular.ttf \ - NotoSansKannadaUI-Bold.ttf \ - NotoSansKannadaUI-Regular.ttf \ - NotoSansKayahLi-Regular.ttf \ - NotoSansKharoshthi-Regular.ttf \ - NotoSansKhmerUI-Bold.ttf \ - NotoSansKhmerUI-Regular.ttf \ - NotoSansLao-Bold.ttf \ - NotoSansLao-Regular.ttf \ - NotoSansLaoUI-Bold.ttf \ - NotoSansLaoUI-Regular.ttf \ - NotoSansLepcha-Regular.ttf \ - NotoSansLimbu-Regular.ttf \ - NotoSansLinearA-Regular.otf \ - NotoSansLinearB-Regular.ttf \ - NotoSansLisu-Regular.ttf \ - NotoSansLycian-Regular.ttf \ - NotoSansLydian-Regular.ttf \ - NotoSansMalayalam-Bold.ttf \ - NotoSansMalayalam-Regular.ttf \ - NotoSansMalayalamUI-Bold.ttf \ - NotoSansMalayalamUI-Regular.ttf \ - NotoSansMandaic-Regular.ttf \ - NotoSansManichaean-Regular.otf \ - NotoSansMarchen-Regular.otf \ - NotoSansMeeteiMayek-Regular.ttf \ - NotoSansMeroitic-Regular.otf \ - NotoSansMiao-Regular.otf \ - NotoSansMongolian-Regular.ttf \ - NotoSansMro-Regular.otf \ - NotoSansMultani-Regular.otf \ - NotoSansMyanmar-Bold.ttf \ - NotoSansMyanmar-Regular.ttf \ - NotoSansMyanmarUI-Bold.ttf \ - NotoSansMyanmarUI-Regular.ttf \ - NotoSansNabataean-Regular.otf \ - NotoSansNewa-Regular.otf \ - NotoSansNewTaiLue-Regular.ttf \ - NotoSansNKo-Regular.ttf \ - NotoSansOgham-Regular.ttf \ - NotoSansOlChiki-Regular.ttf \ - NotoSansOldItalic-Regular.ttf \ - NotoSansOldNorthArabian-Regular.otf \ - NotoSansOldPermic-Regular.otf \ - NotoSansOldPersian-Regular.ttf \ - NotoSansOldSouthArabian-Regular.ttf \ - NotoSansOldTurkic-Regular.ttf \ - NotoSansOriya-Bold.ttf \ - NotoSansOriya-Regular.ttf \ - NotoSansOriyaUI-Bold.ttf \ - NotoSansOriyaUI-Regular.ttf \ - NotoSansOsage-Regular.ttf \ - NotoSansOsmanya-Regular.ttf \ - NotoSansPahawhHmong-Regular.otf \ - NotoSansPalmyrene-Regular.otf \ - NotoSansPauCinHau-Regular.otf \ - NotoSansPhagsPa-Regular.ttf \ - NotoSansPhoenician-Regular.ttf \ - NotoSansRejang-Regular.ttf \ - NotoSansRunic-Regular.ttf \ - NotoSansSamaritan-Regular.ttf \ - NotoSansSaurashtra-Regular.ttf \ - NotoSansSharada-Regular.otf \ - NotoSansShavian-Regular.ttf \ - NotoSansSinhala-Bold.ttf \ - NotoSansSinhala-Regular.ttf \ - NotoSansSinhalaUI-Bold.otf \ - NotoSansSinhalaUI-Regular.otf \ - NotoSansSoraSompeng-Regular.otf \ - NotoSansSundanese-Regular.ttf \ - NotoSansSylotiNagri-Regular.ttf \ - NotoSansSyriacEastern-Regular.ttf \ - NotoSansSyriacEstrangela-Regular.ttf \ - NotoSansSyriacWestern-Regular.ttf \ - NotoSansTagalog-Regular.ttf \ - NotoSansTagbanwa-Regular.ttf \ - NotoSansTaiLe-Regular.ttf \ - NotoSansTaiTham-Regular.ttf \ - NotoSansTaiViet-Regular.ttf \ - NotoSansTamil-Bold.ttf \ - NotoSansTamil-Regular.ttf \ - NotoSansTamilUI-Bold.ttf \ - NotoSansTamilUI-Regular.ttf \ - NotoSansTelugu-Bold.ttf \ - NotoSansTelugu-Regular.ttf \ - NotoSansTeluguUI-Bold.ttf \ - NotoSansTeluguUI-Regular.ttf \ - NotoSansThaana-Bold.ttf \ - NotoSansThaana-Regular.ttf \ - NotoSansTibetan-Bold.ttf \ - NotoSansTibetan-Regular.ttf \ - NotoSansTifinagh-Regular.ttf \ - NotoSansUgaritic-Regular.ttf \ - NotoSansVai-Regular.ttf \ - NotoSansYi-Regular.ttf -endif # !SMALLER_FONT_FOOTPRINT - -############################################################################# -# The following fonts are excluded from MINIMAL_FONT_FOOTPRINT builds. -############################################################################# -ifneq ($(MINIMAL_FONT_FOOTPRINT),true) -font_src_files += \ - NotoNaskhArabic-Regular.ttf \ - NotoNaskhArabic-Bold.ttf \ - NotoNaskhArabicUI-Regular.ttf \ - NotoNaskhArabicUI-Bold.ttf \ - NotoSansArmenian-Regular.ttf \ - NotoSansArmenian-Bold.ttf \ - NotoSansDevanagari-Regular.ttf \ - NotoSansDevanagari-Bold.ttf \ - NotoSansDevanagariUI-Regular.ttf \ - NotoSansDevanagariUI-Bold.ttf \ - NotoSansGeorgian-Regular.ttf \ - NotoSansGeorgian-Bold.ttf \ - NotoSansHebrew-Regular.ttf \ - NotoSansHebrew-Bold.ttf \ - NotoSansSymbols-Regular-Subsetted.ttf \ - NotoSansSymbols-Regular-Subsetted2.ttf \ - NotoSansThai-Regular.ttf \ - NotoSansThai-Bold.ttf \ - NotoSansThaiUI-Regular.ttf \ - NotoSansThaiUI-Bold.ttf -endif # !MINIMAL_FONT_FOOTPRINT - -ifeq ($(filter true,$(EXCLUDE_SERIF_FONTS) $(SMALLER_FONT_FOOTPRINT)),) -font_src_files += \ - NotoSerifArmenian-Bold.ttf \ - NotoSerifArmenian-Regular.ttf \ - NotoSerifBengali-Bold.ttf \ - NotoSerifBengali-Regular.ttf \ - NotoSerifDevanagari-Bold.ttf \ - NotoSerifDevanagari-Regular.ttf \ - NotoSerifEthiopic-Bold.otf \ - NotoSerifEthiopic-Regular.otf \ - NotoSerifGeorgian-Bold.ttf \ - NotoSerifGeorgian-Regular.ttf \ - NotoSerifGujarati-Bold.ttf \ - NotoSerifGujarati-Regular.ttf \ - NotoSerifGurmukhi-Bold.otf \ - NotoSerifGurmukhi-Regular.otf \ - NotoSerifHebrew-Bold.ttf \ - NotoSerifHebrew-Regular.ttf \ - NotoSerifKannada-Bold.ttf \ - NotoSerifKannada-Regular.ttf \ - NotoSerifKhmer-Bold.otf \ - NotoSerifKhmer-Regular.otf \ - NotoSerifLao-Bold.ttf \ - NotoSerifLao-Regular.ttf \ - NotoSerifMalayalam-Bold.ttf \ - NotoSerifMalayalam-Regular.ttf \ - NotoSerifMyanmar-Bold.otf \ - NotoSerifMyanmar-Regular.otf \ - NotoSerifSinhala-Bold.otf \ - NotoSerifSinhala-Regular.otf \ - NotoSerifTamil-Bold.ttf \ - NotoSerifTamil-Regular.ttf \ - NotoSerifTelugu-Bold.ttf \ - NotoSerifTelugu-Regular.ttf \ - NotoSerifThai-Bold.ttf \ - NotoSerifThai-Regular.ttf -endif # !EXCLUDE_SERIF_FONTS && !SMALLER_FONT_FOOTPRINT - -$(foreach f, $(font_src_files), $(call build-one-font-module, $(f))) - -############################################################################# -# Now "build" the variable fonts, which live in a separate subdirectory. -# The only variable fonts are for Khmer Sans, which is excluded in -# SMALLER_FONT_FOOTPRINT build. -############################################################################# - -ifneq ($(SMALLER_FONT_FOOTPRINT),true) - -LOCAL_PATH := $(NOTO_DIR)/other-vf - -font_src_files := \ - NotoSansKhmer-VF.ttf - -$(foreach f, $(font_src_files), $(call build-one-font-module, $(f))) - -endif # !SMALLER_FONT_FOOTPRINT - -NOTO_DIR := -build-one-font-module := -font_src_files := - - - - @@ -0,0 +1,6 @@ +# Default code reviewers picked from top 3 or more developers. +# Please update this list if you find better candidates. +dougfelt@google.com +siyamed@google.com +nona@google.com +marekj@google.com diff --git a/TEST_MAPPING b/TEST_MAPPING new file mode 100644 index 0000000..279657d --- /dev/null +++ b/TEST_MAPPING @@ -0,0 +1,7 @@ +{ + "presubmit": [ + { + "name": "minikin_tests" + } + ] +} diff --git a/cjk/Android.bp b/cjk/Android.bp new file mode 100644 index 0000000..5ff7204 --- /dev/null +++ b/cjk/Android.bp @@ -0,0 +1,23 @@ +// Copyright (C) 2019 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. + +prebuilt_font { + name: "NotoSansCJK-Regular.ttc", + src: "NotoSansCJK-Regular.ttc", +} + +prebuilt_font { + name: "NotoSerifCJK-Regular.ttc", + src: "NotoSerifCJK-Regular.ttc", +} diff --git a/cjk/NotoSansCJK-Regular.ttc b/cjk/NotoSansCJK-Regular.ttc Binary files differindex 23b4dc9..7fc3586 100644 --- a/cjk/NotoSansCJK-Regular.ttc +++ b/cjk/NotoSansCJK-Regular.ttc diff --git a/cjk/NotoSerifCJK-Regular.ttc b/cjk/NotoSerifCJK-Regular.ttc Binary files differindex 7f5061c..f4ee450 100644 --- a/cjk/NotoSerifCJK-Regular.ttc +++ b/cjk/NotoSerifCJK-Regular.ttc diff --git a/cjk/README.android b/cjk/README.android index e5d0f79..52ec92f 100644 --- a/cjk/README.android +++ b/cjk/README.android @@ -1,5 +1,5 @@ -URL: https://github.com/googlei18n/noto-cjk/archive/40d9f5b179a59a06b98373c76bdc3e2119e4e6b2.zip -Version: 1.004 +URL: https://github.com/googlei18n/noto-cjk/archive/master.zip +Version: 2.001 License: OFL 1.1 License File: NOTICE @@ -7,5 +7,4 @@ Description: Noto CJK fonts, for supporting Chinese, Japanese, and Korean. Local Modifications: -The fonts have been modified to remove cmap entries for characters -that should default to emoji style in Android. +The fonts have been modified by subset_noto_cjk.py to remove cmap entries for characters that should default to emoji style in Android. diff --git a/emoji-compat/build.gradle b/emoji-compat/build.gradle index c4d43b1..20d8dfb 100644 --- a/emoji-compat/build.gradle +++ b/emoji-compat/build.gradle @@ -14,31 +14,13 @@ * 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.0' - } +plugins { + id("java") } sourceSets { main { - java.srcDirs = ['src/java', "${flatbuffersDir}/java"] + java.srcDirs = ['src/java'] } } @@ -47,21 +29,10 @@ compileJava { targetCompatibility = JavaVersion.VERSION_1_7 } -jarjar.repackage('rename') { - destinationName "noto-emoji-compat-java.jar" - from files(sourceSets.main.output.classesDirs) - dependsOn sourceSets.main.output - classRename 'com.google.flatbuffers.**', 'androidx.text.emoji.flatbuffer.@1' -} - -configurations { - parser +dependencies { + implementation("com.google.flatbuffers:flatbuffers-java:1.12.0") } -artifacts { - parser(rename.destinationPath) { - name 'noto-emoji-compat' - type 'jar' - builtBy rename - } -} +// The "javadoc" task is unused so we don't want it to appear in the output of `./gradlew tasks` +// So, we set the group to null +tasks["javadoc"].group = null diff --git a/emoji-compat/createfont.py b/emoji-compat/createfont.py index da1910c..5f03721 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,17 +50,18 @@ 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 = 28 +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 = 3 +METADATA_VERSION = 7 ####### main directories where output files are created ####### SCRIPT_DIR = os.path.abspath(os.path.dirname(__file__)) @@ -137,9 +136,8 @@ def prepend_header_to_file(file_path): with open(file_path, "r+") as original_file: with open(FLATBUFFER_HEADER, "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): @@ -173,6 +171,11 @@ def create_test_data(unicode_path): emojis_set = set() for line in lines: + # In unicode 12.0, "emoji-sequences.txt" contains "Basic_Emoji" session. We ignore them + # here since we are already checking the emoji presentations with + # emoji-variation-sequences.txt. + if "BASIC_EMOJI" in line: + continue codepoints = [hex_str_to_int(x) for x in line.split(';')[0].strip().split(' ')] emojis_set.add(codepoint_to_string(codepoints).upper()) @@ -339,6 +342,11 @@ def read_emoji_sequences(emoji_data_map, file_path, optional=False): lines = read_emoji_lines(file_path, optional) # 1F1E6 1F1E8 ; Name ; [...] for line in lines: + # In unicode 12.0, "emoji-sequences.txt" contains "Basic_Emoji" session. We ignore them + # here since we are already checking the emoji presentations with + # emoji-variation-sequences.txt. + if "BASIC_EMOJI" in line: + continue codepoints = [hex_str_to_int(x) for x in line.split(';')[0].strip().split(' ')] codepoints = [x for x in codepoints if x != EMOJI_STYLE_VS] key = codepoint_to_string(codepoints) @@ -412,7 +420,7 @@ 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 @@ -438,7 +446,7 @@ def validate_input_files(font_path, unicode_path): 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): @@ -481,7 +489,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 @@ -491,7 +499,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 @@ -536,7 +544,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 @@ -551,12 +559,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] @@ -639,8 +647,8 @@ 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 {0} -b -j {1} {2}'.format(tmp_dir, FLATBUFFER_SCHEMA, output_json_file) + subprocess.check_output(flatc_command, shell=True) # inject metadata binary into font inject_meta_into_font(ttf, flatbuffer_bin_file) diff --git a/emoji-compat/data/emoji_metadata.txt b/emoji-compat/data/emoji_metadata.txt index 048957f..6bee6fa 100644 --- a/emoji-compat/data/emoji_metadata.txt +++ b/emoji-compat/data/emoji_metadata.txt @@ -2846,3 +2846,735 @@ F0B50 28 3 1F9B6 1F3FC F0B51 28 3 1F9B6 1F3FD
F0B52 28 3 1F9B6 1F3FE
F0B53 28 3 1F9B6 1F3FF
+F0B54 29 4 1F6D5
+F0B55 29 4 1F6FA
+F0B56 29 4 1F7E0
+F0B57 29 4 1F7E1
+F0B58 29 4 1F7E2
+F0B59 29 4 1F7E3
+F0B5A 29 4 1F7E4
+F0B5B 29 4 1F7E5
+F0B5C 29 4 1F7E6
+F0B5D 29 4 1F7E7
+F0B5E 29 4 1F7E8
+F0B5F 29 4 1F7E9
+F0B60 29 4 1F7EA
+F0B61 29 4 1F7EB
+F0B62 29 4 1F90D
+F0B63 29 4 1F90E
+F0B64 29 4 1F90F
+F0B65 29 4 1F93F
+F0B66 29 4 1F971
+F0B67 29 4 1F97B
+F0B68 29 4 1F9A5
+F0B69 29 4 1F9A6
+F0B6A 29 4 1F9A7
+F0B6B 29 4 1F9A8
+F0B6C 29 4 1F9A9
+F0B6D 29 4 1F9AA
+F0B6E 29 4 1F9AE
+F0B6F 29 4 1F9AF
+F0B70 29 4 1F9BA
+F0B71 29 4 1F9BB
+F0B72 29 4 1F9BC
+F0B73 29 4 1F9BD
+F0B74 29 4 1F9BE
+F0B75 29 4 1F9BF
+F0B76 29 4 1F9C3
+F0B77 29 4 1F9C4
+F0B78 29 4 1F9C5
+F0B79 29 4 1F9C6
+F0B7A 29 4 1F9C7
+F0B7B 29 4 1F9C8
+F0B7C 29 4 1F9C9
+F0B7D 29 4 1F9CA
+F0B7E 29 4 1F9CD
+F0B7F 29 4 1F9CE
+F0B80 29 4 1F9CF
+F0B81 29 4 1FA70
+F0B82 29 4 1FA71
+F0B83 29 4 1FA72
+F0B84 29 4 1FA73
+F0B85 29 4 1FA78
+F0B86 29 4 1FA79
+F0B87 29 4 1FA7A
+F0B88 29 4 1FA80
+F0B89 29 4 1FA81
+F0B8A 29 4 1FA82
+F0B8B 29 4 1FA90
+F0B8C 29 4 1FA91
+F0B8D 29 4 1FA92
+F0B8E 29 4 1FA93
+F0B8F 29 4 1FA94
+F0B90 29 4 1FA95
+F0B91 29 4 1F46B 1F3FB
+F0B92 29 4 1F46B 1F3FC
+F0B93 29 4 1F46B 1F3FD
+F0B94 29 4 1F46B 1F3FE
+F0B95 29 4 1F46B 1F3FF
+F0B96 29 4 1F46C 1F3FB
+F0B97 29 4 1F46C 1F3FC
+F0B98 29 4 1F46C 1F3FD
+F0B99 29 4 1F46C 1F3FE
+F0B9A 29 4 1F46C 1F3FF
+F0B9B 29 4 1F46D 1F3FB
+F0B9C 29 4 1F46D 1F3FC
+F0B9D 29 4 1F46D 1F3FD
+F0B9E 29 4 1F46D 1F3FE
+F0B9F 29 4 1F46D 1F3FF
+F0BA0 29 4 1F469 1F3FB 200D 1F91D 200D 1F468 1F3FC
+F0BA1 29 4 1F469 1F3FB 200D 1F91D 200D 1F468 1F3FD
+F0BA2 29 4 1F469 1F3FB 200D 1F91D 200D 1F468 1F3FE
+F0BA3 29 4 1F469 1F3FB 200D 1F91D 200D 1F468 1F3FF
+F0BA4 29 4 1F469 1F3FC 200D 1F91D 200D 1F468 1F3FB
+F0BA5 29 4 1F469 1F3FC 200D 1F91D 200D 1F468 1F3FD
+F0BA6 29 4 1F469 1F3FC 200D 1F91D 200D 1F468 1F3FE
+F0BA7 29 4 1F469 1F3FC 200D 1F91D 200D 1F468 1F3FF
+F0BA8 29 4 1F469 1F3FC 200D 1F91D 200D 1F469 1F3FB
+F0BA9 29 4 1F469 1F3FD 200D 1F91D 200D 1F468 1F3FB
+F0BAA 29 4 1F469 1F3FD 200D 1F91D 200D 1F468 1F3FC
+F0BAB 29 4 1F469 1F3FD 200D 1F91D 200D 1F468 1F3FE
+F0BAC 29 4 1F469 1F3FD 200D 1F91D 200D 1F468 1F3FF
+F0BAD 29 4 1F469 1F3FD 200D 1F91D 200D 1F469 1F3FB
+F0BAE 29 4 1F469 1F3FD 200D 1F91D 200D 1F469 1F3FC
+F0BAF 29 4 1F469 1F3FE 200D 1F91D 200D 1F468 1F3FB
+F0BB0 29 4 1F469 1F3FE 200D 1F91D 200D 1F468 1F3FC
+F0BB1 29 4 1F469 1F3FE 200D 1F91D 200D 1F468 1F3FD
+F0BB2 29 4 1F469 1F3FE 200D 1F91D 200D 1F468 1F3FF
+F0BB3 29 4 1F469 1F3FE 200D 1F91D 200D 1F469 1F3FB
+F0BB4 29 4 1F469 1F3FE 200D 1F91D 200D 1F469 1F3FC
+F0BB5 29 4 1F469 1F3FE 200D 1F91D 200D 1F469 1F3FD
+F0BB6 29 4 1F469 1F3FF 200D 1F91D 200D 1F468 1F3FB
+F0BB7 29 4 1F469 1F3FF 200D 1F91D 200D 1F468 1F3FC
+F0BB8 29 4 1F469 1F3FF 200D 1F91D 200D 1F468 1F3FD
+F0BB9 29 4 1F469 1F3FF 200D 1F91D 200D 1F468 1F3FE
+F0BBA 29 4 1F469 1F3FF 200D 1F91D 200D 1F469 1F3FB
+F0BBB 29 4 1F469 1F3FF 200D 1F91D 200D 1F469 1F3FC
+F0BBC 29 4 1F469 1F3FF 200D 1F91D 200D 1F469 1F3FD
+F0BBD 29 4 1F469 1F3FF 200D 1F91D 200D 1F469 1F3FE
+F0BBE 29 4 1F469 1F3FB 200D 1F9AF
+F0BBF 29 4 1F469 1F3FB 200D 1F9BC
+F0BC0 29 4 1F469 1F3FB 200D 1F9BD
+F0BC1 29 4 1F469 1F3FC 200D 1F9AF
+F0BC2 29 4 1F469 1F3FC 200D 1F9BC
+F0BC3 29 4 1F469 1F3FC 200D 1F9BD
+F0BC4 29 4 1F469 1F3FD 200D 1F9AF
+F0BC5 29 4 1F469 1F3FD 200D 1F9BC
+F0BC6 29 4 1F469 1F3FD 200D 1F9BD
+F0BC7 29 4 1F469 1F3FE 200D 1F9AF
+F0BC8 29 4 1F469 1F3FE 200D 1F9BC
+F0BC9 29 4 1F469 1F3FE 200D 1F9BD
+F0BCA 29 4 1F469 1F3FF 200D 1F9AF
+F0BCB 29 4 1F469 1F3FF 200D 1F9BC
+F0BCC 29 4 1F469 1F3FF 200D 1F9BD
+F0BCD 29 4 1F469 200D 1F9AF
+F0BCE 29 4 1F469 200D 1F9BC
+F0BCF 29 4 1F469 200D 1F9BD
+F0BD0 29 4 1F468 1F3FC 200D 1F91D 200D 1F468 1F3FB
+F0BD1 29 4 1F468 1F3FD 200D 1F91D 200D 1F468 1F3FB
+F0BD2 29 4 1F468 1F3FD 200D 1F91D 200D 1F468 1F3FC
+F0BD3 29 4 1F468 1F3FE 200D 1F91D 200D 1F468 1F3FB
+F0BD4 29 4 1F468 1F3FE 200D 1F91D 200D 1F468 1F3FC
+F0BD5 29 4 1F468 1F3FE 200D 1F91D 200D 1F468 1F3FD
+F0BD6 29 4 1F468 1F3FF 200D 1F91D 200D 1F468 1F3FB
+F0BD7 29 4 1F468 1F3FF 200D 1F91D 200D 1F468 1F3FC
+F0BD8 29 4 1F468 1F3FF 200D 1F91D 200D 1F468 1F3FD
+F0BD9 29 4 1F468 1F3FF 200D 1F91D 200D 1F468 1F3FE
+F0BDA 29 4 1F468 1F3FB 200D 1F9AF
+F0BDB 29 4 1F468 1F3FB 200D 1F9BC
+F0BDC 29 4 1F468 1F3FB 200D 1F9BD
+F0BDD 29 4 1F468 1F3FC 200D 1F9AF
+F0BDE 29 4 1F468 1F3FC 200D 1F9BC
+F0BDF 29 4 1F468 1F3FC 200D 1F9BD
+F0BE0 29 4 1F468 1F3FD 200D 1F9AF
+F0BE1 29 4 1F468 1F3FD 200D 1F9BC
+F0BE2 29 4 1F468 1F3FD 200D 1F9BD
+F0BE3 29 4 1F468 1F3FE 200D 1F9AF
+F0BE4 29 4 1F468 1F3FE 200D 1F9BC
+F0BE5 29 4 1F468 1F3FE 200D 1F9BD
+F0BE6 29 4 1F468 1F3FF 200D 1F9AF
+F0BE7 29 4 1F468 1F3FF 200D 1F9BC
+F0BE8 29 4 1F468 1F3FF 200D 1F9BD
+F0BE9 29 4 1F468 200D 1F9AF
+F0BEA 29 4 1F468 200D 1F9BC
+F0BEB 29 4 1F468 200D 1F9BD
+F0BEC 29 4 1F415 200D 1F9BA
+F0BED 29 4 1F90F 1F3FB
+F0BEE 29 4 1F90F 1F3FC
+F0BEF 29 4 1F90F 1F3FD
+F0BF0 29 4 1F90F 1F3FE
+F0BF1 29 4 1F90F 1F3FF
+F0BF2 29 4 1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FB
+F0BF3 29 4 1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FB
+F0BF4 29 4 1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FC
+F0BF5 29 4 1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FB
+F0BF6 29 4 1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FC
+F0BF7 29 4 1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FD
+F0BF8 29 4 1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FB
+F0BF9 29 4 1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FC
+F0BFA 29 4 1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FD
+F0BFB 29 4 1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FE
+F0BFC 29 4 1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FB
+F0BFD 29 4 1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FC
+F0BFE 29 4 1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FD
+F0BFF 29 4 1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FE
+F0C00 29 4 1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FF
+F0C01 29 4 1F9D1 200D 1F91D 200D 1F9D1
+F0C02 29 4 1F9BB 1F3FB
+F0C03 29 4 1F9BB 1F3FC
+F0C04 29 4 1F9BB 1F3FD
+F0C05 29 4 1F9BB 1F3FE
+F0C06 29 4 1F9BB 1F3FF
+F0C07 29 4 1F9CF 1F3FB 200D 2640
+F0C08 29 4 1F9CF 1F3FB 200D 2642
+F0C09 29 4 1F9CF 1F3FC 200D 2640
+F0C0A 29 4 1F9CF 1F3FC 200D 2642
+F0C0B 29 4 1F9CF 1F3FD 200D 2640
+F0C0C 29 4 1F9CF 1F3FD 200D 2642
+F0C0D 29 4 1F9CF 1F3FE 200D 2640
+F0C0E 29 4 1F9CF 1F3FE 200D 2642
+F0C0F 29 4 1F9CF 1F3FF 200D 2640
+F0C10 29 4 1F9CF 1F3FF 200D 2642
+F0C11 29 4 1F9CF 200D 2640
+F0C12 29 4 1F9CF 200D 2642
+F0C13 29 4 1F9CF 1F3FB
+F0C14 29 4 1F9CF 1F3FC
+F0C15 29 4 1F9CF 1F3FD
+F0C16 29 4 1F9CF 1F3FE
+F0C17 29 4 1F9CF 1F3FF
+F0C18 29 4 1F9CD 1F3FB 200D 2640
+F0C19 29 4 1F9CD 1F3FB 200D 2642
+F0C1A 29 4 1F9CD 1F3FC 200D 2640
+F0C1B 29 4 1F9CD 1F3FC 200D 2642
+F0C1C 29 4 1F9CD 1F3FD 200D 2640
+F0C1D 29 4 1F9CD 1F3FD 200D 2642
+F0C1E 29 4 1F9CD 1F3FE 200D 2640
+F0C1F 29 4 1F9CD 1F3FE 200D 2642
+F0C20 29 4 1F9CD 1F3FF 200D 2640
+F0C21 29 4 1F9CD 1F3FF 200D 2642
+F0C22 29 4 1F9CD 200D 2640
+F0C23 29 4 1F9CD 200D 2642
+F0C24 29 4 1F9CD 1F3FB
+F0C25 29 4 1F9CD 1F3FC
+F0C26 29 4 1F9CD 1F3FD
+F0C27 29 4 1F9CD 1F3FE
+F0C28 29 4 1F9CD 1F3FF
+F0C29 29 4 1F9CE 1F3FB 200D 2640
+F0C2A 29 4 1F9CE 1F3FB 200D 2642
+F0C2B 29 4 1F9CE 1F3FC 200D 2640
+F0C2C 29 4 1F9CE 1F3FC 200D 2642
+F0C2D 29 4 1F9CE 1F3FD 200D 2640
+F0C2E 29 4 1F9CE 1F3FD 200D 2642
+F0C2F 29 4 1F9CE 1F3FE 200D 2640
+F0C30 29 4 1F9CE 1F3FE 200D 2642
+F0C31 29 4 1F9CE 1F3FF 200D 2640
+F0C32 29 4 1F9CE 1F3FF 200D 2642
+F0C33 29 4 1F9CE 200D 2640
+F0C34 29 4 1F9CE 200D 2642
+F0C35 29 4 1F9CE 1F3FB
+F0C36 29 4 1F9CE 1F3FC
+F0C37 29 4 1F9CE 1F3FD
+F0C38 29 4 1F9CE 1F3FE
+F0C39 29 4 1F9CE 1F3FF
+F0C3A 29 5 1F469 1F3FB 200D 1F91D 200D 1F469 1F3FC
+F0C3B 29 5 1F469 1F3FB 200D 1F91D 200D 1F469 1F3FD
+F0C3C 29 5 1F469 1F3FB 200D 1F91D 200D 1F469 1F3FE
+F0C3D 29 5 1F469 1F3FB 200D 1F91D 200D 1F469 1F3FF
+F0C3E 29 5 1F469 1F3FC 200D 1F91D 200D 1F469 1F3FD
+F0C3F 29 5 1F469 1F3FC 200D 1F91D 200D 1F469 1F3FE
+F0C40 29 5 1F469 1F3FC 200D 1F91D 200D 1F469 1F3FF
+F0C41 29 5 1F469 1F3FD 200D 1F91D 200D 1F469 1F3FE
+F0C42 29 5 1F469 1F3FD 200D 1F91D 200D 1F469 1F3FF
+F0C43 29 5 1F469 1F3FE 200D 1F91D 200D 1F469 1F3FF
+F0C44 29 5 1F468 1F3FB 200D 1F91D 200D 1F468 1F3FC
+F0C45 29 5 1F468 1F3FB 200D 1F91D 200D 1F468 1F3FD
+F0C46 29 5 1F468 1F3FB 200D 1F91D 200D 1F468 1F3FE
+F0C47 29 5 1F468 1F3FB 200D 1F91D 200D 1F468 1F3FF
+F0C48 29 5 1F468 1F3FC 200D 1F91D 200D 1F468 1F3FD
+F0C49 29 5 1F468 1F3FC 200D 1F91D 200D 1F468 1F3FE
+F0C4A 29 5 1F468 1F3FC 200D 1F91D 200D 1F468 1F3FF
+F0C4B 29 5 1F468 1F3FD 200D 1F91D 200D 1F468 1F3FE
+F0C4C 29 5 1F468 1F3FD 200D 1F91D 200D 1F468 1F3FF
+F0C4D 29 5 1F468 1F3FE 200D 1F91D 200D 1F468 1F3FF
+F0C4E 29 5 1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FC
+F0C4F 29 5 1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FD
+F0C50 29 5 1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FE
+F0C51 29 5 1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FF
+F0C52 29 5 1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FD
+F0C53 29 5 1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FE
+F0C54 29 5 1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FF
+F0C55 29 5 1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FE
+F0C56 29 5 1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FF
+F0C57 29 5 1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FF
+F0C58 29 5 1F9D1 1F3FB 200D 2695
+F0C59 29 5 1F9D1 1F3FB 200D 2696
+F0C5A 29 5 1F9D1 1F3FB 200D 2708
+F0C5B 29 5 1F9D1 1F3FB 200D 1F33E
+F0C5C 29 5 1F9D1 1F3FB 200D 1F373
+F0C5D 29 5 1F9D1 1F3FB 200D 1F393
+F0C5E 29 5 1F9D1 1F3FB 200D 1F3A4
+F0C5F 29 5 1F9D1 1F3FB 200D 1F3A8
+F0C60 29 5 1F9D1 1F3FB 200D 1F3EB
+F0C61 29 5 1F9D1 1F3FB 200D 1F3ED
+F0C62 29 5 1F9D1 1F3FB 200D 1F4BB
+F0C63 29 5 1F9D1 1F3FB 200D 1F4BC
+F0C64 29 5 1F9D1 1F3FB 200D 1F527
+F0C65 29 5 1F9D1 1F3FB 200D 1F52C
+F0C66 29 5 1F9D1 1F3FB 200D 1F680
+F0C67 29 5 1F9D1 1F3FB 200D 1F692
+F0C68 29 5 1F9D1 1F3FB 200D 1F9AF
+F0C69 29 5 1F9D1 1F3FB 200D 1F9B0
+F0C6A 29 5 1F9D1 1F3FB 200D 1F9B1
+F0C6B 29 5 1F9D1 1F3FB 200D 1F9B2
+F0C6C 29 5 1F9D1 1F3FB 200D 1F9B3
+F0C6D 29 5 1F9D1 1F3FB 200D 1F9BC
+F0C6E 29 5 1F9D1 1F3FB 200D 1F9BD
+F0C6F 29 5 1F9D1 1F3FC 200D 2695
+F0C70 29 5 1F9D1 1F3FC 200D 2696
+F0C71 29 5 1F9D1 1F3FC 200D 2708
+F0C72 29 5 1F9D1 1F3FC 200D 1F33E
+F0C73 29 5 1F9D1 1F3FC 200D 1F373
+F0C74 29 5 1F9D1 1F3FC 200D 1F393
+F0C75 29 5 1F9D1 1F3FC 200D 1F3A4
+F0C76 29 5 1F9D1 1F3FC 200D 1F3A8
+F0C77 29 5 1F9D1 1F3FC 200D 1F3EB
+F0C78 29 5 1F9D1 1F3FC 200D 1F3ED
+F0C79 29 5 1F9D1 1F3FC 200D 1F4BB
+F0C7A 29 5 1F9D1 1F3FC 200D 1F4BC
+F0C7B 29 5 1F9D1 1F3FC 200D 1F527
+F0C7C 29 5 1F9D1 1F3FC 200D 1F52C
+F0C7D 29 5 1F9D1 1F3FC 200D 1F680
+F0C7E 29 5 1F9D1 1F3FC 200D 1F692
+F0C7F 29 5 1F9D1 1F3FC 200D 1F9AF
+F0C80 29 5 1F9D1 1F3FC 200D 1F9B0
+F0C81 29 5 1F9D1 1F3FC 200D 1F9B1
+F0C82 29 5 1F9D1 1F3FC 200D 1F9B2
+F0C83 29 5 1F9D1 1F3FC 200D 1F9B3
+F0C84 29 5 1F9D1 1F3FC 200D 1F9BC
+F0C85 29 5 1F9D1 1F3FC 200D 1F9BD
+F0C86 29 5 1F9D1 1F3FD 200D 2695
+F0C87 29 5 1F9D1 1F3FD 200D 2696
+F0C88 29 5 1F9D1 1F3FD 200D 2708
+F0C89 29 5 1F9D1 1F3FD 200D 1F33E
+F0C8A 29 5 1F9D1 1F3FD 200D 1F373
+F0C8B 29 5 1F9D1 1F3FD 200D 1F393
+F0C8C 29 5 1F9D1 1F3FD 200D 1F3A4
+F0C8D 29 5 1F9D1 1F3FD 200D 1F3A8
+F0C8E 29 5 1F9D1 1F3FD 200D 1F3EB
+F0C8F 29 5 1F9D1 1F3FD 200D 1F3ED
+F0C90 29 5 1F9D1 1F3FD 200D 1F4BB
+F0C91 29 5 1F9D1 1F3FD 200D 1F4BC
+F0C92 29 5 1F9D1 1F3FD 200D 1F527
+F0C93 29 5 1F9D1 1F3FD 200D 1F52C
+F0C94 29 5 1F9D1 1F3FD 200D 1F680
+F0C95 29 5 1F9D1 1F3FD 200D 1F692
+F0C96 29 5 1F9D1 1F3FD 200D 1F9AF
+F0C97 29 5 1F9D1 1F3FD 200D 1F9B0
+F0C98 29 5 1F9D1 1F3FD 200D 1F9B1
+F0C99 29 5 1F9D1 1F3FD 200D 1F9B2
+F0C9A 29 5 1F9D1 1F3FD 200D 1F9B3
+F0C9B 29 5 1F9D1 1F3FD 200D 1F9BC
+F0C9C 29 5 1F9D1 1F3FD 200D 1F9BD
+F0C9D 29 5 1F9D1 1F3FE 200D 2695
+F0C9E 29 5 1F9D1 1F3FE 200D 2696
+F0C9F 29 5 1F9D1 1F3FE 200D 2708
+F0CA0 29 5 1F9D1 1F3FE 200D 1F33E
+F0CA1 29 5 1F9D1 1F3FE 200D 1F373
+F0CA2 29 5 1F9D1 1F3FE 200D 1F393
+F0CA3 29 5 1F9D1 1F3FE 200D 1F3A4
+F0CA4 29 5 1F9D1 1F3FE 200D 1F3A8
+F0CA5 29 5 1F9D1 1F3FE 200D 1F3EB
+F0CA6 29 5 1F9D1 1F3FE 200D 1F3ED
+F0CA7 29 5 1F9D1 1F3FE 200D 1F4BB
+F0CA8 29 5 1F9D1 1F3FE 200D 1F4BC
+F0CA9 29 5 1F9D1 1F3FE 200D 1F527
+F0CAA 29 5 1F9D1 1F3FE 200D 1F52C
+F0CAB 29 5 1F9D1 1F3FE 200D 1F680
+F0CAC 29 5 1F9D1 1F3FE 200D 1F692
+F0CAD 29 5 1F9D1 1F3FE 200D 1F9AF
+F0CAE 29 5 1F9D1 1F3FE 200D 1F9B0
+F0CAF 29 5 1F9D1 1F3FE 200D 1F9B1
+F0CB0 29 5 1F9D1 1F3FE 200D 1F9B2
+F0CB1 29 5 1F9D1 1F3FE 200D 1F9B3
+F0CB2 29 5 1F9D1 1F3FE 200D 1F9BC
+F0CB3 29 5 1F9D1 1F3FE 200D 1F9BD
+F0CB4 29 5 1F9D1 1F3FF 200D 2695
+F0CB5 29 5 1F9D1 1F3FF 200D 2696
+F0CB6 29 5 1F9D1 1F3FF 200D 2708
+F0CB7 29 5 1F9D1 1F3FF 200D 1F33E
+F0CB8 29 5 1F9D1 1F3FF 200D 1F373
+F0CB9 29 5 1F9D1 1F3FF 200D 1F393
+F0CBA 29 5 1F9D1 1F3FF 200D 1F3A4
+F0CBB 29 5 1F9D1 1F3FF 200D 1F3A8
+F0CBC 29 5 1F9D1 1F3FF 200D 1F3EB
+F0CBD 29 5 1F9D1 1F3FF 200D 1F3ED
+F0CBE 29 5 1F9D1 1F3FF 200D 1F4BB
+F0CBF 29 5 1F9D1 1F3FF 200D 1F4BC
+F0CC0 29 5 1F9D1 1F3FF 200D 1F527
+F0CC1 29 5 1F9D1 1F3FF 200D 1F52C
+F0CC2 29 5 1F9D1 1F3FF 200D 1F680
+F0CC3 29 5 1F9D1 1F3FF 200D 1F692
+F0CC4 29 5 1F9D1 1F3FF 200D 1F9AF
+F0CC5 29 5 1F9D1 1F3FF 200D 1F9B0
+F0CC6 29 5 1F9D1 1F3FF 200D 1F9B1
+F0CC7 29 5 1F9D1 1F3FF 200D 1F9B2
+F0CC8 29 5 1F9D1 1F3FF 200D 1F9B3
+F0CC9 29 5 1F9D1 1F3FF 200D 1F9BC
+F0CCA 29 5 1F9D1 1F3FF 200D 1F9BD
+F0CCB 29 5 1F9D1 200D 2695
+F0CCC 29 5 1F9D1 200D 2696
+F0CCD 29 5 1F9D1 200D 2708
+F0CCE 29 5 1F9D1 200D 1F33E
+F0CCF 29 5 1F9D1 200D 1F373
+F0CD0 29 5 1F9D1 200D 1F393
+F0CD1 29 5 1F9D1 200D 1F3A4
+F0CD2 29 5 1F9D1 200D 1F3A8
+F0CD3 29 5 1F9D1 200D 1F3EB
+F0CD4 29 5 1F9D1 200D 1F3ED
+F0CD5 29 5 1F9D1 200D 1F4BB
+F0CD6 29 5 1F9D1 200D 1F4BC
+F0CD7 29 5 1F9D1 200D 1F527
+F0CD8 29 5 1F9D1 200D 1F52C
+F0CD9 29 5 1F9D1 200D 1F680
+F0CDA 29 5 1F9D1 200D 1F692
+F0CDB 29 5 1F9D1 200D 1F9AF
+F0CDC 29 5 1F9D1 200D 1F9B0
+F0CDD 29 5 1F9D1 200D 1F9B1
+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/data/flatbuffer_header.txt b/emoji-compat/data/flatbuffer_header.txt index d67f3a8..2b40a04 100644 --- a/emoji-compat/data/flatbuffer_header.txt +++ b/emoji-compat/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/font/NotoColorEmojiCompat.ttf b/emoji-compat/font/NotoColorEmojiCompat.ttf Binary files differindex b518b8b..c8f7d6a 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 index 49a1e2b..0b2a694 100644 --- a/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java +++ b/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java @@ -15,146 +15,75 @@ * limitations under the License. */ -package androidx.text.emoji.flatbuffer; +// automatically generated by the FlatBuffers compiler, do not modify -import com.google.flatbuffers.FlatBufferBuilder; -import com.google.flatbuffers.Table; +package androidx.text.emoji.flatbuffer; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; +import java.nio.*; +import java.lang.*; +import java.util.*; +import com.google.flatbuffers.*; -/** - * 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; - } + 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/src/java/androidx/text/emoji/flatbuffer/MetadataList.java b/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataList.java index 97b12a4..6330098 100644 --- a/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataList.java +++ b/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataList.java @@ -15,110 +15,62 @@ * limitations under the License. */ -package androidx.text.emoji.flatbuffer; +// automatically generated by the FlatBuffers compiler, do not modify -import com.google.flatbuffers.FlatBufferBuilder; -import com.google.flatbuffers.Table; +package androidx.text.emoji.flatbuffer; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; +import java.nio.*; +import java.lang.*; +import java.util.*; +import com.google.flatbuffers.*; -/** - * 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); - } + 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/supported-emojis/emojis.txt b/emoji-compat/supported-emojis/emojis.txt index 0e2ddc2..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 @@ -708,6 +710,7 @@ 1F413 1F414 1F415 +1F415 200D 1F9BA 1F415 FE0F 1F416 1F417 @@ -749,6 +752,7 @@ 1F439 1F43A 1F43B +1F43B 200D 2744 FE0F 1F43C 1F43D 1F43E @@ -881,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 @@ -892,16 +897,34 @@ 1F468 1F3FB 200D 1F52C 1F468 1F3FB 200D 1F680 1F468 1F3FB 200D 1F692 +1F468 1F3FB 200D 1F91D 200D 1F468 1F3FC +1F468 1F3FB 200D 1F91D 200D 1F468 1F3FD +1F468 1F3FB 200D 1F91D 200D 1F468 1F3FE +1F468 1F3FB 200D 1F91D 200D 1F468 1F3FF +1F468 1F3FB 200D 1F9AF 1F468 1F3FB 200D 1F9B0 1F468 1F3FB 200D 1F9B1 1F468 1F3FB 200D 1F9B2 1F468 1F3FB 200D 1F9B3 +1F468 1F3FB 200D 1F9BC +1F468 1F3FB 200D 1F9BD 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 @@ -913,16 +936,34 @@ 1F468 1F3FC 200D 1F52C 1F468 1F3FC 200D 1F680 1F468 1F3FC 200D 1F692 +1F468 1F3FC 200D 1F91D 200D 1F468 1F3FB +1F468 1F3FC 200D 1F91D 200D 1F468 1F3FD +1F468 1F3FC 200D 1F91D 200D 1F468 1F3FE +1F468 1F3FC 200D 1F91D 200D 1F468 1F3FF +1F468 1F3FC 200D 1F9AF 1F468 1F3FC 200D 1F9B0 1F468 1F3FC 200D 1F9B1 1F468 1F3FC 200D 1F9B2 1F468 1F3FC 200D 1F9B3 +1F468 1F3FC 200D 1F9BC +1F468 1F3FC 200D 1F9BD 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 @@ -934,16 +975,34 @@ 1F468 1F3FD 200D 1F52C 1F468 1F3FD 200D 1F680 1F468 1F3FD 200D 1F692 +1F468 1F3FD 200D 1F91D 200D 1F468 1F3FB +1F468 1F3FD 200D 1F91D 200D 1F468 1F3FC +1F468 1F3FD 200D 1F91D 200D 1F468 1F3FE +1F468 1F3FD 200D 1F91D 200D 1F468 1F3FF +1F468 1F3FD 200D 1F9AF 1F468 1F3FD 200D 1F9B0 1F468 1F3FD 200D 1F9B1 1F468 1F3FD 200D 1F9B2 1F468 1F3FD 200D 1F9B3 +1F468 1F3FD 200D 1F9BC +1F468 1F3FD 200D 1F9BD 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 @@ -955,16 +1014,34 @@ 1F468 1F3FE 200D 1F52C 1F468 1F3FE 200D 1F680 1F468 1F3FE 200D 1F692 +1F468 1F3FE 200D 1F91D 200D 1F468 1F3FB +1F468 1F3FE 200D 1F91D 200D 1F468 1F3FC +1F468 1F3FE 200D 1F91D 200D 1F468 1F3FD +1F468 1F3FE 200D 1F91D 200D 1F468 1F3FF +1F468 1F3FE 200D 1F9AF 1F468 1F3FE 200D 1F9B0 1F468 1F3FE 200D 1F9B1 1F468 1F3FE 200D 1F9B2 1F468 1F3FE 200D 1F9B3 +1F468 1F3FE 200D 1F9BC +1F468 1F3FE 200D 1F9BD 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 @@ -976,15 +1053,33 @@ 1F468 1F3FF 200D 1F52C 1F468 1F3FF 200D 1F680 1F468 1F3FF 200D 1F692 +1F468 1F3FF 200D 1F91D 200D 1F468 1F3FB +1F468 1F3FF 200D 1F91D 200D 1F468 1F3FC +1F468 1F3FF 200D 1F91D 200D 1F468 1F3FD +1F468 1F3FF 200D 1F91D 200D 1F468 1F3FE +1F468 1F3FF 200D 1F9AF 1F468 1F3FF 200D 1F9B0 1F468 1F3FF 200D 1F9B1 1F468 1F3FF 200D 1F9B2 1F468 1F3FF 200D 1F9B3 +1F468 1F3FF 200D 1F9BC +1F468 1F3FF 200D 1F9BD 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 @@ -1011,10 +1106,13 @@ 1F468 200D 1F52C 1F468 200D 1F680 1F468 200D 1F692 +1F468 200D 1F9AF 1F468 200D 1F9B0 1F468 200D 1F9B1 1F468 200D 1F9B2 1F468 200D 1F9B3 +1F468 200D 1F9BC +1F468 200D 1F9BD 1F468 200D 2695 FE0F 1F468 200D 2696 FE0F 1F468 200D 2708 FE0F @@ -1024,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 @@ -1035,16 +1134,48 @@ 1F469 1F3FB 200D 1F52C 1F469 1F3FB 200D 1F680 1F469 1F3FB 200D 1F692 +1F469 1F3FB 200D 1F91D 200D 1F468 1F3FC +1F469 1F3FB 200D 1F91D 200D 1F468 1F3FD +1F469 1F3FB 200D 1F91D 200D 1F468 1F3FE +1F469 1F3FB 200D 1F91D 200D 1F468 1F3FF +1F469 1F3FB 200D 1F91D 200D 1F469 1F3FC +1F469 1F3FB 200D 1F91D 200D 1F469 1F3FD +1F469 1F3FB 200D 1F91D 200D 1F469 1F3FE +1F469 1F3FB 200D 1F91D 200D 1F469 1F3FF +1F469 1F3FB 200D 1F9AF 1F469 1F3FB 200D 1F9B0 1F469 1F3FB 200D 1F9B1 1F469 1F3FB 200D 1F9B2 1F469 1F3FB 200D 1F9B3 +1F469 1F3FB 200D 1F9BC +1F469 1F3FB 200D 1F9BD 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 @@ -1056,16 +1187,48 @@ 1F469 1F3FC 200D 1F52C 1F469 1F3FC 200D 1F680 1F469 1F3FC 200D 1F692 +1F469 1F3FC 200D 1F91D 200D 1F468 1F3FB +1F469 1F3FC 200D 1F91D 200D 1F468 1F3FD +1F469 1F3FC 200D 1F91D 200D 1F468 1F3FE +1F469 1F3FC 200D 1F91D 200D 1F468 1F3FF +1F469 1F3FC 200D 1F91D 200D 1F469 1F3FB +1F469 1F3FC 200D 1F91D 200D 1F469 1F3FD +1F469 1F3FC 200D 1F91D 200D 1F469 1F3FE +1F469 1F3FC 200D 1F91D 200D 1F469 1F3FF +1F469 1F3FC 200D 1F9AF 1F469 1F3FC 200D 1F9B0 1F469 1F3FC 200D 1F9B1 1F469 1F3FC 200D 1F9B2 1F469 1F3FC 200D 1F9B3 +1F469 1F3FC 200D 1F9BC +1F469 1F3FC 200D 1F9BD 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 @@ -1077,16 +1240,48 @@ 1F469 1F3FD 200D 1F52C 1F469 1F3FD 200D 1F680 1F469 1F3FD 200D 1F692 +1F469 1F3FD 200D 1F91D 200D 1F468 1F3FB +1F469 1F3FD 200D 1F91D 200D 1F468 1F3FC +1F469 1F3FD 200D 1F91D 200D 1F468 1F3FE +1F469 1F3FD 200D 1F91D 200D 1F468 1F3FF +1F469 1F3FD 200D 1F91D 200D 1F469 1F3FB +1F469 1F3FD 200D 1F91D 200D 1F469 1F3FC +1F469 1F3FD 200D 1F91D 200D 1F469 1F3FE +1F469 1F3FD 200D 1F91D 200D 1F469 1F3FF +1F469 1F3FD 200D 1F9AF 1F469 1F3FD 200D 1F9B0 1F469 1F3FD 200D 1F9B1 1F469 1F3FD 200D 1F9B2 1F469 1F3FD 200D 1F9B3 +1F469 1F3FD 200D 1F9BC +1F469 1F3FD 200D 1F9BD 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 @@ -1098,16 +1293,48 @@ 1F469 1F3FE 200D 1F52C 1F469 1F3FE 200D 1F680 1F469 1F3FE 200D 1F692 +1F469 1F3FE 200D 1F91D 200D 1F468 1F3FB +1F469 1F3FE 200D 1F91D 200D 1F468 1F3FC +1F469 1F3FE 200D 1F91D 200D 1F468 1F3FD +1F469 1F3FE 200D 1F91D 200D 1F468 1F3FF +1F469 1F3FE 200D 1F91D 200D 1F469 1F3FB +1F469 1F3FE 200D 1F91D 200D 1F469 1F3FC +1F469 1F3FE 200D 1F91D 200D 1F469 1F3FD +1F469 1F3FE 200D 1F91D 200D 1F469 1F3FF +1F469 1F3FE 200D 1F9AF 1F469 1F3FE 200D 1F9B0 1F469 1F3FE 200D 1F9B1 1F469 1F3FE 200D 1F9B2 1F469 1F3FE 200D 1F9B3 +1F469 1F3FE 200D 1F9BC +1F469 1F3FE 200D 1F9BD 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 @@ -1119,15 +1346,47 @@ 1F469 1F3FF 200D 1F52C 1F469 1F3FF 200D 1F680 1F469 1F3FF 200D 1F692 +1F469 1F3FF 200D 1F91D 200D 1F468 1F3FB +1F469 1F3FF 200D 1F91D 200D 1F468 1F3FC +1F469 1F3FF 200D 1F91D 200D 1F468 1F3FD +1F469 1F3FF 200D 1F91D 200D 1F468 1F3FE +1F469 1F3FF 200D 1F91D 200D 1F469 1F3FB +1F469 1F3FF 200D 1F91D 200D 1F469 1F3FC +1F469 1F3FF 200D 1F91D 200D 1F469 1F3FD +1F469 1F3FF 200D 1F91D 200D 1F469 1F3FE +1F469 1F3FF 200D 1F9AF 1F469 1F3FF 200D 1F9B0 1F469 1F3FF 200D 1F9B1 1F469 1F3FF 200D 1F9B2 1F469 1F3FF 200D 1F9B3 +1F469 1F3FF 200D 1F9BC +1F469 1F3FF 200D 1F9BD 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 @@ -1149,10 +1408,13 @@ 1F469 200D 1F52C 1F469 200D 1F680 1F469 200D 1F692 +1F469 200D 1F9AF 1F469 200D 1F9B0 1F469 200D 1F9B1 1F469 200D 1F9B2 1F469 200D 1F9B3 +1F469 200D 1F9BC +1F469 200D 1F9BD 1F469 200D 2695 FE0F 1F469 200D 2696 FE0F 1F469 200D 2708 FE0F @@ -1163,8 +1425,23 @@ 1F46A 1F46A FE0F 1F46B +1F46B 1F3FB +1F46B 1F3FC +1F46B 1F3FD +1F46B 1F3FE +1F46B 1F3FF 1F46C +1F46C 1F3FB +1F46C 1F3FC +1F46C 1F3FD +1F46C 1F3FE +1F46C 1F3FF 1F46D +1F46D 1F3FB +1F46D 1F3FC +1F46D 1F3FD +1F46D 1F3FE +1F46D 1F3FF 1F46E 1F46E 1F3FB 1F46E 1F3FB 200D 2640 FE0F @@ -1188,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 @@ -1383,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 @@ -1772,6 +2071,7 @@ 1F62C 1F62D 1F62E +1F62E 200D 1F4A8 1F62F 1F630 1F631 @@ -1779,7 +2079,9 @@ 1F633 1F634 1F635 +1F635 200D 1F4AB 1F636 +1F636 200D 1F32B FE0F 1F637 1F638 1F639 @@ -2083,6 +2385,9 @@ 1F6D0 1F6D1 1F6D2 +1F6D5 +1F6D6 +1F6D7 1F6E0 FE0F 1F6E1 FE0F 1F6E2 FE0F @@ -2100,6 +2405,35 @@ 1F6F7 1F6F8 1F6F9 +1F6FA +1F6FB +1F6FC +1F7E0 +1F7E1 +1F7E2 +1F7E3 +1F7E4 +1F7E5 +1F7E6 +1F7E7 +1F7E8 +1F7E9 +1F7EA +1F7EB +1F90C +1F90C 1F3FB +1F90C 1F3FC +1F90C 1F3FD +1F90C 1F3FE +1F90C 1F3FF +1F90D +1F90E +1F90F +1F90F 1F3FB +1F90F 1F3FC +1F90F 1F3FD +1F90F 1F3FE +1F90F 1F3FF 1F910 1F911 1F912 @@ -2221,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 @@ -2340,6 +2686,7 @@ 1F93E 1F3FF 200D 2642 FE0F 1F93E 200D 2640 FE0F 1F93E 200D 2642 FE0F +1F93F 1F940 1F941 1F942 @@ -2388,11 +2735,21 @@ 1F96E 1F96F 1F970 +1F971 +1F972 1F973 1F974 1F975 1F976 +1F977 +1F977 1F3FB +1F977 1F3FC +1F977 1F3FD +1F977 1F3FE +1F977 1F3FF +1F978 1F97A +1F97B 1F97C 1F97D 1F97E @@ -2432,6 +2789,19 @@ 1F9A0 1F9A1 1F9A2 +1F9A3 +1F9A4 +1F9A5 +1F9A6 +1F9A7 +1F9A8 +1F9A9 +1F9AA +1F9AB +1F9AC +1F9AD +1F9AE +1F9AF 1F9B0 1F9B1 1F9B2 @@ -2486,16 +2856,306 @@ 1F9B9 1F3FF 200D 2642 FE0F 1F9B9 200D 2640 FE0F 1F9B9 200D 2642 FE0F +1F9BA +1F9BB +1F9BB 1F3FB +1F9BB 1F3FC +1F9BB 1F3FD +1F9BB 1F3FE +1F9BB 1F3FF +1F9BC +1F9BD +1F9BE +1F9BF 1F9C0 1F9C1 1F9C2 +1F9C3 +1F9C4 +1F9C5 +1F9C6 +1F9C7 +1F9C8 +1F9C9 +1F9CA +1F9CB +1F9CD +1F9CD 1F3FB +1F9CD 1F3FB 200D 2640 FE0F +1F9CD 1F3FB 200D 2642 FE0F +1F9CD 1F3FC +1F9CD 1F3FC 200D 2640 FE0F +1F9CD 1F3FC 200D 2642 FE0F +1F9CD 1F3FD +1F9CD 1F3FD 200D 2640 FE0F +1F9CD 1F3FD 200D 2642 FE0F +1F9CD 1F3FE +1F9CD 1F3FE 200D 2640 FE0F +1F9CD 1F3FE 200D 2642 FE0F +1F9CD 1F3FF +1F9CD 1F3FF 200D 2640 FE0F +1F9CD 1F3FF 200D 2642 FE0F +1F9CD 200D 2640 FE0F +1F9CD 200D 2642 FE0F +1F9CE +1F9CE 1F3FB +1F9CE 1F3FB 200D 2640 FE0F +1F9CE 1F3FB 200D 2642 FE0F +1F9CE 1F3FC +1F9CE 1F3FC 200D 2640 FE0F +1F9CE 1F3FC 200D 2642 FE0F +1F9CE 1F3FD +1F9CE 1F3FD 200D 2640 FE0F +1F9CE 1F3FD 200D 2642 FE0F +1F9CE 1F3FE +1F9CE 1F3FE 200D 2640 FE0F +1F9CE 1F3FE 200D 2642 FE0F +1F9CE 1F3FF +1F9CE 1F3FF 200D 2640 FE0F +1F9CE 1F3FF 200D 2642 FE0F +1F9CE 200D 2640 FE0F +1F9CE 200D 2642 FE0F +1F9CF +1F9CF 1F3FB +1F9CF 1F3FB 200D 2640 FE0F +1F9CF 1F3FB 200D 2642 FE0F +1F9CF 1F3FC +1F9CF 1F3FC 200D 2640 FE0F +1F9CF 1F3FC 200D 2642 FE0F +1F9CF 1F3FD +1F9CF 1F3FD 200D 2640 FE0F +1F9CF 1F3FD 200D 2642 FE0F +1F9CF 1F3FE +1F9CF 1F3FE 200D 2640 FE0F +1F9CF 1F3FE 200D 2642 FE0F +1F9CF 1F3FF +1F9CF 1F3FF 200D 2640 FE0F +1F9CF 1F3FF 200D 2642 FE0F +1F9CF 200D 2640 FE0F +1F9CF 200D 2642 FE0F 1F9D0 1F9D1 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 +1F9D1 1F3FB 200D 1F3EB +1F9D1 1F3FB 200D 1F3ED +1F9D1 1F3FB 200D 1F4BB +1F9D1 1F3FB 200D 1F4BC +1F9D1 1F3FB 200D 1F527 +1F9D1 1F3FB 200D 1F52C +1F9D1 1F3FB 200D 1F680 +1F9D1 1F3FB 200D 1F692 +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FB +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FC +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FD +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FE +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FF +1F9D1 1F3FB 200D 1F9AF +1F9D1 1F3FB 200D 1F9B0 +1F9D1 1F3FB 200D 1F9B1 +1F9D1 1F3FB 200D 1F9B2 +1F9D1 1F3FB 200D 1F9B3 +1F9D1 1F3FB 200D 1F9BC +1F9D1 1F3FB 200D 1F9BD +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 +1F9D1 1F3FC 200D 1F3EB +1F9D1 1F3FC 200D 1F3ED +1F9D1 1F3FC 200D 1F4BB +1F9D1 1F3FC 200D 1F4BC +1F9D1 1F3FC 200D 1F527 +1F9D1 1F3FC 200D 1F52C +1F9D1 1F3FC 200D 1F680 +1F9D1 1F3FC 200D 1F692 +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FB +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FC +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FD +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FE +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FF +1F9D1 1F3FC 200D 1F9AF +1F9D1 1F3FC 200D 1F9B0 +1F9D1 1F3FC 200D 1F9B1 +1F9D1 1F3FC 200D 1F9B2 +1F9D1 1F3FC 200D 1F9B3 +1F9D1 1F3FC 200D 1F9BC +1F9D1 1F3FC 200D 1F9BD +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 +1F9D1 1F3FD 200D 1F3EB +1F9D1 1F3FD 200D 1F3ED +1F9D1 1F3FD 200D 1F4BB +1F9D1 1F3FD 200D 1F4BC +1F9D1 1F3FD 200D 1F527 +1F9D1 1F3FD 200D 1F52C +1F9D1 1F3FD 200D 1F680 +1F9D1 1F3FD 200D 1F692 +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FB +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FC +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FD +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FE +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FF +1F9D1 1F3FD 200D 1F9AF +1F9D1 1F3FD 200D 1F9B0 +1F9D1 1F3FD 200D 1F9B1 +1F9D1 1F3FD 200D 1F9B2 +1F9D1 1F3FD 200D 1F9B3 +1F9D1 1F3FD 200D 1F9BC +1F9D1 1F3FD 200D 1F9BD +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 +1F9D1 1F3FE 200D 1F3EB +1F9D1 1F3FE 200D 1F3ED +1F9D1 1F3FE 200D 1F4BB +1F9D1 1F3FE 200D 1F4BC +1F9D1 1F3FE 200D 1F527 +1F9D1 1F3FE 200D 1F52C +1F9D1 1F3FE 200D 1F680 +1F9D1 1F3FE 200D 1F692 +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FB +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FC +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FD +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FE +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FF +1F9D1 1F3FE 200D 1F9AF +1F9D1 1F3FE 200D 1F9B0 +1F9D1 1F3FE 200D 1F9B1 +1F9D1 1F3FE 200D 1F9B2 +1F9D1 1F3FE 200D 1F9B3 +1F9D1 1F3FE 200D 1F9BC +1F9D1 1F3FE 200D 1F9BD +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 +1F9D1 1F3FF 200D 1F3EB +1F9D1 1F3FF 200D 1F3ED +1F9D1 1F3FF 200D 1F4BB +1F9D1 1F3FF 200D 1F4BC +1F9D1 1F3FF 200D 1F527 +1F9D1 1F3FF 200D 1F52C +1F9D1 1F3FF 200D 1F680 +1F9D1 1F3FF 200D 1F692 +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FB +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FC +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FD +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FE +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FF +1F9D1 1F3FF 200D 1F9AF +1F9D1 1F3FF 200D 1F9B0 +1F9D1 1F3FF 200D 1F9B1 +1F9D1 1F3FF 200D 1F9B2 +1F9D1 1F3FF 200D 1F9B3 +1F9D1 1F3FF 200D 1F9BC +1F9D1 1F3FF 200D 1F9BD +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 +1F9D1 200D 1F3EB +1F9D1 200D 1F3ED +1F9D1 200D 1F4BB +1F9D1 200D 1F4BC +1F9D1 200D 1F527 +1F9D1 200D 1F52C +1F9D1 200D 1F680 +1F9D1 200D 1F692 +1F9D1 200D 1F91D 200D 1F9D1 +1F9D1 200D 1F9AF +1F9D1 200D 1F9B0 +1F9D1 200D 1F9B1 +1F9D1 200D 1F9B2 +1F9D1 200D 1F9B3 +1F9D1 200D 1F9BC +1F9D1 200D 1F9BD +1F9D1 200D 2695 FE0F +1F9D1 200D 2696 FE0F +1F9D1 200D 2708 FE0F 1F9D2 1F9D2 1F3FB 1F9D2 1F3FC @@ -2510,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 @@ -2702,6 +3374,63 @@ 1F9FD 1F9FE 1F9FF +1FA70 +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 @@ -2836,6 +3565,7 @@ 26A0 FE0F 26A1 26A1 FE0F +26A7 FE0F 26AA 26AA FE0F 26AB @@ -2945,6 +3675,8 @@ 2763 FE0F 2764 2764 FE0F +2764 FE0F 200D 1F525 +2764 FE0F 200D 1FA79 2795 2796 2797 diff --git a/emoji/Android.bp b/emoji/Android.bp new file mode 100644 index 0000000..7565e43 --- /dev/null +++ b/emoji/Android.bp @@ -0,0 +1,18 @@ +// Copyright (C) 2019 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. + +prebuilt_font { + name: "NotoColorEmoji.ttf", + src: "NotoColorEmoji.ttf", +} diff --git a/emoji/NotoColorEmoji.ttf b/emoji/NotoColorEmoji.ttf Binary files differindex 6bc96eb..caf75a0 100644 --- a/emoji/NotoColorEmoji.ttf +++ b/emoji/NotoColorEmoji.ttf @@ -25,24 +25,27 @@ PRODUCT_PACKAGES := \ NotoSansAdlam-Regular.ttf \ NotoSansAhom-Regular.otf \ NotoSansAnatolianHieroglyphs-Regular.otf \ - NotoSansArmenian-Bold.ttf \ - NotoSansArmenian-Regular.ttf \ + NotoSansArmenian-Bold.otf \ + NotoSansArmenian-Medium.otf \ + NotoSansArmenian-Regular.otf \ NotoSansAvestan-Regular.ttf \ NotoSansBalinese-Regular.ttf \ NotoSansBamum-Regular.ttf \ NotoSansBassaVah-Regular.otf \ NotoSansBatak-Regular.ttf \ - NotoSansBengali-Bold.ttf \ - NotoSansBengali-Regular.ttf \ - NotoSansBengaliUI-Bold.ttf \ - NotoSansBengaliUI-Regular.ttf \ + NotoSansBengali-Bold.otf \ + NotoSansBengali-Medium.otf \ + NotoSansBengali-Regular.otf \ + NotoSansBengaliUI-Bold.otf \ + NotoSansBengaliUI-Medium.otf \ + NotoSansBengaliUI-Regular.otf \ NotoSansBhaiksuki-Regular.otf \ NotoSansBrahmi-Regular.ttf \ NotoSansBuginese-Regular.ttf \ NotoSansBuhid-Regular.ttf \ NotoSansCanadianAboriginal-Regular.ttf \ NotoSansCarian-Regular.ttf \ - NotoSansChakma-Regular.ttf \ + NotoSansChakma-Regular.otf \ NotoSansCham-Bold.ttf \ NotoSansCham-Regular.ttf \ NotoSansCherokee-Regular.ttf \ @@ -51,16 +54,19 @@ PRODUCT_PACKAGES := \ NotoSansCuneiform-Regular.ttf \ NotoSansCypriot-Regular.ttf \ NotoSansDeseret-Regular.ttf \ - NotoSansDevanagari-Bold.ttf \ - NotoSansDevanagari-Regular.ttf \ - NotoSansDevanagariUI-Bold.ttf \ - NotoSansDevanagariUI-Regular.ttf \ + NotoSansDevanagari-Bold.otf \ + NotoSansDevanagari-Medium.otf \ + NotoSansDevanagari-Regular.otf \ + NotoSansDevanagariUI-Bold.otf \ + NotoSansDevanagariUI-Medium.otf \ + NotoSansDevanagariUI-Regular.otf \ NotoSansEgyptianHieroglyphs-Regular.ttf \ NotoSansElbasan-Regular.otf \ NotoSansEthiopic-Bold.ttf \ NotoSansEthiopic-Regular.ttf \ - NotoSansGeorgian-Bold.ttf \ - NotoSansGeorgian-Regular.ttf \ + NotoSansGeorgian-Bold.otf \ + NotoSansGeorgian-Medium.otf \ + NotoSansGeorgian-Regular.otf \ NotoSansGlagolitic-Regular.ttf \ NotoSansGothic-Regular.ttf \ NotoSansGujarati-Bold.ttf \ @@ -100,10 +106,12 @@ PRODUCT_PACKAGES := \ NotoSansLisu-Regular.ttf \ NotoSansLycian-Regular.ttf \ NotoSansLydian-Regular.ttf \ - NotoSansMalayalam-Bold.ttf \ - NotoSansMalayalam-Regular.ttf \ - NotoSansMalayalamUI-Bold.ttf \ - NotoSansMalayalamUI-Regular.ttf \ + NotoSansMalayalam-Bold.otf \ + NotoSansMalayalam-Medium.otf \ + NotoSansMalayalam-Regular.otf \ + NotoSansMalayalamUI-Bold.otf \ + NotoSansMalayalamUI-Medium.otf \ + NotoSansMalayalamUI-Regular.otf \ NotoSansMandaic-Regular.ttf \ NotoSansManichaean-Regular.otf \ NotoSansMarchen-Regular.otf \ @@ -113,10 +121,12 @@ PRODUCT_PACKAGES := \ NotoSansMongolian-Regular.ttf \ NotoSansMro-Regular.otf \ NotoSansMultani-Regular.otf \ - NotoSansMyanmar-Bold.ttf \ - NotoSansMyanmar-Regular.ttf \ - NotoSansMyanmarUI-Bold.ttf \ - NotoSansMyanmarUI-Regular.ttf \ + NotoSansMyanmar-Bold.otf \ + NotoSansMyanmar-Medium.otf \ + NotoSansMyanmar-Regular.otf \ + NotoSansMyanmarUI-Bold.otf \ + NotoSansMyanmarUI-Medium.otf \ + NotoSansMyanmarUI-Regular.otf \ NotoSansNabataean-Regular.otf \ NotoSansNewa-Regular.otf \ NotoSansNewTaiLue-Regular.ttf \ @@ -146,9 +156,11 @@ PRODUCT_PACKAGES := \ NotoSansSaurashtra-Regular.ttf \ NotoSansSharada-Regular.otf \ NotoSansShavian-Regular.ttf \ - NotoSansSinhala-Bold.ttf \ - NotoSansSinhala-Regular.ttf \ + NotoSansSinhala-Bold.otf \ + NotoSansSinhala-Medium.otf \ + NotoSansSinhala-Regular.otf \ NotoSansSinhalaUI-Bold.otf \ + NotoSansSinhalaUI-Medium.otf \ NotoSansSinhalaUI-Regular.otf \ NotoSansSoraSompeng-Regular.otf \ NotoSansSundanese-Regular.ttf \ @@ -163,10 +175,12 @@ PRODUCT_PACKAGES := \ NotoSansTaiLe-Regular.ttf \ NotoSansTaiTham-Regular.ttf \ NotoSansTaiViet-Regular.ttf \ - NotoSansTamil-Bold.ttf \ - NotoSansTamil-Regular.ttf \ - NotoSansTamilUI-Bold.ttf \ - NotoSansTamilUI-Regular.ttf \ + NotoSansTamil-Bold.otf \ + NotoSansTamil-Medium.otf \ + NotoSansTamil-Regular.otf \ + NotoSansTamilUI-Bold.otf \ + NotoSansTamilUI-Medium.otf \ + NotoSansTamilUI-Regular.otf \ NotoSansTelugu-Bold.ttf \ NotoSansTelugu-Regular.ttf \ NotoSansTeluguUI-Bold.ttf \ @@ -187,8 +201,8 @@ PRODUCT_PACKAGES := \ NotoSerif-BoldItalic.ttf \ NotoSerif-Italic.ttf \ NotoSerif-Regular.ttf \ - NotoSerifArmenian-Bold.ttf \ - NotoSerifArmenian-Regular.ttf \ + NotoSerifArmenian-Bold.otf \ + NotoSerifArmenian-Regular.otf \ NotoSerifBengali-Bold.ttf \ NotoSerifBengali-Regular.ttf \ NotoSerifCJK-Regular.ttc \ @@ -196,8 +210,8 @@ PRODUCT_PACKAGES := \ NotoSerifDevanagari-Regular.ttf \ NotoSerifEthiopic-Bold.otf \ NotoSerifEthiopic-Regular.otf \ - NotoSerifGeorgian-Bold.ttf \ - NotoSerifGeorgian-Regular.ttf \ + NotoSerifGeorgian-Bold.otf \ + NotoSerifGeorgian-Regular.otf \ NotoSerifGujarati-Bold.ttf \ NotoSerifGujarati-Regular.ttf \ NotoSerifGurmukhi-Bold.otf \ @@ -216,8 +230,8 @@ PRODUCT_PACKAGES := \ NotoSerifMyanmar-Regular.otf \ NotoSerifSinhala-Bold.otf \ NotoSerifSinhala-Regular.otf \ - NotoSerifTamil-Bold.ttf \ - NotoSerifTamil-Regular.ttf \ + NotoSerifTamil-Bold.otf \ + NotoSerifTamil-Regular.otf \ NotoSerifTelugu-Bold.ttf \ NotoSerifTelugu-Regular.ttf \ NotoSerifThai-Bold.ttf \ diff --git a/other-vf/Android.bp b/other-vf/Android.bp new file mode 100644 index 0000000..4e88ad4 --- /dev/null +++ b/other-vf/Android.bp @@ -0,0 +1,18 @@ +// Copyright (C) 2019 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. + +prebuilt_font { + name: "NotoSansKhmer-VF.ttf", + src: "NotoSansKhmer-VF.ttf", +} diff --git a/other/Android.bp b/other/Android.bp new file mode 100644 index 0000000..d439501 --- /dev/null +++ b/other/Android.bp @@ -0,0 +1,1088 @@ +// Copyright (C) 2019 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. + +prebuilt_font { + name: "NotoSerif-Regular.ttf", + src: "NotoSerif-Regular.ttf", +} + +prebuilt_font { + name: "NotoSerif-Bold.ttf", + src: "NotoSerif-Bold.ttf", +} + +prebuilt_font { + name: "NotoSerif-Italic.ttf", + src: "NotoSerif-Italic.ttf", +} + +prebuilt_font { + name: "NotoSerif-BoldItalic.ttf", + src: "NotoSerif-BoldItalic.ttf", +} + +prebuilt_font { + name: "NotoSansAdlam-Regular.ttf", + src: "NotoSansAdlam-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansAhom-Regular.otf", + src: "NotoSansAhom-Regular.otf", +} + +prebuilt_font { + name: "NotoSansAnatolianHieroglyphs-Regular.otf", + src: "NotoSansAnatolianHieroglyphs-Regular.otf", +} + +prebuilt_font { + name: "NotoSansAvestan-Regular.ttf", + src: "NotoSansAvestan-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansBalinese-Regular.ttf", + src: "NotoSansBalinese-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansBamum-Regular.ttf", + src: "NotoSansBamum-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansBassaVah-Regular.otf", + src: "NotoSansBassaVah-Regular.otf", +} + +prebuilt_font { + name: "NotoSansBatak-Regular.ttf", + src: "NotoSansBatak-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansBengali-Bold.otf", + src: "NotoSansBengali-Bold.otf", +} + +prebuilt_font { + name: "NotoSansBengali-Medium.otf", + src: "NotoSansBengali-Medium.otf", +} + +prebuilt_font { + name: "NotoSansBengali-Regular.otf", + src: "NotoSansBengali-Regular.otf", +} + +prebuilt_font { + name: "NotoSansBengaliUI-Bold.otf", + src: "NotoSansBengaliUI-Bold.otf", +} + +prebuilt_font { + name: "NotoSansBengaliUI-Medium.otf", + src: "NotoSansBengaliUI-Medium.otf", +} + +prebuilt_font { + name: "NotoSansBengaliUI-Regular.otf", + src: "NotoSansBengaliUI-Regular.otf", +} + +prebuilt_font { + name: "NotoSansBhaiksuki-Regular.otf", + src: "NotoSansBhaiksuki-Regular.otf", +} + +prebuilt_font { + name: "NotoSansBrahmi-Regular.ttf", + src: "NotoSansBrahmi-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansBuginese-Regular.ttf", + src: "NotoSansBuginese-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansBuhid-Regular.ttf", + src: "NotoSansBuhid-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansCanadianAboriginal-Regular.ttf", + src: "NotoSansCanadianAboriginal-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansCarian-Regular.ttf", + src: "NotoSansCarian-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansChakma-Regular.otf", + src: "NotoSansChakma-Regular.otf", +} + +prebuilt_font { + name: "NotoSansCham-Bold.ttf", + src: "NotoSansCham-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansCham-Regular.ttf", + src: "NotoSansCham-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansCherokee-Regular.ttf", + src: "NotoSansCherokee-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansCoptic-Regular.ttf", + src: "NotoSansCoptic-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansCuneiform-Regular.ttf", + src: "NotoSansCuneiform-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansCypriot-Regular.ttf", + src: "NotoSansCypriot-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansDeseret-Regular.ttf", + src: "NotoSansDeseret-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansEgyptianHieroglyphs-Regular.ttf", + src: "NotoSansEgyptianHieroglyphs-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansElbasan-Regular.otf", + src: "NotoSansElbasan-Regular.otf", +} + +prebuilt_font { + name: "NotoSansEthiopic-Bold.ttf", + src: "NotoSansEthiopic-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansEthiopic-Regular.ttf", + src: "NotoSansEthiopic-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansGlagolitic-Regular.ttf", + src: "NotoSansGlagolitic-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansGothic-Regular.ttf", + src: "NotoSansGothic-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansGujarati-Bold.ttf", + src: "NotoSansGujarati-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansGujarati-Regular.ttf", + src: "NotoSansGujarati-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansGujaratiUI-Bold.ttf", + src: "NotoSansGujaratiUI-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansGujaratiUI-Regular.ttf", + src: "NotoSansGujaratiUI-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansGurmukhi-Bold.ttf", + src: "NotoSansGurmukhi-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansGurmukhi-Regular.ttf", + src: "NotoSansGurmukhi-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansGurmukhiUI-Bold.ttf", + src: "NotoSansGurmukhiUI-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansGurmukhiUI-Regular.ttf", + src: "NotoSansGurmukhiUI-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansHanunoo-Regular.ttf", + src: "NotoSansHanunoo-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansHatran-Regular.otf", + src: "NotoSansHatran-Regular.otf", +} + +prebuilt_font { + name: "NotoSansImperialAramaic-Regular.ttf", + src: "NotoSansImperialAramaic-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansInscriptionalPahlavi-Regular.ttf", + src: "NotoSansInscriptionalPahlavi-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansInscriptionalParthian-Regular.ttf", + src: "NotoSansInscriptionalParthian-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansJavanese-Regular.ttf", + src: "NotoSansJavanese-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansKaithi-Regular.ttf", + src: "NotoSansKaithi-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansKannada-Bold.ttf", + src: "NotoSansKannada-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansKannada-Regular.ttf", + src: "NotoSansKannada-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansKannadaUI-Bold.ttf", + src: "NotoSansKannadaUI-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansKannadaUI-Regular.ttf", + src: "NotoSansKannadaUI-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansKayahLi-Regular.ttf", + src: "NotoSansKayahLi-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansKharoshthi-Regular.ttf", + src: "NotoSansKharoshthi-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansKhmerUI-Bold.ttf", + src: "NotoSansKhmerUI-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansKhmerUI-Regular.ttf", + src: "NotoSansKhmerUI-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansLao-Bold.ttf", + src: "NotoSansLao-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansLao-Regular.ttf", + src: "NotoSansLao-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansLaoUI-Bold.ttf", + src: "NotoSansLaoUI-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansLaoUI-Regular.ttf", + src: "NotoSansLaoUI-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansLepcha-Regular.ttf", + src: "NotoSansLepcha-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansLimbu-Regular.ttf", + src: "NotoSansLimbu-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansLinearA-Regular.otf", + src: "NotoSansLinearA-Regular.otf", +} + +prebuilt_font { + name: "NotoSansLinearB-Regular.ttf", + src: "NotoSansLinearB-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansLisu-Regular.ttf", + src: "NotoSansLisu-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansLycian-Regular.ttf", + src: "NotoSansLycian-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansLydian-Regular.ttf", + src: "NotoSansLydian-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansMalayalam-Bold.otf", + src: "NotoSansMalayalam-Bold.otf", +} + +prebuilt_font { + name: "NotoSansMalayalam-Medium.otf", + src: "NotoSansMalayalam-Medium.otf", +} + +prebuilt_font { + name: "NotoSansMalayalam-Regular.otf", + src: "NotoSansMalayalam-Regular.otf", +} + +prebuilt_font { + name: "NotoSansMalayalamUI-Bold.otf", + src: "NotoSansMalayalamUI-Bold.otf", +} + +prebuilt_font { + name: "NotoSansMalayalamUI-Medium.otf", + src: "NotoSansMalayalamUI-Medium.otf", +} + +prebuilt_font { + name: "NotoSansMalayalamUI-Regular.otf", + src: "NotoSansMalayalamUI-Regular.otf", +} + +prebuilt_font { + name: "NotoSansMandaic-Regular.ttf", + src: "NotoSansMandaic-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansManichaean-Regular.otf", + src: "NotoSansManichaean-Regular.otf", +} + +prebuilt_font { + name: "NotoSansMarchen-Regular.otf", + src: "NotoSansMarchen-Regular.otf", +} + +prebuilt_font { + name: "NotoSansMeeteiMayek-Regular.ttf", + src: "NotoSansMeeteiMayek-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansMeroitic-Regular.otf", + src: "NotoSansMeroitic-Regular.otf", +} + +prebuilt_font { + name: "NotoSansMiao-Regular.otf", + src: "NotoSansMiao-Regular.otf", +} + +prebuilt_font { + name: "NotoSansMongolian-Regular.ttf", + src: "NotoSansMongolian-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansMro-Regular.otf", + src: "NotoSansMro-Regular.otf", +} + +prebuilt_font { + name: "NotoSansMultani-Regular.otf", + src: "NotoSansMultani-Regular.otf", +} + +prebuilt_font { + name: "NotoSansMyanmar-Bold.otf", + src: "NotoSansMyanmar-Bold.otf", +} + +prebuilt_font { + name: "NotoSansMyanmar-Medium.otf", + src: "NotoSansMyanmar-Medium.otf", +} + +prebuilt_font { + name: "NotoSansMyanmar-Regular.otf", + src: "NotoSansMyanmar-Regular.otf", +} + +prebuilt_font { + name: "NotoSansMyanmarUI-Bold.otf", + src: "NotoSansMyanmarUI-Bold.otf", +} + +prebuilt_font { + name: "NotoSansMyanmarUI-Medium.otf", + src: "NotoSansMyanmarUI-Medium.otf", +} + +prebuilt_font { + name: "NotoSansMyanmarUI-Regular.otf", + src: "NotoSansMyanmarUI-Regular.otf", +} + +prebuilt_font { + name: "NotoSansNabataean-Regular.otf", + src: "NotoSansNabataean-Regular.otf", +} + +prebuilt_font { + name: "NotoSansNewa-Regular.otf", + src: "NotoSansNewa-Regular.otf", +} + +prebuilt_font { + name: "NotoSansNewTaiLue-Regular.ttf", + src: "NotoSansNewTaiLue-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansNKo-Regular.ttf", + src: "NotoSansNKo-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansOgham-Regular.ttf", + src: "NotoSansOgham-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansOlChiki-Regular.ttf", + src: "NotoSansOlChiki-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansOldItalic-Regular.ttf", + src: "NotoSansOldItalic-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansOldNorthArabian-Regular.otf", + src: "NotoSansOldNorthArabian-Regular.otf", +} + +prebuilt_font { + name: "NotoSansOldPermic-Regular.otf", + src: "NotoSansOldPermic-Regular.otf", +} + +prebuilt_font { + name: "NotoSansOldPersian-Regular.ttf", + src: "NotoSansOldPersian-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansOldSouthArabian-Regular.ttf", + src: "NotoSansOldSouthArabian-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansOldTurkic-Regular.ttf", + src: "NotoSansOldTurkic-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansOriya-Bold.ttf", + src: "NotoSansOriya-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansOriya-Regular.ttf", + src: "NotoSansOriya-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansOriyaUI-Bold.ttf", + src: "NotoSansOriyaUI-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansOriyaUI-Regular.ttf", + src: "NotoSansOriyaUI-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansOsage-Regular.ttf", + src: "NotoSansOsage-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansOsmanya-Regular.ttf", + src: "NotoSansOsmanya-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansPahawhHmong-Regular.otf", + src: "NotoSansPahawhHmong-Regular.otf", +} + +prebuilt_font { + name: "NotoSansPalmyrene-Regular.otf", + src: "NotoSansPalmyrene-Regular.otf", +} + +prebuilt_font { + name: "NotoSansPauCinHau-Regular.otf", + src: "NotoSansPauCinHau-Regular.otf", +} + +prebuilt_font { + name: "NotoSansPhagsPa-Regular.ttf", + src: "NotoSansPhagsPa-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansPhoenician-Regular.ttf", + src: "NotoSansPhoenician-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansRejang-Regular.ttf", + src: "NotoSansRejang-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansRunic-Regular.ttf", + src: "NotoSansRunic-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansSamaritan-Regular.ttf", + src: "NotoSansSamaritan-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansSaurashtra-Regular.ttf", + src: "NotoSansSaurashtra-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansSharada-Regular.otf", + src: "NotoSansSharada-Regular.otf", +} + +prebuilt_font { + name: "NotoSansShavian-Regular.ttf", + src: "NotoSansShavian-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansSinhala-Bold.otf", + src: "NotoSansSinhala-Bold.otf", +} + +prebuilt_font { + name: "NotoSansSinhala-Regular.otf", + src: "NotoSansSinhala-Regular.otf", +} + +prebuilt_font { + name: "NotoSansSinhala-Medium.otf", + src: "NotoSansSinhala-Medium.otf", +} + +prebuilt_font { + name: "NotoSansSinhalaUI-Bold.otf", + src: "NotoSansSinhalaUI-Bold.otf", +} + +prebuilt_font { + name: "NotoSansSinhalaUI-Medium.otf", + src: "NotoSansSinhalaUI-Medium.otf", +} + +prebuilt_font { + name: "NotoSansSinhalaUI-Regular.otf", + src: "NotoSansSinhalaUI-Regular.otf", +} + +prebuilt_font { + name: "NotoSansSoraSompeng-Regular.otf", + src: "NotoSansSoraSompeng-Regular.otf", +} + +prebuilt_font { + name: "NotoSansSundanese-Regular.ttf", + src: "NotoSansSundanese-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansSylotiNagri-Regular.ttf", + src: "NotoSansSylotiNagri-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansSyriacEastern-Regular.ttf", + src: "NotoSansSyriacEastern-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansSyriacEstrangela-Regular.ttf", + src: "NotoSansSyriacEstrangela-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansSyriacWestern-Regular.ttf", + src: "NotoSansSyriacWestern-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansTagalog-Regular.ttf", + src: "NotoSansTagalog-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansTagbanwa-Regular.ttf", + src: "NotoSansTagbanwa-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansTaiLe-Regular.ttf", + src: "NotoSansTaiLe-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansTaiTham-Regular.ttf", + src: "NotoSansTaiTham-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansTaiViet-Regular.ttf", + src: "NotoSansTaiViet-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansTamil-Bold.otf", + src: "NotoSansTamil-Bold.otf", +} + +prebuilt_font { + name: "NotoSansTamil-Medium.otf", + src: "NotoSansTamil-Medium.otf", +} + +prebuilt_font { + name: "NotoSansTamil-Regular.otf", + src: "NotoSansTamil-Regular.otf", +} + +prebuilt_font { + name: "NotoSansTamilUI-Bold.otf", + src: "NotoSansTamilUI-Bold.otf", +} + +prebuilt_font { + name: "NotoSansTamilUI-Medium.otf", + src: "NotoSansTamilUI-Medium.otf", +} + +prebuilt_font { + name: "NotoSansTamilUI-Regular.otf", + src: "NotoSansTamilUI-Regular.otf", +} + +prebuilt_font { + name: "NotoSansTelugu-Bold.ttf", + src: "NotoSansTelugu-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansTelugu-Regular.ttf", + src: "NotoSansTelugu-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansTeluguUI-Bold.ttf", + src: "NotoSansTeluguUI-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansTeluguUI-Regular.ttf", + src: "NotoSansTeluguUI-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansThaana-Bold.ttf", + src: "NotoSansThaana-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansThaana-Regular.ttf", + src: "NotoSansThaana-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansTibetan-Bold.ttf", + src: "NotoSansTibetan-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansTibetan-Regular.ttf", + src: "NotoSansTibetan-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansTifinagh-Regular.ttf", + src: "NotoSansTifinagh-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansUgaritic-Regular.ttf", + src: "NotoSansUgaritic-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansVai-Regular.ttf", + src: "NotoSansVai-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansYi-Regular.ttf", + src: "NotoSansYi-Regular.ttf", +} + +prebuilt_font { + name: "NotoNaskhArabic-Regular.ttf", + src: "NotoNaskhArabic-Regular.ttf", +} + +prebuilt_font { + name: "NotoNaskhArabic-Bold.ttf", + src: "NotoNaskhArabic-Bold.ttf", +} + +prebuilt_font { + name: "NotoNaskhArabicUI-Regular.ttf", + src: "NotoNaskhArabicUI-Regular.ttf", +} + +prebuilt_font { + name: "NotoNaskhArabicUI-Bold.ttf", + src: "NotoNaskhArabicUI-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansArmenian-Regular.otf", + src: "NotoSansArmenian-Regular.otf", +} + +prebuilt_font { + name: "NotoSansArmenian-Bold.otf", + src: "NotoSansArmenian-Bold.otf", +} + +prebuilt_font { + name: "NotoSansArmenian-Medium.otf", + src: "NotoSansArmenian-Medium.otf", +} + +prebuilt_font { + name: "NotoSansDevanagari-Regular.otf", + src: "NotoSansDevanagari-Regular.otf", +} + +prebuilt_font { + name: "NotoSansDevanagari-Bold.otf", + src: "NotoSansDevanagari-Bold.otf", +} + +prebuilt_font { + name: "NotoSansDevanagari-Medium.otf", + src: "NotoSansDevanagari-Medium.otf", +} + +prebuilt_font { + name: "NotoSansDevanagariUI-Regular.otf", + src: "NotoSansDevanagariUI-Regular.otf", +} + +prebuilt_font { + name: "NotoSansDevanagariUI-Bold.otf", + src: "NotoSansDevanagariUI-Bold.otf", +} + +prebuilt_font { + name: "NotoSansDevanagariUI-Medium.otf", + src: "NotoSansDevanagariUI-Medium.otf", +} + +prebuilt_font { + name: "NotoSansGeorgian-Regular.otf", + src: "NotoSansGeorgian-Regular.otf", +} + +prebuilt_font { + name: "NotoSansGeorgian-Bold.otf", + src: "NotoSansGeorgian-Bold.otf", +} + +prebuilt_font { + name: "NotoSansGeorgian-Medium.otf", + src: "NotoSansGeorgian-Medium.otf", +} + +prebuilt_font { + name: "NotoSansHebrew-Regular.ttf", + src: "NotoSansHebrew-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansHebrew-Bold.ttf", + src: "NotoSansHebrew-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansSymbols-Regular-Subsetted.ttf", + src: "NotoSansSymbols-Regular-Subsetted.ttf", +} + +prebuilt_font { + name: "NotoSansSymbols-Regular-Subsetted2.ttf", + src: "NotoSansSymbols-Regular-Subsetted2.ttf", +} + +prebuilt_font { + name: "NotoSansThai-Regular.ttf", + src: "NotoSansThai-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansThai-Bold.ttf", + src: "NotoSansThai-Bold.ttf", +} + +prebuilt_font { + name: "NotoSansThaiUI-Regular.ttf", + src: "NotoSansThaiUI-Regular.ttf", +} + +prebuilt_font { + name: "NotoSansThaiUI-Bold.ttf", + src: "NotoSansThaiUI-Bold.ttf", +} + +prebuilt_font { + name: "NotoSerifArmenian-Bold.otf", + src: "NotoSerifArmenian-Bold.otf", +} + +prebuilt_font { + name: "NotoSerifArmenian-Regular.otf", + src: "NotoSerifArmenian-Regular.otf", +} + +prebuilt_font { + name: "NotoSerifBengali-Bold.ttf", + src: "NotoSerifBengali-Bold.ttf", +} + +prebuilt_font { + name: "NotoSerifBengali-Regular.ttf", + src: "NotoSerifBengali-Regular.ttf", +} + +prebuilt_font { + name: "NotoSerifDevanagari-Bold.ttf", + src: "NotoSerifDevanagari-Bold.ttf", +} + +prebuilt_font { + name: "NotoSerifDevanagari-Regular.ttf", + src: "NotoSerifDevanagari-Regular.ttf", +} + +prebuilt_font { + name: "NotoSerifEthiopic-Bold.otf", + src: "NotoSerifEthiopic-Bold.otf", +} + +prebuilt_font { + name: "NotoSerifEthiopic-Regular.otf", + src: "NotoSerifEthiopic-Regular.otf", +} + +prebuilt_font { + name: "NotoSerifGeorgian-Bold.otf", + src: "NotoSerifGeorgian-Bold.otf", +} + +prebuilt_font { + name: "NotoSerifGeorgian-Regular.otf", + src: "NotoSerifGeorgian-Regular.otf", +} + +prebuilt_font { + name: "NotoSerifGujarati-Bold.ttf", + src: "NotoSerifGujarati-Bold.ttf", +} + +prebuilt_font { + name: "NotoSerifGujarati-Regular.ttf", + src: "NotoSerifGujarati-Regular.ttf", +} + +prebuilt_font { + name: "NotoSerifGurmukhi-Bold.otf", + src: "NotoSerifGurmukhi-Bold.otf", +} + +prebuilt_font { + name: "NotoSerifGurmukhi-Regular.otf", + src: "NotoSerifGurmukhi-Regular.otf", +} + +prebuilt_font { + name: "NotoSerifHebrew-Bold.ttf", + src: "NotoSerifHebrew-Bold.ttf", +} + +prebuilt_font { + name: "NotoSerifHebrew-Regular.ttf", + src: "NotoSerifHebrew-Regular.ttf", +} + +prebuilt_font { + name: "NotoSerifKannada-Bold.ttf", + src: "NotoSerifKannada-Bold.ttf", +} + +prebuilt_font { + name: "NotoSerifKannada-Regular.ttf", + src: "NotoSerifKannada-Regular.ttf", +} + +prebuilt_font { + name: "NotoSerifKhmer-Bold.otf", + src: "NotoSerifKhmer-Bold.otf", +} + +prebuilt_font { + name: "NotoSerifKhmer-Regular.otf", + src: "NotoSerifKhmer-Regular.otf", +} + +prebuilt_font { + name: "NotoSerifLao-Bold.ttf", + src: "NotoSerifLao-Bold.ttf", +} + +prebuilt_font { + name: "NotoSerifLao-Regular.ttf", + src: "NotoSerifLao-Regular.ttf", +} + +prebuilt_font { + name: "NotoSerifMalayalam-Bold.ttf", + src: "NotoSerifMalayalam-Bold.ttf", +} + +prebuilt_font { + name: "NotoSerifMalayalam-Regular.ttf", + src: "NotoSerifMalayalam-Regular.ttf", +} + +prebuilt_font { + name: "NotoSerifMyanmar-Bold.otf", + src: "NotoSerifMyanmar-Bold.otf", +} + +prebuilt_font { + name: "NotoSerifMyanmar-Regular.otf", + src: "NotoSerifMyanmar-Regular.otf", +} + +prebuilt_font { + name: "NotoSerifSinhala-Bold.otf", + src: "NotoSerifSinhala-Bold.otf", +} + +prebuilt_font { + name: "NotoSerifSinhala-Regular.otf", + src: "NotoSerifSinhala-Regular.otf", +} + +prebuilt_font { + name: "NotoSerifTamil-Bold.otf", + src: "NotoSerifTamil-Bold.otf", +} + +prebuilt_font { + name: "NotoSerifTamil-Regular.otf", + src: "NotoSerifTamil-Regular.otf", +} + +prebuilt_font { + name: "NotoSerifTelugu-Bold.ttf", + src: "NotoSerifTelugu-Bold.ttf", +} + +prebuilt_font { + name: "NotoSerifTelugu-Regular.ttf", + src: "NotoSerifTelugu-Regular.ttf", +} + +prebuilt_font { + name: "NotoSerifThai-Bold.ttf", + src: "NotoSerifThai-Bold.ttf", +} + +prebuilt_font { + name: "NotoSerifThai-Regular.ttf", + src: "NotoSerifThai-Regular.ttf", +} diff --git a/other/NotoSansArmenian-Bold.otf b/other/NotoSansArmenian-Bold.otf Binary files differnew file mode 100644 index 0000000..11700a9 --- /dev/null +++ b/other/NotoSansArmenian-Bold.otf diff --git a/other/NotoSansArmenian-Bold.ttf b/other/NotoSansArmenian-Bold.ttf Binary files differdeleted file mode 100644 index 109e34f..0000000 --- a/other/NotoSansArmenian-Bold.ttf +++ /dev/null diff --git a/other/NotoSansArmenian-Medium.otf b/other/NotoSansArmenian-Medium.otf Binary files differnew file mode 100644 index 0000000..17dbffb --- /dev/null +++ b/other/NotoSansArmenian-Medium.otf diff --git a/other/NotoSansArmenian-Regular.otf b/other/NotoSansArmenian-Regular.otf Binary files differnew file mode 100644 index 0000000..60bb53f --- /dev/null +++ b/other/NotoSansArmenian-Regular.otf diff --git a/other/NotoSansArmenian-Regular.ttf b/other/NotoSansArmenian-Regular.ttf Binary files differdeleted file mode 100644 index 7f26da5..0000000 --- a/other/NotoSansArmenian-Regular.ttf +++ /dev/null diff --git a/other/NotoSansBengali-Bold.otf b/other/NotoSansBengali-Bold.otf Binary files differnew file mode 100644 index 0000000..03fa2ce --- /dev/null +++ b/other/NotoSansBengali-Bold.otf diff --git a/other/NotoSansBengali-Bold.ttf b/other/NotoSansBengali-Bold.ttf Binary files differdeleted file mode 100644 index 546a555..0000000 --- a/other/NotoSansBengali-Bold.ttf +++ /dev/null diff --git a/other/NotoSansBengali-Medium.otf b/other/NotoSansBengali-Medium.otf Binary files differnew file mode 100644 index 0000000..fa98001 --- /dev/null +++ b/other/NotoSansBengali-Medium.otf diff --git a/other/NotoSansBengali-Regular.otf b/other/NotoSansBengali-Regular.otf Binary files differnew file mode 100644 index 0000000..be3fde0 --- /dev/null +++ b/other/NotoSansBengali-Regular.otf diff --git a/other/NotoSansBengali-Regular.ttf b/other/NotoSansBengali-Regular.ttf Binary files differdeleted file mode 100644 index 520d82f..0000000 --- a/other/NotoSansBengali-Regular.ttf +++ /dev/null diff --git a/other/NotoSansBengaliUI-Bold.otf b/other/NotoSansBengaliUI-Bold.otf Binary files differnew file mode 100644 index 0000000..ea58c5a --- /dev/null +++ b/other/NotoSansBengaliUI-Bold.otf diff --git a/other/NotoSansBengaliUI-Bold.ttf b/other/NotoSansBengaliUI-Bold.ttf Binary files differdeleted file mode 100644 index 923580c..0000000 --- a/other/NotoSansBengaliUI-Bold.ttf +++ /dev/null diff --git a/other/NotoSansBengaliUI-Medium.otf b/other/NotoSansBengaliUI-Medium.otf Binary files differnew file mode 100644 index 0000000..ba35bab --- /dev/null +++ b/other/NotoSansBengaliUI-Medium.otf diff --git a/other/NotoSansBengaliUI-Regular.otf b/other/NotoSansBengaliUI-Regular.otf Binary files differnew file mode 100644 index 0000000..491fd93 --- /dev/null +++ b/other/NotoSansBengaliUI-Regular.otf diff --git a/other/NotoSansBengaliUI-Regular.ttf b/other/NotoSansBengaliUI-Regular.ttf Binary files differdeleted file mode 100644 index 5373108..0000000 --- a/other/NotoSansBengaliUI-Regular.ttf +++ /dev/null diff --git a/other/NotoSansChakma-Regular.otf b/other/NotoSansChakma-Regular.otf Binary files differnew file mode 100644 index 0000000..d9690ca --- /dev/null +++ b/other/NotoSansChakma-Regular.otf diff --git a/other/NotoSansChakma-Regular.ttf b/other/NotoSansChakma-Regular.ttf Binary files differdeleted file mode 100644 index 43e5161..0000000 --- a/other/NotoSansChakma-Regular.ttf +++ /dev/null diff --git a/other/NotoSansDevanagari-Bold.otf b/other/NotoSansDevanagari-Bold.otf Binary files differnew file mode 100644 index 0000000..383f279 --- /dev/null +++ b/other/NotoSansDevanagari-Bold.otf diff --git a/other/NotoSansDevanagari-Bold.ttf b/other/NotoSansDevanagari-Bold.ttf Binary files differdeleted file mode 100644 index 9fe0162..0000000 --- a/other/NotoSansDevanagari-Bold.ttf +++ /dev/null diff --git a/other/NotoSansDevanagari-Medium.otf b/other/NotoSansDevanagari-Medium.otf Binary files differnew file mode 100644 index 0000000..c454f83 --- /dev/null +++ b/other/NotoSansDevanagari-Medium.otf diff --git a/other/NotoSansDevanagari-Regular.otf b/other/NotoSansDevanagari-Regular.otf Binary files differnew file mode 100644 index 0000000..68b2c13 --- /dev/null +++ b/other/NotoSansDevanagari-Regular.otf diff --git a/other/NotoSansDevanagari-Regular.ttf b/other/NotoSansDevanagari-Regular.ttf Binary files differdeleted file mode 100644 index 0a024df..0000000 --- a/other/NotoSansDevanagari-Regular.ttf +++ /dev/null diff --git a/other/NotoSansDevanagariUI-Bold.otf b/other/NotoSansDevanagariUI-Bold.otf Binary files differnew file mode 100644 index 0000000..113ebb4 --- /dev/null +++ b/other/NotoSansDevanagariUI-Bold.otf diff --git a/other/NotoSansDevanagariUI-Bold.ttf b/other/NotoSansDevanagariUI-Bold.ttf Binary files differdeleted file mode 100644 index a0cc7dd..0000000 --- a/other/NotoSansDevanagariUI-Bold.ttf +++ /dev/null diff --git a/other/NotoSansDevanagariUI-Medium.otf b/other/NotoSansDevanagariUI-Medium.otf Binary files differnew file mode 100644 index 0000000..48658e8 --- /dev/null +++ b/other/NotoSansDevanagariUI-Medium.otf diff --git a/other/NotoSansDevanagariUI-Regular.otf b/other/NotoSansDevanagariUI-Regular.otf Binary files differnew file mode 100644 index 0000000..eda9bef --- /dev/null +++ b/other/NotoSansDevanagariUI-Regular.otf diff --git a/other/NotoSansDevanagariUI-Regular.ttf b/other/NotoSansDevanagariUI-Regular.ttf Binary files differdeleted file mode 100644 index d74aefd..0000000 --- a/other/NotoSansDevanagariUI-Regular.ttf +++ /dev/null diff --git a/other/NotoSansGeorgian-Bold.otf b/other/NotoSansGeorgian-Bold.otf Binary files differnew file mode 100644 index 0000000..086bd40 --- /dev/null +++ b/other/NotoSansGeorgian-Bold.otf diff --git a/other/NotoSansGeorgian-Bold.ttf b/other/NotoSansGeorgian-Bold.ttf Binary files differdeleted file mode 100644 index 2e01965..0000000 --- a/other/NotoSansGeorgian-Bold.ttf +++ /dev/null diff --git a/other/NotoSansGeorgian-Medium.otf b/other/NotoSansGeorgian-Medium.otf Binary files differnew file mode 100644 index 0000000..15e5eb6 --- /dev/null +++ b/other/NotoSansGeorgian-Medium.otf diff --git a/other/NotoSansGeorgian-Regular.otf b/other/NotoSansGeorgian-Regular.otf Binary files differnew file mode 100644 index 0000000..e59f368 --- /dev/null +++ b/other/NotoSansGeorgian-Regular.otf diff --git a/other/NotoSansGeorgian-Regular.ttf b/other/NotoSansGeorgian-Regular.ttf Binary files differdeleted file mode 100644 index b5a3847..0000000 --- a/other/NotoSansGeorgian-Regular.ttf +++ /dev/null diff --git a/other/NotoSansMalayalam-Bold.otf b/other/NotoSansMalayalam-Bold.otf Binary files differnew file mode 100644 index 0000000..f748b3b --- /dev/null +++ b/other/NotoSansMalayalam-Bold.otf diff --git a/other/NotoSansMalayalam-Bold.ttf b/other/NotoSansMalayalam-Bold.ttf Binary files differdeleted file mode 100644 index 5f6ca0c..0000000 --- a/other/NotoSansMalayalam-Bold.ttf +++ /dev/null diff --git a/other/NotoSansMalayalam-Medium.otf b/other/NotoSansMalayalam-Medium.otf Binary files differnew file mode 100644 index 0000000..e8cd727 --- /dev/null +++ b/other/NotoSansMalayalam-Medium.otf diff --git a/other/NotoSansMalayalam-Regular.otf b/other/NotoSansMalayalam-Regular.otf Binary files differnew file mode 100644 index 0000000..1eaa950 --- /dev/null +++ b/other/NotoSansMalayalam-Regular.otf diff --git a/other/NotoSansMalayalam-Regular.ttf b/other/NotoSansMalayalam-Regular.ttf Binary files differdeleted file mode 100644 index be82967..0000000 --- a/other/NotoSansMalayalam-Regular.ttf +++ /dev/null diff --git a/other/NotoSansMalayalamUI-Bold.otf b/other/NotoSansMalayalamUI-Bold.otf Binary files differnew file mode 100644 index 0000000..669bf1f --- /dev/null +++ b/other/NotoSansMalayalamUI-Bold.otf diff --git a/other/NotoSansMalayalamUI-Bold.ttf b/other/NotoSansMalayalamUI-Bold.ttf Binary files differdeleted file mode 100644 index 0919b8c..0000000 --- a/other/NotoSansMalayalamUI-Bold.ttf +++ /dev/null diff --git a/other/NotoSansMalayalamUI-Medium.otf b/other/NotoSansMalayalamUI-Medium.otf Binary files differnew file mode 100644 index 0000000..0468ce9 --- /dev/null +++ b/other/NotoSansMalayalamUI-Medium.otf diff --git a/other/NotoSansMalayalamUI-Regular.otf b/other/NotoSansMalayalamUI-Regular.otf Binary files differnew file mode 100644 index 0000000..3e22f89 --- /dev/null +++ b/other/NotoSansMalayalamUI-Regular.otf diff --git a/other/NotoSansMalayalamUI-Regular.ttf b/other/NotoSansMalayalamUI-Regular.ttf Binary files differdeleted file mode 100644 index 4f1b408..0000000 --- a/other/NotoSansMalayalamUI-Regular.ttf +++ /dev/null diff --git a/other/NotoSansMyanmar-Bold.otf b/other/NotoSansMyanmar-Bold.otf Binary files differnew file mode 100644 index 0000000..ddec241 --- /dev/null +++ b/other/NotoSansMyanmar-Bold.otf diff --git a/other/NotoSansMyanmar-Bold.ttf b/other/NotoSansMyanmar-Bold.ttf Binary files differdeleted file mode 100644 index 9f74c12..0000000 --- a/other/NotoSansMyanmar-Bold.ttf +++ /dev/null diff --git a/other/NotoSansMyanmar-Medium.otf b/other/NotoSansMyanmar-Medium.otf Binary files differnew file mode 100644 index 0000000..c6c03db --- /dev/null +++ b/other/NotoSansMyanmar-Medium.otf diff --git a/other/NotoSansMyanmar-Regular.otf b/other/NotoSansMyanmar-Regular.otf Binary files differnew file mode 100644 index 0000000..f2f7a67 --- /dev/null +++ b/other/NotoSansMyanmar-Regular.otf diff --git a/other/NotoSansMyanmar-Regular.ttf b/other/NotoSansMyanmar-Regular.ttf Binary files differdeleted file mode 100644 index 034660b..0000000 --- a/other/NotoSansMyanmar-Regular.ttf +++ /dev/null diff --git a/other/NotoSansMyanmarUI-Bold.otf b/other/NotoSansMyanmarUI-Bold.otf Binary files differnew file mode 100644 index 0000000..6742efd --- /dev/null +++ b/other/NotoSansMyanmarUI-Bold.otf diff --git a/other/NotoSansMyanmarUI-Bold.ttf b/other/NotoSansMyanmarUI-Bold.ttf Binary files differdeleted file mode 100644 index 1c76aa7..0000000 --- a/other/NotoSansMyanmarUI-Bold.ttf +++ /dev/null diff --git a/other/NotoSansMyanmarUI-Medium.otf b/other/NotoSansMyanmarUI-Medium.otf Binary files differnew file mode 100644 index 0000000..af579de --- /dev/null +++ b/other/NotoSansMyanmarUI-Medium.otf diff --git a/other/NotoSansMyanmarUI-Regular.otf b/other/NotoSansMyanmarUI-Regular.otf Binary files differnew file mode 100644 index 0000000..7d912b8 --- /dev/null +++ b/other/NotoSansMyanmarUI-Regular.otf diff --git a/other/NotoSansMyanmarUI-Regular.ttf b/other/NotoSansMyanmarUI-Regular.ttf Binary files differdeleted file mode 100644 index a435ba1..0000000 --- a/other/NotoSansMyanmarUI-Regular.ttf +++ /dev/null diff --git a/other/NotoSansSinhala-Bold.otf b/other/NotoSansSinhala-Bold.otf Binary files differnew file mode 100644 index 0000000..1ccfb67 --- /dev/null +++ b/other/NotoSansSinhala-Bold.otf diff --git a/other/NotoSansSinhala-Bold.ttf b/other/NotoSansSinhala-Bold.ttf Binary files differdeleted file mode 100644 index 1ba5a1c..0000000 --- a/other/NotoSansSinhala-Bold.ttf +++ /dev/null diff --git a/other/NotoSansSinhala-Medium.otf b/other/NotoSansSinhala-Medium.otf Binary files differnew file mode 100644 index 0000000..7b62820 --- /dev/null +++ b/other/NotoSansSinhala-Medium.otf diff --git a/other/NotoSansSinhala-Regular.otf b/other/NotoSansSinhala-Regular.otf Binary files differnew file mode 100644 index 0000000..027fd25 --- /dev/null +++ b/other/NotoSansSinhala-Regular.otf diff --git a/other/NotoSansSinhala-Regular.ttf b/other/NotoSansSinhala-Regular.ttf Binary files differdeleted file mode 100644 index 9f4de71..0000000 --- a/other/NotoSansSinhala-Regular.ttf +++ /dev/null diff --git a/other/NotoSansSinhalaUI-Bold.otf b/other/NotoSansSinhalaUI-Bold.otf Binary files differindex d73a364..8d22bf2 100644 --- a/other/NotoSansSinhalaUI-Bold.otf +++ b/other/NotoSansSinhalaUI-Bold.otf diff --git a/other/NotoSansSinhalaUI-Medium.otf b/other/NotoSansSinhalaUI-Medium.otf Binary files differnew file mode 100644 index 0000000..8b5e701 --- /dev/null +++ b/other/NotoSansSinhalaUI-Medium.otf diff --git a/other/NotoSansSinhalaUI-Regular.otf b/other/NotoSansSinhalaUI-Regular.otf Binary files differindex 4902292..925536d 100644 --- a/other/NotoSansSinhalaUI-Regular.otf +++ b/other/NotoSansSinhalaUI-Regular.otf diff --git a/other/NotoSansTamil-Bold.otf b/other/NotoSansTamil-Bold.otf Binary files differnew file mode 100644 index 0000000..c9611a3 --- /dev/null +++ b/other/NotoSansTamil-Bold.otf diff --git a/other/NotoSansTamil-Bold.ttf b/other/NotoSansTamil-Bold.ttf Binary files differdeleted file mode 100644 index f15bfad..0000000 --- a/other/NotoSansTamil-Bold.ttf +++ /dev/null diff --git a/other/NotoSansTamil-Medium.otf b/other/NotoSansTamil-Medium.otf Binary files differnew file mode 100644 index 0000000..1e84a9b --- /dev/null +++ b/other/NotoSansTamil-Medium.otf diff --git a/other/NotoSansTamil-Regular.otf b/other/NotoSansTamil-Regular.otf Binary files differnew file mode 100644 index 0000000..b77a33c --- /dev/null +++ b/other/NotoSansTamil-Regular.otf diff --git a/other/NotoSansTamil-Regular.ttf b/other/NotoSansTamil-Regular.ttf Binary files differdeleted file mode 100644 index 635a238..0000000 --- a/other/NotoSansTamil-Regular.ttf +++ /dev/null diff --git a/other/NotoSansTamilUI-Bold.otf b/other/NotoSansTamilUI-Bold.otf Binary files differnew file mode 100644 index 0000000..665d6fd --- /dev/null +++ b/other/NotoSansTamilUI-Bold.otf diff --git a/other/NotoSansTamilUI-Bold.ttf b/other/NotoSansTamilUI-Bold.ttf Binary files differdeleted file mode 100644 index 297f30b..0000000 --- a/other/NotoSansTamilUI-Bold.ttf +++ /dev/null diff --git a/other/NotoSansTamilUI-Medium.otf b/other/NotoSansTamilUI-Medium.otf Binary files differnew file mode 100644 index 0000000..64997d3 --- /dev/null +++ b/other/NotoSansTamilUI-Medium.otf diff --git a/other/NotoSansTamilUI-Regular.otf b/other/NotoSansTamilUI-Regular.otf Binary files differnew file mode 100644 index 0000000..7ee7d4f --- /dev/null +++ b/other/NotoSansTamilUI-Regular.otf diff --git a/other/NotoSansTamilUI-Regular.ttf b/other/NotoSansTamilUI-Regular.ttf Binary files differdeleted file mode 100644 index 360bed8..0000000 --- a/other/NotoSansTamilUI-Regular.ttf +++ /dev/null diff --git a/other/NotoSansTifinagh-Regular.ttf b/other/NotoSansTifinagh-Regular.ttf Binary files differindex 9692944..252a0dc 100644 --- a/other/NotoSansTifinagh-Regular.ttf +++ b/other/NotoSansTifinagh-Regular.ttf diff --git a/other/NotoSerifArmenian-Bold.otf b/other/NotoSerifArmenian-Bold.otf Binary files differnew file mode 100644 index 0000000..7df98e3 --- /dev/null +++ b/other/NotoSerifArmenian-Bold.otf diff --git a/other/NotoSerifArmenian-Bold.ttf b/other/NotoSerifArmenian-Bold.ttf Binary files differdeleted file mode 100644 index 215a57f..0000000 --- a/other/NotoSerifArmenian-Bold.ttf +++ /dev/null diff --git a/other/NotoSerifArmenian-Regular.otf b/other/NotoSerifArmenian-Regular.otf Binary files differnew file mode 100644 index 0000000..05df944 --- /dev/null +++ b/other/NotoSerifArmenian-Regular.otf diff --git a/other/NotoSerifArmenian-Regular.ttf b/other/NotoSerifArmenian-Regular.ttf Binary files differdeleted file mode 100644 index d33f13d..0000000 --- a/other/NotoSerifArmenian-Regular.ttf +++ /dev/null diff --git a/other/NotoSerifGeorgian-Bold.otf b/other/NotoSerifGeorgian-Bold.otf Binary files differnew file mode 100644 index 0000000..1c2c01f --- /dev/null +++ b/other/NotoSerifGeorgian-Bold.otf diff --git a/other/NotoSerifGeorgian-Bold.ttf b/other/NotoSerifGeorgian-Bold.ttf Binary files differdeleted file mode 100644 index 00709da..0000000 --- a/other/NotoSerifGeorgian-Bold.ttf +++ /dev/null diff --git a/other/NotoSerifGeorgian-Regular.otf b/other/NotoSerifGeorgian-Regular.otf Binary files differnew file mode 100644 index 0000000..f0186e6 --- /dev/null +++ b/other/NotoSerifGeorgian-Regular.otf diff --git a/other/NotoSerifGeorgian-Regular.ttf b/other/NotoSerifGeorgian-Regular.ttf Binary files differdeleted file mode 100644 index 814731d..0000000 --- a/other/NotoSerifGeorgian-Regular.ttf +++ /dev/null diff --git a/other/NotoSerifKhmer-Bold.ttf b/other/NotoSerifKhmer-Bold.ttf Binary files differdeleted file mode 100644 index 795c35c..0000000 --- a/other/NotoSerifKhmer-Bold.ttf +++ /dev/null diff --git a/other/NotoSerifKhmer-Regular.ttf b/other/NotoSerifKhmer-Regular.ttf Binary files differdeleted file mode 100644 index 22a3b22..0000000 --- a/other/NotoSerifKhmer-Regular.ttf +++ /dev/null diff --git a/other/NotoSerifMyanmar-Bold.otf b/other/NotoSerifMyanmar-Bold.otf Binary files differindex 9c2bba5..ba21a27 100644 --- a/other/NotoSerifMyanmar-Bold.otf +++ b/other/NotoSerifMyanmar-Bold.otf diff --git a/other/NotoSerifMyanmar-Regular.otf b/other/NotoSerifMyanmar-Regular.otf Binary files differindex 3149b2f..ec4ed44 100644 --- a/other/NotoSerifMyanmar-Regular.otf +++ b/other/NotoSerifMyanmar-Regular.otf diff --git a/other/NotoSerifSinhala-Bold.otf b/other/NotoSerifSinhala-Bold.otf Binary files differindex 59ebdf0..ec8a3f9 100644 --- a/other/NotoSerifSinhala-Bold.otf +++ b/other/NotoSerifSinhala-Bold.otf diff --git a/other/NotoSerifSinhala-Regular.otf b/other/NotoSerifSinhala-Regular.otf Binary files differindex 3d75615..876c153 100644 --- a/other/NotoSerifSinhala-Regular.otf +++ b/other/NotoSerifSinhala-Regular.otf diff --git a/other/NotoSerifTamil-Bold.otf b/other/NotoSerifTamil-Bold.otf Binary files differnew file mode 100644 index 0000000..d0d57cd --- /dev/null +++ b/other/NotoSerifTamil-Bold.otf diff --git a/other/NotoSerifTamil-Bold.ttf b/other/NotoSerifTamil-Bold.ttf Binary files differdeleted file mode 100644 index 9154410..0000000 --- a/other/NotoSerifTamil-Bold.ttf +++ /dev/null diff --git a/other/NotoSerifTamil-Regular.otf b/other/NotoSerifTamil-Regular.otf Binary files differnew file mode 100644 index 0000000..33b2b13 --- /dev/null +++ b/other/NotoSerifTamil-Regular.otf diff --git a/other/NotoSerifTamil-Regular.ttf b/other/NotoSerifTamil-Regular.ttf Binary files differdeleted file mode 100644 index ae772a1..0000000 --- a/other/NotoSerifTamil-Regular.ttf +++ /dev/null diff --git a/scripts/color_emoji_image_diff.py b/scripts/color_emoji_image_diff.py new file mode 100755 index 0000000..6f4c87e --- /dev/null +++ b/scripts/color_emoji_image_diff.py @@ -0,0 +1,183 @@ +#!/usr/bin/env python + +# Copyright (C) 2018 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. + +import contextlib +import itertools +import io +import os +import sys + +from fontTools import ttLib +from PIL import Image + +def to_hex_str(value): + """Converts given int value to hex without the 0x prefix""" + return format(value, 'X') + +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 read_cmap12(ttf, glyph_to_codepoint_map, codepoint_map): + 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(): + glyph_to_codepoint_map[glyph_name] = codepoint + codepoint_map[codepoint_to_string([codepoint])] = glyph_name + # self.update_emoji_data([codepoint], glyph_name) + return table + raise ValueError("Font doesn't contain cmap with format:12, platformID:3 and platEncID:10") + +def read_gsub(ttf, glyph_to_codepoint_map, codepoint_map): + gsub = ttf['GSUB'] + ligature_subtables = [] + context_subtables = [] + # this code is font dependent, implementing all gsub rules is out of scope of EmojiCompat + # and would be expensive with little value + for lookup in gsub.table.LookupList.Lookup: + for subtable in lookup.SubTable: + if subtable.LookupType == 5: + context_subtables.append(subtable) + elif subtable.LookupType == 4: + ligature_subtables.append(subtable) + + for subtable in context_subtables: + add_gsub_context_subtable(subtable, gsub.table.LookupList, glyph_to_codepoint_map, codepoint_map) + + for subtable in ligature_subtables: + add_gsub_ligature_subtable(subtable, glyph_to_codepoint_map, codepoint_map) + +def add_gsub_context_subtable(subtable, lookup_list, glyph_to_codepoint_map, codepoint_map): + for sub_class_set in subtable.SubClassSet: + if sub_class_set: + for sub_class_rule in sub_class_set.SubClassRule: + subs_list = len(sub_class_rule.SubstLookupRecord) * [None] + for record in sub_class_rule.SubstLookupRecord: + subs_list[record.SequenceIndex] = get_substitutions(lookup_list, + record.LookupListIndex) + combinations = list(itertools.product(*subs_list)) + for seq in combinations: + 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) + if len(nonempty_outputs) == 0: + print("Warning: no output glyph is set for " + str(glyph_names)) + continue + elif len(nonempty_outputs) > 1: + print( + "Warning: multiple glyph is set for " + + str(glyph_names) + ", will use the first one") + + glyph = nonempty_outputs[0] + codepoint_map[codepoint_to_string(codepoints)] = glyph + +def get_substitutions(lookup_list, index): + result = [] + for x in lookup_list.Lookup[index].SubTable: + for input, output in x.mapping.iteritems(): + result.append({"input": input, "output": output}) + return result + +def add_gsub_ligature_subtable(subtable, glyph_to_codepoint_map, codepoint_map): + for name, ligatures in subtable.ligatures.iteritems(): + for ligature in ligatures: + glyph_names = [name] + ligature.Component + codepoints = [glyph_to_codepoint_map[x] for x in glyph_names] + codepoint_map[codepoint_to_string(codepoints)] = ligature.LigGlyph + +def read_cbdt(ttf): + cbdt = ttf['CBDT'] + glyph_to_image = {} + for strike_data in cbdt.strikeData: + for key, data in strike_data.iteritems(): + data.decompile + glyph_to_image[key] = Image.open(io.BytesIO(data.imageData)) + return glyph_to_image + + +rgba_map = {} + +def similar_img(img1, img2): + # return if images are the same with accepting some changes + if img1 is None and img2 is None: return True + if img1 is None or img2 is None: return False + if not img1.size == img2.size: return False + + pixels1 = rgba_map.get(img1, img1.convert('L').getdata()) + pixels2 = rgba_map.get(img2, img2.convert('L').getdata()) + pixels = itertools.izip(pixels1, pixels2) + diff = 0 + for px1, px2 in pixels: + diff = diff + abs(px1-px2) + pixel_count = 1.0 * img1.size[0] * img1.size[1] + normalized_diff = diff / pixel_count / 255.0 * 100.0 + if normalized_diff <= 0.5: return True + return False + +def main(argv): + codepoint_map_1 = {} + codepoint_map_2 = {} + glyph_to_codepoint_map_1 = {} + glyph_to_codepoint_map_2 = {} + + with contextlib.closing(ttLib.TTFont(argv[1])) as ttf: + font1_cbdt = read_cbdt(ttf) + read_cmap12(ttf, glyph_to_codepoint_map_1, codepoint_map_1) + read_gsub(ttf, glyph_to_codepoint_map_1, codepoint_map_1) + with contextlib.closing(ttLib.TTFont(argv[2])) as ttf: + font2_cbdt = read_cbdt(ttf) + read_cmap12(ttf, glyph_to_codepoint_map_2, codepoint_map_2) + read_gsub(ttf, glyph_to_codepoint_map_2, codepoint_map_2) + + glyphs1 = set(font1_cbdt.keys()) + glyphs2 = set(font2_cbdt.keys()) + + codepoints_set1 = set(codepoint_map_1.keys()) + codepoints_set2 = set(codepoint_map_2.keys()) + + if codepoints_set1 != codepoints_set2: + print "Codepoints set has changed: : %s" % (codepoints_set1 ^ codepoints_set2) + + all_codepoints = set(codepoint_map_1.keys()).union(codepoint_map_2.keys()) + + for key in all_codepoints: + glyph1 = codepoint_map_1[key] if key in codepoint_map_1 else None + glyph2 = codepoint_map_2[key] if key in codepoint_map_2 else None + + image1 = font1_cbdt[glyph1] if glyph1 and glyph1 in font1_cbdt else None + image2 = font2_cbdt[glyph2] if glyph2 and glyph2 in font2_cbdt else None + + if not similar_img(image1, image2): + print 'Glyph %s has different image' % key + if image1: + with open(os.path.join(argv[3], '%s_old.png' % key), 'w') as f: + image1.save(f) + if image2: + with open(os.path.join(argv[3], '%s_new.png' % key), 'w') as f: + image2.save(f) + + +def print_usage(): + """Prints how to use the script.""" + print("usage: old_font new_font output_dir") + +if __name__ == '__main__': + if len(sys.argv) < 3: + print_usage() + sys.exit(1) + main(sys.argv) |