Skip to content

Commit 85c7849

Browse files
committed
Bugfix of title quotes.
1 parent f633525 commit 85c7849

File tree

2 files changed

+40
-9
lines changed

2 files changed

+40
-9
lines changed

‎src/flowmark/custom_marko.py‎

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@
1717
from flowmark.line_wrappers import LineWrapper
1818

1919

20+
def _normalize_title_quotes(title: str) -> str:
21+
"""
22+
Normalize title quotes.
23+
"""
24+
escaped = title.strip('"').replace('"', '\\"')
25+
return f'"{escaped}"'
26+
27+
2028
# XXX Turn off Marko's parsing of block HTML.
2129
# Block parsing with comments or block elements has some counterintuitive issues:
2230
# https://github.com/frostming/marko/issues/202
@@ -193,9 +201,7 @@ def render_link_ref_def(self, element: block.LinkRefDef) -> str:
193201
"""
194202
link_text = element.dest
195203
if element.title:
196-
# Ensure title quotes are handled correctly
197-
escaped_title = element.title.replace('"', '\\"')
198-
link_text += f' "{escaped_title}"'
204+
link_text += f" {_normalize_title_quotes(element.title)}"
199205
result = f"{self._prefix}[{element.label}]: {link_text}\n"
200206
self._prefix = self._second_prefix
201207
self._suppress_item_break = True
@@ -212,7 +218,7 @@ def render_inline_html(self, element: inline.InlineHTML) -> str:
212218

213219
def render_link(self, element: inline.Link) -> str:
214220
link_text = self.render_children(element)
215-
link_title = '"{}"'.format(element.title.replace('"', '\\"')) if element.title else None
221+
link_title = _normalize_title_quotes(element.title) if element.title else None
216222
assert self.root_node
217223
label = next(
218224
(k for k, v in self.root_node.link_ref_defs.items() if v == (element.dest, link_title)),
@@ -230,7 +236,7 @@ def render_auto_link(self, element: inline.AutoLink) -> str:
230236

231237
def render_image(self, element: inline.Image) -> str:
232238
template = "![{}]({}{})"
233-
title = ' "{}"'.format(element.title.replace('"', '\\"')) if element.title else ""
239+
title = f" {_normalize_title_quotes(element.title)}" if element.title else ""
234240
return template.format(self.render_children(element), element.dest, title)
235241

236242
def render_literal(self, element: inline.Literal) -> str:

‎uv.lock‎

Lines changed: 29 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)