@@ -123,13 +123,17 @@ def flush_buffer():
123123 elif token_type == 'link' :
124124 flush_buffer ()
125125 text = self ._flatten_inline_text (token .get ('children' , []))
126- url = token .get ('attrs' , {}).get ('url' , '' )
127- nodes .append (Link (f"[{ text } ]({ url } )" ))
126+ attrs = token .get ('attrs' , {})
127+ url = attrs .get ('url' , '' )
128+ title = attrs .get ('title' )
129+ nodes .append (Link (_format_link_markup (text , url , title )))
128130 elif token_type == 'image' :
129131 flush_buffer ()
130132 alt = token .get ('attrs' , {}).get ('alt' ) or self ._flatten_inline_text (token .get ('children' , []))
131- url = token .get ('attrs' , {}).get ('url' , '' )
132- nodes .append (Image (f"" ))
133+ attrs = token .get ('attrs' , {})
134+ url = attrs .get ('url' , '' )
135+ title = attrs .get ('title' )
136+ nodes .append (Image (_format_image_markup (alt , url , title )))
133137 else :
134138 flush_buffer ()
135139 children = token .get ('children' , [])
@@ -290,6 +294,21 @@ def _append_text(nodes, text):
290294 nodes .append (Text (text ))
291295
292296
297+ def _format_title (title : str ) -> str :
298+ if title is None :
299+ return ''
300+ escaped = title .replace ('"' , '\\ "' )
301+ return f' "{ escaped } "'
302+
303+
304+ def _format_link_markup (text : str , url : str , title : str | None ) -> str :
305+ return f'[{ text } ]({ url } { _format_title (title )} )'
306+
307+
308+ def _format_image_markup (alt : str , url : str , title : str | None ) -> str :
309+ return f'} )'
310+
311+
293312def _is_block_html (raw : str ) -> bool :
294313 stripped = raw .lstrip ()
295314 if stripped .startswith ('<!--' ):
@@ -363,4 +382,7 @@ def parse(text, parser_cls: type[MdParser] = MdParser):
363382 parser = parser_cls ()
364383 if hasattr (parser , '_set_reference_definitions' ):
365384 parser ._set_reference_definitions (reference_definitions )
366- return parser .parse (text )
385+ result = parser .parse (text )
386+ if isinstance (result , list ):
387+ return Root (result )
388+ return result
0 commit comments