= Register Extensions == Register one or more extensions These extensions are registered per document using a callback that feels like a DSL: [,ruby] ---- 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 ---- CAUTION: Extension classes must be defined outside of the register block. Once an extension class is registered, it is frozen, preventing further modification. If you define an extension class inside the register block, it will result in an error on subsequent invocations. You can register more than one processor of each type, though you can only have one processor per custom block or macro. Each registered class is instantiated when the [.class]#Asciidoctor::Document# is created.