PageRenderTime 56ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/ruby/osc/pattern.rb

https://bitbucket.org/moumar/oscgui
Ruby | 39 lines | 35 code | 2 blank | 2 comment | 0 complexity | f70cfd4ecb4fe655f3fa182ed45c8116 MD5 | raw file
  1. require 'set'
  2. module OSC
  3. class Pattern < String
  4. # Create an OSC pattern from a string or (experimental) from a Regex.
  5. def initialize(s)
  6. case s
  7. when Regexp # This is experimental
  8. s = Regexp.source s
  9. s.gsub! /(\\\\)*\[^\/\]\*/, "\1*"
  10. s.gsub! /(\\\\)*\[^\/\]/, "\1?"
  11. s.gsub! /(\\\\)*\[^/, "\1[!"
  12. s.gsub! /(\\\\)*\(/, "\1{"
  13. s.gsub! /(\\\\)*\|/, "\1,"
  14. s.gsub! /(\\\\)*\)/, "\1}"
  15. s.gsub! /\\\\/, "\\"
  16. end
  17. super s
  18. end
  19. # Return a Regex representing this pattern
  20. def regexp
  21. s = '^'
  22. s << Regexp.escape(self)
  23. s.gsub! /\\\?/, '[^/]'
  24. s.gsub! /\\\*/, '[^/]*'
  25. s.gsub! /\\\[!/, '[^'
  26. s.gsub! /\\\]/, ']'
  27. s.gsub! /\\\{/, '('
  28. s.gsub! /,/, '|'
  29. s.gsub! /\\\}/, ')'
  30. s << "$"
  31. Regexp.new s
  32. end
  33. def self.intersect?(pattern, string)
  34. return pattern =~ string
  35. end
  36. end
  37. end