mirror of
https://github.com/Ralim/IronOS.git
synced 2025-02-26 07:53:55 +00:00
Create script to automatically generate a settings menu help file
This commit is contained in:
112
Translations/gen_menu_docs.py
Executable file
112
Translations/gen_menu_docs.py
Executable file
@@ -0,0 +1,112 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import functools
|
||||
import hashlib
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
from typing import Dict, List
|
||||
|
||||
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
|
||||
|
||||
HERE = Path(__file__).resolve().parent
|
||||
TRANSLATION_DEFS_PATH = os.path.join(HERE, "translations_def.js")
|
||||
ENGLISH_TRANSLATION_PATH = os.path.join(HERE, "translation_EN.json")
|
||||
MENU_DOCS_FILE_PATH = os.path.join(HERE.parent, "Documentation/Settings.md")
|
||||
|
||||
# Loading a single JSON file
|
||||
def load_json(filename: str, skip_first_line: bool) -> dict:
|
||||
with open(filename) as f:
|
||||
if skip_first_line:
|
||||
f.readline()
|
||||
return json.loads(f.read())
|
||||
|
||||
|
||||
def write_header(filep):
|
||||
"""
|
||||
Writes the markdown constant header area out
|
||||
"""
|
||||
constant_header = """<!-- This is an automatically generated file. DO NOT EDIT. Edit gen_menu_docs.py instead -->
|
||||
|
||||
# IronOS Settings Menu
|
||||
|
||||
The below breaks down the menu's and what each setting means.
|
||||
"""
|
||||
filep.write(constant_header)
|
||||
|
||||
|
||||
def write_menu_categories(filep, defs, translation_data):
|
||||
"""
|
||||
Writes the menu categories section out
|
||||
"""
|
||||
menu_cat_pretense = """
|
||||
## Menu Categories
|
||||
|
||||
In the menu there are a few main categories that are used to keep the list manageable.
|
||||
"""
|
||||
filep.write(menu_cat_pretense)
|
||||
for menu in defs.get("menuGroups", {}):
|
||||
menu_id = menu.get("id", "")
|
||||
entry = translation_data.get("menuGroups", {}).get(menu_id, "")
|
||||
name = " ".join(entry.get("text2", []))
|
||||
desc = menu.get("description", "")
|
||||
section = f"""
|
||||
### Category: {name}
|
||||
|
||||
{desc}
|
||||
"""
|
||||
filep.write(section)
|
||||
|
||||
|
||||
def write_menu_entries(filep, defs, translation_data):
|
||||
"""
|
||||
Writes the menu entries section out
|
||||
"""
|
||||
menu_entries_pretense = """
|
||||
## Settings
|
||||
|
||||
These are all off the settings possible in the menu.
|
||||
Not all settings are visible for all devices.
|
||||
For example, the TS100 does not have USB-PD settings.
|
||||
|
||||
When using the device, if unsure you can pause (press nothing) on a setting and after a short delay help text will scroll across the screen.
|
||||
This is the "on device help text".
|
||||
"""
|
||||
filep.write(menu_entries_pretense)
|
||||
for menu in defs.get("menuOptions", {}):
|
||||
menu_id = menu.get("id", "")
|
||||
entry = translation_data.get("menuOptions", {}).get(menu_id, "")
|
||||
name = " ".join(entry.get("text2", []))
|
||||
desc = menu.get("description", "")
|
||||
on_device_desc = entry.get("desc", "")
|
||||
section = f"""
|
||||
### Setting: {name}
|
||||
|
||||
{desc}
|
||||
|
||||
On device help text:
|
||||
|
||||
{on_device_desc}
|
||||
"""
|
||||
filep.write(section)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
json_dir = HERE
|
||||
print(json_dir)
|
||||
logging.info("Loading translation definitions")
|
||||
defs = load_json(TRANSLATION_DEFS_PATH, True)
|
||||
eng_translation = load_json(ENGLISH_TRANSLATION_PATH, False)
|
||||
with open(MENU_DOCS_FILE_PATH, "w") as outputf:
|
||||
write_header(outputf)
|
||||
write_menu_categories(outputf, defs, eng_translation)
|
||||
write_menu_entries(outputf, defs, eng_translation)
|
||||
logging.info("Done")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user