diff --git a/colrv1_generate_configs.py b/colrv1_generate_configs.py new file mode 100644 index 000000000..b66ed503f --- /dev/null +++ b/colrv1_generate_configs.py @@ -0,0 +1,94 @@ +# Copyright 2020 Google LLC +# +# 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. + +# Generate config files for Noto-COLRv1 + +from nanoemoji.util import rel +from pathlib import Path + + +_NOTO_FAMILY_NAME = "Noto Color Emoji" +_NOTO_SVG_DIR = Path("svg") +_REGIONAL_INDICATORS = { + Path(_NOTO_SVG_DIR / f"emoji_u{i:x}.svg") for i in range(0x1F1E6, 0x1F1FF + 1) +} +_NOTO_WAVED_FLAG_SVG_DIR = Path("third_party/region-flags/waved-svg") +_NOTO_SUBDIVISION_FLAGS = ( + _NOTO_WAVED_FLAG_SVG_DIR / "emoji_u1f3f4_e0067_e0062_e0065_e006e_e0067_e007f.svg", + _NOTO_WAVED_FLAG_SVG_DIR / "emoji_u1f3f4_e0067_e0062_e0073_e0063_e0074_e007f.svg", + _NOTO_WAVED_FLAG_SVG_DIR / "emoji_u1f3f4_e0067_e0062_e0077_e006c_e0073_e007f.svg", +) +_CONFIG_DIR = Path("colrv1") + + +def _write_config(config_name, output_file, svg_files): + svg_files = [rel(_CONFIG_DIR, Path(f)) for f in svg_files] + config_file = f"{config_name}.toml" + for svg_file in svg_files: + assert _CONFIG_DIR.joinpath( + svg_file + ).is_file(), f"{svg_file} not found relative to {_CONFIG_DIR}" + svg_list = ",\n ".join(f'"{f}"' for f in sorted(svg_files)).rstrip() + with open(_CONFIG_DIR / config_file, "w") as f: + f.write( + f""" +family = "{_NOTO_FAMILY_NAME}" +output_file = "{output_file}" +color_format = "glyf_colr_1" +clipbox_quantization = 32 + +[axis.wght] +name = "Weight" +default = 400 + +[master.regular] +style_name = "Regular" +srcs = [ + {svg_list}, +] + +[master.regular.position] +wght = 400 +""" + ) + + +def _write_all_noto_configs(): + # includes all of noto-emoji svgs plus all the waved region flags + svgs = tuple(_NOTO_SVG_DIR.glob("*.svg")) + tuple( + _NOTO_WAVED_FLAG_SVG_DIR.glob("*.svg") + ) + _write_config("all", "NotoColorEmoji.ttf", svgs) + + +def _write_noto_noflag_configs(): + # Does not contain regional indicators and the region flags that are + # composed with them. It still includes the England, Scotland and Wales + # 'subdivision' flags, as those are not composed with Unicode regional + # indicators, but use sequences of Unicode Tag letters prefixed with + # the Black Flag and ending with a Cancel Tag. + svgs = ( + tuple(p for p in _NOTO_SVG_DIR.glob("*.svg") if p not in _REGIONAL_INDICATORS) + + _NOTO_SUBDIVISION_FLAGS + ) + _write_config("noflags", "NotoColorEmoji-noflags.ttf", svgs) + + +def main(): + _write_all_noto_configs() + _write_noto_noflag_configs() + + +if __name__ == "__main__": + main()