lib/twitter_cldr/shared/property_set.rb (85 lines of code) (raw):

# encoding: UTF-8 # Copyright 2012 Twitter, Inc # http://www.apache.org/licenses/LICENSE-2.0 require 'forwardable' module TwitterCldr module Shared # @note Properties are mostly accessed through the {TwitterCldr::Shared::CodePoint} class. {TwitterCldr::Shared::PropertySet} is used internally. class PropertySet include TwitterCldr::Shared::Properties extend SingleForwardable attr_reader :properties_hash def_delegators :properties_hash, :empty?, :include?, :size def initialize(properties_hash) @properties_hash = properties_hash end # @example # properties = TwitterCldr::Shared::CodePoint.get(12367).properties # properties.age # => #<Set: {"1.1"}> def age properties_hash.fetch('Age', ['Unassigned']) end # @example # # ZERO WIDTH JOINER # properties = TwitterCldr::Shared::CodePoint.get(0x200D).properties # properties.joining_type # => #<Set: {"Join_Causing"}> # # SPACE # properties = TwitterCldr::Shared::CodePoint.get(32).properties # properties.joining_type # => ["Non_Joining", "Non_Joining"] def joining_type properties_hash['Joining_Type'] ||= if general_category.empty? [ArabicShaping.joining_type_for_general_category('xx')] else general_category.map do |gc| ArabicShaping.joining_type_for_general_category(gc) end end end def bidi_paired_bracket_type properties_hash['Bidi_Paired_Bracket_Type'] ||= [ BidiBrackets.bracket_types['N'] ] end # @example # properties = TwitterCldr::Shared::CodePoint.get(0x200D).properties # properties.block # => #<Set: {"General Punctuation"}> def block properties_hash['Block'] ||= ['No_Block'] end def east_asian_width properties_hash['East_Asian_Width'] ||= ['N'] end def grapheme_cluster_break properties_hash['Grapheme_Cluster_Break'] ||= ['Other'] end def hangul_syllable_type properties_hash['Hangul_Syllable_Type'] ||= ['Not_Applicable'] end def indic_positional_category properties_hash['Indic_Positional_Category'] ||= ['NA'] end def indic_syllabic_category properties_hash['Indic_Syllabic_Category'] ||= ['Other'] end def jamo_short_name properties_hash['Jamo_Short_Name'] ||= ['<none>'] end def line_break properties_hash['Line_Break'] ||= ['XX'] end def general_category properties_hash.fetch('General_Category', []) end def script_extensions properties_hash['Script_Extensions'] ||= ['<script>'] end def script properties_hash['Script'] ||= ['Unknown'] end def sentence_break properties_hash['Sentence_Break'] ||= ['Other'] end def word_break properties_hash['Word_Break'] ||= ['Other'] end module AdditionalPropertyMethods CodePoint.properties.property_names.each do |property_name| method_name = property_name.downcase unless PropertySet.method_defined?(method_name) define_method(method_name) do if properties_hash.include?(property_name) properties_hash[property_name] || true else false end end end end end include AdditionalPropertyMethods end end end