xref: /petsc/doc/make_links_relative.py (revision 1540e0edc209231c3156229979b6b9cb2b2552e8)
17553d27dSPatrick Sanan""" Helper to make links in HTML pages relative to a root """
27553d27dSPatrick Sanan
37553d27dSPatrick Sananimport os
47553d27dSPatrick Sananimport fileinput
57553d27dSPatrick Sanan
6*1540e0edSPatrick Sananfrom ext.html5_petsc import PETSC_DOC_OUT_ROOT_PLACEHOLDER
7*1540e0edSPatrick Sananfrom build_classic_docs import classic_docs_subdirs
8*1540e0edSPatrick Sanan
9*1540e0edSPatrick Sanan
10*1540e0edSPatrick Sanandef make_links_relative(root, placeholder=PETSC_DOC_OUT_ROOT_PLACEHOLDER):
11*1540e0edSPatrick Sanan    """ For .html files in root, replace placeholder with a relative path back up to root
12*1540e0edSPatrick Sanan
13*1540e0edSPatrick Sanan        Exclude a specific set of subdirectories.
14*1540e0edSPatrick Sanan    """
15*1540e0edSPatrick Sanan    excludes = ["_static", "_sources", "_images"]
16*1540e0edSPatrick Sanan    excludes.extend(classic_docs_subdirs())
177553d27dSPatrick Sanan    root_level = root.count(os.path.sep)
187553d27dSPatrick Sanan    for dirpath, dirnames, filenames in os.walk(root, topdown=True):
197553d27dSPatrick Sanan        dirnames[:] = [dirname for dirname in dirnames if dirname not in excludes]
207553d27dSPatrick Sanan        level = dirpath.count(os.path.sep) - root_level
211f43888bSPatrick Sanan        relpath = os.path.sep.join([".."] * level)
227553d27dSPatrick Sanan        for filename in filenames:
237553d27dSPatrick Sanan            if filename.endswith(".html"):
247553d27dSPatrick Sanan                filename_from_root = os.path.join(dirpath, filename)
257553d27dSPatrick Sanan                with fileinput.FileInput(filename_from_root, inplace=True) as file:
267553d27dSPatrick Sanan                    for line in file:
277553d27dSPatrick Sanan                        print(line.replace(placeholder, relpath), end='')  # prints to file
28