From 2697b1a53f8df50f99da7088d25d0b374438ec3f Mon Sep 17 00:00:00 2001 From: Tim Paine <3105306+timkpaine@users.noreply.github.com> Date: Fri, 6 Feb 2026 10:13:45 -0500 Subject: [PATCH] Wiki tweaks --- yardang/wiki.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/yardang/wiki.py b/yardang/wiki.py index a66a8dc..136e69f 100644 --- a/yardang/wiki.py +++ b/yardang/wiki.py @@ -134,6 +134,8 @@ def cleanup_markdown(content: str) -> str: - Expands collapsed HTML tags onto multiple lines - Removes anchor tags before headings - Fixes collapsed badge lines + - Fixes collapsed code blocks + - Reduces large image sizes - Cleans up extra whitespace Args: @@ -145,6 +147,14 @@ def cleanup_markdown(content: str) -> str: # Remove anchor tags before headings (e.g., ) content = re.sub(r'\s*\n?', "", content) + # Reduce image widths by 50% for wiki (GitHub wiki renders larger) + def reduce_image_width(match): + width = int(match.group(1)) + new_width = max(16, width // 2) # Reduce by 50%, minimum 16px + return f'width="{new_width}"' + + content = re.sub(r'width="(\d+)"', reduce_image_width, content) + # Fix collapsed div tags - add newlines after > and before < # Match:
content
and expand it def expand_div(match): @@ -159,6 +169,38 @@ def expand_div(match): # Match multiple consecutive badges and separate them content = re.sub(r"\]\)\s*\[!\[", "])\n\n[![", content) + # Fix collapsed code blocks - the sphinx-markdown-builder collapses + # multi-line code into single lines with multiple spaces + def fix_code_block(match): + lang = match.group(1) or "" + code = match.group(2) + + # Replace 2+ spaces with newlines, being careful about context + # First, handle obvious statement boundaries + + # Python: statement followed by spaces then new statement + code = re.sub( + r"([\)\]\"\'])\s{2,}(def |class |import |from |with |if |elif |else:|for |while |return |raise |try:|except|finally:|#|@\w)", + r"\1\n\2", + code, + ) + + # Python: assignment or call followed by new statement + code = re.sub(r"(\w)\s{2,}(def |class |import |from |with |if |for |while |return |#)", r"\1\n\2", code) + + # YAML: value followed by new key at same or lower indent level + code = re.sub(r"(\]|\"|\'|\w)\s{2,}(\w+:)", r"\1\n\2", code) + + # YAML: list item followed by another list item or key + code = re.sub(r"(-\s+\S[^\n]*)\s{2,}(-\s+|\w+:)", r"\1\n\2", code) + + # Generic: detect lines that got merged (4+ spaces often indicates this) + code = re.sub(r"(\S)\s{4,}(\S)", r"\1\n\2", code) + + return f"```{lang}\n{code}\n```" + + content = re.sub(r"```(\w*)\n?(.*?)\n?```", fix_code_block, content, flags=re.DOTALL) + # Remove excessive blank lines (more than 2) content = re.sub(r"\n{4,}", "\n\n\n", content)