mirror of
https://github.com/makew0rld/amfora.git
synced 2024-12-04 14:46:29 -05:00
111 lines
2.2 KiB
Python
111 lines
2.2 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
# Formatted with black.
|
||
|
|
||
|
import shutil
|
||
|
import subprocess
|
||
|
import sys
|
||
|
import os
|
||
|
import md2gemini
|
||
|
|
||
|
TMP_WIKI_CLONE = "/tmp/amfora.wiki"
|
||
|
|
||
|
|
||
|
def md2gem(markdown):
|
||
|
return md2gemini.md2gemini(
|
||
|
markdown,
|
||
|
links="copy",
|
||
|
plain=False,
|
||
|
strip_html=True,
|
||
|
md_links=True,
|
||
|
link_func=link_func,
|
||
|
)
|
||
|
|
||
|
|
||
|
def link_func(link):
|
||
|
if "://" in link:
|
||
|
# Absolute URL
|
||
|
return link
|
||
|
|
||
|
# Link to other wiki page
|
||
|
return link + ".gmi"
|
||
|
|
||
|
|
||
|
def run_cmd(*args):
|
||
|
proc = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||
|
if proc.returncode != 0:
|
||
|
print(
|
||
|
"Command "
|
||
|
+ " ".join(args)
|
||
|
+ "failed with exit code "
|
||
|
+ str(proc.returncode)
|
||
|
)
|
||
|
print("Output was:")
|
||
|
print()
|
||
|
print(proc.stdout.decode())
|
||
|
sys.exit(1)
|
||
|
|
||
|
|
||
|
# Delete leftover git repo
|
||
|
try:
|
||
|
shutil.rmtree(TMP_WIKI_CLONE)
|
||
|
except FileNotFoundError:
|
||
|
pass
|
||
|
|
||
|
os.mkdir(TMP_WIKI_CLONE)
|
||
|
|
||
|
run_cmd(
|
||
|
"git",
|
||
|
"clone",
|
||
|
"--depth",
|
||
|
"1",
|
||
|
"https://github.com/makeworld-the-better-one/amfora.wiki.git",
|
||
|
TMP_WIKI_CLONE,
|
||
|
)
|
||
|
|
||
|
# Save special files
|
||
|
|
||
|
with open(os.path.join(TMP_WIKI_CLONE, "_Footer.md"), "r") as f:
|
||
|
footer = md2gem(f.read())
|
||
|
|
||
|
# Get files
|
||
|
(_, _, files) = next(os.walk(TMP_WIKI_CLONE))
|
||
|
|
||
|
# Create list of pages
|
||
|
pages = "## Pages\n\n=>.. Home\n"
|
||
|
for file in files:
|
||
|
|
||
|
if file in ["_Footer.md", "_Sidebar.md", "Home.md"]:
|
||
|
continue
|
||
|
if not file.endswith(".md"):
|
||
|
continue
|
||
|
pages += "=>" + file[:-2] + "gmi " + file[:-3].replace("-", " ") + "\n"
|
||
|
|
||
|
pages += "\n\n"
|
||
|
|
||
|
for file in files:
|
||
|
filepath = os.path.join(TMP_WIKI_CLONE, file)
|
||
|
|
||
|
if file in ["_Footer.md", "_Sidebar.md"]:
|
||
|
continue
|
||
|
if not file.endswith(".md"):
|
||
|
# Could be a resource like an image file, copy it
|
||
|
shutil.copyfile(filepath, file)
|
||
|
continue
|
||
|
|
||
|
# Markdown file
|
||
|
|
||
|
with open(filepath, "r") as f:
|
||
|
gemtext = md2gem(f.read())
|
||
|
|
||
|
# Add title, sidebar, footer
|
||
|
gemtext = "# " + file[:-3].replace("-", " ") + "\n\n" + pages + gemtext
|
||
|
gemtext += "\n\n\n\n" + footer
|
||
|
|
||
|
if file == "Home.md":
|
||
|
file = "index.md"
|
||
|
|
||
|
new_name = file[:-2] + "gmi"
|
||
|
|
||
|
with open(new_name, "w") as f:
|
||
|
f.write(gemtext)
|