import sys, os import argparse from datetime import datetime import json # Check if the script is run with the correct arguments parser = argparse.ArgumentParser(description="Generate event header files") parser.add_argument('--output', required=True, help='Dir to write headers') parser.add_argument('--input', required=True, help='Input directory containing event files') args = parser.parse_args() # Ensure outdir exists outputFile = args.output outputDir = args.output os.makedirs(outputDir, exist_ok=True) inputDir = args.input # Scan for .json files in the input directory if not os.path.exists(inputDir): print(f"Error: Input directory '{inputDir}' does not exist.") sys.exit(1) jsonFiles = [f for f in os.listdir(inputDir) if f.endswith('.json')] if not jsonFiles or len(jsonFiles) == 0: print(f"Error: No JSON files found in '{inputDir}'.") sys.exit(1) # For each language file... now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") eventFiles = [] for jsonFile in jsonFiles: inputFile = os.path.join(inputDir, jsonFile) data = json.load(open(inputFile, 'r', encoding='utf-8')) if 'key' not in data: print(f"Error: JSON file '{inputFile}' does not contain 'key' field.") sys.exit(1) if 'items' not in data or not isinstance(data['items'], list) or len(data['items']) == 0: print(f"Error: JSON file '{inputFile}' does not contain 'items' field.") sys.exit(1) key = data['key'] keyUpper = key.upper() if jsonFile != f'{key}.json': print(f"Error: JSON file '{jsonFile}' does not match expected filename '{key}.json'.") sys.exit(1) outputFile = os.path.join(outputDir, f"{key}.h") with open(outputFile, 'w', encoding='utf-8') as f: f.write(f"// Generated event header for {jsonFile}\n") f.write(f"// Generated at {now}\n") f.write("#pragma once\n\n") f.write("#include \"event/eventdata.h\"\n\n") f.write(f"static const eventdata_t EVENT_{key.upper()} = {{\n") f.write(f" .itemCount = {len(data['items'])},\n") f.write(f" .items = {{\n") for i, item in enumerate(data['items']): if 'type' not in item: print(f"Error: Item {i} in '{jsonFile}' does not contain 'type' field.") sys.exit(1) itemType = item['type'] f.write(f" {{\n") # Text(s) Type if itemType == 'text': if 'text' not in item: print(f"Error: Item {i} in '{jsonFile}' of type 'text' does not contain 'text' field.") sys.exit(1) f.write(f" .type = EVENT_TYPE_TEXT,\n") f.write(f" .text = \"{item['text']}\",\n") else: print(f"Error: Unknown item type '{itemType}' in item {i} of '{jsonFile}'.") sys.exit(1) f.write(f" }},\n") f.write(f" }},\n") f.write(f"}};\n\n") eventFiles.append(key) # Write the event list header eventListFile = os.path.join(outputDir, "eventlist.h") with open(eventListFile, 'w', encoding='utf-8') as f: f.write(f"// Generated event list header\n") f.write(f"// Generated at {now}\n") f.write("#pragma once\n\n") f.write("#include \"event/event.h\"\n") for event in eventFiles: f.write(f"#include \"event/{event}.h\"\n") f.write("\n") f.write(f"#define EVENT_LIST_COUNT {len(eventFiles)}\n\n") f.write("static const eventdata_t* EVENT_LIST[EVENT_LIST_COUNT] = {\n") for event in eventFiles: f.write(f" &EVENT_{event.upper()},\n") f.write("};\n\n")