2016-03-20 25 views
0

Markdown kullanarak blog yazmaya çalışıyorum ve redcarpet gem yüklemeye karar verdim. Her şey iyi görünüyor, pygments.rb sözdizimi vurgulama, AMA ile büyük bir iş yapıyor, sorun ne zaman ben ``` kullanarak kod bloğu koymak çalıştığınızda 6 satırları tarafından girintilen tüm satırları (ilk hariç) olsun. Bundan nasıl kurtuluruz?Redcarpet gem (Ruby on Rails) kullanarak ek alanlardan kurtulmak için

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 

Yayın görüntüleme - show.html.haml

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

Bu kod nasıl göründüğünü yüce olduğu gibi:

code in sublime

Ben 2 alanlarda girinti ile SublimeText3 kullanıyorum

code after copy-paste to a post content

, görünümler html.haml biçimindedir:

Bu içeriği yayınlama kopyalanıp yapıştırılan aynı kodla nasıl göründüğünü render yazıdır.

```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 

cevap

1

Bu çıkış HTML düzgünce İnsanların istediği sıklıkla budur, biçimlendirilmiş ancak boşluk hassas ilgili sorunlara neden olabilir ve böylece bloğu girinti Haml kaynaklanır:

Bu mesaj içeriğinin tam girdidir Bunun gibi kod.

Düzeltmek için birkaç yol vardır. Öncelikle :ugly option (true) değerine ayarlanmışsa (üretimde böyle olması gerekir), ekstra boşluk herhangi bir yere eklenmez ve istediğiniz sonucu alırsınız.

Alternatif olarak = yerine whitespace preservation operator ~'u kullanabilirsiniz. Bu, bloktaki tüm yeni satırları (&#x000A) nesneye dönüştürecek ve bu nedenle fazladan boşluk eklenmeyecektir (eklenecek yeni satır olmadığı için). Bu HTML'nin ürettiği değişiklikleri değiştirecektir, ancak tarayıcıda görüntülendiğinde istediğiniz gibi görünecektir.

+0

Her iki yol da benim için çalışıyor, teşekkürler! – weezing