Class: J2119::Oxford
- Inherits:
-
Object
- Object
- J2119::Oxford
- Defined in:
- lib/j2119/oxford.rb
Overview
We have to recognize lots of lists like so:
X
X or X
X, X, or X
Examples: one of “Foo”, “Bar”, or “Baz” a Token1, a Token2, or a Token3
Constant Summary collapse
- BASIC =
"(?<CAPTURE>X((((,\\s+X)+,)?)?\\s+or\\s+X)?)"
Class Method Summary collapse
- .break_role_list(matcher, list) ⇒ Object
- .break_string_list(list) ⇒ Object
- .re(particle, opts = {}) ⇒ Object
Class Method Details
.break_role_list(matcher, list) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/j2119/oxford.rb', line 52 def self.break_role_list(matcher, list) pieces = [] re = Regexp.compile "^an?\\s+(#{matcher.role_matcher})(,\\s+)?" while list =~ re pieces << $1 list = $' end if list =~ /^\s*(and|or)\s+an?\s+(#{matcher.role_matcher})/ pieces << $2 end pieces end |
.break_string_list(list) ⇒ Object
42 43 44 45 46 47 48 49 50 |
# File 'lib/j2119/oxford.rb', line 42 def self.break_string_list list pieces = [] re = Regexp.compile "^[^\"]*\"([^\"]*)\"" while list =~ re pieces << $1 list = $' end pieces end |
.re(particle, opts = {}) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/j2119/oxford.rb', line 26 def self.re(particle, opts = {}) has_capture, inter, has_connector, last = BASIC.split 'X' has_connector.gsub!('or', opts[:connector]) if opts[:connector] if opts[:use_article] particle = "an?\\s+(#{particle})" else particle = "(#{particle})" end if opts[:capture_name] has_capture.gsub!('CAPTURE', opts[:capture_name]) else has_capture.gsub!('?<CAPTURE>', '') end [ has_capture, inter, has_connector, last].join(particle) end |