feather/contrib/docs/generate.py

63 lines
1.6 KiB
Python

import os
import glob
DOCS_DIR = "external/feather-docs/content/_guides"
OUT_DIR = "src/assets/docs"
CATEGORY_MAP = {
"getting-started": "1. Getting started",
"howto": "2. How to",
"faq": "3. Faq",
"advanced": "4. Advanced",
"troubleshooting": "5. Troubleshooting",
"help": "6. Help",
}
if not os.path.isdir(DOCS_DIR):
print("feather-docs submodule not found. Run `git submodule update --init --recursive`")
exit(1)
outfiles = glob.glob(f"{OUT_DIR}/*.md")
for file in outfiles:
os.remove(file)
files = glob.glob(f"{DOCS_DIR}/*.md")
for file in files:
with open(file) as f:
doc = f.read()
if not doc:
continue
# yaml frontmatter missing
if doc.count("---") < 2:
continue
_, front, body = doc.split("---", 2)
front = {x: y.strip(" \"") for (x, y) in [x.split(':', 1) for x in front.splitlines()[1:]]}
if not all((x in front) for x in ['category', 'nav_title']):
continue
if front['category'] not in CATEGORY_MAP:
continue
title = front['nav_title'].replace("(", "\\(").replace(")", "\\)")
# We use this format to insert metadata while preventing it from showing up in QTextBrowser
# This is easier than adding item tags to .qrc files and parsing the XML
# We need to be able to setSource on a resource directly, otherwise history doesn't work
docString = f"""
[nav_title]: # ({title})
[category]: # ({CATEGORY_MAP[front['category']]})
## {front['title']}
{body}
"""
_, filename = file.rsplit('/', 1)
with open(f"{OUT_DIR}/{filename}", 'w') as f:
print(filename)
f.write(docString)