我正在为我的Octopress网站制作一个Jekyll标记插件,以帮助我制作一个“注释”元素。我只是希望能够在我的博客上突出显示一条信息作为旁注,就像这样。
问题是,我无法弄清楚如何处理此标签的内容(即Markdown或Textile)。上面的图片只是实现了我实际上用html代码制作我的链接。以下是我在内容中使用markdown时最终的结果。
在我的帖子中,我正在写这样的内容。
{% note %}
This is the third post in my Start to Finish series. Last time I talked about [Git](/blog/2013/09/25/getting-started-with-git/).
{% endnote %}
这是我的插件代码。它基于图像标记代码,并且真的没有太多。
module Jekyll
class NoteTag < Liquid::Block
@title = nil
def initialize(tag_name, markup, tokens)
@title = markup
super
end
def render(context)
output = super(context)
title = "Note"
if !@title.empty?
title += ": #{@title}"
end
"</section>\n<div class=\"note\"><span class=\"title\">#{title}</span>#{output}</div>\n<section>"
end
end
end
Liquid::Template.register_tag('note', Jekyll::NoteTag)
你知道如何在这个标签的内容上使用转换器吗?我通常使用Markdown作为我的帖子,但我想为其他人发布这个插件,所以我希望它像Jekyll的其余部分一样充满活力。
答案 0 :(得分:12)
我发现这个'Markdown block tag'的实现似乎是一个相对简单的实现。请注意在site.getConverterImpl()
方法中使用render
。
我用这个例子来制作这个数字标签(基于现有技术我在SO上找到的另一个问题但不能再找到了)
module Jekyll
module Tags
class FigureTag < Liquid::Block
CaptionUrl = /(\S[\S\s]*)\s+(https?:\/\/\S+)\s+(.+)/i
Caption = /(\S[\S\s]*)/
def initialize(tag_name, markup, tokens)
super
@caption = nil
if markup =~ CaptionUrl
@caption = "\n\t\t<figcaption>#{$1}<a href='#{$2}'>#{$3}</a></figcaption>\n\t"
elsif markup =~ Caption
@caption = "\n\t\t<figcaption>#{$1}</figcaption>\n\t"
end
@markup = markup
end
def render(context)
site = context.registers[:site]
converter = site.getConverterImpl(::Jekyll::Converters::Markdown)
output = converter.convert(super(context))
"<figure class=\"center\">#{output}#{@caption}</figure>"
end
end
end
end
Liquid::Template.register_tag('fig', Jekyll::Tags::FigureTag)
上述插件设法解析块内容中的markdown。因此,给出以下块标记用法:
{% fig Test fig %}
This should be parsed as *markdown* [man](http://example.com/).
{% endfig %}
您将获得以下html:
<figure class="center"><p>This should be parsed as <em>markdown</em> <a href="http://example.com/">man</a>.</p>
<figcaption>Test fig </figcaption>
</figure>
希望这有帮助!我昨晚花了几个小时无处可去,但今天早上我找到了这个例子,它在20分钟内点击了。
答案 1 :(得分:6)
Jekyll 3.x: getConverterImpl 现已弃用
使用 find_converter_instance 获取转换器:
def render(context)
text = super
site = context.registers[:site]
converter = site.find_converter_instance(::Jekyll::Converters::Markdown)
_output += "<figcaption>#{converter.convert(_caption)}</figcaption>"