| Index: third_party/twisted_8_1/twisted/words/protocols/jabber/xmpp_stringprep.py
|
| diff --git a/third_party/twisted_8_1/twisted/words/protocols/jabber/xmpp_stringprep.py b/third_party/twisted_8_1/twisted/words/protocols/jabber/xmpp_stringprep.py
|
| deleted file mode 100644
|
| index 87025fb2efa3fa1aefaa6f22cbde2476df89d3ca..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/words/protocols/jabber/xmpp_stringprep.py
|
| +++ /dev/null
|
| @@ -1,248 +0,0 @@
|
| -# -*- test-case-name: twisted.words.test.test_jabberxmppstringprep -*-
|
| -#
|
| -# Copyright (c) 2001-2005 Twisted Matrix Laboratories.
|
| -# See LICENSE for details.
|
| -
|
| -import sys, warnings
|
| -from zope.interface import Interface, implements
|
| -
|
| -if sys.version_info < (2,3,2):
|
| - import re
|
| -
|
| - class IDNA:
|
| - dots = re.compile(u"[\u002E\u3002\uFF0E\uFF61]")
|
| - def nameprep(self, label):
|
| - return label.lower()
|
| -
|
| - idna = IDNA()
|
| -
|
| - crippled = True
|
| -
|
| - warnings.warn("Accented and non-Western Jabber IDs will not be properly "
|
| - "case-folded with this version of Python, resulting in "
|
| - "incorrect protocol-level behavior. It is strongly "
|
| - "recommended you upgrade to Python 2.3.2 or newer if you "
|
| - "intend to use Twisted's Jabber support.")
|
| -
|
| -else:
|
| - import stringprep
|
| - import unicodedata
|
| - from encodings import idna
|
| -
|
| - crippled = False
|
| -
|
| -del sys, warnings
|
| -
|
| -class ILookupTable(Interface):
|
| - """ Interface for character lookup classes. """
|
| -
|
| - def lookup(c):
|
| - """ Return whether character is in this table. """
|
| -
|
| -class IMappingTable(Interface):
|
| - """ Interface for character mapping classes. """
|
| -
|
| - def map(c):
|
| - """ Return mapping for character. """
|
| -
|
| -class LookupTableFromFunction:
|
| -
|
| - implements(ILookupTable)
|
| -
|
| - def __init__(self, in_table_function):
|
| - self.lookup = in_table_function
|
| -
|
| -class LookupTable:
|
| -
|
| - implements(ILookupTable)
|
| -
|
| - def __init__(self, table):
|
| - self._table = table
|
| -
|
| - def lookup(self, c):
|
| - return c in self._table
|
| -
|
| -class MappingTableFromFunction:
|
| -
|
| - implements(IMappingTable)
|
| -
|
| - def __init__(self, map_table_function):
|
| - self.map = map_table_function
|
| -
|
| -class EmptyMappingTable:
|
| -
|
| - implements(IMappingTable)
|
| -
|
| - def __init__(self, in_table_function):
|
| - self._in_table_function = in_table_function
|
| -
|
| - def map(self, c):
|
| - if self._in_table_function(c):
|
| - return None
|
| - else:
|
| - return c
|
| -
|
| -class Profile:
|
| - def __init__(self, mappings=[], normalize=True, prohibiteds=[],
|
| - check_unassigneds=True, check_bidi=True):
|
| - self.mappings = mappings
|
| - self.normalize = normalize
|
| - self.prohibiteds = prohibiteds
|
| - self.do_check_unassigneds = check_unassigneds
|
| - self.do_check_bidi = check_bidi
|
| -
|
| - def prepare(self, string):
|
| - result = self.map(string)
|
| - if self.normalize:
|
| - result = unicodedata.normalize("NFKC", result)
|
| - self.check_prohibiteds(result)
|
| - if self.do_check_unassigneds:
|
| - self.check_unassigneds(result)
|
| - if self.do_check_bidi:
|
| - self.check_bidirectionals(result)
|
| - return result
|
| -
|
| - def map(self, string):
|
| - result = []
|
| -
|
| - for c in string:
|
| - result_c = c
|
| -
|
| - for mapping in self.mappings:
|
| - result_c = mapping.map(c)
|
| - if result_c != c:
|
| - break
|
| -
|
| - if result_c is not None:
|
| - result.append(result_c)
|
| -
|
| - return u"".join(result)
|
| -
|
| - def check_prohibiteds(self, string):
|
| - for c in string:
|
| - for table in self.prohibiteds:
|
| - if table.lookup(c):
|
| - raise UnicodeError, "Invalid character %s" % repr(c)
|
| -
|
| - def check_unassigneds(self, string):
|
| - for c in string:
|
| - if stringprep.in_table_a1(c):
|
| - raise UnicodeError, "Unassigned code point %s" % repr(c)
|
| -
|
| - def check_bidirectionals(self, string):
|
| - found_LCat = False
|
| - found_RandALCat = False
|
| -
|
| - for c in string:
|
| - if stringprep.in_table_d1(c):
|
| - found_RandALCat = True
|
| - if stringprep.in_table_d2(c):
|
| - found_LCat = True
|
| -
|
| - if found_LCat and found_RandALCat:
|
| - raise UnicodeError, "Violation of BIDI Requirement 2"
|
| -
|
| - if found_RandALCat and not (stringprep.in_table_d1(string[0]) and
|
| - stringprep.in_table_d1(string[-1])):
|
| - raise UnicodeError, "Violation of BIDI Requirement 3"
|
| -
|
| -
|
| -class NamePrep:
|
| - """ Implements preparation of internationalized domain names.
|
| -
|
| - This class implements preparing internationalized domain names using the
|
| - rules defined in RFC 3491, section 4 (Conversion operations).
|
| -
|
| - We do not perform step 4 since we deal with unicode representations of
|
| - domain names and do not convert from or to ASCII representations using
|
| - punycode encoding. When such a conversion is needed, the L{idna} standard
|
| - library provides the C{ToUnicode()} and C{ToASCII()} functions. Note that
|
| - L{idna} itself assumes UseSTD3ASCIIRules to be false.
|
| -
|
| - The following steps are performed by C{prepare()}:
|
| -
|
| - - Split the domain name in labels at the dots (RFC 3490, 3.1)
|
| - - Apply nameprep proper on each label (RFC 3491)
|
| - - Enforce the restrictions on ASCII characters in host names by
|
| - assuming STD3ASCIIRules to be true. (STD 3)
|
| - - Rejoin the labels using the label separator U+002E (full stop).
|
| -
|
| - """
|
| -
|
| - # Prohibited characters.
|
| - prohibiteds = [unichr(n) for n in range(0x00, 0x2c + 1) +
|
| - range(0x2e, 0x2f + 1) +
|
| - range(0x3a, 0x40 + 1) +
|
| - range(0x5b, 0x60 + 1) +
|
| - range(0x7b, 0x7f + 1) ]
|
| -
|
| - def prepare(self, string):
|
| - result = []
|
| -
|
| - labels = idna.dots.split(string)
|
| -
|
| - if labels and len(labels[-1]) == 0:
|
| - trailing_dot = '.'
|
| - del labels[-1]
|
| - else:
|
| - trailing_dot = ''
|
| -
|
| - for label in labels:
|
| - result.append(self.nameprep(label))
|
| -
|
| - return ".".join(result) + trailing_dot
|
| -
|
| - def check_prohibiteds(self, string):
|
| - for c in string:
|
| - if c in self.prohibiteds:
|
| - raise UnicodeError, "Invalid character %s" % repr(c)
|
| -
|
| - def nameprep(self, label):
|
| - label = idna.nameprep(label)
|
| - self.check_prohibiteds(label)
|
| - if label[0] == '-':
|
| - raise UnicodeError, "Invalid leading hyphen-minus"
|
| - if label[-1] == '-':
|
| - raise UnicodeError, "Invalid trailing hyphen-minus"
|
| - return label
|
| -
|
| -if crippled:
|
| - case_map = MappingTableFromFunction(lambda c: c.lower())
|
| - nodeprep = Profile(mappings=[case_map],
|
| - normalize=False,
|
| - prohibiteds=[LookupTable([u' ', u'"', u'&', u"'", u'/',
|
| - u':', u'<', u'>', u'@'])],
|
| - check_unassigneds=False,
|
| - check_bidi=False)
|
| -
|
| - resourceprep = Profile(normalize=False,
|
| - check_unassigneds=False,
|
| - check_bidi=False)
|
| -
|
| -else:
|
| - C_11 = LookupTableFromFunction(stringprep.in_table_c11)
|
| - C_12 = LookupTableFromFunction(stringprep.in_table_c12)
|
| - C_21 = LookupTableFromFunction(stringprep.in_table_c21)
|
| - C_22 = LookupTableFromFunction(stringprep.in_table_c22)
|
| - C_3 = LookupTableFromFunction(stringprep.in_table_c3)
|
| - C_4 = LookupTableFromFunction(stringprep.in_table_c4)
|
| - C_5 = LookupTableFromFunction(stringprep.in_table_c5)
|
| - C_6 = LookupTableFromFunction(stringprep.in_table_c6)
|
| - C_7 = LookupTableFromFunction(stringprep.in_table_c7)
|
| - C_8 = LookupTableFromFunction(stringprep.in_table_c8)
|
| - C_9 = LookupTableFromFunction(stringprep.in_table_c9)
|
| -
|
| - B_1 = EmptyMappingTable(stringprep.in_table_b1)
|
| - B_2 = MappingTableFromFunction(stringprep.map_table_b2)
|
| -
|
| - nodeprep = Profile(mappings=[B_1, B_2],
|
| - prohibiteds=[C_11, C_12, C_21, C_22,
|
| - C_3, C_4, C_5, C_6, C_7, C_8, C_9,
|
| - LookupTable([u'"', u'&', u"'", u'/',
|
| - u':', u'<', u'>', u'@'])])
|
| -
|
| - resourceprep = Profile(mappings=[B_1,],
|
| - prohibiteds=[C_12, C_21, C_22,
|
| - C_3, C_4, C_5, C_6, C_7, C_8, C_9])
|
| -
|
| -nameprep = NamePrep()
|
|
|