2012-02-15 11 views
3

私はこのようなマークダウンしている場合:それは次のように出てレンダリングされますdivで囲まれたRedcarpetのマークダウンで `` `コードブロックをレンダリングするにはどうすればよいですか?

# A Header 

``` javascript 
$(document).ready(function() {}) 
``` 

を:ときに問題がある

<h1>A Header</h1> 

<pre><code class="javascript">$(document).ready(function() {})</code></pre> 

、私はそれらのトリプルバックスラッシュのコードブロックを持っていると思いますが、HTML にコンパイルDIVに包まれているので、値下げは次のようになります。

# A Header 

<div class="row"> 
<div class="span6"> 
``` javascript 
$(document).ready(function() {}) 
``` 
</div> 
</div> 

私はTAことができますこの方法をたとえば、マークダウンとツイッターブートストラップの両方の利点があります。

しかし、私がそれを行うと、コードブロックは決して処理されません。 HTML解析コードを記述することなく、達成する方法はありますか?

ありがとうございます! (それがあるなど)Markdown spec当たり

答えて

5

値引きフォーマット構文は、ブロックレベルのHTMLタグ内で処理されていません。たとえば、HTMLブロック内にMarkdownスタイルの*emphasis*を使用することはできません。

Redcarpet GitHubページにはfeature requestがありますが、残念ながらあなたに役立つ結論はありません。

おそらく最も抵抗の少ないパスは、Redcarpetを介して実行し、その結果のHTMLをNokogiriで実行し、Redcarpetを介してブロックレベルノードの内容を再度実行することです。例:

require 'redcarpet' 
require 'nokogiri' 

block_nodes = %w(p div blockquote ...) #¹ 

markdown = Redcarpet::Markdown.new Redcarpet::Render::HTML, 
      :fenced_code_blocks => true 

html = markdown.render text 

noko_doc = Nokogiri::HTML::DocumentFragment.parse html 

noko_doc.css(*block_nodes).each do |node| 
    node.content = markdown.render node.content if node.text? 
end 

html = noko_doc.to_html 

https://github.com/tanoku/sundown/blob/master/html_block_names.txtもちろん

を¹、もしあなたが行う必要があるでしょう(ようにHTMLブロックとを含む値下げブロックを含むHTMLブロック)ネストの複数のレベルを持っている場合これはあなたが生成する新しいHTMLノードで再帰的に実行されます。これは簡単なことですが、明らかにパフォーマンスの影響があります。なぜなら、「すべてのケースで最良の解決策」ではなく、「最小の抵抗の道」と言いました。

関連する問題