Prepared for Python 3.9.

Tue, 18 Aug 2020 12:50:51 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 18 Aug 2020 12:50:51 +0200
changeset 7670
aefd888a2b93
parent 7669
9a89687a081e
child 7671
5c6b164618c6

Prepared for Python 3.9.

eric6.e4p file | annotate | diff | comparison | revisions
eric6/APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
eric6/APIs/Python3/eric6.bas file | annotate | diff | comparison | revisions
eric6/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
eric6/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.Utilities.binplistlib.html file | annotate | diff | comparison | revisions
eric6/Documentation/Source/index-eric6.Utilities.html file | annotate | diff | comparison | revisions
eric6/Utilities/binplistlib.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/Bookmarks/BookmarksImporters/SafariImporter.py file | annotate | diff | comparison | revisions
--- a/eric6.e4p	Sat Aug 15 19:17:47 2020 +0200
+++ b/eric6.e4p	Tue Aug 18 12:50:51 2020 +0200
@@ -1295,7 +1295,6 @@
     <Source>eric6/Utilities/PasswordChecker.py</Source>
     <Source>eric6/Utilities/PySideImporter.py</Source>
     <Source>eric6/Utilities/__init__.py</Source>
-    <Source>eric6/Utilities/binplistlib.py</Source>
     <Source>eric6/Utilities/crypto/__init__.py</Source>
     <Source>eric6/Utilities/crypto/py3AES.py</Source>
     <Source>eric6/Utilities/crypto/py3PBKDF2.py</Source>
--- a/eric6/APIs/Python3/eric6.api	Sat Aug 15 19:17:47 2020 +0200
+++ b/eric6/APIs/Python3/eric6.api	Tue Aug 18 12:50:51 2020 +0200
@@ -9300,63 +9300,6 @@
 eric6.Utilities._uunescape?8
 eric6.Utilities.absolutePath?4(path, start)
 eric6.Utilities.absoluteUniversalPath?4(path, start)
-eric6.Utilities.binplistlib.BoolWrapper?1(value)
-eric6.Utilities.binplistlib.HashableWrapper?1(value)
-eric6.Utilities.binplistlib.PlistByteCounts?7
-eric6.Utilities.binplistlib.PlistReader.contents?7
-eric6.Utilities.binplistlib.PlistReader.currentOffset?7
-eric6.Utilities.binplistlib.PlistReader.file?7
-eric6.Utilities.binplistlib.PlistReader.getSizedInteger?4(data, length)
-eric6.Utilities.binplistlib.PlistReader.offsets?7
-eric6.Utilities.binplistlib.PlistReader.parse?4()
-eric6.Utilities.binplistlib.PlistReader.proc_extra?4()
-eric6.Utilities.binplistlib.PlistReader.readArray?4(count)
-eric6.Utilities.binplistlib.PlistReader.readAsciiString?4(length)
-eric6.Utilities.binplistlib.PlistReader.readData?4(length)
-eric6.Utilities.binplistlib.PlistReader.readDate?4()
-eric6.Utilities.binplistlib.PlistReader.readDict?4(count)
-eric6.Utilities.binplistlib.PlistReader.readInteger?4(length)
-eric6.Utilities.binplistlib.PlistReader.readObject?4()
-eric6.Utilities.binplistlib.PlistReader.readReal?4(length)
-eric6.Utilities.binplistlib.PlistReader.readRefs?4(count)
-eric6.Utilities.binplistlib.PlistReader.readRoot?4()
-eric6.Utilities.binplistlib.PlistReader.readUid?4(length)
-eric6.Utilities.binplistlib.PlistReader.readUnicode?4(length)
-eric6.Utilities.binplistlib.PlistReader.reset?4()
-eric6.Utilities.binplistlib.PlistReader.setCurrentOffsetToObjectNumber?4(objectNumber)
-eric6.Utilities.binplistlib.PlistReader.trailer?7
-eric6.Utilities.binplistlib.PlistReader?1(fileOrStream)
-eric6.Utilities.binplistlib.PlistTrailer?7
-eric6.Utilities.binplistlib.PlistWriter.binaryInt?4(obj, length=None)
-eric6.Utilities.binplistlib.PlistWriter.binaryReal?4(obj)
-eric6.Utilities.binplistlib.PlistWriter.byteCounts?7
-eric6.Utilities.binplistlib.PlistWriter.computeOffsets?4(obj, asReference=False, isRoot=False)
-eric6.Utilities.binplistlib.PlistWriter.computedUniques?7
-eric6.Utilities.binplistlib.PlistWriter.file?7
-eric6.Utilities.binplistlib.PlistWriter.header?7
-eric6.Utilities.binplistlib.PlistWriter.incrementByteCount?4(field, incr=1)
-eric6.Utilities.binplistlib.PlistWriter.intSize?4(obj)
-eric6.Utilities.binplistlib.PlistWriter.positionOfObjectReference?4(obj)
-eric6.Utilities.binplistlib.PlistWriter.proc_variable_length?4(length)
-eric6.Utilities.binplistlib.PlistWriter.realSize?4(obj)
-eric6.Utilities.binplistlib.PlistWriter.referencePositions?7
-eric6.Utilities.binplistlib.PlistWriter.reset?4()
-eric6.Utilities.binplistlib.PlistWriter.trailer?7
-eric6.Utilities.binplistlib.PlistWriter.wrapRoot?4(root)
-eric6.Utilities.binplistlib.PlistWriter.wrappedFalse?7
-eric6.Utilities.binplistlib.PlistWriter.wrappedTrue?7
-eric6.Utilities.binplistlib.PlistWriter.writeObject?4(obj, output, setReferencePosition=False)
-eric6.Utilities.binplistlib.PlistWriter.writeObjectReference?4(obj, output)
-eric6.Utilities.binplistlib.PlistWriter.writeOffsetTable?4(output)
-eric6.Utilities.binplistlib.PlistWriter.writeRoot?4(root)
-eric6.Utilities.binplistlib.PlistWriter.writtenReferences?7
-eric6.Utilities.binplistlib.PlistWriter?1(file)
-eric6.Utilities.binplistlib.apple_reference_date_offset?7
-eric6.Utilities.binplistlib.is_stream_binary_plist?4(stream)
-eric6.Utilities.binplistlib.readPlist?4(pathOrFile)
-eric6.Utilities.binplistlib.readPlistFromBytes?4(data)
-eric6.Utilities.binplistlib.writePlist?4(rootObject, pathOrFile, binary=True)
-eric6.Utilities.binplistlib.writePlistToBytes?4(rootObject, binary=True)
 eric6.Utilities.checkPyside?4(variant="2")
 eric6.Utilities.codingBytes_regexps?7
 eric6.Utilities.coding_regexps?7
--- a/eric6/APIs/Python3/eric6.bas	Sat Aug 15 19:17:47 2020 +0200
+++ b/eric6/APIs/Python3/eric6.bas	Tue Aug 18 12:50:51 2020 +0200
@@ -120,7 +120,6 @@
 CorbaPage ConfigurationPageBase Ui_CorbaPage
 CreateDialogCodeDialog QDialog Ui_CreateDialogCodeDialog
 DCTestResult TestResult
-Data bytes
 DateTimeVisitor ast.NodeVisitor
 DebugClient DebugBase DebugClientBase ThreadExtension
 DebugServer QTcpServer
@@ -514,7 +513,6 @@
 InterfacePage ConfigurationPageBase Ui_InterfacePage
 InvalidISO8859Error Exception
 InvalidModulePath Exception
-InvalidPlistException Exception
 IrcChannelEditDialog QDialog Ui_IrcChannelEditDialog
 IrcChannelWidget QWidget Ui_IrcChannelWidget
 IrcIdentitiesEditDialog QDialog Ui_IrcIdentitiesEditDialog
@@ -626,7 +624,6 @@
 NewDialogClassDialog QDialog Ui_NewDialogClassDialog
 NewPythonPackageDialog QDialog Ui_NewPythonPackageDialog
 NoExtToken peg.Symbol
-NotBinaryPlistException Exception
 NotificationWidget QWidget Ui_NotificationWidget
 NotificationsPage ConfigurationPageBase Ui_NotificationsPage
 NsHtmlReader QObject
@@ -944,7 +941,6 @@
 UMLItem QGraphicsRectItem
 UMLSceneSizeDialog QDialog Ui_UMLSceneSizeDialog
 UicCompilerOptionsDialog QDialog Ui_UicCompilerOptionsDialog
-Uid int
 UniqueNamespace peg.Namespace
 UnittestDialog QWidget Ui_UnittestDialog
 UnittestWindow E5MainWindow
Binary file eric6/Documentation/Help/source.qch has changed
--- a/eric6/Documentation/Help/source.qhp	Sat Aug 15 19:17:47 2020 +0200
+++ b/eric6/Documentation/Help/source.qhp	Tue Aug 18 12:50:51 2020 +0200
@@ -1034,7 +1034,6 @@
             <section title="eric6.Utilities.PasswordChecker" ref="eric6.Utilities.PasswordChecker.html" />
             <section title="eric6.Utilities.PySideImporter" ref="eric6.Utilities.PySideImporter.html" />
             <section title="eric6.Utilities.__init__" ref="eric6.Utilities.__init__.html" />
-            <section title="eric6.Utilities.binplistlib" ref="eric6.Utilities.binplistlib.html" />
             <section title="eric6.Utilities.uic" ref="eric6.Utilities.uic.html" />
           </section>
           <section title="eric6.VCS" ref="index-eric6.VCS.html">
@@ -2028,9 +2027,6 @@
       <keyword name="BookmarksToolBar.__removeBookmark" id="BookmarksToolBar.__removeBookmark" ref="eric6.WebBrowser.Bookmarks.BookmarksToolBar.html#BookmarksToolBar.__removeBookmark" />
       <keyword name="BookmarksToolBar.__updateVisitCount" id="BookmarksToolBar.__updateVisitCount" ref="eric6.WebBrowser.Bookmarks.BookmarksToolBar.html#BookmarksToolBar.__updateVisitCount" />
       <keyword name="BookmarksToolBar._createMenu" id="BookmarksToolBar._createMenu" ref="eric6.WebBrowser.Bookmarks.BookmarksToolBar.html#BookmarksToolBar._createMenu" />
-      <keyword name="BoolWrapper" id="BoolWrapper" ref="eric6.Utilities.binplistlib.html#BoolWrapper" />
-      <keyword name="BoolWrapper (Constructor)" id="BoolWrapper (Constructor)" ref="eric6.Utilities.binplistlib.html#BoolWrapper.__init__" />
-      <keyword name="BoolWrapper.__repr__" id="BoolWrapper.__repr__" ref="eric6.Utilities.binplistlib.html#BoolWrapper.__repr__" />
       <keyword name="BreakPointModel" id="BreakPointModel" ref="eric6.Debugger.BreakPointModel.html#BreakPointModel" />
       <keyword name="BreakPointModel (Constructor)" id="BreakPointModel (Constructor)" ref="eric6.Debugger.BreakPointModel.html#BreakPointModel.__init__" />
       <keyword name="BreakPointModel (Module)" id="BreakPointModel (Module)" ref="eric6.Debugger.BreakPointModel.html" />
@@ -3099,7 +3095,6 @@
       <keyword name="DCTestResult.addUnexpectedSuccess" id="DCTestResult.addUnexpectedSuccess" ref="eric6.DebugClients.Python.DCTestResult.html#DCTestResult.addUnexpectedSuccess" />
       <keyword name="DCTestResult.startTest" id="DCTestResult.startTest" ref="eric6.DebugClients.Python.DCTestResult.html#DCTestResult.startTest" />
       <keyword name="DCTestResult.stopTest" id="DCTestResult.stopTest" ref="eric6.DebugClients.Python.DCTestResult.html#DCTestResult.stopTest" />
-      <keyword name="Data" id="Data" ref="eric6.Utilities.binplistlib.html#Data" />
       <keyword name="DataViews (Package)" id="DataViews (Package)" ref="index-eric6.DataViews.html" />
       <keyword name="DateTimeVisitor" id="DateTimeVisitor" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#DateTimeVisitor" />
       <keyword name="DateTimeVisitor (Constructor)" id="DateTimeVisitor (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#DateTimeVisitor.__init__" />
@@ -6846,9 +6841,6 @@
       <keyword name="HashPrefixList (Constructor)" id="HashPrefixList (Constructor)" ref="eric6.WebBrowser.SafeBrowsing.SafeBrowsingThreatList.html#HashPrefixList.__init__" />
       <keyword name="HashPrefixList.__iter__" id="HashPrefixList.__iter__" ref="eric6.WebBrowser.SafeBrowsing.SafeBrowsingThreatList.html#HashPrefixList.__iter__" />
       <keyword name="HashPrefixList.__len__" id="HashPrefixList.__len__" ref="eric6.WebBrowser.SafeBrowsing.SafeBrowsingThreatList.html#HashPrefixList.__len__" />
-      <keyword name="HashableWrapper" id="HashableWrapper" ref="eric6.Utilities.binplistlib.html#HashableWrapper" />
-      <keyword name="HashableWrapper (Constructor)" id="HashableWrapper (Constructor)" ref="eric6.Utilities.binplistlib.html#HashableWrapper.__init__" />
-      <keyword name="HashableWrapper.__repr__" id="HashableWrapper.__repr__" ref="eric6.Utilities.binplistlib.html#HashableWrapper.__repr__" />
       <keyword name="HelpDocsInstaller" id="HelpDocsInstaller" ref="eric6.WebBrowser.QtHelp.HelpDocsInstaller.html#HelpDocsInstaller" />
       <keyword name="HelpDocsInstaller (Constructor)" id="HelpDocsInstaller (Constructor)" ref="eric6.WebBrowser.QtHelp.HelpDocsInstaller.html#HelpDocsInstaller.__init__" />
       <keyword name="HelpDocsInstaller (Module)" id="HelpDocsInstaller (Module)" ref="eric6.WebBrowser.QtHelp.HelpDocsInstaller.html" />
@@ -8662,7 +8654,6 @@
       <keyword name="InterfacePage.save" id="InterfacePage.save" ref="eric6.Preferences.ConfigurationPages.InterfacePage.html#InterfacePage.save" />
       <keyword name="InvalidISO8859Error" id="InvalidISO8859Error" ref="eric6.E5Network.E5RFC6266.html#InvalidISO8859Error" />
       <keyword name="InvalidModulePath" id="InvalidModulePath" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityUtils.html#InvalidModulePath" />
-      <keyword name="InvalidPlistException" id="InvalidPlistException" ref="eric6.Utilities.binplistlib.html#InvalidPlistException" />
       <keyword name="IrcChannel" id="IrcChannel" ref="eric6.Network.IRC.IrcNetworkManager.html#IrcChannel" />
       <keyword name="IrcChannel (Constructor)" id="IrcChannel (Constructor)" ref="eric6.Network.IRC.IrcNetworkManager.html#IrcChannel.__init__" />
       <keyword name="IrcChannel.autoJoin" id="IrcChannel.autoJoin" ref="eric6.Network.IRC.IrcNetworkManager.html#IrcChannel.autoJoin" />
@@ -10242,7 +10233,6 @@
       <keyword name="NoneSplashScreen.clearMessage" id="NoneSplashScreen.clearMessage" ref="eric6.UI.SplashScreen.html#NoneSplashScreen.clearMessage" />
       <keyword name="NoneSplashScreen.finish" id="NoneSplashScreen.finish" ref="eric6.UI.SplashScreen.html#NoneSplashScreen.finish" />
       <keyword name="NoneSplashScreen.showMessage" id="NoneSplashScreen.showMessage" ref="eric6.UI.SplashScreen.html#NoneSplashScreen.showMessage" />
-      <keyword name="NotBinaryPlistException" id="NotBinaryPlistException" ref="eric6.Utilities.binplistlib.html#NotBinaryPlistException" />
       <keyword name="NotificationWidget" id="NotificationWidget" ref="eric6.UI.NotificationWidget.html#NotificationWidget" />
       <keyword name="NotificationWidget (Constructor)" id="NotificationWidget (Constructor)" ref="eric6.UI.NotificationWidget.html#NotificationWidget.__init__" />
       <keyword name="NotificationWidget (Module)" id="NotificationWidget (Module)" ref="eric6.UI.NotificationWidget.html" />
@@ -10755,43 +10745,6 @@
       <keyword name="PixmapDiagram.getDiagramName" id="PixmapDiagram.getDiagramName" ref="eric6.Graphics.PixmapDiagram.html#PixmapDiagram.getDiagramName" />
       <keyword name="PixmapDiagram.getStatus" id="PixmapDiagram.getStatus" ref="eric6.Graphics.PixmapDiagram.html#PixmapDiagram.getStatus" />
       <keyword name="PixmapDiagram.wheelEvent" id="PixmapDiagram.wheelEvent" ref="eric6.Graphics.PixmapDiagram.html#PixmapDiagram.wheelEvent" />
-      <keyword name="PlistReader" id="PlistReader" ref="eric6.Utilities.binplistlib.html#PlistReader" />
-      <keyword name="PlistReader (Constructor)" id="PlistReader (Constructor)" ref="eric6.Utilities.binplistlib.html#PlistReader.__init__" />
-      <keyword name="PlistReader.getSizedInteger" id="PlistReader.getSizedInteger" ref="eric6.Utilities.binplistlib.html#PlistReader.getSizedInteger" />
-      <keyword name="PlistReader.parse" id="PlistReader.parse" ref="eric6.Utilities.binplistlib.html#PlistReader.parse" />
-      <keyword name="PlistReader.proc_extra" id="PlistReader.proc_extra" ref="eric6.Utilities.binplistlib.html#PlistReader.proc_extra" />
-      <keyword name="PlistReader.readArray" id="PlistReader.readArray" ref="eric6.Utilities.binplistlib.html#PlistReader.readArray" />
-      <keyword name="PlistReader.readAsciiString" id="PlistReader.readAsciiString" ref="eric6.Utilities.binplistlib.html#PlistReader.readAsciiString" />
-      <keyword name="PlistReader.readData" id="PlistReader.readData" ref="eric6.Utilities.binplistlib.html#PlistReader.readData" />
-      <keyword name="PlistReader.readDate" id="PlistReader.readDate" ref="eric6.Utilities.binplistlib.html#PlistReader.readDate" />
-      <keyword name="PlistReader.readDict" id="PlistReader.readDict" ref="eric6.Utilities.binplistlib.html#PlistReader.readDict" />
-      <keyword name="PlistReader.readInteger" id="PlistReader.readInteger" ref="eric6.Utilities.binplistlib.html#PlistReader.readInteger" />
-      <keyword name="PlistReader.readObject" id="PlistReader.readObject" ref="eric6.Utilities.binplistlib.html#PlistReader.readObject" />
-      <keyword name="PlistReader.readReal" id="PlistReader.readReal" ref="eric6.Utilities.binplistlib.html#PlistReader.readReal" />
-      <keyword name="PlistReader.readRefs" id="PlistReader.readRefs" ref="eric6.Utilities.binplistlib.html#PlistReader.readRefs" />
-      <keyword name="PlistReader.readRoot" id="PlistReader.readRoot" ref="eric6.Utilities.binplistlib.html#PlistReader.readRoot" />
-      <keyword name="PlistReader.readUid" id="PlistReader.readUid" ref="eric6.Utilities.binplistlib.html#PlistReader.readUid" />
-      <keyword name="PlistReader.readUnicode" id="PlistReader.readUnicode" ref="eric6.Utilities.binplistlib.html#PlistReader.readUnicode" />
-      <keyword name="PlistReader.reset" id="PlistReader.reset" ref="eric6.Utilities.binplistlib.html#PlistReader.reset" />
-      <keyword name="PlistReader.setCurrentOffsetToObjectNumber" id="PlistReader.setCurrentOffsetToObjectNumber" ref="eric6.Utilities.binplistlib.html#PlistReader.setCurrentOffsetToObjectNumber" />
-      <keyword name="PlistWriter" id="PlistWriter" ref="eric6.Utilities.binplistlib.html#PlistWriter" />
-      <keyword name="PlistWriter (Constructor)" id="PlistWriter (Constructor)" ref="eric6.Utilities.binplistlib.html#PlistWriter.__init__" />
-      <keyword name="PlistWriter.__checkKey" id="PlistWriter.__checkKey" ref="eric6.Utilities.binplistlib.html#PlistWriter.__checkKey" />
-      <keyword name="PlistWriter.__processSize" id="PlistWriter.__processSize" ref="eric6.Utilities.binplistlib.html#PlistWriter.__processSize" />
-      <keyword name="PlistWriter.binaryInt" id="PlistWriter.binaryInt" ref="eric6.Utilities.binplistlib.html#PlistWriter.binaryInt" />
-      <keyword name="PlistWriter.binaryReal" id="PlistWriter.binaryReal" ref="eric6.Utilities.binplistlib.html#PlistWriter.binaryReal" />
-      <keyword name="PlistWriter.computeOffsets" id="PlistWriter.computeOffsets" ref="eric6.Utilities.binplistlib.html#PlistWriter.computeOffsets" />
-      <keyword name="PlistWriter.incrementByteCount" id="PlistWriter.incrementByteCount" ref="eric6.Utilities.binplistlib.html#PlistWriter.incrementByteCount" />
-      <keyword name="PlistWriter.intSize" id="PlistWriter.intSize" ref="eric6.Utilities.binplistlib.html#PlistWriter.intSize" />
-      <keyword name="PlistWriter.positionOfObjectReference" id="PlistWriter.positionOfObjectReference" ref="eric6.Utilities.binplistlib.html#PlistWriter.positionOfObjectReference" />
-      <keyword name="PlistWriter.proc_variable_length" id="PlistWriter.proc_variable_length" ref="eric6.Utilities.binplistlib.html#PlistWriter.proc_variable_length" />
-      <keyword name="PlistWriter.realSize" id="PlistWriter.realSize" ref="eric6.Utilities.binplistlib.html#PlistWriter.realSize" />
-      <keyword name="PlistWriter.reset" id="PlistWriter.reset" ref="eric6.Utilities.binplistlib.html#PlistWriter.reset" />
-      <keyword name="PlistWriter.wrapRoot" id="PlistWriter.wrapRoot" ref="eric6.Utilities.binplistlib.html#PlistWriter.wrapRoot" />
-      <keyword name="PlistWriter.writeObject" id="PlistWriter.writeObject" ref="eric6.Utilities.binplistlib.html#PlistWriter.writeObject" />
-      <keyword name="PlistWriter.writeObjectReference" id="PlistWriter.writeObjectReference" ref="eric6.Utilities.binplistlib.html#PlistWriter.writeObjectReference" />
-      <keyword name="PlistWriter.writeOffsetTable" id="PlistWriter.writeOffsetTable" ref="eric6.Utilities.binplistlib.html#PlistWriter.writeOffsetTable" />
-      <keyword name="PlistWriter.writeRoot" id="PlistWriter.writeRoot" ref="eric6.Utilities.binplistlib.html#PlistWriter.writeRoot" />
       <keyword name="PluginAbout (Module)" id="PluginAbout (Module)" ref="eric6.Plugins.PluginAbout.html" />
       <keyword name="PluginActivationError" id="PluginActivationError" ref="eric6.PluginManager.PluginExceptions.html#PluginActivationError" />
       <keyword name="PluginActivationError (Constructor)" id="PluginActivationError (Constructor)" ref="eric6.PluginManager.PluginExceptions.html#PluginActivationError.__init__" />
@@ -15137,8 +15090,6 @@
       <keyword name="UicCompilerOptionsDialog (Module)" id="UicCompilerOptionsDialog (Module)" ref="eric6.Project.UicCompilerOptionsDialog.html" />
       <keyword name="UicCompilerOptionsDialog.getData" id="UicCompilerOptionsDialog.getData" ref="eric6.Project.UicCompilerOptionsDialog.html#UicCompilerOptionsDialog.getData" />
       <keyword name="UicLoadUi (Module)" id="UicLoadUi (Module)" ref="eric6.Project.UicLoadUi.html" />
-      <keyword name="Uid" id="Uid" ref="eric6.Utilities.binplistlib.html#Uid" />
-      <keyword name="Uid.__repr__" id="Uid.__repr__" ref="eric6.Utilities.binplistlib.html#Uid.__repr__" />
       <keyword name="UniqueNamespace" id="UniqueNamespace" ref="eric6.E5Network.E5RFC6266.html#UniqueNamespace" />
       <keyword name="UniqueNamespace.__setitem__" id="UniqueNamespace.__setitem__" ref="eric6.E5Network.E5RFC6266.html#UniqueNamespace.__setitem__" />
       <keyword name="UnittestDialog" id="UnittestDialog" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog" />
@@ -16999,7 +16950,6 @@
       <keyword name="assert (Module)" id="assert (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.assert.html" />
       <keyword name="awsHardcodedPassword (Module)" id="awsHardcodedPassword (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.awsHardcodedPassword.html" />
       <keyword name="bare_except" id="bare_except" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#bare_except" />
-      <keyword name="binplistlib (Module)" id="binplistlib (Module)" ref="eric6.Utilities.binplistlib.html" />
       <keyword name="blackListCalls (Module)" id="blackListCalls (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.blackListCalls.html" />
       <keyword name="blackListImports (Module)" id="blackListImports (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.blackListImports.html" />
       <keyword name="blank_lines" id="blank_lines" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#blank_lines" />
@@ -17598,7 +17548,6 @@
       <keyword name="isVisible" id="isVisible" ref="eric6.MicroPython.MicroPythonFileSystemUtilities.html#isVisible" />
       <keyword name="isWaylandSession" id="isWaylandSession" ref="eric6.Globals.__init__.html#isWaylandSession" />
       <keyword name="isWindowsPlatform" id="isWindowsPlatform" ref="eric6.Globals.__init__.html#isWindowsPlatform" />
-      <keyword name="is_stream_binary_plist" id="is_stream_binary_plist" ref="eric6.Utilities.binplistlib.html#is_stream_binary_plist" />
       <keyword name="is_string_literal" id="is_string_literal" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#is_string_literal" />
       <keyword name="isinpath" id="isinpath" ref="eric6.Utilities.__init__.html#isinpath" />
       <keyword name="jinja2Templates (Module)" id="jinja2Templates (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.jinja2Templates.html" />
@@ -17751,8 +17700,6 @@
       <keyword name="readEncodedFileWithEncoding" id="readEncodedFileWithEncoding" ref="eric6.Utilities.__init__.html#readEncodedFileWithEncoding" />
       <keyword name="readEncodedFileWithHash" id="readEncodedFileWithHash" ref="eric6.Utilities.__init__.html#readEncodedFileWithHash" />
       <keyword name="readModule" id="readModule" ref="eric6.Utilities.ModuleParser.html#readModule" />
-      <keyword name="readPlist" id="readPlist" ref="eric6.Utilities.binplistlib.html#readPlist" />
-      <keyword name="readPlistFromBytes" id="readPlistFromBytes" ref="eric6.Utilities.binplistlib.html#readPlistFromBytes" />
       <keyword name="readShortcuts" id="readShortcuts" ref="eric6.Preferences.Shortcuts.html#readShortcuts" />
       <keyword name="readStringFromStream" id="readStringFromStream" ref="eric6.Utilities.__init__.html#readStringFromStream" />
       <keyword name="readToolGroups" id="readToolGroups" ref="eric6.Preferences.__init__.html#readToolGroups" />
@@ -17969,8 +17916,6 @@
       <keyword name="wrapperNames" id="wrapperNames" ref="install.html#wrapperNames" />
       <keyword name="wrapperNames" id="wrapperNames" ref="uninstall.html#wrapperNames" />
       <keyword name="writeEncodedFile" id="writeEncodedFile" ref="eric6.Utilities.__init__.html#writeEncodedFile" />
-      <keyword name="writePlist" id="writePlist" ref="eric6.Utilities.binplistlib.html#writePlist" />
-      <keyword name="writePlistToBytes" id="writePlistToBytes" ref="eric6.Utilities.binplistlib.html#writePlistToBytes" />
       <keyword name="yamlCheckSyntax (Module)" id="yamlCheckSyntax (Module)" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html" />
       <keyword name="yamlLoad (Module)" id="yamlLoad (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.yamlLoad.html" />
       <keyword name="yamlSyntaxBatchCheck" id="yamlSyntaxBatchCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html#yamlSyntaxBatchCheck" />
@@ -18813,7 +18758,6 @@
       <file>eric6.Utilities.PasswordChecker.html</file>
       <file>eric6.Utilities.PySideImporter.html</file>
       <file>eric6.Utilities.__init__.html</file>
-      <file>eric6.Utilities.binplistlib.html</file>
       <file>eric6.Utilities.crypto.__init__.html</file>
       <file>eric6.Utilities.crypto.py3AES.html</file>
       <file>eric6.Utilities.crypto.py3PBKDF2.html</file>
--- a/eric6/Documentation/Source/eric6.Utilities.binplistlib.html	Sat Aug 15 19:17:47 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1483 +0,0 @@
-<!DOCTYPE html>
-<html><head>
-<title>eric6.Utilities.binplistlib</title>
-<meta charset="UTF-8">
-<style>
-body {
-    background: #EDECE6;
-    margin: 0em 1em 10em 1em;
-    color: black;
-}
-
-h1 { color: white; background: #85774A; }
-h2 { color: white; background: #85774A; }
-h3 { color: white; background: #9D936E; }
-h4 { color: white; background: #9D936E; }
-    
-a { color: #BA6D36; }
-
-</style>
-</head>
-<body>
-<a NAME="top" ID="top"></a>
-<h1>eric6.Utilities.binplistlib</h1>
-
-<p>
-Module implementing a library for reading and writing binary property list
-files.
-</p>
-<p>
-Binary Property List (plist) files provide a faster and smaller serialization
-format for property lists on OS X. This is a library for generating binary
-plists which can be read by OS X, iOS, or other clients.
-</p>
-<p>
-The API models the plistlib API, and will call through to plistlib when
-XML serialization or deserialization is required.
-</p>
-<p>
-To generate plists with UID values, wrap the values with the Uid object. The
-value must be an int.
-</p>
-<p>
-To generate plists with NSData/CFData values, wrap the values with the
-Data object. The value must be a bytes object.
-</p>
-<p>
-Date values can only be datetime.datetime objects.
-</p>
-<p>
-The exceptions InvalidPlistException and NotBinaryPlistException may be
-thrown to indicate that the data cannot be serialized or deserialized as
-a binary plist.
-</p>
-<p>
-Plist generation example:
-<pre>
-    from binplistlib import *
-    from datetime import datetime
-    plist = {'aKey':'aValue',
-             '0':1.322,
-             'now':datetime.now(),
-             'list':[1,2,3],
-             'tuple':('a','b','c')
-             }
-    try:
-        writePlist(plist, "example.plist")
-    except (InvalidPlistException, NotBinaryPlistException) as e:
-        print("Something bad happened:", e)
-</pre>
-Plist parsing example:
-<pre>
-    from binplistlib import *
-    try:
-        plist = readPlist("example.plist")
-        print(plist)
-    except (InvalidPlistException, NotBinaryPlistException) as e:
-        print("Not a plist:", e)
-</pre>
-</p>
-<h3>Global Attributes</h3>
-
-<table>
-<tr><td>PlistByteCounts</td></tr><tr><td>PlistTrailer</td></tr><tr><td>__all__</td></tr><tr><td>apple_reference_date_offset</td></tr>
-</table>
-<h3>Classes</h3>
-
-<table>
-
-<tr>
-<td><a href="#BoolWrapper">BoolWrapper</a></td>
-<td>Class wrapping a boolean value.</td>
-</tr>
-<tr>
-<td><a href="#Data">Data</a></td>
-<td>Class implementing a wrapper around bytes types for representing Data values.</td>
-</tr>
-<tr>
-<td><a href="#HashableWrapper">HashableWrapper</a></td>
-<td>Class wrapping a hashable value.</td>
-</tr>
-<tr>
-<td><a href="#InvalidPlistException">InvalidPlistException</a></td>
-<td>Exception raised when the plist is incorrectly formatted.</td>
-</tr>
-<tr>
-<td><a href="#NotBinaryPlistException">NotBinaryPlistException</a></td>
-<td>Exception raised when a binary plist was expected but not encountered.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader">PlistReader</a></td>
-<td>Class implementing the plist reader.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter">PlistWriter</a></td>
-<td>Class implementing the plist writer.</td>
-</tr>
-<tr>
-<td><a href="#Uid">Uid</a></td>
-<td>Class implementing a wrapper around integers for representing UID values.</td>
-</tr>
-</table>
-<h3>Functions</h3>
-
-<table>
-
-<tr>
-<td><a href="#is_stream_binary_plist">is_stream_binary_plist</a></td>
-<td>Module function to check, if the stream is a binary plist.</td>
-</tr>
-<tr>
-<td><a href="#readPlist">readPlist</a></td>
-<td>Module function to read a plist file.</td>
-</tr>
-<tr>
-<td><a href="#readPlistFromBytes">readPlistFromBytes</a></td>
-<td>Module function to read from a plist bytes object.</td>
-</tr>
-<tr>
-<td><a href="#writePlist">writePlist</a></td>
-<td>Module function to write a plist file.</td>
-</tr>
-<tr>
-<td><a href="#writePlistToBytes">writePlistToBytes</a></td>
-<td>Module function to write a plist bytes object.</td>
-</tr>
-</table>
-<hr />
-<hr />
-<a NAME="BoolWrapper" ID="BoolWrapper"></a>
-<h2>BoolWrapper</h2>
-
-<p>
-    Class wrapping a boolean value.
-</p>
-<h3>Derived from</h3>
-object
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-
-<tr>
-<td><a href="#BoolWrapper.__init__">BoolWrapper</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#BoolWrapper.__repr__">__repr__</a></td>
-<td>Special method to generate a representation of the object.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<a NAME="BoolWrapper.__init__" ID="BoolWrapper.__init__"></a>
-<h4>BoolWrapper (Constructor)</h4>
-<b>BoolWrapper</b>(<i>value</i>)
-
-<p>
-        Constructor
-</p>
-<dl>
-
-<dt><i>value</i></dt>
-<dd>
-object value (boolean)
-</dd>
-</dl>
-<a NAME="BoolWrapper.__repr__" ID="BoolWrapper.__repr__"></a>
-<h4>BoolWrapper.__repr__</h4>
-<b>__repr__</b>(<i></i>)
-
-<p>
-        Special method to generate a representation of the object.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-object representation (string)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="Data" ID="Data"></a>
-<h2>Data</h2>
-
-<p>
-    Class implementing a wrapper around bytes types for representing Data
-    values.
-</p>
-<h3>Derived from</h3>
-bytes
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="HashableWrapper" ID="HashableWrapper"></a>
-<h2>HashableWrapper</h2>
-
-<p>
-    Class wrapping a hashable value.
-</p>
-<h3>Derived from</h3>
-object
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-
-<tr>
-<td><a href="#HashableWrapper.__init__">HashableWrapper</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#HashableWrapper.__repr__">__repr__</a></td>
-<td>Special method to generate a representation of the object.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<a NAME="HashableWrapper.__init__" ID="HashableWrapper.__init__"></a>
-<h4>HashableWrapper (Constructor)</h4>
-<b>HashableWrapper</b>(<i>value</i>)
-
-<p>
-        Constructor
-</p>
-<dl>
-
-<dt><i>value</i></dt>
-<dd>
-object value
-</dd>
-</dl>
-<a NAME="HashableWrapper.__repr__" ID="HashableWrapper.__repr__"></a>
-<h4>HashableWrapper.__repr__</h4>
-<b>__repr__</b>(<i></i>)
-
-<p>
-        Special method to generate a representation of the object.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-object representation (string)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="InvalidPlistException" ID="InvalidPlistException"></a>
-<h2>InvalidPlistException</h2>
-
-<p>
-    Exception raised when the plist is incorrectly formatted.
-</p>
-<h3>Derived from</h3>
-Exception
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="NotBinaryPlistException" ID="NotBinaryPlistException"></a>
-<h2>NotBinaryPlistException</h2>
-
-<p>
-    Exception raised when a binary plist was expected but not encountered.
-</p>
-<h3>Derived from</h3>
-Exception
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="PlistReader" ID="PlistReader"></a>
-<h2>PlistReader</h2>
-
-<p>
-    Class implementing the plist reader.
-</p>
-<h3>Derived from</h3>
-object
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>contents</td></tr><tr><td>currentOffset</td></tr><tr><td>file</td></tr><tr><td>offsets</td></tr><tr><td>trailer</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-
-<tr>
-<td><a href="#PlistReader.__init__">PlistReader</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.getSizedInteger">getSizedInteger</a></td>
-<td>Public method to read an integer of a specific size.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.parse">parse</a></td>
-<td>Public method to parse the plist data.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.proc_extra">proc_extra</a></td>
-<td></td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readArray">readArray</a></td>
-<td>Public method to read an Array object.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readAsciiString">readAsciiString</a></td>
-<td>Public method to read an ASCII encoded string.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readData">readData</a></td>
-<td>Public method to read some bytes.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readDate">readDate</a></td>
-<td>Public method to read a date.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readDict">readDict</a></td>
-<td>Public method to read a Dictionary object.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readInteger">readInteger</a></td>
-<td>Public method to read an Integer object.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readObject">readObject</a></td>
-<td>Public method to read the object data.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readReal">readReal</a></td>
-<td>Public method to read a Real object.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readRefs">readRefs</a></td>
-<td>Public method to read References.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readRoot">readRoot</a></td>
-<td>Public method to read the root object.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readUid">readUid</a></td>
-<td>Public method to read a UID.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readUnicode">readUnicode</a></td>
-<td>Public method to read an Unicode encoded string.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.reset">reset</a></td>
-<td>Public method to reset the instance object.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.setCurrentOffsetToObjectNumber">setCurrentOffsetToObjectNumber</a></td>
-<td>Public method to set the current offset.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<a NAME="PlistReader.__init__" ID="PlistReader.__init__"></a>
-<h4>PlistReader (Constructor)</h4>
-<b>PlistReader</b>(<i>fileOrStream</i>)
-
-<p>
-        Constructor
-</p>
-<dl>
-
-<dt><i>fileOrStream</i></dt>
-<dd>
-open file containing the plist data (file object)
-</dd>
-</dl>
-<a NAME="PlistReader.getSizedInteger" ID="PlistReader.getSizedInteger"></a>
-<h4>PlistReader.getSizedInteger</h4>
-<b>getSizedInteger</b>(<i>data, length</i>)
-
-<p>
-        Public method to read an integer of a specific size.
-</p>
-<dl>
-
-<dt><i>data</i></dt>
-<dd>
-data to extract the integer from (bytes)
-</dd>
-<dt><i>length</i></dt>
-<dd>
-length of the integer (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-read integer (integer)
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-</dl>
-<a NAME="PlistReader.parse" ID="PlistReader.parse"></a>
-<h4>PlistReader.parse</h4>
-<b>parse</b>(<i></i>)
-
-<p>
-        Public method to parse the plist data.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-unpickled object
-</dd>
-</dl>
-<a NAME="PlistReader.proc_extra" ID="PlistReader.proc_extra"></a>
-<h4>PlistReader.proc_extra</h4>
-<b>proc_extra</b>(<i></i>)
-
-<a NAME="PlistReader.readArray" ID="PlistReader.readArray"></a>
-<h4>PlistReader.readArray</h4>
-<b>readArray</b>(<i>count</i>)
-
-<p>
-        Public method to read an Array object.
-</p>
-<dl>
-
-<dt><i>count</i></dt>
-<dd>
-number of array elements (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-list of unpickled objects
-</dd>
-</dl>
-<a NAME="PlistReader.readAsciiString" ID="PlistReader.readAsciiString"></a>
-<h4>PlistReader.readAsciiString</h4>
-<b>readAsciiString</b>(<i>length</i>)
-
-<p>
-        Public method to read an ASCII encoded string.
-</p>
-<dl>
-
-<dt><i>length</i></dt>
-<dd>
-length of the string (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-ASCII encoded string
-</dd>
-</dl>
-<a NAME="PlistReader.readData" ID="PlistReader.readData"></a>
-<h4>PlistReader.readData</h4>
-<b>readData</b>(<i>length</i>)
-
-<p>
-        Public method to read some bytes.
-</p>
-<dl>
-
-<dt><i>length</i></dt>
-<dd>
-number of bytes to read (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-Data object
-</dd>
-</dl>
-<a NAME="PlistReader.readDate" ID="PlistReader.readDate"></a>
-<h4>PlistReader.readDate</h4>
-<b>readDate</b>(<i></i>)
-
-<p>
-        Public method to read a date.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-date object (datetime.datetime)
-</dd>
-</dl>
-<a NAME="PlistReader.readDict" ID="PlistReader.readDict"></a>
-<h4>PlistReader.readDict</h4>
-<b>readDict</b>(<i>count</i>)
-
-<p>
-        Public method to read a Dictionary object.
-</p>
-<dl>
-
-<dt><i>count</i></dt>
-<dd>
-number of dictionary elements (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-dictionary of unpickled objects
-</dd>
-</dl>
-<a NAME="PlistReader.readInteger" ID="PlistReader.readInteger"></a>
-<h4>PlistReader.readInteger</h4>
-<b>readInteger</b>(<i>length</i>)
-
-<p>
-        Public method to read an Integer object.
-</p>
-<dl>
-
-<dt><i>length</i></dt>
-<dd>
-length of the object (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-integer object
-</dd>
-</dl>
-<a NAME="PlistReader.readObject" ID="PlistReader.readObject"></a>
-<h4>PlistReader.readObject</h4>
-<b>readObject</b>(<i></i>)
-
-<p>
-        Public method to read the object data.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-unpickled object
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-</dl>
-<a NAME="PlistReader.readReal" ID="PlistReader.readReal"></a>
-<h4>PlistReader.readReal</h4>
-<b>readReal</b>(<i>length</i>)
-
-<p>
-        Public method to read a Real object.
-</p>
-<dl>
-
-<dt><i>length</i></dt>
-<dd>
-length of the object (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-float object
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-</dl>
-<a NAME="PlistReader.readRefs" ID="PlistReader.readRefs"></a>
-<h4>PlistReader.readRefs</h4>
-<b>readRefs</b>(<i>count</i>)
-
-<p>
-        Public method to read References.
-</p>
-<dl>
-
-<dt><i>count</i></dt>
-<dd>
-amount of the references (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-list of references (list of integers)
-</dd>
-</dl>
-<a NAME="PlistReader.readRoot" ID="PlistReader.readRoot"></a>
-<h4>PlistReader.readRoot</h4>
-<b>readRoot</b>(<i></i>)
-
-<p>
-        Public method to read the root object.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-unpickled object
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-<dt>Raises <b>NotBinaryPlistException</b>:</dt>
-<dd>
-raised to indicate, that the
-            plist file is not a binary file
-</dd>
-</dl>
-<a NAME="PlistReader.readUid" ID="PlistReader.readUid"></a>
-<h4>PlistReader.readUid</h4>
-<b>readUid</b>(<i>length</i>)
-
-<p>
-        Public method to read a UID.
-</p>
-<dl>
-
-<dt><i>length</i></dt>
-<dd>
-length of the UID (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-Uid object
-</dd>
-</dl>
-<a NAME="PlistReader.readUnicode" ID="PlistReader.readUnicode"></a>
-<h4>PlistReader.readUnicode</h4>
-<b>readUnicode</b>(<i>length</i>)
-
-<p>
-        Public method to read an Unicode encoded string.
-</p>
-<dl>
-
-<dt><i>length</i></dt>
-<dd>
-length of the string (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-unicode encoded string
-</dd>
-</dl>
-<a NAME="PlistReader.reset" ID="PlistReader.reset"></a>
-<h4>PlistReader.reset</h4>
-<b>reset</b>(<i></i>)
-
-<p>
-        Public method to reset the instance object.
-</p>
-<a NAME="PlistReader.setCurrentOffsetToObjectNumber" ID="PlistReader.setCurrentOffsetToObjectNumber"></a>
-<h4>PlistReader.setCurrentOffsetToObjectNumber</h4>
-<b>setCurrentOffsetToObjectNumber</b>(<i>objectNumber</i>)
-
-<p>
-        Public method to set the current offset.
-</p>
-<dl>
-
-<dt><i>objectNumber</i></dt>
-<dd>
-number of the object (integer)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="PlistWriter" ID="PlistWriter"></a>
-<h2>PlistWriter</h2>
-
-<p>
-    Class implementing the plist writer.
-</p>
-<h3>Derived from</h3>
-object
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>byteCounts</td></tr><tr><td>computedUniques</td></tr><tr><td>file</td></tr><tr><td>header</td></tr><tr><td>referencePositions</td></tr><tr><td>trailer</td></tr><tr><td>wrappedFalse</td></tr><tr><td>wrappedTrue</td></tr><tr><td>writtenReferences</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-
-<tr>
-<td><a href="#PlistWriter.__init__">PlistWriter</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.__checkKey">__checkKey</a></td>
-<td>Private method to check the validity of a key.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.__processSize">__processSize</a></td>
-<td>Private method to process a size.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.binaryInt">binaryInt</a></td>
-<td>Public method to pack an integer object.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.binaryReal">binaryReal</a></td>
-<td>Public method to pack a real object.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.computeOffsets">computeOffsets</a></td>
-<td>Public method to compute offsets of an object.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.incrementByteCount">incrementByteCount</a></td>
-<td>Public method to increment the byte count.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.intSize">intSize</a></td>
-<td>Public method to determine the number of bytes necessary to store the given integer.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.positionOfObjectReference">positionOfObjectReference</a></td>
-<td>Public method to get the position of an object.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.proc_variable_length">proc_variable_length</a></td>
-<td></td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.realSize">realSize</a></td>
-<td>Public method to determine the number of bytes necessary to store the given real.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.reset">reset</a></td>
-<td>Public method to reset the instance object.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.wrapRoot">wrapRoot</a></td>
-<td>Public method to generate object wrappers.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.writeObject">writeObject</a></td>
-<td>Public method to serialize the given object to the output.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.writeObjectReference">writeObjectReference</a></td>
-<td>Public method to write an object reference.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.writeOffsetTable">writeOffsetTable</a></td>
-<td>Public method to write all of the object reference offsets.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.writeRoot">writeRoot</a></td>
-<td>Public method to write an object to a plist file.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<a NAME="PlistWriter.__init__" ID="PlistWriter.__init__"></a>
-<h4>PlistWriter (Constructor)</h4>
-<b>PlistWriter</b>(<i>file</i>)
-
-<p>
-        Constructor
-</p>
-<dl>
-
-<dt><i>file</i></dt>
-<dd>
-file to write the plist data to (file object)
-</dd>
-</dl>
-<a NAME="PlistWriter.__checkKey" ID="PlistWriter.__checkKey"></a>
-<h4>PlistWriter.__checkKey</h4>
-<b>__checkKey</b>(<i>key</i>)
-
-<p>
-        Private method to check the validity of a key.
-</p>
-<dl>
-
-<dt><i>key</i></dt>
-<dd>
-key to be checked
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-</dl>
-<a NAME="PlistWriter.__processSize" ID="PlistWriter.__processSize"></a>
-<h4>PlistWriter.__processSize</h4>
-<b>__processSize</b>(<i>size</i>)
-
-<p>
-        Private method to process a size.
-</p>
-<dl>
-
-<dt><i>size</i></dt>
-<dd>
-size value to be processed (int)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-processed size (int)
-</dd>
-</dl>
-<a NAME="PlistWriter.binaryInt" ID="PlistWriter.binaryInt"></a>
-<h4>PlistWriter.binaryInt</h4>
-<b>binaryInt</b>(<i>obj, length=None</i>)
-
-<p>
-        Public method to pack an integer object.
-</p>
-<dl>
-
-<dt><i>obj</i></dt>
-<dd>
-integer to be packed
-</dd>
-<dt><i>length</i></dt>
-<dd>
-length the integer should be packed into (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-serialized object (bytes)
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-</dl>
-<a NAME="PlistWriter.binaryReal" ID="PlistWriter.binaryReal"></a>
-<h4>PlistWriter.binaryReal</h4>
-<b>binaryReal</b>(<i>obj</i>)
-
-<p>
-        Public method to pack a real object.
-</p>
-<dl>
-
-<dt><i>obj</i></dt>
-<dd>
-real to be packed
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-serialized object (bytes)
-</dd>
-</dl>
-<a NAME="PlistWriter.computeOffsets" ID="PlistWriter.computeOffsets"></a>
-<h4>PlistWriter.computeOffsets</h4>
-<b>computeOffsets</b>(<i>obj, asReference=False, isRoot=False</i>)
-
-<p>
-        Public method to compute offsets of an object.
-</p>
-<dl>
-
-<dt><i>obj</i></dt>
-<dd>
-plist object
-</dd>
-<dt><i>asReference</i></dt>
-<dd>
-flag indicating offsets as references (boolean)
-</dd>
-<dt><i>isRoot</i></dt>
-<dd>
-flag indicating a root object (boolean)
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-</dl>
-<a NAME="PlistWriter.incrementByteCount" ID="PlistWriter.incrementByteCount"></a>
-<h4>PlistWriter.incrementByteCount</h4>
-<b>incrementByteCount</b>(<i>field, incr=1</i>)
-
-<p>
-        Public method to increment the byte count.
-</p>
-<dl>
-
-<dt><i>field</i></dt>
-<dd>
-field to evaluate
-</dd>
-<dt><i>incr</i></dt>
-<dd>
-byte count increment (integer)
-</dd>
-</dl>
-<a NAME="PlistWriter.intSize" ID="PlistWriter.intSize"></a>
-<h4>PlistWriter.intSize</h4>
-<b>intSize</b>(<i>obj</i>)
-
-<p>
-        Public method to determine the number of bytes necessary to store the
-        given integer.
-</p>
-<dl>
-
-<dt><i>obj</i></dt>
-<dd>
-integer object
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-number of bytes required (integer)
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-</dl>
-<a NAME="PlistWriter.positionOfObjectReference" ID="PlistWriter.positionOfObjectReference"></a>
-<h4>PlistWriter.positionOfObjectReference</h4>
-<b>positionOfObjectReference</b>(<i>obj</i>)
-
-<p>
-        Public method to get the position of an object.
-</p>
-<p>
-        If the given object has been written already, return its
-        position in the offset table. Otherwise, return None.
-</p>
-<dl>
-
-<dt><i>obj</i></dt>
-<dd>
-object
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-position of the object (integer)
-</dd>
-</dl>
-<a NAME="PlistWriter.proc_variable_length" ID="PlistWriter.proc_variable_length"></a>
-<h4>PlistWriter.proc_variable_length</h4>
-<b>proc_variable_length</b>(<i>length</i>)
-
-<a NAME="PlistWriter.realSize" ID="PlistWriter.realSize"></a>
-<h4>PlistWriter.realSize</h4>
-<b>realSize</b>(<i>obj</i>)
-
-<p>
-        Public method to determine the number of bytes necessary to store the
-        given real.
-</p>
-<dl>
-
-<dt><i>obj</i></dt>
-<dd>
-real object
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-number of bytes required (integer)
-</dd>
-</dl>
-<a NAME="PlistWriter.reset" ID="PlistWriter.reset"></a>
-<h4>PlistWriter.reset</h4>
-<b>reset</b>(<i></i>)
-
-<p>
-        Public method to reset the instance object.
-</p>
-<a NAME="PlistWriter.wrapRoot" ID="PlistWriter.wrapRoot"></a>
-<h4>PlistWriter.wrapRoot</h4>
-<b>wrapRoot</b>(<i>root</i>)
-
-<p>
-        Public method to generate object wrappers.
-</p>
-<dl>
-
-<dt><i>root</i></dt>
-<dd>
-object to be wrapped
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-wrapped object
-</dd>
-</dl>
-<a NAME="PlistWriter.writeObject" ID="PlistWriter.writeObject"></a>
-<h4>PlistWriter.writeObject</h4>
-<b>writeObject</b>(<i>obj, output, setReferencePosition=False</i>)
-
-<p>
-        Public method to serialize the given object to the output.
-</p>
-<dl>
-
-<dt><i>obj</i></dt>
-<dd>
-object to be serialized
-</dd>
-<dt><i>output</i></dt>
-<dd>
-output to be serialized to (bytes)
-</dd>
-<dt><i>setReferencePosition</i></dt>
-<dd>
-flag indicating, that the reference
-            position the object was written to shall be recorded (boolean)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-new output
-</dd>
-</dl>
-<a NAME="PlistWriter.writeObjectReference" ID="PlistWriter.writeObjectReference"></a>
-<h4>PlistWriter.writeObjectReference</h4>
-<b>writeObjectReference</b>(<i>obj, output</i>)
-
-<p>
-        Public method to write an object reference.
-</p>
-<p>
-        Tries to write an object reference, adding it to the references
-        table. Does not write the actual object bytes or set the reference
-        position. Returns a tuple of whether the object was a new reference
-        (True if it was, False if it already was in the reference table)
-        and the new output.
-</p>
-<dl>
-
-<dt><i>obj</i></dt>
-<dd>
-object to be written
-</dd>
-<dt><i>output</i></dt>
-<dd>
-output stream to append the object to
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-flag indicating a new reference and the new output
-</dd>
-</dl>
-<a NAME="PlistWriter.writeOffsetTable" ID="PlistWriter.writeOffsetTable"></a>
-<h4>PlistWriter.writeOffsetTable</h4>
-<b>writeOffsetTable</b>(<i>output</i>)
-
-<p>
-        Public method to write all of the object reference offsets.
-</p>
-<dl>
-
-<dt><i>output</i></dt>
-<dd>
-current output (bytes)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-new output (bytes)
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-</dl>
-<a NAME="PlistWriter.writeRoot" ID="PlistWriter.writeRoot"></a>
-<h4>PlistWriter.writeRoot</h4>
-<b>writeRoot</b>(<i>root</i>)
-
-<p>
-        Public method to write an object to a plist file.
-</p>
-<p>
-        Strategy is:
-        <ul>
-        <li>write header</li>
-        <li>wrap root object so everything is hashable</li>
-        <li>compute size of objects which will be written
-          <ul>
-          <li>need to do this in order to know how large the object refs
-            will be in the list/dict/set reference lists</li>
-        </ul></li>
-        <li>write objects
-          <ul>
-          <li>keep objects in writtenReferences</li>
-          <li>keep positions of object references in referencePositions</li>
-          <li>write object references with the length computed previously</li>
-        </ul></li>
-        <li>computer object reference length</li>
-        <li>write object reference positions</li>
-        <li>write trailer</li>
-        </ul>
-</p>
-<dl>
-
-<dt><i>root</i></dt>
-<dd>
-reference to the object to be written
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="Uid" ID="Uid"></a>
-<h2>Uid</h2>
-
-<p>
-    Class implementing a wrapper around integers for representing UID values.
-</p>
-<p>
-    This is used in keyed archiving.
-</p>
-<h3>Derived from</h3>
-int
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-
-<tr>
-<td><a href="#Uid.__repr__">__repr__</a></td>
-<td>Special method to return an object representation.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<a NAME="Uid.__repr__" ID="Uid.__repr__"></a>
-<h4>Uid.__repr__</h4>
-<b>__repr__</b>(<i></i>)
-
-<p>
-        Special method to return an object representation.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-object representation (string)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="is_stream_binary_plist" ID="is_stream_binary_plist"></a>
-<h2>is_stream_binary_plist</h2>
-<b>is_stream_binary_plist</b>(<i>stream</i>)
-
-<p>
-    Module function to check, if the stream is a binary plist.
-</p>
-<dl>
-
-<dt><i>stream</i></dt>
-<dd>
-plist stream (file object)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-flag indicating a binary plist (boolean)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="readPlist" ID="readPlist"></a>
-<h2>readPlist</h2>
-<b>readPlist</b>(<i>pathOrFile</i>)
-
-<p>
-    Module function to read a plist file.
-</p>
-<dl>
-
-<dt><i>pathOrFile</i></dt>
-<dd>
-name of the plist file (string) or an open file
-        (file object)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-reference to the read object
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to signal an invalid plist file
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="readPlistFromBytes" ID="readPlistFromBytes"></a>
-<h2>readPlistFromBytes</h2>
-<b>readPlistFromBytes</b>(<i>data</i>)
-
-<p>
-    Module function to read from a plist bytes object.
-</p>
-<dl>
-
-<dt><i>data</i></dt>
-<dd>
-plist data (bytes)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-reference to the read object
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="writePlist" ID="writePlist"></a>
-<h2>writePlist</h2>
-<b>writePlist</b>(<i>rootObject, pathOrFile, binary=True</i>)
-
-<p>
-    Module function to write a plist file.
-</p>
-<dl>
-
-<dt><i>rootObject</i></dt>
-<dd>
-reference to the object to be written
-</dd>
-<dt><i>pathOrFile</i></dt>
-<dd>
-name of the plist file (string) or an open file
-        (file object)
-</dd>
-<dt><i>binary</i></dt>
-<dd>
-flag indicating the generation of a binary plist file
-        (boolean)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="writePlistToBytes" ID="writePlistToBytes"></a>
-<h2>writePlistToBytes</h2>
-<b>writePlistToBytes</b>(<i>rootObject, binary=True</i>)
-
-<p>
-    Module function to write a plist bytes object.
-</p>
-<dl>
-
-<dt><i>rootObject</i></dt>
-<dd>
-reference to the object to be written
-</dd>
-<dt><i>binary</i></dt>
-<dd>
-flag indicating the generation of a binary plist bytes
-        object (boolean)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-bytes object containing the plist data
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-</body></html>
\ No newline at end of file
--- a/eric6/Documentation/Source/index-eric6.Utilities.html	Sat Aug 15 19:17:47 2020 +0200
+++ b/eric6/Documentation/Source/index-eric6.Utilities.html	Tue Aug 18 12:50:51 2020 +0200
@@ -86,10 +86,6 @@
 <td>Package implementing various functions/classes needed everywhere within eric6.</td>
 </tr>
 <tr>
-<td><a href="eric6.Utilities.binplistlib.html">binplistlib</a></td>
-<td>Module implementing a library for reading and writing binary property list files.</td>
-</tr>
-<tr>
 <td><a href="eric6.Utilities.uic.html">uic</a></td>
 <td>Module implementing a function to compile all user interface files of a directory or directory tree.</td>
 </tr>
--- a/eric6/Utilities/binplistlib.py	Sat Aug 15 19:17:47 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1078 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2012 - 2020 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a library for reading and writing binary property list
-files.
-
-Binary Property List (plist) files provide a faster and smaller serialization
-format for property lists on OS X. This is a library for generating binary
-plists which can be read by OS X, iOS, or other clients.
-
-The API models the plistlib API, and will call through to plistlib when
-XML serialization or deserialization is required.
-
-To generate plists with UID values, wrap the values with the Uid object. The
-value must be an int.
-
-To generate plists with NSData/CFData values, wrap the values with the
-Data object. The value must be a bytes object.
-
-Date values can only be datetime.datetime objects.
-
-The exceptions InvalidPlistException and NotBinaryPlistException may be
-thrown to indicate that the data cannot be serialized or deserialized as
-a binary plist.
-
-Plist generation example:
-<pre>
-    from binplistlib import *
-    from datetime import datetime
-    plist = {'aKey':'aValue',
-             '0':1.322,
-             'now':datetime.now(),
-             'list':[1,2,3],
-             'tuple':('a','b','c')
-             }
-    try:
-        writePlist(plist, "example.plist")
-    except (InvalidPlistException, NotBinaryPlistException) as e:
-        print("Something bad happened:", e)
-</pre>
-Plist parsing example:
-<pre>
-    from binplistlib import *
-    try:
-        plist = readPlist("example.plist")
-        print(plist)
-    except (InvalidPlistException, NotBinaryPlistException) as e:
-        print("Not a plist:", e)
-</pre>
-"""
-
-
-#
-# Ported from the biplist.py script.
-#
-# Original License:
-#
-# Copyright (c) 2010, Andrew Wooster
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-#
-#    * Redistributions of source code must retain the above copyright notice,
-#      this list of conditions and the following disclaimer.
-#    * Redistributions in binary form must reproduce the above copyright
-#      notice, this list of conditions and the following disclaimer in the
-#      documentation and/or other materials provided with the distribution.
-#    * Neither the name of biplist nor the names of its contributors may be
-#      used to endorse or promote products derived from this software without
-#      specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-
-from collections import namedtuple
-from io import BytesIO
-import calendar
-import datetime
-import math
-import plistlib
-from struct import pack, unpack
-
-__all__ = [
-    'Uid', 'Data', 'readPlist', 'writePlist', 'readPlistFromBytes',
-    'writePlistToBytes', 'InvalidPlistException', 'NotBinaryPlistException'
-]
-
-apple_reference_date_offset = 978307200
-
-
-class Uid(int):
-    """
-    Class implementing a wrapper around integers for representing UID values.
-    
-    This is used in keyed archiving.
-    """
-    def __repr__(self):
-        """
-        Special method to return an object representation.
-        
-        @return object representation (string)
-        """
-        return "Uid({0:d})".format(self)
-
-
-class Data(bytes):
-    """
-    Class implementing a wrapper around bytes types for representing Data
-    values.
-    """
-    pass
-
-
-class InvalidPlistException(Exception):
-    """
-    Exception raised when the plist is incorrectly formatted.
-    """
-    pass
-
-
-class NotBinaryPlistException(Exception):
-    """
-    Exception raised when a binary plist was expected but not encountered.
-    """
-    pass
-
-
-def readPlist(pathOrFile):
-    """
-    Module function to read a plist file.
-    
-    @param pathOrFile name of the plist file (string) or an open file
-        (file object)
-    @return reference to the read object
-    @exception InvalidPlistException raised to signal an invalid plist file
-    """
-    didOpen = False
-    result = None
-    if isinstance(pathOrFile, str):
-        pathOrFile = open(pathOrFile, 'rb')
-        didOpen = True
-    try:
-        reader = PlistReader(pathOrFile)
-        result = reader.parse()
-    except NotBinaryPlistException:
-        try:
-            pathOrFile.seek(0)
-            result = plistlib.readPlist(pathOrFile)
-        except Exception as e:
-            raise InvalidPlistException(e)
-    if didOpen:
-        pathOrFile.close()
-    return result
-
-
-def writePlist(rootObject, pathOrFile, binary=True):
-    """
-    Module function to write a plist file.
-    
-    @param rootObject reference to the object to be written
-    @param pathOrFile name of the plist file (string) or an open file
-        (file object)
-    @param binary flag indicating the generation of a binary plist file
-        (boolean)
-    """
-    if not binary:
-        plistlib.writePlist(rootObject, pathOrFile)
-        return
-    else:
-        didOpen = False
-        if isinstance(pathOrFile, str):
-            pathOrFile = open(pathOrFile, 'wb')
-            didOpen = True
-        writer = PlistWriter(pathOrFile)
-        writer.writeRoot(rootObject)
-        if didOpen:
-            pathOrFile.close()
-        return
-
-
-def readPlistFromBytes(data):
-    """
-    Module function to read from a plist bytes object.
-    
-    @param data plist data (bytes)
-    @return reference to the read object
-    """
-    return readPlist(BytesIO(data))
-
-
-def writePlistToBytes(rootObject, binary=True):
-    """
-    Module function to write a plist bytes object.
-    
-    @param rootObject reference to the object to be written
-    @param binary flag indicating the generation of a binary plist bytes
-        object (boolean)
-    @return bytes object containing the plist data
-    """
-    if not binary:
-        return plistlib.writePlistToBytes(rootObject)
-    else:
-        io = BytesIO()
-        writer = PlistWriter(io)
-        writer.writeRoot(rootObject)
-        return io.getvalue()
-
-
-def is_stream_binary_plist(stream):
-    """
-    Module function to check, if the stream is a binary plist.
-    
-    @param stream plist stream (file object)
-    @return flag indicating a binary plist (boolean)
-    """
-    stream.seek(0)
-    header = stream.read(7)
-    if header == b'bplist0':
-        return True
-    else:
-        return False
-
-PlistTrailer = namedtuple(
-    'PlistTrailer',
-    'offsetSize, objectRefSize, offsetCount, topLevelObjectNumber,'
-    ' offsetTableOffset')
-PlistByteCounts = namedtuple(
-    'PlistByteCounts',
-    'nullBytes, boolBytes, intBytes, realBytes, dateBytes, dataBytes,'
-    ' stringBytes, uidBytes, arrayBytes, setBytes, dictBytes')
-
-
-class PlistReader(object):
-    """
-    Class implementing the plist reader.
-    """
-    file = None
-    contents = b''
-    offsets = None
-    trailer = None
-    currentOffset = 0
-    
-    def __init__(self, fileOrStream):
-        """
-        Constructor
-        
-        @param fileOrStream open file containing the plist data (file object)
-        """
-        self.reset()
-        self.file = fileOrStream
-    
-    def parse(self):
-        """
-        Public method to parse the plist data.
-        
-        @return unpickled object
-        """
-        return self.readRoot()
-    
-    def reset(self):
-        """
-        Public method to reset the instance object.
-        """
-        self.trailer = None
-        self.contents = b''
-        self.offsets = []
-        self.currentOffset = 0
-    
-    def readRoot(self):
-        """
-        Public method to read the root object.
-        
-        @return unpickled object
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        @exception NotBinaryPlistException raised to indicate, that the
-            plist file is not a binary file
-        """
-        result = None
-        self.reset()
-        # Get the header, make sure it's a valid file.
-        if not is_stream_binary_plist(self.file):
-            raise NotBinaryPlistException()
-        self.file.seek(0)
-        self.contents = self.file.read()
-        if len(self.contents) < 32:
-            raise InvalidPlistException("File is too short.")
-        trailerContents = self.contents[-32:]
-        try:
-            self.trailer = PlistTrailer._make(
-                unpack("!xxxxxxBBQQQ", trailerContents))
-            offset_size = self.trailer.offsetSize * self.trailer.offsetCount
-            offset = self.trailer.offsetTableOffset
-            offset_contents = self.contents[offset:offset + offset_size]
-            offset_i = 0
-            while offset_i < self.trailer.offsetCount:
-                begin = self.trailer.offsetSize * offset_i
-                tmp_contents = offset_contents[
-                    begin:begin + self.trailer.offsetSize]
-                tmp_sized = self.getSizedInteger(
-                    tmp_contents, self.trailer.offsetSize)
-                self.offsets.append(tmp_sized)
-                offset_i += 1
-            self.setCurrentOffsetToObjectNumber(
-                self.trailer.topLevelObjectNumber)
-            result = self.readObject()
-        except TypeError as e:
-            raise InvalidPlistException(e)
-        return result
-    
-    def setCurrentOffsetToObjectNumber(self, objectNumber):
-        """
-        Public method to set the current offset.
-        
-        @param objectNumber number of the object (integer)
-        """
-        self.currentOffset = self.offsets[objectNumber]
-    
-    def readObject(self):
-        """
-        Public method to read the object data.
-        
-        @return unpickled object
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        """
-        result = None
-        tmp_byte = self.contents[self.currentOffset:self.currentOffset + 1]
-        marker_byte = unpack("!B", tmp_byte)[0]
-        formatNibble = (marker_byte >> 4) & 0x0f
-        extra = marker_byte & 0x0f
-        self.currentOffset += 1
-        
-        def proc_extra(extra):
-            if extra == 0b1111:
-                extra = self.readObject()
-            return extra
-        
-        # bool, null, or fill byte
-        if formatNibble == 0b0000:
-            if extra == 0b0000:
-                result = None
-            elif extra == 0b1000:
-                result = False
-            elif extra == 0b1001:
-                result = True
-            elif extra == 0b1111:
-                pass  # fill byte
-            else:
-                raise InvalidPlistException(
-                    "Invalid object found at offset: {0}".format(
-                        self.currentOffset - 1))
-        # int
-        elif formatNibble == 0b0001:
-            extra = proc_extra(extra)
-            result = self.readInteger(pow(2, extra))
-        # real
-        elif formatNibble == 0b0010:
-            extra = proc_extra(extra)
-            result = self.readReal(extra)
-        # date
-        elif formatNibble == 0b0011 and extra == 0b0011:
-            result = self.readDate()
-        # data
-        elif formatNibble == 0b0100:
-            extra = proc_extra(extra)
-            result = self.readData(extra)
-        # ascii string
-        elif formatNibble == 0b0101:
-            extra = proc_extra(extra)
-            result = self.readAsciiString(extra)
-        # Unicode string
-        elif formatNibble == 0b0110:
-            extra = proc_extra(extra)
-            result = self.readUnicode(extra)
-        # uid
-        elif formatNibble == 0b1000:
-            result = self.readUid(extra)
-        # array
-        elif formatNibble == 0b1010:
-            extra = proc_extra(extra)
-            result = self.readArray(extra)
-        # set
-        elif formatNibble == 0b1100:
-            extra = proc_extra(extra)
-            result = set(self.readArray(extra))
-        # dict
-        elif formatNibble == 0b1101:
-            extra = proc_extra(extra)
-            result = self.readDict(extra)
-        else:
-            raise InvalidPlistException(
-                "Invalid object found: {{format: {0}, extra: {1}}}".format(
-                    bin(formatNibble), bin(extra)))
-        return result
-    
-    def readInteger(self, length):
-        """
-        Public method to read an Integer object.
-        
-        @param length length of the object (integer)
-        @return integer object
-        """
-        result = 0
-        original_offset = self.currentOffset
-        data = self.contents[self.currentOffset:self.currentOffset + length]
-        result = self.getSizedInteger(data, length)
-        self.currentOffset = original_offset + length
-        return result
-    
-    def readReal(self, length):
-        """
-        Public method to read a Real object.
-        
-        @param length length of the object (integer)
-        @return float object
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        """
-        result = 0.0
-        to_read = pow(2, length)
-        data = self.contents[self.currentOffset:self.currentOffset + to_read]
-        if length == 2:  # 4 bytes
-            result = unpack('>f', data)[0]
-        elif length == 3:  # 8 bytes
-            result = unpack('>d', data)[0]
-        else:
-            raise InvalidPlistException(
-                "Unknown real of length {0} bytes".format(to_read))
-        return result
-    
-    def readRefs(self, count):
-        """
-        Public method to read References.
-        
-        @param count amount of the references (integer)
-        @return list of references (list of integers)
-        """
-        refs = []
-        i = 0
-        while i < count:
-            fragment = self.contents[
-                self.currentOffset:
-                self.currentOffset + self.trailer.objectRefSize]
-            ref = self.getSizedInteger(fragment, len(fragment))
-            refs.append(ref)
-            self.currentOffset += self.trailer.objectRefSize
-            i += 1
-        return refs
-    
-    def readArray(self, count):
-        """
-        Public method to read an Array object.
-        
-        @param count number of array elements (integer)
-        @return list of unpickled objects
-        """
-        result = []
-        values = self.readRefs(count)
-        i = 0
-        while i < len(values):
-            self.setCurrentOffsetToObjectNumber(values[i])
-            value = self.readObject()
-            result.append(value)
-            i += 1
-        return result
-    
-    def readDict(self, count):
-        """
-        Public method to read a Dictionary object.
-        
-        @param count number of dictionary elements (integer)
-        @return dictionary of unpickled objects
-        """
-        result = {}
-        keys = self.readRefs(count)
-        values = self.readRefs(count)
-        i = 0
-        while i < len(keys):
-            self.setCurrentOffsetToObjectNumber(keys[i])
-            key = self.readObject()
-            self.setCurrentOffsetToObjectNumber(values[i])
-            value = self.readObject()
-            result[key] = value
-            i += 1
-        return result
-    
-    def readAsciiString(self, length):
-        """
-        Public method to read an ASCII encoded string.
-        
-        @param length length of the string (integer)
-        @return ASCII encoded string
-        """
-        result = str(unpack(
-            "!{0}s".format(length),
-            self.contents[self.currentOffset:self.currentOffset + length])[0],
-            encoding="ascii")
-        self.currentOffset += length
-        return result
-    
-    def readUnicode(self, length):
-        """
-        Public method to read an Unicode encoded string.
-        
-        @param length length of the string (integer)
-        @return unicode encoded string
-        """
-        actual_length = length * 2
-        data = self.contents[
-            self.currentOffset:self.currentOffset + actual_length]
-        self.currentOffset += actual_length
-        return data.decode('utf_16_be')
-    
-    def readDate(self):
-        """
-        Public method to read a date.
-        
-        @return date object (datetime.datetime)
-        """
-        global apple_reference_date_offset
-        result = unpack(
-            ">d",
-            self.contents[self.currentOffset:self.currentOffset + 8])[0]
-        result = datetime.datetime.utcfromtimestamp(
-            result + apple_reference_date_offset)
-        self.currentOffset += 8
-        return result
-    
-    def readData(self, length):
-        """
-        Public method to read some bytes.
-        
-        @param length number of bytes to read (integer)
-        @return Data object
-        """
-        result = self.contents[self.currentOffset:self.currentOffset + length]
-        self.currentOffset += length
-        return Data(result)
-    
-    def readUid(self, length):
-        """
-        Public method to read a UID.
-        
-        @param length length of the UID (integer)
-        @return Uid object
-        """
-        return Uid(self.readInteger(length + 1))
-    
-    def getSizedInteger(self, data, length):
-        """
-        Public method to read an integer of a specific size.
-        
-        @param data data to extract the integer from (bytes)
-        @param length length of the integer (integer)
-        @return read integer (integer)
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        """
-        result = 0
-        # 1, 2, and 4 byte integers are unsigned
-        if length == 1:
-            result = unpack('>B', data)[0]
-        elif length == 2:
-            result = unpack('>H', data)[0]
-        elif length == 4:
-            result = unpack('>L', data)[0]
-        elif length == 8:
-            result = unpack('>q', data)[0]
-        else:
-            raise InvalidPlistException(
-                "Encountered integer longer than 8 bytes.")
-        return result
-
-
-class HashableWrapper(object):
-    """
-    Class wrapping a hashable value.
-    """
-    def __init__(self, value):
-        """
-        Constructor
-        
-        @param value object value
-        """
-        self.value = value
-
-    def __repr__(self):
-        """
-        Special method to generate a representation of the object.
-        
-        @return object representation (string)
-        """
-        return "<HashableWrapper: {0}>".format([self.value])
-
-
-class BoolWrapper(object):
-    """
-    Class wrapping a boolean value.
-    """
-    def __init__(self, value):
-        """
-        Constructor
-        
-        @param value object value (boolean)
-        """
-        self.value = value
-
-    def __repr__(self):
-        """
-        Special method to generate a representation of the object.
-        
-        @return object representation (string)
-        """
-        return "<BoolWrapper: {0}>".format(self.value)
-
-
-class PlistWriter(object):
-    """
-    Class implementing the plist writer.
-    """
-    header = b'bplist00bybiplist1.0'
-    file = None
-    byteCounts = None
-    trailer = None
-    computedUniques = None
-    writtenReferences = None
-    referencePositions = None
-    wrappedTrue = None
-    wrappedFalse = None
-    
-    def __init__(self, file):
-        """
-        Constructor
-        
-        @param file file to write the plist data to (file object)
-        """
-        self.reset()
-        self.file = file
-        self.wrappedTrue = BoolWrapper(True)
-        self.wrappedFalse = BoolWrapper(False)
-
-    def reset(self):
-        """
-        Public method to reset the instance object.
-        """
-        self.byteCounts = PlistByteCounts(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
-        self.trailer = PlistTrailer(0, 0, 0, 0, 0)
-        
-        # A set of all the uniques which have been computed.
-        self.computedUniques = set()
-        # A list of all the uniques which have been written.
-        self.writtenReferences = {}
-        # A dict of the positions of the written uniques.
-        self.referencePositions = {}
-        
-    def positionOfObjectReference(self, obj):
-        """
-        Public method to get the position of an object.
-        
-        If the given object has been written already, return its
-        position in the offset table. Otherwise, return None.
-        
-        @param obj object
-        @return position of the object (integer)
-        """
-        return self.writtenReferences.get(obj)
-        
-    def writeRoot(self, root):
-        """
-        Public method to write an object to a plist file.
-        
-        Strategy is:
-        <ul>
-        <li>write header</li>
-        <li>wrap root object so everything is hashable</li>
-        <li>compute size of objects which will be written
-          <ul>
-          <li>need to do this in order to know how large the object refs
-            will be in the list/dict/set reference lists</li>
-        </ul></li>
-        <li>write objects
-          <ul>
-          <li>keep objects in writtenReferences</li>
-          <li>keep positions of object references in referencePositions</li>
-          <li>write object references with the length computed previously</li>
-        </ul></li>
-        <li>computer object reference length</li>
-        <li>write object reference positions</li>
-        <li>write trailer</li>
-        </ul>
-        
-        @param root reference to the object to be written
-        """
-        output = self.header
-        wrapped_root = self.wrapRoot(root)
-        should_reference_root = True
-        self.computeOffsets(
-            wrapped_root, asReference=should_reference_root, isRoot=True)
-        self.trailer = self.trailer._replace(
-            **{'objectRefSize': self.intSize(len(self.computedUniques))})
-        (_, output) = self.writeObjectReference(wrapped_root, output)
-        output = self.writeObject(
-            wrapped_root, output, setReferencePosition=True)
-        
-        # output size at this point is an upper bound on how big the
-        # object reference offsets need to be.
-        self.trailer = self.trailer._replace(**{
-            'offsetSize': self.intSize(len(output)),
-            'offsetCount': len(self.computedUniques),
-            'offsetTableOffset': len(output),
-            'topLevelObjectNumber': 0
-        })
-        
-        output = self.writeOffsetTable(output)
-        output += pack('!xxxxxxBBQQQ', *self.trailer)
-        self.file.write(output)
-    
-    def wrapRoot(self, root):
-        """
-        Public method to generate object wrappers.
-        
-        @param root object to be wrapped
-        @return wrapped object
-        """
-        if isinstance(root, bool):
-            if root is True:
-                return self.wrappedTrue
-            else:
-                return self.wrappedFalse
-        elif isinstance(root, set):
-            n = set()
-            for value in root:
-                n.add(self.wrapRoot(value))
-            return HashableWrapper(n)
-        elif isinstance(root, dict):
-            n = {}
-            for key, value in root.items():
-                n[self.wrapRoot(key)] = self.wrapRoot(value)
-            return HashableWrapper(n)
-        elif isinstance(root, list):
-            n = []
-            for value in root:
-                n.append(self.wrapRoot(value))
-            return HashableWrapper(n)
-        elif isinstance(root, tuple):
-            n = tuple(self.wrapRoot(value) for value in root)
-            return HashableWrapper(n)
-        else:
-            return root
-
-    def incrementByteCount(self, field, incr=1):
-        """
-        Public method to increment the byte count.
-        
-        @param field field to evaluate
-        @param incr byte count increment (integer)
-        """
-        self.byteCounts = self.byteCounts._replace(
-            **{field: self.byteCounts.__getattribute__(field) + incr})
-
-    def __checkKey(self, key):
-        """
-        Private method to check the validity of a key.
-        
-        @param key key to be checked
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        """
-        if key is None:
-            raise InvalidPlistException(
-                'Dictionary keys cannot be null in plists.')
-        elif isinstance(key, Data):
-            raise InvalidPlistException(
-                'Data cannot be dictionary keys in plists.')
-        elif not isinstance(key, str):
-            raise InvalidPlistException('Keys must be strings.')
-    
-    def __processSize(self, size):
-        """
-        Private method to process a size.
-        
-        @param size size value to be processed (int)
-        @return processed size (int)
-        """
-        if size > 0b1110:
-            size += self.intSize(size)
-        return size
-    
-    def computeOffsets(self, obj, asReference=False, isRoot=False):
-        """
-        Public method to compute offsets of an object.
-        
-        @param obj plist object
-        @param asReference flag indicating offsets as references (boolean)
-        @param isRoot flag indicating a root object (boolean)
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        """
-        # If this should be a reference, then we keep a record of it in the
-        # uniques table.
-        if asReference:
-            if obj in self.computedUniques:
-                return
-            else:
-                self.computedUniques.add(obj)
-        
-        if obj is None:
-            self.incrementByteCount('nullBytes')
-        elif isinstance(obj, BoolWrapper):
-            self.incrementByteCount('boolBytes')
-        elif isinstance(obj, Uid):
-            size = self.intSize(obj)
-            self.incrementByteCount('uidBytes', incr=1 + size)
-        elif isinstance(obj, int):
-            size = self.intSize(obj)
-            self.incrementByteCount('intBytes', incr=1 + size)
-        elif isinstance(obj, (float)):
-            size = self.realSize(obj)
-            self.incrementByteCount('realBytes', incr=1 + size)
-        elif isinstance(obj, datetime.datetime):
-            self.incrementByteCount('dateBytes', incr=2)
-        elif isinstance(obj, Data):
-            size = self.__processSize(len(obj))
-            self.incrementByteCount('dataBytes', incr=1 + size)
-        elif isinstance(obj, str):
-            size = self.__processSize(len(obj))
-            self.incrementByteCount('stringBytes', incr=1 + size)
-        elif isinstance(obj, HashableWrapper):
-            obj = obj.value
-            if isinstance(obj, set):
-                size = self.__processSize(len(obj))
-                self.incrementByteCount('setBytes', incr=1 + size)
-                for value in obj:
-                    self.computeOffsets(value, asReference=True)
-            elif isinstance(obj, (list, tuple)):
-                size = self.__processSize(len(obj))
-                self.incrementByteCount('arrayBytes', incr=1 + size)
-                for value in obj:
-                    self.computeOffsets(value, asReference=True)
-            elif isinstance(obj, dict):
-                size = self.__processSize(len(obj))
-                self.incrementByteCount('dictBytes', incr=1 + size)
-                for key, value in obj.items():
-                    self.__checkKey(key)
-                    self.computeOffsets(key, asReference=True)
-                    self.computeOffsets(value, asReference=True)
-        else:
-            raise InvalidPlistException("Unknown object type.")
-
-    def writeObjectReference(self, obj, output):
-        """
-        Public method to write an object reference.
-        
-        Tries to write an object reference, adding it to the references
-        table. Does not write the actual object bytes or set the reference
-        position. Returns a tuple of whether the object was a new reference
-        (True if it was, False if it already was in the reference table)
-        and the new output.
-        
-        @param obj object to be written
-        @param output output stream to append the object to
-        @return flag indicating a new reference and the new output
-        """
-        position = self.positionOfObjectReference(obj)
-        if position is None:
-            self.writtenReferences[obj] = len(self.writtenReferences)
-            output += self.binaryInt(len(self.writtenReferences) - 1,
-                                     bytes=self.trailer.objectRefSize)
-            return (True, output)
-        else:
-            output += self.binaryInt(
-                position, bytes=self.trailer.objectRefSize)
-            return (False, output)
-
-    def writeObject(self, obj, output, setReferencePosition=False):
-        """
-        Public method to serialize the given object to the output.
-        
-        @param obj object to be serialized
-        @param output output to be serialized to (bytes)
-        @param setReferencePosition flag indicating, that the reference
-            position the object was written to shall be recorded (boolean)
-        @return new output
-        """
-        def proc_variable_length(formatNibble, length):
-            result = ''
-            if length > 0b1110:
-                result += pack('!B', (formatNibble << 4) | 0b1111)
-                result = self.writeObject(length, result)
-            else:
-                result += pack('!B', (formatNibble << 4) | length)
-            return result
-        
-        if setReferencePosition:
-            self.referencePositions[obj] = len(output)
-        
-        if obj is None:
-            output += pack('!B', 0b00000000)
-        elif isinstance(obj, BoolWrapper):
-            if obj.value is False:
-                output += pack('!B', 0b00001000)
-            else:
-                output += pack('!B', 0b00001001)
-        elif isinstance(obj, Uid):
-            size = self.intSize(obj)
-            output += pack('!B', (0b1000 << 4) | size - 1)
-            output += self.binaryInt(obj)
-        elif isinstance(obj, int):
-            length = self.intSize(obj)
-            root = math.log(length, 2)
-            output += pack('!B', (0b0001 << 4) | int(root))
-            output += self.binaryInt(obj)
-        elif isinstance(obj, float):
-            # just use doubles
-            output += pack('!B', (0b0010 << 4) | 3)
-            output += self.binaryReal(obj)
-        elif isinstance(obj, datetime.datetime):
-            timestamp = calendar.timegm(obj.utctimetuple())
-            timestamp -= apple_reference_date_offset
-            output += pack('!B', 0b00110011)
-            output += pack('!d', float(timestamp))
-        elif isinstance(obj, Data):
-            output += proc_variable_length(0b0100, len(obj))
-            output += obj
-        elif isinstance(obj, str):
-            length = obj.encode('utf_16_be')
-            output += proc_variable_length(0b0110, len(length) / 2)
-            output += length
-        elif isinstance(obj, HashableWrapper):
-            obj = obj.value
-            if isinstance(obj, (set, list, tuple)):
-                if isinstance(obj, set):
-                    output += proc_variable_length(0b1100, len(obj))
-                else:
-                    output += proc_variable_length(0b1010, len(obj))
-            
-                objectsToWrite = []
-                for objRef in obj:
-                    (isNew, output) = self.writeObjectReference(objRef, output)
-                    if isNew:
-                        objectsToWrite.append(objRef)
-                for objRef in objectsToWrite:
-                    output = self.writeObject(
-                        objRef, output, setReferencePosition=True)
-            elif isinstance(obj, dict):
-                output += proc_variable_length(0b1101, len(obj))
-                keys = []
-                values = []
-                objectsToWrite = []
-                for key, value in obj.items():
-                    keys.append(key)
-                    values.append(value)
-                for key in keys:
-                    (isNew, output) = self.writeObjectReference(key, output)
-                    if isNew:
-                        objectsToWrite.append(key)
-                for value in values:
-                    (isNew, output) = self.writeObjectReference(value, output)
-                    if isNew:
-                        objectsToWrite.append(value)
-                for objRef in objectsToWrite:
-                    output = self.writeObject(
-                        objRef, output, setReferencePosition=True)
-        return output
-    
-    def writeOffsetTable(self, output):
-        """
-        Public method to write all of the object reference offsets.
-        
-        @param output current output (bytes)
-        @return new output (bytes)
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        """
-        all_positions = []
-        writtenReferences = list(self.writtenReferences.items())
-        writtenReferences.sort(key=lambda x: x[1])
-        for obj, _order in writtenReferences:
-            position = self.referencePositions.get(obj)
-            if position is None:
-                raise InvalidPlistException(
-                    "Error while writing offsets table. Object not found. {0}"
-                    .format(obj))
-            output += self.binaryInt(position, self.trailer.offsetSize)
-            all_positions.append(position)
-        return output
-    
-    def binaryReal(self, obj):
-        """
-        Public method to pack a real object.
-        
-        @param obj real to be packed
-        @return serialized object (bytes)
-        """
-        # just use doubles
-        result = pack('>d', obj)
-        return result
-    
-    def binaryInt(self, obj, length=None):
-        """
-        Public method to pack an integer object.
-        
-        @param obj integer to be packed
-        @param length length the integer should be packed into (integer)
-        @return serialized object (bytes)
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        """
-        result = ''
-        if length is None:
-            length = self.intSize(obj)
-        if length == 1:
-            result += pack('>B', obj)
-        elif length == 2:
-            result += pack('>H', obj)
-        elif length == 4:
-            result += pack('>L', obj)
-        elif length == 8:
-            result += pack('>q', obj)
-        else:
-            raise InvalidPlistException(
-                "Core Foundation can't handle integers with size greater"
-                " than 8 bytes.")
-        return result
-    
-    def intSize(self, obj):
-        """
-        Public method to determine the number of bytes necessary to store the
-        given integer.
-        
-        @param obj integer object
-        @return number of bytes required (integer)
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        """
-        # SIGNED
-        if obj < 0:  # Signed integer, always 8 bytes
-            return 8
-        # UNSIGNED
-        elif obj <= 0xFF:  # 1 byte
-            return 1
-        elif obj <= 0xFFFF:  # 2 bytes
-            return 2
-        elif obj <= 0xFFFFFFFF:  # 4 bytes
-            return 4
-        # SIGNED
-        # 0x7FFFFFFFFFFFFFFF is the max.
-        elif obj <= 0x7FFFFFFFFFFFFFFF:  # 8 bytes
-            return 8
-        else:
-            raise InvalidPlistException(
-                "Core Foundation can't handle integers with size greater"
-                " than 8 bytes.")
-    
-    def realSize(self, obj):
-        """
-        Public method to determine the number of bytes necessary to store the
-        given real.
-        
-        @param obj real object
-        @return number of bytes required (integer)
-        """
-        return 8
--- a/eric6/WebBrowser/Bookmarks/BookmarksImporters/SafariImporter.py	Sat Aug 15 19:17:47 2020 +0200
+++ b/eric6/WebBrowser/Bookmarks/BookmarksImporters/SafariImporter.py	Tue Aug 18 12:50:51 2020 +0200
@@ -7,8 +7,8 @@
 Module implementing an importer for Apple Safari bookmarks.
 """
 
-
 import os
+import plistlib
 
 from PyQt5.QtCore import QCoreApplication, QDate, Qt
 
@@ -17,8 +17,6 @@
 import UI.PixmapCache
 import Globals
 
-from Utilities import binplistlib
-
 
 def getImporterInfo(sourceId):
     """
@@ -102,8 +100,10 @@
         @return imported bookmarks (BookmarkNode)
         """
         try:
-            bookmarksDict = binplistlib.readPlist(self.__fileName)
-        except binplistlib.InvalidPlistException as err:
+            f = open(self.__fileName, "rb")
+            bookmarksDict = plistlib.load(f)
+            f.close()
+        except (plistlib.InvalidFileException, EnvironmentError) as err:
             self._error = True
             self._errorString = self.tr(
                 "Bookmarks file cannot be read.\nReason: {0}".format(str(err)))

eric ide

mercurial