import os import re import argparse from typing import List, Tuple PATTERN = re.compile(r"(КлассПакета_\w+)\s*=\s*(\d+)\s*;") def scan_directory(directory: str) -> List[Tuple[str, int, str]]: seen = {} for root, _, files in os.walk(directory): for fname in files: fpath = os.path.join(root, fname) try: with open(fpath, "r", encoding="utf-8") as f: for line in f: m = PATTERN.search(line) if m: name, value = m.group(1), int(m.group(2)) if name not in seen: seen[name] = (value, f"{name} = {value};") except (UnicodeDecodeError, PermissionError): pass return [(k, v[0], v[1]) for k, v in seen.items()] def write_markdown_table(results: List[Tuple[str, int, str]], output_path: str) -> None: with open(output_path, "w", encoding="utf-8") as f: f.write("| КлассПакета | Значение | Присваивание |\n") f.write("|------------|----------|-------------|\n") for name, value, assignment in sorted(results, key=lambda x: x[0]): f.write(f"| {name} | {value} | `{assignment}` |\n") def main(): parser = argparse.ArgumentParser(description="Extract КлассПакета values to a markdown table.") parser.add_argument("directory", help="Directory to scan recursively") parser.add_argument("-o", "--output", default="result.md", help="Output markdown file (default: result.md)") args = parser.parse_args() if not os.path.isdir(args.directory): parser.error(f"Directory not found: {args.directory}") results = scan_directory(args.directory) write_markdown_table(results, args.output) print(f"Written {len(results)} entries to {args.output}") if __name__ == "__main__": main()