(domain, std3_rules=True, transitional=False)
Re-map the characters in the string according to UTS46 processing.
Re-map the characters in the string according to UTS46 processing.
Re - map the characters in the string according to UTS46 processing .
def uts46_remap(domain, std3_rules=True, transitional=False):
    """Re-map the characters in the string according to UTS46 processing."""
    from .uts46data import uts46data
    output = u""
    try:
        for pos, char in enumerate(domain):
            code_point = ord(char)
            uts46row = uts46data[code_point if code_point < 256 else
                bisect.bisect_left(uts46data, (code_point, "Z")) - 1]
            status = uts46row[1]
            replacement = uts46row[2] if len(uts46row) == 3 else None
            if (status == "V" or
                    (status == "D" and not transitional) or
                    (status == "3" and not std3_rules and replacement is None)):
                output += char
            elif replacement is not None and (status == "M" or
                    (status == "3" and not std3_rules) or
                    (status == "D" and transitional)):
                output += replacement
            elif status != "I":
                raise IndexError()
        return unicodedata.normalize("NFC", output)
    except IndexError:
        raise InvalidCodepoint(
            "Codepoint {0} not allowed at position {1} in {2}".format(
            _unot(code_point), pos + 1, repr(domain)))
def uts46_remap ( domain , std3_rules = True , transitional = False ) : from . uts46data import uts46data output = u"" try : for pos , char in enumerate ( domain ) : code_point = ord ( char ) uts46row = uts46data [ code_point if code_point < 256 else bisect . bisect_left ( uts46data , ( code_point , "Z" ) ) - 1 ] status = uts46row [ 1 ] replacement = uts46row [ 2 ] if len ( uts46row ) == 3 else None if ( status == "V" or ( status == "D" and not transitional ) or ( status == "3" and not std3_rules and replacement is None ) ) : output += char elif replacement is not None and ( status == "M" or ( status == "3" and not std3_rules ) or ( status == "D" and transitional ) ) : output += replacement elif status != "I" : raise IndexError ( ) return unicodedata . normalize ( "NFC" , output ) except IndexError : raise InvalidCodepoint ( "Codepoint {0} not allowed at position {1} in {2}" . format ( _unot ( code_point ) , pos + 1 , repr ( domain ) ) )