使用 Jekyll 3,我可以在实际 Markdown 解析之前转换 post 的 Markdown 吗?
With Jekyll 3, can I transform a post's Markdown before actual Markdown parsing?
我想使用 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,但更笼统的答案也很好,也许对其他需求有用。
最简单的解决方案是使用新的 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: alt: %}')
post.content = newContent
end
end
将此存储在 _plugins/img-tag-transform.rb
是的,这绝对有可能。从 Jekyll 3 开始,每个文件扩展名 可以有多个转换器 。这允许您创建一个转换器,如:
class ResponsiveImageify < Jekyll::Converter
priority :high
def matches(ext)
ext.downcase == ".md"
end
def convert(content)
content.gsub(/\!\[(.+)\]\((.+)\)/, '{% responsive_image path: alt: %}')
end
end
该转换器将 gsub
任何 .md
文件的内容。
希望对您有所帮助!
此处 post 的示例打破了 alt 标签。
alt 字符串需要用引号引起来,否则它会被截断为一个单词。
例如content.gsub(/\!\[(.+)\]\((.+)\)/, '{% responsive_image path: alt: "" %}')
此外,Nicolas Hoizey 的 post 是唯一适用于最新版本 Jekyll (3.7) 的方法,我似乎无法使其他示例输出 html。 Markdown 似乎在插入 liquid 标签之前就已呈现。
我想使用 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,但更笼统的答案也很好,也许对其他需求有用。
最简单的解决方案是使用新的 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: alt: %}')
post.content = newContent
end
end
将此存储在 _plugins/img-tag-transform.rb
是的,这绝对有可能。从 Jekyll 3 开始,每个文件扩展名 可以有多个转换器 。这允许您创建一个转换器,如:
class ResponsiveImageify < Jekyll::Converter
priority :high
def matches(ext)
ext.downcase == ".md"
end
def convert(content)
content.gsub(/\!\[(.+)\]\((.+)\)/, '{% responsive_image path: alt: %}')
end
end
该转换器将 gsub
任何 .md
文件的内容。
希望对您有所帮助!
此处 post 的示例打破了 alt 标签。 alt 字符串需要用引号引起来,否则它会被截断为一个单词。
例如content.gsub(/\!\[(.+)\]\((.+)\)/, '{% responsive_image path: alt: "" %}')
此外,Nicolas Hoizey 的 post 是唯一适用于最新版本 Jekyll (3.7) 的方法,我似乎无法使其他示例输出 html。 Markdown 似乎在插入 liquid 标签之前就已呈现。