class Asciidoctor::Extensions::BlockProcessor

BlockProcessor implementations must extend BlockProcessor.
* …
* :default_attrs - A hash of attribute names and values used to seed the attributes hash (default: nil)
* :positional_attrs - A list of attribute names used to map positional attributes (default: nil)
* :content_model - The structure of the content supported in this block (default: :compound)
* :contexts - The blocks contexts on which this style can be used (default: [:paragraph, :open]
* :named - The name of the block (required: true)
Recognized options:
Get a move on.
[shout]

AsciiDoc example:
method to build a corresponding node in the document tree.
registered to handle this name and, if found, invokes its {Processor#process}
unrecognized name while parsing the document, it looks for a BlockProcessor
When Asciidoctor encounters a delimited block or paragraph with an
that have a custom name.
Public: BlockProcessors are used to handle delimited blocks and paragraphs

def initialize name = nil, config = {}

def initialize name = nil, config = {}
  super config
  @name = name || @config[:name]
  # assign fallbacks
  case @config[:contexts]
  when ::NilClass
    @config[:contexts] ||= [:open, :paragraph].to_set
  when ::Symbol
    @config[:contexts] = [@config[:contexts]].to_set
  else
    @config[:contexts] = @config[:contexts].to_set
  end
  # QUESTION should the default content model be raw??
  @config[:content_model] ||= :compound
end

def process parent, reader, attributes

def process parent, reader, attributes
  raise ::NotImplementedError, %(#{BlockProcessor} subclass #{self.class} must implement the ##{__method__} method)
end