import re from mistletoe import HTMLRenderer from mistletoe.span_token import SpanToken from pygments import highlight from pygments.styles import get_style_by_name as get_style from pygments.lexers import get_lexer_by_name as get_lexer, guess_lexer from pygments.formatters.html import HtmlFormatter class Youtube(SpanToken): """ Span token for Youtube shortcodes Expected shortcode: `[[ youtube | U4VZ9DRdXAI ]]` youtube is thrown out but in the shortcode for readability """ pattern = re.compile(r"\[\[ *(.+?) *\| *(.+?) *\]\]") def __init__(self, match): self.target = match.group(2) class PygmentsRenderer(HTMLRenderer): formatter = HtmlFormatter() formatter.noclasses = True def __init__(self, *extras, style="solarized-dark"): super().__init__(*extras) self.formatter.style = get_style(style) def render_block_code(self, token): code = token.children[0].content lexer = get_lexer(token.language) if token.language else guess_lexer(code) return highlight(code, lexer, self.formatter) class BoostRenderer(PygmentsRenderer): def __init__(self): super().__init__(Youtube) def render_youtube(self, token): template = '' return template.format(target=token.target)