2016-03-20 11 views
0

私はmarkdownを使ってブログを書こうとしており、redcarpet gemをインストールすることに決めました。 ```を使用してコードのブロックを入れようとするたびに、最初の行を除くすべての行が6つの余分なスペースでインデントされてしまうという問題があります。それを取り除く方法?redcarpet gem(Ruby on Rails)を使って余分なスペースを取り除く方法

application_helper.rb

module ApplicationHelper 
    class HTMLwithPygments < Redcarpet::Render::HTML 
    def block_code(code, language) 
     Pygments.highlight(code, lexer: language) 
    end 
    end 

    def markdown(content) 
    renderer = HTMLwithPygments.new(hard_wrap: true, filter_html: true) 
    options = { 
     autolink: true, 
     no_intra_emphasis: true, 
     disable_indented_code_blocks: true, 
     fenced_code_blocks: true, 
     lax_html_blocks: true, 
     strikethrough: true, 
     superscript: true 
    } 
    Redcarpet::Markdown.new(renderer, options).render(content).html_safe 
    end 
end 

ポストビュー - show.html.haml

.container 
    .show.title 
    = @post.title 
    .show.header 
    = @post.header 
    .show.created_at 
    = @post.created_at 
    .show.content 
    = markdown @post.content 

これは、コードは崇高でどのように見えるかです:

code in sublime

私は2つのスペースのインデントとSublimeText3を使用してい

code after copy-paste to a post content

、ビューはhtml.haml形式である:

これは、コンテンツを投稿するコピー・ペーストし、同じコードでどのように見えるか、レンダリングの投稿です。

```ruby 
module ApplicationHelper 
    class HTMLwithPygments < Redcarpet::Render::HTML 
    def block_code(code, language) 
     Pygments.highlight(code, lexer: language) 
    end 
    end 

    def markdown(content) 
    renderer = HTMLwithPygments.new(hard_wrap: true, filter_html: true) 
    options = { 
     autolink: true, 
     no_intra_emphasis: true, 
     disable_indented_code_blocks: true, 
     fenced_code_blocks: true, 
     lax_html_blocks: true, 
     strikethrough: true, 
     superscript: true 
    } 
    Redcarpet::Markdown.new(renderer, options).render(content).html_safe 
    end 
end 

答えて

1

これは、出力HTMLをきちんと人々が望む多くの場合、何をしている、フォーマットされますが、空白に敏感で問題を起こすことができるようにブロックをインデントHAMLによって引き起こされる:

これはポストの内容の正確な入力がありますこのようなコード。

これを修正する方法はいくつかあります。まず、:ugly optionをtrueに設定して実行すると(プロダクションの場合)、追加の空白はどこにも追加されず、目的の結果が得られます。

また、=の代わりにwhitespace preservation operator ~を使用することもできます。これにより、ブロック内のすべての改行がエンティティ(&#x000A)に変換されるので、余分な空白は追加されません(追加する改行がないため)。これによりHTMLの生成は変更されますが、ブラウザで表示したときに表示されるようになります。

+0

両方の方法が私のために働く、ありがとう! – weezing

関連する問題