# 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
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
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
# File lib/asciidoctor/extensions.rb, line 191 def block_delimiters? !@block_delimiters.empty? end
# File lib/asciidoctor/extensions.rb, line 223 def block_macro name, processor processor = resolve_processor_class processor @block_macros[name.to_s] = processor end
# File lib/asciidoctor/extensions.rb, line 228 def block_macros? !@block_macros.empty? end
# File lib/asciidoctor/extensions.rb, line 187 def blocks? !@blocks.empty? end
# 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
# File lib/asciidoctor/extensions.rb, line 162 def include_processors? !@include_processors.empty? end
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
# File lib/asciidoctor/extensions.rb, line 246 def inline_macros? !@inline_macros.empty? end
# 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
# 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
# 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
# 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
# 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
# File lib/asciidoctor/extensions.rb, line 145 def load_postprocessors *args @postprocessors.map do |processor| processor.new(*args) end end
# File lib/asciidoctor/extensions.rb, line 103 def load_preprocessors *args @preprocessors.map do |processor| processor.new(*args) end end
# File lib/asciidoctor/extensions.rb, line 124 def load_treeprocessors *args @treeprocessors.map do |processor| processor.new(*args) end end
# 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
# File lib/asciidoctor/extensions.rb, line 141 def postprocessors? !@postprocessors.empty? end
# 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
# File lib/asciidoctor/extensions.rb, line 99 def preprocessors? !@preprocessors.empty? end
# 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
# File lib/asciidoctor/extensions.rb, line 236 def processor_registered_for_block_macro? name @block_macros.has_key? name end
# File lib/asciidoctor/extensions.rb, line 260 def processor_registered_for_inline_macro? name @inline_macros.has_key? name end
# File lib/asciidoctor/extensions.rb, line 264 def register document, &block instance_exec document, &block end
# File lib/asciidoctor/extensions.rb, line 272 def reset @block_processor_cache = {} @block_macro_processor_cache = {} @inline_macro_processor_cache = {} end
# File lib/asciidoctor/extensions.rb, line 268 def resolve_processor_class object ::Asciidoctor::Extensions.resolve_class object end
# 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
# File lib/asciidoctor/extensions.rb, line 120 def treeprocessors? !@treeprocessors.empty? end