mirror of
https://github.com/Mayuri-Chan/pyrofork.git
synced 2026-01-03 14: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 = raw.types.MessageEntityBlockquote
|
||||||
"Blockquote text"
|
"Blockquote text"
|
||||||
|
|
||||||
|
EXPANDABLE_BLOCKQUOTE = raw.types.MessageEntityBlockquote
|
||||||
|
"collapsed-by-default block quotation"
|
||||||
|
|
||||||
TEXT_LINK = raw.types.MessageEntityTextUrl
|
TEXT_LINK = raw.types.MessageEntityTextUrl
|
||||||
"For clickable text URLs"
|
"For clickable text URLs"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,7 @@ class Parser(HTMLParser):
|
||||||
entity = raw.types.MessageEntityStrike
|
entity = raw.types.MessageEntityStrike
|
||||||
elif tag == "blockquote":
|
elif tag == "blockquote":
|
||||||
entity = raw.types.MessageEntityBlockquote
|
entity = raw.types.MessageEntityBlockquote
|
||||||
|
extra["collapsed"] = bool("expandable" in attrs.keys())
|
||||||
elif tag == "code":
|
elif tag == "code":
|
||||||
entity = raw.types.MessageEntityCode
|
entity = raw.types.MessageEntityCode
|
||||||
elif tag == "pre":
|
elif tag == "pre":
|
||||||
|
|
@ -178,6 +179,10 @@ class HTML:
|
||||||
language = getattr(entity, "language", "") or ""
|
language = getattr(entity, "language", "") or ""
|
||||||
start_tag = f'<{name} language="{language}">' if language else f"<{name}>"
|
start_tag = f'<{name} language="{language}">' if language else f"<{name}>"
|
||||||
end_tag = 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 (
|
elif entity_type in (
|
||||||
MessageEntityType.CODE,
|
MessageEntityType.CODE,
|
||||||
MessageEntityType.BLOCKQUOTE,
|
MessageEntityType.BLOCKQUOTE,
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ SPOILER_DELIM = "||"
|
||||||
CODE_DELIM = "`"
|
CODE_DELIM = "`"
|
||||||
PRE_DELIM = "```"
|
PRE_DELIM = "```"
|
||||||
BLOCKQUOTE_DELIM = ">"
|
BLOCKQUOTE_DELIM = ">"
|
||||||
|
BLOCKQUOTE_EXPANDABLE_DELIM = "**>"
|
||||||
|
|
||||||
MARKDOWN_RE = re.compile(r"({d})|\[(.+?)\]\((.+?)\)".format(
|
MARKDOWN_RE = re.compile(r"({d})|\[(.+?)\]\((.+?)\)".format(
|
||||||
d="|".join(
|
d="|".join(
|
||||||
|
|
@ -78,6 +79,14 @@ class Markdown:
|
||||||
result.append(line.strip())
|
result.append(line.strip())
|
||||||
else:
|
else:
|
||||||
result.append(line[1:].strip())
|
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:
|
else:
|
||||||
if in_blockquote:
|
if in_blockquote:
|
||||||
line = CLOSING_TAG.format("blockquote") + line
|
line = CLOSING_TAG.format("blockquote") + line
|
||||||
|
|
@ -174,7 +183,10 @@ class Markdown:
|
||||||
start_tag = f"{PRE_DELIM}{language}\n"
|
start_tag = f"{PRE_DELIM}{language}\n"
|
||||||
end_tag = f"\n{PRE_DELIM}"
|
end_tag = f"\n{PRE_DELIM}"
|
||||||
elif entity_type == MessageEntityType.BLOCKQUOTE:
|
elif entity_type == MessageEntityType.BLOCKQUOTE:
|
||||||
start_tag = BLOCKQUOTE_DELIM + " "
|
if entity.collapsed:
|
||||||
|
start_tag = BLOCKQUOTE_EXPANDABLE_DELIM + " "
|
||||||
|
else:
|
||||||
|
start_tag = BLOCKQUOTE_DELIM + " "
|
||||||
end_tag = ""
|
end_tag = ""
|
||||||
blockquote_text = text[start:end]
|
blockquote_text = text[start:end]
|
||||||
lines = blockquote_text.split("\n")
|
lines = blockquote_text.split("\n")
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,9 @@ class MessageEntity(Object):
|
||||||
custom_emoji_id (``int``, *optional*):
|
custom_emoji_id (``int``, *optional*):
|
||||||
For :obj:`~pyrogram.enums.MessageEntityType.CUSTOM_EMOJI` only, unique identifier of the custom emoji.
|
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.
|
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__(
|
def __init__(
|
||||||
|
|
@ -64,7 +67,8 @@ class MessageEntity(Object):
|
||||||
url: str = None,
|
url: str = None,
|
||||||
user: "types.User" = None,
|
user: "types.User" = None,
|
||||||
language: str = None,
|
language: str = None,
|
||||||
custom_emoji_id: int = None
|
custom_emoji_id: int = None,
|
||||||
|
collapsed: bool = None
|
||||||
):
|
):
|
||||||
super().__init__(client)
|
super().__init__(client)
|
||||||
|
|
||||||
|
|
@ -75,6 +79,7 @@ class MessageEntity(Object):
|
||||||
self.user = user
|
self.user = user
|
||||||
self.language = language
|
self.language = language
|
||||||
self.custom_emoji_id = custom_emoji_id
|
self.custom_emoji_id = custom_emoji_id
|
||||||
|
self.collapsed = collapsed
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _parse(client, entity: "raw.base.MessageEntity", users: dict) -> Optional["MessageEntity"]:
|
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)),
|
user=types.User._parse(client, users.get(user_id, None)),
|
||||||
language=getattr(entity, "language", None),
|
language=getattr(entity, "language", None),
|
||||||
custom_emoji_id=getattr(entity, "document_id", None),
|
custom_emoji_id=getattr(entity, "document_id", None),
|
||||||
|
collapsed=getattr(entity, "collapsed", None),
|
||||||
client=client
|
client=client
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -117,6 +123,12 @@ class MessageEntity(Object):
|
||||||
if self.custom_emoji_id is not None:
|
if self.custom_emoji_id is not None:
|
||||||
args["document_id"] = self.custom_emoji_id
|
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
|
entity = self.type.value
|
||||||
|
|
||||||
if entity is raw.types.MessageEntityMentionName:
|
if entity is raw.types.MessageEntityMentionName:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue