2016-05-05 5 views
2

私はmisasaの古いバージョンを使ったPython Djangoアプリケーションを更新しています。これは、 "高速化のためのCFPベースのバインディング、高速マークダウン処理ライブラリ"として記述されています。私のDjangoのアプリで、関連するコードは以下の通りです:Misaka HTML_SAFELINK(またはhoedown SAFELINK)がフラグを置き換えますか?

render_flags=(misaka.HTML_SAFELINK) 

しかし、御坂2.0のドキュメントは、もはやフラグオプションをレンダリングするよう(Djangoのアプリはそれの結果としてエラーがスローされます)ことを示しています

http://misaka.61924.nl/#html-render-flags

SAFELINKはホーンタウン自体から削除されているようです。明らかにHTML_SAFELINKの目的は、安全なプロトコルへのリンクのみを許可することでした。

現在のmisaka 2.0およびhoedownレンダリングフラグオプションのうち、HTML_SKIP_HTML、HTML_ESCAPE、HTML_HARD_WRAP、HTML_USE_XHTMLのうち、HTML_SAFELINKを適切に置き換えることはできません。

私はこのフラグが最初は無意味で、それを放置する危険性はないと思いますか?あるいは、「安全でない」プロトコルへのリンクをブロックする別の方法がmisaka/hoedownにありますか?

+0

。したがって、誤解を招くように削除されました。 Waylan

答えて

0

唯一の解決策は、SAFELINKフラグの内容を複製するサブクラスHtmlRendererを作成することです。ここでは(私はa proposal to integrate it into Misakaを送信した)the one I wrote for Liberapayです:変更が行われた理由を私は知らないが、私はリンクが「安全」であることを保証する方法がないことを前提としています

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)) 
関連する問題