Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为具有嵌套标记的自定义标记编写jekyll插件的问题_Ruby_Jekyll_Liquid - Fatal编程技术网

Ruby 为具有嵌套标记的自定义标记编写jekyll插件的问题

Ruby 为具有嵌套标记的自定义标记编写jekyll插件的问题,ruby,jekyll,liquid,Ruby,Jekyll,Liquid,我正在尝试编写一个jekyll插件,添加一些标签来处理一些选项卡式块,因为我的网站将有很多页面具有此类块。我想在降价中轻松编辑它 我正在尝试使用以下液体代码: {% tabs %} {% tab tab-1 %} Content of tab #1 {% endtab %} {% tab tab-2 %} Content of tab #2 {% endtab %} {% tab tab-3 %} Content of tab #3 {% en

我正在尝试编写一个jekyll插件,添加一些标签来处理一些选项卡式块,因为我的网站将有很多页面具有此类块。我想在降价中轻松编辑它

我正在尝试使用以下液体代码:

{% tabs %}
  {% tab tab-1 %}
    Content of tab #1
  {% endtab %}

  {% tab tab-2 %}
    Content of tab #2
  {% endtab %}

  {% tab tab-3 %}
    Content of tab #3
  {% endtab %}
{% endtabs %}
给出以下HTML代码:

<div class="tab-content">
  <div class="tab-pane" id="tab-1">
    Content of tab #1
  </div>
  <div class="tab-pane" id="tab-2">
    Content of tab #2
  </div>
  <div class="tab-pane" id="tab-3">
    Content of tab #3
  </div>
</div>

表1的内容
表2的内容
表3的内容
这是我的插件:

module Tags
    class TabsBlock < Liquid::Block
        def render(context)
            '<div class="tab-content">' + super + "</div>"
        end
    end

    class TabBlock < Liquid::Block
        def initialize(tag_name, tab, tokens)
            super
            @tab = tab.strip
        end

        def render(context)
            return "" if @tab.empty?

            site      = context.registers[:site]
            converter = site.getConverterImpl(Jekyll::Converters::Markdown)

            content = super.strip
            content = converter.convert(content)

            '<div id="' + @tab + '" class="tab-pane">' + content + "</div>"
        end
    end
end

Liquid::Template.register_tag("tabs", Tags::TabsBlock)
Liquid::Template.register_tag("tab",  Tags::TabBlock)
模块标签
类TabsBlock
当我尝试时,标记是不正确的。 只有第一个选项卡的标记是我所期望的,其他选项卡通过代码highlighter传递,我得到:

<div class="highlight">
  <pre><code class="text language-text" data-lang="text">&lt;div id=&quot;tab-1&quot; class=&quot;tab-pane&quot;&gt;&lt;p&gt;Content of tab #1&lt;/p&gt;</code></pre>
</div>

div id=“tab-1”class=“tab pane”p选项卡的内容/p
我不知道为什么,我也不知道如何用Ruby/Liquid自己处理:)。 有什么想法吗


谢谢

我不知道为什么,但Jekyll或Liquid认为,鉴于缩进,这是Highlitht的一些代码

我通过再次剥离标记转换代码以删除换行符并删除一些缩进来解决此问题:

getConverterImpl
class TabBlock0}
缩进=线条。贴图do |线条|
match=line.match(/^(\s+[^\s]+/)
比赛?匹配[1]。大小:0
结束
缩进=缩进.min
内容=缩进?super.gsub(/^#{'|\t'*indentation}/,''):super
内容=转换器。转换(内容)
content=content.strip#再次剥离以避免“\n”
“”+内容+“”
结束
结束

这太棒了。对于任何遇到此问题的人:

更改:

find_converter_instance

find_converter_instance