@@ -93,6 +93,8 @@ def __init__(self, md: Markdown, *args, **kwargs):
9393
9494        self .lineno_start_cache  =  [0 ]
9595
96+         self .override_comment_update  =  False 
97+ 
9698        # This calls self.reset 
9799        super ().__init__ (* args , ** kwargs )
98100        self .md  =  md 
@@ -253,8 +255,21 @@ def handle_entityref(self, name: str):
253255        self .handle_empty_tag ('&{};' .format (name ), is_block = False )
254256
255257    def  handle_comment (self , data : str ):
258+         # Check if the comment is unclosed, if so, we need to override position 
259+         i  =  self .line_offset  +  self .offset  +  len (data ) +  4 
260+         if  self .rawdata [i :i  +  3 ] !=  '-->' :
261+             self .handle_data ('<' )
262+             self .override_comment_update  =  True 
263+             return 
256264        self .handle_empty_tag ('<!--{}-->' .format (data ), is_block = True )
257265
266+     def  updatepos (self , i : int , j : int ) ->  int :
267+         if  self .override_comment_update :
268+             self .override_comment_update  =  False 
269+             i  =  0 
270+             j  =  1 
271+         return  super ().updatepos (i , j )
272+ 
258273    def  handle_decl (self , data : str ):
259274        self .handle_empty_tag ('<!{}>' .format (data ), is_block = True )
260275
@@ -278,7 +293,11 @@ def parse_html_declaration(self, i: int) -> int:
278293            if  self .rawdata [i :i + 3 ] ==  '<!['  and  not  self .rawdata [i :i + 9 ] ==  '<![CDATA[' :
279294                # We have encountered the bug in #1534 (Python bug `gh-77057`). 
280295                # Provide an override until we drop support for Python < 3.13. 
281-                 return  self .parse_bogus_comment (i )
296+                 result  =  self .parse_bogus_comment (i )
297+                 if  result  ==  - 1 :
298+                     self .handle_data (self .rawdata [i :i  +  1 ])
299+                     return  i  +  1 
300+                 return  result 
282301            return  super ().parse_html_declaration (i )
283302        # This is not the beginning of a raw block so treat as plain data 
284303        # and avoid consuming any tags which may follow (see #1066). 
@@ -313,7 +332,8 @@ def parse_starttag(self, i: int) -> int:  # pragma: no cover
313332        self .__starttag_text  =  None 
314333        endpos  =  self .check_for_whole_start_tag (i )
315334        if  endpos  <  0 :
316-             return  endpos 
335+             self .handle_data (self .rawdata [i :i  +  1 ])
336+             return  i  +  1 
317337        rawdata  =  self .rawdata 
318338        self .__starttag_text  =  rawdata [i :endpos ]
319339
0 commit comments