""" Github publishes the markdown documentation with jekyll enabled. This extension does not publish any folder starting with `_`. These folders need to be renamed. """ import os import re def rename_folder(root): """ Renames all folder starting with `_`. Returns the list of renamed folders. """ found = [] for r, dirs, files in os.walk(root): for name in dirs: if name.startswith("_"): found.append((r, name)) renamed = [] for r, name in found: into = name.lstrip("_") renamed.append((r, name, into)) full_src = os.path.join(r, name) full_into = os.path.join(r, into) if os.path.exists(full_into): raise RuntimeError("%r already exists, previous documentation should be removed.") print("rename %r" % full_src) os.rename(full_src, full_into) return renamed def replace_files(root, renamed): subs = {r[1]: r[2] for r in renamed} reg = re.compile('(\\"[a-zA-Z0-9\\.\\/\\?\\:@\\-_=#]+\\.([a-zA-Z]){2,6}' '([a-zA-Z0-9\\.\\&\\/\\?\\:@\\-_=#])*\\")') for r, dirs, files in os.walk(root): for name in files: if os.path.splitext(name)[-1] != ".html": continue full = os.path.join(r, name) with open(full, "r", encoding="utf-8") as f: content = f.read() find = reg.findall(content) repl = [] for f in find: if f[0].startswith("http"): continue for k, v in subs.items(): if k == v: raise ValueError("%r == %r" % (k, v)) if ('"%s' % k) in f[0]: repl.append((f[0], f[0].replace('"%s' % k, '"%s' % v))) if ("/%s" % k) in f[0]: repl.append((f[0], f[0].replace("/%s" % k, "/%s" % v))) if len(repl) == 0: continue print("update %r" % full) for k, v in repl: content = content.replace(k, v) with open(full, "w", encoding="utf-8") as f: f.write(content) if __name__ == "__main__": import sys if len(sys.argv) > 1: root = sys.argv[-1] else: root = "../../build/docs/html" print("look into %r" % root) ren = rename_folder(root) if len(ren) == 0: ren = [ ("", "_static", "static"), ("", "_images", "images"), ("", "_downloads", "downloads"), ("", "_sources", "sources"), ("", "_modules", "modules"), ] replace_files(root, ren) print("done.")