Class: ReVIEW::Compiler
Defined Under Namespace
Classes: InlineSyntaxElement, SyntaxElement
Constant Summary
collapse
- SYNTAX =
{}
- INLINE =
{}
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(strategy) ⇒ Compiler
Returns a new instance of Compiler.
45
46
47
|
# File 'lib/review/compiler.rb', line 45
def initialize(strategy)
@strategy = strategy
end
|
Instance Attribute Details
Returns the value of attribute strategy.
49
50
51
|
# File 'lib/review/compiler.rb', line 49
def strategy
@strategy
end
|
Class Method Details
.defblock(name, argc, optional = false, &block) ⇒ Object
94
95
96
|
# File 'lib/review/compiler.rb', line 94
def Compiler.defblock(name, argc, optional = false, &block)
defsyntax name, (optional ? :optional : :block), argc, &block
end
|
.definline(name) ⇒ Object
124
125
126
|
# File 'lib/review/compiler.rb', line 124
def Compiler.definline(name)
INLINE[name] = InlineSyntaxElement.new(name)
end
|
.defsingle(name, argc, &block) ⇒ Object
98
99
100
|
# File 'lib/review/compiler.rb', line 98
def Compiler.defsingle(name, argc, &block)
defsyntax name, :line, argc, &block
end
|
.defsyntax(name, type, argc, &block) ⇒ Object
102
103
104
|
# File 'lib/review/compiler.rb', line 102
def Compiler.defsyntax(name, type, argc, &block)
SYNTAX[name] = SyntaxElement.new(name, type, argc, &block)
end
|
Instance Method Details
#compile(chap) ⇒ Object
51
52
53
54
55
|
# File 'lib/review/compiler.rb', line 51
def compile(chap)
@chapter = chap
do_compile
@strategy.result
end
|
#inline_defined?(name) ⇒ Boolean
128
129
130
|
# File 'lib/review/compiler.rb', line 128
def inline_defined?(name)
INLINE.key?(name.to_sym)
end
|
#syntax_defined?(name) ⇒ Boolean
106
107
108
|
# File 'lib/review/compiler.rb', line 106
def syntax_defined?(name)
SYNTAX.key?(name.to_sym)
end
|
#syntax_descriptor(name) ⇒ Object
110
111
112
|
# File 'lib/review/compiler.rb', line 110
def syntax_descriptor(name)
SYNTAX[name.to_sym]
end
|
#text(str) ⇒ Object
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
|
# File 'lib/review/compiler.rb', line 512
def text(str)
return '' if str.empty?
words = str.split(/(@<\w+>\{(?:[^\}\\]|\\.)*?\})/, -1)
words.each do |w|
error "`@<xxx>' seen but is not valid inline op: #{w}" if w.scan(/@<\w+>/).size > 1 && !/\A@<raw>/.match(w)
end
result = @strategy.nofunc_text(words.shift)
until words.empty?
result << compile_inline(words.shift.gsub(/\\\}/, '}'))
result << @strategy.nofunc_text(words.shift)
end
result
rescue => err
error err.message
end
|