Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

man: allow register all addons keywords in main Keywords Index #2529

Merged
merged 2 commits into from
Sep 9, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 52 additions & 7 deletions man/build_keywords.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,22 @@
#!/usr/bin/env python3

# generates keywords.html
# (c) 2013 by the GRASS Development Team, Luca Delucchi
"""
Generates keywords.html file for core and optionally for addons modules.

Usage:

Generate core modules keywords HTML page

python man/build_keywords.py <path_to_core_modules_html_man_files>

Generate core modules and optionally inject addons keywords HTML page

python man/build_keywords.py <dir_path_to_core_modules_html_man_files>
<dir_path_to_addons_modules_html_man_files>

@author Luca Delucchi
@author Tomas Zigo <tomas.zigo slovanet.sk> - inject addons modules keywords
"""

import os
import sys
Expand All @@ -22,18 +37,45 @@
]

path = sys.argv[1]
addons_path = None
if len(sys.argv) >= 3:
addons_path = sys.argv[2]

year = os.getenv("VERSION_DATE")

keywords = {}

htmlfiles = glob.glob1(path, "*.html")
htmlfiles = glob.glob(os.path.join(path, "*.html"))
if addons_path:
addons_man_files = glob.glob(os.path.join(addons_path, "*.html"))
htmlfiles.extend(addons_man_files)

char_list = {}

for fname in htmlfiles:
fil = open(os.path.join(path, fname))

def get_module_man_html_file_path(module):
"""Get module manual HTML file path

:param str module: module manual HTML file name e.g. v.surf.rst.html

:return str module_path: core/addon module manual HTML file path
"""
if addons_path and module in ",".join(addons_man_files):
module_path = os.path.join(addons_path, module)
module_path = module_path.replace(
os.path.commonpath([path, module_path]),
".",
)
else:
module_path = os.path.join(path, module)
return module_path


for html_file in htmlfiles:
fname = os.path.basename(html_file)
with open(html_file) as f:
lines = f.readlines()
# TODO maybe move to Python re (regex)
lines = fil.readlines()
# remove empty lines
lines = [x for x in lines if x != "\n"]
try:
Expand Down Expand Up @@ -95,7 +137,10 @@
key,
)
for value in sorted(keywords[key]):
keyword_line += ' <a href="%s">%s</a>,' % (value, value.replace(".html", ""))
keyword_line += (
f' <a href="{get_module_man_html_file_path(value)}">'
f'{value.replace(".html", "")}</a>,'
)
keyword_line = keyword_line.rstrip(",")
keyword_line += "</dd>\n"
keywordsfile.write(keyword_line)
Expand Down