Register Extensions

Register one or more extensions

These extensions are registered per document using a callback that feels like a 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

Each registered class is instantiated when the Asciidoctor::Document is created. Alternately, you can pass an instance of the class when registering the extension.

Extension classes must be defined outside of the register block. If you define an extension class inside the register block, it will result in an error on subsequent invocations.
Once an extension class is registered, it is frozen, preventing further modification.
If you need to store state on a class-based extension instance, assign a new Hash to an instance variable named @state in the constructor, then assign data to the keys of that Hash. If you need other extensions to be able to access that state, define a reader for that instance variable (i.e., attr_reader :state).

You can register more than one processor of each type, though you can only have one processor per custom block or macro.