1c9f6b0acSPatrick Sanan#!/usr/bin/env python 2c9f6b0acSPatrick Sanan""" A brittle approach to making "Edit this Page" links work on man pages """ 3c9f6b0acSPatrick Sanan 4c9f6b0acSPatrick Sananimport os 5c9f6b0acSPatrick Sananimport re 6c9f6b0acSPatrick Sananimport fileinput 7c9f6b0acSPatrick Sanan 8c9f6b0acSPatrick SananEDIT_URL_PATTERN = re.compile( 9c9f6b0acSPatrick Sanan r'^<p><a.*href="(.*)">Edit on GitLab</a></p>') # very brittle 10c9f6b0acSPatrick Sanan 11c9f6b0acSPatrick Sanan 12c9f6b0acSPatrick Sanandef _get_edit_url(filename): 13c9f6b0acSPatrick Sanan """ Get the edit URL for a manual page HTML page """ 14c9f6b0acSPatrick Sanan with open(filename, "r") as f: 15c9f6b0acSPatrick Sanan for line in f: 16c9f6b0acSPatrick Sanan m = re.match(EDIT_URL_PATTERN, line) 17c9f6b0acSPatrick Sanan if m: 18c9f6b0acSPatrick Sanan return m.group(1) 19c9f6b0acSPatrick Sanan return None 20c9f6b0acSPatrick Sanan 21c9f6b0acSPatrick Sanan 22c9f6b0acSPatrick Sanandef _check_edit_link(filename): 23c9f6b0acSPatrick Sanan """ Return true if the file has an edit link to be updated """ 24c9f6b0acSPatrick Sanan found = False 25c9f6b0acSPatrick Sanan with open(filename, "r") as f: 26c9f6b0acSPatrick Sanan for line in f: 27c9f6b0acSPatrick Sanan if line.lstrip().startswith("<div") and "editthispage" in line: 28c9f6b0acSPatrick Sanan return True 29c9f6b0acSPatrick Sanan return False 30c9f6b0acSPatrick Sanan 31c9f6b0acSPatrick Sanan 32c9f6b0acSPatrick Sanandef _update_edit_link(filename, url): 33c9f6b0acSPatrick Sanan """ Update the edit this page URL """ 34c9f6b0acSPatrick Sanan with fileinput.FileInput(filename, inplace=True) as f: 35c9f6b0acSPatrick Sanan replace_link_line = False 36c9f6b0acSPatrick Sanan done = False 37c9f6b0acSPatrick Sanan for line in f: 38c9f6b0acSPatrick Sanan if done: 39c9f6b0acSPatrick Sanan print(line, end="") # prints to file 40c9f6b0acSPatrick Sanan else: 41c9f6b0acSPatrick Sanan if line.lstrip().startswith("<div") and "editthispage" in line: 42c9f6b0acSPatrick Sanan replace_link_line = True 43c9f6b0acSPatrick Sanan if replace_link_line and line.lstrip().startswith("<a"): 44c9f6b0acSPatrick Sanan print("<a href=%s>" % url) # prints to file 45c9f6b0acSPatrick Sanan done = True 46c9f6b0acSPatrick Sanan else: 47c9f6b0acSPatrick Sanan print(line, end="") # prints to file 48c9f6b0acSPatrick Sanan 49c9f6b0acSPatrick Sanan 50c9f6b0acSPatrick Sanandef fix_man_page_edit_links(root): 51*73fdd05bSBarry Smith base = os.path.join(root, "manualpages") 52c9f6b0acSPatrick Sanan for root, dirs, filenames in os.walk(base): 53c9f6b0acSPatrick Sanan for filename in filenames: 54c9f6b0acSPatrick Sanan if filename.endswith(".html"): 55c9f6b0acSPatrick Sanan filename_full = os.path.join(root, filename) 56c9f6b0acSPatrick Sanan url = _get_edit_url(filename_full) 57c9f6b0acSPatrick Sanan if url is not None and _check_edit_link(filename_full): 58c9f6b0acSPatrick Sanan _update_edit_link(filename_full, url) 59