explicit_collation_elements

in lib/twitter_cldr/collation/collator.rb [96:144]


      def explicit_collation_elements(code_points)
        
        collation_elements, prefix_size, suffixes = @trie.find_prefix(code_points)

        return unless collation_elements

        
        code_points.shift(prefix_size)

        non_starter_pos = 0

        used_combining_classes = {}

        while non_starter_pos < code_points.size && !suffixes.empty?
          
          non_starter_code_point = code_points[non_starter_pos]
          non_starter_metadata   = TwitterCldr::Shared::CodePoint.get(non_starter_code_point)

          unless non_starter_metadata
            raise UnexpectedCodePointError, "'#{non_starter_code_point}' does not appear to be a valid Unicode code point"
          end

          combining_class = non_starter_metadata.combining_class.to_i

          
          break if combining_class == 0 || used_combining_classes[combining_class]

          used_combining_classes[combining_class] = true

          
          
          new_collation_elements, _, new_suffixes = suffixes.find_prefix([non_starter_code_point])

          if new_collation_elements
            
            collation_elements = new_collation_elements
            suffixes           = new_suffixes

            
            code_points.delete_at(non_starter_pos)
          else
            
            non_starter_pos += 1
          end
        end

        collation_elements
      end