178163631SBarry Smith""" Make links in HTML pages relative to a root """ 27553d27dSPatrick Sanan 37553d27dSPatrick Sananimport os 47553d27dSPatrick Sananimport fileinput 57553d27dSPatrick Sanan 61540e0edSPatrick Sananfrom ext.html5_petsc import PETSC_DOC_OUT_ROOT_PLACEHOLDER 71540e0edSPatrick Sanan 81540e0edSPatrick Sanandef make_links_relative(root, placeholder=PETSC_DOC_OUT_ROOT_PLACEHOLDER): 978163631SBarry Smith """ For all generated .html files in directory root and descendants replace placeholder with a relative path back up to root 101540e0edSPatrick Sanan Exclude a specific set of subdirectories. 111540e0edSPatrick Sanan """ 121540e0edSPatrick Sanan excludes = ["_static", "_sources", "_images"] 13*3e7f94c0SBarry Smith root_level = os.fspath(root).count(os.path.sep) 147553d27dSPatrick Sanan for dirpath, dirnames, filenames in os.walk(root, topdown=True): 157553d27dSPatrick Sanan dirnames[:] = [dirname for dirname in dirnames if dirname not in excludes] 16*3e7f94c0SBarry Smith level = os.fspath(dirpath).count(os.path.sep) - root_level 17d03e359eSBarry Smith if level == 0: relpath = "." 18d03e359eSBarry Smith else: relpath = os.path.sep.join([".."] * level) 197553d27dSPatrick Sanan for filename in filenames: 207553d27dSPatrick Sanan if filename.endswith(".html"): 217553d27dSPatrick Sanan filename_from_root = os.path.join(dirpath, filename) 227553d27dSPatrick Sanan with fileinput.FileInput(filename_from_root, inplace=True) as file: 237553d27dSPatrick Sanan for line in file: 247553d27dSPatrick Sanan print(line.replace(placeholder, relpath), end='') # prints to file 25