class ReVIEW::Compiler

Constants

INLINE
SYNTAX

Attributes

strategy[R]

Public Class Methods

defblock(name, argc, optional = false, &block) click to toggle source
# File ../../../../../lib/review/compiler.rb, line 86
def self.defblock(name, argc, optional = false, &block)
  defsyntax name, (optional ? :optional : :block), argc, &block
end
definline(name) click to toggle source
# File ../../../../../lib/review/compiler.rb, line 98
def self.definline(name)
  INLINE[name] = InlineSyntaxElement.new(name)
end
defsingle(name, argc, &block) click to toggle source
# File ../../../../../lib/review/compiler.rb, line 90
def self.defsingle(name, argc, &block)
  defsyntax name, :line, argc, &block
end
defsyntax(name, type, argc, &block) click to toggle source
# File ../../../../../lib/review/compiler.rb, line 94
def self.defsyntax(name, type, argc, &block)
  SYNTAX[name] = SyntaxElement.new(name, type, argc, &block)
end
new(strategy) click to toggle source
# File ../../../../../lib/review/compiler.rb, line 39
def initialize(strategy)
  @strategy = strategy
end

Public Instance Methods

compile(chap) click to toggle source
# File ../../../../../lib/review/compiler.rb, line 45
def compile(chap)
  @chapter = chap
  do_compile
  @strategy.result
end
inline_defined?(name) click to toggle source
# File ../../../../../lib/review/compiler.rb, line 120
def inline_defined?(name)
  INLINE.key?(name.to_sym)
end
syntax_defined?(name) click to toggle source
# File ../../../../../lib/review/compiler.rb, line 102
def syntax_defined?(name)
  SYNTAX.key?(name.to_sym)
end
syntax_descriptor(name) click to toggle source
# File ../../../../../lib/review/compiler.rb, line 106
def syntax_descriptor(name)
  SYNTAX[name.to_sym]
end
text(str) click to toggle source
# File ../../../../../lib/review/compiler.rb, line 516
def text(str)
  return '' if str.empty?
  words = replace_fence(str).split(/(@<\w+>\{(?:[^\}\]|\.)*?\})/, -1)
  words.each { |w| error "`@<xxx>' seen but is not valid inline op: #{w}" if w.scan(/@<\w+>/).size > 1 && !/\A@<raw>/.match(w) }
  result = @strategy.nofunc_text(words.shift)
  until words.empty?
    result << compile_inline(words.shift.gsub(/\\}/, '}').gsub(/\\/, '\'))
    result << @strategy.nofunc_text(words.shift)
  end
  result.gsub("\x01", '@')
rescue => err
  error err.message
end