3

次のようなものを使用して、RubyのKramdownでHTMLドキュメントを解析およびレンダリングできることを知っています

require 'kramdown'

s = 'This is a _document_'
Kramdown::Document.new(s).to_html
# '<p>This is a <i>document</i></p>'

この場合、文字列sにはマークダウン構文の完全なドキュメントが含まれる場合があります。

ただし、sスパンレベルのマークダウン構文のみが含まれていると仮定して解析し、レンダリングされた html を取得します。特に、レンダリングされた html には、、、<p>または<blockquote>などがあってはなりません。<table>

s = 'This is **only** a span-level string'
# .. ??? ...
# 'This is <b>only</b> a span-level string'

これどうやってするの?

4

2 に答える 2

2

sanitize出力をgemで後処理します。

require 'sanitize'

html = Kramdown::Document.new(s).to_html
output = Sanitize.fragment(html, elements:['b','i','em'])

要素は、許可されたタグのホワイトリストです。必要なすべてのタグを追加するだけです。gem には定義済みのホワイトリストのセットがありますが、探しているものと完全に一致するものはありません。(ところで、スパンで許可されているすべての HTML5 要素のリストが必要な場合は、WHATWG の「フレージング コンテンツ」のリストを参照してください)。

とタグ付けされていないことは知っていますが、Rails を使用している読者のために、組み込みのサニタイズ ヘルパーを使用してください。

于 2014-08-05T17:16:20.593 に答える
1

カスタム パーサーを作成し、ブロック レベル パーサーの内部リストを空にすることができます。

class Kramdown::Parser::SpanKramdown < Kramdown::Parser::Kramdown
  def initialize(source, options)
    super
    @block_parsers = []
  end
end

次に、次のように使用できます。

text = Kramdown::Document.new(text, :input => 'SpanKramdown').to_html

これは、あなたが望むことを「正しい方法」で行う必要があります。

于 2015-05-26T20:18:06.933 に答える