41 lines
1.2 KiB
Python
Executable File
41 lines
1.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""Regenerate the Rust expert hotlists from a DS4 source checkout."""
|
|
|
|
import argparse
|
|
import pathlib
|
|
import re
|
|
|
|
|
|
ARRAY = re.compile(
|
|
r"static const uint16_t ds4_default_streaming_hotlist_(\w+)\[\]\[2\] = \{(.*?)\n\};",
|
|
re.DOTALL,
|
|
)
|
|
PAIR = re.compile(r"\{(\d+),\s*(\d+)\}")
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("source", type=pathlib.Path)
|
|
parser.add_argument("output", type=pathlib.Path)
|
|
args = parser.parse_args()
|
|
texts = [
|
|
(args.source / "ds4_streaming_hotlist.inc").read_text(),
|
|
(args.source / "ds4_streaming_hotlist_glm52.inc").read_text(),
|
|
]
|
|
arrays = {
|
|
name: PAIR.findall(body)
|
|
for text in texts
|
|
for name, body in ARRAY.findall(text)
|
|
}
|
|
names = (("PRO", "pro"), ("FLASH", "flash"), ("GLM52", "glm52"))
|
|
lines = ["// Generated mechanically by scripts/import_hotlists.py.\n"]
|
|
for constant, source_name in names:
|
|
lines.append(f"pub(super) const {constant}: &[(u16, u16)] = &[\n")
|
|
lines.extend(f" ({layer}, {expert}),\n" for layer, expert in arrays[source_name])
|
|
lines.append("];\n")
|
|
args.output.write_text("".join(lines))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|