Class: Cutaneous::Compiler
- Inherits:
-
Object
- Object
- Cutaneous::Compiler
show all
- Defined in:
- lib/cutaneous/compiler.rb,
lib/cutaneous/compiler/expression.rb
Defined Under Namespace
Classes: Block, BlockBuilder, BlockEnd, BlockSet, BlockStart, BlockSuper, Comment, EscapedExpression, Expression, ExtendedBlockSet, Extends, Statement, Text
Constant Summary
collapse
- EXTENDS =
/\A\s*extends\s+["']([^"']+)["']\s*\z/o
- BLOCK_START =
/\A\s*block\s+:?([a-zA-Z_][a-zA-Z0-9_]*)\s*\z/o
- BLOCK_END =
/\A\s*endblock(?:\s+:?[a-zA-Z_][a-zA-Z0-9_]*)?\s*\z/o
- BLOCK_SUPER =
/\A\s*block_?super\s*\z/o
Instance Method Summary
collapse
Constructor Details
#initialize(lexer, loader) ⇒ Compiler
Returns a new instance of Compiler.
154
155
156
|
# File 'lib/cutaneous/compiler.rb', line 154
def initialize(lexer, loader)
@lexer, @loader = lexer, loader
end
|
Instance Method Details
#block(name) ⇒ Object
217
218
219
|
# File 'lib/cutaneous/compiler.rb', line 217
def block(name)
blocks.block(name)
end
|
#block_order ⇒ Object
213
214
215
|
# File 'lib/cutaneous/compiler.rb', line 213
def block_order
blocks.block_order
end
|
#blocks ⇒ Object
159
160
161
|
# File 'lib/cutaneous/compiler.rb', line 159
def blocks
@blocks ||= build_hierarchy
end
|
#build_hierarchy ⇒ Object
163
164
165
166
|
# File 'lib/cutaneous/compiler.rb', line 163
def build_hierarchy
builder = BlockBuilder.new(@loader)
builder.build(expressions)
end
|
#expressions ⇒ Object
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
|
# File 'lib/cutaneous/compiler.rb', line 168
def expressions
expressions = []
strip = nil
@lexer.tokens.each do |type, expression, strip_whitespace|
case type
when :text
expressions << Text.new(expression, strip)
when :expression
expressions << Expression.new(expression)
when :escaped_expression
expressions << EscapedExpression.new(expression)
when :statement
expressions << parse_statement(expression)
when :comment
expressions << Comment.new(expression)
end
strip = strip_whitespace
end
expressions
end
|
#parse_statement(statement) ⇒ Object
#script ⇒ Object
209
210
211
|
# File 'lib/cutaneous/compiler.rb', line 209
def script
blocks.to_script
end
|