pyrofork: parser: markdown: Check if PRE is inside blockquote before unparsing it

Signed-off-by: wulan17 <wulan17@nusantararom.org>
This commit is contained in:
wulan17 2025-03-08 19:23:35 +07:00
parent 1108c52f53
commit c4b587b493
No known key found for this signature in database
GPG key ID: 318CD6CD3A6AC0A5

View file

@ -210,15 +210,41 @@ class Markdown:
e = entity.offset + entity.length
delimiter = delimiters.get(entity.type, None)
if delimiter:
if entity.type != MessageEntityType.BLOCKQUOTE and entity.type != MessageEntityType.EXPANDABLE_BLOCKQUOTE:
if entity.type == MessageEntityType.PRE:
inside_blockquote = any(
blk_entity.offset <= s < blk_entity.offset + blk_entity.length and
blk_entity.offset < e <= blk_entity.offset + blk_entity.length
for blk_entity in entities
if blk_entity.type == MessageEntityType.BLOCKQUOTE
)
is_expandable = any(
blk_entity.offset <= s < blk_entity.offset + blk_entity.length and
blk_entity.offset < e <= blk_entity.offset + blk_entity.length and
blk_entity.collapsed
for blk_entity in entities
if blk_entity.type == MessageEntityType.BLOCKQUOTE
)
if inside_blockquote:
if is_expandable:
if entity.language:
open_delimiter = f"{delimiter}{entity.language}\n**>"
else:
open_delimiter = f"{delimiter}\n**>"
close_delimiter = f"\n**>{delimiter}"
else:
if entity.language:
open_delimiter = f"{delimiter}{entity.language}\n>"
else:
open_delimiter = f"{delimiter}\n>"
close_delimiter = f"\n>{delimiter}"
else:
open_delimiter = delimiter
close_delimiter = delimiter
insert_at.append((s, i, open_delimiter))
insert_at.append((e, -i, close_delimiter))
elif entity.type != MessageEntityType.BLOCKQUOTE and entity.type != MessageEntityType.EXPANDABLE_BLOCKQUOTE:
open_delimiter = delimiter
close_delimiter = delimiter
if entity.type == MessageEntityType.PRE:
close_delimiter = '\n' + delimiter
if entity.language:
open_delimiter += entity.language + '\n'
else:
open_delimiter += '\n'
insert_at.append((s, i, open_delimiter))
insert_at.append((e, -i, close_delimiter))
else: