3

マークダウンを補間するときにヘッダーが作成されないように、Redcarpet または Bluecloth を使用する方法はありますか?

例えば:

#header 1

収量:

ヘッダー 1

ヘッダー 1 (推奨)

と:

##header 2

収量:

ヘッダー 2

ヘッダー 2 (推奨)

4

4 に答える 4

5

さて、Markdown では文字をエスケープできます。

# header 1
\# header 1

## header 2
\## header 2

...与えます:

ヘッダー 1

# ヘッダー 1

ヘッダー 2

## ヘッダー 2

これを行う必要がない場合、または他の人の Markdown を解析していて選択肢がない場合は、受信した Markdown を前処理して上記を行うことをお勧めします。

def pound_filter text
  text.gsub /^#/, '\#'
end

Redcarpet を使用すると、動作することを確認できます。

text = <<-END
  # Hello
  ## World
END

Markdown.new(text.to_html)
# =>  <h1>Hello</h1>
#
#     <h2>World</h2>

Markdown.new(pound_filter text).to_html
# =>  <p># Hello
#     ## World</p>

もちろん、HTML の改行は実際にはそのようにはレンダリングされないため、1 行として表示されます。

# こんにちは世界"

...それを拡張したい場合があります:

def pound_filter text
  text.gsub( /((\A^)|([^\A]^))#/ ) {|match| "\n" == match[0] ? "\n\n\\#" : '\#' }
end

pound_filter text
# =>  \# Hello
#
#     \## World

Markdown.new(pound_filter text).to_html
# =>  <p>\# Hello</p>
#
#     <p>\## World</p>

この最後は次のように表示されます。

# こんにちは

## 世界

残念ながら、最終的には、見出しが引用符の中にある次のような奇妙な領域に陥ります。

> ## Heading

...しかし、それは演習として読者に任せます。

于 2011-09-24T08:28:26.067 に答える
3

ここで同様の解決策を見たところ、次のようになりました。

class RenderWithoutWrap < Redcarpet::Render::HTML
  def postprocess(full_document)
    Regexp.new(/\A<p>(.*)<\/p>\Z/m).match(full_document)[1] rescue full_document
  end
end

<p>&</p>タグをすべて削除します。私はそれをそのように使用しましたが、うまくいきました。そのクラスを という新しいファイルに配置しました/config/initializers/render_without_wrap.rb<h1>すべての<h6>タグに対して同様のことを行うことができます

class RenderWithoutHeaders < Redcarpet::Render::HTML
  def postprocess(full_document)
    Regexp.new(/\A<h1>(.*)<\/h1>\Z/m).match(full_document)[1] rescue full_document
    Regexp.new(/\A<h2>(.*)<\/h2>\Z/m).match(full_document)[1] rescue full_document
    Regexp.new(/\A<h3>(.*)<\/h3>\Z/m).match(full_document)[1] rescue full_document
    ...(you get the idea)
  end
end

その後、このように使用できます

def custom_markdown_parse(text)
  markdown = Redcarpet::Markdown.new(RenderWithoutHeaders.new(
    filter_html: true,
    hard_wrap: true,
    other_options: its_your_call
  ))
  markdown.render(text).html_safe
end

私はそれをテストしていませんが、それはアイデアです。

于 2015-10-25T01:34:40.910 に答える
1

1.マークダウンのソーステキストをバックスラッシュでエスケープできるはずです。

\# not a header

2.モンキーパッチを適用することもできます。

module RedCloth::Formatters::HTML

  [:h1, :h2, :h3, :h4, :h5, :h6].each do |m|
    define_method(m) do |opts|
      "#{opts[:text]}\n"
    end
  end

end
于 2011-09-24T08:07:13.000 に答える
0

Markdownの事前解析をいじるのは難しく、Markdownは挿入されたHTMLを許可するので、代わりに結果のHTMLから見出し要素を取り除くのはどうですか?

于 2011-09-24T11:41:56.490 に答える