复合块处理器示例
- 目的
-
注册一个名为
collapsible的自定义块,它将一个列表块转换为一个复合块,该复合块由以下部分组成:-
一个已启用
collapsible选项的示例块 -
原始列表块
-
如果使用第二个位置属性指定了语言,则列表块将被提升为源块。
-
示例 1. sample-with-collapsible-block.adoc
.Show JSON
[collapsible,json]
----
{
"foo": "bar"
}
----
示例 2. collapsible-block.rb
class CollapsibleBlock < Asciidoctor::Extensions::BlockProcessor
enable_dsl
on_context :listing
positional_attributes 'language'
def process parent, reader, attrs
lang = attrs.delete 'language'
attrs['title'] ||= 'Show Listing'
example = create_example_block parent, [], attrs, content_model: :compound
example.set_option 'collapsible'
listing = create_listing_block example, reader.readlines, nil
if lang
listing.style = 'source'
listing.set_attr 'language', lang
listing.commit_subs
end
example << listing
example
end
end
Asciidoctor::Extensions.register do
block CollapsibleBlock, :collapsible
end
用法
$ asciidoctor -r ./collapsible-block.rb sample-with-collapsible-block.adoc
此扩展程序模仿了示例块上内置的 collapsible 选项,但将其合并到一个块中。此扩展程序的目的是展示如何在扩展程序中组装复合块。 |