# SPDX-License-Identifier: MIT import sys from pathlib import Path def anchorstring(str): doxyref=str.replace("/", "") # can't simply use lower() as github-markdown retains non-leading uppercase characters # so lowercase only every char after a space: drwords = doxyref.split(" ") doxyref = "" i = 0 while i < len(drwords): if len(drwords[i]) != 0: doxyref = doxyref+drwords[i][0].lower() + drwords[i][1:] if i < len(drwords)-1: doxyref=doxyref+"-" i=i+1 return doxyref def reformat_anchors(s): if "](#" in s: i = s.index("](#") + 3 j = s[i:].index(")") + i return s[0:i] + anchorstring(s[i:j]) + s[j:] else: return s if len(sys.argv) != 3 or not Path(sys.argv[1]).is_file(): print("Expecting original and new file location. Exiting.") exit(1) infile = open(sys.argv[1], 'r') lines = infile.readlines() with open(sys.argv[2], "w") as outfile: # ll is last line: can only be written when anchor property is known # and that propery can be set with subsequent line of "===" ll = None possibleanchor = None for line in lines: nl = line if line.startswith("#"): # anchor for sure # space must exist si = line.index(" ") doxyref=anchorstring(line[si+1:].strip()) nl = line[0:si] + " " + line[si+1:].strip() + " {#"+doxyref+"}\n" elif nl.startswith("==="): # previous line is anchor ll = possibleanchor else: # create anchor markup just in case... possibleanchor=line.strip()+" {#"+anchorstring(line.strip())+"}\n" if ll is not None: ll = reformat_anchors(ll) # write last line if ll is not None: outfile.write(ll) ll = nl # write final line outfile.write(ll)