Skip to content

Instantly share code, notes, and snippets.

@Blizzardo1
Created December 31, 2023 07:56
Show Gist options
  • Save Blizzardo1/be3ad3512aa05768d8945e2ed664d77a to your computer and use it in GitHub Desktop.
Save Blizzardo1/be3ad3512aa05768d8945e2ed664d77a to your computer and use it in GitHub Desktop.
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