g_unpack (ActiveSupport::Multibyte::Chars)

    # File lib/active_support/multibyte/chars.rb, line 467
            def g_unpack(string)
              codepoints = u_unpack(string)
              unpacked = []
              pos = 0
              marker = 0
              eoc = codepoints.length
              while(pos < eoc)
                pos += 1
                previous = codepoints[pos-1]
                current = codepoints[pos]
                if (
                    # CR X LF
                    one = ( previous == UCD.boundary[:cr] and current == UCD.boundary[:lf] ) or
                    # L X (L|V|LV|LVT)
                    two = ( UCD.boundary[:l] === previous and in_char_class?(current, [:l,:v,:lv,:lvt]) ) or
                    # (LV|V) X (V|T)
                    three = ( in_char_class?(previous, [:lv,:v]) and in_char_class?(current, [:v,:t]) ) or
                    # (LVT|T) X (T)
                    four = ( in_char_class?(previous, [:lvt,:t]) and UCD.boundary[:t] === current ) or
                    # X Extend
                    five = (UCD.boundary[:extend] === current)
                  )
                else
                  unpacked << codepoints[marker..pos-1]
                  marker = pos
                end
              end
              unpacked
            end