Created
December 31, 2023 07:56
-
-
Save Blizzardo1/be3ad3512aa05768d8945e2ed664d77a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import subprocess, json, markdown_to_json as mdj | |
import re | |
repo_url = "https://github.com/libsdl-org/sdlwiki.git" | |
exceptions = ["MigrationGuide.md", | |
"README.md", | |
"Roadmap.md", | |
"Category", | |
"FrontPage.md", | |
"SDLNet_DatagramSocket.md", | |
"SDLNet_StreamSocket.md", | |
"Undocumented.md"] | |
def get_wiki(): | |
current_directory = os.getcwd() | |
subprocess.run(['git', 'clone', repo_url], cwd=current_directory) | |
def extract_functions_and_documentation(): | |
wiki_directory = os.path.join(os.getcwd(), "sdlwiki") | |
for root, _, files in os.walk(wiki_directory): | |
for file in files: | |
if file.endswith(".md"): | |
file_path = os.path.join(root, file) | |
if any(a in file_path for a in exceptions): | |
print("Skipping %s" % file_path) | |
continue | |
if "README" not in file_path: | |
with open(file_path, "r") as f: | |
content = f.read() | |
content = re.sub(r'^(?P<str>#\s\w+)', '\g<str>\n## Description', content, flags=re.MULTILINE) | |
json_str = mdj.jsonify(content) | |
json_str = re.sub(r'\[\w+\]\((?P<func>\w+)\)', '\g<func>', json_str) | |
jdata = json.loads(json_str) | |
keys = jdata.keys() | |
first_key = next(iter(keys)) | |
#jover = open(file_path.replace(".md", ".unprocessed.json"), "w") | |
#jover.write(json.dumps(jdata, indent=4)) | |
#jover.close() | |
if(keys.__contains__("Syntax")): | |
parse(jdata, file_path) | |
else: | |
parse(jdata[first_key], file_path) | |
#print('File %s with Keys %s' % (file_path, jdata.keys())) | |
def set_default(key, jdata, default = ''): | |
if not key in jdata: jdata[key] = default | |
def parse(jdata, file_path): | |
set_default("Remarks", jdata, "") | |
set_default("Syntax", jdata, "") | |
set_default("Function Parameters", jdata, "") | |
set_default("Return Value", jdata, "") | |
set_default("Description", jdata, "") | |
set_default("Version", jdata, "") | |
set_default("Related Functions", jdata, "") | |
print("Creating %s" % file_path.replace(".md", ".json")) | |
jdata["Syntax"] = jdata["Syntax"].replace("```", "").replace('\n', '') | |
jdata['Function Parameters'] = re.sub(r'(-)+', '', jdata["Function Parameters"]) | |
jdata['Function Parameters'] = jdata['Function Parameters'].replace('|', '').strip() | |
arr = jdata['Function Parameters'].split('\n') | |
jdata['Function Parameters'] = {} | |
for a in arr: | |
if a.strip() == '': continue | |
jdata['Function Parameters'][a.split('**')[1].strip()] = a.split('**')[2].strip() | |
with(open(file_path.replace(".md", ".json"), "w")) as j: | |
j.write(json.dumps(jdata, indent=4)) | |
def delete_json_files(): | |
wiki_directory = os.path.join(os.getcwd(), "sdlwiki") | |
for root, _, files in os.walk(wiki_directory): | |
for file in files: | |
if file.endswith(".json"): | |
file_path = os.path.join(root, file) | |
os.remove(file_path) | |
def create_cs_comments(): | |
wiki_directory = os.path.join(os.getcwd(), "sdlwiki") | |
com = open(os.path.join(wiki_directory, 'sdl.cs'), 'w') | |
for root, _, files in os.walk(wiki_directory): | |
for file in files: | |
if file.endswith(".json"): | |
file_path = os.path.join(root, file) | |
with(open(file_path, "r")) as j: | |
jdata = json.loads(j.read()) | |
set_default("Remarks", jdata, "") | |
set_default("Syntax", jdata, "") | |
set_default("Function Parameters", jdata, "") | |
set_default("Return Value", jdata, "") | |
set_default("Description", jdata, "") | |
set_default("Version", jdata, "") | |
set_default("Related Functions", jdata, "") | |
com.write("/* File %s */\n" % file_path.replace(".json", ".md").replace(wiki_directory, "")) | |
com.write("/// <summary>\n") | |
com.write("/// %s\n" % jdata["Description"]) | |
com.write("/// </summary>\n") | |
for key in jdata["Function Parameters"]: | |
com.write("/// <param name=\"%s\">%s</param>\n" % (key, jdata["Function Parameters"][key])) | |
if not jdata["Syntax"].startswith("void"): | |
com.write("/// <returns>\n/// %s\n/// </returns>\n" % '\n/// '.join(jdata["Return Value"].split('\n'))) | |
com.write("/// <remarks>\n") | |
if not jdata["Remarks"] is None: | |
if isinstance(jdata["Remarks"], list): | |
com.write("/// %s\n" % '\n/// '.join([str(x) for x in jdata["Remarks"]])) | |
else: | |
com.write("/// %s\n" % '\n/// '.join(str(x) for x in jdata["Remarks"].split('\n'))) | |
com.write("/// %s\n" % jdata["Version"].split('\n')[0]) | |
com.write("/// </remarks>\n") | |
com.write("public static %s\n" % jdata["Syntax"]) | |
com.write("\n\n\n") | |
com.close() | |
# A little house cleaning | |
delete_json_files() | |
extract_functions_and_documentation() | |
create_cs_comments() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment