1313"""
1414
1515
16- def generate_character_links_line ( characters , current = None ):
16+ def generate_quick_links_line ( chars , level , current = None ):
1717 """
1818 Generate links to index page for each character
1919 :param characters: Initial characters to generate links for
2020 """
21+ up = '/' .join (['..' ] * level ) or '.'
2122 links = []
22- for c in characters :
23- if c == current :
24- links .append (f'*{ c } *' )
23+ if level > 0 :
24+ links .append (f"[(all)]({ up } /index.md)" )
25+ for char in chars :
26+ if char == current :
27+ links .append (f'*{ char } *' )
2528 else :
26- links .append (f"[{ c } ](../{ c } /index.md)" )
27- return f"{ ' - ' .join (links )} \n \n "
29+ links .append (f"[{ char } ]({ up } /{ char } /index.md)" )
30+ links_txt = ' - ' .join (links )
31+ return f"*(quick links: { links_txt } )*\n \n "
2832
2933
3034def output_markdown (processed , output_base_path ):
@@ -33,12 +37,14 @@ def output_markdown(processed, output_base_path):
3337 :param processed: Processed data to output (dictionary - letter -> software -> list of versions)
3438 :param output_base_path: Pathlib object for base path of output
3539 """
36- packages = sum (len (v ) for v in processed .values ())
40+ software_cnt = sum (len (v ) for v in processed .values ())
41+ letters = sorted (processed .keys ())
3742
3843 with open (output_base_path / 'index.md' , 'w' ) as top_page :
3944 top_page .write (MKDOCS_SEARCH_PRIORITY )
4045 top_page .write ("# List of supported software\n \n " )
41- top_page .write (f"EasyBuild supports { packages } different software packages (incl. toolchains, bundles):\n \n " )
46+ top_page .write (generate_quick_links_line (letters , 0 ))
47+ top_page .write (f"EasyBuild supports { software_cnt } different software packages (incl. toolchains, bundles):\n \n " )
4248
4349 for letter in processed :
4450 top_page .write (f" * [{ letter } ]({ letter } /index.md)\n " )
@@ -48,7 +54,7 @@ def output_markdown(processed, output_base_path):
4854 with open (letter_dir / 'index.md' , 'w' ) as letter_page :
4955 letter_page .write (MKDOCS_SEARCH_PRIORITY )
5056 letter_page .write (f"# List of supported software ({ letter } )\n \n " )
51- letter_page .write (generate_character_links_line ([ v for v in processed ] , current = letter ))
57+ letter_page .write (generate_quick_links_line ( letters , 1 , current = letter ) + " \n \n " )
5258
5359 for software in processed [letter ]:
5460 top_page .write (f" * [{ software } ]({ letter } /{ software } .md)\n " )
@@ -77,8 +83,11 @@ def output_markdown(processed, output_base_path):
7783 software_page .write (" | " )
7884 software_page .write (f"``{ version ['toolchain' ]} ``\n " )
7985
80- software_page .write ('\n ' )
81- software_page .write (generate_character_links_line ([v for v in processed ]))
86+ software_page .write ("\n \n " + generate_quick_links_line (letters , 1 ))
87+
88+ letter_page .write ("\n \n " + generate_quick_links_line (letters , 1 , current = letter ))
89+
90+ top_page .write ("\n \n " + generate_quick_links_line (letters , 0 ))
8291
8392
8493def generate_markdown_pages (jsonfile , output_base , delete_existing ):
0 commit comments