anchor.diff:  = Asciidoctor Groovy DSL
   Robert Panzer <https://github.com/robertpanzer[@bobbytank42]>
  -:released-version: 1.5.5
  +:released-version: 1.6.0
  +:asciidoctorj-version: 2.2.0
   :asciidoc-url: http://asciidoc.org
   :asciidoctor-url: https://asciidoctor.org
   :groovy-url: https://www.groovy-lang.org/
  
positive.code: Hello World
  ''', [:]) // <3>
  ----
  <1> Grab the module from jCenter. This fetches AsciidoctorJ transitively as well.
  <2> Register as block extension.
  Here, it is defined inline but extensions can also be passed as files or string values.
  <3> Invoke AsciidoctorJ to convert the passed string to HTML in the console.
  
negative.code: For every Processor class in {asciidoctorj}[AsciidoctorJ] there is a function offered by the DSL to simply define such an extension.
  The following sections show examples for each kind of extension.
  Basically every extension is defined by calling the correct function for the extension type, passing options and a closure that holds the extension logic.
  
  Under the hood, every closure has an instance of the respective Processor class as its delegate.
  That means that all methods provided by `org.asciidoctor.extensions.Processor` and its subclasses are directly available.
  
  === BlockProcessor
  