1*1b37a2a7SPierre Jolivet#!/usr/bin/env python3 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 83ecf4727SBarry SmithEDIT_URL_PATTERN = re.compile(r'<p><a.*href="(.*)">Edit on GitLab</a></p>') # very brittle 93ecf4727SBarry SmithSHOW_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>') 10c9f6b0acSPatrick Sanan 113ecf4727SBarry Smithdef fix_man_page_edit_link(root,filename): 123ecf4727SBarry Smith with open(os.path.join(root,filename)) as f: 133ecf4727SBarry Smith str = f.read() 143ecf4727SBarry Smith m = re.findall(EDIT_URL_PATTERN, str) 153ecf4727SBarry Smith if not m: 163ecf4727SBarry Smith # print("Cannot find Edit on Gitlab string "+os.path.join(root,filename)) 173ecf4727SBarry Smith return 183ecf4727SBarry Smith url = m[0] 193ecf4727SBarry Smith str = re.sub(SHOW_SOURCE_PATTERN,'',str) 20c9f6b0acSPatrick Sanan replace_link_line = False 21c9f6b0acSPatrick Sanan done = False 223ecf4727SBarry Smith with open(os.path.join(root,filename),'w') as f: 233ecf4727SBarry Smith for line in str.split('\n'): 24c9f6b0acSPatrick Sanan if done: 253ecf4727SBarry Smith f.write(line+'\n') 26c9f6b0acSPatrick Sanan else: 27c9f6b0acSPatrick Sanan if line.lstrip().startswith("<div") and "editthispage" in line: 28c9f6b0acSPatrick Sanan replace_link_line = True 29c9f6b0acSPatrick Sanan if replace_link_line and line.lstrip().startswith("<a"): 303ecf4727SBarry Smith f.write("<a href=%s>\n" % url) 31c9f6b0acSPatrick Sanan done = True 329a968e71SBarry Smith elif not 'Edit on GitLab' in line: 333ecf4727SBarry Smith f.write(line+'\n') 34c9f6b0acSPatrick Sanan 35c9f6b0acSPatrick Sanandef fix_man_page_edit_links(root): 3673fdd05bSBarry Smith base = os.path.join(root, "manualpages") 37c9f6b0acSPatrick Sanan for root, dirs, filenames in os.walk(base): 38c9f6b0acSPatrick Sanan for filename in filenames: 39c9f6b0acSPatrick Sanan if filename.endswith(".html"): 403ecf4727SBarry Smith fix_man_page_edit_link(root,filename) 41