Skip to content

Commit

Permalink
feat: add TelegramMarkdownRenderer with methods to convert heading, b…
Browse files Browse the repository at this point in the history
…old and italic
  • Loading branch information
impocode committed Dec 26, 2024
1 parent fe9eb61 commit e82b724
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 0 deletions.
3 changes: 3 additions & 0 deletions mistune_telegram/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from mistune_telegram.renderers import TelegramMarkdownRenderer

__all__ = ["TelegramMarkdownRenderer"]
25 changes: 25 additions & 0 deletions mistune_telegram/renderers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from typing import Any, Dict

from mistune.core import BlockState
from mistune.renderers.markdown import MarkdownRenderer


class TelegramMarkdownRenderer(MarkdownRenderer):
"""Markdown to Telegram Markdown converter."""

NAME = "telegram_markdown"

def heading(self, token: Dict[str, Any], state: BlockState) -> str:
"""Convert Markdown heading to Telegram Markdown format."""
return "*" + self.render_children(token, state) + "*\n\n"

def strong(self, token: Dict[str, Any], state: BlockState) -> str:
"""Convert Markdown bold to Telegram Markdown format."""
return "*" + self.render_children(token, state) + "*"

def emphasis(self, token: Dict[str, Any], state: BlockState) -> str:
"""Convert Markdown italic to Telegram Markdown format."""
return "_" + self.render_children(token, state) + "_"


__all__ = ["TelegramMarkdownRenderer"]
Empty file added tests/__init__.py
Empty file.
41 changes: 41 additions & 0 deletions tests/renderers_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import mistune

from mistune_telegram import TelegramMarkdownRenderer

formater = mistune.create_markdown(renderer=TelegramMarkdownRenderer())


def test_heading() -> None:
"""Test heading."""

# Base syntax
assert formater("# Heading level 1") == "*Heading level 1*\n"
assert formater("## Heading level 2") == "*Heading level 2*\n"
assert formater("### Heading level 3") == "*Heading level 3*\n"
assert formater("#### Heading level 4") == "*Heading level 4*\n"
assert formater("##### Heading level 5") == "*Heading level 5*\n"
assert formater("###### Heading level 6") == "*Heading level 6*\n"

# Alternate syntax
assert formater("Heading level 1\n===============") == "*Heading level 1*\n"
assert formater("Heading level 2\n---------------") == "*Heading level 2*\n"


def test_strong() -> None:
"""Test bold."""

assert formater("**bold**") == "*bold*\n"
assert formater("__bold__") == "*bold*\n"


def test_emphasis() -> None:
"""Test italic."""

assert formater("*italic*") == "_italic_\n"
assert formater("_italic_") == "_italic_\n"


def test_link() -> None:
"""Test link."""

assert formater("[example](http://www.example.com/)") == "[example](http://www.example.com/)\n"

0 comments on commit e82b724

Please sign in to comment.