mirror of
https://github.com/Mayuri-Chan/pyrofork.git
synced 2025-12-29 12:04:51 +00:00
pyrofork: Add blockquote expandable parser
Signed-off-by: wulan17 <wulan17@nusantararom.org>
This commit is contained in:
parent
4cec859126
commit
c4362ad535
4 changed files with 34 additions and 2 deletions
|
|
@ -69,6 +69,9 @@ class MessageEntityType(AutoName):
|
|||
BLOCKQUOTE = raw.types.MessageEntityBlockquote
|
||||
"Blockquote text"
|
||||
|
||||
EXPANDABLE_BLOCKQUOTE = raw.types.MessageEntityBlockquote
|
||||
"collapsed-by-default block quotation"
|
||||
|
||||
TEXT_LINK = raw.types.MessageEntityTextUrl
|
||||
"For clickable text URLs"
|
||||
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ class Parser(HTMLParser):
|
|||
entity = raw.types.MessageEntityStrike
|
||||
elif tag == "blockquote":
|
||||
entity = raw.types.MessageEntityBlockquote
|
||||
extra["collapsed"] = bool("expandable" in attrs.keys())
|
||||
elif tag == "code":
|
||||
entity = raw.types.MessageEntityCode
|
||||
elif tag == "pre":
|
||||
|
|
@ -178,6 +179,10 @@ class HTML:
|
|||
language = getattr(entity, "language", "") or ""
|
||||
start_tag = f'<{name} language="{language}">' if language else f"<{name}>"
|
||||
end_tag = f"</{name}>"
|
||||
elif entity_type == MessageEntityType.EXPANDABLE_BLOCKQUOTE:
|
||||
name = "blockquote"
|
||||
start_tag = f"<{name} expandable>"
|
||||
end_tag = f"</{name}>"
|
||||
elif entity_type in (
|
||||
MessageEntityType.CODE,
|
||||
MessageEntityType.BLOCKQUOTE,
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ SPOILER_DELIM = "||"
|
|||
CODE_DELIM = "`"
|
||||
PRE_DELIM = "```"
|
||||
BLOCKQUOTE_DELIM = ">"
|
||||
BLOCKQUOTE_EXPANDABLE_DELIM = "**>"
|
||||
|
||||
MARKDOWN_RE = re.compile(r"({d})|\[(.+?)\]\((.+?)\)".format(
|
||||
d="|".join(
|
||||
|
|
@ -78,6 +79,14 @@ class Markdown:
|
|||
result.append(line.strip())
|
||||
else:
|
||||
result.append(line[1:].strip())
|
||||
elif line.startswith(BLOCKQUOTE_EXPANDABLE_DELIM):
|
||||
if not in_blockquote:
|
||||
line = re.sub(r'^\*\*> ', OPENING_TAG.format("blockquote expandable"), line)
|
||||
line = re.sub(r'^\*\*>', OPENING_TAG.format("blockquote expandable"), line)
|
||||
in_blockquote = True
|
||||
result.append(line.strip())
|
||||
else:
|
||||
result.append(line[3:].strip())
|
||||
else:
|
||||
if in_blockquote:
|
||||
line = CLOSING_TAG.format("blockquote") + line
|
||||
|
|
@ -174,7 +183,10 @@ class Markdown:
|
|||
start_tag = f"{PRE_DELIM}{language}\n"
|
||||
end_tag = f"\n{PRE_DELIM}"
|
||||
elif entity_type == MessageEntityType.BLOCKQUOTE:
|
||||
start_tag = BLOCKQUOTE_DELIM + " "
|
||||
if entity.collapsed:
|
||||
start_tag = BLOCKQUOTE_EXPANDABLE_DELIM + " "
|
||||
else:
|
||||
start_tag = BLOCKQUOTE_DELIM + " "
|
||||
end_tag = ""
|
||||
blockquote_text = text[start:end]
|
||||
lines = blockquote_text.split("\n")
|
||||
|
|
|
|||
|
|
@ -52,6 +52,9 @@ class MessageEntity(Object):
|
|||
custom_emoji_id (``int``, *optional*):
|
||||
For :obj:`~pyrogram.enums.MessageEntityType.CUSTOM_EMOJI` only, unique identifier of the custom emoji.
|
||||
Use :meth:`~pyrogram.Client.get_custom_emoji_stickers` to get full information about the sticker.
|
||||
|
||||
collapsed (``bool``, *optional*):
|
||||
For :obj:`~pyrogram.enums.MessageEntityType.BLOCKQUOTE` only, whether the blockquote expandable.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
|
|
@ -64,7 +67,8 @@ class MessageEntity(Object):
|
|||
url: str = None,
|
||||
user: "types.User" = None,
|
||||
language: str = None,
|
||||
custom_emoji_id: int = None
|
||||
custom_emoji_id: int = None,
|
||||
collapsed: bool = None
|
||||
):
|
||||
super().__init__(client)
|
||||
|
||||
|
|
@ -75,6 +79,7 @@ class MessageEntity(Object):
|
|||
self.user = user
|
||||
self.language = language
|
||||
self.custom_emoji_id = custom_emoji_id
|
||||
self.collapsed = collapsed
|
||||
|
||||
@staticmethod
|
||||
def _parse(client, entity: "raw.base.MessageEntity", users: dict) -> Optional["MessageEntity"]:
|
||||
|
|
@ -95,6 +100,7 @@ class MessageEntity(Object):
|
|||
user=types.User._parse(client, users.get(user_id, None)),
|
||||
language=getattr(entity, "language", None),
|
||||
custom_emoji_id=getattr(entity, "document_id", None),
|
||||
collapsed=getattr(entity, "collapsed", None),
|
||||
client=client
|
||||
)
|
||||
|
||||
|
|
@ -117,6 +123,12 @@ class MessageEntity(Object):
|
|||
if self.custom_emoji_id is not None:
|
||||
args["document_id"] = self.custom_emoji_id
|
||||
|
||||
if self.type not in [
|
||||
enums.MessageEntityType.BLOCKQUOTE,
|
||||
enums.MessageEntityType.EXPANDABLE_BLOCKQUOTE
|
||||
]:
|
||||
args.pop("collapsed")
|
||||
|
||||
entity = self.type.value
|
||||
|
||||
if entity is raw.types.MessageEntityMentionName:
|
||||
|
|
|
|||
Loading…
Reference in a new issue