From 421912200c2fa86cb2b767baba49438dee4e376c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 7 Sep 2016 18:38:30 +0200 Subject: [PATCH] add script to generate a table of content in the wiki on github --- .../add_toc_to_github_wiki_page.py | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 Scripts/developer_scripts/add_toc_to_github_wiki_page.py diff --git a/Scripts/developer_scripts/add_toc_to_github_wiki_page.py b/Scripts/developer_scripts/add_toc_to_github_wiki_page.py new file mode 100644 index 00000000000..d58ebb93473 --- /dev/null +++ b/Scripts/developer_scripts/add_toc_to_github_wiki_page.py @@ -0,0 +1,98 @@ +from sys import argv +from sys import exit +import codecs +import re + +# a probably incomplete version to generate an anchor from a section name +def get_anchor(s): + s = s.replace("`","") + s = s.replace("(","") + s = s.replace(")","") + s = s.replace(".","") + s = s.replace("#","") + s = s.lstrip(" ") + s = s.rstrip("\n") + s = s.rstrip(" ") + s = s.replace(" ","-") + s = s.lower() + return "#"+s + +# indices the nesting level (first level allowed is ##) +def get_level(s): + m = re.search('^(#+)\s', s) + if m: + return len(m.group(1)) + else: + return 0 + +def get_name(s): + m = re.search('^#+\s+(.*)\s*$', s) + if m: + return m.group(1) + else: + return "ERROR: Section name extraction" + +#generate the entry for one section +def get_toc_entry(s): + name = get_name(s) + level = get_level(s)-2 + anchor = get_anchor(s) + + if level<0: + return "ERROR: h1 section are not allowed" + + res="* ["+name+"]("+anchor+")" + for i in range(0,level): + res=" "+res + return res + +#now the main +if len(argv) < 2: + print("Nothing done, no input file provided") + exit() + +input = argv[1] + +f = codecs.open(input, 'r', encoding='utf-8') + +if not f: + print("Cannot open "+input+"\n") + exit() + +#look for the begin of the file +line=f.readline() +if line.find("")==-1: + exit() + +#skip current TOC +line=f.readline() +while line and line.find("")==-1: + line=f.readline() + +if not line: + exit() + +buffer="" +TOC="\n\n# Table of Contents\n" + +verbatim_mode=False # to ignore verbatim mode while looking for sections +TOC_empty=True +for line in f.readlines(): + buffer+=line + if verbatim_mode: + if line[:3]=="```": + verbatim_mode=False + else: + if line[:3]=="```": + verbatim_mode=True + else: + if line[0]=="#": + TOC+=(get_toc_entry(line)+"\n") + TOC_empty=False +TOC+="\n\n" + +if not TOC_empty: + f.close() + f = codecs.open(input, 'w', encoding='utf-8') + f.write(TOC) + f.write(buffer)