#!/usr/bin/env python3 # Author: Jonpas, SilentSpike import os import sys import re ######## GLOBALS ######### WIKI_FRAMEWORK = "wiki/framework" ACE3WEB_WIKI_FRAMEWORK = "http://ace3.acemod.org/{}".format(WIKI_FRAMEWORK) EXCLUDE = ["events-framework.md"] TEMP_LISTENABLE = "temp\\combined_events_listenable.md" TEMP_CALLABLE = "temp\\combined_events_callable.md" ########################## def extract(type, data, sourceLink): # Extract data match = re.match(r"(`"".+""`)\s*\|.*\|\s*(`\[.+\]`)\s*\|\s*(\w+)", data) name = match.group(1) # Event Name params = match.group(2) # Passed Parameters locality = match.group(3) # Locality print("- {} Event Data:\n - Event Name: {}\n - Parameters: {}\n - Locality: {}\n".format(type, name, params, locality)) # Write to file with open(eval("TEMP_{}".format(type.upper())), "a") as file: file.write("{} | {} | {} | {}\n".format(name, sourceLink, params, locality)) def main(): print(""" ############################ # Combine ACE3 Events List # ############################ """) scriptpath = os.path.realpath(__file__) projectpath = os.path.dirname(os.path.dirname(scriptpath)) wikiframeworkpath = os.path.join(projectpath, WIKI_FRAMEWORK) # Prepare directory and files to write to if not os.path.exists("temp"): os.makedirs("temp") with open(TEMP_LISTENABLE, "w") as fileListenable: fileListenable.writelines([ "Event Name | Source | Passed Parameter(s) | Locality\n" "---------- | ------ | ------------------- | --------\n" ]) with open(TEMP_CALLABLE, "w") as fileCallable: fileCallable.writelines([ "Event Name | Owner | Passed Parameter(s) | Locality\n" "---------- | ------ | ------------------- | --------\n" ]) # Iterate through files in the framework directory for file in os.listdir(wikiframeworkpath): # Skip iteration if file in exclusion list if file in EXCLUDE: print("Excluding: {}\n".format(file)) continue with open(os.path.join(wikiframeworkpath, file)) as fileOpen: for line in fileOpen: matchSubSection = re.match(r"###\s+\d+\.?\d*\s+(Listenable|Callable)", line) # Find main section, prepare data if re.match(r"##\s+\d+\.?\d*\s+Events", line): print("Found Events: {}".format(file)) # Source module (cut out 13 characters at the end, stands for "-framework.md") source = file[:-13] print("- Source Module: {}".format(source)) # Website URL - remove 3 characters at the end (stands for ".md") and add ".html", format into URL webURL = "{}/{}.{}".format(ACE3WEB_WIKI_FRAMEWORK, file[:-3], "html") print("- Website URL: {}".format(webURL)) # Source with Website URL sourceLink = "[{}]({})".format(source, webURL) # Find sub-section, prepare data elif matchSubSection: # Skip 4 lines to get to table contents (sub-loop) for i in range(4): data = next(fileOpen) # Iterate in sub-loop and extract data until empty line is reached while data not in ["\n", "\r\n"]: extract(matchSubSection.group(1), data, sourceLink) # Move to next line, exit if EOF try: data = next(fileOpen) except StopIteration: break if __name__ == "__main__": main()