【问题标题】:With Jekyll 3, can I transform a post's Markdown before actual Markdown parsing?使用 Jekyll 3,我可以在实际 Markdown 解析之前转换帖子的 Markdown 吗?
【发布时间】:2016-06-07 11:23:43
【问题描述】:

我想使用Jekyll Responsive Image plugin 为我的帖子图像生成具有srcset/sizes 属性的适当响应式图像。

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

这就是为什么我想知道是否有一种方法——某种插件——告诉 Jekyll 转换图像的标准 Markdown 语法,我会将其放入我的 Markdown 文件中……

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

…进入Jekyll Responsive Image plugin特有的语法:

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

然后,Jekyll 可以继续使用 Kramdown 生成 HTML……

我还创建了an issue in the plugin's Github,但更一般的答案也会很好,并且可能对其他需求有用。

【问题讨论】:

    标签: markdown jekyll jekyll-extensions responsive-images kramdown


    【解决方案1】:

    是的,这绝对是可能的。从 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 文件的内容。

    希望这会有所帮助!

    【讨论】:

    【解决方案2】:

    最简单的解决方案是使用新的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

    【讨论】:

    • 我更喜欢parkr 的回复,但是这个也给了我新的想法,非常感谢!
    • 谢谢! FWIW,我使用命名匹配修改了正则表达式,还解析了title,并且alttitle 都是可选的。所以就我而言,gsub-line 看起来像这样:new_content = post.content.gsub(/\!\[(?&lt;alt&gt;.+)?\]\((?&lt;path&gt;\S+) ?"?(?&lt;title&gt;.*?)"?\)/, '{% responsive_image path: \k&lt;path&gt; alt: "\k&lt;alt&gt;" title: "\k&lt;title&gt;" %}’)
    【解决方案3】:

    此处发布的示例破坏了 alt 标记。 alt 字符串需要加引号,否则会被截断为一个单词。

    例如content.gsub(/\!\[(.+)\]\((.+)\)/, '{% responsive_image path: \2 alt: "\1" %}')

    此外,Nicolas Hoizey 的帖子是唯一适用于最新版本 Jekyll (3.7) 的帖子,我似乎无法让其他示例输出 html。在插入液体标签之前,Markdown 似乎已被渲染。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2017-09-10
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      • 1970-01-01
      相关资源
      最近更新 更多