From e5666815c1aba4cdb5c884dee98e41600013acda Mon Sep 17 00:00:00 2001
From: Cosimo Lupo <clupo@google.com>
Date: Thu, 21 Jul 2022 15:06:57 +0200
Subject: [PATCH] [colrv1] add script to regenerate nanoemoji configs by
 globbing source *.svg sources

Fixes https://github.com/googlefonts/noto-emoji/issues/397
---
 colrv1_generate_configs.py | 94 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 94 insertions(+)
 create mode 100644 colrv1_generate_configs.py

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