# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀
# █▀█ █ █ █ █▀█ █▀▄ █
# © Copyright 2022
# https://t.me/hikariatama
#
# 🔒 Licensed under the GNU AGPLv3
# 🌐 https://www.gnu.org/licenses/agpl-3.0.html
# scope: hikka_min 1.2.10
# meta pic: https://img.icons8.com/fluency/452/texshop.png
# meta banner: https://mods.hikariatama.ru/badges/latex.jpg
# meta developer: @hikarimods
import io
import logging
import matplotlib.pyplot as plt
from telethon.tl.types import Message
from .. import loader, utils
logger = logging.getLogger(__name__)
@loader.tds
class LaTeXMod(loader.Module):
"""Renders mathematical formulas in LaTeX pngs"""
strings = {
"name": "LaTeX",
"no_args": "🚫 Specify a formula to render",
"cant_render": "🚫 Can't render formula",
}
strings_ru = {
"no_args": "🚫 Укажи формулу для рендера",
"cant_render": "🚫 В формуле обнаружена ошибка",
}
async def latexcmd(self, message: Message):
""" - Create LaTeX render"""
args = utils.get_args_raw(message)
if not args:
await utils.answer(message, self.strings("no_args"))
return
try:
tex = f"${args}$"
fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1])
ax.set_axis_off()
t = ax.text(
0.5,
0.5,
tex,
horizontalalignment="center",
verticalalignment="center",
fontsize=25,
color="black",
)
ax.figure.canvas.draw()
bbox = t.get_window_extent()
fig.set_size_inches(bbox.width / 80, bbox.height / 80)
buf = io.BytesIO()
plt.savefig(buf)
buf.seek(0)
except Exception:
logger.exception("Can't render formula")
await utils.answer(message, self.strings("cant_render"))
return
await self._client.send_file(
message.peer_id,
buf.getvalue(),
reply_to=message.reply_to_msg_id,
caption=f"🧮 LaTeX: {args}",
)
if message.out:
await message.delete()