1#!/usr/bin/env python3 2""" A brittle approach to making "Edit this Page" links work on man pages """ 3 4import os 5import re 6import fileinput 7 8EDIT_URL_PATTERN = re.compile(r'<p><a.*href="(.*)">Edit on GitLab</a></p>') # very brittle 9SHOW_SOURCE_PATTERN = re.compile(r'(?s)<div class="toc-item">\s*<div class="tocsection sourcelink">.*<a href=.*>.*<i class="fa-solid fa-file-lines"></i> Show Source\s*</a>\s*</div>\s*</div>') 10 11def fix_man_page_edit_link(root,filename): 12 with open(os.path.join(root,filename)) as f: 13 str = f.read() 14 m = re.findall(EDIT_URL_PATTERN, str) 15 if not m: 16 # print("Cannot find Edit on Gitlab string "+os.path.join(root,filename)) 17 return 18 url = m[0] 19 str = re.sub(SHOW_SOURCE_PATTERN,'',str) 20 replace_link_line = False 21 done = False 22 with open(os.path.join(root,filename),'w') as f: 23 for line in str.split('\n'): 24 if done: 25 f.write(line+'\n') 26 else: 27 if line.lstrip().startswith("<div") and "editthispage" in line: 28 replace_link_line = True 29 if replace_link_line and line.lstrip().startswith("<a"): 30 f.write("<a href=%s>\n" % url) 31 done = True 32 elif not 'Edit on GitLab' in line: 33 f.write(line+'\n') 34 35def fix_man_page_edit_links(root): 36 base = os.path.join(root, "manualpages") 37 for root, dirs, filenames in os.walk(base): 38 for filename in filenames: 39 if filename.endswith(".html"): 40 fix_man_page_edit_link(root,filename) 41