我正在更新使用旧版misaka的Python Django应用程序,该应用程序将自身描述为基于CFFI的绑定,用于快速降价处理库Hoedown。"我的Django应用程序中的相关代码如下:
render_flags=(misaka.HTML_SAFELINK)
但misaka 2.0文档不再显示作为渲染标记选项(Django应用程序因此而抛出错误):
http://misaka.61924.nl/#html-render-flags
似乎SAFELINK已从haedown本身中移除。显然,HTML_SAFELINK的目的是仅允许链接到安全协议。
对我来说,在当前的misaka 2.0和hoedown渲染标记选项(HTML_SKIP_HTML,HTML_ESCAPE,HTML_HARD_WRAP和HTML_USE_XHTML)中,HTML_SAFELINK有一个合适的替代品。
我能否安全地假设旗帜首先是毫无意义的,并且没有真正的风险将其遗弃?或者在misaka / hoedown还有另一种阻止链接到“不安全”的方式吗?协议
答案 0 :(得分:0)
唯一的解决方案似乎是创建一个HtmlRenderer
子类来复制SAFELINK
标志所做的事情。这是the one I wrote for Liberapay(我已发送a proposal to integrate it into Misaka):
import re
from markupsafe import Markup, escape
import misaka as m
url_re = re.compile(r'^(https?|xmpp):')
class CustomRenderer(m.HtmlRenderer):
def image(self, link, title='', alt=''):
if url_re.match(link):
maybe_alt = Markup(' alt="%s"') % alt if alt else ''
maybe_title = Markup(' title="%s"') % title if title else ''
return Markup('<img src="%s"%s%s />') % (link, maybe_alt, maybe_title)
else:
return escape("![%s](%s)" % (alt, link))
def link(self, content, link, title=''):
if url_re.match(link):
maybe_title = Markup(' title="%s"') % title if title else ''
return Markup('<a href="%s"%s>' + content + '</a>') % (link, maybe_title)
else:
return escape("[%s](%s)" % (content, link))
def autolink(self, link, is_email):
if url_re.match(link):
return Markup('<a href="%s">%s</a>') % (link, link)
else:
return escape('<%s>' % link)
renderer = CustomRenderer(flags=m.HTML_SKIP_HTML)
md = m.Markdown(renderer, extensions=('autolink', 'strikethrough', 'no-intra-emphasis'))
def render(markdown):
return Markup(md(markdown))