    # File lib/active_support/multibyte/handlers/utf8_handler.rb, line 482
          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[cp].decomp_mapping) and (!UCD[cp].decomp_type || type == :compatability)
                decomposed.concat decompose_codepoints(type, ncp.dup)
              else
                decomposed << cp
              end
            end
          end