class Asciidoctor::Extensions::Registry

Attributes

block_macros[RW]
blocks[RW]
include_processors[RW]
inline_macros[RW]
postprocessors[RW]
preprocessors[RW]
treeprocessors[RW]

Public Class Methods

new(document = nil) click to toggle source
# File lib/asciidoctor/extensions.rb, line 65
def initialize document = nil
  @preprocessors = []
  @treeprocessors = []
  @postprocessors = []
  @include_processors = []
  @include_processor_cache = {}
  @block_delimiters = {}
  @blocks = {}
  @block_processor_cache = {}
  @block_macros = {}
  @block_macro_processor_cache = {}
  @inline_macros = {}
  @inline_macro_processor_cache = {}

  Extensions.registered.each do |extension|
    if extension.is_a? Proc
      register document, &extension
    else
      extension.activate self, document
    end
  end
end

Public Instance Methods

at_block_delimiter?(line) click to toggle source

NOTE block delimiters not yet implemented

# File lib/asciidoctor/extensions.rb, line 196
def at_block_delimiter? line
  @block_delimiters.each do |delimiter, name|
    if delimiter.is_a? Proc
      if delimiter.call(line)
        return name
      end
    else
      if line.match(delimiter)
        return name
      end
    end
  end
  false
end
block(name, processor, delimiter = nil, &block) click to toggle source

TODO allow contexts to be specified here, perhaps as [:upper, [:paragraph, :sidebar]]

# File lib/asciidoctor/extensions.rb, line 177
def block name, processor, delimiter = nil, &block
  processor = resolve_processor_class processor
  @blocks[name] = processor
  if block_given?
    @block_delimiters[block] = name
  elsif delimiter && delimiter.is_a?(Regexp)
    @block_delimiters[delimiter] = name
  end
end
block_delimiters?() click to toggle source
# File lib/asciidoctor/extensions.rb, line 191
def block_delimiters?
  !@block_delimiters.empty?
end
block_macro(name, processor) click to toggle source
# File lib/asciidoctor/extensions.rb, line 223
def block_macro name, processor
  processor = resolve_processor_class processor
  @block_macros[name.to_s] = processor
end
block_macros?() click to toggle source
# File lib/asciidoctor/extensions.rb, line 228
def block_macros?
  !@block_macros.empty?
end
blocks?() click to toggle source
# File lib/asciidoctor/extensions.rb, line 187
def blocks?
  !@blocks.empty?
end
include_processor(processor, position = :<<) click to toggle source
# File lib/asciidoctor/extensions.rb, line 151
def include_processor processor, position = :<<
  processor = resolve_processor_class processor
  if position == :<< || @include_processors.empty?
    @include_processors.push processor
  elsif position == :>>
    @include_processors.unshift processor
  else
    @include_processors.push processor
  end
end
include_processors?() click to toggle source
# File lib/asciidoctor/extensions.rb, line 162
def include_processors?
  !@include_processors.empty?
end
inline_macro(name, processor) click to toggle source

TODO probably need ordering control before/after other inline macros

# File lib/asciidoctor/extensions.rb, line 241
def inline_macro name, processor
  processor = resolve_processor_class processor
  @inline_macros[name.to_s] = processor
end
inline_macros?() click to toggle source
# File lib/asciidoctor/extensions.rb, line 246
def inline_macros?
  !@inline_macros.empty?
end
load_block_macro_processor(name, *args) click to toggle source
# File lib/asciidoctor/extensions.rb, line 232
def load_block_macro_processor name, *args
  @block_macro_processor_cache[name] ||= @block_macros[name].new(name, *args)
end
load_block_processor(name, *args) click to toggle source
# File lib/asciidoctor/extensions.rb, line 211
def load_block_processor name, *args
  @block_processor_cache[name] ||= @blocks[name].new(name.to_sym, *args)
end
load_include_processors(*args) click to toggle source
# File lib/asciidoctor/extensions.rb, line 166
def load_include_processors *args
  @include_processors.map do |processor|
    processor.new(*args)
  end
  # QUESTION do we need/want the cache?
  #@include_processors.map do |processor|
  #  @include_processor_cache[processor] ||= processor.new(*args)
  #end
end
load_inline_macro_processor(name, *args) click to toggle source
# File lib/asciidoctor/extensions.rb, line 250
def load_inline_macro_processor name, *args
  @inline_macro_processor_cache[name] ||= @inline_macros[name].new(name, *args)
end
load_inline_macro_processors(*args) click to toggle source
# File lib/asciidoctor/extensions.rb, line 254
def load_inline_macro_processors *args
  @inline_macros.map do |name, processor|
    load_inline_macro_processor name, *args
  end
end
load_postprocessors(*args) click to toggle source
# File lib/asciidoctor/extensions.rb, line 145
def load_postprocessors *args
  @postprocessors.map do |processor|
    processor.new(*args)
  end
end
load_preprocessors(*args) click to toggle source
# File lib/asciidoctor/extensions.rb, line 103
def load_preprocessors *args
  @preprocessors.map do |processor|
    processor.new(*args)
  end
end
load_treeprocessors(*args) click to toggle source
# File lib/asciidoctor/extensions.rb, line 124
def load_treeprocessors *args
  @treeprocessors.map do |processor|
    processor.new(*args)
  end
end
postprocessor(processor, position = :<<) click to toggle source
# File lib/asciidoctor/extensions.rb, line 130
def postprocessor processor, position = :<<
  processor = resolve_processor_class processor
  if position == :<< || @postprocessors.empty?
    @postprocessors.push processor
  elsif position == :>>
    @postprocessors.unshift processor
  else
    @postprocessors.push processor
  end
end
postprocessors?() click to toggle source
# File lib/asciidoctor/extensions.rb, line 141
def postprocessors?
  !@postprocessors.empty?
end
preprocessor(processor, position = :<<) click to toggle source
# File lib/asciidoctor/extensions.rb, line 88
def preprocessor processor, position = :<<
  processor = resolve_processor_class processor
  if position == :<< || @preprocessors.empty?
    @preprocessors.push processor
  elsif position == :>>
    @preprocessors.unshift processor
  else
    @preprocessors.push processor
  end
end
preprocessors?() click to toggle source
# File lib/asciidoctor/extensions.rb, line 99
def preprocessors?
  !@preprocessors.empty?
end
processor_registered_for_block?(name, context) click to toggle source
# File lib/asciidoctor/extensions.rb, line 215
def processor_registered_for_block? name, context
  if @blocks.has_key? name.to_sym
    (@blocks[name.to_sym].config.fetch(:contexts, nil) || []).include?(context)
  else
    false
  end
end
processor_registered_for_block_macro?(name) click to toggle source
# File lib/asciidoctor/extensions.rb, line 236
def processor_registered_for_block_macro? name
  @block_macros.has_key? name
end
processor_registered_for_inline_macro?(name) click to toggle source
# File lib/asciidoctor/extensions.rb, line 260
def processor_registered_for_inline_macro? name
  @inline_macros.has_key? name
end
register(document, &block) click to toggle source
# File lib/asciidoctor/extensions.rb, line 264
def register document, &block
  instance_exec document, &block
end
reset() click to toggle source
# File lib/asciidoctor/extensions.rb, line 272
def reset
  @block_processor_cache = {}
  @block_macro_processor_cache = {}
  @inline_macro_processor_cache = {}
end
resolve_processor_class(object) click to toggle source
# File lib/asciidoctor/extensions.rb, line 268
def resolve_processor_class object
  ::Asciidoctor::Extensions.resolve_class object
end
treeprocessor(processor, position = :<<) click to toggle source
# File lib/asciidoctor/extensions.rb, line 109
def treeprocessor processor, position = :<<
  processor = resolve_processor_class processor
  if position == :<< || @treeprocessors.empty?
    @treeprocessors.push processor
  elsif position == :>>
    @treeprocessors.unshift processor
  else
    @treeprocessors.push processor
  end
end
treeprocessors?() click to toggle source
# File lib/asciidoctor/extensions.rb, line 120
def treeprocessors?
  !@treeprocessors.empty?
end