xref: /petsc/doc/make_links_relative.py (revision af4fa82cc29c77689f3cd2af837601dbdc3602c2)
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