-# Error class for Pattern errors.
-class PatternError < StandardError; end;
-
-class Pattern
- def self.create_left(adaptor, misp, insp, delp, len)
- patterns = []
-
- (adaptor.length).downto(len) do |i|
- pattern = adaptor[adaptor.length - i ... adaptor.length]
- mis = (pattern.length * misp * 0.01).round
- ins = (pattern.length * insp * 0.01).round
- del = (pattern.length * delp * 0.01).round
-
- if i == adaptor.length
- patterns << "#{pattern}[#{mis},#{ins},#{del}]"
- else
- patterns << "^ #{pattern}[#{mis},#{ins},#{del}]"
- end
- end
-
- compile(patterns)
- end
-
- def self.create_right(adaptor, misp, insp, delp, len)
- patterns = []
-
- (adaptor.length).downto(len) do |i|
- pattern = adaptor[0 ... i]
- mis = (pattern.length * misp * 0.01).round
- ins = (pattern.length * insp * 0.01).round
- del = (pattern.length * delp * 0.01).round
-
- if i == adaptor.length
- patterns << "#{pattern}[#{mis},#{ins},#{del}]"
- else
- patterns << "#{pattern}[#{mis},#{ins},#{del}] $"
- end
- end
-
- compile(patterns)
- end
-
- private
-
- def self.compile(patterns)
- new_patterns = []
-
- while patterns.size > 1
- new_patterns = patterns[0 ... -2]
- new_patterns << "( #{patterns[-2 .. -1].join(' | ')} )"
-
- patterns = new_patterns
- end
-
- patterns.first
- end
-end