Я пишу плагин Jekyll для создания собственного тега.Он принимает аргумент и выплевывает строку HTML.У меня это в основном работает - я могу передать аргументы и вернуть HTML на основе этих аргументов.Отлично.
Вот что меня озадачило: я хочу включить рендер другого плагина как часть моего собственного.
Мой желательный плагин - jekyll_icon_list, плагин, который я хочу использовать, - jekyll-inline-svg.Вот (сокращенно) код:
require 'jekyll_icon_list/version'
require 'jekyll'
require 'jekyll-inline-svg'
module JekyllIconList
class IconList < Liquid::Tag
def initialize(tag_name, raw_args, tokens)
@raw_args = raw_args
@tokens = tokens
super
end
def parse_arguments(raw_args, settings)
# (Unrelated stuff)
end
def generate_image(icon, settings, context)
# (Unrelated stuff)
# Problem Here:
Liquid::Tag.parse(
'svg',
icon,
@tokens,
Liquid::ParseContext.new
).render(context)
end
def render(context)
# Builds my HTML, using generate_image in the process
end
end
end
Liquid::Template.register_tag('iconlist', JekyllIconList::IconList)
Это не выдает никаких ошибок, но также ничего не возвращает вообще.
Другие вещи, которые я пробовал:
Jekyll::Tags::JekylInlineSvg.new(
возвращает ошибку закрытого метода.Джекилл не хочет, чтобы я делал свои собственные теги напрямую.
'{% svg #{icon} %}'
Возвращает именно это буквально с замененной иконкой;Джекилл явно не анализирует один и тот же файл дважды.
Я пытаюсь выяснить это из источника Джекилла, но я не очень опытен в чтении исходного кода и продолжаю заглядывать в тупики.Может кто-то указать мне верное направление?Очень признателен.