diff --git a/pyproject.toml b/pyproject.toml index a2a0ccb..98207fd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,6 +25,7 @@ dependencies = [ "aiohttp-session", "cryptography", "requests", - "asyncssh" + "asyncssh", + "emoji" ] diff --git a/src/snek/app.py b/src/snek/app.py index c2c3651..137abf0 100644 --- a/src/snek/app.py +++ b/src/snek/app.py @@ -16,7 +16,7 @@ from snek.system import http from snek.system.cache import Cache from snek.system.markdown import MarkdownExtension from snek.system.middleware import cors_middleware -from snek.system.template import LinkifyExtension, PythonExtension +from snek.system.template import LinkifyExtension, PythonExtension,EmojiExtension from snek.view.about import AboutHTMLView, AboutMDView from snek.view.docs import DocsHTMLView, DocsMDView from snek.view.index import IndexView @@ -54,6 +54,7 @@ class Application(BaseApplication): self.jinja2_env.add_extension(MarkdownExtension) self.jinja2_env.add_extension(LinkifyExtension) self.jinja2_env.add_extension(PythonExtension) + self.jinja2_env.add_extension(EmojiExtension) self.setup_router() self.cache = Cache(self) diff --git a/src/snek/system/template.py b/src/snek/system/template.py index 69222b6..ed153f0 100644 --- a/src/snek/system/template.py +++ b/src/snek/system/template.py @@ -1,6 +1,11 @@ from types import SimpleNamespace from bs4 import BeautifulSoup import re +import emoji + +from jinja2 import TemplateSyntaxError, nodes +from jinja2.ext import Extension +from jinja2.nodes import Const @@ -33,9 +38,24 @@ def linkify_https(text): return set_link_target_blank(str(soup)) -from jinja2 import TemplateSyntaxError, nodes -from jinja2.ext import Extension -from jinja2.nodes import Const +class EmojiExtension(Extension): + tags = {"emoji"} + + def parse(self, parser): + line_number = next(parser.stream).lineno + md_file = [Const("")] + body = "" + try: + md_file = [parser.parse_expression()] + except TemplateSyntaxError: + body = parser.parse_statements(["name:endemoji"], drop_needle=True) + return nodes.CallBlock( + self.call_method("_to_html", md_file), [], [], body + ).set_lineno(line_number) + + def _to_html(self, md_file, caller): + return emoji.emojize(caller(),language='alias') + class LinkifyExtension(Extension): @@ -98,4 +118,4 @@ class PythonExtension(Extension): to_write.append(text) exec(source) return "".join(to_write) - return str(fn(caller())) \ No newline at end of file + return str(fn(caller())) diff --git a/src/snek/templates/message.html b/src/snek/templates/message.html index 92ac639..39ea7e8 100644 --- a/src/snek/templates/message.html +++ b/src/snek/templates/message.html @@ -1,5 +1,5 @@ {#
#}