new babycode format for new style
This commit is contained in:
@@ -6,7 +6,7 @@ from pygments.lexers import get_lexer_by_name
|
||||
from pygments.util import ClassNotFound as PygmentsClassNotFound
|
||||
import re
|
||||
|
||||
BABYCODE_VERSION = 8
|
||||
BABYCODE_VERSION = 9
|
||||
|
||||
|
||||
class BabycodeError(Exception):
|
||||
@@ -183,7 +183,7 @@ class HTMLRenderer(BabycodeRenderer):
|
||||
if mention_data not in self.mentions:
|
||||
self.mentions.append(mention_data)
|
||||
|
||||
return f"<a class='mention{' display' if target_user.has_display_name() else ''}' href='{url_for('users.page', username=target_user.username)}' title='@{target_user.username}' data-init='highlightMentions' data-username='{target_user.username}'>{'@' if not target_user.has_display_name() else ''}{target_user.get_readable_name()}</a>"
|
||||
return f"<a class='mention{' display' if target_user.has_display_name() else ''}' href='{url_for('users.user_page', username=target_user.username)}' title='@{target_user.username}' data-init='highlightMentions' data-username='{target_user.username}'>{'@' if not target_user.has_display_name() else ''}{target_user.get_readable_name()}</a>"
|
||||
|
||||
def render(self, ast):
|
||||
out = super().render(ast)
|
||||
@@ -201,7 +201,7 @@ class RSSXMLRenderer(BabycodeRenderer):
|
||||
if not target_user:
|
||||
return f"@{e['name']}"
|
||||
|
||||
return f'<a href="{url_for('users.page', username=target_user.username, _external=True)}" title="@{target_user.username}">{'@' if not target_user.has_display_name() else ''}{target_user.get_readable_name()}</a>'
|
||||
return f'<a href="{url_for('users.user_page', username=target_user.username, _external=True)}" title="@{target_user.username}">{'@' if not target_user.has_display_name() else ''}{target_user.get_readable_name()}</a>'
|
||||
|
||||
|
||||
NAMED_COLORS = [
|
||||
@@ -345,16 +345,21 @@ def tag_code(children, attr):
|
||||
return f"<code class=\"inline-code\">{children}</code>"
|
||||
else:
|
||||
input_code = children.strip()
|
||||
button = f"<button type=button class=\"copy-code\" value=\"{input_code}\" data-send=\"copyCode\" data-receive=\"copyCode\">Copy</button>"
|
||||
unhighlighted = f"<pre><span class=\"copy-code-container\"><span class=\"code-language-identifier\">code block</span>{button}</span><code>{input_code}</code></pre>"
|
||||
if not attr:
|
||||
return unhighlighted
|
||||
try:
|
||||
lexer = get_lexer_by_name(attr.strip())
|
||||
formatter = HtmlFormatter(nowrap=True)
|
||||
return f"<pre><span class=\"copy-code-container\"><span class=\"code-language-identifier\">{lexer.name}</span>{button}</span><code>{highlight(Markup(input_code).unescape(), lexer, formatter)}</code></pre>"
|
||||
except PygmentsClassNotFound:
|
||||
return unhighlighted
|
||||
language = 'code block'
|
||||
if attr:
|
||||
try:
|
||||
lexer = get_lexer_by_name(attr.strip())
|
||||
formatter = HtmlFormatter(nowrap=True)
|
||||
language = lexer.name
|
||||
code = highlight(Markup(input_code).unescape(), lexer, formatter)
|
||||
except PygmentsClassNotFound:
|
||||
code = input_code
|
||||
else:
|
||||
code = input_code
|
||||
|
||||
button = f'<button type=button class="copy-code" data-s="copyCode">Copy</button>'
|
||||
block = f'<fieldset data-r="copyCode" value="{input_code}" class="code-block-container plank minimal no-shadow secondary-bg"><legend>{language}</legend>{button}<pre><code>{code}</code></pre></fieldset>'
|
||||
return block
|
||||
|
||||
|
||||
def tag_list(children):
|
||||
@@ -383,8 +388,8 @@ def tag_color(children, attr):
|
||||
|
||||
def tag_spoiler(children, attr):
|
||||
spoiler_name = attr if attr else "Spoiler"
|
||||
content = f"<div class='accordion-content post-accordion-content hidden'>{children}</div>"
|
||||
container = f"""<div class='accordion hidden' data-receive='toggleAccordion'><div class='accordion-header'><button type='button' class='accordion-toggle' data-send='toggleAccordion'>+</button><span>{spoiler_name}</span></div>{content}</div>"""
|
||||
content = f"<div class='plank minimal even no-shadow hidden'>{children}</div>"
|
||||
container = f"""<details><summary class='plank secondary-bg no-shadow even'>{spoiler_name}</summary>{content}</details>"""
|
||||
return container
|
||||
|
||||
|
||||
@@ -393,6 +398,14 @@ def tag_image(children, attr):
|
||||
return f"<div class=post-img-container>{img}</div>"
|
||||
|
||||
|
||||
def tag_quote(children, attr):
|
||||
if attr:
|
||||
quotee = attr.strip()
|
||||
else:
|
||||
quotee = 'Quote'
|
||||
|
||||
return f'<fieldset class="plank minimal no-shadow secondary-bg"><legend>{quotee}</legend><blockquote>{children}</blockquote></fieldset>'
|
||||
|
||||
TAGS = {
|
||||
"b": lambda children, attr: f"<strong>{children}</strong>",
|
||||
"i": lambda children, attr: f"<em>{children}</em>",
|
||||
@@ -401,7 +414,7 @@ TAGS = {
|
||||
|
||||
"img": tag_image,
|
||||
"url": lambda children, attr: f"<a href={attr}>{children}</a>",
|
||||
"quote": lambda children, attr: f"<blockquote>{children}</blockquote>",
|
||||
"quote": tag_quote,
|
||||
"code": tag_code,
|
||||
"ul": lambda children, attr: f"<ul>{tag_list(children)}</ul>",
|
||||
"ol": lambda children, attr: f"<ol>{tag_list(children)}</ol>",
|
||||
|
||||
Reference in New Issue
Block a user