xref: /petsc/doc/make_links_relative.py (revision 7553d27d8b2434544c11e8fee3511aba719e94fa)
1*7553d27dSPatrick Sanan#!/usr/bin/env python
2*7553d27dSPatrick Sanan""" Helper to make links in HTML pages relative to a root """
3*7553d27dSPatrick Sanan
4*7553d27dSPatrick Sananimport os
5*7553d27dSPatrick Sananimport fileinput
6*7553d27dSPatrick Sanan
7*7553d27dSPatrick Sanandef make_links_relative(root, placeholder="PETSC_DOC_ROOT_PLACEHOLDER"):
8*7553d27dSPatrick Sanan    """ For .html files in root, replace placeholder with a relative path back up to root """
9*7553d27dSPatrick Sanan    excludes = ["_static", "_sources", "_images", "docs", "src", "include"]
10*7553d27dSPatrick Sanan    root_level = root.count(os.path.sep)
11*7553d27dSPatrick Sanan    for dirpath, dirnames, filenames in os.walk(root, topdown=True):
12*7553d27dSPatrick Sanan        dirnames[:] = [dirname for dirname in dirnames if dirname not in excludes]
13*7553d27dSPatrick Sanan        level = dirpath.count(os.path.sep) - root_level
14*7553d27dSPatrick Sanan        relpath = (".." + os.path.sep) * level
15*7553d27dSPatrick Sanan        for filename in filenames:
16*7553d27dSPatrick Sanan            if filename.endswith(".html"):
17*7553d27dSPatrick Sanan                filename_from_root = os.path.join(dirpath, filename)
18*7553d27dSPatrick Sanan                with fileinput.FileInput(filename_from_root, inplace=True) as file:
19*7553d27dSPatrick Sanan                    for line in file:
20*7553d27dSPatrick Sanan                        print(line.replace(placeholder, relpath), end='')  # prints to file
21