【发布时间】:2020-07-02 15:02:57
【问题描述】:
我使用 Redcarpet 来解析和呈现 markdown,尽管我需要对默认行为进行一些特定的更改。例如,虽然我确实需要自动链接,但我需要它不链接任何格式如电子邮件地址的东西。为此,我使用了这个自定义渲染器类:
class HTMLRenderer < Redcarpet::Render::HTML
def block_code(code, language)
"<pre><code>#{encode(code).gsub("\n", "<br/>")}</code></pre>"
end
def autolink(link, link_type)
return link if link_type == :email
Formatter.instance.link_url(link)
end
private
def html_entities
@html_entities ||= HTMLEntities.new
end
def encode(html)
html_entities.encode(html)
end
end
我需要做的下一个调整是让它根本不尝试处理列表。也就是说,如果我以这种形式输入:
- element 1
- element 2
- element 3
我不想要的是:
- 元素 1
- 元素 2
- 元素 3
我希望它保持列表不变:
- 元素 1
- 元素 2
- 元素 3
首先,我尝试以与阻止电子邮件自动链接的方式非常相似的方式解决此问题:
def list(contents, list_type)
contents
end
def list_element(text, list_type)
text
end
但是在这种情况下,如果我给它之前的示例列表,我会得到这个输出:
元素1元素2元素3
虽然我可以通过简单地添加换行符并将"- " 添加到每个元素来解决此问题,但我想保留用于创建列表的特定字符,它可以是-+* 中的任何一个(或有序列表中的数字)。
所以我得出的结论是,在渲染器中乱搞是错误的解决方案;在呈现文本时,我已经丢失了我需要的信息。我认为我应该研究的是改变解析器的行为。不幸的是,虽然修改渲染器行为的文档和示例非常丰富,但除了支持的标志之外,我没有发现任何修改解析器行为的类型。
如何完全禁用 Markdown 功能的解析?
【问题讨论】: