# File lib/active_support/multibyte/chars.rb, line 530
        def decompose_codepoints(type, codepoints)
          codepoints.inject([]) do |decomposed, cp|
            # if it's a hangul syllable starter character
            if HANGUL_SBASE <= cp and cp < HANGUL_SLAST
              sindex = cp - HANGUL_SBASE
              ncp = [] # new codepoints
              ncp << HANGUL_LBASE + sindex / HANGUL_NCOUNT
              ncp << HANGUL_VBASE + (sindex % HANGUL_NCOUNT) / HANGUL_TCOUNT
              tindex = sindex % HANGUL_TCOUNT
              ncp << (HANGUL_TBASE + tindex) unless tindex == 0
              decomposed.concat ncp
            # if the codepoint is decomposable in with the current decomposition type
            elsif (ncp = UCD.codepoints[cp].decomp_mapping) and (!UCD.codepoints[cp].decomp_type || type == :compatability)
              decomposed.concat decompose_codepoints(type, ncp.dup)
            else
              decomposed << cp
            end
          end
        end