Skip to content

Commit 9ade92c

Browse files
Add languages to "pre" tags (HTML and Markdown) pyrogram#1118
* added `language` to entities when unparsing (both markdown and html) * added `language` to entities also when parsing (html only) * Update html.py * Update markdown.py * Update markdown.py * Update markdown.py Co-authored-by: Dan <[email protected]>
1 parent bf52ec1 commit 9ade92c

2 files changed

Lines changed: 17 additions & 3 deletions

File tree

pyrogram/parser/html.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def handle_starttag(self, tag, attrs):
6161
entity = raw.types.MessageEntityCode
6262
elif tag == "pre":
6363
entity = raw.types.MessageEntityPre
64-
extra["language"] = ""
64+
extra["language"] = attrs.get("language", "")
6565
elif tag == "spoiler":
6666
entity = raw.types.MessageEntitySpoiler
6767
elif tag == "a":
@@ -172,9 +172,13 @@ def unparse(text: str, entities: list):
172172
name = entity_type.name[0].lower()
173173
start_tag = f"<{name}>"
174174
end_tag = f"</{name}>"
175+
elif entity_type == MessageEntityType.PRE:
176+
name = entity_type.name.lower()
177+
language = getattr(entity, "language", "") or ""
178+
start_tag = f'<{name} language="{language}">' if language else f"<{name}>"
179+
end_tag = f"</{name}>"
175180
elif entity_type in (
176181
MessageEntityType.CODE,
177-
MessageEntityType.PRE,
178182
MessageEntityType.BLOCKQUOTE,
179183
MessageEntityType.SPOILER,
180184
):

pyrogram/parser/markdown.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@ async def parse(self, text: str, strict: bool = False):
105105
delims.remove(delim)
106106
tag = CLOSING_TAG.format(tag)
107107

108+
if delim == PRE_DELIM and delim in delims:
109+
delim_and_language = text[text.find(PRE_DELIM):].split("\n")[0]
110+
language = delim_and_language[len(PRE_DELIM):]
111+
text = utils.replace_once(text, delim_and_language, f'<pre language="{language}">', start)
112+
continue
113+
108114
text = utils.replace_once(text, delim, tag, start)
109115

110116
return await self.html.parse(text)
@@ -130,7 +136,11 @@ def unparse(text: str, entities: list):
130136
start_tag = end_tag = STRIKE_DELIM
131137
elif entity_type == MessageEntityType.CODE:
132138
start_tag = end_tag = CODE_DELIM
133-
elif entity_type in (MessageEntityType.PRE, MessageEntityType.BLOCKQUOTE):
139+
elif entity_type == MessageEntityType.PRE:
140+
language = getattr(entity, "language", "") or ""
141+
start_tag = f"{PRE_DELIM}{language}\n"
142+
end_tag = f"\n{PRE_DELIM}"
143+
elif entity_type == MessageEntityType.BLOCKQUOTE:
134144
start_tag = end_tag = PRE_DELIM
135145
elif entity_type == MessageEntityType.SPOILER:
136146
start_tag = end_tag = SPOILER_DELIM

0 commit comments

Comments
 (0)