注册扩展

注册一个或多个扩展

这些扩展使用类似 DSL 的回调函数,为每个文档进行注册

Asciidoctor::Extensions.register do
  preprocessor FrontMatterPreprocessor
  tree_processor ShellSessionTreeProcessor
  postprocessor CopyrightFooterPostprocessor
  docinfo_processor TrackingCodeDocinfoProcessor if @document.basebackend? 'html'
  block ShoutBlock
  block_macro GistBlockMacro if @document.basebackend? 'html'
  inline_macro ManInlineMacro
  include_processor UriIncludeProcessor
end

每个注册的类在创建 Asciidoctor::Document 时会被实例化。或者,您可以在注册扩展时传递类的实例。

扩展类必须定义在注册块的外部。如果在注册块内部定义扩展类,将在后续调用时导致错误。
一旦扩展类被注册,它将被冻结,防止进一步修改。
如果您需要在基于类的扩展实例上存储状态,请在构造函数中将一个新的 Hash 赋值给名为 @state 的实例变量,然后将数据赋值给该 Hash 的键。如果您需要其他扩展能够访问该状态,请为该实例变量定义一个读取器(例如,attr_reader :state)。

您可以为每种类型的处理器注册多个,但每个自定义块或宏只能有一个处理器。