anchor.diff:  Hello World
   ''', [:]) // <3>
   ----
  -<1> Grab the module from jCenter. This fetches AsciidoctorJ transitively as well.
  +<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.
  
positive.code: 
  [source,groovy]
  ----
  AsciidoctorExtensions.extensions(new File('bigblockextension.groovy'))
  Asciidoctor.Factory.create().convertFile('mydocument.ad', [:])
  ----
  
  Both examples will convert the following document as shown below:
  
  [source,asciidoc]
  ----
  
negative.code: 
  == Usage
  
  To use the DSL you have to add a dependency on `org.asciidoctor:asciidoctorj-groovy-dsl:{released-version}` from jCenter.
  
  The integration into a {gradle-url}[Gradle] project is straightforward.
  To use AsciidoctorJ you also add the JCenter repository and add the respective dependency.
  
  [source,groovy,subs="attributes+"]
  ----
  repositories {
      jcenter()
  }
  
  dependencies {
      compile 'org.asciidoctor:asciidoctorj:{asciidoctorj-version}'
      compile 'org.asciidoctor:asciidoctorj-groovy-dsl:{released-version}'
  }
  ----
  
  Extensions can be defined inline in a groovy closure, and also in a separate file or string value.
  All extensions must be configured at the class `org.asciidoctor.groovydsl.AsciidoctorExtensions`, and always be registered *before* creating the `Asciidoctor` instance.
  
  There are two ways to register extensions using AsciidoctorExtensions:
  
  . Creating an instance. +
  This is the recommended method since is thread-safe.
  Once an instance is created, extensions can be registered using the `addExtension` method passing a closure, file or string value.
  +
  [source,groovy]
  ----
  def extensions = new AsciidoctorExtensions()
  extensions.addExtension {
      block(name: 'BIG', contexts: [':paragraph']) {
          parent, reader, attributes ->
          def uppercaseLines = reader.readLines()
          .collect {it.toUpperCase()}
          .inject('') {a, b -> a + '\n' + b}
  
          createBlock(parent, 'paragraph', [uppercaseLines], attributes, [:])
      }
  }
  ----
  
  . Static registration.
  This method is offered for convenience and ease of use.
  The example below shows how to define an extension inline in a groovy script and render a file:
  +
  [source,groovy]
  ----
  AsciidoctorExtensions.extensions {
  