Tom*_*man 16 ruby formatting markdown ruby-on-rails
我正在使用markdown在我的网站上发表评论,我希望用户能够通过按enter而不是创建换行符space space enter(有关此想法的详细信息,请参阅此元问题)
我怎么能用Ruby做到这一点?你认为Github Flavored Markdown正是我所需要的,但是(令人惊讶的是),这是非常错误的.
# in very clear cases, let newlines become <br /> tags
text.gsub!(/^[\w\<][^\n]*\n+/) do |x|
x =~ /\n{2}/ ? x : (x.strip!; x << " \n")
end
Run Code Online (Sandbox Code Playgroud)
这个逻辑要求该行以a开头的行开头\w创建一个<br>.这个要求的原因是你不要乱用列表:(但请看下面的编辑;我甚至不确定这是否有意义)
* we don't want a <br> * between these two list items
但是,在这些情况下逻辑中断:
[some](http://google.com) [links](http://google.com)
*this line is in italics* another line
> the start of a blockquote! another line
即,在所有这些情况下<br>,第一行的末尾应该有一个,但GFM不会添加一个
奇怪的是,这在GFM的javascript版本中正常工作.
有没有人<br>在Ruby中有一个"新行到s" 的工作实现?
如果你查看Github的官方Github Flavored Markdown存储库,你会发现另一个<br>regex 新行!:
# in very clear cases, let newlines become <br /> tags
text.gsub!(/(\A|^$\n)(^\w[^\n]*\n)(^\w[^\n]*$)+/m) do |x|
x.gsub(/^(.+)$/, "\\1 ")
end
Run Code Online (Sandbox Code Playgroud)
我不知道这个正则表达式意味着什么,但它在上述测试用例中没有做得更好.
此外,它看起来不像是"不要乱用列表",因为要求以字符开头的行开头是有效的.即,无论是否添加2个尾随空格,标准降价列表语义都不会改变.这里:
在这个问题的来源中,在"第1项"之后有2个尾随空格,但如果你看一下HTML,就没有多余的了. <br>
这让我认为将换行符转换为<br>s 的最佳正则表达式就是:
text.gsub!(/^[^\n]+\n+/) do |x|
x =~ /\n{2}/ ? x : (x.strip!; x << " \n")
end
Run Code Online (Sandbox Code Playgroud)
思考?
我不确定这是否有帮助,但我只是使用 ActionView::Helpers::TextHelper 中的 simple_format()
my_text = "Here is some basic text...\n...with a line break."
simple_format(my_text)
output => "<p>Here is some basic text...\n<br />...with a line break.</p>"
Run Code Online (Sandbox Code Playgroud)
即使它不符合您的规格,请查看 simple_format() 源代码 .gsub!方法可能会帮助您编写自己的所需 Markdown 版本。
| 归档时间: |
|
| 查看次数: |
6174 次 |
| 最近记录: |