/lib/ruby/osc/pattern.rb
Ruby | 39 lines | 35 code | 2 blank | 2 comment | 0 complexity | f70cfd4ecb4fe655f3fa182ed45c8116 MD5 | raw file
- require 'set'
- module OSC
- class Pattern < String
- # Create an OSC pattern from a string or (experimental) from a Regex.
- def initialize(s)
- case s
- when Regexp # This is experimental
- s = Regexp.source s
- s.gsub! /(\\\\)*\[^\/\]\*/, "\1*"
- s.gsub! /(\\\\)*\[^\/\]/, "\1?"
- s.gsub! /(\\\\)*\[^/, "\1[!"
- s.gsub! /(\\\\)*\(/, "\1{"
- s.gsub! /(\\\\)*\|/, "\1,"
- s.gsub! /(\\\\)*\)/, "\1}"
- s.gsub! /\\\\/, "\\"
- end
- super s
- end
- # Return a Regex representing this pattern
- def regexp
- s = '^'
- s << Regexp.escape(self)
- s.gsub! /\\\?/, '[^/]'
- s.gsub! /\\\*/, '[^/]*'
- s.gsub! /\\\[!/, '[^'
- s.gsub! /\\\]/, ']'
- s.gsub! /\\\{/, '('
- s.gsub! /,/, '|'
- s.gsub! /\\\}/, ')'
- s << "$"
- Regexp.new s
- end
- def self.intersect?(pattern, string)
- return pattern =~ string
- end
- end
- end