0

マークダウンを使ってブログを書こうとしているのですが、redcarpet gem をインストールすることにしました。すべて問題ないように見えますが、pygments.rb は構文の強調表示で素晴らしい仕事をしています```。それを取り除く方法は?

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

崇高なコードは次のようになります。

崇高なコード

これは、コンテンツを投稿するために同じコードをコピーして貼り付けた場合、レンダリングされた投稿がどのように見えるかです。

投稿コンテンツにコピペした後のコード

SublimeText3 を 2 つのスペースでインデントして使用しています。ビューは 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
4

1 に答える 1

1

これは、出力 HTML が適切にフォーマットされるようにブロックをインデントする Haml によって引き起こされます。これは多くの場合、人々が望むものですが、このような空白に敏感なコードで問題を引き起こす可能性があります。

それを修正するにはいくつかの方法があります。:uglyまず、オプションを true に設定して実行すると(本番環境ではそうなるはずです)、余分な空白はどこにも追加されず、目的の結果が得られます。

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

于 2016-03-20T14:06:22.783 に答える