ruby 如何使用for循环创建Liquid标记?

pu3pd22g  于 2023-02-03  发布在  Ruby
关注(0)|答案(1)|浏览(166)

所以,我想创建一个. rb插件的哲基尔主题,以便能够使用下面的液体语法在. md文件:
{% tab caption %}
当从. md文件构建网页时,应将其转换为:
<p><b>Tab. X.</b> Caption</p>
其中X是文档中每个特定{% tab caption %}标签的计数;标题是来自预定义散列的键的值,其中键与标记中的caption匹配。
比如,我在. md中有以下代码:

The table below summarizes diagram symbols.

{% tab diagram %}

The table below presents the configuration options.

{% tab config %}

它应返回:

The table below summarizes diagram symbols.
<p><b>Tab. 1.</b> Diagram designations.</p>
The table below presents the configuration options.
<p><b>Tab. 2.</b> Configuration options.</p>

我已经很容易地计算出了从散列中获取值的方法;但是,我不知道如何进行编号,我假设我可以通过for循环遍历这个特定标记出现的数组;然而,我还没有设法成功地谷歌作出这样的数组摆在首位。
感谢您的关注!

92vpleto

92vpleto1#

我已经想出了我想做的事情,它根本不需要任何循环:

module Jekyll
    class TabHandler < Liquid::Tag
        @@count = 1

        def initialize(name, input, tokens)
            super
            @input = input
        end

        def render(context)
            modulename = context["modulename"].to_s
            dictionary = { "io " => "I/O specifications for " + modulename,
                "se " => modulename + " signal exchange",
                "diagram " => "Diagram designations" }
            if dictionary.has_key?(@input)
                output = "<p><b>Tab. " + @@count.to_s + ".</b> " + dictionary.fetch(@input) + ".</p>"
                @@count += 1
            else
                output = "<p><b>Tab. " + @@count.to_s + ".</b> " + @input + ".</p>"
                @@count += 1
            end
            return output
        end
    end
end

Liquid::Template.register_tag('tab', Jekyll::TabHandler)

相关问题