diff options
author | Sean McQuillan <seanmcq@google.com> | 2021-03-18 17:04:38 -0700 |
---|---|---|
committer | Sean McQuillan <seanmcq@google.com> | 2021-03-19 16:27:38 -0700 |
commit | 5427e233ab5d11946486bb13c5098db741581123 (patch) | |
tree | 827cb5fc6aa7d8c4e716858bdb57ead46823931f | |
parent | bac26d88f57ba07a294c4c1cdae21a24e53082d4 (diff) | |
download | noto-fonts-5427e233ab5d11946486bb13c5098db741581123.tar.gz |
Create new emoji-compat-flatbuffers module
This module only contains Apache 2 licensed flatbuffers code that
previously lived next to OFL and UNICODE licensed code in emoji-compat.
By extracting this, we can link the flatbuffers without having to add
notification of OFL and UNICODE in the module depending on these
flatbuffer definitions.
Update createfont.py to point to this new module, all files are
validated, and java src is moved to this new module.
Note: This change manually reverts the generated font since we are
missing source files for a reproducable build at time of merge. To be
addressed in followup CL.
Test: ./createfont.py {path}/NotoColorEmoji.ttf {path}/unicode ../emoji-compat-flatbuffers
Bug: b/178035684
Change-Id: I696debd751ad853c126a7b3d4d62db57db8cbc7d
-rw-r--r-- | emoji-compat-flatbuffers/Android.mk (renamed from emoji-compat/Android.mk) | 2 | ||||
-rw-r--r-- | emoji-compat-flatbuffers/build.gradle (renamed from emoji-compat/build.gradle) | 0 | ||||
-rw-r--r-- | emoji-compat-flatbuffers/data/emoji_metadata.fbs (renamed from emoji-compat/data/emoji_metadata.fbs) | 0 | ||||
-rw-r--r-- | emoji-compat-flatbuffers/data/flatbuffer_header.txt (renamed from emoji-compat/data/flatbuffer_header.txt) | 0 | ||||
-rw-r--r-- | emoji-compat-flatbuffers/jarjar-rules.txt (renamed from emoji-compat/jarjar-rules.txt) | 0 | ||||
-rw-r--r-- | emoji-compat-flatbuffers/settings.gradle (renamed from emoji-compat/settings.gradle) | 0 | ||||
-rw-r--r-- | emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java (renamed from emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java) | 0 | ||||
-rw-r--r-- | emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataList.java (renamed from emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataList.java) | 0 | ||||
-rwxr-xr-x | emoji-compat/createfont.py | 72 |
9 files changed, 51 insertions, 23 deletions
diff --git a/emoji-compat/Android.mk b/emoji-compat-flatbuffers/Android.mk index bc47046..76bd918 100644 --- a/emoji-compat/Android.mk +++ b/emoji-compat-flatbuffers/Android.mk @@ -15,7 +15,7 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) -LOCAL_MODULE := noto-emoji-compat-java +LOCAL_MODULE := noto-emoji-compat-flatbuffers-java LOCAL_SRC_FILES := $(call all-java-files-under, src/java) LOCAL_SDK_VERSION := current diff --git a/emoji-compat/build.gradle b/emoji-compat-flatbuffers/build.gradle index 20d8dfb..20d8dfb 100644 --- a/emoji-compat/build.gradle +++ b/emoji-compat-flatbuffers/build.gradle diff --git a/emoji-compat/data/emoji_metadata.fbs b/emoji-compat-flatbuffers/data/emoji_metadata.fbs index 23d0db9..23d0db9 100644 --- a/emoji-compat/data/emoji_metadata.fbs +++ b/emoji-compat-flatbuffers/data/emoji_metadata.fbs diff --git a/emoji-compat/data/flatbuffer_header.txt b/emoji-compat-flatbuffers/data/flatbuffer_header.txt index 2b40a04..2b40a04 100644 --- a/emoji-compat/data/flatbuffer_header.txt +++ b/emoji-compat-flatbuffers/data/flatbuffer_header.txt diff --git a/emoji-compat/jarjar-rules.txt b/emoji-compat-flatbuffers/jarjar-rules.txt index fdc3188..fdc3188 100644 --- a/emoji-compat/jarjar-rules.txt +++ b/emoji-compat-flatbuffers/jarjar-rules.txt diff --git a/emoji-compat/settings.gradle b/emoji-compat-flatbuffers/settings.gradle index 5e6c61e..5e6c61e 100644 --- a/emoji-compat/settings.gradle +++ b/emoji-compat-flatbuffers/settings.gradle diff --git a/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java b/emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java index 0b2a694..0b2a694 100644 --- a/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java +++ b/emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataItem.java diff --git a/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataList.java b/emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataList.java index 6330098..6330098 100644 --- a/emoji-compat/src/java/androidx/text/emoji/flatbuffer/MetadataList.java +++ b/emoji-compat-flatbuffers/src/java/androidx/text/emoji/flatbuffer/MetadataList.java diff --git a/emoji-compat/createfont.py b/emoji-compat/createfont.py index 5f03721..39204f8 100755 --- a/emoji-compat/createfont.py +++ b/emoji-compat/createfont.py @@ -68,7 +68,7 @@ SCRIPT_DIR = os.path.abspath(os.path.dirname(__file__)) FONT_DIR = os.path.join(SCRIPT_DIR, 'font') DATA_DIR = os.path.join(SCRIPT_DIR, 'data') SUPPORTED_EMOJIS_DIR = os.path.join(SCRIPT_DIR, 'supported-emojis') -JAVA_SRC_DIR = os.path.join(SCRIPT_DIR, 'src', 'java') +JAVA_SRC_DIR = os.path.join('src', 'java') ####### output files ####### # font file FONT_PATH = os.path.join(FONT_DIR, 'NotoColorEmojiCompat.ttf') @@ -90,10 +90,12 @@ ANDROID_EMOJIS_SEQ_FILE = os.path.join('additions', 'emoji-sequences.txt') EMOJI_STYLE_OVERRIDE_FILE = os.path.join('additions', 'emoji-data.txt') # emoji metadata file INPUT_META_FILE = OUTPUT_META_FILE +# default flatbuffer module location (if not specified by caller) +FLATBUFFER_MODULE_DIR = os.path.join(SCRIPT_DIR, '..', 'emoji-compat-flatbuffers') # flatbuffer schema -FLATBUFFER_SCHEMA = os.path.join(DATA_DIR, 'emoji_metadata.fbs') +FLATBUFFER_SCHEMA = os.path.join(FLATBUFFER_MODULE_DIR, 'data', 'emoji_metadata.fbs') # file path for java header, it will be prepended to flatbuffer java files -FLATBUFFER_HEADER = os.path.join(DATA_DIR, "flatbuffer_header.txt") +FLATBUFFER_HEADER = os.path.join(FLATBUFFER_MODULE_DIR, 'data', 'flatbuffer_header.txt') # temporary emoji metadata json output file OUTPUT_JSON_FILE_NAME = 'emoji_metadata.json' # temporary binary file generated by flatbuffer @@ -105,7 +107,7 @@ FLATBUFFER_JAVA_PATH = os.path.join(FLATBUFFER_PACKAGE_PATH) FLATBUFFER_METADATA_LIST_JAVA = "MetadataList.java" FLATBUFFER_METADATA_ITEM_JAVA = "MetadataItem.java" # directory under source where flatbuffer java files will be copied into -FLATBUFFER_JAVA_TARGET = os.path.join(JAVA_SRC_DIR, FLATBUFFER_PACKAGE_PATH) +FLATBUFFER_JAVA_TARGET = os.path.join(FLATBUFFER_MODULE_DIR, JAVA_SRC_DIR, FLATBUFFER_PACKAGE_PATH) # meta tag name used in the font to embed the emoji metadata. This value is also used in # MetadataListReader.java in order to locate the metadata location. EMOJI_META_TAG_NAME = 'Emji' @@ -130,28 +132,28 @@ def codepoint_to_string(codepoints): """Converts a list of codepoints into a string separated with space.""" return ' '.join([to_hex_str(x) for x in codepoints]) -def prepend_header_to_file(file_path): +def prepend_header_to_file(file_path, header_path): """Prepends the header to the file. Used to update flatbuffer java files with header, comments and annotations.""" with open(file_path, "r+") as original_file: - with open(FLATBUFFER_HEADER, "r") as copyright_file: + with open(header_path, "r") as copyright_file: original_content = original_file.read() original_file.seek(0) original_file.write(copyright_file.read() + "\n" + original_content) -def update_flatbuffer_java_files(flatbuffer_java_dir): +def update_flatbuffer_java_files(flatbuffer_java_dir, header_dir, target_dir): """Prepends headers to flatbuffer java files and copies to the final destination""" tmp_metadata_list = flatbuffer_java_dir + FLATBUFFER_METADATA_LIST_JAVA tmp_metadata_item = flatbuffer_java_dir + FLATBUFFER_METADATA_ITEM_JAVA - prepend_header_to_file(tmp_metadata_list) - prepend_header_to_file(tmp_metadata_item) + prepend_header_to_file(tmp_metadata_list, header_dir) + prepend_header_to_file(tmp_metadata_item, header_dir) - if not os.path.exists(FLATBUFFER_JAVA_TARGET): - os.makedirs(FLATBUFFER_JAVA_TARGET) + if not os.path.exists(target_dir): + os.makedirs(target_dir) - shutil.copy(tmp_metadata_list, FLATBUFFER_JAVA_TARGET + FLATBUFFER_METADATA_LIST_JAVA) - shutil.copy(tmp_metadata_item, FLATBUFFER_JAVA_TARGET + FLATBUFFER_METADATA_ITEM_JAVA) + shutil.copy(tmp_metadata_list, os.path.join(target_dir, FLATBUFFER_METADATA_LIST_JAVA)) + shutil.copy(tmp_metadata_item, os.path.join(target_dir, FLATBUFFER_METADATA_ITEM_JAVA)) def create_test_data(unicode_path): """Read all the emojis in the unicode files and update the test file""" @@ -427,7 +429,7 @@ def inject_meta_into_font(ttf, flatbuffer_bin_filename): update_ttlib_orig_sort() -def validate_input_files(font_path, unicode_path): +def validate_input_files(font_path, unicode_path, flatbuffer_path): """Validate the existence of font file and the unicode files""" if not os.path.isfile(font_path): raise ValueError("Font file does not exist: " + font_path) @@ -443,6 +445,16 @@ def validate_input_files(font_path, unicode_path): if not os.path.isfile(emoji_filename): raise ValueError("Unicode emoji data file does not exist: " + emoji_filename) + if not os.path.isdir(flatbuffer_path): + raise ValueError( + "Flatbuffer directory does not exist or is not a directory " + flatbuffer_path) + + flatbuffer_filenames = [os.path.join(flatbuffer_path, FLATBUFFER_SCHEMA), + os.path.join(flatbuffer_path, FLATBUFFER_HEADER)] + for flatbuffer_filename in flatbuffer_filenames: + if not os.path.isfile(flatbuffer_filename): + raise ValueError("Flatbuffer file does not exist: " + flatbuffer_filename) + def add_file_to_sha(sha_algo, file_path): with open(file_path, 'rb') as input_file: @@ -461,7 +473,7 @@ class EmojiFontCreator(object): """Creates the EmojiCompat font""" def __init__(self, font_path, unicode_path): - validate_input_files(font_path, unicode_path) + validate_input_files(font_path, unicode_path, FLATBUFFER_MODULE_DIR) self.font_path = font_path self.unicode_path = unicode_path @@ -647,8 +659,14 @@ class EmojiFontCreator(object): total_emoji_count = self.write_metadata_json(output_json_file) # create the flatbuffers binary and java classes - flatc_command = 'flatc -o {0} -b -j {1} {2}'.format(tmp_dir, FLATBUFFER_SCHEMA, output_json_file) - subprocess.check_output(flatc_command, shell=True) + flatc_command = ['flatc', + '-o', + tmp_dir, + '-b', + '-j', + FLATBUFFER_SCHEMA, + output_json_file] + subprocess.check_output(flatc_command) # inject metadata binary into font inject_meta_into_font(ttf, flatbuffer_bin_file) @@ -660,7 +678,9 @@ class EmojiFontCreator(object): # save the new font ttf.save(FONT_PATH) - update_flatbuffer_java_files(flatbuffer_java_dir) + update_flatbuffer_java_files(flatbuffer_java_dir, #tmp dir + FLATBUFFER_HEADER, + FLATBUFFER_JAVA_TARGET) create_test_data(self.unicode_path) @@ -676,9 +696,17 @@ def print_usage(): print("Please specify a path to font and unicode files.\n" "usage: createfont.py noto-color-emoji-path unicode-dir-path") - -if __name__ == '__main__': - if len(sys.argv) < 3: +def parse_args(argv): + # parse manually to avoid any extra dependencies + if len(argv) < 3: print_usage() sys.exit(1) - EmojiFontCreator(sys.argv[1], sys.argv[2]).create_font() + return (sys.argv[1], sys.argv[2]) + +def main(): + font_file, unicode_dir = parse_args(sys.argv) + EmojiFontCreator(font_file, unicode_dir).create_font() + + +if __name__ == '__main__': + main() |