Class: JavaRegex::Translator
- Inherits:
-
Object
- Object
- JavaRegex::Translator
- Defined in:
- lib/java_regex/translator.rb
Class Method Summary collapse
- .character_classes_or_character_sets(regex) ⇒ Object
- .characters(regex) ⇒ Object
- .modifiers(regex) ⇒ Object
- .posix_bracket_expressions!(regex) ⇒ Object
- .translate(regex) ⇒ Object
- .unicode_characters!(regex) ⇒ Object
- .word_boundaries(regex) ⇒ Object
Class Method Details
.character_classes_or_character_sets(regex) ⇒ Object
28 29 30 |
# File 'lib/java_regex/translator.rb', line 28 def self.character_classes_or_character_sets(regex) regex.gsub!(/(\[\\.)-(.\])/, '\1\\-\2') end |
.characters(regex) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/java_regex/translator.rb', line 15 def self.characters(regex) = regex.scan('\Q') = regex.scan('\E') control_char = regex.scan(/\\c[[:upper:]]/) raise JavaRegexException::TranslationError, '"\Q" and "\E" are not supported' unless .empty? and .empty? raise JavaRegexException::TranslationError, '"\ccA" through "\ccZ" are not supported' unless control_char.empty? end |
.modifiers(regex) ⇒ Object
39 40 41 42 43 44 |
# File 'lib/java_regex/translator.rb', line 39 def self.modifiers(regex) newline = regex.scan(/\\n/) raise JavaRegexException::TranslationError, 'Newlines are currently not supported' unless newline.empty? end |
.posix_bracket_expressions!(regex) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/java_regex/translator.rb', line 51 def self.posix_bracket_expressions!(regex) regex.gsub!('\p{Lower}', '[[:lower:]]') regex.gsub!('\p{Upper}', '[[:upper:]]') regex.gsub!('\p{Alpha}', '[[:alpha:]]') regex.gsub!('\p{Digit}', '[[:digit:]]') regex.gsub!('\p{Alnum}', '[[:alnum:]]') regex.gsub!('\p{Punct}', '[[:punct:]]') regex.gsub!('\p{Graph}', '[[:graph:]]') regex.gsub!('\p{Print}', '[[:print:]]') regex.gsub!('\p{Blank}', '[[:blank:]]') regex.gsub!('\p{Cntrl}', '[[:cntrl:]]') regex.gsub!('\p{Space}', '[[:space:]]') regex.gsub!('\p{XDigit}', '[[:xdigit:]]') regex.gsub!('\p{ASCII}', '[[:print:][:cntrl:]]') end |
.translate(regex) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 |
# File 'lib/java_regex/translator.rb', line 3 def self.translate(regex) regex = String.new(regex) characters(regex) character_classes_or_character_sets(regex) word_boundaries(regex) modifiers(regex) unicode_characters!(regex) posix_bracket_expressions!(regex) regex.sub!(/\A(.*)\z/, '\A\1\z') return regex end |
.unicode_characters!(regex) ⇒ Object
46 47 48 49 |
# File 'lib/java_regex/translator.rb', line 46 def self.unicode_characters!(regex) re = /\\u([[:xdigit:]]{4})/ regex.gsub!(re) { |m| m.gsub!(/\A.*\z/, [Integer("0x#{$1}")].pack('U*')) } end |
.word_boundaries(regex) ⇒ Object
32 33 34 35 36 37 |
# File 'lib/java_regex/translator.rb', line 32 def self.word_boundaries(regex) non_ascii = regex.scan(/\\[bB][[:print:][:cntrl:]]/) raise JavaRegexException::TranslationError, 'Non-ascii characters following "\b" or "\B" are not supported' unless non_ascii.empty? end |