Eh bien, vous pouvez échapper les caractères dans Markdown :
# header 1
\# header 1
## header 2
\## header 2
...donne :
en-tête 1
# En-tête 1
en-tête 2
## en-tête 2
Si vous ne voulez pas avoir à le faire, ou si vous analysez le Markdown d'autres personnes et que vous n'avez pas le choix, je vous recommande de prétraiter le Markdown entrant pour qu'il le fasse à votre place :
def pound_filter text
text.gsub /^#/, '\#'
end
En utilisant Redcarpet, vous pouvez vérifier que cela fonctionne :
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>
Bien sûr, comme un saut de ligne en HTML n'est pas réellement rendu comme tel, il apparaîtra comme une seule ligne :
# Hello ## World"
...vous pourriez vouloir augmenter ça :
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>
Ce dernier apparaîtrait comme :
# Hello
## Monde
Malheureusement, on finit par se retrouver dans des situations bizarres comme celle-ci, où un titre se trouve à l'intérieur d'une citation :
> ## Heading
...mais je laisse cela comme un exercice au lecteur.