class Asciidoctor::Extensions::Registry
Public: The primary entry point into the extension system.
Registry
holds the extensions which have been registered and activated, has methods for registering or defining a processor and looks up extensions stored in the registry during parsing.
Attributes
Public: Returns the {Asciidoctor::Document} on which the extensions in this registry are being used.
Public: Returns the Hash
of {Group} classes, instances, and/or Procs that have been registered with this registry.
Public Class Methods
# File lib/asciidoctor/extensions.rb, line 722 def initialize groups = {} @groups = groups reset @preprocessor_extensions = @tree_processor_extensions = @postprocessor_extensions = @include_processor_extensions = @docinfo_processor_extensions = @block_extensions = @block_macro_extensions = @inline_macro_extensions = nil @document = nil end
Public Instance Methods
Public: Activates all the global extension {Group}s and the extension {Group}s associated with this registry.
document - the {Asciidoctor::Document} on which the extensions are to be used.
Returns the instance of this [Registry].
# File lib/asciidoctor/extensions.rb, line 735 def activate document reset if @document @document = document unless (ext_groups = Extensions.groups.values + @groups.values).empty? ext_groups.each do |group| case group when ::Proc case group.arity when 0, -1 instance_exec(&group) when 1 group.call self end when ::Class group.new.activate self else group.activate self end end end self end
Public: Registers a {BlockProcessor} with the extension registry to process the block content (i.e., delimited block or paragraph) in the AsciiDoc source annotated with the specified block name (i.e., style).
The BlockProcessor
may be one of four types:
-
A
BlockProcessor
subclass -
An instance of a
BlockProcessor
subclass -
The
String
name of aBlockProcessor
subclass -
A method block (i.e., Proc) that conforms to the
BlockProcessor
contract
Unless the BlockProcessor
is passed as the method block, it must be the first argument to this method. The second argument is the name (coersed to a Symbol) of the AsciiDoc block content (i.e., delimited block or paragraph) that this processor is registered to handle. If a block name is not passed as an argument, it gets read from the name property of the BlockProcessor
instance. If a name still cannot be determined, an error is raised.
Examples
# as a BlockProcessor subclass block ShoutBlock # as a BlockProcessor subclass with an explicit block name block ShoutBlock, :shout # as an instance of a BlockProcessor subclass block ShoutBlock.new # as an instance of a BlockProcessor subclass with an explicit block name block ShoutBlock.new, :shout # as a name of a BlockProcessor subclass block 'ShoutBlock' # as a name of a BlockProcessor subclass with an explicit block name block 'ShoutBlock', :shout # as a method block block do named :shout process do |parent, reader, attrs| ... end end # as a method block with an explicit block name block :shout do process do |parent, reader, attrs| ... end end
Returns an instance of the [Extension] proxy object that is stored in the registry and manages the instance of this BlockProcessor
.
# File lib/asciidoctor/extensions.rb, line 1098 def block *args, &block add_syntax_processor :block, args, &block end
Public: Registers a {BlockMacroProcessor} with the extension registry to process a block macro with the specified name.
The BlockMacroProcessor
may be one of four types:
-
A
BlockMacroProcessor
subclass -
An instance of a
BlockMacroProcessor
subclass -
The
String
name of aBlockMacroProcessor
subclass -
A method block (i.e., Proc) that conforms to the
BlockMacroProcessor
contract
Unless the BlockMacroProcessor
is passed as the method block, it must be the first argument to this method. The second argument is the name (coersed to a Symbol) of the AsciiDoc block macro that this processor is registered to handle. If a block macro name is not passed as an argument, it gets read from the name property of the BlockMacroProcessor
instance. If a name still cannot be determined, an error is raised.
Examples
# as a BlockMacroProcessor subclass block_macro GistBlockMacro # as a BlockMacroProcessor subclass with an explicit macro name block_macro GistBlockMacro, :gist # as an instance of a BlockMacroProcessor subclass block_macro GistBlockMacro.new # as an instance of a BlockMacroProcessor subclass with an explicit macro name block_macro GistBlockMacro.new, :gist # as a name of a BlockMacroProcessor subclass block_macro 'GistBlockMacro' # as a name of a BlockMacroProcessor subclass with an explicit macro name block_macro 'GistBlockMacro', :gist # as a method block block_macro do named :gist process do |parent, target, attrs| ... end end # as a method block with an explicit macro name block_macro :gist do process do |parent, target, attrs| ... end end
Returns an instance of the [Extension] proxy object that is stored in the registry and manages the instance of this BlockMacroProcessor
.
# File lib/asciidoctor/extensions.rb, line 1187 def block_macro *args, &block add_syntax_processor :block_macro, args, &block end
Public: Checks whether any {BlockMacroProcessor} extensions have been registered.
Returns a [Boolean] indicating whether any BlockMacroProcessor
extensions are registered.
# File lib/asciidoctor/extensions.rb, line 1194 def block_macros? !!@block_macro_extensions end
Public: Checks whether any {BlockProcessor} extensions have been registered.
Returns a [Boolean] indicating whether any BlockProcessor
extensions are registered.
# File lib/asciidoctor/extensions.rb, line 1105 def blocks? !!@block_extensions end
Public: Registers an {DocinfoProcessor} with the extension registry to add additional docinfo to the document.
The DocinfoProcessor
may be one of four types:
-
A
DocinfoProcessor
subclass -
An instance of a
DocinfoProcessor
subclass -
The
String
name of aDocinfoProcessor
subclass -
A method block (i.e., Proc) that conforms to the
DocinfoProcessor
contract
Unless the DocinfoProcessor
is passed as the method block, it must be the first argument to this method.
Examples
# as an DocinfoProcessor subclass docinfo_processor MetaRobotsDocinfoProcessor # as an instance of a DocinfoProcessor subclass with an explicit location docinfo_processor JQueryDocinfoProcessor.new, location: :footer # as a name of a DocinfoProcessor subclass docinfo_processor 'MetaRobotsDocinfoProcessor' # as a method block docinfo_processor do process do |doc| at_location :footer 'footer content' end end
Returns the [Extension] stored in the registry that proxies the instance of this DocinfoProcessor
.
# File lib/asciidoctor/extensions.rb, line 1005 def docinfo_processor *args, &block add_document_processor :docinfo_processor, args, &block end
Public: Retrieves the {Extension} proxy objects for all the DocinfoProcessor
instances stored in this registry.
location - A Symbol for selecting docinfo extensions at a given location (:head or :footer) (default: nil)
Returns an [Array] of Extension
proxy objects.
# File lib/asciidoctor/extensions.rb, line 1032 def docinfo_processors location = nil if @docinfo_processor_extensions if location @docinfo_processor_extensions.select {|ext| ext.config[:location] == location } else @docinfo_processor_extensions end end end
Public: Checks whether any {DocinfoProcessor} extensions have been registered.
location - A Symbol for selecting docinfo extensions at a given location (:head or :footer) (default: nil)
Returns a [Boolean] indicating whether any DocinfoProcessor
extensions are registered.
# File lib/asciidoctor/extensions.rb, line 1014 def docinfo_processors? location = nil if @docinfo_processor_extensions if location @docinfo_processor_extensions.any? {|ext| ext.config[:location] == location } else true end else false end end
Public: Retrieves the {Extension} proxy object for the BlockProcessor
registered to handle block content with the name.
name - the String
or Symbol (coersed to a Symbol) macro name
Returns the [Extension] object stored in the registry that proxies the corresponding BlockProcessor
or nil if a match is not found.
# File lib/asciidoctor/extensions.rb, line 1129 def find_block_extension name @block_extensions[name.to_sym] end
Public: Retrieves the {Extension} proxy object for the BlockMacroProcessor
registered to handle a block macro with the specified name.
name - the String
or Symbol (coersed to a Symbol) macro name
Returns the [Extension] object stored in the registry that proxies the corresponding BlockMacroProcessor
or nil if a match is not found.
# File lib/asciidoctor/extensions.rb, line 1218 def find_block_macro_extension name @block_macro_extensions[name.to_sym] end
Public: Retrieves the {Extension} proxy object for the InlineMacroProcessor
registered to handle an inline macro with the specified name.
name - the String
or Symbol (coersed to a Symbol) macro name
Returns the [Extension] object stored in the registry that proxies the corresponding InlineMacroProcessor
or nil if a match is not found.
# File lib/asciidoctor/extensions.rb, line 1305 def find_inline_macro_extension name @inline_macro_extensions[name.to_sym] end
Public: Registers an {IncludeProcessor} with the extension registry to have a shot at handling the include directive.
The IncludeProcessor
may be one of four types:
-
A
IncludeProcessor
subclass -
An instance of a
IncludeProcessor
subclass -
The
String
name of aIncludeProcessor
subclass -
A method block (i.e., Proc) that conforms to the
IncludeProcessor
contract
Unless the IncludeProcessor
is passed as the method block, it must be the first argument to this method.
Examples
# as an IncludeProcessor subclass include_processor GitIncludeProcessor # as an instance of a Postprocessor subclass include_processor GitIncludeProcessor.new # as a name of a Postprocessor subclass include_processor 'GitIncludeProcessor' # as a method block include_processor do process do |document, output| ... end end
Returns the [Extension] stored in the registry that proxies the instance of this IncludeProcessor
.
# File lib/asciidoctor/extensions.rb, line 952 def include_processor *args, &block add_document_processor :include_processor, args, &block end
Public: Retrieves the {Extension} proxy objects for all the IncludeProcessor
instances stored in this registry.
Returns an [Array] of Extension
proxy objects.
# File lib/asciidoctor/extensions.rb, line 967 def include_processors @include_processor_extensions end
Public: Checks whether any {IncludeProcessor} extensions have been registered.
Returns a [Boolean] indicating whether any IncludeProcessor
extensions are registered.
# File lib/asciidoctor/extensions.rb, line 959 def include_processors? !!@include_processor_extensions end
Public: Registers a {InlineMacroProcessor} with the extension registry to process an inline macro with the specified name.
The InlineMacroProcessor
may be one of four types:
-
An
InlineMacroProcessor
subclass -
An instance of an
InlineMacroProcessor
subclass -
The
String
name of anInlineMacroProcessor
subclass -
A method block (i.e., Proc) that conforms to the
InlineMacroProcessor
contract
Unless the InlineMacroProcessor
is passed as the method block, it must be the first argument to this method. The second argument is the name (coersed to a Symbol) of the AsciiDoc block macro that this processor is registered to handle. If a block macro name is not passed as an argument, it gets read from the name property of the InlineMacroProcessor
instance. If a name still cannot be determined, an error is raised.
Examples
# as an InlineMacroProcessor subclass inline_macro ChromeInlineMacro # as an InlineMacroProcessor subclass with an explicit macro name inline_macro ChromeInlineMacro, :chrome # as an instance of an InlineMacroProcessor subclass inline_macro ChromeInlineMacro.new # as an instance of an InlineMacroProcessor subclass with an explicit macro name inline_macro ChromeInlineMacro.new, :chrome # as a name of an InlineMacroProcessor subclass inline_macro 'ChromeInlineMacro' # as a name of an InlineMacroProcessor subclass with an explicit macro name inline_macro 'ChromeInlineMacro', :chrome # as a method block inline_macro do named :chrome process do |parent, target, attrs| ... end end # as a method block with an explicit macro name inline_macro :chrome do process do |parent, target, attrs| ... end end
Returns an instance of the [Extension] proxy object that is stored in the registry and manages the instance of this InlineMacroProcessor
.
# File lib/asciidoctor/extensions.rb, line 1276 def inline_macro *args, &block add_syntax_processor :inline_macro, args, &block end
Public: Retrieves the {Extension} proxy objects for all InlineMacroProcessor
instances in this registry.
Returns an [Array] of Extension
proxy objects.
# File lib/asciidoctor/extensions.rb, line 1313 def inline_macros @inline_macro_extensions.values end
Public: Checks whether any {InlineMacroProcessor} extensions have been registered.
Returns a [Boolean] indicating whether any IncludeMacroProcessor extensions are registered.
# File lib/asciidoctor/extensions.rb, line 1283 def inline_macros? !!@inline_macro_extensions end
Public: Registers a {Postprocessor} with the extension registry to process the output after conversion is complete.
The Postprocessor
may be one of four types:
-
A
Postprocessor
subclass -
An instance of a
Postprocessor
subclass -
The
String
name of aPostprocessor
subclass -
A method block (i.e., Proc) that conforms to the
Postprocessor
contract
Unless the Postprocessor
is passed as the method block, it must be the first argument to this method.
Examples
# as a Postprocessor subclass postprocessor AnalyticsPostprocessor # as an instance of a Postprocessor subclass postprocessor AnalyticsPostprocessor.new # as a name of a Postprocessor subclass postprocessor 'AnalyticsPostprocessor' # as a method block postprocessor do process do |document, output| ... end end
Returns the [Extension] stored in the registry that proxies the instance of this Postprocessor
.
# File lib/asciidoctor/extensions.rb, line 900 def postprocessor *args, &block add_document_processor :postprocessor, args, &block end
Public: Retrieves the {Extension} proxy objects for all Postprocessor
instances in this registry.
Returns an [Array] of Extension
proxy objects.
# File lib/asciidoctor/extensions.rb, line 915 def postprocessors @postprocessor_extensions end
Public: Checks whether any {Postprocessor} extensions have been registered.
Returns a [Boolean] indicating whether any Postprocessor
extensions are registered.
# File lib/asciidoctor/extensions.rb, line 907 def postprocessors? !!@postprocessor_extensions end
Public: Inserts the document processor {Extension} instance as the first processor of its kind in the extension registry.
Examples
prefer :include_processor do process do |document, reader, target, attrs| ... end end
Returns the [Extension] stored in the registry that proxies the instance of this processor.
# File lib/asciidoctor/extensions.rb, line 1330 def prefer *args, &block extension = ProcessorExtension === (arg0 = args.shift) ? arg0 : (send arg0, *args, &block) extensions_store = instance_variable_get(%(@#{extension.kind}_extensions).to_sym) extensions_store.unshift extensions_store.delete extension extension end
Public: Registers a {Preprocessor} with the extension registry to process the AsciiDoc source before parsing begins.
The Preprocessor
may be one of four types:
-
A
Preprocessor
subclass -
An instance of a
Preprocessor
subclass -
The
String
name of aPreprocessor
subclass -
A method block (i.e., Proc) that conforms to the
Preprocessor
contract
Unless the Preprocessor
is passed as the method block, it must be the first argument to this method.
Examples
# as a Preprocessor subclass preprocessor FrontMatterPreprocessor # as an instance of a Preprocessor subclass preprocessor FrontMatterPreprocessor.new # as a name of a Preprocessor subclass preprocessor 'FrontMatterPreprocessor' # as a method block preprocessor do process do |doc, reader| ... end end
Returns the [Extension] stored in the registry that proxies the instance of this Preprocessor
.
# File lib/asciidoctor/extensions.rb, line 791 def preprocessor *args, &block add_document_processor :preprocessor, args, &block end
Public: Retrieves the {Extension} proxy objects for all Preprocessor
instances in this registry.
Returns an [Array] of Extension
proxy objects.
# File lib/asciidoctor/extensions.rb, line 806 def preprocessors @preprocessor_extensions end
Public: Checks whether any {Preprocessor} extensions have been registered.
Returns a [Boolean] indicating whether any Preprocessor
extensions are registered.
# File lib/asciidoctor/extensions.rb, line 798 def preprocessors? !!@preprocessor_extensions end
Public: Checks whether any {BlockProcessor} extensions are registered to handle the specified block name appearing on the specified context.
Returns the [Extension] proxy object for the BlockProcessor
that matches the block name and context or false if no match is found.
# File lib/asciidoctor/extensions.rb, line 1114 def registered_for_block? name, context if (ext = @block_extensions[name.to_sym]) (ext.config[:contexts].include? context) ? ext : false else false end end
Public: Checks whether any {BlockMacroProcessor} extensions are registered to handle the block macro with the specified name.
name - the String
or Symbol (coersed to a Symbol) macro name
Returns the [Extension] proxy object for the BlockMacroProcessor
that matches the macro name or false if no match is found.
# File lib/asciidoctor/extensions.rb, line 1207 def registered_for_block_macro? name (ext = @block_macro_extensions[name.to_sym]) ? ext : false end
Public: Checks whether any {InlineMacroProcessor} extensions are registered to handle the inline macro with the specified name.
name - the String
or Symbol (coersed to a Symbol) macro name
Returns the [Extension] proxy object for the InlineMacroProcessor
that matches the macro name or false if no match is found.
# File lib/asciidoctor/extensions.rb, line 1294 def registered_for_inline_macro? name (ext = @inline_macro_extensions[name.to_sym]) ? ext : false end
Public: Registers a {TreeProcessor} with the extension registry to process the AsciiDoc source after parsing is complete.
The TreeProcessor
may be one of four types:
-
A
TreeProcessor
subclass -
An instance of a
TreeProcessor
subclass -
The
String
name of aTreeProcessor
subclass -
A method block (i.e., Proc) that conforms to the
TreeProcessor
contract
Unless the TreeProcessor
is passed as the method block, it must be the first argument to this method.
Examples
# as a TreeProcessor subclass tree_processor ShellTreeProcessor # as an instance of a TreeProcessor subclass tree_processor ShellTreeProcessor.new # as a name of a TreeProcessor subclass tree_processor 'ShellTreeProcessor' # as a method block tree_processor do process do |document| ... end end
Returns the [Extension] stored in the registry that proxies the instance of this TreeProcessor
.
# File lib/asciidoctor/extensions.rb, line 843 def tree_processor *args, &block add_document_processor :tree_processor, args, &block end
Public: Retrieves the {Extension} proxy objects for all TreeProcessor
instances in this registry.
Returns an [Array] of Extension
proxy objects.
# File lib/asciidoctor/extensions.rb, line 858 def tree_processors @tree_processor_extensions end
Public: Checks whether any {TreeProcessor} extensions have been registered.
Returns a [Boolean] indicating whether any TreeProcessor
extensions are registered.
# File lib/asciidoctor/extensions.rb, line 850 def tree_processors? !!@tree_processor_extensions end
Alias deprecated methods for backwards compatibility