Class: TwitterCldr::Shared::CodePoint

Inherits:
Object
  • Object
show all
Defined in:
lib/twitter_cldr/shared/code_point.rb

Constant Summary collapse

DECOMPOSITION_DATA_INDEX =
5
DECOMPOSITION_REGEX =
/^(?:<(.+)>\s+)?(.+)?$/
INDICES =
[
  :category, :bidi_class, :bidi_mirrored
]
PROPERTIES =
[
  :sentence_break, :line_break, :word_break
]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(fields) ⇒ CodePoint

Returns a new instance of CodePoint.



71
72
73
# File 'lib/twitter_cldr/shared/code_point.rb', line 71

def initialize(fields)
  @fields = fields
end

Instance Attribute Details

#fieldsObject (readonly)

Returns the value of attribute fields.



39
40
41
# File 'lib/twitter_cldr/shared/code_point.rb', line 39

def fields
  @fields
end

Class Method Details

.canonical_compositionsObject



137
138
139
140
# File 'lib/twitter_cldr/shared/code_point.rb', line 137

def canonical_compositions
  @canonical_compositions ||=
    TwitterCldr.get_resource(:unicode_data, :canonical_compositions)
end

.code_points_for_property_value(prop_value) ⇒ Object

Search for code points wherein at least one property value contains prop_value. For example, if prop_value is set to :Zs, this method will return all code points that are considered spaces. If prop value is simply :Z, this method will return all code points who have a property value that contains :Z, i.e. spaces as well as line separators (:Zl) and paragraph separators (:Zp).



120
121
122
123
124
125
126
127
128
129
# File 'lib/twitter_cldr/shared/code_point.rb', line 120

def code_points_for_property_value(prop_value)
  index_key_cache[prop_value] ||= index_keys.inject([]) do |ret, (index_key, index_names)|
    if index_key.to_s.include?(prop_value.to_s)
      index_names.each do |index_name|
        ret += get_index(index_name)[index_key]
      end
    end
    ret
  end
end

.excluded_from_composition?(code_point) ⇒ Boolean

Returns:

  • (Boolean)


157
158
159
160
# File 'lib/twitter_cldr/shared/code_point.rb', line 157

def excluded_from_composition?(code_point)
  composition_exclusion_cache[code_point] ||=
    composition_exclusions.any? { |exclusion| exclusion.include?(code_point) }
end

.find(code_point) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/twitter_cldr/shared/code_point.rb', line 89

def find(code_point)
  code_point_cache[code_point] ||= begin
    target = get_block(code_point)

    return unless target && target.first

    block_data      = TwitterCldr.get_resource(:unicode_data, :blocks, target.first)
    code_point_data = block_data.fetch(code_point) { |cp| get_range_start(cp, block_data) }

    CodePoint.new(code_point_data) if code_point_data
  end
end

.for_canonical_decomposition(code_points) ⇒ Object



131
132
133
134
135
# File 'lib/twitter_cldr/shared/code_point.rb', line 131

def for_canonical_decomposition(code_points)
  if canonical_compositions.has_key?(code_points)
    find(canonical_compositions[code_points])
  end
end

.hangul_type(code_point) ⇒ Object



142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/twitter_cldr/shared/code_point.rb', line 142

def hangul_type(code_point)
  hangul_type_cache[code_point] ||= begin
    if code_point
      [:lparts, :vparts, :tparts, :compositions].each do |type|
        hangul_blocks[type].each do |range|
          return type if range.include?(code_point)
        end
      end
      nil
    else
      nil
    end
  end
end

Instance Method Details

#compatibility_decomposition?Boolean

Returns:

  • (Boolean)


75
76
77
# File 'lib/twitter_cldr/shared/code_point.rb', line 75

def compatibility_decomposition?
  !!compatibility_decomposition_tag
end

#compatibility_decomposition_tagObject



60
61
62
63
64
65
66
67
68
69
# File 'lib/twitter_cldr/shared/code_point.rb', line 60

def compatibility_decomposition_tag
  @compat_decomp_tag ||= begin
    decomp = fields[DECOMPOSITION_DATA_INDEX]
    if decomp =~ DECOMPOSITION_REGEX
      $1
    else
      raise ArgumentError, "decomposition #{decomp.inspect} has invalid format"
    end
  end
end

#decompositionObject



49
50
51
52
53
54
55
56
57
58
# File 'lib/twitter_cldr/shared/code_point.rb', line 49

def decomposition
  @decomposition ||= begin
    decomp = fields[DECOMPOSITION_DATA_INDEX]
    if decomp =~ DECOMPOSITION_REGEX
      $2 && $2.split.map(&:hex)
    else
      raise ArgumentError, "decomposition #{decomp.inspect} has invalid format"
    end
  end
end

#excluded_from_composition?Boolean

Returns:

  • (Boolean)


83
84
85
# File 'lib/twitter_cldr/shared/code_point.rb', line 83

def excluded_from_composition?
  CodePoint.excluded_from_composition?(code_point)
end

#hangul_typeObject



79
80
81
# File 'lib/twitter_cldr/shared/code_point.rb', line 79

def hangul_type
  CodePoint.hangul_type(code_point)
end