1717from 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 :
0 commit comments