class Regexp::Parser

def property(token)

def property(token)
  case token.token
  when :alnum;                  node << UP::Alnum.new(token, active_opts)
  when :alpha;                  node << UP::Alpha.new(token, active_opts)
  when :ascii;                  node << UP::Ascii.new(token, active_opts)
  when :blank;                  node << UP::Blank.new(token, active_opts)
  when :cntrl;                  node << UP::Cntrl.new(token, active_opts)
  when :digit;                  node << UP::Digit.new(token, active_opts)
  when :graph;                  node << UP::Graph.new(token, active_opts)
  when :lower;                  node << UP::Lower.new(token, active_opts)
  when :print;                  node << UP::Print.new(token, active_opts)
  when :punct;                  node << UP::Punct.new(token, active_opts)
  when :space;                  node << UP::Space.new(token, active_opts)
  when :upper;                  node << UP::Upper.new(token, active_opts)
  when :word;                   node << UP::Word.new(token, active_opts)
  when :xdigit;                 node << UP::Xdigit.new(token, active_opts)
  when :xposixpunct;            node << UP::XPosixPunct.new(token, active_opts)
  # only in Oniguruma (old rubies)
  when :newline;                node << UP::Newline.new(token, active_opts)
  when :any;                    node << UP::Any.new(token, active_opts)
  when :assigned;               node << UP::Assigned.new(token, active_opts)
  when :letter;                 node << UP::Letter::Any.new(token, active_opts)
  when :cased_letter;           node << UP::Letter::Cased.new(token, active_opts)
  when :uppercase_letter;       node << UP::Letter::Uppercase.new(token, active_opts)
  when :lowercase_letter;       node << UP::Letter::Lowercase.new(token, active_opts)
  when :titlecase_letter;       node << UP::Letter::Titlecase.new(token, active_opts)
  when :modifier_letter;        node << UP::Letter::Modifier.new(token, active_opts)
  when :other_letter;           node << UP::Letter::Other.new(token, active_opts)
  when :mark;                   node << UP::Mark::Any.new(token, active_opts)
  when :combining_mark;         node << UP::Mark::Combining.new(token, active_opts)
  when :nonspacing_mark;        node << UP::Mark::Nonspacing.new(token, active_opts)
  when :spacing_mark;           node << UP::Mark::Spacing.new(token, active_opts)
  when :enclosing_mark;         node << UP::Mark::Enclosing.new(token, active_opts)
  when :number;                 node << UP::Number::Any.new(token, active_opts)
  when :decimal_number;         node << UP::Number::Decimal.new(token, active_opts)
  when :letter_number;          node << UP::Number::Letter.new(token, active_opts)
  when :other_number;           node << UP::Number::Other.new(token, active_opts)
  when :punctuation;            node << UP::Punctuation::Any.new(token, active_opts)
  when :connector_punctuation;  node << UP::Punctuation::Connector.new(token, active_opts)
  when :dash_punctuation;       node << UP::Punctuation::Dash.new(token, active_opts)
  when :open_punctuation;       node << UP::Punctuation::Open.new(token, active_opts)
  when :close_punctuation;      node << UP::Punctuation::Close.new(token, active_opts)
  when :initial_punctuation;    node << UP::Punctuation::Initial.new(token, active_opts)
  when :final_punctuation;      node << UP::Punctuation::Final.new(token, active_opts)
  when :other_punctuation;      node << UP::Punctuation::Other.new(token, active_opts)
  when :separator;              node << UP::Separator::Any.new(token, active_opts)
  when :space_separator;        node << UP::Separator::Space.new(token, active_opts)
  when :line_separator;         node << UP::Separator::Line.new(token, active_opts)
  when :paragraph_separator;    node << UP::Separator::Paragraph.new(token, active_opts)
  when :symbol;                 node << UP::Symbol::Any.new(token, active_opts)
  when :math_symbol;            node << UP::Symbol::Math.new(token, active_opts)
  when :currency_symbol;        node << UP::Symbol::Currency.new(token, active_opts)
  when :modifier_symbol;        node << UP::Symbol::Modifier.new(token, active_opts)
  when :other_symbol;           node << UP::Symbol::Other.new(token, active_opts)
  when :other;                  node << UP::Codepoint::Any.new(token, active_opts)
  when :control;                node << UP::Codepoint::Control.new(token, active_opts)
  when :format;                 node << UP::Codepoint::Format.new(token, active_opts)
  when :surrogate;              node << UP::Codepoint::Surrogate.new(token, active_opts)
  when :private_use;            node << UP::Codepoint::PrivateUse.new(token, active_opts)
  when :unassigned;             node << UP::Codepoint::Unassigned.new(token, active_opts)
  when *UPTokens::Age;          node << UP::Age.new(token, active_opts)
  when *UPTokens::Derived;      node << UP::Derived.new(token, active_opts)
  when *UPTokens::Emoji;        node << UP::Emoji.new(token, active_opts)
  when *UPTokens::Script;       node << UP::Script.new(token, active_opts)
  when *UPTokens::UnicodeBlock; node << UP::Block.new(token, active_opts)
  else
    raise UnknownTokenError.new('UnicodeProperty', token)
  end
end