| # 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() |