随着Jekyll 3,我可以在实际的Markdown解析之前转换帖子的Markdown吗?

问题描述:

我想使用Jekyll Responsive Image plugin来为我的帖子的图片生成适当的响应图片和srcset/sizes属性。随着Jekyll 3,我可以在实际的Markdown解析之前转换帖子的Markdown吗?

但是我也希望能够在提供像MacDown这样的实时预览的软件中编辑我的帖子,该软件只理解图像的标准Markdown语法。

这就是为什么我想知道是否有一种方法-a一些排序 - 的插件告诉Jekyll对于变换图像,我会把我的降价文件的标准降价语法...

![alt text](path/to/image.jpg)

...这个语法具体到Jekyll Responsive Image plugin

{% responsive_image path: path/to/image.jpg alt: "alt text" %}

然后,化身可以继续,并使用Kramdown生成HTML ...

我也创建an issue in the plugin's Github,但更普遍的答案也很好,也许对其他需求有用。

是的,这是绝对有可能的。由于Jekyll 3,你可以有多个转换器每个文件扩展名。这允许您创建像转换器:

class ResponsiveImageify < Jekyll::Converter 
    priority :high 

    def matches(ext) 
    ext.downcase == ".md" 
    end 

    def convert(content) 
    content.gsub(/\!\[(.+)\]\((.+)\)/, '{% responsive_image path: \2 alt: \1 %}') 
    end 
end 

那转换器将gsub任何.md文件的内容。

希望这有助于!

+0

这太神奇了,太简单了,非常感谢! –

+0

我试图在一个新的插件中使用它,但它似乎是我用['Cloudinary'转换器]生成的Liquid语法(https://github.com/nhoizey/nicolas-hoizey.com/blob/8f49a34dd444b000520aeb7731d0a8ca17415615/_plugins/ cloudinary.rb#L84-L107)之后未被解析。我应该明确地调用Kramdown吗? –

+0

相关:http://stackoverflow.com/questions/38126629/how-is-the-priority-flag-in-jekyll-plugins-supposed-to-work –

最简单的解决方法是使用新的Jekyll hooks

一个非常原始的插件可以是:

Jekyll::Hooks.register :posts, :pre_render do |post, payload| 
    docExt = post.extname.tr('.', '') 
    # only process if we deal with a markdown file 
    if payload['site']['markdown_ext'].include? docExt 
    newContent = post.content.gsub(/\!\[(.+)\]\((.+)\)/, '{% responsive_image path: \2 alt: \1 %}') 
    post.content = newContent 
    end 
end 

这些信息存储在_plugins/img-tag-transform.rb

+0

我喜欢[parkr](http://stackoverflow.com/users/716249/parkr)的反应更好,但是这个也给了我新的想法,所以非常感谢! –