improve: add early return, escape markdown brackets in labels and parentheses in URLs

- Early return when no entityRanges (skip unnecessary processing)
- Escape [ and ] in link labels to prevent nested bracket issues
- Encode ) in URLs as %29 to prevent malformed markdown links (e.g. Wikipedia)
- Add 3 new test cases for the above edge cases
This commit is contained in:
jackwener
2026-03-21 17:48:02 +08:00
parent b7c7ef826c
commit b752c31dfd
2 changed files with 30 additions and 3 deletions

View File

@@ -549,6 +549,26 @@ class TestRenderArticleTextBlock:
assert _render_article_text_block(block, entity_map) == "abc"
def test_returns_plain_text_when_no_entity_ranges(self):
block = {"text": "Hello world"}
assert _render_article_text_block(block, {}) == "Hello world"
def test_encodes_parentheses_in_url(self):
block = {"text": "see Wiki", "entityRanges": [{"key": 0, "offset": 4, "length": 4}]}
entity_map = {"0": {"type": "LINK", "data": {"url": "https://en.wikipedia.org/wiki/Rust_(programming_language)"}}}
assert _render_article_text_block(block, entity_map) == (
"see [Wiki](https://en.wikipedia.org/wiki/Rust_(programming_language%29)"
)
def test_escapes_brackets_in_label(self):
block = {"text": "see [docs] now", "entityRanges": [{"key": 0, "offset": 4, "length": 6}]}
entity_map = {"0": {"type": "LINK", "data": {"url": "https://example.com"}}}
assert _render_article_text_block(block, entity_map) == (
"see [\\[docs\\]](https://example.com) now"
)
class TestParseArticle:
def test_preserves_atomic_markdown_between_text_blocks(self):