gpt4 book ai didi

ruby - 如何扩展 redcarpet 以支持自动链接用户提及?

转载 作者:数据小太阳 更新时间:2023-10-29 07:01:38 25 4
gpt4 key购买 nike

在我的 rails3 应用程序中,我想使用 redcarpet 来处理用户的帖子和用户评论部分。因此,我想扩展 redcarpet 以支持将 @username 转换为指向我网站上用户的链接。我知道 redcarpet 是用 C 编写的,但是有没有简单的方法可以用 ruby​​ 扩展它?用C写有多难?我应该只在 Redcarpet 之外做这件事吗?

此外,我对 redcarpet 的其他一些扩展很感兴趣,它们可以作为链接到我的应用程序中其他模型的简写。我还不确定语法,但我猜它与 github 处理问题链接的方式类似。

最佳答案

我发现在 Ruby 中为我的 Rails 3 应用程序扩展 redcarpet 的解析器非常容易。一点都不可怕。

首先,首先从 Redcarpet 的 HTML 渲染器派生一个类,然后按照文档中的建议覆盖预处理方法。在 Rails 3.2 和 Rails 4 中,这个文件可以放在任何地方,你不需要要求它。我使用“服务”文件夹来保存这样的代码。

# app/services/my_flavored_markdown.rb
class MyFlavoredMarkdown < Redcarpet::Render::HTML
def preprocess(text)
text
end
end

下一步是添加执行所需文本替换的方法。在这里,我使用正则表达式将看起来像“@mention”的文本包装在带有 css 类“mention”的 HTML span 标记中。

# 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 包装在 anchor 标记中。就我而言,我还为表情符号和主题标签制作了以相同方式工作的方法,并将这些方法链接在一起。

最后一步是添加接受一些文本的帮助器,创建 Redcarpet 派生类的实例,将文本传递到其中进行处理,并返回 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)
}

在你的 View 中你可以这样调用它:

<%= flavored_markdown_to_html("This is something worth @mentioning") %>

输出将是:

This is something worth <span class='mention'>@mentioning</span> .

关于ruby - 如何扩展 redcarpet 以支持自动链接用户提及?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12381230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com