from .get import *
from mistletoe.span_token import SpanToken
from mistletoe.html_renderer import HTMLRenderer
import re
from flask import g
class UserMention(SpanToken):
pattern = re.compile("(^|\s|\n)@((\w|-){1,25})")
parse_inner = False
def __init__(self, match_obj):
self.target = (match_obj.group(1), match_obj.group(2))
class SubMention(SpanToken):
pattern = re.compile("(^|\s|\n)(r/|/r/)(\w{3,25})")
parse_inner = False
def __init__(self, match_obj):
self.target = (match_obj.group(2), match_obj.group(3))
class RedditorMention(SpanToken):
pattern = re.compile("(^|\s|\n)(u/|/u/)((\w|-){3,25})")
parse_inner = False
def __init__(self, match_obj):
self.target = (match_obj.group(2), match_obj.group(3))
class CustomRenderer(HTMLRenderer):
def __init__(self, **kwargs):
super().__init__(UserMention, SubMention, RedditorMention)
for i in kwargs: self.__dict__[i] = kwargs[i]
def render_user_mention(self, token):
space = token.target[0]
target = token.target[1]
user = get_user(target, graceful=True)
if not user: return f"{space}@{target}"
return f'''{space}
@{user.username}'''
def render_sub_mention(self, token):
space = token.target[0]
target = token.target[1]
return f'{space}r/{target}'
def render_redditor_mention(self, token):
space = token.target[0]
target = token.target[1]
return f'{space}u/{target}'
class Renderer(HTMLRenderer):
def __init__(self, **kwargs):
super().__init__(UserMention, SubMention, RedditorMention)
for i in kwargs: self.__dict__[i] = kwargs[i]
def render_user_mention(self, token):
space = token.target[0]
target = token.target[1]
user = get_user(target, graceful=True)
if not user: return f"{space}@{target}"
return f'{space}@{user.username}'
def render_sub_mention(self, token):
space = token.target[0]
target = token.target[1]
return f'{space}r/{target}'
def render_redditor_mention(self, token):
space = token.target[0]
target = token.target[1]
return f'{space}u/{target}'
class Renderer2(HTMLRenderer):
def __init__(self, **kwargs):
super().__init__(UserMention, SubMention, RedditorMention)
for i in kwargs: self.__dict__[i] = kwargs[i]
def render_user_mention(self, token):
space = token.target[0]
target = token.target[1]
return f"{space}@{target}"
def render_sub_mention(self, token):
space = token.target[0]
target = token.target[1]
return f"{space}r/{target}"
def render_redditor_mention(self, token):
space = token.target[0]
target = token.target[1]
return f"{space}u/{target}"