当前位置 : 主页 > 编程语言 > ruby >

ruby-on-rails – Redcarpet / Bluecloth不允许标题?

来源:互联网 收集:自由互联 发布时间:2021-06-23
有没有办法使用Redcarpet或Bluecloth,这样当它插入降价时它不会产生任何标题? 例如: #header 1 收益率: header 1 header 1 (preferred) 和: ##header 2 收益率: header 2 header 2 (preferred) 好吧,你可以在
有没有办法使用Redcarpet或Bluecloth,这样当它插入降价时它不会产生任何标题?

例如:

#header 1

收益率:

header 1

header 1 (preferred)

和:

##header 2

收益率:

header 2

header 2 (preferred)

好吧,你可以在Markdown中转义字符:

# header 1
\# header 1

## header 2
\## header 2

…给:

header 1

# header 1

header 2

## header 2

如果您不想这样做,或者您正在解析其他人的Markdown并且没有选择,我建议您预先处理收到的Markdown以执行上述操作:

def pound_filter text
  text.gsub /^#/, '\#'
end

使用Redcarpet,您可以验证它是否有效:

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>

当然,因为HTML中的换行符实际上不会这样呈现 – 它将显示为一行:

# Hello ## World”

……你可能想要增加:

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>

这最后会显示为:

# Hello

## World

不幸的是,你最终会进入这样一个奇怪的领域,其中标题在引号内:

> ## Heading

……但我把它作为练习留给读者.

网友评论