class J2119::Oxford

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

Constants

BASIC

Public Class Methods

break_role_list(matcher, list) click to toggle source
# 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) click to toggle source
# 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 = {}) click to toggle source
# 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