blob: 3533145174bc9083e29364755ce5701c0be777db [file] [log] [blame]
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
"""Common utilities used by mdbook pre-processors."""
import sys
import re
from os import path
from typing import List, Any, Dict, Generator, Set
from pathlib import Path
LINK_PATTERN_STR = r"\[(.*?)\]\(([^#\?\)]*)(.*?)\)"
LINK_PATTERN = re.compile(LINK_PATTERN_STR)
def change_link_ext(
file_list: Set[Path],
content: str,
new_suffix: str,
book_root: Path,
page_path: Path,
) -> str:
def suffix_swap(match: re.Match) -> str:
"""Swaps the extension of the file being linked to if it is a ip block config."""
try:
# relative_to can fail with a value error, if it isn't a local link
book_relative_path = (page_path / match.group(2)).resolve().relative_to(book_root)
except ValueError:
return match.group(0)
if book_relative_path in file_list:
return "[{}]({}{}{})".format(
match.group(1),
path.splitext(match.group(2))[0],
new_suffix,
match.group(3),
)
else:
return match.group(0)
return LINK_PATTERN.sub(suffix_swap, content)
def supports_html_only() -> None:
if len(sys.argv) > 2:
if (sys.argv[1], sys.argv[2]) == ("supports", "html"):
sys.exit(0)
else:
sys.exit(1)
def chapters(items: List[Dict[str, Any]]) -> Generator[Dict[str, Any], None, None]:
"""Recursively yields all chapters"""
for chapter in (item.get("Chapter") for item in items):
if not chapter:
continue
for sub_chapter in chapters(chapter["sub_items"]):
yield sub_chapter
yield chapter