mirror of
https://github.com/n8n-io/n8n-docs.git
synced 2026-03-27 09:28:43 +07:00
55 lines
1.8 KiB
Python
Executable File
55 lines
1.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
from pathlib import Path
|
|
import argparse
|
|
import re
|
|
|
|
def find_markdown_files(directory):
|
|
"""Return a list of path objects for all markdown files in the given directory."""
|
|
return list(Path(directory).rglob("*.[mM][dD]"))
|
|
|
|
def map_urls_to_files(path_list, root_dir):
|
|
"""Return a dictionary mapping URL link targets to file targets."""
|
|
path_maps = dict()
|
|
for path in path_list:
|
|
# Here, we convert file paths to absolute paths from the root_dir
|
|
md_link_target = "/" / path.relative_to(root_dir)
|
|
url_link_target = get_url_path_from_file_path(md_link_target)
|
|
path_maps[url_link_target] = str(md_link_target)
|
|
|
|
return path_maps
|
|
|
|
def get_url_path_from_file_path(file_path):
|
|
"""Return the URL path for a given file path."""
|
|
if file_path.name == "index.md":
|
|
return str(file_path.parent)
|
|
else:
|
|
return str(file_path.parent / file_path.stem)
|
|
|
|
def main(directory):
|
|
"""
|
|
Finds Markdown files, calculates URL paths associated with them, then finds and
|
|
replaces URL paths with file paths in links throughout the repo.
|
|
"""
|
|
markdown_files = find_markdown_files(directory)
|
|
snippet_files = find_markdown_files("../_snippets")
|
|
link_maps = map_urls_to_files(markdown_files, directory)
|
|
|
|
for file in markdown_files + snippet_files:
|
|
text = file.read_text()
|
|
|
|
for url_target, file_target in link_maps.items():
|
|
find_pattern = fr"]\({url_target}/?(#[0-9A-Za-z-]+)?\)"
|
|
replace_pattern = fr"]({file_target}\1)"
|
|
text = re.sub(find_pattern, replace_pattern, text)
|
|
|
|
file.write_text(text)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description="Replace URL style link targets with markdown file targets")
|
|
parser.add_argument("--dir", type=str, default="../docs", help="Directory to scan (default: '../docs')")
|
|
|
|
args = parser.parse_args()
|
|
main(args.dir)
|
|
|