Class: Asciidoctor::Extensions::BlockProcessor

Inherits:
Processor
  • Object
show all
Defined in:
lib/asciidoctor/extensions.rb

Overview

BlockProcessors are used to handle delimited blocks and paragraphs that have a custom name.

When Asciidoctor encounters a delimited block or paragraph with an unrecognized name while parsing the document, it looks for a BlockProcessor registered to handle this name and, if found, invokes its Processor#process method to build a corresponding node in the document tree.

AsciiDoc example:

[shout]
Get a move on.

Recognized options:

  • :named - The name of the block (required: true)

  • :contexts - The blocks contexts on which this style can be used (default: [:paragraph, :open]

  • :content_model - The structure of the content supported in this block (default: :compound)

  • :positional_attrs - A list of attribute names used to map positional attributes (default: nil)

  • :default_attrs - A hash of attribute names and values used to seed the attributes hash (default: nil)

BlockProcessor implementations must extend BlockProcessor.

Constant Summary collapse

DSL =
BlockProcessorDsl

Instance Attribute Summary collapse

Attributes inherited from Processor

#config

Instance Method Summary collapse

Methods inherited from Processor

config, #create_block, #create_image_block, #create_inline, #create_list, #create_list_item, #create_section, enable_dsl, option, #parse_attributes, #parse_content, #update_config

Constructor Details

#initialize(name = nil, config = {}) ⇒ BlockProcessor

Returns a new instance of BlockProcessor.



532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
# File 'lib/asciidoctor/extensions.rb', line 532

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

Instance Attribute Details

#nameObject



530
531
532
# File 'lib/asciidoctor/extensions.rb', line 530

def name
  @name
end

Instance Method Details

#process(parent, reader, attributes) ⇒ Object

Raises:

  • (::NotImplementedError)


548
549
550
# File 'lib/asciidoctor/extensions.rb', line 548

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