class Arcana::File
Public Class Methods
new(path)
click to toggle source
# File lib/arcana.rb, line 468 def initialize(path) @path = path @rules = parse end
Public Instance Methods
parse()
click to toggle source
# File lib/arcana.rb, line 481 def parse rules = [] stack = [] ::File.foreach(@path) do |line| if line.start_with?("#") # comment elsif line.match?(/\A\s+\z/) # blank elsif line.start_with?("!") if line =~ /\A!:([a-z]+)\s+(.*)\n\z/ raise if stack.empty? stack.last.extras[$1] = $2 else raise "couldn't parse #{line}" end else fields = line.chomp.split(/(?<![\\<>])\s+/, 4) offset, type, test, message = fields nesting = offset[/\A>*/].size stack = stack[0, nesting] offset = Offset.new offset[nesting..] pattern = Pattern.new(type, test) rule = Rule.new(offset, pattern, message) if stack.empty? rules << rule else stack.last.children << rule end stack << rule end end rules end
raw_rules()
click to toggle source
# File lib/arcana.rb, line 473 def raw_rules @rules end
rules()
click to toggle source
# File lib/arcana.rb, line 477 def rules RuleSet.new(@rules) end