@@ -93,6 +93,8 @@ def __init__(self, md: Markdown, *args, **kwargs):
93
93
94
94
self .lineno_start_cache = [0 ]
95
95
96
+ self .override_comment_update = False
97
+
96
98
# This calls self.reset
97
99
super ().__init__ (* args , ** kwargs )
98
100
self .md = md
@@ -253,8 +255,21 @@ def handle_entityref(self, name: str):
253
255
self .handle_empty_tag ('&{};' .format (name ), is_block = False )
254
256
255
257
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
256
264
self .handle_empty_tag ('<!--{}-->' .format (data ), is_block = True )
257
265
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
+
258
273
def handle_decl (self , data : str ):
259
274
self .handle_empty_tag ('<!{}>' .format (data ), is_block = True )
260
275
@@ -278,7 +293,11 @@ def parse_html_declaration(self, i: int) -> int:
278
293
if self .rawdata [i :i + 3 ] == '<![' and not self .rawdata [i :i + 9 ] == '<![CDATA[' :
279
294
# We have encountered the bug in #1534 (Python bug `gh-77057`).
280
295
# 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
282
301
return super ().parse_html_declaration (i )
283
302
# This is not the beginning of a raw block so treat as plain data
284
303
# and avoid consuming any tags which may follow (see #1066).
@@ -313,7 +332,8 @@ def parse_starttag(self, i: int) -> int: # pragma: no cover
313
332
self .__starttag_text = None
314
333
endpos = self .check_for_whole_start_tag (i )
315
334
if endpos < 0 :
316
- return endpos
335
+ self .handle_data (self .rawdata [i :i + 1 ])
336
+ return i + 1
317
337
rawdata = self .rawdata
318
338
self .__starttag_text = rawdata [i :endpos ]
319
339
0 commit comments