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::Enumerated; node << UP::Enumerated.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