import { Api } from "../tl"; import { HTMLParser } from "./html"; export class MarkdownV2Parser { static parse(message: string): [string, Api.TypeMessageEntity[]] { // Bold message = message.replace(/\*(.*?)\*/g, "$1"); // underline message = message.replace(/__(.*?)__/g, "$1"); // strikethrough message = message.replace(/~(.*?)~/g, "$1"); // italic message = message.replace(/-(.*?)-/g, "$1"); // pre message = message.replace(/```(.*?)```/g, "
$1
"); // code message = message.replace(/`(.*?)`/g, "$1"); // Spoiler message = message.replace(/\|\|(.*?)\|\|/g, "$1"); // Inline URL message = message.replace( /(?$1' ); // Emoji message = message.replace( /!\[([^\]]+)\]\(tg:\/\/emoji\?id=(\d+)\)/g, '$1' ); return HTMLParser.parse(message); } static unparse( text: string, entities: Api.TypeMessageEntity[] | undefined ) { text = HTMLParser.unparse(text, entities); // Bold text = text.replace(/(.*?)<\/b>/g, "*$1*"); // Underline text = text.replace(/(.*?)<\/u>/g, "__$1__"); // Code text = text.replace(/(.*?)<\/code>/g, "`$1`"); // Pre text = text.replace(/
(.*?)<\/pre>/g, "```$1```");

        // strikethrough
        text = text.replace(/(.*?)<\/s>/g, "~$1~");

        // Italic
        text = text.replace(/(.*?)<\/i>/g, "-$1-");

        // Spoiler
        text = text.replace(/(.*?)<\/spoiler>/g, "||$1||");

        // Inline URL
        text = text.replace(/([^<]+)<\/a>/g, "[$2]($1)");

        // Emoji
        text = text.replace(
            /([^<]+)<\/tg-emoji>/g,
            "![$2](tg://emoji?id=$1)"
        );

        return text;
    }
}