在我的Rails3中应用程序,我想用隆重的接待处理用户的帖子和用户注释部分。 因此我想延长隆重的接待,支持我的网站上打开@username到链接给用户。 我知道,隆重的接待是用C写的,但反正是有简单的方法,它的红宝石延长? 它会很难把它编写C? 如果我只是做这个隆重的接待之外?
另外我在那会速记链接到其他车型在我的应用程序隆重的接待一些其他的扩展intrested。 我现在还无法确定的语法,但我猜测这将是类似的github手柄如何链接到的问题。
在我的Rails3中应用程序,我想用隆重的接待处理用户的帖子和用户注释部分。 因此我想延长隆重的接待,支持我的网站上打开@username到链接给用户。 我知道,隆重的接待是用C写的,但反正是有简单的方法,它的红宝石延长? 它会很难把它编写C? 如果我只是做这个隆重的接待之外?
另外我在那会速记链接到其他车型在我的应用程序隆重的接待一些其他的扩展intrested。 我现在还无法确定的语法,但我猜测这将是类似的github手柄如何链接到的问题。
我发现它很容易扩展隆重的接待在Ruby的语法分析器对我的Rails 3应用程序。 这不是可怕的。
首先,通过派生从隆重的接待的HTML渲染器类开始,重写预处理方法,在文档中推荐。 在Rails 3.2和Rails 4,这个文件可以去任何地方,你不必要求它。 我使用的是“服务”文件夹来保存这样的代码。
# app/services/my_flavored_markdown.rb
class MyFlavoredMarkdown < Redcarpet::Render::HTML
def preprocess(text)
text
end
end
下一步是添加你想要的文本替换方法。 这里我用正则表达式来换行,看起来像在使用CSS类“提”的HTML span标记“@mention”。
# app/services/my_flavored_markdown.rb
class MyFlavoredMarkdown < Redcarpet::Render::HTML
def preprocess(text)
wrap_mentions(text)
end
def wrap_mentions(text)
text.gsub! /(^|\s)(@\w+)/ do
"#{$1}<span class='mention'>#{$2}</span>"
end
text
end
end
你可以很容易地查找用户的个人资料页面,并包装在一个锚定标记的@mention代替。 就我而言,我也做了为工作的同样方式和链接的方法一起使用表情符号和#标签的方法。
最后一步是添加接受一些文本,创建您隆重的接待派生的类的实例,通过文成,对于处理一个帮手,并返回HTML结果。
# app/helpers/application_helper.rb
def flavored_markdown_to_html(text)
renderer = MyFlavoredMarkdown.new()
# These options might be helpful but are not required
options = {
safe_links_only: true,
no_intra_emphasis: true,
autolink: true
}
Redcarpet::Markdown.new(renderer, options).render(text)
}
在你的意见,你可以这样调用:
<%= flavored_markdown_to_html("This is something worth @mentioning") %>
那么输出将是:
This is something worth <span class='mention'>@mentioning</span>
。
我曾经试图扩大redcarpet
,但发现它非常困难。 如果有上没有其他依赖redcarpet
,我建议您尝试rpeg-markdown
是一个(有点过时)红宝石宝石提供的绑定,以优良的PEG-降价 。
peg-markdown
是写成一个正式的语法减价解释。 这意味着,这是很容易将其与自己的语法扩展。 我已经成功地延长peg-markdown
为我自己的项目(见这里我的叉子 ),我发现它比乱搞更简单redcarpet
的自定义分析器代码。
我还发现, peg-markdown
到错误更少。
Ruby的绑定可能必须通过更新git的子模块进行电流。 (我打算提交一个pull请求更新rpeg-markdown
到最新版本peg-markdown
。)