转换器 Converters

如果你想在你的网站中使用一种新的标记语言,你可以通过实现自己的转换器来将其集成进去。Markdown 和 Textile 标记语言都是通过这种方式实现的。

记住你的 Front Matter

即使是通过插件添加的转换器,Jekyll 也只会转换那些文件顶部包含 YAML 头信息的文件。

下面是一个转换器示例,它会处理所有以 .upcase 结尾的文章,并使用 UpcaseConverter 进行处理:

module Jekyll
  class UpcaseConverter < Converter
    safe true
    priority :low

    def matches(ext)
      ext =~ /^\.upcase$/i
    end

    def output_ext(ext)
      ".html"
    end

    def convert(content)
      content.upcase
    end
  end
end

转换器至少需要实现 3 个方法:

方法 描述

matches

判断给定的文件扩展名是否匹配该转换器支持的扩展名列表。 接收一个参数:文件的扩展名(包含点号)。 如果匹配必须返回 true,否则返回 false

output_ext

输出文件的扩展名(包含点号)。 通常为 ".html"

convert

用于执行内容转换的逻辑。 接收一个参数:文件的原始内容(不包含 front matter)。 必须返回一个 String。

在这个示例中,UpcaseConverter#matches 会检查文件扩展名是否为 .upcase,如果是,就使用该转换器进行渲染。它会调用 UpcaseConverter#convert 来处理内容。在这个简单的转换器中,我们只是将整个内容字符串转换为大写。最后,在保存页面时,它会使用 .html 作为输出扩展名。