mirror of
https://github.com/boostorg/website-v2.git
synced 2026-02-26 17:22:09 +00:00
45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
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 = '<iframe width="560" height="315" src="https://www.youtube.com/embed/{target}" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'
|
|
return template.format(target=token.target)
|