# 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