1""" Helper to make links in HTML pages relative to a root """ 2 3import os 4import fileinput 5 6def make_links_relative(root, placeholder="PETSC_DOC_OUT_ROOT_PLACEHOLDER"): 7 """ For .html files in root, replace placeholder with a relative path back up to root """ 8 excludes = ["_static", "_sources", "_images", "docs", "src", "include"] 9 root_level = root.count(os.path.sep) 10 for dirpath, dirnames, filenames in os.walk(root, topdown=True): 11 dirnames[:] = [dirname for dirname in dirnames if dirname not in excludes] 12 level = dirpath.count(os.path.sep) - root_level 13 relpath = os.path.sep.join([".."] * level) 14 for filename in filenames: 15 if filename.endswith(".html"): 16 filename_from_root = os.path.join(dirpath, filename) 17 with fileinput.FileInput(filename_from_root, inplace=True) as file: 18 for line in file: 19 print(line.replace(placeholder, relpath), end='') # prints to file 20