brandish 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rspec +3 -0
- data/.rubocop.yml +41 -0
- data/.travis.yml +5 -0
- data/.yardopts +1 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +10 -0
- data/LICENSE.txt +21 -0
- data/README.md +41 -0
- data/Rakefile +9 -0
- data/bin/brandish +16 -0
- data/brandish.gemspec +39 -0
- data/defaults/templates/html.liquid +39 -0
- data/lib/brandish.rb +51 -0
- data/lib/brandish/application.rb +163 -0
- data/lib/brandish/application/bench_command.rb +96 -0
- data/lib/brandish/application/build_command.rb +73 -0
- data/lib/brandish/application/initialize_command.rb +83 -0
- data/lib/brandish/application/serve_command.rb +150 -0
- data/lib/brandish/configure.rb +196 -0
- data/lib/brandish/configure/dsl.rb +135 -0
- data/lib/brandish/configure/dsl/form.rb +136 -0
- data/lib/brandish/configure/form.rb +32 -0
- data/lib/brandish/errors.rb +65 -0
- data/lib/brandish/execute.rb +26 -0
- data/lib/brandish/markup.rb +10 -0
- data/lib/brandish/markup/redcarpet.rb +14 -0
- data/lib/brandish/markup/redcarpet/format.rb +127 -0
- data/lib/brandish/markup/redcarpet/html.rb +95 -0
- data/lib/brandish/parser.rb +26 -0
- data/lib/brandish/parser/main.rb +237 -0
- data/lib/brandish/parser/node.rb +89 -0
- data/lib/brandish/parser/node/block.rb +98 -0
- data/lib/brandish/parser/node/command.rb +102 -0
- data/lib/brandish/parser/node/pair.rb +42 -0
- data/lib/brandish/parser/node/root.rb +83 -0
- data/lib/brandish/parser/node/string.rb +18 -0
- data/lib/brandish/parser/node/text.rb +114 -0
- data/lib/brandish/path_set.rb +163 -0
- data/lib/brandish/processor.rb +47 -0
- data/lib/brandish/processor/base.rb +144 -0
- data/lib/brandish/processor/block.rb +47 -0
- data/lib/brandish/processor/command.rb +47 -0
- data/lib/brandish/processor/context.rb +169 -0
- data/lib/brandish/processor/descend.rb +32 -0
- data/lib/brandish/processor/inline.rb +49 -0
- data/lib/brandish/processor/name_filter.rb +67 -0
- data/lib/brandish/processor/pair_filter.rb +96 -0
- data/lib/brandish/processors.rb +26 -0
- data/lib/brandish/processors/all.rb +19 -0
- data/lib/brandish/processors/all/comment.rb +29 -0
- data/lib/brandish/processors/all/embed.rb +56 -0
- data/lib/brandish/processors/all/if.rb +109 -0
- data/lib/brandish/processors/all/import.rb +95 -0
- data/lib/brandish/processors/all/literal.rb +42 -0
- data/lib/brandish/processors/all/verify.rb +47 -0
- data/lib/brandish/processors/common.rb +20 -0
- data/lib/brandish/processors/common/asset.rb +118 -0
- data/lib/brandish/processors/common/asset/paths.rb +93 -0
- data/lib/brandish/processors/common/group.rb +67 -0
- data/lib/brandish/processors/common/header.rb +86 -0
- data/lib/brandish/processors/common/markup.rb +127 -0
- data/lib/brandish/processors/common/output.rb +73 -0
- data/lib/brandish/processors/html.rb +18 -0
- data/lib/brandish/processors/html/group.rb +33 -0
- data/lib/brandish/processors/html/header.rb +46 -0
- data/lib/brandish/processors/html/markup.rb +131 -0
- data/lib/brandish/processors/html/output.rb +62 -0
- data/lib/brandish/processors/html/output/document.rb +127 -0
- data/lib/brandish/processors/html/script.rb +64 -0
- data/lib/brandish/processors/html/script/babel.rb +48 -0
- data/lib/brandish/processors/html/script/coffee.rb +47 -0
- data/lib/brandish/processors/html/script/vanilla.rb +45 -0
- data/lib/brandish/processors/html/style.rb +82 -0
- data/lib/brandish/processors/html/style/highlight.rb +89 -0
- data/lib/brandish/processors/html/style/sass.rb +64 -0
- data/lib/brandish/processors/html/style/vanilla.rb +71 -0
- data/lib/brandish/processors/latex.rb +15 -0
- data/lib/brandish/processors/latex/markup.rb +47 -0
- data/lib/brandish/scanner.rb +64 -0
- data/lib/brandish/version.rb +9 -0
- data/templates/initialize/Gemfile.tt +14 -0
- data/templates/initialize/brandish.config.rb.tt +49 -0
- metadata +296 -0
@@ -0,0 +1,169 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "forwardable"
|
5
|
+
|
6
|
+
module Brandish
|
7
|
+
module Processor
|
8
|
+
# The state associated with all of the processors. Since all processors
|
9
|
+
# are independant class instances, instance variables that are used in
|
10
|
+
# one processor does not affect another; however, shared state can be
|
11
|
+
# used through the context.
|
12
|
+
#
|
13
|
+
# The context also keeps track of the processors being used for the
|
14
|
+
# processor, and distributes the processing management throughout all of
|
15
|
+
# the processors.
|
16
|
+
class Context
|
17
|
+
# A "skip" construct. This makes the node be skipped through processing
|
18
|
+
# for the rest of the processors. This is automatically applied to all
|
19
|
+
# nodes that are {Parser::Node#update_prevented?}.
|
20
|
+
#
|
21
|
+
# Once the skip construct has been passed through the processing, it is
|
22
|
+
# automatically unwrapped, returning the original node.
|
23
|
+
Skip = Struct.new(:node)
|
24
|
+
|
25
|
+
extend Forwardable
|
26
|
+
# @!method <<(*processors)
|
27
|
+
# Adds processors to the processor list. This delegates to
|
28
|
+
# {#processors}.
|
29
|
+
#
|
30
|
+
# @return [<#call>]
|
31
|
+
# @!method push(*processors)
|
32
|
+
# Adds processors to the processor list. This delegates to
|
33
|
+
# {#processors}.
|
34
|
+
#
|
35
|
+
# @return [<#call>]
|
36
|
+
# @!method unshift(*processors)
|
37
|
+
# Adds a processor to the start of the processor list. This delegates
|
38
|
+
# to {#processors}.
|
39
|
+
#
|
40
|
+
# @return [<#call>]
|
41
|
+
delegate [:<<, :push, :unshift] => :@processors
|
42
|
+
|
43
|
+
# @!method [](key)
|
44
|
+
# Sets a key on the context. This gets an option that is used for all
|
45
|
+
# processors on this context.
|
46
|
+
#
|
47
|
+
# @param key [::Symbol, ::String] The key.
|
48
|
+
# @return [::Object]
|
49
|
+
# @!method []=(key, value)
|
50
|
+
# Sets a key on the context. This sets an option that is used for all
|
51
|
+
# processors on this context.
|
52
|
+
#
|
53
|
+
# @param key [::Symbol, ::String] The key.
|
54
|
+
# @param value [::Object] The value.
|
55
|
+
# @return [::Object]
|
56
|
+
# @!method fetch(key, default = CANARY, &block)
|
57
|
+
# Fetches a value at the given key, or provides a default if the key
|
58
|
+
# doesn't exist. If both a block and a default argument are given,
|
59
|
+
# the block form takes precedence.
|
60
|
+
#
|
61
|
+
# @overload fetch(key)
|
62
|
+
# Attempts to retrieve a value at the given key. If there is no
|
63
|
+
# key-value pair at the given key, it raises an error.
|
64
|
+
#
|
65
|
+
# @raise [KeyError] if the key isn't on the context.
|
66
|
+
# @param key [::Symbol, ::String] The key.
|
67
|
+
# @return [::Object] The value.
|
68
|
+
#
|
69
|
+
# @overload fetch(key, default)
|
70
|
+
# Attempts to retrieve a value at the given key. If there is no
|
71
|
+
# key-value pair at the given key, it returns the value given by
|
72
|
+
# `default`.
|
73
|
+
#
|
74
|
+
# @param key [::Symbol, ::String] The key.
|
75
|
+
# @param default [::Object] The default value.
|
76
|
+
# @return [::Object] The value, or the default value if there isn't
|
77
|
+
# one.
|
78
|
+
#
|
79
|
+
# @overload fetch(key, &block)
|
80
|
+
# attempts to retrieve a value at the given key. If there is no
|
81
|
+
# key-value pair at the given key, it yields.
|
82
|
+
#
|
83
|
+
# @yield if there is no corresponding key-value pair.
|
84
|
+
# @param key [::Symbol, ::String] The key.
|
85
|
+
# @return [::Object] The value, or the result of the block if there
|
86
|
+
# isn't one.
|
87
|
+
delegate [:[], :[]=, :fetch] => :@options
|
88
|
+
|
89
|
+
# @!method merge(options)
|
90
|
+
# Merges the given options into this context.
|
91
|
+
#
|
92
|
+
# @param options [{::Symbol, ::String => ::Object}]
|
93
|
+
# @return [void]
|
94
|
+
def_delegator :@options, :merge!, :merge
|
95
|
+
|
96
|
+
# The processors that are going to be run on an accept. This can be
|
97
|
+
# a {Processor::Base} subclass, or any object that responds to `#call`.
|
98
|
+
#
|
99
|
+
# @return [<#call>]
|
100
|
+
attr_reader :processors
|
101
|
+
|
102
|
+
# The configuration for the build. This is used for output directories
|
103
|
+
# and the like.
|
104
|
+
#
|
105
|
+
# @return [Configure]
|
106
|
+
attr_reader :configure
|
107
|
+
|
108
|
+
# The form that is being processed.
|
109
|
+
#
|
110
|
+
# @return [Configure::Form]
|
111
|
+
attr_reader :form
|
112
|
+
|
113
|
+
# Initialize the context, to set up the internal state.
|
114
|
+
def initialize(configure, form)
|
115
|
+
@processors = []
|
116
|
+
@configure = configure
|
117
|
+
@form = form
|
118
|
+
@descent = Processor::Descend.new(self)
|
119
|
+
@buffer = []
|
120
|
+
@options = {}
|
121
|
+
end
|
122
|
+
|
123
|
+
# Performs the processing of the given root node. This should be a
|
124
|
+
# {Parser::Node::Root}.
|
125
|
+
#
|
126
|
+
# @param root [Parser::Node::Root]
|
127
|
+
# @return [::Object]
|
128
|
+
def process(root)
|
129
|
+
root = accept(root)
|
130
|
+
effective_processors.each { |p| p.postprocess(root) }
|
131
|
+
end
|
132
|
+
|
133
|
+
# Accepts a node. This passes the node through all of the processors,
|
134
|
+
# as well as an instance of the {Processor::Descend} processor.
|
135
|
+
#
|
136
|
+
# @param node [Parser::Node] The node to process.
|
137
|
+
# @return [::Object]
|
138
|
+
def accept(node)
|
139
|
+
# Injects the node over all effective processors. Every iteration will
|
140
|
+
# use the value returned by the last `process` method call, unless it
|
141
|
+
# is `nil`.
|
142
|
+
result = effective_processors.inject(node) { |n, p| accept_node_with(n, p) }
|
143
|
+
result.is_a?(Skip) ? result.node : result
|
144
|
+
end
|
145
|
+
|
146
|
+
private
|
147
|
+
|
148
|
+
def accept_node_with(node, processor)
|
149
|
+
case node
|
150
|
+
when Skip, nil
|
151
|
+
node
|
152
|
+
when Parser::Node
|
153
|
+
result = processor.call(node)
|
154
|
+
if result.is_a?(Parser::Node) && result.update_prevented?
|
155
|
+
Skip.new(result)
|
156
|
+
else
|
157
|
+
result
|
158
|
+
end
|
159
|
+
else
|
160
|
+
fail ProcessorError, "Unknown node type `#{node.class}'"
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def effective_processors
|
165
|
+
[@descent] + @processors
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Brandish
|
5
|
+
module Processor
|
6
|
+
# A descent processor. This allows the context to descend into the
|
7
|
+
# children of the node as needed. This does *not* descend into block
|
8
|
+
# nodes by default, due to a design decision - that has to be handled by
|
9
|
+
# another processor.
|
10
|
+
#
|
11
|
+
# @api private
|
12
|
+
class Descend < Base
|
13
|
+
# Initializes the processor with the given context. This *does not* adds
|
14
|
+
# the processor to the context, and sets the context for use on the
|
15
|
+
# processor.
|
16
|
+
#
|
17
|
+
# @param context [Context]
|
18
|
+
def initialize(context)
|
19
|
+
@context = context
|
20
|
+
end
|
21
|
+
|
22
|
+
# Processes the root node. This updates the root node with an updated
|
23
|
+
# list of children that have been accepted.
|
24
|
+
#
|
25
|
+
# @param node [Parser::Node::Root]
|
26
|
+
# @return [Parser::Node::Root]
|
27
|
+
def process_root(node)
|
28
|
+
node.update(children: node.children.map { |c| accept(c) }.compact)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Brandish
|
5
|
+
module Processor
|
6
|
+
# An inline-defined processor. This allows processors to be defined easily
|
7
|
+
# within a block. This is mostly used for configuration.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# class RFC < Brandish::Processor::Inline
|
11
|
+
# command! :rfc
|
12
|
+
# pairs :number
|
13
|
+
#
|
14
|
+
# perform do
|
15
|
+
# number = @pairs.fetch("number")
|
16
|
+
# "<a href='https://www.ietf.org/rfc/rfc#{number}.txt'>RFC #{number}</a>"
|
17
|
+
# end
|
18
|
+
# end
|
19
|
+
class Inline < Base
|
20
|
+
# Sets this processor as a command processor. This includes
|
21
|
+
# {Command}, and passes the given names to
|
22
|
+
# {NameFilter::ClassMethods#name}.
|
23
|
+
#
|
24
|
+
# @return [void]
|
25
|
+
def self.command!(*names)
|
26
|
+
include Command
|
27
|
+
name(*names)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Sets this processor as a block processor. This include {Block}, and
|
31
|
+
# passes the given names to {NameFilter::ClassMethods#name}.
|
32
|
+
#
|
33
|
+
# @return [void]
|
34
|
+
def self.block!(*names)
|
35
|
+
include Block
|
36
|
+
name(*names)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Defines the `#perform` method with the given block. This is only
|
40
|
+
# effective if one of {Command} or {Block} is included. This takes the
|
41
|
+
# block passed to it and uses that to define the `#perform` method.
|
42
|
+
#
|
43
|
+
# @return [void]
|
44
|
+
def self.perform(&block)
|
45
|
+
define_method(:perform, &block)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "set"
|
5
|
+
|
6
|
+
module Brandish
|
7
|
+
module Processor
|
8
|
+
# A "name filter" for command and block nodes. This provides helpers to
|
9
|
+
# filter out nodes that don't have the given name. The class will keep
|
10
|
+
# an internal list of names that are allowed to be used for the node,
|
11
|
+
# and if the node matches, then it processes it.
|
12
|
+
#
|
13
|
+
# @api private
|
14
|
+
module NameFilter
|
15
|
+
# The class methods that are implemented on the including module. This
|
16
|
+
# is extended onto the class.
|
17
|
+
module ClassMethods
|
18
|
+
# The name that is assumed from the class name.
|
19
|
+
#
|
20
|
+
# @return [::String]
|
21
|
+
def assumed_class_name
|
22
|
+
name
|
23
|
+
.gsub(/\A(?:.+::)?(.*?)\z/, "\\1")
|
24
|
+
.gsub(/(?<!\A)[A-Z]/) { |m| "-#{m}" }
|
25
|
+
.downcase
|
26
|
+
end
|
27
|
+
|
28
|
+
# A list of allowed names for the class.
|
29
|
+
#
|
30
|
+
# @return [::Set<::String>]
|
31
|
+
def allowed_names
|
32
|
+
@names ||= name ? Set.new : Set[assumed_class_name]
|
33
|
+
end
|
34
|
+
|
35
|
+
# If no names are given, it retrieves them using {#allowed_names};
|
36
|
+
# otherwise, it merges the names into the allowed names set.
|
37
|
+
#
|
38
|
+
# @param names [#to_s, <#to_s>] The names.
|
39
|
+
# @return [::Set<::String>] The allowed names.
|
40
|
+
def names(*names)
|
41
|
+
return allowed_names if names.none?
|
42
|
+
allowed_names.merge(Array(names).flatten.map(&:to_s))
|
43
|
+
end
|
44
|
+
|
45
|
+
alias_method :name, :names
|
46
|
+
alias_method :names=, :names
|
47
|
+
alias_method :name=, :names
|
48
|
+
end
|
49
|
+
|
50
|
+
# The instance methods on the including class.
|
51
|
+
module InstanceMethods
|
52
|
+
# (see ClassMethods#allowed_names)
|
53
|
+
def allowed_names
|
54
|
+
self.class.allowed_names
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Used as a hook for Ruby.
|
59
|
+
#
|
60
|
+
# @api private
|
61
|
+
def self.included(receiver)
|
62
|
+
receiver.extend ClassMethods
|
63
|
+
receiver.send :include, InstanceMethods
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Brandish
|
5
|
+
module Processor
|
6
|
+
# A filter for defining which pairs are accepted by the given command or
|
7
|
+
# block processor. By default, all pairs are restricted; however, certain
|
8
|
+
# pairs can be whitelisted, or all pairs can be allowed. The former helps
|
9
|
+
# with debugging.
|
10
|
+
module PairFilter
|
11
|
+
# A placehodler object to denote that all pairs are allowed in the pair
|
12
|
+
# set. This is only inserted into the allowed pair set when
|
13
|
+
# {ClassMethods#unrestricted_pairs!} is called.
|
14
|
+
ALL = Object.new.freeze
|
15
|
+
|
16
|
+
# The class methods that are implemented on the including module. This
|
17
|
+
# is extended onto the class.
|
18
|
+
module ClassMethods
|
19
|
+
# A set of allowed pairs that can be used with the command or block
|
20
|
+
# element.
|
21
|
+
#
|
22
|
+
# @return [::Set<::String>]
|
23
|
+
def allowed_pairs
|
24
|
+
@allowed_pairs ||= Set.new
|
25
|
+
end
|
26
|
+
|
27
|
+
# A list of all of the ancestors' pairs. This includes the current
|
28
|
+
# classes' pairs. This allows allowed pair inheritance.
|
29
|
+
#
|
30
|
+
# @return [::Set<::String>]
|
31
|
+
def ancestor_allowed_pairs
|
32
|
+
ancestors
|
33
|
+
.select { |a| a.respond_to?(:allowed_pairs) }
|
34
|
+
.map(&:allowed_pairs)
|
35
|
+
.inject(Set.new, :merge)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Retrives or sets the pairs for the class.
|
39
|
+
#
|
40
|
+
# @overload pairs
|
41
|
+
# Retrieves the current pairs. This is the same as calling
|
42
|
+
# {#allowed_pairs}.
|
43
|
+
#
|
44
|
+
# @return [::Set<::String>]
|
45
|
+
# @overload pairs(*pairs)
|
46
|
+
# Adds pairs to the current {#allowed_pairs}.
|
47
|
+
#
|
48
|
+
# @param pairs [::String, ::Symbol, #to_s]
|
49
|
+
# @return [void]
|
50
|
+
def pairs(*pairs)
|
51
|
+
return allowed_pairs if pairs.none?
|
52
|
+
allowed_pairs.merge(Array(pairs).flatten.map(&:to_s))
|
53
|
+
end
|
54
|
+
alias_method :pair, :pairs
|
55
|
+
|
56
|
+
# Adds {PairFilter::ALL} to the pair list, allowing all pairs to be
|
57
|
+
# used with the command or block.
|
58
|
+
#
|
59
|
+
# @return [void]
|
60
|
+
def unrestricted_pairs!
|
61
|
+
pairs PairFilter::ALL
|
62
|
+
end
|
63
|
+
alias_method :unrestricted_pairs, :unrestricted_pairs!
|
64
|
+
end
|
65
|
+
|
66
|
+
# The instance methods on the including class.
|
67
|
+
module InstanceMethods
|
68
|
+
# (see ClassMethods#ancestor_allowed_pairs)
|
69
|
+
def allowed_pairs
|
70
|
+
self.class.ancestor_allowed_pairs
|
71
|
+
end
|
72
|
+
|
73
|
+
# Asserts that the pairs given are all allowed. This uses the
|
74
|
+
# `@pairs` and `@node` instance variables.
|
75
|
+
#
|
76
|
+
# @raise [PairError] If an invalid pair was given.
|
77
|
+
# @return [void]
|
78
|
+
def assert_valid_pairs
|
79
|
+
return if allowed_pairs.include?(PairFilter::ALL)
|
80
|
+
excessive = @pairs.keys - allowed_pairs
|
81
|
+
return unless excessive.any?
|
82
|
+
fail PairError.new("Unexpected pairs found " \
|
83
|
+
"(#{excessive.map(&:inspect).join(', ')})", @node.location)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# Used as a hook for Ruby.
|
88
|
+
#
|
89
|
+
# @api private
|
90
|
+
def self.included(receiver)
|
91
|
+
receiver.extend ClassMethods
|
92
|
+
receiver.send :include, InstanceMethods
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "brandish/processors/common"
|
5
|
+
require "brandish/processors/all"
|
6
|
+
require "brandish/processors/html"
|
7
|
+
require "brandish/processors/latex"
|
8
|
+
|
9
|
+
module Brandish
|
10
|
+
# All of the available processors provided by Brandish by default are defined
|
11
|
+
# under this module. Under this module, there are a set of modules, all
|
12
|
+
# pertaining to either a format, `All`, or `Common`. `All` processors are
|
13
|
+
# provided for all documents, regardless of format; `Common` processors are
|
14
|
+
# always abstract, and define a set of processors that are required to be
|
15
|
+
# implemented for all formats. If a format does not provide a `Common`
|
16
|
+
# processor, it is considered a bug.
|
17
|
+
module Processors
|
18
|
+
# All of the format modules under the {Processors} module. This is
|
19
|
+
# essentially all modules that aren't named `All` or `Common`.
|
20
|
+
#
|
21
|
+
# @return [<Module>]
|
22
|
+
def self.format_modules
|
23
|
+
(constants - [:All, :Common]).map { |c| Processors.const_get(c) }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "brandish/processors/all/embed"
|
5
|
+
require "brandish/processors/all/if"
|
6
|
+
require "brandish/processors/all/import"
|
7
|
+
require "brandish/processors/all/literal"
|
8
|
+
require "brandish/processors/all/verify"
|
9
|
+
|
10
|
+
module Brandish
|
11
|
+
module Processors
|
12
|
+
# Processors designed for use with all formats. This module does not
|
13
|
+
# implement the {Common} processors, since the common processors can be
|
14
|
+
# format-dependant. All processors in this module are defined on the
|
15
|
+
# `:all` special format.
|
16
|
+
module All
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|