def _unidecode_keep_umlauts(text):
    retval = []
    for char in text:
        codepoint = ord(char)
        if ((codepoint < 128) or (codepoint in [228, 196, 246, 214, 252, 220])):
            retval.append(str(char))
            continue
        if (codepoint > 983039):
            continue
        if (55296 <= codepoint <= 57343):
            warnings.warn(('Surrogate character %r will be ignored. You might be using a narrow Python build.' % (char,)), RuntimeWarning, 2)
        section = (codepoint >> 8)
        position = (codepoint % 256)
        try:
            table = Cache[section]
        except KeyError:
            try:
                mod = __import__(('unidecode.x%03x' % section), globals(), locals(), ['data'])
            except ImportError:
                Cache[section] = None
                continue
            Cache[section] = table = mod.data
        if (table and (len(table) > position)):
            retval.append(table[position])
    return ''.join(retval)
def _unidecode_keep_umlauts(text):
    retval = []
    for char in text:
        codepoint = ord(char)
        if ((codepoint < 128) or (codepoint in [228, 196, 246, 214, 252, 220])):
            retval.append(str(char))
            continue
        if (codepoint > 983039):
            continue
        if (55296 <= codepoint <= 57343):
            warnings.warn(('Surrogate character %r will be ignored. You might be using a narrow Python build.' % (char,)), RuntimeWarning, 2)
        section = (codepoint >> 8)
        position = (codepoint % 256)
        try:
            table = Cache[section]
        except KeyError:
            try:
                mod = __import__(('unidecode.x%03x' % section), globals(), locals(), ['data'])
            except ImportError:
                Cache[section] = None
                continue
            Cache[section] = table = mod.data
        if (table and (len(table) > position)):
            retval.append(table[position])
    return .join(retval)