Add font_fallback.xml generator script
This script is not used in production yet.
These scripts are tested in unittest.
Test: atest frameworks/base/data/fonts/script/test
Bug: 360820050
Flag: EXEMPT Build infra and tools
Change-Id: Ibe6f6d3a7245949f38465766b83e36421dd3f59f
diff --git a/data/fonts/script/commandline.py b/data/fonts/script/commandline.py
new file mode 100755
index 0000000..743b1b2
--- /dev/null
+++ b/data/fonts/script/commandline.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python
+
+#
+# Copyright (C) 2024 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.
+#
+
+"""Build commandline arguments."""
+
+import argparse
+import dataclasses
+from typing import Callable
+
+from alias_builder import Alias
+from alias_builder import parse_aliases_from_json
+from fallback_builder import FallbackEntry
+from fallback_builder import parse_fallback_from_json
+from family_builder import Family
+from family_builder import parse_families_from_json
+
+
+@dataclasses.dataclass
+class CommandlineArgs:
+ outfile: str
+ fallback: [FallbackEntry]
+ aliases: [Alias]
+ families: [Family]
+
+
+def _create_argument_parser() -> argparse.ArgumentParser:
+ """Create argument parser."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-o', '--output')
+ parser.add_argument('--alias')
+ parser.add_argument('--fallback')
+ return parser
+
+
+def _fileread(path: str) -> str:
+ with open(path, 'r') as f:
+ return f.read()
+
+
+def parse_commandline(
+ args: [str], fileread: Callable[str, str] = _fileread
+) -> CommandlineArgs:
+ """Parses command line arguments and returns CommandlineArg."""
+ parser = _create_argument_parser()
+ args, inputs = parser.parse_known_args(args)
+
+ families = []
+ for i in inputs:
+ families = families + parse_families_from_json(fileread(i))
+
+ return CommandlineArgs(
+ outfile=args.output,
+ fallback=parse_fallback_from_json(fileread(args.fallback)),
+ aliases=parse_aliases_from_json(fileread(args.alias)),
+ families=families,
+ )