Merging the py3k-pep3137 branch back into the py3k branch.
No detailed change log; just check out the change log for the py3k-pep3137
branch. The most obvious changes:
- str8 renamed to bytes (PyString at the C level);
- bytes renamed to buffer (PyBytes at the C level);
- PyString and PyUnicode are no longer compatible.
I.e. we now have an immutable bytes type and a mutable bytes type.
The behavior of PyString was modified quite a bit, to make it more
bytes-like. Some changes are still on the to-do list.
diff --git a/Lib/plat-mac/aepack.py b/Lib/plat-mac/aepack.py
index 3caf2f5..e958b85 100644
--- a/Lib/plat-mac/aepack.py
+++ b/Lib/plat-mac/aepack.py
@@ -98,7 +98,7 @@
return AE.AECreateDesc(b'long', struct.pack('l', x))
if isinstance(x, float):
return AE.AECreateDesc(b'doub', struct.pack('d', x))
- if isinstance(x, (bytes, str8)):
+ if isinstance(x, (bytes, buffer)):
return AE.AECreateDesc(b'TEXT', x)
if isinstance(x, str):
# See http://developer.apple.com/documentation/Carbon/Reference/Apple_Event_Manager/Reference/reference.html#//apple_ref/doc/constant_group/typeUnicodeText
diff --git a/Lib/plat-mac/aetypes.py b/Lib/plat-mac/aetypes.py
index cf6e3b9..d29ea97 100644
--- a/Lib/plat-mac/aetypes.py
+++ b/Lib/plat-mac/aetypes.py
@@ -22,7 +22,18 @@
four_chars must contain only ASCII characters.
"""
- return ("%-4.4s" % str(four_chars)).encode("latin-1")
+ if isinstance(four_chars, (bytes, buffer)):
+ b = bytes(four_chars[:4])
+ n = len(b)
+ if n < 4:
+ b += b' ' * (4 - n)
+ return b
+ else:
+ s = str(four_chars)[:4]
+ n = len(s)
+ if n < 4:
+ s += ' ' * (4 - n)
+ return bytes(s, "latin-1") # MacRoman?
class Unknown:
"""An uninterpreted AE object"""
@@ -47,7 +58,7 @@
return "Enum(%r)" % (self.enum,)
def __str__(self):
- return self.enum.strip(b' ')
+ return self.enum.decode("latin-1").strip(" ")
def __aepack__(self):
return pack(self.enum, typeEnumeration)
@@ -559,7 +570,7 @@
return "selector for element %s of %s"%(self.__class__.__name__, str(self.fr))
template = """
-class %s(ComponentItem): want = '%s'
+class %s(ComponentItem): want = %r
"""
exec(template % ("Text", b'text'))
diff --git a/Lib/plat-mac/plistlib.py b/Lib/plat-mac/plistlib.py
index e0e01ff..72dfa2e 100644
--- a/Lib/plat-mac/plistlib.py
+++ b/Lib/plat-mac/plistlib.py
@@ -164,7 +164,7 @@
def simpleElement(self, element, value=None):
if value is not None:
- value = _escapeAndEncode(value)
+ value = _escape(value)
self.writeln("<%s>%s</%s>" % (element, value, element))
else:
self.writeln("<%s/>" % element)
@@ -207,7 +207,7 @@
r"[\x00\x01\x02\x03\x04\x05\x06\x07\x08\x0b\x0c\x0e\x0f"
r"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f]")
-def _escapeAndEncode(text):
+def _escape(text):
m = _controlCharPat.search(text)
if m is not None:
raise ValueError("strings can't contains control characters; "
@@ -217,7 +217,7 @@
text = text.replace("&", "&") # escape '&'
text = text.replace("<", "<") # escape '<'
text = text.replace(">", ">") # escape '>'
- return text.encode("utf-8") # encode as UTF-8
+ return text
PLISTHEADER = b"""\