From 20a6757d56a146c0bada6170b873dd89aa53ff80 Mon Sep 17 00:00:00 2001 From: "kenneth.skovhede@gmail.com" Date: Thu, 19 Jun 2008 19:34:31 +0000 Subject: [PATCH] Added all the thirdparty code. git-svn-id: https://duplicati.googlecode.com/svn/trunk@11 59da171f-624f-0410-aa54-27559c288bec --- Duplicati.sln | 6 - Update DEBUG Environment.bat | 6 + Update RELEASE Environment.bat | 6 + thirdparty/GnuPGInterface/GnuPGInterface.py | 729 +++ thirdparty/GnuPGInterface/Homepage.txt | 1 + thirdparty/GnuPGInterface/License.txt | 504 ++ thirdparty/Readme.txt | 14 + thirdparty/SQLite/Bin/Homepage.txt | 1 + thirdparty/SQLite/Bin/License.txt | 34 + thirdparty/SQLite/Bin/sqlite3.dll | Bin 0 -> 408724 bytes thirdparty/SQLite/Dll for .Net/Homepage.txt | 1 + thirdparty/SQLite/Dll for .Net/License.txt | 6 + .../Dll for .Net/System.Data.SQLite.DLL | Bin 0 -> 619520 bytes thirdparty/boto/Homepage.txt | 1 + thirdparty/boto/License.txt | 15 + thirdparty/boto/__init__.py | 161 + thirdparty/boto/connection.py | 437 ++ thirdparty/boto/contrib/__init__.py | 22 + thirdparty/boto/contrib/m2helpers.py | 52 + thirdparty/boto/contrib/ymlmessage.py | 52 + thirdparty/boto/ec2/__init__.py | 23 + thirdparty/boto/ec2/address.py | 51 + thirdparty/boto/ec2/connection.py | 426 ++ thirdparty/boto/ec2/image.py | 174 + thirdparty/boto/ec2/instance.py | 200 + thirdparty/boto/ec2/keypair.py | 54 + thirdparty/boto/ec2/securitygroup.py | 203 + thirdparty/boto/ec2/zone.py | 49 + thirdparty/boto/exception.py | 114 + thirdparty/boto/fps/__init__.py | 23 + thirdparty/boto/fps/connection.py | 171 + thirdparty/boto/handler.py | 46 + thirdparty/boto/mapreduce/__init__.py | 23 + thirdparty/boto/mapreduce/lqs.py | 152 + thirdparty/boto/mapreduce/partitiondb.py | 172 + thirdparty/boto/mapreduce/pdb_delete | 135 + thirdparty/boto/mapreduce/pdb_describe | 124 + thirdparty/boto/mapreduce/pdb_revert | 135 + thirdparty/boto/mapreduce/pdb_upload | 172 + thirdparty/boto/mapreduce/queuetools.py | 66 + thirdparty/boto/mashups/__init__.py | 23 + thirdparty/boto/mashups/interactive.py | 97 + thirdparty/boto/mashups/iobject.py | 106 + thirdparty/boto/mashups/order.py | 199 + thirdparty/boto/mashups/server.py | 345 ++ thirdparty/boto/mturk/__init__.py | 23 + thirdparty/boto/mturk/connection.py | 197 + thirdparty/boto/mturk/notification.py | 92 + thirdparty/boto/mturk/price.py | 48 + thirdparty/boto/mturk/question.py | 267 + thirdparty/boto/pyami/__init__.py | 22 + thirdparty/boto/pyami/bootstrap.py | 121 + thirdparty/boto/pyami/config.py | 141 + thirdparty/boto/pyami/copybot.cfg | 47 + thirdparty/boto/pyami/copybot.py | 86 + thirdparty/boto/pyami/helloworld.py | 28 + thirdparty/boto/pyami/installers/__init__.py | 64 + .../boto/pyami/installers/ubuntu/__init__.py | 22 + .../boto/pyami/installers/ubuntu/apache.py | 36 + .../boto/pyami/installers/ubuntu/installer.py | 82 + .../boto/pyami/installers/ubuntu/mysql.py | 76 + .../boto/pyami/installers/ubuntu/trac.py | 137 + thirdparty/boto/pyami/launch_ami.py | 176 + thirdparty/boto/pyami/scriptbase.py | 58 + thirdparty/boto/pyami/startup.py | 59 + thirdparty/boto/resultset.py | 98 + thirdparty/boto/s3/__init__.py | 31 + thirdparty/boto/s3/acl.py | 146 + thirdparty/boto/s3/bucket.py | 435 ++ thirdparty/boto/s3/bucketlistresultset.py | 55 + thirdparty/boto/s3/connection.py | 225 + thirdparty/boto/s3/key.py | 728 +++ thirdparty/boto/s3/prefix.py | 35 + thirdparty/boto/s3/user.py | 49 + thirdparty/boto/sdb/__init__.py | 23 + thirdparty/boto/sdb/connection.py | 242 + thirdparty/boto/sdb/domain.py | 74 + thirdparty/boto/sdb/item.py | 111 + thirdparty/boto/sdb/persist/__init__.py | 83 + thirdparty/boto/sdb/persist/checker.py | 303 + thirdparty/boto/sdb/persist/object.py | 196 + thirdparty/boto/sdb/persist/property.py | 354 ++ thirdparty/boto/sdb/persist/test_persist.py | 138 + thirdparty/boto/sdb/queryresultset.py | 50 + thirdparty/boto/services/__init__.py | 23 + thirdparty/boto/services/bs.py | 176 + thirdparty/boto/services/message.py | 59 + thirdparty/boto/services/result.py | 140 + thirdparty/boto/services/service.py | 165 + thirdparty/boto/services/servicedef.py | 91 + thirdparty/boto/services/sonofmmm.cfg | 43 + thirdparty/boto/services/sonofmmm.py | 80 + thirdparty/boto/services/submit.py | 87 + thirdparty/boto/sqs/20070501/__init__.py | 27 + thirdparty/boto/sqs/20070501/attributes.py | 45 + thirdparty/boto/sqs/20070501/connection.py | 389 ++ thirdparty/boto/sqs/20070501/message.py | 180 + thirdparty/boto/sqs/20070501/queue.py | 343 ++ thirdparty/boto/sqs/20070501/readme.txt | 6 + thirdparty/boto/sqs/__init__.py | 31 + thirdparty/boto/sqs/attributes.py | 46 + thirdparty/boto/sqs/connection.py | 129 + thirdparty/boto/sqs/jsonmessage.py | 37 + thirdparty/boto/sqs/message.py | 206 + thirdparty/boto/sqs/queue.py | 316 ++ thirdparty/boto/tests/__init__.py | 23 + thirdparty/boto/tests/test.py | 81 + thirdparty/boto/tests/test_ec2connection.py | 154 + thirdparty/boto/tests/test_s3connection.py | 150 + thirdparty/boto/tests/test_sdbconnection.py | 90 + thirdparty/boto/tests/test_sqsconnection.py | 142 + thirdparty/boto/utils.py | 457 ++ thirdparty/duplicity/Homepage.txt | 1 + thirdparty/duplicity/License.txt | 674 +++ thirdparty/duplicity/duplicity.py | 470 ++ thirdparty/duplicity/duplicity/__init__.py | 0 thirdparty/duplicity/duplicity/_librsync.pyd | Bin 0 -> 28160 bytes thirdparty/duplicity/duplicity/backends.py | 1039 ++++ thirdparty/duplicity/duplicity/collections.py | 836 +++ thirdparty/duplicity/duplicity/commandline.py | 476 ++ thirdparty/duplicity/duplicity/diffdir.py | 551 ++ thirdparty/duplicity/duplicity/dup_temp.py | 120 + thirdparty/duplicity/duplicity/dup_time.py | 263 + thirdparty/duplicity/duplicity/file_naming.py | 269 + thirdparty/duplicity/duplicity/globals.py | 116 + thirdparty/duplicity/duplicity/gpg.py | 332 ++ thirdparty/duplicity/duplicity/lazy.py | 370 ++ thirdparty/duplicity/duplicity/librsync.py | 194 + thirdparty/duplicity/duplicity/log.py | 63 + thirdparty/duplicity/duplicity/manifest.py | 311 ++ thirdparty/duplicity/duplicity/misc.py | 171 + thirdparty/duplicity/duplicity/patchdir.py | 506 ++ thirdparty/duplicity/duplicity/path.py | 665 +++ thirdparty/duplicity/duplicity/robust.py | 56 + thirdparty/duplicity/duplicity/selection.py | 548 ++ thirdparty/duplicity/duplicity/static.py | 43 + thirdparty/duplicity/duplicity/statistics.py | 290 + thirdparty/duplicity/duplicity/tarfile.py | 1702 ++++++ thirdparty/duplicity/duplicity/tempdir.py | 239 + .../duplicity/duplicity/urlparse_2_5.py | 385 ++ thirdparty/gpg/Homepage.txt | 1 + thirdparty/gpg/License.txt | 676 +++ thirdparty/gpg/gpg.exe | Bin 0 -> 870400 bytes thirdparty/gpg/iconv.dll | Bin 0 -> 892928 bytes thirdparty/python25/DLLs/_bsddb.pyd | Bin 0 -> 753664 bytes thirdparty/python25/DLLs/_ctypes.pyd | Bin 0 -> 81920 bytes thirdparty/python25/DLLs/_ctypes_test.pyd | Bin 0 -> 11264 bytes thirdparty/python25/DLLs/_elementtree.pyd | Bin 0 -> 135168 bytes thirdparty/python25/DLLs/_hashlib.pyd | Bin 0 -> 323584 bytes thirdparty/python25/DLLs/_msi.pyd | Bin 0 -> 53248 bytes thirdparty/python25/DLLs/_socket.pyd | Bin 0 -> 53248 bytes thirdparty/python25/DLLs/_sqlite3.pyd | Bin 0 -> 49152 bytes thirdparty/python25/DLLs/_ssl.pyd | Bin 0 -> 655360 bytes thirdparty/python25/DLLs/_testcapi.pyd | Bin 0 -> 16384 bytes thirdparty/python25/DLLs/_tkinter.pyd | Bin 0 -> 40960 bytes thirdparty/python25/DLLs/bz2.pyd | Bin 0 -> 77824 bytes thirdparty/python25/DLLs/py.ico | Bin 0 -> 19790 bytes thirdparty/python25/DLLs/pyc.ico | Bin 0 -> 19790 bytes thirdparty/python25/DLLs/pyexpat.pyd | Bin 0 -> 135168 bytes thirdparty/python25/DLLs/select.pyd | Bin 0 -> 7680 bytes thirdparty/python25/DLLs/sqlite3.dll | Bin 0 -> 260096 bytes thirdparty/python25/DLLs/tcl84.dll | Bin 0 -> 576000 bytes thirdparty/python25/DLLs/tclpip84.dll | Bin 0 -> 5120 bytes thirdparty/python25/DLLs/tix84.dll | Bin 0 -> 266240 bytes thirdparty/python25/DLLs/tk84.dll | Bin 0 -> 1038848 bytes thirdparty/python25/DLLs/unicodedata.pyd | Bin 0 -> 475136 bytes thirdparty/python25/DLLs/winsound.pyd | Bin 0 -> 6656 bytes thirdparty/python25/Homepage.txt | 1 + thirdparty/python25/Lib/UserDict.py | 175 + thirdparty/python25/Lib/__future__.py | 116 + thirdparty/python25/Lib/atexit.py | 62 + thirdparty/python25/Lib/base64.py | 359 ++ thirdparty/python25/Lib/codecs.py | 1034 ++++ thirdparty/python25/Lib/copy.py | 414 ++ thirdparty/python25/Lib/copy_reg.py | 200 + thirdparty/python25/Lib/encodings/__init__.py | 154 + thirdparty/python25/Lib/encodings/aliases.py | 508 ++ thirdparty/python25/Lib/encodings/ascii.py | 50 + .../python25/Lib/encodings/base64_codec.py | 79 + thirdparty/python25/Lib/encodings/big5.py | 39 + .../python25/Lib/encodings/big5hkscs.py | 39 + .../python25/Lib/encodings/bz2_codec.py | 102 + thirdparty/python25/Lib/encodings/charmap.py | 69 + thirdparty/python25/Lib/encodings/cp037.py | 307 ++ thirdparty/python25/Lib/encodings/cp1006.py | 307 ++ thirdparty/python25/Lib/encodings/cp1026.py | 307 ++ thirdparty/python25/Lib/encodings/cp1140.py | 307 ++ thirdparty/python25/Lib/encodings/cp1250.py | 307 ++ thirdparty/python25/Lib/encodings/cp1251.py | 307 ++ thirdparty/python25/Lib/encodings/cp1252.py | 307 ++ thirdparty/python25/Lib/encodings/cp1253.py | 307 ++ thirdparty/python25/Lib/encodings/cp1254.py | 307 ++ thirdparty/python25/Lib/encodings/cp1255.py | 307 ++ thirdparty/python25/Lib/encodings/cp1256.py | 307 ++ thirdparty/python25/Lib/encodings/cp1257.py | 307 ++ thirdparty/python25/Lib/encodings/cp1258.py | 307 ++ thirdparty/python25/Lib/encodings/cp424.py | 307 ++ thirdparty/python25/Lib/encodings/cp437.py | 698 +++ thirdparty/python25/Lib/encodings/cp500.py | 307 ++ thirdparty/python25/Lib/encodings/cp737.py | 698 +++ thirdparty/python25/Lib/encodings/cp775.py | 697 +++ thirdparty/python25/Lib/encodings/cp850.py | 698 +++ thirdparty/python25/Lib/encodings/cp852.py | 698 +++ thirdparty/python25/Lib/encodings/cp855.py | 698 +++ thirdparty/python25/Lib/encodings/cp856.py | 307 ++ thirdparty/python25/Lib/encodings/cp857.py | 694 +++ thirdparty/python25/Lib/encodings/cp860.py | 698 +++ thirdparty/python25/Lib/encodings/cp861.py | 698 +++ thirdparty/python25/Lib/encodings/cp862.py | 698 +++ thirdparty/python25/Lib/encodings/cp863.py | 698 +++ thirdparty/python25/Lib/encodings/cp864.py | 690 +++ thirdparty/python25/Lib/encodings/cp865.py | 698 +++ thirdparty/python25/Lib/encodings/cp866.py | 698 +++ thirdparty/python25/Lib/encodings/cp869.py | 689 +++ thirdparty/python25/Lib/encodings/cp874.py | 307 ++ thirdparty/python25/Lib/encodings/cp875.py | 307 ++ thirdparty/python25/Lib/encodings/cp932.py | 39 + thirdparty/python25/Lib/encodings/cp949.py | 39 + thirdparty/python25/Lib/encodings/cp950.py | 39 + .../python25/Lib/encodings/euc_jis_2004.py | 39 + .../python25/Lib/encodings/euc_jisx0213.py | 39 + thirdparty/python25/Lib/encodings/euc_jp.py | 39 + thirdparty/python25/Lib/encodings/euc_kr.py | 39 + thirdparty/python25/Lib/encodings/gb18030.py | 39 + thirdparty/python25/Lib/encodings/gb2312.py | 39 + thirdparty/python25/Lib/encodings/gbk.py | 39 + .../python25/Lib/encodings/hex_codec.py | 79 + .../python25/Lib/encodings/hp_roman8.py | 152 + thirdparty/python25/Lib/encodings/hz.py | 39 + thirdparty/python25/Lib/encodings/idna.py | 288 + .../python25/Lib/encodings/iso2022_jp.py | 39 + .../python25/Lib/encodings/iso2022_jp_1.py | 39 + .../python25/Lib/encodings/iso2022_jp_2.py | 39 + .../python25/Lib/encodings/iso2022_jp_2004.py | 39 + .../python25/Lib/encodings/iso2022_jp_3.py | 39 + .../python25/Lib/encodings/iso2022_jp_ext.py | 39 + .../python25/Lib/encodings/iso2022_kr.py | 39 + .../python25/Lib/encodings/iso8859_1.py | 307 ++ .../python25/Lib/encodings/iso8859_10.py | 307 ++ .../python25/Lib/encodings/iso8859_11.py | 307 ++ .../python25/Lib/encodings/iso8859_13.py | 307 ++ .../python25/Lib/encodings/iso8859_14.py | 307 ++ .../python25/Lib/encodings/iso8859_15.py | 307 ++ .../python25/Lib/encodings/iso8859_16.py | 307 ++ .../python25/Lib/encodings/iso8859_2.py | 307 ++ .../python25/Lib/encodings/iso8859_3.py | 307 ++ .../python25/Lib/encodings/iso8859_4.py | 307 ++ .../python25/Lib/encodings/iso8859_5.py | 307 ++ .../python25/Lib/encodings/iso8859_6.py | 307 ++ .../python25/Lib/encodings/iso8859_7.py | 307 ++ .../python25/Lib/encodings/iso8859_8.py | 307 ++ .../python25/Lib/encodings/iso8859_9.py | 307 ++ thirdparty/python25/Lib/encodings/johab.py | 39 + thirdparty/python25/Lib/encodings/koi8_r.py | 307 ++ thirdparty/python25/Lib/encodings/koi8_u.py | 307 ++ thirdparty/python25/Lib/encodings/latin_1.py | 50 + .../python25/Lib/encodings/mac_arabic.py | 698 +++ .../python25/Lib/encodings/mac_centeuro.py | 307 ++ .../python25/Lib/encodings/mac_croatian.py | 307 ++ .../python25/Lib/encodings/mac_cyrillic.py | 307 ++ .../python25/Lib/encodings/mac_farsi.py | 307 ++ .../python25/Lib/encodings/mac_greek.py | 307 ++ .../python25/Lib/encodings/mac_iceland.py | 307 ++ .../python25/Lib/encodings/mac_latin2.py | 183 + .../python25/Lib/encodings/mac_roman.py | 307 ++ .../python25/Lib/encodings/mac_romanian.py | 307 ++ .../python25/Lib/encodings/mac_turkish.py | 307 ++ thirdparty/python25/Lib/encodings/mbcs.py | 47 + thirdparty/python25/Lib/encodings/palmos.py | 83 + thirdparty/python25/Lib/encodings/ptcp154.py | 175 + thirdparty/python25/Lib/encodings/punycode.py | 238 + .../python25/Lib/encodings/quopri_codec.py | 74 + .../Lib/encodings/raw_unicode_escape.py | 45 + thirdparty/python25/Lib/encodings/rot_13.py | 118 + .../python25/Lib/encodings/shift_jis.py | 39 + .../python25/Lib/encodings/shift_jis_2004.py | 39 + .../python25/Lib/encodings/shift_jisx0213.py | 39 + .../python25/Lib/encodings/string_escape.py | 38 + thirdparty/python25/Lib/encodings/tis_620.py | 307 ++ .../python25/Lib/encodings/undefined.py | 49 + .../python25/Lib/encodings/unicode_escape.py | 45 + .../Lib/encodings/unicode_internal.py | 45 + thirdparty/python25/Lib/encodings/utf_16.py | 104 + .../python25/Lib/encodings/utf_16_be.py | 42 + .../python25/Lib/encodings/utf_16_le.py | 42 + thirdparty/python25/Lib/encodings/utf_7.py | 41 + thirdparty/python25/Lib/encodings/utf_8.py | 42 + .../python25/Lib/encodings/utf_8_sig.py | 100 + thirdparty/python25/Lib/encodings/uu_codec.py | 128 + .../python25/Lib/encodings/zlib_codec.py | 102 + thirdparty/python25/Lib/getopt.py | 211 + thirdparty/python25/Lib/getpass.py | 128 + thirdparty/python25/Lib/gzip.py | 490 ++ thirdparty/python25/Lib/hashlib.py | 138 + thirdparty/python25/Lib/httplib.py | 1428 +++++ thirdparty/python25/Lib/linecache.py | 136 + thirdparty/python25/Lib/locale.py | 1562 ++++++ thirdparty/python25/Lib/md5.py | 10 + thirdparty/python25/Lib/mimetools.py | 241 + thirdparty/python25/Lib/ntpath.py | 511 ++ thirdparty/python25/Lib/nturl2path.py | 63 + thirdparty/python25/Lib/os.py | 738 +++ thirdparty/python25/Lib/random.py | 862 +++ thirdparty/python25/Lib/re.py | 315 ++ thirdparty/python25/Lib/rfc822.py | 1007 ++++ thirdparty/python25/Lib/sha.py | 11 + thirdparty/python25/Lib/shutil.py | 203 + .../site-packages/psyco-1.5.2-py2.5.egg-info | 22 + .../Lib/site-packages/psyco/__init__.py | 58 + .../Lib/site-packages/psyco/_psyco.pyd | Bin 0 -> 208896 bytes .../Lib/site-packages/psyco/classes.py | 53 + .../python25/Lib/site-packages/psyco/core.py | 232 + .../Lib/site-packages/psyco/kdictproxy.py | 133 + .../Lib/site-packages/psyco/logger.py | 96 + .../Lib/site-packages/psyco/profiler.py | 388 ++ .../Lib/site-packages/psyco/support.py | 196 + .../Lib/site-packages/pythonwin/Pythonwin.exe | Bin 0 -> 15360 bytes .../Lib/site-packages/pythonwin/dde.pyd | Bin 0 -> 49152 bytes .../Lib/site-packages/pythonwin/license.txt | 30 + .../pywin/Demos/app/basictimerapp.py | 222 + .../pythonwin/pywin/Demos/app/customprint.py | 194 + .../pythonwin/pywin/Demos/app/demoutils.py | 52 + .../pythonwin/pywin/Demos/app/dlgappdemo.py | 48 + .../pythonwin/pywin/Demos/app/dojobapp.py | 62 + .../pythonwin/pywin/Demos/app/helloapp.py | 44 + .../pythonwin/pywin/Demos/cmdserver.py | 108 + .../pythonwin/pywin/Demos/createwin.py | 99 + .../pythonwin/pywin/Demos/demoutils.py | 54 + .../pythonwin/pywin/Demos/dibdemo.py | 69 + .../pythonwin/pywin/Demos/dlgtest.py | 138 + .../pythonwin/pywin/Demos/dyndlg.py | 73 + .../pythonwin/pywin/Demos/fontdemo.py | 79 + .../pythonwin/pywin/Demos/guidemo.py | 68 + .../pythonwin/pywin/Demos/hiertest.py | 104 + .../pythonwin/pywin/Demos/menutest.py | 12 + .../pythonwin/pywin/Demos/objdoc.py | 49 + .../pythonwin/pywin/Demos/ocx/__init__.py | 0 .../pythonwin/pywin/Demos/ocx/demoutils.py | 54 + .../pythonwin/pywin/Demos/ocx/flash.py | 84 + .../pythonwin/pywin/Demos/ocx/msoffice.py | 127 + .../pywin/Demos/ocx/ocxserialtest.py | 101 + .../pythonwin/pywin/Demos/ocx/ocxtest.py | 186 + .../pythonwin/pywin/Demos/ocx/webbrowser.py | 54 + .../pythonwin/pywin/Demos/openGLDemo.py | 357 ++ .../pythonwin/pywin/Demos/progressbar.py | 91 + .../pythonwin/pywin/Demos/sliderdemo.py | 49 + .../pythonwin/pywin/Demos/splittst.py | 72 + .../pythonwin/pywin/Demos/threadedgui.py | 171 + .../pythonwin/pywin/Demos/toolbar.py | 85 + .../site-packages/pythonwin/pywin/IDLE.cfg | 29 + .../site-packages/pythonwin/pywin/__init__.py | 11 + .../pythonwin/pywin/debugger/__init__.py | 113 + .../pythonwin/pywin/debugger/configui.py | 30 + .../pythonwin/pywin/debugger/dbgcon.py | 28 + .../pythonwin/pywin/debugger/dbgpyapp.py | 59 + .../pythonwin/pywin/debugger/debugger.py | 968 ++++ .../pythonwin/pywin/debugger/fail.py | 48 + .../site-packages/pythonwin/pywin/default.cfg | 214 + .../pythonwin/pywin/dialogs/__init__.py | 0 .../pythonwin/pywin/dialogs/ideoptions.py | 116 + .../pythonwin/pywin/dialogs/list.py | 122 + .../pythonwin/pywin/dialogs/login.py | 121 + .../pythonwin/pywin/dialogs/status.py | 226 + .../pythonwin/pywin/docking/DockingBar.py | 527 ++ .../pythonwin/pywin/docking/__init__.py | 0 .../pythonwin/pywin/framework/__init__.py | 0 .../pythonwin/pywin/framework/app.py | 404 ++ .../pythonwin/pywin/framework/bitmap.py | 143 + .../pythonwin/pywin/framework/cmdline.py | 49 + .../pythonwin/pywin/framework/dbgcommands.py | 163 + .../pythonwin/pywin/framework/dlgappcore.py | 69 + .../pywin/framework/editor/ModuleBrowser.py | 205 + .../pywin/framework/editor/__init__.py | 90 + .../pywin/framework/editor/color/__init__.py | 0 .../framework/editor/color/coloreditor.py | 477 ++ .../pywin/framework/editor/configui.py | 255 + .../pywin/framework/editor/document.py | 310 ++ .../pywin/framework/editor/editor.py | 465 ++ .../pythonwin/pywin/framework/editor/frame.py | 66 + .../pywin/framework/editor/template.py | 50 + .../pythonwin/pywin/framework/editor/vss.py | 95 + .../pythonwin/pywin/framework/help.py | 147 + .../pythonwin/pywin/framework/interact.py | 807 +++ .../pythonwin/pywin/framework/intpyapp.py | 442 ++ .../pythonwin/pywin/framework/intpydde.py | 56 + .../pythonwin/pywin/framework/scriptutils.py | 590 ++ .../pythonwin/pywin/framework/sgrepmdi.py | 523 ++ .../pythonwin/pywin/framework/startup.py | 62 + .../pythonwin/pywin/framework/stdin.py | 180 + .../pythonwin/pywin/framework/toolmenu.py | 248 + .../pythonwin/pywin/framework/window.py | 13 + .../pythonwin/pywin/framework/winout.py | 521 ++ .../pythonwin/pywin/idle/AutoExpand.py | 92 + .../pythonwin/pywin/idle/AutoIndent.py | 553 ++ .../pythonwin/pywin/idle/CallTips.py | 190 + .../pythonwin/pywin/idle/FormatParagraph.py | 155 + .../pythonwin/pywin/idle/IdleHistory.py | 89 + .../pythonwin/pywin/idle/PyParse.py | 588 ++ .../pythonwin/pywin/idle/__init__.py | 1 + .../pythonwin/pywin/mfc/__init__.py | 0 .../pythonwin/pywin/mfc/activex.py | 69 + .../pythonwin/pywin/mfc/afxres.py | 497 ++ .../pythonwin/pywin/mfc/dialog.py | 237 + .../pythonwin/pywin/mfc/docview.py | 122 + .../pythonwin/pywin/mfc/object.py | 55 + .../pythonwin/pywin/mfc/thread.py | 22 + .../pythonwin/pywin/mfc/window.py | 41 + .../pywin/scintilla/IDLEenvironment.py | 515 ++ .../pythonwin/pywin/scintilla/__init__.py | 1 + .../pythonwin/pywin/scintilla/bindings.py | 186 + .../pythonwin/pywin/scintilla/config.py | 313 ++ .../pythonwin/pywin/scintilla/configui.py | 246 + .../pythonwin/pywin/scintilla/control.py | 417 ++ .../pythonwin/pywin/scintilla/document.py | 163 + .../pythonwin/pywin/scintilla/find.py | 306 ++ .../pythonwin/pywin/scintilla/formatter.py | 579 ++ .../pythonwin/pywin/scintilla/keycodes.py | 160 + .../pythonwin/pywin/scintilla/scintillacon.py | 1229 +++++ .../pythonwin/pywin/scintilla/view.py | 689 +++ .../pythonwin/pywin/tools/TraceCollector.py | 66 + .../pythonwin/pywin/tools/__init__.py | 2 + .../pythonwin/pywin/tools/browseProjects.py | 257 + .../pythonwin/pywin/tools/browser.py | 424 ++ .../pythonwin/pywin/tools/hierlist.py | 296 + .../pythonwin/pywin/tools/regedit.py | 329 ++ .../pythonwin/pywin/tools/regpy.py | 53 + .../Lib/site-packages/pythonwin/scintilla.dll | Bin 0 -> 247808 bytes .../Lib/site-packages/pythonwin/win32ui.pyd | Bin 0 -> 651264 bytes .../site-packages/pythonwin/win32uiole.pyd | Bin 0 -> 25088 bytes .../site-packages/pywin32-210-py2.6.egg-info | 13 + .../python25/Lib/site-packages/pywin32.pth | 4 + .../Lib/site-packages/pywin32.version.txt | 1 + .../pywin32_system32/pythoncom25.dll | Bin 0 -> 327680 bytes .../pywin32_system32/pywintypes25.dll | Bin 0 -> 102400 bytes .../win32/Demos/BackupRead_BackupWrite.py | 80 + .../win32/Demos/BackupSeek_streamheaders.py | 85 + .../site-packages/win32/Demos/CopyFileEx.py | 30 + .../win32/Demos/FileSecurityTest.py | 68 + .../win32/Demos/GetSaveFileName.py | 36 + .../win32/Demos/OpenEncryptedFileRaw.py | 64 + .../win32/Demos/SystemParametersInfo.py | 173 + .../win32/Demos/c_extension/README.txt | 6 + .../win32/Demos/c_extension/setup.py | 23 + .../Demos/c_extension/win32_extension.cpp | 21 + .../Lib/site-packages/win32/Demos/cerapi.py | 212 + .../win32/Demos/dde/ddeclient.py | 19 + .../win32/Demos/dde/ddeserver.py | 38 + .../win32/Demos/desktopmanager.py | 164 + .../site-packages/win32/Demos/eventLogDemo.py | 94 + .../site-packages/win32/Demos/getfilever.py | 24 + .../win32/Demos/images/frowny.bmp | Bin 0 -> 3126 bytes .../win32/Demos/images/smiley.bmp | Bin 0 -> 3126 bytes .../site-packages/win32/Demos/pipes/cat.py | 16 + .../win32/Demos/pipes/runproc.py | 110 + .../win32/Demos/print_desktop.py | 64 + .../Lib/site-packages/win32/Demos/rastest.py | 136 + .../win32/Demos/security/account_rights.py | 31 + .../win32/Demos/security/explicit_entries.py | 144 + .../win32/Demos/security/get_policy_info.py | 23 + .../win32/Demos/security/list_rights.py | 20 + .../win32/Demos/security/localized_names.py | 61 + .../win32/Demos/security/lsaregevent.py | 8 + .../win32/Demos/security/lsastore.py | 11 + .../win32/Demos/security/query_information.py | 25 + .../win32/Demos/security/regsave_sa.py | 37 + .../win32/Demos/security/regsecurity.py | 20 + .../win32/Demos/security/sa_inherit.py | 7 + .../win32/Demos/security/security_enums.py | 228 + .../win32/Demos/security/set_file_audit.py | 58 + .../win32/Demos/security/set_file_owner.py | 38 + .../win32/Demos/security/set_policy_info.py | 17 + .../Demos/security/setkernelobjectsecurity.py | 67 + .../Demos/security/setnamedsecurityinfo.py | 60 + .../win32/Demos/security/setsecurityinfo.py | 61 + .../Demos/security/setuserobjectsecurity.py | 42 + .../Demos/security/sspi/.#fetch_url.py.1.1 | 246 + .../win32/Demos/security/sspi/fetch_url.py | 146 + .../security/sspi/fetch_url_digest.patch | 160 + .../win32/Demos/security/sspi/simple_auth.py | 71 + .../Demos/security/sspi/socket_server.py | 178 + .../Demos/security/sspi/validate_password.py | 38 + .../Demos/service/install/perf_install.h | 9 + .../Demos/service/install/perf_install.ini | 18 + .../win32/Demos/service/install/readme.txt | 12 + .../win32/Demos/service/pipeTestService.py | 161 + .../Demos/service/pipeTestService.py.bak | 155 + .../Demos/service/pipeTestServiceClient.py | 121 + .../service/pipeTestServiceClient.py.bak | 119 + .../site-packages/win32/Demos/timer_demo.py | 68 + .../win32/Demos/win32clipboardDemo.py | 129 + .../win32/Demos/win32comport_demo.py | 133 + .../win32/Demos/win32console_demo.py | 103 + .../win32/Demos/win32cred_demo.py | 52 + .../win32/Demos/win32fileDemo.py | 35 + .../win32/Demos/win32gui_demo.py | 21 + .../win32/Demos/win32gui_dialog.py | 377 ++ .../win32/Demos/win32gui_menu.py | 335 ++ .../win32/Demos/win32gui_taskbar.py | 103 + .../site-packages/win32/Demos/win32netdemo.py | 231 + .../win32/Demos/win32rcparser_demo.py | 83 + .../win32/Demos/win32servicedemo.py | 23 + .../Demos/win32ts_logoff_disconnected.py | 13 + .../win32/Demos/win32wnet/netresource.htm | 238 + .../win32/Demos/win32wnet/testwnet.py | 74 + .../win32/Demos/win32wnet/winnetwk.py | 98 + .../site-packages/win32/Demos/winprocess.py | 195 + .../site-packages/win32/_win32sysloader.pyd | Bin 0 -> 5632 bytes .../Lib/site-packages/win32/_winxptheme.pyd | Bin 0 -> 12288 bytes .../python25/Lib/site-packages/win32/dbi.pyd | Bin 0 -> 8192 bytes .../site-packages/win32/include/PyWinTypes.h | 645 +++ .../Lib/site-packages/win32/lib/afxres.py | 497 ++ .../Lib/site-packages/win32/lib/commctrl.py | 1549 ++++++ .../Lib/site-packages/win32/lib/mmsystem.py | 867 +++ .../Lib/site-packages/win32/lib/netbios.py | 286 + .../site-packages/win32/lib/ntsecuritycon.py | 609 +++ .../Lib/site-packages/win32/lib/pywintypes.py | 102 + .../Lib/site-packages/win32/lib/rasutil.py | 38 + .../Lib/site-packages/win32/lib/regcheck.py | 125 + .../Lib/site-packages/win32/lib/regutil.py | 284 + .../Lib/site-packages/win32/lib/sspi.py | 231 + .../Lib/site-packages/win32/lib/sspicon.py | 479 ++ .../Lib/site-packages/win32/lib/win32con.py | 4870 +++++++++++++++++ .../site-packages/win32/lib/win32cryptcon.py | 1671 ++++++ .../win32/lib/win32evtlogutil.py | 152 + .../win32/lib/win32gui_struct.py | 556 ++ .../site-packages/win32/lib/win32inetcon.py | 727 +++ .../site-packages/win32/lib/win32netcon.py | 652 +++ .../site-packages/win32/lib/win32pdhquery.py | 515 ++ .../site-packages/win32/lib/win32pdhutil.py | 161 + .../site-packages/win32/lib/win32rcparser.py | 582 ++ .../win32/lib/win32serviceutil.py | 789 +++ .../site-packages/win32/lib/win32timezone.py | 293 + .../site-packages/win32/lib/win32traceutil.py | 53 + .../site-packages/win32/lib/win32verstamp.py | 202 + .../Lib/site-packages/win32/lib/winerror.py | 1916 +++++++ .../site-packages/win32/lib/winioctlcon.py | 663 +++ .../Lib/site-packages/win32/lib/winnt.py | 1098 ++++ .../Lib/site-packages/win32/lib/winperf.py | 140 + .../Lib/site-packages/win32/lib/winxptheme.py | 23 + .../site-packages/win32/libs/pywintypes.lib | Bin 0 -> 101222 bytes .../Lib/site-packages/win32/license.txt | 30 + .../Lib/site-packages/win32/mmapfile.pyd | Bin 0 -> 9728 bytes .../python25/Lib/site-packages/win32/odbc.pyd | Bin 0 -> 21504 bytes .../Lib/site-packages/win32/perfmon.pyd | Bin 0 -> 13312 bytes .../Lib/site-packages/win32/perfmondata.dll | Bin 0 -> 9216 bytes .../Lib/site-packages/win32/pythonservice.exe | Bin 0 -> 9728 bytes .../win32/scripts/ControlService.py | 255 + .../scripts/VersionStamp/BrandProject.py | 81 + .../win32/scripts/VersionStamp/bulkstamp.py | 137 + .../win32/scripts/VersionStamp/vssutil.py | 170 + .../win32/scripts/backupEventLog.py | 40 + .../site-packages/win32/scripts/ce/pysynch.py | 247 + .../win32/scripts/killProcName.py | 56 + .../site-packages/win32/scripts/rasutil.py | 88 + .../site-packages/win32/scripts/regsetup.py | 510 ++ .../win32/scripts/regsetup.py.bak | 510 ++ .../site-packages/win32/scripts/setup_d.py | 91 + .../site-packages/win32/servicemanager.pyd | Bin 0 -> 25088 bytes .../site-packages/win32/test/.#testall.py.1.4 | 58 + .../Lib/site-packages/win32/test/handles.py | 87 + .../win32/test/test_clipboard.py | 96 + .../Lib/site-packages/win32/test/test_odbc.py | 154 + .../win32/test/test_pywintypes.py | 34 + .../site-packages/win32/test/test_security.py | 87 + .../Lib/site-packages/win32/test/test_sspi.py | 120 + .../site-packages/win32/test/test_win32api.py | 161 + .../win32/test/test_win32crypt.py | 30 + .../win32/test/test_win32event.py | 24 + .../win32/test/test_win32file.py | 432 ++ .../win32/test/test_win32inet.py | 56 + .../site-packages/win32/test/test_win32net.py | 21 + .../win32/test/test_win32pipe.py | 46 + .../win32/test/test_win32rcparser.py | 49 + .../win32/test/test_win32timezone.py | 11 + .../win32/test/test_win32trace.py | 331 ++ .../win32/test/test_win32wnet.py | 10 + .../Lib/site-packages/win32/test/testall.py | 51 + .../win32/test/win32rcparser/.cvsignore | 1 + .../win32/test/win32rcparser/python.bmp | Bin 0 -> 778 bytes .../win32/test/win32rcparser/python.ico | Bin 0 -> 766 bytes .../win32/test/win32rcparser/test.aps | Bin 0 -> 38392 bytes .../win32/test/win32rcparser/test.h | 46 + .../win32/test/win32rcparser/test.rc | 216 + .../Lib/site-packages/win32/timer.pyd | Bin 0 -> 6656 bytes .../Lib/site-packages/win32/win2kras.pyd | Bin 0 -> 7168 bytes .../Lib/site-packages/win32/win32api.pyd | Bin 0 -> 86016 bytes .../site-packages/win32/win32clipboard.pyd | Bin 0 -> 14336 bytes .../Lib/site-packages/win32/win32console.pyd | Bin 0 -> 53248 bytes .../Lib/site-packages/win32/win32cred.pyd | Bin 0 -> 23040 bytes .../Lib/site-packages/win32/win32crypt.pyd | Bin 0 -> 7680 bytes .../Lib/site-packages/win32/win32event.pyd | Bin 0 -> 14848 bytes .../Lib/site-packages/win32/win32evtlog.pyd | Bin 0 -> 14848 bytes .../Lib/site-packages/win32/win32file.pyd | Bin 0 -> 90112 bytes .../Lib/site-packages/win32/win32gui.pyd | Bin 0 -> 114688 bytes .../Lib/site-packages/win32/win32help.pyd | Bin 0 -> 34816 bytes .../Lib/site-packages/win32/win32inet.pyd | Bin 0 -> 13312 bytes .../Lib/site-packages/win32/win32job.pyd | Bin 0 -> 17920 bytes .../Lib/site-packages/win32/win32lz.pyd | Bin 0 -> 7168 bytes .../Lib/site-packages/win32/win32net.pyd | Bin 0 -> 77824 bytes .../Lib/site-packages/win32/win32pdh.pyd | Bin 0 -> 18944 bytes .../Lib/site-packages/win32/win32pipe.pyd | Bin 0 -> 16896 bytes .../site-packages/win32/win32popenWin9x.exe | Bin 0 -> 4608 bytes .../Lib/site-packages/win32/win32print.pyd | Bin 0 -> 57344 bytes .../Lib/site-packages/win32/win32process.pyd | Bin 0 -> 28672 bytes .../Lib/site-packages/win32/win32profile.pyd | Bin 0 -> 13824 bytes .../Lib/site-packages/win32/win32ras.pyd | Bin 0 -> 15360 bytes .../Lib/site-packages/win32/win32security.pyd | Bin 0 -> 106496 bytes .../Lib/site-packages/win32/win32service.pyd | Bin 0 -> 33280 bytes .../Lib/site-packages/win32/win32trace.pyd | Bin 0 -> 12288 bytes .../Lib/site-packages/win32/win32ts.pyd | Bin 0 -> 18944 bytes .../Lib/site-packages/win32/win32wnet.pyd | Bin 0 -> 18944 bytes .../Lib/site-packages/win32/winxpgui.pyd | Bin 0 -> 131072 bytes thirdparty/python25/Lib/site.py | 424 ++ thirdparty/python25/Lib/socket.py | 414 ++ thirdparty/python25/Lib/sre_compile.py | 531 ++ thirdparty/python25/Lib/sre_constants.py | 261 + thirdparty/python25/Lib/sre_parse.py | 796 +++ thirdparty/python25/Lib/stat.py | 86 + thirdparty/python25/Lib/string.py | 529 ++ thirdparty/python25/Lib/struct.py | 99 + thirdparty/python25/Lib/subprocess.py | 1246 +++++ thirdparty/python25/Lib/tempfile.py | 472 ++ thirdparty/python25/Lib/threading.py | 816 +++ thirdparty/python25/Lib/traceback.py | 312 ++ thirdparty/python25/Lib/types.py | 101 + thirdparty/python25/Lib/urllib.py | 1538 ++++++ thirdparty/python25/Lib/urlparse.py | 375 ++ thirdparty/python25/Lib/warnings.py | 264 + thirdparty/python25/Lib/xml/__init__.py | 47 + thirdparty/python25/Lib/xml/dom/NodeFilter.py | 27 + thirdparty/python25/Lib/xml/dom/__init__.py | 139 + thirdparty/python25/Lib/xml/dom/domreg.py | 99 + .../python25/Lib/xml/dom/expatbuilder.py | 983 ++++ thirdparty/python25/Lib/xml/dom/minicompat.py | 110 + thirdparty/python25/Lib/xml/dom/minidom.py | 1936 +++++++ thirdparty/python25/Lib/xml/dom/pulldom.py | 351 ++ thirdparty/python25/Lib/xml/dom/xmlbuilder.py | 386 ++ thirdparty/python25/License.txt | 270 + thirdparty/python25/libs/_bsddb.lib | Bin 0 -> 1892 bytes thirdparty/python25/libs/_ctypes.lib | Bin 0 -> 1718 bytes thirdparty/python25/libs/_ctypes_test.lib | Bin 0 -> 19268 bytes thirdparty/python25/libs/_elementtree.lib | Bin 0 -> 1836 bytes thirdparty/python25/libs/_hashlib.lib | Bin 0 -> 1736 bytes thirdparty/python25/libs/_msi.lib | Bin 0 -> 1668 bytes thirdparty/python25/libs/_socket.lib | Bin 0 -> 1924 bytes thirdparty/python25/libs/_sqlite3.lib | Bin 0 -> 1736 bytes thirdparty/python25/libs/_ssl.lib | Bin 0 -> 1668 bytes thirdparty/python25/libs/_testcapi.lib | Bin 0 -> 1752 bytes thirdparty/python25/libs/_tkinter.lib | Bin 0 -> 1736 bytes thirdparty/python25/libs/bz2.lib | Bin 0 -> 1650 bytes thirdparty/python25/libs/libpython25.a | Bin 0 -> 706666 bytes thirdparty/python25/libs/pyexpat.lib | Bin 0 -> 1718 bytes thirdparty/python25/libs/python25.lib | Bin 0 -> 199302 bytes thirdparty/python25/libs/rsync.lib | Bin 0 -> 163378 bytes thirdparty/python25/libs/select.lib | Bin 0 -> 1702 bytes thirdparty/python25/libs/unicodedata.lib | Bin 0 -> 1786 bytes thirdparty/python25/libs/winsound.lib | Bin 0 -> 1736 bytes thirdparty/python25/python.exe | Bin 0 -> 24064 bytes 658 files changed, 131155 insertions(+), 6 deletions(-) create mode 100644 Update DEBUG Environment.bat create mode 100644 Update RELEASE Environment.bat create mode 100644 thirdparty/GnuPGInterface/GnuPGInterface.py create mode 100644 thirdparty/GnuPGInterface/Homepage.txt create mode 100644 thirdparty/GnuPGInterface/License.txt create mode 100644 thirdparty/Readme.txt create mode 100644 thirdparty/SQLite/Bin/Homepage.txt create mode 100644 thirdparty/SQLite/Bin/License.txt create mode 100644 thirdparty/SQLite/Bin/sqlite3.dll create mode 100644 thirdparty/SQLite/Dll for .Net/Homepage.txt create mode 100644 thirdparty/SQLite/Dll for .Net/License.txt create mode 100644 thirdparty/SQLite/Dll for .Net/System.Data.SQLite.DLL create mode 100644 thirdparty/boto/Homepage.txt create mode 100644 thirdparty/boto/License.txt create mode 100644 thirdparty/boto/__init__.py create mode 100644 thirdparty/boto/connection.py create mode 100644 thirdparty/boto/contrib/__init__.py create mode 100644 thirdparty/boto/contrib/m2helpers.py create mode 100644 thirdparty/boto/contrib/ymlmessage.py create mode 100644 thirdparty/boto/ec2/__init__.py create mode 100644 thirdparty/boto/ec2/address.py create mode 100644 thirdparty/boto/ec2/connection.py create mode 100644 thirdparty/boto/ec2/image.py create mode 100644 thirdparty/boto/ec2/instance.py create mode 100644 thirdparty/boto/ec2/keypair.py create mode 100644 thirdparty/boto/ec2/securitygroup.py create mode 100644 thirdparty/boto/ec2/zone.py create mode 100644 thirdparty/boto/exception.py create mode 100644 thirdparty/boto/fps/__init__.py create mode 100644 thirdparty/boto/fps/connection.py create mode 100644 thirdparty/boto/handler.py create mode 100644 thirdparty/boto/mapreduce/__init__.py create mode 100644 thirdparty/boto/mapreduce/lqs.py create mode 100644 thirdparty/boto/mapreduce/partitiondb.py create mode 100644 thirdparty/boto/mapreduce/pdb_delete create mode 100644 thirdparty/boto/mapreduce/pdb_describe create mode 100644 thirdparty/boto/mapreduce/pdb_revert create mode 100644 thirdparty/boto/mapreduce/pdb_upload create mode 100644 thirdparty/boto/mapreduce/queuetools.py create mode 100644 thirdparty/boto/mashups/__init__.py create mode 100644 thirdparty/boto/mashups/interactive.py create mode 100644 thirdparty/boto/mashups/iobject.py create mode 100644 thirdparty/boto/mashups/order.py create mode 100644 thirdparty/boto/mashups/server.py create mode 100644 thirdparty/boto/mturk/__init__.py create mode 100644 thirdparty/boto/mturk/connection.py create mode 100644 thirdparty/boto/mturk/notification.py create mode 100644 thirdparty/boto/mturk/price.py create mode 100644 thirdparty/boto/mturk/question.py create mode 100644 thirdparty/boto/pyami/__init__.py create mode 100644 thirdparty/boto/pyami/bootstrap.py create mode 100644 thirdparty/boto/pyami/config.py create mode 100644 thirdparty/boto/pyami/copybot.cfg create mode 100644 thirdparty/boto/pyami/copybot.py create mode 100644 thirdparty/boto/pyami/helloworld.py create mode 100644 thirdparty/boto/pyami/installers/__init__.py create mode 100644 thirdparty/boto/pyami/installers/ubuntu/__init__.py create mode 100644 thirdparty/boto/pyami/installers/ubuntu/apache.py create mode 100644 thirdparty/boto/pyami/installers/ubuntu/installer.py create mode 100644 thirdparty/boto/pyami/installers/ubuntu/mysql.py create mode 100644 thirdparty/boto/pyami/installers/ubuntu/trac.py create mode 100644 thirdparty/boto/pyami/launch_ami.py create mode 100644 thirdparty/boto/pyami/scriptbase.py create mode 100644 thirdparty/boto/pyami/startup.py create mode 100644 thirdparty/boto/resultset.py create mode 100644 thirdparty/boto/s3/__init__.py create mode 100644 thirdparty/boto/s3/acl.py create mode 100644 thirdparty/boto/s3/bucket.py create mode 100644 thirdparty/boto/s3/bucketlistresultset.py create mode 100644 thirdparty/boto/s3/connection.py create mode 100644 thirdparty/boto/s3/key.py create mode 100644 thirdparty/boto/s3/prefix.py create mode 100644 thirdparty/boto/s3/user.py create mode 100644 thirdparty/boto/sdb/__init__.py create mode 100644 thirdparty/boto/sdb/connection.py create mode 100644 thirdparty/boto/sdb/domain.py create mode 100644 thirdparty/boto/sdb/item.py create mode 100644 thirdparty/boto/sdb/persist/__init__.py create mode 100644 thirdparty/boto/sdb/persist/checker.py create mode 100644 thirdparty/boto/sdb/persist/object.py create mode 100644 thirdparty/boto/sdb/persist/property.py create mode 100644 thirdparty/boto/sdb/persist/test_persist.py create mode 100644 thirdparty/boto/sdb/queryresultset.py create mode 100644 thirdparty/boto/services/__init__.py create mode 100644 thirdparty/boto/services/bs.py create mode 100644 thirdparty/boto/services/message.py create mode 100644 thirdparty/boto/services/result.py create mode 100644 thirdparty/boto/services/service.py create mode 100644 thirdparty/boto/services/servicedef.py create mode 100644 thirdparty/boto/services/sonofmmm.cfg create mode 100644 thirdparty/boto/services/sonofmmm.py create mode 100644 thirdparty/boto/services/submit.py create mode 100644 thirdparty/boto/sqs/20070501/__init__.py create mode 100644 thirdparty/boto/sqs/20070501/attributes.py create mode 100644 thirdparty/boto/sqs/20070501/connection.py create mode 100644 thirdparty/boto/sqs/20070501/message.py create mode 100644 thirdparty/boto/sqs/20070501/queue.py create mode 100644 thirdparty/boto/sqs/20070501/readme.txt create mode 100644 thirdparty/boto/sqs/__init__.py create mode 100644 thirdparty/boto/sqs/attributes.py create mode 100644 thirdparty/boto/sqs/connection.py create mode 100644 thirdparty/boto/sqs/jsonmessage.py create mode 100644 thirdparty/boto/sqs/message.py create mode 100644 thirdparty/boto/sqs/queue.py create mode 100644 thirdparty/boto/tests/__init__.py create mode 100644 thirdparty/boto/tests/test.py create mode 100644 thirdparty/boto/tests/test_ec2connection.py create mode 100644 thirdparty/boto/tests/test_s3connection.py create mode 100644 thirdparty/boto/tests/test_sdbconnection.py create mode 100644 thirdparty/boto/tests/test_sqsconnection.py create mode 100644 thirdparty/boto/utils.py create mode 100644 thirdparty/duplicity/Homepage.txt create mode 100644 thirdparty/duplicity/License.txt create mode 100644 thirdparty/duplicity/duplicity.py create mode 100644 thirdparty/duplicity/duplicity/__init__.py create mode 100644 thirdparty/duplicity/duplicity/_librsync.pyd create mode 100644 thirdparty/duplicity/duplicity/backends.py create mode 100644 thirdparty/duplicity/duplicity/collections.py create mode 100644 thirdparty/duplicity/duplicity/commandline.py create mode 100644 thirdparty/duplicity/duplicity/diffdir.py create mode 100644 thirdparty/duplicity/duplicity/dup_temp.py create mode 100644 thirdparty/duplicity/duplicity/dup_time.py create mode 100644 thirdparty/duplicity/duplicity/file_naming.py create mode 100644 thirdparty/duplicity/duplicity/globals.py create mode 100644 thirdparty/duplicity/duplicity/gpg.py create mode 100644 thirdparty/duplicity/duplicity/lazy.py create mode 100644 thirdparty/duplicity/duplicity/librsync.py create mode 100644 thirdparty/duplicity/duplicity/log.py create mode 100644 thirdparty/duplicity/duplicity/manifest.py create mode 100644 thirdparty/duplicity/duplicity/misc.py create mode 100644 thirdparty/duplicity/duplicity/patchdir.py create mode 100644 thirdparty/duplicity/duplicity/path.py create mode 100644 thirdparty/duplicity/duplicity/robust.py create mode 100644 thirdparty/duplicity/duplicity/selection.py create mode 100644 thirdparty/duplicity/duplicity/static.py create mode 100644 thirdparty/duplicity/duplicity/statistics.py create mode 100644 thirdparty/duplicity/duplicity/tarfile.py create mode 100644 thirdparty/duplicity/duplicity/tempdir.py create mode 100644 thirdparty/duplicity/duplicity/urlparse_2_5.py create mode 100644 thirdparty/gpg/Homepage.txt create mode 100644 thirdparty/gpg/License.txt create mode 100644 thirdparty/gpg/gpg.exe create mode 100644 thirdparty/gpg/iconv.dll create mode 100644 thirdparty/python25/DLLs/_bsddb.pyd create mode 100644 thirdparty/python25/DLLs/_ctypes.pyd create mode 100644 thirdparty/python25/DLLs/_ctypes_test.pyd create mode 100644 thirdparty/python25/DLLs/_elementtree.pyd create mode 100644 thirdparty/python25/DLLs/_hashlib.pyd create mode 100644 thirdparty/python25/DLLs/_msi.pyd create mode 100644 thirdparty/python25/DLLs/_socket.pyd create mode 100644 thirdparty/python25/DLLs/_sqlite3.pyd create mode 100644 thirdparty/python25/DLLs/_ssl.pyd create mode 100644 thirdparty/python25/DLLs/_testcapi.pyd create mode 100644 thirdparty/python25/DLLs/_tkinter.pyd create mode 100644 thirdparty/python25/DLLs/bz2.pyd create mode 100644 thirdparty/python25/DLLs/py.ico create mode 100644 thirdparty/python25/DLLs/pyc.ico create mode 100644 thirdparty/python25/DLLs/pyexpat.pyd create mode 100644 thirdparty/python25/DLLs/select.pyd create mode 100644 thirdparty/python25/DLLs/sqlite3.dll create mode 100644 thirdparty/python25/DLLs/tcl84.dll create mode 100644 thirdparty/python25/DLLs/tclpip84.dll create mode 100644 thirdparty/python25/DLLs/tix84.dll create mode 100644 thirdparty/python25/DLLs/tk84.dll create mode 100644 thirdparty/python25/DLLs/unicodedata.pyd create mode 100644 thirdparty/python25/DLLs/winsound.pyd create mode 100644 thirdparty/python25/Homepage.txt create mode 100644 thirdparty/python25/Lib/UserDict.py create mode 100644 thirdparty/python25/Lib/__future__.py create mode 100644 thirdparty/python25/Lib/atexit.py create mode 100644 thirdparty/python25/Lib/base64.py create mode 100644 thirdparty/python25/Lib/codecs.py create mode 100644 thirdparty/python25/Lib/copy.py create mode 100644 thirdparty/python25/Lib/copy_reg.py create mode 100644 thirdparty/python25/Lib/encodings/__init__.py create mode 100644 thirdparty/python25/Lib/encodings/aliases.py create mode 100644 thirdparty/python25/Lib/encodings/ascii.py create mode 100644 thirdparty/python25/Lib/encodings/base64_codec.py create mode 100644 thirdparty/python25/Lib/encodings/big5.py create mode 100644 thirdparty/python25/Lib/encodings/big5hkscs.py create mode 100644 thirdparty/python25/Lib/encodings/bz2_codec.py create mode 100644 thirdparty/python25/Lib/encodings/charmap.py create mode 100644 thirdparty/python25/Lib/encodings/cp037.py create mode 100644 thirdparty/python25/Lib/encodings/cp1006.py create mode 100644 thirdparty/python25/Lib/encodings/cp1026.py create mode 100644 thirdparty/python25/Lib/encodings/cp1140.py create mode 100644 thirdparty/python25/Lib/encodings/cp1250.py create mode 100644 thirdparty/python25/Lib/encodings/cp1251.py create mode 100644 thirdparty/python25/Lib/encodings/cp1252.py create mode 100644 thirdparty/python25/Lib/encodings/cp1253.py create mode 100644 thirdparty/python25/Lib/encodings/cp1254.py create mode 100644 thirdparty/python25/Lib/encodings/cp1255.py create mode 100644 thirdparty/python25/Lib/encodings/cp1256.py create mode 100644 thirdparty/python25/Lib/encodings/cp1257.py create mode 100644 thirdparty/python25/Lib/encodings/cp1258.py create mode 100644 thirdparty/python25/Lib/encodings/cp424.py create mode 100644 thirdparty/python25/Lib/encodings/cp437.py create mode 100644 thirdparty/python25/Lib/encodings/cp500.py create mode 100644 thirdparty/python25/Lib/encodings/cp737.py create mode 100644 thirdparty/python25/Lib/encodings/cp775.py create mode 100644 thirdparty/python25/Lib/encodings/cp850.py create mode 100644 thirdparty/python25/Lib/encodings/cp852.py create mode 100644 thirdparty/python25/Lib/encodings/cp855.py create mode 100644 thirdparty/python25/Lib/encodings/cp856.py create mode 100644 thirdparty/python25/Lib/encodings/cp857.py create mode 100644 thirdparty/python25/Lib/encodings/cp860.py create mode 100644 thirdparty/python25/Lib/encodings/cp861.py create mode 100644 thirdparty/python25/Lib/encodings/cp862.py create mode 100644 thirdparty/python25/Lib/encodings/cp863.py create mode 100644 thirdparty/python25/Lib/encodings/cp864.py create mode 100644 thirdparty/python25/Lib/encodings/cp865.py create mode 100644 thirdparty/python25/Lib/encodings/cp866.py create mode 100644 thirdparty/python25/Lib/encodings/cp869.py create mode 100644 thirdparty/python25/Lib/encodings/cp874.py create mode 100644 thirdparty/python25/Lib/encodings/cp875.py create mode 100644 thirdparty/python25/Lib/encodings/cp932.py create mode 100644 thirdparty/python25/Lib/encodings/cp949.py create mode 100644 thirdparty/python25/Lib/encodings/cp950.py create mode 100644 thirdparty/python25/Lib/encodings/euc_jis_2004.py create mode 100644 thirdparty/python25/Lib/encodings/euc_jisx0213.py create mode 100644 thirdparty/python25/Lib/encodings/euc_jp.py create mode 100644 thirdparty/python25/Lib/encodings/euc_kr.py create mode 100644 thirdparty/python25/Lib/encodings/gb18030.py create mode 100644 thirdparty/python25/Lib/encodings/gb2312.py create mode 100644 thirdparty/python25/Lib/encodings/gbk.py create mode 100644 thirdparty/python25/Lib/encodings/hex_codec.py create mode 100644 thirdparty/python25/Lib/encodings/hp_roman8.py create mode 100644 thirdparty/python25/Lib/encodings/hz.py create mode 100644 thirdparty/python25/Lib/encodings/idna.py create mode 100644 thirdparty/python25/Lib/encodings/iso2022_jp.py create mode 100644 thirdparty/python25/Lib/encodings/iso2022_jp_1.py create mode 100644 thirdparty/python25/Lib/encodings/iso2022_jp_2.py create mode 100644 thirdparty/python25/Lib/encodings/iso2022_jp_2004.py create mode 100644 thirdparty/python25/Lib/encodings/iso2022_jp_3.py create mode 100644 thirdparty/python25/Lib/encodings/iso2022_jp_ext.py create mode 100644 thirdparty/python25/Lib/encodings/iso2022_kr.py create mode 100644 thirdparty/python25/Lib/encodings/iso8859_1.py create mode 100644 thirdparty/python25/Lib/encodings/iso8859_10.py create mode 100644 thirdparty/python25/Lib/encodings/iso8859_11.py create mode 100644 thirdparty/python25/Lib/encodings/iso8859_13.py create mode 100644 thirdparty/python25/Lib/encodings/iso8859_14.py create mode 100644 thirdparty/python25/Lib/encodings/iso8859_15.py create mode 100644 thirdparty/python25/Lib/encodings/iso8859_16.py create mode 100644 thirdparty/python25/Lib/encodings/iso8859_2.py create mode 100644 thirdparty/python25/Lib/encodings/iso8859_3.py create mode 100644 thirdparty/python25/Lib/encodings/iso8859_4.py create mode 100644 thirdparty/python25/Lib/encodings/iso8859_5.py create mode 100644 thirdparty/python25/Lib/encodings/iso8859_6.py create mode 100644 thirdparty/python25/Lib/encodings/iso8859_7.py create mode 100644 thirdparty/python25/Lib/encodings/iso8859_8.py create mode 100644 thirdparty/python25/Lib/encodings/iso8859_9.py create mode 100644 thirdparty/python25/Lib/encodings/johab.py create mode 100644 thirdparty/python25/Lib/encodings/koi8_r.py create mode 100644 thirdparty/python25/Lib/encodings/koi8_u.py create mode 100644 thirdparty/python25/Lib/encodings/latin_1.py create mode 100644 thirdparty/python25/Lib/encodings/mac_arabic.py create mode 100644 thirdparty/python25/Lib/encodings/mac_centeuro.py create mode 100644 thirdparty/python25/Lib/encodings/mac_croatian.py create mode 100644 thirdparty/python25/Lib/encodings/mac_cyrillic.py create mode 100644 thirdparty/python25/Lib/encodings/mac_farsi.py create mode 100644 thirdparty/python25/Lib/encodings/mac_greek.py create mode 100644 thirdparty/python25/Lib/encodings/mac_iceland.py create mode 100644 thirdparty/python25/Lib/encodings/mac_latin2.py create mode 100644 thirdparty/python25/Lib/encodings/mac_roman.py create mode 100644 thirdparty/python25/Lib/encodings/mac_romanian.py create mode 100644 thirdparty/python25/Lib/encodings/mac_turkish.py create mode 100644 thirdparty/python25/Lib/encodings/mbcs.py create mode 100644 thirdparty/python25/Lib/encodings/palmos.py create mode 100644 thirdparty/python25/Lib/encodings/ptcp154.py create mode 100644 thirdparty/python25/Lib/encodings/punycode.py create mode 100644 thirdparty/python25/Lib/encodings/quopri_codec.py create mode 100644 thirdparty/python25/Lib/encodings/raw_unicode_escape.py create mode 100644 thirdparty/python25/Lib/encodings/rot_13.py create mode 100644 thirdparty/python25/Lib/encodings/shift_jis.py create mode 100644 thirdparty/python25/Lib/encodings/shift_jis_2004.py create mode 100644 thirdparty/python25/Lib/encodings/shift_jisx0213.py create mode 100644 thirdparty/python25/Lib/encodings/string_escape.py create mode 100644 thirdparty/python25/Lib/encodings/tis_620.py create mode 100644 thirdparty/python25/Lib/encodings/undefined.py create mode 100644 thirdparty/python25/Lib/encodings/unicode_escape.py create mode 100644 thirdparty/python25/Lib/encodings/unicode_internal.py create mode 100644 thirdparty/python25/Lib/encodings/utf_16.py create mode 100644 thirdparty/python25/Lib/encodings/utf_16_be.py create mode 100644 thirdparty/python25/Lib/encodings/utf_16_le.py create mode 100644 thirdparty/python25/Lib/encodings/utf_7.py create mode 100644 thirdparty/python25/Lib/encodings/utf_8.py create mode 100644 thirdparty/python25/Lib/encodings/utf_8_sig.py create mode 100644 thirdparty/python25/Lib/encodings/uu_codec.py create mode 100644 thirdparty/python25/Lib/encodings/zlib_codec.py create mode 100644 thirdparty/python25/Lib/getopt.py create mode 100644 thirdparty/python25/Lib/getpass.py create mode 100644 thirdparty/python25/Lib/gzip.py create mode 100644 thirdparty/python25/Lib/hashlib.py create mode 100644 thirdparty/python25/Lib/httplib.py create mode 100644 thirdparty/python25/Lib/linecache.py create mode 100644 thirdparty/python25/Lib/locale.py create mode 100644 thirdparty/python25/Lib/md5.py create mode 100644 thirdparty/python25/Lib/mimetools.py create mode 100644 thirdparty/python25/Lib/ntpath.py create mode 100644 thirdparty/python25/Lib/nturl2path.py create mode 100644 thirdparty/python25/Lib/os.py create mode 100644 thirdparty/python25/Lib/random.py create mode 100644 thirdparty/python25/Lib/re.py create mode 100644 thirdparty/python25/Lib/rfc822.py create mode 100644 thirdparty/python25/Lib/sha.py create mode 100644 thirdparty/python25/Lib/shutil.py create mode 100644 thirdparty/python25/Lib/site-packages/psyco-1.5.2-py2.5.egg-info create mode 100644 thirdparty/python25/Lib/site-packages/psyco/__init__.py create mode 100644 thirdparty/python25/Lib/site-packages/psyco/_psyco.pyd create mode 100644 thirdparty/python25/Lib/site-packages/psyco/classes.py create mode 100644 thirdparty/python25/Lib/site-packages/psyco/core.py create mode 100644 thirdparty/python25/Lib/site-packages/psyco/kdictproxy.py create mode 100644 thirdparty/python25/Lib/site-packages/psyco/logger.py create mode 100644 thirdparty/python25/Lib/site-packages/psyco/profiler.py create mode 100644 thirdparty/python25/Lib/site-packages/psyco/support.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/Pythonwin.exe create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/dde.pyd create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/license.txt create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/basictimerapp.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/customprint.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/demoutils.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/dlgappdemo.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/dojobapp.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/helloapp.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/cmdserver.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/createwin.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/demoutils.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/dibdemo.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/dlgtest.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/dyndlg.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/fontdemo.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/guidemo.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/hiertest.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/menutest.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/objdoc.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/__init__.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/demoutils.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/flash.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/msoffice.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/ocxserialtest.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/ocxtest.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/webbrowser.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/openGLDemo.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/progressbar.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/sliderdemo.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/splittst.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/threadedgui.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/toolbar.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/IDLE.cfg create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/__init__.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/__init__.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/configui.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/dbgcon.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/dbgpyapp.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/debugger.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/fail.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/default.cfg create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/__init__.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/ideoptions.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/list.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/login.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/status.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/docking/DockingBar.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/docking/__init__.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/__init__.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/app.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/bitmap.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/cmdline.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/dbgcommands.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/dlgappcore.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/ModuleBrowser.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/__init__.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/color/__init__.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/color/coloreditor.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/configui.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/document.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/editor.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/frame.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/template.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/vss.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/help.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/interact.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/intpyapp.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/intpydde.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/scriptutils.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/sgrepmdi.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/startup.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/stdin.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/toolmenu.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/window.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/winout.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/AutoExpand.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/AutoIndent.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/CallTips.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/FormatParagraph.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/IdleHistory.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/PyParse.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/__init__.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/__init__.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/activex.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/afxres.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/dialog.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/docview.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/object.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/thread.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/window.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/IDLEenvironment.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/__init__.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/bindings.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/config.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/configui.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/control.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/document.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/find.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/formatter.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/keycodes.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/scintillacon.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/view.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/TraceCollector.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/__init__.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/browseProjects.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/browser.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/hierlist.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/regedit.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/regpy.py create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/scintilla.dll create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/win32ui.pyd create mode 100644 thirdparty/python25/Lib/site-packages/pythonwin/win32uiole.pyd create mode 100644 thirdparty/python25/Lib/site-packages/pywin32-210-py2.6.egg-info create mode 100644 thirdparty/python25/Lib/site-packages/pywin32.pth create mode 100644 thirdparty/python25/Lib/site-packages/pywin32.version.txt create mode 100644 thirdparty/python25/Lib/site-packages/pywin32_system32/pythoncom25.dll create mode 100644 thirdparty/python25/Lib/site-packages/pywin32_system32/pywintypes25.dll create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/BackupRead_BackupWrite.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/BackupSeek_streamheaders.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/CopyFileEx.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/FileSecurityTest.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/GetSaveFileName.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/OpenEncryptedFileRaw.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/SystemParametersInfo.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/c_extension/README.txt create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/c_extension/setup.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/c_extension/win32_extension.cpp create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/cerapi.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/dde/ddeclient.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/dde/ddeserver.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/desktopmanager.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/eventLogDemo.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/getfilever.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/images/frowny.bmp create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/images/smiley.bmp create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/pipes/cat.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/pipes/runproc.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/print_desktop.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/rastest.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/account_rights.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/explicit_entries.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/get_policy_info.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/list_rights.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/localized_names.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/lsaregevent.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/lsastore.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/query_information.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/regsave_sa.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/regsecurity.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/sa_inherit.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/security_enums.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/set_file_audit.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/set_file_owner.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/set_policy_info.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/setkernelobjectsecurity.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/setnamedsecurityinfo.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/setsecurityinfo.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/setuserobjectsecurity.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/.#fetch_url.py.1.1 create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/fetch_url.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/fetch_url_digest.patch create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/simple_auth.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/socket_server.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/validate_password.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/service/install/perf_install.h create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/service/install/perf_install.ini create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/service/install/readme.txt create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/service/pipeTestService.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/service/pipeTestService.py.bak create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/service/pipeTestServiceClient.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/service/pipeTestServiceClient.py.bak create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/timer_demo.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/win32clipboardDemo.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/win32comport_demo.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/win32console_demo.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/win32cred_demo.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/win32fileDemo.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/win32gui_demo.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/win32gui_dialog.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/win32gui_menu.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/win32gui_taskbar.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/win32netdemo.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/win32rcparser_demo.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/win32servicedemo.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/win32ts_logoff_disconnected.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/win32wnet/netresource.htm create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/win32wnet/testwnet.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/win32wnet/winnetwk.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/Demos/winprocess.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/_win32sysloader.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/_winxptheme.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/dbi.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/include/PyWinTypes.h create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/afxres.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/commctrl.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/mmsystem.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/netbios.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/ntsecuritycon.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/pywintypes.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/rasutil.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/regcheck.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/regutil.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/sspi.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/sspicon.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/win32con.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/win32cryptcon.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/win32evtlogutil.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/win32gui_struct.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/win32inetcon.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/win32netcon.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/win32pdhquery.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/win32pdhutil.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/win32rcparser.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/win32serviceutil.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/win32timezone.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/win32traceutil.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/win32verstamp.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/winerror.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/winioctlcon.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/winnt.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/winperf.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/lib/winxptheme.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/libs/pywintypes.lib create mode 100644 thirdparty/python25/Lib/site-packages/win32/license.txt create mode 100644 thirdparty/python25/Lib/site-packages/win32/mmapfile.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/odbc.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/perfmon.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/perfmondata.dll create mode 100644 thirdparty/python25/Lib/site-packages/win32/pythonservice.exe create mode 100644 thirdparty/python25/Lib/site-packages/win32/scripts/ControlService.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/scripts/VersionStamp/BrandProject.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/scripts/VersionStamp/bulkstamp.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/scripts/VersionStamp/vssutil.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/scripts/backupEventLog.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/scripts/ce/pysynch.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/scripts/killProcName.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/scripts/rasutil.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/scripts/regsetup.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/scripts/regsetup.py.bak create mode 100644 thirdparty/python25/Lib/site-packages/win32/scripts/setup_d.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/servicemanager.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/.#testall.py.1.4 create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/handles.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/test_clipboard.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/test_odbc.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/test_pywintypes.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/test_security.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/test_sspi.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/test_win32api.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/test_win32crypt.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/test_win32event.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/test_win32file.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/test_win32inet.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/test_win32net.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/test_win32pipe.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/test_win32rcparser.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/test_win32timezone.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/test_win32trace.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/test_win32wnet.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/testall.py create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/win32rcparser/.cvsignore create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/win32rcparser/python.bmp create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/win32rcparser/python.ico create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/win32rcparser/test.aps create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/win32rcparser/test.h create mode 100644 thirdparty/python25/Lib/site-packages/win32/test/win32rcparser/test.rc create mode 100644 thirdparty/python25/Lib/site-packages/win32/timer.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win2kras.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32api.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32clipboard.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32console.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32cred.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32crypt.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32event.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32evtlog.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32file.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32gui.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32help.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32inet.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32job.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32lz.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32net.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32pdh.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32pipe.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32popenWin9x.exe create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32print.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32process.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32profile.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32ras.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32security.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32service.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32trace.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32ts.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/win32wnet.pyd create mode 100644 thirdparty/python25/Lib/site-packages/win32/winxpgui.pyd create mode 100644 thirdparty/python25/Lib/site.py create mode 100644 thirdparty/python25/Lib/socket.py create mode 100644 thirdparty/python25/Lib/sre_compile.py create mode 100644 thirdparty/python25/Lib/sre_constants.py create mode 100644 thirdparty/python25/Lib/sre_parse.py create mode 100644 thirdparty/python25/Lib/stat.py create mode 100644 thirdparty/python25/Lib/string.py create mode 100644 thirdparty/python25/Lib/struct.py create mode 100644 thirdparty/python25/Lib/subprocess.py create mode 100644 thirdparty/python25/Lib/tempfile.py create mode 100644 thirdparty/python25/Lib/threading.py create mode 100644 thirdparty/python25/Lib/traceback.py create mode 100644 thirdparty/python25/Lib/types.py create mode 100644 thirdparty/python25/Lib/urllib.py create mode 100644 thirdparty/python25/Lib/urlparse.py create mode 100644 thirdparty/python25/Lib/warnings.py create mode 100644 thirdparty/python25/Lib/xml/__init__.py create mode 100644 thirdparty/python25/Lib/xml/dom/NodeFilter.py create mode 100644 thirdparty/python25/Lib/xml/dom/__init__.py create mode 100644 thirdparty/python25/Lib/xml/dom/domreg.py create mode 100644 thirdparty/python25/Lib/xml/dom/expatbuilder.py create mode 100644 thirdparty/python25/Lib/xml/dom/minicompat.py create mode 100644 thirdparty/python25/Lib/xml/dom/minidom.py create mode 100644 thirdparty/python25/Lib/xml/dom/pulldom.py create mode 100644 thirdparty/python25/Lib/xml/dom/xmlbuilder.py create mode 100644 thirdparty/python25/License.txt create mode 100644 thirdparty/python25/libs/_bsddb.lib create mode 100644 thirdparty/python25/libs/_ctypes.lib create mode 100644 thirdparty/python25/libs/_ctypes_test.lib create mode 100644 thirdparty/python25/libs/_elementtree.lib create mode 100644 thirdparty/python25/libs/_hashlib.lib create mode 100644 thirdparty/python25/libs/_msi.lib create mode 100644 thirdparty/python25/libs/_socket.lib create mode 100644 thirdparty/python25/libs/_sqlite3.lib create mode 100644 thirdparty/python25/libs/_ssl.lib create mode 100644 thirdparty/python25/libs/_testcapi.lib create mode 100644 thirdparty/python25/libs/_tkinter.lib create mode 100644 thirdparty/python25/libs/bz2.lib create mode 100644 thirdparty/python25/libs/libpython25.a create mode 100644 thirdparty/python25/libs/pyexpat.lib create mode 100644 thirdparty/python25/libs/python25.lib create mode 100644 thirdparty/python25/libs/rsync.lib create mode 100644 thirdparty/python25/libs/select.lib create mode 100644 thirdparty/python25/libs/unicodedata.lib create mode 100644 thirdparty/python25/libs/winsound.lib create mode 100644 thirdparty/python25/python.exe diff --git a/Duplicati.sln b/Duplicati.sln index a2a077daf..dd6964eae 100644 --- a/Duplicati.sln +++ b/Duplicati.sln @@ -1,8 +1,6 @@  Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati", "Duplicati\Duplicati.csproj", "{1470F75F-D364-4010-91D0-FD4DDA1C5159}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LightDatamodel", "..\LightDatamodel\LightDatamodel\LightDatamodel.csproj", "{CAE8433B-F013-474E-B7FC-4DE0D5933AD1}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Datamodel", "Duplicati\Datamodel\Datamodel.csproj", "{B60D0993-B0C5-457A-90D9-DB6EEB33CE47}" @@ -15,10 +13,6 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {1470F75F-D364-4010-91D0-FD4DDA1C5159}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1470F75F-D364-4010-91D0-FD4DDA1C5159}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1470F75F-D364-4010-91D0-FD4DDA1C5159}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1470F75F-D364-4010-91D0-FD4DDA1C5159}.Release|Any CPU.Build.0 = Release|Any CPU {CAE8433B-F013-474E-B7FC-4DE0D5933AD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CAE8433B-F013-474E-B7FC-4DE0D5933AD1}.Debug|Any CPU.Build.0 = Debug|Any CPU {CAE8433B-F013-474E-B7FC-4DE0D5933AD1}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/Update DEBUG Environment.bat b/Update DEBUG Environment.bat new file mode 100644 index 000000000..b87530a19 --- /dev/null +++ b/Update DEBUG Environment.bat @@ -0,0 +1,6 @@ +xcopy /Y /E thirdparty\gpg Duplicati\bin\debug\gpp\ +xcopy /Y /E thirdparty\python25 Duplicati\bin\debug\python25\ +xcopy /Y /E thirdparty\duplicity Duplicati\bin\debug\duplicity\ +xcopy /Y thirdparty\GnuPGInterface\GnuPGInterface.py Duplicati\bin\debug\duplicity\GnuPGInterface.py +xcopy /Y /E thirdparty\boto Duplicati\bin\debug\python25\lib\boto +pause \ No newline at end of file diff --git a/Update RELEASE Environment.bat b/Update RELEASE Environment.bat new file mode 100644 index 000000000..d585be3d0 --- /dev/null +++ b/Update RELEASE Environment.bat @@ -0,0 +1,6 @@ +xcopy /Y /E thirdparty\gpg Duplicati\bin\release\gpp\ +xcopy /Y /E thirdparty\python25 Duplicati\bin\release\python25\ +xcopy /Y /E thirdparty\duplicity Duplicati\bin\release\duplicity\ +xcopy /Y thirdparty\GnuPGInterface\GnuPGInterface.py Duplicati\bin\release\duplicity\GnuPGInterface.py +xcopy /Y /E thirdparty\boto Duplicati\bin\release\python25\lib\boto +pause \ No newline at end of file diff --git a/thirdparty/GnuPGInterface/GnuPGInterface.py b/thirdparty/GnuPGInterface/GnuPGInterface.py new file mode 100644 index 000000000..9d832599e --- /dev/null +++ b/thirdparty/GnuPGInterface/GnuPGInterface.py @@ -0,0 +1,729 @@ +"""Interface to GNU Privacy Guard (GnuPG) + +GnuPGInterface is a Python module to interface with GnuPG. +It concentrates on interacting with GnuPG via filehandles, +providing access to control GnuPG via versatile and extensible means. + +This module is based on GnuPG::Interface, a Perl module by the same author. + +Normally, using this module will involve creating a +GnuPG object, setting some options in it's 'options' data member +(which is of type Options), creating some pipes +to talk with GnuPG, and then calling the run() method, which will +connect those pipes to the GnuPG process. run() returns a +Process object, which contains the filehandles to talk to GnuPG with. + +Example code: + +>>> import GnuPGInterface +>>> +>>> plaintext = "Three blind mice" +>>> passphrase = "This is the passphrase" +>>> +>>> gnupg = GnuPGInterface.GnuPG() +>>> gnupg.options.armor = 1 +>>> gnupg.options.meta_interactive = 0 +>>> gnupg.options.extra_args.append('--no-secmem-warning') +>>> +>>> # Normally we might specify something in +>>> # gnupg.options.recipients, like +>>> # gnupg.options.recipients = [ '0xABCD1234', 'bob@foo.bar' ] +>>> # but since we're doing symmetric-only encryption, it's not needed. +>>> # If you are doing standard, public-key encryption, using +>>> # --encrypt, you will need to specify recipients before +>>> # calling gnupg.run() +>>> +>>> # First we'll encrypt the test_text input symmetrically +>>> p1 = gnupg.run(['--symmetric'], +... create_fhs=['stdin', 'stdout', 'passphrase']) +>>> +>>> p1.handles['passphrase'].write(passphrase) +>>> p1.handles['passphrase'].close() +>>> +>>> p1.handles['stdin'].write(plaintext) +>>> p1.handles['stdin'].close() +>>> +>>> ciphertext = p1.handles['stdout'].read() +>>> p1.handles['stdout'].close() +>>> +>>> # process cleanup +>>> p1.wait() +>>> +>>> # Now we'll decrypt what we just encrypted it, +>>> # using the convience method to get the +>>> # passphrase to GnuPG +>>> gnupg.passphrase = passphrase +>>> +>>> p2 = gnupg.run(['--decrypt'], create_fhs=['stdin', 'stdout']) +>>> +>>> p2.handles['stdin'].write(ciphertext) +>>> p2.handles['stdin'].close() +>>> +>>> decrypted_plaintext = p2.handles['stdout'].read() +>>> p2.handles['stdout'].close() +>>> +>>> # process cleanup +>>> p2.wait() +>>> +>>> # Our decrypted plaintext: +>>> decrypted_plaintext +'Three blind mice' +>>> +>>> # ...and see it's the same as what we orignally encrypted +>>> assert decrypted_plaintext == plaintext, \ + "GnuPG decrypted output does not match original input" +>>> +>>> +>>> ################################################## +>>> # Now let's trying using run()'s attach_fhs paramter +>>> +>>> # we're assuming we're running on a unix... +>>> input = open('/etc/motd') +>>> +>>> p1 = gnupg.run(['--symmetric'], create_fhs=['stdout'], +... attach_fhs={'stdin': input}) +>>> +>>> # GnuPG will read the stdin from /etc/motd +>>> ciphertext = p1.handles['stdout'].read() +>>> +>>> # process cleanup +>>> p1.wait() +>>> +>>> # Now let's run the output through GnuPG +>>> # We'll write the output to a temporary file, +>>> import tempfile +>>> temp = tempfile.TemporaryFile() +>>> +>>> p2 = gnupg.run(['--decrypt'], create_fhs=['stdin'], +... attach_fhs={'stdout': temp}) +>>> +>>> # give GnuPG our encrypted stuff from the first run +>>> p2.handles['stdin'].write(ciphertext) +>>> p2.handles['stdin'].close() +>>> +>>> # process cleanup +>>> p2.wait() +>>> +>>> # rewind the tempfile and see what GnuPG gave us +>>> temp.seek(0) +>>> decrypted_plaintext = temp.read() +>>> +>>> # compare what GnuPG decrypted with our original input +>>> input.seek(0) +>>> input_data = input.read() +>>> +>>> assert decrypted_plaintext == input_data, \ + "GnuPG decrypted output does not match original input" + +To do things like public-key encryption, simply pass do something +like: + +gnupg.passphrase = 'My passphrase' +gnupg.options.recipients = [ 'bob@foobar.com' ] +gnupg.run( ['--sign', '--encrypt'], create_fhs=..., attach_fhs=...) + +Here is an example of subclassing GnuPGInterface.GnuPG, +so that it has an encrypt_string() method that returns +ciphertext. + +>>> import GnuPGInterface +>>> +>>> class MyGnuPG(GnuPGInterface.GnuPG): +... +... def __init__(self): +... GnuPGInterface.GnuPG.__init__(self) +... self.setup_my_options() +... +... def setup_my_options(self): +... self.options.armor = 1 +... self.options.meta_interactive = 0 +... self.options.extra_args.append('--no-secmem-warning') +... +... def encrypt_string(self, string, recipients): +... gnupg.options.recipients = recipients # a list! +... +... proc = gnupg.run(['--encrypt'], create_fhs=['stdin', 'stdout']) +... +... proc.handles['stdin'].write(string) +... proc.handles['stdin'].close() +... +... output = proc.handles['stdout'].read() +... proc.handles['stdout'].close() +... +... proc.wait() +... return output +... +>>> gnupg = MyGnuPG() +>>> ciphertext = gnupg.encrypt_string("The secret", ['0x260C4FA3']) +>>> +>>> # just a small sanity test here for doctest +>>> import types +>>> assert isinstance(ciphertext, types.StringType), \ + "What GnuPG gave back is not a string!" + +Here is an example of generating a key: +>>> import GnuPGInterface +>>> gnupg = GnuPGInterface.GnuPG() +>>> gnupg.options.meta_interactive = 0 +>>> +>>> # We will be creative and use the logger filehandle to capture +>>> # what GnuPG says this time, instead stderr; no stdout to listen to, +>>> # but we capture logger to surpress the dry-run command. +>>> # We also have to capture stdout since otherwise doctest complains; +>>> # Normally you can let stdout through when generating a key. +>>> +>>> proc = gnupg.run(['--gen-key'], create_fhs=['stdin', 'stdout', +... 'logger']) +>>> +>>> proc.handles['stdin'].write('''Key-Type: DSA +... Key-Length: 1024 +... # We are only testing syntax this time, so dry-run +... %dry-run +... Subkey-Type: ELG-E +... Subkey-Length: 1024 +... Name-Real: Joe Tester +... Name-Comment: with stupid passphrase +... Name-Email: joe@foo.bar +... Expire-Date: 2y +... Passphrase: abc +... %pubring foo.pub +... %secring foo.sec +... ''') +>>> +>>> proc.handles['stdin'].close() +>>> +>>> report = proc.handles['logger'].read() +>>> proc.handles['logger'].close() +>>> +>>> proc.wait() + + +COPYRIGHT: + +Copyright (C) 2001 Frank J. Tobin, ftobin@neverending.org + +LICENSE: + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +or see http://www.gnu.org/copyleft/lesser.html +""" + +import os +import sys +import subprocess +# import fcntl + +__author__ = "Frank J. Tobin, ftobin@neverending.org" +__version__ = "0.3.2" +__revision__ = "$Id: GnuPGInterface.py,v 1.22 2002/01/11 20:22:04 ftobin Exp $" + +# "standard" filehandles attached to processes +_stds = [ 'stdin', 'stdout', 'stderr' ] + +# the permissions each type of fh needs to be opened with +_fd_modes = { 'stdin': 'w', + 'stdout': 'r', + 'stderr': 'r', + 'passphrase': 'w', + 'command': 'w', + 'logger': 'r', + 'status': 'r' + } + +# correlation between handle names and the arguments we'll pass +_fd_options = { 'passphrase': '--passphrase-fd', + 'logger': '--logger-fd', + 'status': '--status-fd', + 'command': '--command-fd' } + +class GnuPG: + """Class instances represent GnuPG. + + Instance attributes of a GnuPG object are: + + * call -- string to call GnuPG with. Defaults to "gpg" + + * passphrase -- Since it is a common operation + to pass in a passphrase to GnuPG, + and working with the passphrase filehandle mechanism directly + can be mundane, if set, the passphrase attribute + works in a special manner. If the passphrase attribute is set, + and no passphrase file object is sent in to run(), + then GnuPG instnace will take care of sending the passphrase to + GnuPG, the executable instead of having the user sent it in manually. + + * options -- Object of type GnuPGInterface.Options. + Attribute-setting in options determines + the command-line options used when calling GnuPG. + """ + + def __init__(self): + self.call = 'gpg' + self.passphrase = None + self.options = Options() + + def run(self, gnupg_commands, args=None, create_fhs=None, attach_fhs=None): + """Calls GnuPG with the list of string commands gnupg_commands, + complete with prefixing dashes. + For example, gnupg_commands could be + '["--sign", "--encrypt"]' + Returns a GnuPGInterface.Process object. + + args is an optional list of GnuPG command arguments (not options), + such as keyID's to export, filenames to process, etc. + + create_fhs is an optional list of GnuPG filehandle + names that will be set as keys of the returned Process object's + 'handles' attribute. The generated filehandles can be used + to communicate with GnuPG via standard input, standard output, + the status-fd, passphrase-fd, etc. + + Valid GnuPG filehandle names are: + * stdin + * stdout + * stderr + * status + * passphase + * command + * logger + + The purpose of each filehandle is described in the GnuPG + documentation. + + attach_fhs is an optional dictionary with GnuPG filehandle + names mapping to opened files. GnuPG will read or write + to the file accordingly. For example, if 'my_file' is an + opened file and 'attach_fhs[stdin] is my_file', then GnuPG + will read its standard input from my_file. This is useful + if you want GnuPG to read/write to/from an existing file. + For instance: + + f = open("encrypted.gpg") + gnupg.run(["--decrypt"], attach_fhs={'stdin': f}) + + Using attach_fhs also helps avoid system buffering + issues that can arise when using create_fhs, which + can cause the process to deadlock. + + If not mentioned in create_fhs or attach_fhs, + GnuPG filehandles which are a std* (stdin, stdout, stderr) + are defaulted to the running process' version of handle. + Otherwise, that type of handle is simply not used when calling GnuPG. + For example, if you do not care about getting data from GnuPG's + status filehandle, simply do not specify it. + + run() returns a Process() object which has a 'handles' + which is a dictionary mapping from the handle name + (such as 'stdin' or 'stdout') to the respective + newly-created FileObject connected to the running GnuPG process. + For instance, if the call was + + process = gnupg.run(["--decrypt"], stdin=1) + + after run returns 'process.handles["stdin"]' + is a FileObject connected to GnuPG's standard input, + and can be written to. + """ + + if args == None: args = [] + if create_fhs == None: create_fhs = [] + if attach_fhs == None: attach_fhs = {} + + for std in _stds: + if not attach_fhs.has_key(std) \ + and std not in create_fhs: + attach_fhs.setdefault(std, getattr(sys, std)) + + handle_passphrase = 0 + + if self.passphrase != None \ + and not attach_fhs.has_key('passphrase') \ + and 'passphrase' not in create_fhs: + handle_passphrase = 1 + create_fhs.append('passphrase') + + process = self._attach_fork_exec(gnupg_commands, args, + create_fhs, attach_fhs) + + if handle_passphrase: + passphrase_fh = process.handles['passphrase'] + passphrase_fh.write( self.passphrase ) + passphrase_fh.close() + del process.handles['passphrase'] + + return process + + + def _attach_fork_exec(self, gnupg_commands, args, create_fhs, attach_fhs): + """This is like run(), but without the passphrase-helping + (note that run() calls this).""" + + process = Process() + + for fh_name in create_fhs + attach_fhs.keys(): + if not _fd_modes.has_key(fh_name): + raise KeyError, \ + "unrecognized filehandle name '%s'; must be one of %s" \ + % (fh_name, _fd_modes.keys()) + + for fh_name in create_fhs: + # make sure the user doesn't specify a filehandle + # to be created *and* attached + if attach_fhs.has_key(fh_name): + raise ValueError, \ + "cannot have filehandle '%s' in both create_fhs and attach_fhs" \ + % fh_name + + + + process_arg = self._as_child(process, gnupg_commands, args, attach_fhs) + + + if not attach_fhs.has_key("stdin"): + process.handles["stdin"] = process_arg.stdin + process.closehandles["stdin"] = process_arg.stdin + else: + process.handles["stdin"] = attach_fhs["stdin"] + + if not attach_fhs.has_key("stdout"): + process.handles["stdout"] = process_arg.stdout + process.closehandles["stdout"] = process_arg.stdout + else: + process.handles["stdout"] = attach_fhs["stdout"] + + if not attach_fhs.has_key("stderr"): + process.handles["stderr"] = process_arg.stderr + process.closehandles["stderr"] = process_arg.stderr + else: + process.handles["stderr"] = attach_fhs["stderr"] + + process.handles["passphrase"] = FakeFile(process.handles["stdin"]) + + process.args = process_arg + process.pid = process_arg.pid + return process + + + def _as_parent(self, process): + """Stuff run after forking in parent""" + for k, p in process._pipes.items(): + if not p.direct: + os.close(p.child) + process.handles[k] = os.fdopen(p.parent, _fd_modes[k]) + + # user doesn't need these + #del process._pipes + + return process + + + def _as_child(self, process, gnupg_commands, args, attach_fhs): + """Stuff run after forking in child""" + # child + + fd_args = [] + + k = 'passphrase' + fd_args.extend([ _fd_options[k], "%d" % 0 ]) + + command = [ self.call ] + fd_args + self.options.get_args() \ + + gnupg_commands + args + + stdin = subprocess.PIPE + stdout = subprocess.PIPE + stderr = subprocess.PIPE + + if attach_fhs.has_key("stdin"): + stdin = attach_fhs['stdin'] + + if attach_fhs.has_key("stdout"): + stdout = attach_fhs['stdout'] + + if attach_fhs.has_key("stderr"): + stderr = attach_fhs['stderr'] + + #os.execvp( command[0], command ) + #return subprocess.Popen(command, 0, None, 4, 3, 5) + #return subprocess.Popen(command, 0, None, stdin, stdout, stderr) + return subprocess.Popen(command, 0, None, stdin, stdout, stderr) + #return subprocess.Popen(command, 0, None, process._pipes['stdin'].child, process._pipes['stdout'].child, process._pipes['stderr'].child) + +class FakeFile: + """Simple wrapper for a file, where close is substituted with linefeed""" + + def __init__(self, file): + self._file = file + self._closed = 0 + + def write(self, arg): + if self._closed: + raise ValueError, \ + "handle is closed" + self._file.write(arg) + + def close(self): + self.write("\n") + self._closed = 1 + + +class Pipe: + """simple struct holding stuff about pipes we use""" + def __init__(self, parent, child, direct): + self.parent = parent + self.child = child + self.direct = direct + + +class Options: + """Objects of this class encompass options passed to GnuPG. + This class is responsible for determining command-line arguments + which are based on options. It can be said that a GnuPG + object has-a Options object in its options attribute. + + Attributes which correlate directly to GnuPG options: + + Each option here defaults to false or None, and is described in + GnuPG documentation. + + Booleans (set these attributes to booleans) + + * armor + * no_greeting + * no_verbose + * quiet + * batch + * always_trust + * rfc1991 + * openpgp + * force_v3_sigs + * no_options + * textmode + + Strings (set these attributes to strings) + + * homedir + * default_key + * comment + * compress_algo + * options + + Lists (set these attributes to lists) + + * recipients (***NOTE*** plural of 'recipient') + * encrypt_to + + Meta options + + Meta options are options provided by this module that do + not correlate directly to any GnuPG option by name, + but are rather bundle of options used to accomplish + a specific goal, such as obtaining compatibility with PGP 5. + The actual arguments each of these reflects may change with time. Each + defaults to false unless otherwise specified. + + meta_pgp_5_compatible -- If true, arguments are generated to try + to be compatible with PGP 5.x. + + meta_pgp_2_compatible -- If true, arguments are generated to try + to be compatible with PGP 2.x. + + meta_interactive -- If false, arguments are generated to try to + help the using program use GnuPG in a non-interactive + environment, such as CGI scripts. Default is true. + + extra_args -- Extra option arguments may be passed in + via the attribute extra_args, a list. + + >>> import GnuPGInterface + >>> + >>> gnupg = GnuPGInterface.GnuPG() + >>> gnupg.options.armor = 1 + >>> gnupg.options.recipients = ['Alice', 'Bob'] + >>> gnupg.options.extra_args = ['--no-secmem-warning'] + >>> + >>> # no need for users to call this normally; just for show here + >>> gnupg.options.get_args() + ['--armor', '--recipient', 'Alice', '--recipient', 'Bob', '--no-secmem-warning'] + """ + + def __init__(self): + # booleans + self.armor = 0 + self.no_greeting = 0 + self.verbose = 0 + self.no_verbose = 0 + self.quiet = 0 + self.batch = 0 + self.always_trust = 0 + self.rfc1991 = 0 + self.openpgp = 0 + self.force_v3_sigs = 0 + self.no_options = 0 + self.textmode = 0 + + # meta-option booleans + self.meta_pgp_5_compatible = 0 + self.meta_pgp_2_compatible = 0 + self.meta_interactive = 1 + + # strings + self.homedir = None + self.default_key = None + self.comment = None + self.compress_algo = None + self.options = None + + # lists + self.encrypt_to = [] + self.recipients = [] + + # miscellaneous arguments + self.extra_args = [] + + def get_args( self ): + """Generate a list of GnuPG arguments based upon attributes.""" + + return self.get_meta_args() + self.get_standard_args() + self.extra_args + + def get_standard_args( self ): + """Generate a list of standard, non-meta or extra arguments""" + args = [] + if self.homedir != None: args.extend( [ '--homedir', self.homedir ] ) + if self.options != None: args.extend( [ '--options', self.options ] ) + if self.comment != None: args.extend( [ '--comment', self.comment ] ) + if self.compress_algo != None: args.extend( [ '--compress-algo', self.compress_algo ] ) + if self.default_key != None: args.extend( [ '--default-key', self.default_key ] ) + + if self.no_options: args.append( '--no-options' ) + if self.armor: args.append( '--armor' ) + if self.textmode: args.append( '--textmode' ) + if self.no_greeting: args.append( '--no-greeting' ) + if self.verbose: args.append( '--verbose' ) + if self.no_verbose: args.append( '--no-verbose' ) + if self.quiet: args.append( '--quiet' ) + if self.batch: args.append( '--batch' ) + if self.always_trust: args.append( '--always-trust' ) + if self.force_v3_sigs: args.append( '--force-v3-sigs' ) + if self.rfc1991: args.append( '--rfc1991' ) + if self.openpgp: args.append( '--openpgp' ) + + for r in self.recipients: args.extend( [ '--recipient', r ] ) + for r in self.encrypt_to: args.extend( [ '--encrypt-to', r ] ) + + return args + + def get_meta_args( self ): + """Get a list of generated meta-arguments""" + args = [] + + if self.meta_pgp_5_compatible: args.extend( [ '--compress-algo', '1', + '--force-v3-sigs' + ] ) + if self.meta_pgp_2_compatible: args.append( '--rfc1991' ) + if not self.meta_interactive: args.extend( [ '--batch', '--no-tty' ] ) + + return args + + +class Process: + """Objects of this class encompass properties of a GnuPG + process spawned by GnuPG.run(). + + # gnupg is a GnuPG object + process = gnupg.run( [ '--decrypt' ], stdout = 1 ) + out = process.handles['stdout'].read() + ... + os.waitpid( process.pid, 0 ) + + Data Attributes + + handles -- This is a map of filehandle-names to + the file handles, if any, that were requested via run() and hence + are connected to the running GnuPG process. Valid names + of this map are only those handles that were requested. + + pid -- The PID of the spawned GnuPG process. + Useful to know, since once should call + os.waitpid() to clean up the process, especially + if multiple calls are made to run(). + """ + + def __init__(self): + self._pipes = {} + self.handles = {} + self.pid = None + self._waited = None + self.closehandles = {} + + def wait(self): + """Wait on the process to exit, allowing for child cleanup. + Will raise an IOError if the process exits non-zero.""" + + e = self.args.wait() + + if self.handles.has_key('stdout'): + if not self.handles['stdout'].closed: + self.handles['stdout'].close() + + if e != 0: + raise IOError, "GnuPG exited non-zero, with code %d" % (e << 8) + +def _run_doctests(): + import doctest, GnuPGInterface + + return doctest.testmod(GnuPGInterface) + +def _run_my_test(): + import GnuPGInterface, subprocess, os + try: +# pobj = subprocess.Popen(["C:\Programmer\GNU\GnuPG\gpg.exe"]) + + plaintext = "Three blind mice" + passphrase = "This is the passphrase" + + gnupg = GnuPGInterface.GnuPG() + gnupg.options.armor = 1 + gnupg.options.meta_interactive = 0 + gnupg.options.extra_args.append('--no-secmem-warning') + + p1 = gnupg.run(['--symmetric'], create_fhs=['stdin', 'stdout', 'passphrase']) + p1.handles['passphrase'].write(passphrase) + p1.handles['passphrase'].close() + + p1.handles['stdin'].write(plaintext) + p1.handles['stdin'].close() + + ciphertext = p1.handles['stdout'].read() + p1.handles['stdout'].close() + + p1.wait() + + gnupg.passphrase = passphrase + p2 = gnupg.run(['--decrypt'], create_fhs=['stdin', 'stdout']) + + p2.handles['stdin'].write(ciphertext) + p2.handles['stdin'].close() + decrypted_plaintext = p2.handles['stdout'].read() + p2.handles['stdout'].close() + p2.wait() + except Exception, e: + pobj = None + +# deprecated +GnuPGInterface = GnuPG + +if __name__ == '__main__': + _run_my_test() + _run_doctests() diff --git a/thirdparty/GnuPGInterface/Homepage.txt b/thirdparty/GnuPGInterface/Homepage.txt new file mode 100644 index 000000000..cd2c88700 --- /dev/null +++ b/thirdparty/GnuPGInterface/Homepage.txt @@ -0,0 +1 @@ +http://py-gnupg.sourceforge.net/ \ No newline at end of file diff --git a/thirdparty/GnuPGInterface/License.txt b/thirdparty/GnuPGInterface/License.txt new file mode 100644 index 000000000..b1e3f5a26 --- /dev/null +++ b/thirdparty/GnuPGInterface/License.txt @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/thirdparty/Readme.txt b/thirdparty/Readme.txt new file mode 100644 index 000000000..e76c61eee --- /dev/null +++ b/thirdparty/Readme.txt @@ -0,0 +1,14 @@ +The files and folders here are not owned by Duplicati. +Each folder has a "License.txt" file that describes the license for that item. +Each folder has a "Homepage.txt" file that contains a link to the page where the files were originally downloaded. + +Duplicity has been modified slightly for use with Windows. +The most work is providing sensible defaults for missing operations. +The way GnuPGInterface.py interacts with gpg.exe was changed. +Due to limitations in Windows, the handles/pipes +cannot be transfered between processes. + +Hopefully these changes will make it back into Duplicity. + +None of the other packages have been modified, and thus does not contain sourcecode. + diff --git a/thirdparty/SQLite/Bin/Homepage.txt b/thirdparty/SQLite/Bin/Homepage.txt new file mode 100644 index 000000000..ea2cb7151 --- /dev/null +++ b/thirdparty/SQLite/Bin/Homepage.txt @@ -0,0 +1 @@ +http://www.sqlite.org/ \ No newline at end of file diff --git a/thirdparty/SQLite/Bin/License.txt b/thirdparty/SQLite/Bin/License.txt new file mode 100644 index 000000000..26eadd0cd --- /dev/null +++ b/thirdparty/SQLite/Bin/License.txt @@ -0,0 +1,34 @@ +SQLite Copyright + +SQLite is in the +Public Domain + +All of the deliverable code in SQLite has been dedicated to the public domain by the authors. All code authors, and representatives of the companies they work for, have signed affidavits dedicating their contributions to the public domain and originals of those signed affidavits are stored in a firesafe at the main offices of Hwaci. Anyone is free to copy, modify, publish, use, compile, sell, or distribute the original SQLite code, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. + +The previous paragraph applies to the deliverable code in SQLite - those parts of the SQLite library that you actually bundle and ship with a larger application. Portions of the documentation and some code used as part of the build process might fall under other licenses. The details here are unclear. We do not worry about the licensing of the documentation and build code so much because none of these things are part of the core deliverable SQLite library. + +All of the deliverable code in SQLite has been written from scratch. No code has been taken from other projects or from the open internet. Every line of code can be traced back to its original author, and all of those authors have public domain dedications on file. So the SQLite code base is clean and is uncontaminated with licensed code from other projects. +Obtaining An Explicit License To Use SQLite + +Even though SQLite is in the public domain and does not require a license, some users want to obtain a license anyway. Some reasons for obtaining a license include: + + * You are using SQLite in a jurisdiction that does not recognize the public domain. + * You are using SQLite in a jurisdiction that does not recognize the right of an author to dedicate their work to the public domain. + * You want to hold a tangible legal document as evidence that you have the legal right to use and distribute SQLite. + * Your legal department tells you that you have to purchase a license. + +If you feel like you really have to purchase a license for SQLite, Hwaci, the company that employs the architect and principal developers of SQLite, will sell you one. +Contributed Code + +In order to keep SQLite completely free and unencumbered by copyright, all new contributors to the SQLite code base are asked to dedicate their contributions to the public domain. If you want to send a patch or enhancement for possible inclusion in the SQLite source tree, please accompany the patch with the following statement: + + The author or authors of this code dedicate any and all copyright interest in this code to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this code under copyright law. + +We are not able to accept patches or changes to SQLite that are not accompanied by a statement such as the above. In addition, if you make changes or enhancements as an employee, then a simple statement such as the above is insufficient. You must also send by surface mail a copyright release signed by a company officer. A signed original of the copyright release should be mailed to: + + Hwaci + 6200 Maple Cove Lane + Charlotte, NC 28269 + USA + +A template copyright release is available in PDF or HTML. You can use this release to make future changes. \ No newline at end of file diff --git a/thirdparty/SQLite/Bin/sqlite3.dll b/thirdparty/SQLite/Bin/sqlite3.dll new file mode 100644 index 0000000000000000000000000000000000000000..c22d041115164332bf67a645add836b98a00da1b GIT binary patch literal 408724 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%0A9}~Z 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
i^_|0ppZna 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

HkT^nmmn;c2d2!%)KezjV!u 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%0DPlC>7vX~hZ5E%ZVItp|kQ1_{Z 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� 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 + @return: A connection to Amazon's SQS + """ + from boto.sqs.connection import SQSConnection + return SQSConnection(aws_access_key_id, aws_secret_access_key, **kwargs) + +def connect_s3(aws_access_key_id=None, aws_secret_access_key=None, **kwargs): + """ + @type aws_access_key_id: string + @param aws_access_key_id: Your AWS Access Key ID + + @type aws_secret_access_key: string + @param aws_secret_access_key: Your AWS Secret Access Key + + @rtype: L{S3Connection} + @return: A connection to Amazon's S3 + """ + from boto.s3.connection import S3Connection + return S3Connection(aws_access_key_id, aws_secret_access_key, **kwargs) + +def connect_ec2(aws_access_key_id=None, aws_secret_access_key=None, **kwargs): + """ + @type aws_access_key_id: string + @param aws_access_key_id: Your AWS Access Key ID + + @type aws_secret_access_key: string + @param aws_secret_access_key: Your AWS Secret Access Key + + @rtype: L{EC2Connection} + @return: A connection to Amazon's EC2 + """ + from boto.ec2.connection import EC2Connection + return EC2Connection(aws_access_key_id, aws_secret_access_key, **kwargs) + +def connect_sdb(aws_access_key_id=None, aws_secret_access_key=None, **kwargs): + """ + @type aws_access_key_id: string + @param aws_access_key_id: Your AWS Access Key ID + + @type aws_secret_access_key: string + @param aws_secret_access_key: Your AWS Secret Access Key + + @rtype: L{SDBConnection} + @return: A connection to Amazon's SDB + """ + from boto.sdb.connection import SDBConnection + return SDBConnection(aws_access_key_id, aws_secret_access_key, **kwargs) + +def connect_fps(aws_access_key_id=None, aws_secret_access_key=None, **kwargs): + """ + @type aws_access_key_id: string + @param aws_access_key_id: Your AWS Access Key ID + + @type aws_secret_access_key: string + @param aws_secret_access_key: Your AWS Secret Access Key + + @rtype: L{FPSConnection} + @return: A connection to FPS + """ + from boto.fps.connection import FPSConnection + return FPSConnection(aws_access_key_id, aws_secret_access_key, **kwargs) + +def check_extensions(module_name, module_path): + """ + This function checks for extensions to boto modules. It should be called in the + __init__.py file of all boto modules. See: + http://code.google.com/p/boto/wiki/ExtendModules + + for details. + """ + option_name = '%s_extend' % module_name + version = config.get('Boto', option_name, None) + if version: + dirname = module_path[0] + path = os.path.join(dirname, version) + if os.path.isdir(path): + log.info('extending module %s with: %s' % (module_name, path)) + module_path.insert(0, path) + +_aws_cache = {} + +def _get_aws_conn(service): + global _aws_cache + conn = _aws_cache.get(service) + if not conn: + meth = getattr(sys.modules[__name__], 'connect_'+service) + conn = meth() + _aws_cache[service] = conn + return conn + +def lookup(service, name): + global _aws_cache + conn = _get_aws_conn(service) + obj = _aws_cache.get('.'.join((service,name)), None) + if not obj: + obj = conn.lookup(name) + _aws_cache['.'.join((service,name))] = obj + return obj + diff --git a/thirdparty/boto/connection.py b/thirdparty/boto/connection.py new file mode 100644 index 000000000..117621639 --- /dev/null +++ b/thirdparty/boto/connection.py @@ -0,0 +1,437 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +# +# Parts of this code were copied or derived from sample code supplied by AWS. +# The following notice applies to that code. +# +# This software code is made available "AS IS" without warranties of any +# kind. You may copy, display, modify and redistribute the software +# code either by itself or as incorporated into your code; provided that +# you do not remove any proprietary notices. Your use of this software +# code is at your own risk and you waive any claim against Amazon +# Digital Services, Inc. or its affiliates with respect to your use of +# this software code. (c) 2006 Amazon Digital Services, Inc. or its +# affiliates. + +""" +Handles basic connections to AWS +""" + +import base64 +import hmac +import httplib +import socket, errno +import re +import sha +import sys +import time +import urllib, urlparse +import os +import xml.sax +import boto +from boto.exception import AWSConnectionError, BotoClientError, BotoServerError +from boto.resultset import ResultSet +import boto.utils +from boto import config, UserAgent, handler + +PORTS_BY_SECURITY = { True: 443, False: 80 } + +class AWSAuthConnection: + def __init__(self, server, aws_access_key_id=None, + aws_secret_access_key=None, is_secure=True, port=None, + proxy=None, proxy_port=None, proxy_user=None, + proxy_pass=None, debug=0, https_connection_factory=None): + """ + @type server: string + @param server: The server to make the connection to + + @type aws_access_key_id: string + @param aws_access_key_id: AWS Access Key ID (provided by Amazon) + + @type aws_secret_access_key: string + @param aws_secret_access_key: Secret Access Key (provided by Amazon) + + @type is_secure: boolean + @param is_secure: Whether the connection is over SSL + + @type https_connection_factory: list or tuple + @param https_connection_factory: A pair of an HTTP connection factory and the exceptions to catch. The factory should have a similar interface to L{httplib.HTTPSConnection}. + + @type proxy: + @param proxy: + + @type proxy_port: int + @param proxy_port: The port to use when connecting over a proxy + + @type proxy_user: string + @param proxy_user: The username to connect with on the proxy + + @type proxy_pass: string + @param proxy_pass: The password to use when connection over a proxy. + + @type port: integer + @param port: The port to use to connect + """ + + self.num_retries = 5 + self.is_secure = is_secure + self.handle_proxy(proxy, proxy_port, proxy_user, proxy_pass) + # define exceptions from httplib that we want to catch and retry + self.http_exceptions = (httplib.HTTPException, socket.error, socket.gaierror) + # define values in socket exceptions we don't want to catch + self.socket_exception_values = (errno.EINTR,) + if https_connection_factory is not None: + self.https_connection_factory = https_connection_factory[0] + self.http_exceptions += https_connection_factory[1] + else: + self.https_connection_factory = None + if (is_secure): + self.protocol = 'https' + else: + self.protocol = 'http' + self.server = server + if debug: + self.debug = debug + else: + self.debug = config.getint('Boto', 'debug', debug) + if port: + self.port = port + else: + self.port = PORTS_BY_SECURITY[is_secure] + self.server_name = '%s:%d' % (server, self.port) + + if aws_access_key_id: + self.aws_access_key_id = aws_access_key_id + elif os.environ.has_key('AWS_ACCESS_KEY_ID'): + self.aws_access_key_id = os.environ['AWS_ACCESS_KEY_ID'] + elif config.has_option('Credentials', 'aws_access_key_id'): + self.aws_access_key_id = config.get('Credentials', 'aws_access_key_id') + + if aws_secret_access_key: + self.aws_secret_access_key = aws_secret_access_key + elif os.environ.has_key('AWS_SECRET_ACCESS_KEY'): + self.aws_secret_access_key = os.environ['AWS_SECRET_ACCESS_KEY'] + elif config.has_option('Credentials', 'aws_secret_access_key'): + self.aws_secret_access_key = config.get('Credentials', 'aws_secret_access_key') + + # initialize an HMAC for signatures, make copies with each request + self.hmac = hmac.new(key=self.aws_secret_access_key, digestmod=sha) + + # cache up to 20 connections + self._cache = boto.utils.LRUCache(20) + self.refresh_http_connection(self.server, self.is_secure) + self._last_rs = None + + def handle_proxy(self, proxy, proxy_port, proxy_user, proxy_pass): + self.proxy = proxy + self.proxy_port = proxy_port + self.proxy_user = proxy_user + self.proxy_pass = proxy_pass + if os.environ.has_key('http_proxy') and not self.proxy: + pattern = re.compile( + '(?:http://)?' \ + '(?:(?P\w+):(?P.*)@)?' \ + '(?P[\w\-\.]+)' \ + '(?::(?P\d+))?' + ) + match = pattern.match(os.environ['http_proxy']) + if match: + self.proxy = match.group('host') + self.proxy_port = match.group('port') + self.proxy_user = match.group('user') + self.proxy_pass = match.group('pass') + else: + if not self.proxy: + self.proxy = config.get_value('Boto', 'proxy', None) + if not self.proxy_port: + self.proxy_port = config.get_value('Boto', 'proxy_port', None) + if not self.proxy_user: + self.proxy_user = config.get_value('Boto', 'proxy_user', None) + if not self.proxy_pass: + self.proxy_pass = config.get_value('Boto', 'proxy_pass', None) + + if not self.proxy_port and self.proxy: + print "http_proxy environment variable does not specify " \ + "a port, using default" + self.proxy_port = self.port + self.use_proxy = (self.proxy != None) + if self.use_proxy and self.is_secure: + raise AWSConnectionError("Unable to provide secure connection through proxy") + + def get_http_connection(self, host, is_secure): + if host is None: + host = '%s:%d' % (self.server, self.port) + cached_name = is_secure and 'https://' or 'http://' + cached_name += host + if cached_name in self._cache: + return self._cache[cached_name] + return self.refresh_http_connection(host, is_secure) + + def refresh_http_connection(self, host, is_secure): + if self.use_proxy: + host = '%s:%d' % (self.proxy, int(self.proxy_port)) + if host is None: + host = '%s:%d' % (self.server, self.port) + boto.log.debug('establishing HTTP connection') + if is_secure: + if self.https_connection_factory: + connection = self.https_connection_factory(host) + else: + connection = httplib.HTTPSConnection(host) + else: + connection = httplib.HTTPConnection(host) + if self.debug > 1: + connection.set_debuglevel(self.debug) + cached_name = is_secure and 'https://' or 'http://' + cached_name += host + if cached_name in self._cache: + boto.log.debug('closing old HTTP connection') + self._cache[cached_name].close() + self._cache[cached_name] = connection + # update self.connection for backwards-compatibility + if host.split(':')[0] == self.server and is_secure == self.is_secure: + self.connection = connection + return connection + + def prefix_proxy_to_path(self, path, host=None): + path = self.protocol + '://' + (host or self.server) + path + return path + + def get_proxy_auth_header(self): + auth = base64.encodestring(self.proxy_user+':'+self.proxy_pass) + return {'Proxy-Authorization': 'Basic %s' % auth} + + def _mexe(self, method, path, data, headers, host=None, sender=None): + """ + mexe - Multi-execute inside a loop, retrying multiple times to handle + transient Internet errors by simply trying again. + Also handles redirects. + + This code was inspired by the S3Utils classes posted to the boto-users + Google group by Larry Bates. Thanks! + """ + boto.log.debug('Method: %s' % method) + boto.log.debug('Path: %s' % path) + boto.log.debug('Data: %s' % data) + boto.log.debug('Headers: %s' % headers) + boto.log.debug('Host: %s' % host) + response = None + body = None + e = None + num_retries = config.getint('Boto', 'num_retries', self.num_retries) + i = 0 + connection = self.get_http_connection(host, self.is_secure) + while i <= num_retries: + try: + if callable(sender): + response = sender(connection, method, path, data, headers) + else: + connection.request(method, path, data, headers) + response = connection.getresponse() + location = response.getheader('location') + if response.status == 500 or response.status == 503: + boto.log.debug('received %d response, retrying in %d seconds' % (response.status, 2**i)) + body = response.read() + elif response.status == 408: + body = response.read() + print '-------------------------' + print ' 4 0 8 ' + print 'path=%s' % path + print body + print '-------------------------' + elif response.status < 300 or response.status >= 400 or \ + not location: + return response + else: + scheme, host, path, params, query, fragment = \ + urlparse.urlparse(location) + if query: + path += '?' + query + boto.log.debug('Redirecting: %s' % scheme + '://' + host + path) + connection = self.get_http_connection(host, + scheme == 'https') + continue + except KeyboardInterrupt: + sys.exit('Keyboard Interrupt') + except self.http_exceptions, e: + boto.log.debug('encountered %s exception, reconnecting' % \ + e.__class__.__name__) + connection = self.refresh_http_connection(host, self.is_secure) + time.sleep(2**i) + i += 1 + # If we made it here, it's because we have exhausted our retries and stil haven't + # succeeded. So, if we have a response object, use it to raise an exception. + # Otherwise, raise the exception that must have already happened. + if response: + raise BotoServerError(response.status, response.reason, body) + elif e: + raise e + else: + raise BotoClientError('Please report this exception as a Boto Issue!') + + def make_request(self, method, path, headers=None, data='', host=None, + auth_path=None, sender=None): + if headers == None: + headers = {'User-Agent' : UserAgent} + else: + headers = headers.copy() + if not headers.has_key('Content-Length'): + headers['Content-Length'] = len(data) + if self.use_proxy: + path = self.prefix_proxy_to_path(path, host) + if self.proxy_user and self.proxy_pass: + headers.update(self.get_proxy_auth_header()) + self.add_aws_auth_header(headers, method, auth_path or path) + return self._mexe(method, path, data, headers, host, sender) + + def add_aws_auth_header(self, headers, method, path): + if not headers.has_key('Date'): + headers['Date'] = time.strftime("%a, %d %b %Y %H:%M:%S GMT", + time.gmtime()) + + c_string = boto.utils.canonical_string(method, path, headers) + boto.log.debug('Canonical: %s' % c_string) + hmac = self.hmac.copy() + hmac.update(c_string) + b64_hmac = base64.encodestring(hmac.digest()).strip() + headers['Authorization'] = "AWS %s:%s" % (self.aws_access_key_id, b64_hmac) + +class AWSQueryConnection(AWSAuthConnection): + + APIVersion = '' + SignatureVersion = '1' + ResponseError = BotoServerError + + def __init__(self, aws_access_key_id=None, aws_secret_access_key=None, + is_secure=True, port=None, proxy=None, proxy_port=None, + proxy_user=None, proxy_pass=None, host=None, debug=0, + https_connection_factory=None): + AWSAuthConnection.__init__(self, host, aws_access_key_id, aws_secret_access_key, + is_secure, port, proxy, proxy_port, proxy_user, proxy_pass, + debug, https_connection_factory) + + def calc_signature_0(self, params): + boto.log.debug('using calc_signature_0') + hmac = self.hmac.copy() + s = params['Action'] + params['Timestamp'] + hmac.update(s) + keys = params.keys() + keys.sort(cmp = lambda x, y: cmp(x.lower(), y.lower())) + qs = '' + for key in keys: + qs += key + '=' + urllib.quote(unicode(params[key]).encode('utf-8')) + '&' + return (qs, base64.b64encode(hmac.digest())) + + def calc_signature_1(self, params): + boto.log.debug('using calc_signature_1') + hmac = self.hmac.copy() + keys = params.keys() + keys.sort(cmp = lambda x, y: cmp(x.lower(), y.lower())) + qs = '' + for key in keys: + hmac.update(key) + val = params[key] + if not isinstance(val, str) and not isinstance(val, unicode): + val = str(val) + hmac.update(val) + qs += key + '=' + urllib.quote(unicode(params[key]).encode('utf-8')) + '&' + return (qs, base64.b64encode(hmac.digest())) + + def get_signature(self, params): + if self.SignatureVersion == '1': + t = self.calc_signature_1(params) + elif self.SignatureVersion == '0': + t = self.calc_signature_0(params) + else: + raise BotoClientError('Unknown Signature Version: %s' % self.SignatureVersion) + return t + + def make_request(self, action, params=None, path=None, verb='GET'): + headers = {'User-Agent' : UserAgent} + if path == None: + path = '/' + if params == None: + params = {} + params['Action'] = action + params['Version'] = self.APIVersion + params['AWSAccessKeyId'] = self.aws_access_key_id + params['SignatureVersion'] = self.SignatureVersion + params['Timestamp'] = time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime()) + qs, signature = self.get_signature(params) + qs = path + '?' + qs + 'Signature=' + urllib.quote(signature) + if self.use_proxy: + qs = self.prefix_proxy_to_path(qs) + return self._mexe(verb, qs, None, headers) + + def build_list_params(self, params, items, label): + if isinstance(items, str): + items = [items] + for i in range(1, len(items)+1): + params['%s.%d' % (label, i)] = items[i-1] + + # generics + + def get_list(self, action, params, markers, path='/', parent=None): + if not parent: + parent = self + response = self.make_request(action, params, path) + body = response.read() + if response.status == 200: + rs = ResultSet(markers) + h = handler.XmlHandler(rs, parent) + xml.sax.parseString(body, h) + return rs + else: + boto.log.error('%s %s' % (response.status, response.reason)) + boto.log.error('%s' % body) + raise self.ResponseError(response.status, response.reason, body) + + def get_object(self, action, params, cls, path='/', parent=None): + if not parent: + parent = self + response = self.make_request(action, params, path) + body = response.read() + if response.status == 200: + obj = cls(parent) + h = handler.XmlHandler(obj, parent) + xml.sax.parseString(body, h) + return obj + else: + boto.log.error('%s %s' % (response.status, response.reason)) + boto.log.error('%s' % body) + raise self.ResponseError(response.status, response.reason, body) + + def get_status(self, action, params, path='/', parent=None): + if not parent: + parent = self + response = self.make_request(action, params, path) + body = response.read() + if response.status == 200: + rs = ResultSet() + h = handler.XmlHandler(rs, parent) + xml.sax.parseString(body, h) + return rs.status + else: + boto.log.error('%s %s' % (response.status, response.reason)) + boto.log.error('%s' % body) + raise self.ResponseError(response.status, response.reason, body) + diff --git a/thirdparty/boto/contrib/__init__.py b/thirdparty/boto/contrib/__init__.py new file mode 100644 index 000000000..303dbb66c --- /dev/null +++ b/thirdparty/boto/contrib/__init__.py @@ -0,0 +1,22 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# + diff --git a/thirdparty/boto/contrib/m2helpers.py b/thirdparty/boto/contrib/m2helpers.py new file mode 100644 index 000000000..82d273051 --- /dev/null +++ b/thirdparty/boto/contrib/m2helpers.py @@ -0,0 +1,52 @@ +# Copyright (c) 2006,2007 Jon Colverson +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +This module was contributed by Jon Colverson. It provides a couple of helper +functions that allow you to use M2Crypto's implementation of HTTPSConnection +rather than the default version in httplib.py. The main benefit is that +M2Crypto's version verifies the certificate of the server. + +To use this feature, do something like this: + +from boto.ec2.connection import EC2Connection + +ec2 = EC2Connection(ACCESS_KEY_ID, SECRET_ACCESS_KEY, + https_connection_factory=https_connection_factory(cafile=CA_FILE)) + +See http://code.google.com/p/boto/issues/detail?id=57 for more details. +""" +from M2Crypto import SSL +from M2Crypto.httpslib import HTTPSConnection + +def secure_context(cafile=None, capath=None): + ctx = SSL.Context() + ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, depth=9) + if ctx.load_verify_locations(cafile=cafile, capath=capath) != 1: + raise Exception("Couldn't load certificates") + return ctx + +def https_connection_factory(cafile=None, capath=None): + def factory(*args, **kwargs): + return HTTPSConnection( + ssl_context=secure_context(cafile=cafile, capath=capath), + *args, **kwargs) + return (factory, (SSL.SSLError,)) diff --git a/thirdparty/boto/contrib/ymlmessage.py b/thirdparty/boto/contrib/ymlmessage.py new file mode 100644 index 000000000..22e5c627e --- /dev/null +++ b/thirdparty/boto/contrib/ymlmessage.py @@ -0,0 +1,52 @@ +# Copyright (c) 2006,2007 Chris Moyer +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +This module was contributed by Chris Moyer. It provides a subclass of the +SQS Message class that supports YAML as the body of the message. + +This module requires the yaml module. +""" +from boto.sqs.message import Message +import yaml + +class YAMLMessage(Message): + """ + The YAMLMessage class provides a YAML compatible message. Encoding and + decoding are handled automaticaly. + + Access this message data like such: + + m.data = [ 1, 2, 3] + m.data[0] # Returns 1 + + This depends on the PyYAML package + """ + + def __init__(self, queue=None, body='', xml_attrs=None): + self.data = None + Message.__init__(self, queue, body) + + def set_body(self, body): + self.data = yaml.load(body) + + def get_body(self): + return yaml.dump(self.data) diff --git a/thirdparty/boto/ec2/__init__.py b/thirdparty/boto/ec2/__init__.py new file mode 100644 index 000000000..449bd162a --- /dev/null +++ b/thirdparty/boto/ec2/__init__.py @@ -0,0 +1,23 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# + + diff --git a/thirdparty/boto/ec2/address.py b/thirdparty/boto/ec2/address.py new file mode 100644 index 000000000..eec06e712 --- /dev/null +++ b/thirdparty/boto/ec2/address.py @@ -0,0 +1,51 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Represents an EC2 Elastic IP Address +""" + +class Address: + + def __init__(self, connection=None): + self.connection = connection + self.public_ip = None + self.instance_id = None + + def __repr__(self): + return 'Address:%s' % self.public_ip + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'publicIp': + self.public_ip = value + elif name == 'instanceId': + self.instance_id = value + else: + setattr(self, name, value) + + def delete(self): + return self.connection.delete_address(self.public_ip) + + + diff --git a/thirdparty/boto/ec2/connection.py b/thirdparty/boto/ec2/connection.py new file mode 100644 index 000000000..5222ec24b --- /dev/null +++ b/thirdparty/boto/ec2/connection.py @@ -0,0 +1,426 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Represents a connection to the EC2 service. +""" + +import urllib +import xml.sax +import base64 +import boto +from boto import config +from boto.connection import AWSQueryConnection +from boto.resultset import ResultSet +from boto.ec2.image import Image, ImageAttribute +from boto.ec2.instance import Reservation, Instance, ConsoleOutput +from boto.ec2.keypair import KeyPair +from boto.ec2.address import Address +from boto.ec2.zone import Zone +from boto.ec2.securitygroup import SecurityGroup +from boto.exception import EC2ResponseError + +class EC2Connection(AWSQueryConnection): + + APIVersion = boto.config.get('Boto', 'ec2_version', '2008-02-01') + SignatureVersion = '1' + ResponseError = EC2ResponseError + + def __init__(self, aws_access_key_id=None, aws_secret_access_key=None, + is_secure=True, port=None, proxy=None, proxy_port=None, + proxy_user=None, proxy_pass=None, host='ec2.amazonaws.com', debug=0, + https_connection_factory=None): + """ + Init method to create a new connection to EC2. + + B{Note:} The host argument is overridden by the host specified in the boto configuration file. + """ + if config.has_option('Boto', 'ec2_host'): + host = config.get('Boto', 'ec2_host') + AWSQueryConnection.__init__(self, aws_access_key_id, aws_secret_access_key, + is_secure, port, proxy, proxy_port, proxy_user, proxy_pass, + host, debug, https_connection_factory) + + # Image methods + + def get_all_images(self, image_ids=None, owners=None, executable_by=None): + """ + Retrieve all the EC2 images available on your account. + + @type image_ids: list + @param image_ids: A list of strings with the image IDs wanted + + @type owners: list + @param owners: A list of owner IDs + + @type executable_by: + @param executable_by: + + @rtype: list + @return: A list of L{Images} + """ + params = {} + if image_ids: + self.build_list_params(params, image_ids, 'ImageId') + if owners: + self.build_list_params(params, owners, 'Owner') + if executable_by: + self.build_list_params(params, executable_by, 'ExecutableBy') + return self.get_list('DescribeImages', params, [('item', Image)]) + + def get_image(self, image_id): + """ + Shortcut method to retrieve a specific image (AMI). + + @type image_id: string + @param image_id: the ID of the Image to retrieve + + @rtype: L{Image} + @return: The EC2 Image specified or None if the image is not found + """ + try: + return self.get_all_images(image_ids=[image_id])[0] + except IndexError: # None of those images available + return None + + def register_image(self, image_location): + params = {'ImageLocation':image_location} + rs = self.get_object('RegisterImage', params, ResultSet) + return rs.imageId + + def deregister_image(self, image_id): + return self.get_status('DeregisterImage', {'ImageId':image_id}) + + # ImageAttribute methods + + def get_image_attribute(self, image_id, attribute='launchPermission'): + """ + Gets an attribute from an image. + See http://docs.amazonwebservices.com/AWSEC2/2008-02-01/DeveloperGuide/ApiReference-Query-DescribeImageAttribute.html + + @type image_id: string + @param image_id: The Amazon image id for which you want info about + + @type attribute: string + @param attribute: The attribute you need information about + + @rtype: L{ImageAttribute} + @return: An ImageAttribute object representing the value of the attribute requested + """ + params = {'ImageId' : image_id, + 'Attribute' : attribute} + return self.get_object('DescribeImageAttribute', params, ImageAttribute) + + def modify_image_attribute(self, image_id, attribute='launchPermission', + operation='add', user_ids=None, groups=None): + """ + Changes an attribute of an image. + See http://docs.amazonwebservices.com/AWSEC2/2008-02-01/DeveloperGuide/ApiReference-Query-ModifyImageAttribute.html + + @type image_id: string + @param image_id: The image id you wish to change + + @type attribute: string + @param attribute: The attribute you wish to change + + @type operation: string + @param operation: Either add or remove (this is required for changing launchPermissions + + @type user_ids: list + @param user_ids: The Amazon IDs of users to add/remove attributes + + @type groups: list + @param groups: The groups to add/remove attributes + """ + params = {'ImageId' : image_id, + 'Attribute' : attribute, + 'OperationType' : operation} + if user_ids: + self.build_list_params(params, user_ids, 'UserId') + if groups: + self.build_list_params(params, groups, 'UserGroup') + return self.get_status('ModifyImageAttribute', params) + + def reset_image_attribute(self, image_id, attribute='launchPermission'): + """ + Rresets an attribute of an AMI to its default value. + See http://docs.amazonwebservices.com/AWSEC2/2008-02-01/DeveloperGuide/ApiReference-Query-ResetImageAttribute.html + + @type image_id: string + @param image_id: ID of the AMI for which an attribute will be described + + @type attribute: string + @param attribute: The attribute to reset + + @rtype: bool + @return: Whether the operation succeeded or not + """ + params = {'ImageId' : image_id, + 'Attribute' : attribute} + return self.get_status('ResetImageAttribute', params) + + # Instance methods + + def get_all_instances(self, instance_ids=None): + """ + Retrieve all the instances associated with your account. + + @type instance_ids: list + @param instance_ids: A list of strings of instance IDs + + @rtype: list + @return: A list of L{Instances} + """ + params = {} + if instance_ids: + self.build_list_params(params, instance_ids, 'InstanceId') + return self.get_list('DescribeInstances', params, [('item', Reservation)]) + + def run_instances(self, image_id, min_count=1, max_count=1, + key_name=None, security_groups=None, + user_data=None, addressing_type=None, + instance_type='m1.small', placement=None): + """ + Runs an image on EC2. + + @type image_id: string + @param image_id: The ID of the image to run + + @type instance_type: string + @param instance_type: The type of instance to run (m1.small, m1.large, m1.xlarge) + + @rtype: Reservation + @return: The L{Reservation} associated with the request for machines + """ + params = {'ImageId':image_id, + 'MinCount':min_count, + 'MaxCount': max_count} + if key_name: + params['KeyName'] = key_name + if security_groups: + l = [] + for group in security_groups: + if isinstance(group, SecurityGroup): + l.append(group.name) + else: + l.append(group) + self.build_list_params(params, l, 'SecurityGroup') + if user_data: + params['UserData'] = base64.b64encode(user_data) + if addressing_type: + params['AddressingType'] = addressing_type + if instance_type: + params['InstanceType'] = instance_type + if placement: + params['Placement.AvailabilityZone'] = placement + return self.get_object('RunInstances', params, Reservation) + + def terminate_instances(self, instance_ids=None): + """ + Terminate the instances specified + + @type instance_ids: list + @param instance_ids: A list of strings of the Instance IDs to terminate + + @rtype: list + @return: A list of the instances terminated + """ + params = {} + if instance_ids: + self.build_list_params(params, instance_ids, 'InstanceId') + return self.get_list('TerminateInstances', params, [('item', Instance)]) + + def get_console_output(self, instance_id): + """ + Retrieves the console output for the specified instance. + See http://docs.amazonwebservices.com/AWSEC2/2008-02-01/DeveloperGuide/ApiReference-Query-GetConsoleOutput.html + + @type instance_id: string + @param instance_id: The instance ID of a running instance on the cloud. + + @rtype: L{boto.ec2.instance.ConsoleOutput} + @return: The console output as a ConsoleOutput object + """ + params = {} + self.build_list_params(params, [instance_id], 'InstanceId') + return self.get_object('GetConsoleOutput', params, ConsoleOutput) + + def reboot_instances(self, instance_ids=None): + """ + Reboot the specified instances. + + @type instance_ids: list + @param instance_ids: The instances to terminate and reboot + """ + params = {} + if instance_ids: + self.build_list_params(params, instance_ids, 'InstanceId') + return self.get_status('RebootInstances', params) + + def confirm_product_instance(self, product_code, instance_id): + params = {'ProductCode' : product_code, + 'InstanceId' : instance_id} + rs = self.get_object('ConfirmProductInstance', params, ResultSet) + return (rs.status, rs.ownerId) + + # Zone methods + + def get_all_zones(self, zones=None): + params = {} + if zones: + self.build_list_params(params, zones, 'ZoneName') + return self.get_list('DescribeAvailabilityZones', params, [('item', Zone)]) + + # Address methods + + def get_all_addresses(self, addresses=None): + params = {} + if addresses: + self.build_list_params(params, addresses, 'PublicIp') + return self.get_list('DescribeAddresses', params, [('item', Address)]) + + def allocate_address(self): + return self.get_object('AllocateAddress', None, Address) + + def release_address(self, public_ip): + params = {'PublicIp' : public_ip} + return self.get_status('ReleaseAddress', params) + + def associate_address(self, instance_id, public_ip): + params = {'InstanceId' : instance_id, 'PublicIp' : public_ip} + return self.get_status('AssociateAddress', params) + + def disassociate_address(self, public_ip): + params = {'PublicIp' : public_ip} + return self.get_status('DisassociateAddress', params) + + # Keypair methods + + def get_all_key_pairs(self, keynames=None): + """ + Get all key pairs associated with your account. + + @type keynames: list + @param keynames: A list of the names of keypairs to retrieve + + @rtype: list + @return: A list of L{KeyPairs} + """ + params = {} + if keynames: + self.build_list_params(params, keynames, 'KeyName') + return self.get_list('DescribeKeyPairs', params, [('item', KeyPair)]) + + def get_key_pair(self, keyname): + """ + Convenience method to retrieve a specific keypair (KeyPair). + + @type image_id: string + @param image_id: the ID of the Image to retrieve + + @rtype: L{KeyPair} + @return: The KeyPair specified or None if it is not found + """ + try: + return self.get_all_key_pairs(keynames=[keyname])[0] + except IndexError: # None of those images available + return None + + def create_key_pair(self, key_name): + """ + Create a new key pair for your account. + + @type key_name: string + @param key_name: The name of the new keypair + + @rtype: KeyPair + @return: The newly created L{KeyPair} + """ + params = {'KeyName':key_name} + return self.get_object('CreateKeyPair', params, KeyPair) + + def delete_key_pair(self, key_name): + """ + Delete a key pair from your account. + + @type key_name: string + @param key_name: The name of the keypair to delete + """ + params = {'KeyName':key_name} + return self.get_status('DeleteKeyPair', params) + + # SecurityGroup methods + + def get_all_security_groups(self, groupnames=None): + params = {} + if groupnames: + self.build_list_params(params, groupnames, 'GroupName') + return self.get_list('DescribeSecurityGroups', params, [('item', SecurityGroup)]) + + def create_security_group(self, name, description): + params = {'GroupName':name, 'GroupDescription':description} + group = self.get_object('CreateSecurityGroup', params, SecurityGroup) + group.name = name + group.description = description + return group + + def delete_security_group(self, name): + params = {'GroupName':name} + return self.get_status('DeleteSecurityGroup', params) + + def authorize_security_group(self, group_name, src_security_group_name=None, + src_security_group_owner_id=None, + ip_protocol=None, from_port=None, to_port=None, + cidr_ip=None): + params = {'GroupName':group_name} + if src_security_group_name: + params['SourceSecurityGroupName'] = src_security_group_name + if src_security_group_owner_id: + params['SourceSecurityGroupOwnerId'] = src_security_group_owner_id + if ip_protocol: + params['IpProtocol'] = ip_protocol + if from_port: + params['FromPort'] = from_port + if to_port: + params['ToPort'] = to_port + if cidr_ip: + params['CidrIp'] = urllib.quote(cidr_ip) + return self.get_status('AuthorizeSecurityGroupIngress', params) + + def revoke_security_group(self, group_name, src_security_group_name=None, + src_security_group_owner_id=None, + ip_protocol=None, from_port=None, to_port=None, + cidr_ip=None): + params = {'GroupName':group_name} + if src_security_group_name: + params['SourceSecurityGroupName'] = src_security_group_name + if src_security_group_owner_id: + params['SourceSecurityGroupOwnerId'] = src_security_group_owner_id + if ip_protocol: + params['IpProtocol'] = ip_protocol + if from_port: + params['FromPort'] = from_port + if to_port: + params['ToPort'] = to_port + if cidr_ip: + params['CidrIp'] = cidr_ip + return self.get_status('RevokeSecurityGroupIngress', params) + diff --git a/thirdparty/boto/ec2/image.py b/thirdparty/boto/ec2/image.py new file mode 100644 index 000000000..89bed5f63 --- /dev/null +++ b/thirdparty/boto/ec2/image.py @@ -0,0 +1,174 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Represents an EC2 Image +""" + +class Image: + + def __init__(self, connection=None): + self.connection = connection + self.id = None + self.location = None + self.state = None + self.ownerId = None + self.is_public = False + self.product_codes = [] + + def __repr__(self): + return 'Image:%s' % self.id + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'imageId': + self.id = value + elif name == 'imageLocation': + self.location = value + elif name == 'imageState': + self.state = value + elif name == 'imageOwnerId': + self.ownerId = value + elif name == 'isPublic': + if value == 'false': + self.is_public = False + elif value == 'true': + self.is_public = True + else: + raise Exception( + 'Unexpected value of isPublic %s for image %s'%( + value, + self.id + ) + ) + elif name == 'productCode': + self.product_codes.append(value) + else: + setattr(self, name, value) + + def run(self, min_count=1, max_count=1, key_name=None, + security_groups=None, user_data=None, + addressing_type=None, instance_type='m1.small', placement=None): + """ + Runs this instance. + + @type min_count: int + @param min_count: The minimum number of instances to start + + @type max_count: int + @param max_count: The maximum number of instances to start + + @type key_name: string + @param key_name: The keypair to run this instance with. + + @type security_groups: + @param security_groups: + + @type user_data: + @param user_data: + + @type addressing_type: + @param daddressing_type: + + @type instance_type: string + @param instance_type: The type of instance to run (m1.small, m1.large, m1.xlarge) + + @type placement: + @param placement: + """ + return self.connection.run_instances(self.id, min_count, max_count, + key_name, security_groups, + user_data, addressing_type, + instance_type, placement) + + def deregister(self): + return self.connection.deregister_image(self.id) + + def get_launch_permissions(self): + img_attrs = self.connection.get_image_attribute(self.id, + 'launchPermission') + return img_attrs.attrs + + def set_launch_permissions(self, user_ids=None, group_names=None): + return self.connection.modify_image_attribute(self.id, + 'launchPermission', + 'add', + user_ids, + group_names) + + def remove_launch_permissions(self, user_ids=None, group_names=None): + return self.connection.modify_image_attribute(self.id, + 'launchPermission', + 'remove', + user_ids, + group_names) + + def reset_launch_attributes(self): + return self.connection.reset_image_attribute(self.id, + 'launchPermission') + + def get_kernel(self): + img_attrs =self.connection.get_image_attribute(self.id, 'kernel') + return img_attrs.kernel + + def get_ramdisk(self): + img_attrs = self.connection.get_image_attribute(self.id, 'ramdisk') + return img_attrs.ramdisk + +class ImageAttribute: + + def __init__(self, parent=None): + self.name = None + self.kernel = None + self.ramdisk = None + self.attrs = {} + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'launchPermission': + self.name = 'launch_permission' + elif name == 'productCodes': + self.name = 'product_codes' + self.attrs[self.name] = [] + elif name == 'group': + if self.attrs.has_key('groups'): + self.attrs['groups'].append(value) + else: + self.attrs['groups'] = [value] + elif name == 'userId': + if self.attrs.has_key('user_ids'): + self.attrs['user_ids'].append(value) + else: + self.attrs['user_ids'] = [value] + elif name == 'imageId': + self.image_id = value + elif name == 'productCode': + self.attrs['product_codes'].append(value) + elif name == 'kernel': + self.kernel = value + elif name == 'ramdisk': + self.ramdisk = value + else: + setattr(self, name, value) diff --git a/thirdparty/boto/ec2/instance.py b/thirdparty/boto/ec2/instance.py new file mode 100644 index 000000000..727bc9374 --- /dev/null +++ b/thirdparty/boto/ec2/instance.py @@ -0,0 +1,200 @@ +# Copyright (c) 2006, 2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Represents an EC2 Instance +""" + +from boto.resultset import ResultSet +from boto.ec2.address import Address +import base64 + +class Reservation: + + def __init__(self, connection=None): + self.connection = connection + self.id = None + self.owner_id = None + self.groups = [] + self.instances = [] + + def __repr__(self): + return 'Reservation:%s' % self.id + + def startElement(self, name, attrs, connection): + if name == 'instancesSet': + self.instances = ResultSet([('item', Instance)]) + return self.instances + elif name == 'groupSet': + self.groups = ResultSet([('item', Group)]) + return self.groups + else: + return None + + def endElement(self, name, value, connection): + if name == 'reservationId': + self.id = value + elif name == 'ownerId': + self.owner_id = value + else: + setattr(self, name, value) + + def stop_all(self): + for instance in self.instances: + instance.stop() + +class Instance: + + def __init__(self, connection=None): + self.connection = connection + self.id = None + self.dns_name = None + self.public_dns_name = None + self.private_dns_name = None + self.state = None + self.state_code = None + self.key_name = None + self.shutdown_state = None + self.previous_state = None + self.instance_type = None + self.launch_time = None + self.image_id = None + self.placement = None + self.kernel = None + self.ramdisk = None + + def __repr__(self): + return 'Instance:%s' % self.id + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'instanceId': + self.id = value + elif name == 'imageId': + self.image_id = value + elif name == 'dnsName' or name == 'publicDnsName': + self.dns_name = value # backwards compatibility + self.public_dns_name = value + elif name == 'privateDnsName': + self.private_dns_name = value + elif name == 'keyName': + self.key_name = value + elif name == 'amiLaunchIndex': + self.ami_launch_index = value + elif name == 'shutdownState': + self.shutdown_state = value + elif name == 'previousState': + self.previous_state = value + elif name == 'name': + self.state = value + elif name == 'code': + self.state_code = int(value) + elif name == 'instanceType': + self.instance_type = value + elif name == 'launchTime': + self.launch_time = value + elif name == 'availabilityZone': + self.placement = value + elif name == 'kernelId': + self.kernel = value + elif name == 'ramdiskId': + self.ramdisk = value + else: + setattr(self, name, value) + + def _update(self, updated): + self.updated = updated + if hasattr(updated, 'dns_name'): + self.dns_name = updated.dns_name + self.public_dns_name = updated.dns_name + if hasattr(updated, 'private_dns_name'): + self.private_dns_name = updated.private_dns_name + if hasattr(updated, 'ami_launch_index'): + self.ami_launch_index = updated.ami_launch_index + self.shutdown_state = updated.shutdown_state + self.previous_state = updated.previous_state + if hasattr(updated, 'state'): + self.state = updated.state + else: + self.state = None + if hasattr(updated, 'state_code'): + self.state_code = updated.state_code + else: + self.state_code = None + + def update(self): + rs = self.connection.get_all_instances([self.id]) + if len(rs) > 0: + self._update(rs[0].instances[0]) + return self.state + + def stop(self): + rs = self.connection.terminate_instances([self.id]) + self._update(rs[0]) + + def reboot(self): + return self.connection.reboot_instances([self.id]) + + def get_console_output(self): + return self.connection.get_console_output(self.id) + + def confirm_product(self, product_code): + return self.connection.confirm_product_instance(self.id, product_code) + + def use_ip(self, ip_address): + if isinstance(ip_address, Address): + ip_address = ip_address.public_ip + return self.connection.associate_address(self.id, ip_address) + +class Group: + + def __init__(self, parent=None): + self.id = None + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'groupId': + self.id = value + else: + setattr(self, name, value) + +class ConsoleOutput: + + def __init__(self, parent=None): + self.parent = parent + self.instance_id = None + self.timestamp = None + self.comment = None + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'instanceId': + self.instance_id = value + elif name == 'output': + self.output = base64.b64decode(value) + else: + setattr(self, name, value) diff --git a/thirdparty/boto/ec2/keypair.py b/thirdparty/boto/ec2/keypair.py new file mode 100644 index 000000000..172a80c95 --- /dev/null +++ b/thirdparty/boto/ec2/keypair.py @@ -0,0 +1,54 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Represents an EC2 Keypair +""" + +class KeyPair: + + def __init__(self, connection=None): + self.connection = connection + self.name = None + self.fingerprint = None + self.material = None + + def __repr__(self): + return 'KeyPair:%s' % self.name + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'keyName': + self.name = value + elif name == 'keyFingerprint': + self.fingerprint = value + elif name == 'keyMaterial': + self.material = value + else: + setattr(self, name, value) + + def delete(self): + return self.connection.delete_key_pair(self.name) + + + diff --git a/thirdparty/boto/ec2/securitygroup.py b/thirdparty/boto/ec2/securitygroup.py new file mode 100644 index 000000000..ba951c075 --- /dev/null +++ b/thirdparty/boto/ec2/securitygroup.py @@ -0,0 +1,203 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Represents an EC2 Security Group +""" + +class SecurityGroup: + + def __init__(self, connection=None, owner_id=None, + name=None, description=None): + self.connection = connection + self.owner_id = owner_id + self.name = name + self.description = description + self.rules = [] + + def __repr__(self): + return 'SecurityGroup:%s' % self.name + + def startElement(self, name, attrs, connection): + if name == 'item': + self.rules.append(IPPermissions(self)) + return self.rules[-1] + else: + return None + + def endElement(self, name, value, connection): + if name == 'ownerId': + self.owner_id = value + elif name == 'groupName': + self.name = value + elif name == 'groupDescription': + self.description = value + elif name == 'ipRanges': + pass + elif name == 'return': + if value == 'false': + self.status = False + elif value == 'true': + self.status = True + else: + raise Exception( + 'Unexpected value of status %s for image %s'%( + value, + self.id + ) + ) + else: + setattr(self, name, value) + + def delete(self): + return self.connection.delete_security_group(self.name) + + def add_rule(self, ip_protocol, from_port, to_port, + src_group_name, src_group_owner_id, cidr_ip): + rule = IPPermissions(self) + rule.ip_protocol = ip_protocol + rule.from_port = from_port + rule.to_port = to_port + self.rules.append(rule) + rule.add_grant(src_group_name, src_group_owner_id, cidr_ip) + + def remove_rule(self, ip_protocol, from_port, to_port, + src_group_name, src_group_owner_id, cidr_ip): + target_rule = None + for rule in self.rules: + if rule.ip_protocol == ip_protocol: + if rule.from_port == from_port: + if rule.to_port == to_port: + target_rule = rule + target_grant = None + for grant in rule.grants: + if grant.group_name == src_group_name: + if grant.user_id == src_group_owner_id: + if grant.cidr_ip == cidr_ip: + target_grant = grant + if target_grant: + rule.grants.remove(target_grant) + if len(rule.grants) == 0: + self.rules.remove(target_rule) + + def authorize(self, ip_protocol=None, from_port=None, to_port=None, + cidr_ip=None, src_group=None): + if src_group: + src_group_name = src_group.name + src_group_owner_id = src_group.owner_id + else: + src_group_name = None + src_group_owner_id = None + status = self.connection.authorize_security_group(self.name, + src_group_name, + src_group_owner_id, + ip_protocol, + from_port, + to_port, + cidr_ip) + if status: + self.add_rule(ip_protocol, from_port, to_port, src_group_name, + src_group_owner_id, cidr_ip) + return status + + def revoke(self, ip_protocol=None, from_port=None, to_port=None, + cidr_ip=None, src_group=None): + if src_group: + src_group_name = src_group.name + src_group_owner_id = src_group.owner_id + else: + src_group_name = None + src_group_owner_id = None + status = self.connection.revoke_security_group(self.name, + src_group_name, + src_group_owner_id, + ip_protocol, + from_port, + to_port, + cidr_ip) + if status: + self.remove_rule(ip_protocol, from_port, to_port, src_group_name, + src_group_owner_id, cidr_ip) + return status + +class IPPermissions: + + def __init__(self, parent=None): + self.parent = parent + self.ip_protocol = None + self.from_port = None + self.to_port = None + self.grants = [] + + def __repr__(self): + return 'IPPermissions:%s(%s-%s)' % (self.ip_protocol, + self.from_port, self.to_port) + + def startElement(self, name, attrs, connection): + if name == 'item': + self.grants.append(GroupOrCIDR(self)) + return self.grants[-1] + return None + + def endElement(self, name, value, connection): + if name == 'ipProtocol': + self.ip_protocol = value + elif name == 'fromPort': + self.from_port = value + elif name == 'toPort': + self.to_port = value + else: + setattr(self, name, value) + + def add_grant(self, user_id=None, group_name=None, cidr_ip=None): + grant = GroupOrCIDR(self) + grant.user_id = user_id + grant.group_name = group_name + grant.cidr_ip = cidr_ip + self.grants.append(grant) + return grant + +class GroupOrCIDR: + + def __init__(self, parent=None): + self.user_id = None + self.group_name = None + self.cidr_ip = None + + def __repr__(self): + if self.cidr_ip: + return '%s' % self.cidr_ip + else: + return '%s-%s' % (self.group_name, self.user_id) + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'userId': + self.user_id = value + elif name == 'groupName': + self.group_name = value + if name == 'cidrIp': + self.cidr_ip = value + else: + setattr(self, name, value) + diff --git a/thirdparty/boto/ec2/zone.py b/thirdparty/boto/ec2/zone.py new file mode 100644 index 000000000..f8bf3ad78 --- /dev/null +++ b/thirdparty/boto/ec2/zone.py @@ -0,0 +1,49 @@ +# Copyright (c) 2006-2008 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Represents an EC2 Availability Zone +""" + +class Zone: + + def __init__(self, connection=None): + self.connection = connection + self.name = None + self.state = None + + def __repr__(self): + return 'Zone:%s' % self.name + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'zoneName': + self.name = value + elif name == 'zoneState': + self.state = value + else: + setattr(self, name, value) + + + + diff --git a/thirdparty/boto/exception.py b/thirdparty/boto/exception.py new file mode 100644 index 000000000..e942ea989 --- /dev/null +++ b/thirdparty/boto/exception.py @@ -0,0 +1,114 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Exception classes - Subclassing allows you to check for specific errors +""" + +class BotoClientError(Exception): + """ + General Boto Client error (error accessing AWS) + """ + + def __init__(self, reason): + self.reason = reason + + def __repr__(self): + return 'S3Error: %s' % self.reason + + def __str__(self): + return 'S3Error: %s' % self.reason + +class SDBPersistenceError(Exception): + + pass + +class S3PermissionsError(BotoClientError): + """ + Permissions error when accessing a bucket or key on S3. + """ + pass + +class BotoServerError(Exception): + + def __init__(self, status, reason, body=''): + self.status = status + self.reason = reason + self.body = body + + def __repr__(self): + return '%s: %s %s\n%s' % (self.__class__.__name__, + self.status, self.reason, self.body) + + def __str__(self): + return '%s: %s %s\n%s' % (self.__class__.__name__, + self.status, self.reason, self.body) + +class S3CreateError(BotoServerError): + """ + Error creating a bucket or key on S3. + """ + pass + +class S3CopyError(BotoServerError): + """ + Error copying a key on S3. + """ + pass + +class SQSError(BotoServerError): + """ + General Error on Simple Queue Service. + """ + pass + +class S3ResponseError(BotoServerError): + """ + Error in response from S3. + """ + pass + +class EC2ResponseError(BotoServerError): + """ + Error in response from EC2. + """ + pass + +class SDBResponseError(BotoServerError): + """ + Error in respones from SDB. + """ + pass + +class AWSConnectionError(BotoClientError): + """ + General error connecting to Amazon Web Services. + """ + pass + +class S3DataError(BotoClientError): + """ + Error receiving data from S3. + """ + pass + +class FPSResponseError(BotoServerError): + pass diff --git a/thirdparty/boto/fps/__init__.py b/thirdparty/boto/fps/__init__.py new file mode 100644 index 000000000..2f44483df --- /dev/null +++ b/thirdparty/boto/fps/__init__.py @@ -0,0 +1,23 @@ +# Copyright (c) 2008, Chris Moyer http://coredumped.org +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# + + diff --git a/thirdparty/boto/fps/connection.py b/thirdparty/boto/fps/connection.py new file mode 100644 index 000000000..e460931ab --- /dev/null +++ b/thirdparty/boto/fps/connection.py @@ -0,0 +1,171 @@ +# Copyright (c) 2008 Chris Moyer http://coredumped.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import urllib +import xml.sax +import uuid +import boto +import boto.utils +import urllib +from boto import handler +from boto.connection import AWSQueryConnection +from boto.resultset import ResultSet +from boto.exception import FPSResponseError + +class FPSConnection(AWSQueryConnection): + + APIVersion = '2007-01-08' + SignatureVersion = '1' + + def __init__(self, aws_access_key_id=None, aws_secret_access_key=None, + is_secure=True, port=None, proxy=None, proxy_port=None, + host='fps.sandbox.amazonaws.com', debug=0, + https_connection_factory=None): + AWSQueryConnection.__init__(self, aws_access_key_id, + aws_secret_access_key, + is_secure, port, proxy, proxy_port, + host, debug, https_connection_factory) + + def install_payment_instruction(self, instruction, token_type="Unrestricted", transaction_id=None): + """ + InstallPaymentInstruction + instruction: The PaymentInstruction to send, for example: + MyRole=='Caller' orSay 'Roles do not match'; + token_type: Defaults to "Unrestricted" + transaction_id: Defaults to a new ID + """ + + if(transaction_id == None): + transaction_id = uuid.uuid4() + params = {} + params['PaymentInstruction'] = instruction + params['TokenType'] = token_type + params['CallerReference'] = transaction_id + response = self.make_request("InstallPaymentInstruction", params) + return response + + def install_caller_instruction(self, token_type="Unrestricted", transaction_id=None): + """ + Set us up as a caller + This will install a new caller_token into the FPS section. + This should really only be called to regenerate the caller token. + """ + response = self.install_payment_instruction("MyRole=='Caller';", token_type=token_type, transaction_id=transaction_id) + body = response.read() + if(response.status == 200): + rs = ResultSet() + h = handler.XmlHandler(rs, self) + xml.sax.parseString(body, h) + caller_token = rs.TokenId + try: + boto.config.save_system_option("FPS", "caller_token", caller_token) + except(IOError): + boto.config.save_user_option("FPS", "caller_token", caller_token) + return caller_token + else: + raise FPSResponseError(response.status, respons.reason, body) + + def install_recipient_instruction(self, token_type="Unrestricted", transaction_id=None): + """ + Set us up as a Recipient + This will install a new caller_token into the FPS section. + This should really only be called to regenerate the recipient token. + """ + response = self.install_payment_instruction("MyRole=='Recipient';", token_type=token_type, transaction_id=transaction_id) + body = response.read() + if(response.status == 200): + rs = ResultSet() + h = handler.XmlHandler(rs, self) + xml.sax.parseString(body, h) + recipient_token = rs.TokenId + try: + boto.config.save_system_option("FPS", "recipient_token", recipient_token) + except(IOError): + boto.config.save_user_option("FPS", "recipient_token", recipient_token) + + return recipient_token + else: + raise FPSResponseError(response.status, respons.reason, body) + + def make_url(self, returnURL, paymentReason, pipelineName, **params): + """ + Generate the URL with the signature required for a transaction + """ + params['callerKey'] = str(self.aws_access_key_id) + params['returnURL'] = str(returnURL) + params['paymentReason'] = str(paymentReason) + params['pipelineName'] = pipelineName + + if(not params.has_key('callerReference')): + params['callerReference'] = str(uuid.uuid4()) + + url = "" + keys = params.keys() + keys.sort() + for k in keys: + url += "&%s=%s" % (k, urllib.quote_plus(str(params[k]))) + + url = "/cobranded-ui/actions/start?%s" % ( url[1:]) + signature= boto.utils.encode(self.aws_secret_access_key, url, True) + return "https://authorize.payments-sandbox.amazon.com%s&awsSignature=%s" % (url, signature) + + def make_payment(self, amount, sender_token, charge_fee_to="Recipient", reference=None, senderReference=None, recipientReference=None, senderDescription=None, recipientDescription=None, callerDescription=None, metadata=None, transactionDate=None): + """ + Make a payment transaction + You must specify the amount and the sender token. + """ + params = {} + params['RecipientTokenId'] = boto.config.get("FPS", "recipient_token") + params['CallerTokenId'] = boto.config.get("FPS", "caller_token") + params['SenderTokenId'] = sender_token + params['TransactionAmount.Amount'] = str(amount) + params['TransactionAmount.CurrencyCode'] = "USD" + params['ChargeFeeTo'] = charge_fee_to + + if(transactionDate != None): + params['TransactionDate'] = transactionDate + if(senderReference != None): + params['SenderReference'] = senderReference + if(recipientReference != None): + params['RecipientReference'] = recipientReference + if(senderDescription != None): + params['SenderDescription'] = senderDescription + if(recipientDescription != None): + params['RecipientDescription'] = recipientDescription + if(callerDescription != None): + params['CallerDescription'] = callerDescription + if(metadata != None): + params['MetaData'] = metadata + if(transactionDate != None): + params['TransactionDate'] = transactionDate + if(reference == None): + reference = uuid.uuid4() + params['CallerReference'] = reference + + response = self.make_request("Pay", params) + body = response.read() + if(response.status == 200): + rs = ResultSet() + h = handler.XmlHandler(rs, self) + xml.sax.parseString(body, h) + return rs + else: + raise FPSResponseError(response.status, response.reason, body) diff --git a/thirdparty/boto/handler.py b/thirdparty/boto/handler.py new file mode 100644 index 000000000..525f9c9a6 --- /dev/null +++ b/thirdparty/boto/handler.py @@ -0,0 +1,46 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import xml.sax + +class XmlHandler(xml.sax.ContentHandler): + + def __init__(self, root_node, connection): + self.connection = connection + self.nodes = [('root', root_node)] + self.current_text = '' + + def startElement(self, name, attrs): + self.current_text = '' + new_node = self.nodes[-1][1].startElement(name, attrs, self.connection) + if new_node != None: + self.nodes.append((name, new_node)) + + def endElement(self, name): + self.nodes[-1][1].endElement(name, self.current_text, self.connection) + if self.nodes[-1][0] == name: + self.nodes.pop() + self.current_text = '' + + def characters(self, content): + self.current_text += content + + diff --git a/thirdparty/boto/mapreduce/__init__.py b/thirdparty/boto/mapreduce/__init__.py new file mode 100644 index 000000000..ac3ddc447 --- /dev/null +++ b/thirdparty/boto/mapreduce/__init__.py @@ -0,0 +1,23 @@ +# Copyright (c) 2006-2008 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# + + diff --git a/thirdparty/boto/mapreduce/lqs.py b/thirdparty/boto/mapreduce/lqs.py new file mode 100644 index 000000000..fc76e50f8 --- /dev/null +++ b/thirdparty/boto/mapreduce/lqs.py @@ -0,0 +1,152 @@ +import SocketServer, os, datetime, sys, random, time +import simplejson + +class LQSCommand: + + def __init__(self, line): + self.raw_line = line + self.line = self.raw_line.strip() + l = self.line.split(' ') + self.name = l[0] + if len(l) > 1: + self.args = [arg for arg in l[1:] if arg] + else: + self.args = [] + +class LQSMessage(dict): + + def __init__(self, item=None, args=None, jsonvalue=None): + dict.__init__(self) + if jsonvalue: + self.decode(jsonvalue) + else: + self['id'] = '%d_%d' % (int(time.time()), int(random.random()*1000000)) + self['item'] = item + self['args'] = args + + def encode(self): + return simplejson.dumps(self) + + def decode(self, value): + self.update(simplejson.loads(value)) + + def is_empty(self): + if self['item'] == None: + return True + return False + +class LQSServer(SocketServer.UDPServer): + + PORT = 5151 + TIMEOUT = 30 + MAXSIZE = 8192 + + def __init__(self, server_address, RequestHandlerClass, iterator, args=None): + server_address = (server_address, self.PORT) + SocketServer.UDPServer.__init__(self, server_address, RequestHandlerClass) + self.count = 0 + self.iterator = iterator + self.args = args + self.start = datetime.datetime.now() + self.end = None + self.extant = [] + +class LQSHandler(SocketServer.DatagramRequestHandler): + + def get_cmd(self): + return LQSCommand(self.rfile.readline()) + + def build_msg(self): + if not self.server.iterator: + return LQSMessage(None) + try: + item = self.server.iterator.next() + msg = LQSMessage(item, self.server.args) + return msg + except StopIteration: + self.server.iterator = None + return LQSMessage(None) + + def respond(self, msg): + self.wfile.write(msg.encode()) + + def check_extant(self): + if len(self.server.extant) == 0 and not self.server.iterator: + self.server.end = datetime.datetime.now() + delta = self.server.end - self.server.start + print 'Total Processing Time: %s' % delta + print 'Total Messages Processed: %d' % self.server.count + + def do_debug(self, cmd): + args = {'extant' : self.server.extant, + 'count' : self.server.count} + msg = LQSMessage('debug', args) + self.respond(msg) + + def do_next(self, cmd): + out_msg = self.build_msg() + if not out_msg.is_empty(): + self.server.count += 1 + self.server.extant.append(out_msg['id']) + self.respond(out_msg) + + def do_delete(self, cmd): + if len(cmd.args) != 1: + self.error(cmd, 'delete command requires message id') + else: + mid = cmd.args[0] + try: + self.server.extant.remove(mid) + except ValueError: + self.error(cmd, 'message id not found') + args = {'deleted' : True} + msg = LQSMessage(mid, args) + self.respond(msg) + self.check_extant() + + def error(self, cmd, error_msg=None): + args = {'error_msg' : error_msg, + 'cmd_name' : cmd.name, + 'cmd_args' : cmd.args} + msg = LQSMessage('error', args) + self.respond(msg) + + def do_stop(self, cmd): + sys.exit(0) + + def handle(self): + cmd = self.get_cmd() + if hasattr(self, 'do_%s' % cmd.name): + method = getattr(self, 'do_%s' % cmd.name) + method(cmd) + else: + self.error(cmd, 'unrecognized command') + +class PersistHandler(LQSHandler): + + def build_msg(self): + if not self.server.iterator: + return LQSMessage(None) + try: + obj = self.server.iterator.next() + msg = LQSMessage(obj.id, self.server.args) + return msg + except StopIteration: + self.server.iterator = None + return LQSMessage(None) + +def test_file(path, args=None): + l = os.listdir(path) + if not args: + args = {} + args['path'] = path + s = LQSServer('', LQSHandler, iter(l), args) + print "Awaiting UDP messages on port %d" % s.PORT + s.serve_forever() + +def test_simple(n): + l = range(0, n) + s = LQSServer('', LQSHandler, iter(l), None) + print "Awaiting UDP messages on port %d" % s.PORT + s.serve_forever() + diff --git a/thirdparty/boto/mapreduce/partitiondb.py b/thirdparty/boto/mapreduce/partitiondb.py new file mode 100644 index 000000000..6443d0293 --- /dev/null +++ b/thirdparty/boto/mapreduce/partitiondb.py @@ -0,0 +1,172 @@ +# Copyright (c) 2006-2008 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# + +import random, time, os, datetime +import boto +from boto.sdb.persist.object import SDBObject +from boto.sdb.persist.property import * + +class Identifier(object): + + _hex_digits = '0123456789abcdef' + + @classmethod + def gen(cls, prefix): + suffix = '' + for i in range(0,8): + suffix += random.choice(cls._hex_digits) + return ts + '-' + suffix + +class Version(SDBObject): + + name = StringProperty() + pdb = ObjectProperty(ref_class=SDBObject) + date = DateTimeProperty() + + def __init__(self, id=None, manager=None): + SDBObject.__init__(self, id, manager) + if id == None: + self.name = Identifier.gen('v') + self.date = datetime.datetime.now() + print 'created Version %s' % self.name + + def partitions(self): + """ + Return an iterator containing all Partition objects related to this Version. + + @rtype: iterator of L{Partitions} + @return: The Partitions in this Version + """ + return self.get_related_objects('version', Partition) + + def add_partition(self, name=None): + """ + Add a new Partition to this Version. + + @type name: string + @param name: The name of the new Partition (optional) + + @rtype: L{Partition} + @return: The new Partition object + """ + p = Partition(manager=self.manager, name=name) + p.version = self + p.pdb = self.pdb + p.save() + return p + + def get_s3_prefix(self): + if not self.pdb: + raise ValueError, 'pdb attribute must be set to compute S3 prefix' + return self.pdb.get_s3_prefix() + self.name + '/' + +class PartitionDB(SDBObject): + + name = StringProperty() + bucket_name = StringProperty() + versions = ObjectListProperty(ref_class=Version) + + def __init__(self, id=None, manager=None, name='', bucket_name=''): + SDBObject.__init__(self, id, manager) + if id == None: + self.name = name + self.bucket_name = bucket_name + + def get_s3_prefix(self): + return self.name + '/' + + def add_version(self): + """ + Add a new Version to this PartitionDB. The newly added version becomes the + current version. + + @rtype: L{Version} + @return: The newly created Version object. + """ + v = Version() + v.pdb = self + v.save() + self.versions.append(v) + return v + + def revert(self): + """ + Revert to the previous version of this PartitionDB. The current version is removed from the + list of Versions and the Version immediately preceeding it becomes the current version. + Note that this method does not delete the Version object or any Partitions related to the + Version object. + + @rtype: L{Version} + @return: The previous current Version object. + """ + v = self.current_version() + if v: + self.versions.remove(v) + return v + + def current_version(self): + """ + Get the currently active Version of this PartitionDB object. + + @rtype: L{Version} + @return: The current Version object or None if there are no Versions associated + with this PartitionDB object. + """ + if self.versions: + if len(self.versions) > 0: + return self.versions[-1] + return None + +class Partition(SDBObject): + + def __init__(self, id=None, manager=None, name=None): + SDBObject.__init__(self, id, manager) + if id == None: + self.name = name + + name = StringProperty() + version = ObjectProperty(ref_class=Version) + pdb = ObjectProperty(ref_class=PartitionDB) + data = S3KeyProperty() + + def get_key_name(self): + return self.version.get_s3_prefix() + self.name + + def upload(self, path, bucket_name=None): + if not bucket_name: + bucket_name = self.version.pdb.bucket_name + s3 = self.manager.get_s3_connection() + bucket = s3.lookup(bucket_name) + directory, filename = os.path.split(path) + self.name = filename + key = bucket.new_key(self.get_key_name()) + key.set_contents_from_filename(path) + self.data = key + self.save() + + def delete(self): + if self.data: + self.data.delete() + SDBObject.delete(self) + + + diff --git a/thirdparty/boto/mapreduce/pdb_delete b/thirdparty/boto/mapreduce/pdb_delete new file mode 100644 index 000000000..b7af9cc06 --- /dev/null +++ b/thirdparty/boto/mapreduce/pdb_delete @@ -0,0 +1,135 @@ +#!/usr/bin/env python +# Copyright (c) 2006-2008 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +import queuetools, os, signal, sys +import subprocess +import time +from optparse import OptionParser +from boto.mapreduce.partitiondb import PartitionDB, Partition, Version +from lqs import LQSServer, PersistHandler +from boto.exception import SDBPersistenceError +from boto.sdb.persist import get_manager, revive_object_from_id + +USAGE = """ + SYNOPSIS + %prog [options] [command] + DESCRIPTION + Delete a PartitionDB and all related data in SimpleDB and S3. +""" +class Client: + + def __init__(self, queue_name): + self.q = queuetools.get_queue(queue_name) + self.q.connect() + self.manager = get_manager() + self.process() + + def process(self): + m = self.q.get() + while m['item']: + print 'Deleting: %s' % m['item'] + obj = revive_object_from_id(m['item'], manager=self.manager) + obj.delete() + self.q.delete(m) + m = self.q.get() + print 'client processing complete' + +class Server: + + def __init__(self, pdb_name, domain_name=None): + self.pdb_name = pdb_name + self.manager = get_manager(domain_name) + self.pdb = PartitionDB.get(name=self.pdb_name) + self.serve() + + def serve(self): + args = {'pdb_id' : self.pdb.id} + rs = self.pdb.get_related_objects('pdb') + self.pdb.delete() + s = LQSServer('', PersistHandler, rs, args) + s.serve_forever() + +class Delete: + + Commands = {'client' : 'Start a Delete client', + 'server' : 'Start a Delete server'} + + def __init__(self): + self.parser = OptionParser(usage=USAGE) + self.parser.add_option("--help-commands", action="store_true", dest="help_commands", + help="provides help on the available commands") + self.parser.add_option('-d', '--domain-name', action='store', type='string', + help='name of the SimpleDB domain where PDB objects are stored') + self.parser.add_option('-n', '--num-processes', action='store', type='int', dest='num_processes', + help='the number of client processes launched') + self.parser.set_defaults(num_processes=5) + self.parser.add_option('-p', '--pdb-name', action='store', type='string', + help='name of the PDB in which to store files (will create if necessary)') + self.options, self.args = self.parser.parse_args() + self.prog_name = sys.argv[0] + + def print_command_help(self): + print '\nCommands:' + for key in self.Commands.keys(): + print ' %s\t\t%s' % (key, self.Commands[key]) + + def do_server(self): + if not self.options.pdb_name: + self.parser.error('No PDB name provided') + s = Server(self.options.pdb_name, self.options.domain_name) + + def do_client(self): + c = Client('localhost') + + def main(self): + if self.options.help_commands: + self.print_command_help() + sys.exit(0) + if len(self.args) == 0: + if not self.options.pdb_name: + self.parser.error('No PDB name provided') + server_command = '%s -p %s ' % (self.prog_name, self.options.pdb_name) + server_command += ' server' + client_command = '%s client' % self.prog_name + server = subprocess.Popen(server_command, shell=True) + print 'server pid: %s' % server.pid + time.sleep(5) + clients = [] + for i in range(0, self.options.num_processes): + client = subprocess.Popen(client_command, shell=True) + clients.append(client) + print 'waiting for clients to finish' + for client in clients: + client.wait() + os.kill(server.pid, signal.SIGTERM) + elif len(self.args) == 1: + self.command = self.args[0] + if hasattr(self, 'do_%s' % self.command): + method = getattr(self, 'do_%s' % self.command) + method() + else: + self.parser.error('command (%s) not recognized' % self.command) + else: + self.parser.error('unrecognized commands') + +if __name__ == "__main__": + delete = Delete() + delete.main() diff --git a/thirdparty/boto/mapreduce/pdb_describe b/thirdparty/boto/mapreduce/pdb_describe new file mode 100644 index 000000000..d0fa86c63 --- /dev/null +++ b/thirdparty/boto/mapreduce/pdb_describe @@ -0,0 +1,124 @@ +#!/usr/bin/env python +# Copyright (c) 2006-2008 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +import sys +from optparse import OptionParser +from boto.mapreduce.partitiondb import PartitionDB, Partition, Version +from boto.exception import SDBPersistenceError +from boto.sdb.persist import get_manager, get_domain + +USAGE = """ + SYNOPSIS + %prog [options] + DESCRIPTION + List and describe your PartitionDBs. + Called with no options, all PartitionDB objects defined in your default + domain (as specified in the "default_domain" option in the "[Persist]" + section of your boto config file) will be listed. + When called with a particular PartitionDB name (using -p option) all + Version objects of that PartitionDB object will be listed. + When called with the -p option and a particular Version name specified + (using the -v option) all Partitions in that Version object will be listed. +""" +class Describe: + + def __init__(self): + self.parser = OptionParser(usage=USAGE) + self.parser.add_option('-d', '--domain-name', action='store', type='string', + help='name of the SimpleDB domain where PDB objects are stored') + self.parser.add_option('-n', '--num-entries', action='store', type='int', + help='maximum number of entries to print (default 100)') + self.parser.set_defaults(num_entries=100) + self.parser.add_option('-p', '--pdb-name', action='store', type='string', + help='name of the PDB to describe') + self.parser.add_option('-v', '--version-name', action='store', type='string', + help='name of the PDB Version to describe') + self.options, self.args = self.parser.parse_args() + self.prog_name = sys.argv[0] + + def describe_all(self): + print 'Using SimpleDB Domain: %s' % get_domain() + print 'PDBs:' + rs = PartitionDB.list() + i = 0 + for pdb in rs: + print '%s\t%s\t%s' % (pdb.id, pdb.name, pdb.bucket_name) + i += 1 + if i == self.options.num_entries: + break + + def describe_pdb(self, pdb_name): + print 'Using SimpleDB Domain: %s' % get_domain() + print 'PDB: %s' % pdb_name + print 'Versions:' + try: + pdb = PartitionDB.get(name=pdb_name) + i = 0 + for v in pdb.versions: + if v.date: + ds = v.date.isoformat() + else: + ds = 'unknown' + print '%s\t%s\t%s' % (v.id, v.name, ds) + i += 1 + if i == self.options.num_entries: + break + cv = pdb.current_version() + if cv: + print 'Current Version: %s' % cv.name + else: + print 'Current Version: None' + except SDBPersistenceError: + self.parser.error('pdb_name (%s) unknown' % pdb_name) + + def describe_version(self, pdb_name, version_name): + print 'Using SimpleDB Domain: %s' % get_domain() + print 'PDB: %s' % pdb_name + print 'Version: %s' % version_name + print 'Partitions:' + try: + pdb = PartitionDB.get(name=pdb_name) + for v in pdb.versions: + if v.name == version_name: + i = 0 + for p in v.partitions(): + print '%s\t%s' % (p.id, p.name) + i += 1 + if i == self.options.num_entries: + break + except SDBPersistenceError: + self.parser.error('pdb_name (%s) unknown' % pdb_name) + + def main(self): + self.options, self.args = self.parser.parse_args() + self.manager = get_manager(self.options.domain_name) + + if self.options.pdb_name: + if self.options.version_name: + self.describe_version(self.options.pdb_name, self.options.version_name) + else: + self.describe_pdb(self.options.pdb_name) + else: + self.describe_all() + +if __name__ == "__main__": + describe = Describe() + describe.main() diff --git a/thirdparty/boto/mapreduce/pdb_revert b/thirdparty/boto/mapreduce/pdb_revert new file mode 100644 index 000000000..daffeef1e --- /dev/null +++ b/thirdparty/boto/mapreduce/pdb_revert @@ -0,0 +1,135 @@ +#!/usr/bin/env python +# Copyright (c) 2006-2008 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +import queuetools, os, signal, sys +import subprocess +import time +from optparse import OptionParser +from boto.mapreduce.partitiondb import PartitionDB, Partition, Version +from lqs import LQSServer, PersistHandler +from boto.exception import SDBPersistenceError +from boto.sdb.persist import get_manager + +USAGE = """ + SYNOPSIS + %prog [options] [command] + DESCRIPTION + Revert to the previous Version in a PartitionDB. +""" +class Client: + + def __init__(self, queue_name): + self.q = queuetools.get_queue(queue_name) + self.q.connect() + self.manager = get_manager() + self.process() + + def process(self): + m = self.q.get() + while m['item']: + print 'Deleting: %s' % m['item'] + p = Partition(id=m['item'], manager=self.manager) + p.delete() + self.q.delete(m) + m = self.q.get() + print 'client processing complete' + +class Server: + + def __init__(self, pdb_name, domain_name=None): + self.pdb_name = pdb_name + self.manager = get_manager(domain_name) + self.pdb = PartitionDB.get(name=self.pdb_name) + self.serve() + + def serve(self): + v = self.pdb.revert() + args = {'v_id' : v.id} + rs = v.partitions() + s = LQSServer('', PersistHandler, rs, args) + s.serve_forever() + +class Revert: + + Commands = {'client' : 'Start a Revert client', + 'server' : 'Start a Revert server'} + + def __init__(self): + self.parser = OptionParser(usage=USAGE) + self.parser.add_option("--help-commands", action="store_true", dest="help_commands", + help="provides help on the available commands") + self.parser.add_option('-d', '--domain-name', action='store', type='string', + help='name of the SimpleDB domain where PDB objects are stored') + self.parser.add_option('-n', '--num-processes', action='store', type='int', dest='num_processes', + help='the number of client processes launched') + self.parser.set_defaults(num_processes=5) + self.parser.add_option('-p', '--pdb-name', action='store', type='string', + help='name of the PDB in which to store files (will create if necessary)') + self.options, self.args = self.parser.parse_args() + self.prog_name = sys.argv[0] + + def print_command_help(self): + print '\nCommands:' + for key in self.Commands.keys(): + print ' %s\t\t%s' % (key, self.Commands[key]) + + def do_server(self): + if not self.options.pdb_name: + self.parser.error('No PDB name provided') + s = Server(self.options.pdb_name, self.options.domain_name) + + def do_client(self): + c = Client('localhost') + + def main(self): + if self.options.help_commands: + self.print_command_help() + sys.exit(0) + if len(self.args) == 0: + if not self.options.pdb_name: + self.parser.error('No PDB name provided') + server_command = '%s -p %s ' % (self.prog_name, self.options.pdb_name) + server_command += ' server' + client_command = '%s client' % self.prog_name + server = subprocess.Popen(server_command, shell=True) + print 'server pid: %s' % server.pid + time.sleep(5) + clients = [] + for i in range(0, self.options.num_processes): + client = subprocess.Popen(client_command, shell=True) + clients.append(client) + print 'waiting for clients to finish' + for client in clients: + client.wait() + os.kill(server.pid, signal.SIGTERM) + elif len(self.args) == 1: + self.command = self.args[0] + if hasattr(self, 'do_%s' % self.command): + method = getattr(self, 'do_%s' % self.command) + method() + else: + self.parser.error('command (%s) not recognized' % self.command) + else: + self.parser.error('unrecognized commands') + +if __name__ == "__main__": + revert = Revert() + revert.main() diff --git a/thirdparty/boto/mapreduce/pdb_upload b/thirdparty/boto/mapreduce/pdb_upload new file mode 100644 index 000000000..1ca2b6d39 --- /dev/null +++ b/thirdparty/boto/mapreduce/pdb_upload @@ -0,0 +1,172 @@ +#!/usr/bin/env python +# Copyright (c) 2006-2008 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +import queuetools, os, signal, sys +import subprocess +import time +from optparse import OptionParser +from boto.mapreduce.partitiondb import PartitionDB, Partition, Version +from lqs import LQSServer, LQSHandler +from boto.exception import SDBPersistenceError +from boto.sdb.persist import get_manager + +USAGE = """ + SYNOPSIS + %prog [options] + DESCRIPTION + Upload partition files to a PartitionDB. + Called with no options, all PartitionDB objects defined in your default + domain (as specified in the "default_domain" option in the "[Persist]" + section of your boto config file) will be listed. + When called with a particular PartitionDB name (using -p option) all + Version objects of that PartitionDB object will be listed. + When called with the -p option and a particular Version name specified + (using the -v option) all Partitions in that Version object will be listed. +""" +class Client: + + def __init__(self, queue_name): + self.q = queuetools.get_queue(queue_name) + self.q.connect() + self.manager = get_manager() + self.process() + + def process(self): + m = self.q.get() + if m['item']: + v = Version(m['args']['v_id'], self.manager) + bucket_name = v.pdb.bucket_name + while m['item']: + print 'Uploading: %s' % m['item'] + p = v.add_partition(name=m['item']) + p.upload(os.path.join(m['args']['path'], m['item']), bucket_name) + self.q.delete(m) + m = self.q.get() + print 'client processing complete' + +class Server: + + def __init__(self, path, pdb_name, bucket_name=None, domain_name=None): + self.path = path + self.pdb_name = pdb_name + self.bucket_name = bucket_name + self.manager = get_manager(domain_name) + self.get_pdb() + self.serve() + + def get_pdb(self): + try: + self.pdb = PartitionDB.get(name=self.pdb_name) + except SDBPersistenceError: + self.pdb = PartitionDB(manager=self.manager, name=self.pdb_name, bucket_name=self.bucket_name) + self.pdb.save() + + def serve(self): + v = self.pdb.add_version() + args = {'path' : self.path, + 'v_id' : v.id} + l = os.listdir(self.path) + s = LQSServer('', LQSHandler, iter(l), args) + s.serve_forever() + +class Upload: + + Usage = "usage: %prog [options] command" + + Commands = {'client' : 'Start an Upload client', + 'server' : 'Start an Upload server'} + + def __init__(self): + self.parser = OptionParser(usage=self.Usage) + self.parser.add_option("--help-commands", action="store_true", dest="help_commands", + help="provides help on the available commands") + self.parser.add_option('-d', '--domain-name', action='store', type='string', + help='name of the SimpleDB domain where PDB objects are stored') + self.parser.add_option('-n', '--num-processes', action='store', type='int', dest='num_processes', + help='the number of client processes launched') + self.parser.set_defaults(num_processes=2) + self.parser.add_option('-i', '--input-path', action='store', type='string', + help='the path to directory to upload') + self.parser.add_option('-p', '--pdb-name', action='store', type='string', + help='name of the PDB in which to store files (will create if necessary)') + self.parser.add_option('-b', '--bucket-name', action='store', type='string', + help='name of S3 bucket (only needed if creating new PDB)') + self.options, self.args = self.parser.parse_args() + self.prog_name = sys.argv[0] + + def print_command_help(self): + print '\nCommands:' + for key in self.Commands.keys(): + print ' %s\t\t%s' % (key, self.Commands[key]) + + def do_server(self): + if not self.options.input_path: + self.parser.error('No path provided') + if not os.path.isdir(self.options.input_path): + self.parser.error('Invalid path (%s)' % self.options.input_path) + if not self.options.pdb_name: + self.parser.error('No PDB name provided') + s = Server(self.options.input_path, self.options.pdb_name, + self.options.bucket_name, self.options.domain_name) + + def do_client(self): + c = Client('localhost') + + def main(self): + if self.options.help_commands: + self.print_command_help() + sys.exit(0) + if len(self.args) == 0: + if not self.options.input_path: + self.parser.error('No path provided') + if not os.path.isdir(self.options.input_path): + self.parser.error('Invalid path (%s)' % self.options.input_path) + if not self.options.pdb_name: + self.parser.error('No PDB name provided') + server_command = '%s -p %s -i %s' % (self.prog_name, self.options.pdb_name, self.options.input_path) + if self.options.bucket_name: + server_command += ' -b %s' % self.options.bucket_name + server_command += ' server' + client_command = '%s client' % self.prog_name + server = subprocess.Popen(server_command, shell=True) + print 'server pid: %s' % server.pid + time.sleep(5) + clients = [] + for i in range(0, self.options.num_processes): + client = subprocess.Popen(client_command, shell=True) + clients.append(client) + print 'waiting for clients to finish' + for client in clients: + client.wait() + os.kill(server.pid, signal.SIGTERM) + elif len(self.args) == 1: + self.command = self.args[0] + if hasattr(self, 'do_%s' % self.command): + method = getattr(self, 'do_%s' % self.command) + method() + else: + self.parser.error('command (%s) not recognized' % self.command) + else: + self.parser.error('unrecognized commands') + +if __name__ == "__main__": + upload = Upload() + upload.main() diff --git a/thirdparty/boto/mapreduce/queuetools.py b/thirdparty/boto/mapreduce/queuetools.py new file mode 100644 index 000000000..3e08a1007 --- /dev/null +++ b/thirdparty/boto/mapreduce/queuetools.py @@ -0,0 +1,66 @@ +#!/usr/bin/python +import socket, sys +from lqs import LQSServer, LQSMessage +import boto +from boto.sqs.jsonmessage import JSONMessage + +class LQSClient: + + def __init__(self, host): + self.host = host + self.port = LQSServer.PORT + self.timeout = LQSServer.TIMEOUT + self.max_len = LQSServer.MAXSIZE + self.sock = None + + def connect(self): + self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + self.sock.settimeout(self.timeout) + self.sock.connect((self.host, self.port)) + + def decode(self, jsonstr): + return LQSMessage(jsonvalue=jsonstr) + + def get(self): + self.sock.send('next') + try: + jsonstr = self.sock.recv(self.max_len) + msg = LQSMessage(jsonvalue=jsonstr) + return msg + except: + print "recv from %s failed" % self.host + + def delete(self, msg): + self.sock.send('delete %s' % msg['id']) + try: + jsonstr = self.sock.recv(self.max_len) + msg = LQSMessage(jsonvalue=jsonstr) + return msg + except: + print "recv from %s failed" % self.host + + def close(self): + self.sock.close() + +class SQSClient: + + def __init__(self, queue_name): + self.queue_name = queue_name + + def connect(self): + self.queue = boto.lookup('sqs', self.queue_name) + self.queue.set_mesasge_class(JSONMessage) + + def get(self): + m = self.queue.read() + return m.get_body() + + def close(self): + pass + +def get_queue(name): + if name == 'localhost': + return LQSClient(name) + else: + return SQSClient(name) + diff --git a/thirdparty/boto/mashups/__init__.py b/thirdparty/boto/mashups/__init__.py new file mode 100644 index 000000000..449bd162a --- /dev/null +++ b/thirdparty/boto/mashups/__init__.py @@ -0,0 +1,23 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# + + diff --git a/thirdparty/boto/mashups/interactive.py b/thirdparty/boto/mashups/interactive.py new file mode 100644 index 000000000..b80e661e5 --- /dev/null +++ b/thirdparty/boto/mashups/interactive.py @@ -0,0 +1,97 @@ +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko is free software; you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation; either version 2.1 of the License, or (at your option) +# any later version. +# +# Paramiko is distrubuted in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +# details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Paramiko; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + + +import socket +import sys + +# windows does not have termios... +try: + import termios + import tty + has_termios = True +except ImportError: + has_termios = False + + +def interactive_shell(chan): + if has_termios: + posix_shell(chan) + else: + windows_shell(chan) + + +def posix_shell(chan): + import select + + oldtty = termios.tcgetattr(sys.stdin) + try: + tty.setraw(sys.stdin.fileno()) + tty.setcbreak(sys.stdin.fileno()) + chan.settimeout(0.0) + + while True: + r, w, e = select.select([chan, sys.stdin], [], []) + if chan in r: + try: + x = chan.recv(1024) + if len(x) == 0: + print '\r\n*** EOF\r\n', + break + sys.stdout.write(x) + sys.stdout.flush() + except socket.timeout: + pass + if sys.stdin in r: + x = sys.stdin.read(1) + if len(x) == 0: + break + chan.send(x) + + finally: + termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty) + + +# thanks to Mike Looijmans for this code +def windows_shell(chan): + import threading + + sys.stdout.write("Line-buffered terminal emulation. Press F6 or ^Z to send EOF.\r\n\r\n") + + def writeall(sock): + while True: + data = sock.recv(256) + if not data: + sys.stdout.write('\r\n*** EOF ***\r\n\r\n') + sys.stdout.flush() + break + sys.stdout.write(data) + sys.stdout.flush() + + writer = threading.Thread(target=writeall, args=(chan,)) + writer.start() + + try: + while True: + d = sys.stdin.read(1) + if not d: + break + chan.send(d) + except EOFError: + # user hit ^Z or F6 + pass diff --git a/thirdparty/boto/mashups/iobject.py b/thirdparty/boto/mashups/iobject.py new file mode 100644 index 000000000..0937932c2 --- /dev/null +++ b/thirdparty/boto/mashups/iobject.py @@ -0,0 +1,106 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import os + +def int_val_fn(v): + try: + int(v) + return True + except: + return False + +class IObject(object): + + def choose_from_list(self, item_list, search_str='', + prompt='Enter Selection'): + choice = None + while not choice: + n = 1 + choices = [] + for item in item_list: + if isinstance(item, str): + print '[%d] %s' % (n, item) + choices.append(item) + n += 1 + else: + obj, id, desc = item + if desc.find(search_str) >= 0: + print '[%d] %s - %s' % (n, id, desc) + choices.append(obj) + n += 1 + if choices: + val = raw_input('%s[1-%d]: ' % (prompt, len(choices))) + if val.startswith('/'): + search_str = val[1:] + else: + try: + int_val = int(val) + if int_val == 0: + return None + choice = choices[int_val-1] + except ValueError: + print '%s is not a valid choice' % val + except IndexError: + print '%s is not within the range[1-%d]' % (val, + len(choices)) + else: + print "No objects matched your pattern" + search_str = '' + return choice + + def get_string(self, prompt, validation_fn=None): + okay = False + while not okay: + val = raw_input('%s: ' % prompt) + if validation_fn: + okay = validation_fn(val) + if not okay: + print 'Invalid value: %s' % val + else: + okay = True + return val + + def get_filename(self, prompt): + okay = False + val = '' + while not okay: + val = raw_input('%s: %s' % (prompt, val)) + val = os.path.expanduser(val) + if os.path.isfile(val): + okay = True + elif os.path.isdir(val): + path = val + val = self.choose_from_list(os.listdir(path)) + if val: + val = os.path.join(path, val) + okay = True + else: + val = '' + else: + print 'Invalid value: %s' % val + val = '' + return val + + def get_int(self, prompt): + s = self.get_string(prompt, int_val_fn) + return int(s) + diff --git a/thirdparty/boto/mashups/order.py b/thirdparty/boto/mashups/order.py new file mode 100644 index 000000000..afe1af730 --- /dev/null +++ b/thirdparty/boto/mashups/order.py @@ -0,0 +1,199 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +High-level abstraction of an EC2 order for servers +""" + +import boto +from boto.mashups.server import Server, ServerSet +from boto.mashups.iobject import IObject +from boto.pyami.config import Config +from boto.sdb.persist import get_domain, set_domain +import time, StringIO + +InstanceTypes = ['m1.small', 'm1.large', 'm1.xlarge', 'c1.medium', 'c1.xlarge'] + +class Item(IObject): + + def __init__(self, ec2_conn): + self.name = None + self.instance_type = None + self.quantity = 0 + self.zone = None + self.ami = None + self.groups = [] + self.key = None + self.ec2 = ec2_conn + self.config = None + + def set_userdata(self, key, value): + self.userdata[key] = value + + def get_userdata(self, key): + return self.userdata[key] + + def set_name(self, name=None): + if name: + self.name = name + else: + self.name = self.get_string('Name') + + def set_instance_type(self, instance_type=None): + if instance_type: + self.instance_type = instance_type + else: + self.instance_type = self.choose_from_list(InstanceTypes, 'Instance Type') + + def set_quantity(self, n=0): + if n > 0: + self.quantity = n + else: + self.quantity = self.get_int('Quantity') + + def set_zone(self, zone=None): + if zone: + self.zone = zone + else: + l = [(z, z.name, z.state) for z in self.ec2.get_all_zones()] + self.zone = self.choose_from_list(l, prompt='Choose Availability Zone') + + def set_ami(self, ami=None): + if ami: + self.ami = ami + else: + l = [(a, a.id, a.location) for a in self.ec2.get_all_images()] + self.ami = self.choose_from_list(l, prompt='Choose AMI') + + def add_group(self, group=None): + if group: + self.groups.append(group) + else: + l = [(s, s.name, s.description) for s in self.ec2.get_all_security_groups()] + self.groups.append(self.choose_from_list(l, prompt='Choose Security Group')) + + def set_key(self, key=None): + if key: + self.key = key + else: + l = [(k, k.name, '') for k in self.ec2.get_all_key_pairs()] + self.key = self.choose_from_list(l, prompt='Choose Keypair') + + def update_config(self): + if not self.config.has_section('Credentials'): + self.config.add_section('Credentials') + self.config.set('Credentials', 'aws_access_key_id', self.ec2.aws_access_key_id) + self.config.set('Credentials', 'aws_secret_access_key', self.ec2.aws_secret_access_key) + if not self.config.has_section('Pyami'): + self.config.add_section('Pyami') + sdb_domain = get_domain() + if sdb_domain: + self.config.set('Pyami', 'server_sdb_domain', sdb_domain) + self.config.set('Pyami', 'server_sdb_name', self.name) + + def set_config(self, config_path=None): + if not config_path: + config_path = self.get_filename('Specify Config file') + self.config = Config(path=config_path) + + def get_userdata_string(self): + s = StringIO.StringIO() + self.config.write(s) + return s.getvalue() + + def enter(self, **params): + self.name = params.get('name', self.name) + if not self.name: + self.set_name() + self.instance_type = params.get('instance_type', self.instance_type) + if not self.instance_type: + self.set_instance_type() + self.zone = params.get('zone', self.zone) + if not self.zone: + self.set_zone() + self.quantity = params.get('quantity', self.quantity) + if not self.quantity: + self.set_quantity() + self.ami = params.get('ami', self.ami) + if not self.ami: + self.set_ami() + self.groups = params.get('groups', self.groups) + if not self.groups: + self.add_group() + self.key = params.get('key', self.key) + if not self.key: + self.set_key() + self.config = params.get('config', self.config) + if not self.config: + self.set_config() + self.update_config() + +class Order(IObject): + + def __init__(self): + self.items = [] + self.reservation = None + self.ec2 = boto.connect_ec2() + + def add_item(self, **params): + item = Item(self.ec2) + item.enter(**params) + self.items.append(item) + + def display(self): + print 'This Order consists of the following items' + print + print 'QTY\tNAME\tTYPE\nAMI\t\tGroups\t\t\tKeyPair' + for item in self.items: + print '%s\t%s\t%s\t%s\t%s\t%s' % (item.quantity, item.name, item.instance_type, + item.ami.id, item.groups, item.key.name) + + def place(self, block=True): + if get_domain() == None: + print 'SDB Persistence Domain not set' + domain_name = self.get_string('Specify SDB Domain') + set_domain(domain_name) + s = ServerSet() + for item in self.items: + r = item.ami.run(min_count=1, max_count=item.quantity, + key_name=item.key.name, user_data=item.get_userdata_string(), + security_groups=item.groups, instance_type=item.instance_type, + placement=item.zone.name) + if block: + states = [i.state for i in r.instances] + if states.count('running') != len(states): + print states + time.sleep(15) + states = [i.update() for i in r.instances] + for i in r.instances: + server = Server() + server.name = item.name + server.instance_id = i.id + server.reservation = r + server.save() + s.append(server) + if len(s) == 1: + return s[0] + else: + return s + + + diff --git a/thirdparty/boto/mashups/server.py b/thirdparty/boto/mashups/server.py new file mode 100644 index 000000000..f8f7d8711 --- /dev/null +++ b/thirdparty/boto/mashups/server.py @@ -0,0 +1,345 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +High-level abstraction of an EC2 server +""" +import boto, boto.utils +from boto.mashups.iobject import IObject +from boto.pyami.config import Config, BotoConfigPath +from boto.mashups.interactive import interactive_shell +from boto.sdb.persist.object import SDBObject +from boto.sdb.persist.property import * +import os +import StringIO + +class ServerSet(list): + + def __getattr__(self, name): + results = [] + is_callable = False + for server in self: + try: + val = getattr(server, name) + if callable(val): + is_callable = True + results.append(val) + except: + results.append(None) + if is_callable: + self.map_list = results + return self.map + return results + + def map(self, *args): + results = [] + for fn in self.map_list: + results.append(fn(*args)) + return results + +class Server(SDBObject): + + ec2 = boto.connect_ec2() + + @classmethod + def Inventory(cls): + """ + Returns a list of Server instances, one for each Server object + persisted in the db + """ + l = ServerSet() + rs = cls.find() + for server in rs: + l.append(server) + return l + + @classmethod + def Register(cls, name, instance_id, description=''): + s = cls() + s.name = name + s.instance_id = instance_id + s.description = description + s.save() + return s + + def __init__(self, id=None, manager=None): + SDBObject.__init__(self, id, manager) + self._reservation = None + self._instance = None + self._ssh_client = None + self._pkey = None + self._config = None + + name = StringProperty() + instance_id = StringProperty() + config_uri = StringProperty() + ami_id = StringProperty() + zone = StringProperty() + security_group = StringProperty() + key_name = StringProperty() + elastic_ip = StringProperty() + instance_type = StringProperty() + description = StringProperty() + + def setReadOnly(self, value): + raise AttributeError + + def getInstance(self): + if not self._instance: + if self.instance_id: + rs = self.ec2.get_all_instances([self.instance_id]) + if len(rs) > 0: + self._reservation = rs[0] + self._instance = self._reservation.instances[0] + return self._instance + + instance = property(getInstance, setReadOnly, None, 'The Instance for the server') + + def getAMI(self): + if self.instance: + return self.instance.image_id + + ami = property(getAMI, setReadOnly, None, 'The AMI for the server') + + def getStatus(self): + if self.instance: + self.instance.update() + return self.instance.state + + status = property(getStatus, setReadOnly, None, + 'The status of the server') + + def getHostname(self): + if self.instance: + return self.instance.public_dns_name + + hostname = property(getHostname, setReadOnly, None, + 'The public DNS name of the server') + + def getPrivateHostname(self): + if self.instance: + return self.instance.private_dns_name + + private_hostname = property(getPrivateHostname, setReadOnly, None, + 'The private DNS name of the server') + + def getLaunchTime(self): + if self.instance: + return self.instance.launch_time + + launch_time = property(getLaunchTime, setReadOnly, None, + 'The time the Server was started') + + def getConsoleOutput(self): + if self.instance: + return self.instance.get_console_output() + + console_output = property(getConsoleOutput, setReadOnly, None, + 'Retrieve the console output for server') + + def getGroups(self): + if self._reservation: + return self._reservation.groups + else: + return None + + groups = property(getGroups, setReadOnly, None, + 'The Security Groups controlling access to this server') + + def getConfig(self): + if not self._config: + remote_file = BotoConfigPath + local_file = '%s.ini' % self.instance.id + self.get_file(remote_file, local_file) + self._config = Config(local_file) + return self._config + + def setConfig(self, config): + local_file = '%s.ini' % self.instance.id + fp = open(local_file) + config.write(fp) + fp.close() + self.put_file(local_file, BotoConfigPath) + self._config = config + + config = property(getConfig, setConfig, None, + 'The instance data for this server') + + def stop(self): + if self.instance: + self.instance.stop() + + def start(self): + self.stop() + ec2 = boto.connect_ec2() + ami = ec2.get_all_images(image_ids = [str(self.ami_id)])[0] + groups = ec2.get_all_security_groups(groupnames=[str(self.security_group)]) + if not self._config: + self._config = Config(fp=boto.utils.fetch_file(self.config_uri)) + if not self._config.has_section("Credentials"): + self._config.add_section("Credentials") + self._config.set("Credentials", "aws_access_key_id", ec2.aws_access_key_id) + self._config.set("Credentials", "aws_secret_access_key", ec2.aws_secret_access_key) + + if not self._config.has_section("Pyami"): + self._config.add_section("Pyami") + + if self.manager.domain: + self._config.set('Pyami', 'server_sdb_domain', self.manager.domain.name) + self._config.set("Pyami", 'server_sdb_name', self.name) + + cfg = StringIO.StringIO() + self._config.write(cfg) + cfg = cfg.getvalue() + r = ami.run(min_count=1, + max_count=1, + key_name=self.key_name, + security_groups = groups, + instance_type = self.instance_type, + placement = self.zone, + user_data = cfg) + i = r.instances.next() + self.instance_id = i.id + if self.elastic_ip: + ec2.associate_address(self.instance_id, self.elastic_ip) + + def reboot(self): + if self.instance: + self.instance.reboot() + + def get_ssh_client(self, key_file=None, host_key_file='~/.ssh/known_hosts', + uname='root'): + import paramiko + if not self.instance: + print 'No instance yet!' + return + if not self._ssh_client: + if not key_file: + iobject = IObject() + key_file = iobject.get_filename('Path to OpenSSH Key file') + self._pkey = paramiko.RSAKey.from_private_key_file(key_file) + self._ssh_client = paramiko.SSHClient() + self._ssh_client.load_system_host_keys() + self._ssh_client.load_host_keys(os.path.expanduser(host_key_file)) + self._ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + self._ssh_client.connect(self.instance.public_dns_name, + username=uname, pkey=self._pkey) + return self._ssh_client + + def get_file(self, remotepath, localpath): + ssh_client = self.get_ssh_client() + sftp_client = ssh_client.open_sftp() + sftp_client.get(remotepath, localpath) + + def put_file(self, localpath, remotepath): + ssh_client = self.get_ssh_client() + sftp_client = ssh_client.open_sftp() + sftp_client.put(localpath, remotepath) + + def listdir(self, remotepath): + ssh_client = self.get_ssh_client() + sftp_client = ssh_client.open_sftp() + return sftp_client.listdir(remotepath) + + def shell(self): + ssh_client = self.get_ssh_client() + channel = ssh_client.invoke_shell() + interactive_shell(channel) + + def bundle_image(self, prefix, key_file, cert_file, size): + print 'bundling image...' + print '\tcopying cert and pk over to /mnt directory on server' + ssh_client = self.get_ssh_client() + sftp_client = ssh_client.open_sftp() + path, name = os.path.split(key_file) + remote_key_file = '/mnt/%s' % name + self.put_file(key_file, remote_key_file) + path, name = os.path.split(cert_file) + remote_cert_file = '/mnt/%s' % name + self.put_file(cert_file, remote_cert_file) + print '\tdeleting %s' % BotoConfigPath + # delete the metadata.ini file if it exists + try: + sftp_client.remove(BotoConfigPath) + except: + pass + command = 'ec2-bundle-vol ' + command += '-c %s -k %s ' % (remote_cert_file, remote_key_file) + command += '-u %s ' % self._reservation.owner_id + command += '-p %s ' % prefix + command += '-s %d ' % size + command += '-d /mnt ' + if self.instance.instance_type == 'm1.small' or self.instance_type == 'c1.medium': + command += '-r i386' + else: + command += '-r x86_64' + print '\t%s' % command + t = ssh_client.exec_command(command) + response = t[1].read() + print '\t%s' % response + print '\t%s' % t[2].read() + print '...complete!' + + def upload_bundle(self, bucket, prefix): + print 'uploading bundle...' + command = 'ec2-upload-bundle ' + command += '-m /mnt/%s.manifest.xml ' % prefix + command += '-b %s ' % bucket + command += '-a %s ' % self.ec2.aws_access_key_id + command += '-s %s ' % self.ec2.aws_secret_access_key + print '\t%s' % command + ssh_client = self.get_ssh_client() + t = ssh_client.exec_command(command) + response = t[1].read() + print '\t%s' % response + print '\t%s' % t[2].read() + print '...complete!' + + def create_image(self, bucket=None, prefix=None, key_file=None, cert_file=None, size=None): + iobject = IObject() + if not bucket: + bucket = iobject.get_string('Name of S3 bucket') + if not prefix: + prefix = iobject.get_string('Prefix for AMI file') + if not key_file: + key_file = iobject.get_filename('Path to RSA private key file') + if not cert_file: + cert_file = iobject.get_filename('Path to RSA public cert file') + if not size: + size = iobject.get_int('Size (in MB) of bundled image') + self.bundle_image(prefix, key_file, cert_file, size) + self.upload_bundle(bucket, prefix) + print 'registering image...' + self.image_id = self.ec2.register_image('%s/%s.manifest.xml' % (bucket, prefix)) + return self.image_id + + def install_package(self, package_name): + print 'installing %s...' % package_name + command = 'yum -y install %s' % package_name + print '\t%s' % command + ssh_client = self.get_ssh_client() + t = ssh_client.exec_command(command) + response = t[1].read() + print '\t%s' % response + print '\t%s' % t[2].read() + print '...complete!' + + diff --git a/thirdparty/boto/mturk/__init__.py b/thirdparty/boto/mturk/__init__.py new file mode 100644 index 000000000..449bd162a --- /dev/null +++ b/thirdparty/boto/mturk/__init__.py @@ -0,0 +1,23 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# + + diff --git a/thirdparty/boto/mturk/connection.py b/thirdparty/boto/mturk/connection.py new file mode 100644 index 000000000..7c759d612 --- /dev/null +++ b/thirdparty/boto/mturk/connection.py @@ -0,0 +1,197 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import urllib +import xml.sax +from boto import handler +from boto.mturk.price import Price +from boto.mturk.question import QuestionForm +import boto.mturk.notification +from boto.connection import AWSQueryConnection +from boto.exception import EC2ResponseError +from boto.resultset import ResultSet + +class MTurkConnection(AWSQueryConnection): + + APIVersion = '2006-10-31' + SignatureVersion = '1' + + def __init__(self, aws_access_key_id=None, aws_secret_access_key=None, + is_secure=False, port=None, proxy=None, proxy_port=None, + proxy_user=None, proxy_pass=None, host='mechanicalturk.amazonaws.com', debug=0, + https_connection_factory=None): + AWSQueryConnection.__init__(self, aws_access_key_id, aws_secret_access_key, + is_secure, port, proxy, proxy_port, proxy_user, proxy_pass, + host, debug, https_connection_factory) + + def get_account_balance(self): + params = {} + response = self.make_request('GetAccountBalance', params) + body = response.read() + if response.status == 200: + rs = ResultSet([('AvailableBalance', Price), + ('OnHoldBalance', Price)]) + h = handler.XmlHandler(rs, self) + xml.sax.parseString(body, h) + return rs + else: + raise EC2ResponseError(response.status, response.reason, body) + + def register_hit_type(self, title, description, reward, duration, + keywords=None, approval_delay=None, qual_req=None): + """ + Register a new HIT Type + \ttitle, description are strings + \treward is a Price object + \tduration can be an integer or string + """ + params = {'Title' : title, + 'Description' : description, + 'AssignmentDurationInSeconds' : duration} + params.update(MTurkConnection.get_price_as_price(reward).get_as_params('Reward')) + response = self.make_request('RegisterHITType', params) + body = response.read() + if response.status == 200: + rs = ResultSet() + h = handler.XmlHandler(rs, self) + xml.sax.parseString(body, h) + return rs.HITTypeId + else: + raise EC2ResponseError(response.status, response.reason, body) + + def set_email_notification(hit_type, email): + """ + Performs a SetHITTypeNotification operation to set email notification for a specified HIT type + """ + assert type(hit_type) is str, "hit_type argument should be a string." + + params = {'HITTypeId': hit_type} + + notification_params = {'Destination': email, + 'Transport': 'Email', + 'Version': boto.mturk.notification.NOTIFICATION_VERSION } + + # Set up dict of 'Notification.1.Transport' etc. values + notification_rest_params = {} + num = 1 + for key in notification_params: + notification_rest_params['Notification.%d.%s' % (num, key)] = notification_params[key] + + # Update main params dict + params.update(notification_rest_params) + + # Execute operation + response = self.make_request('SetHITTypeNotification', params) + body = response.read() + + # From the Developer Guide: + # A successful request for the SetHITTypeNotification operation will return with no errors. The + # response will include a SetHITTypeNotificationResult element, which contains the Request (if + # the Request response group is specified). The operation returns no other data. + + if response.status == 200: # Is this the correct way to test if it worked? + rs = ResultSet() + h = handler.XmlHandler(rs, self) + xml.sax.parseString(body, h) + return rs.HITTypeId + else: + raise EC2ResponseError(response.status, response.reason, body) + + + def create_hit(self, title=None, description=None, keywords=None, reward=0.00, + duration=60*60*24*7, approval_delay=None, qual_req=None, hit_type=None, + question=None, questions=None): + """ + Creates a new HIT. + Returns HITId as a string. + See: http://docs.amazonwebservices.com/AWSMechanicalTurkRequester/2006-10-31/ApiReference_CreateHITOperation.html + """ + + # handle single or multiple questions + if question is not None and questions is not None: + raise ValueError("Must specify either question (single Question instance) or questions (list), but not both") + if question is not None and questions is None: + questions = [question] + + + # Handle keywords + final_keywords = MTurkConnection.get_keywords_as_string(keywords) + + # Handle price argument + final_price = MTurkConnection.get_price_as_price(reward) + + # Set up QuestionForm data structure + qf = QuestionForm(questions=questions) + + # Handle basic arguments and set up params dict + params = {'Title': title, + 'Description' : description, + 'Keywords': final_keywords, + 'AssignmentDurationInSeconds' : duration, + 'Question': qf.get_as_xml() } + + if approval_delay is not None: + params.update({'AutoApprovalDelayInSeconds': approval_delay }) + + params.update(final_price.get_as_params('Reward')) + + # Handle optional hit_type argument + if hit_type is not None: + params.update({'HITTypeId': hit_type}) + + # Submit + response = self.make_request('CreateHIT', params) + body = response.read() + if response.status == 200: + rs = ResultSet() + h = handler.XmlHandler(rs, self) + xml.sax.parseString(body, h) + + return rs.HITId + #return rs # return entire ResultSet for testing purposes + else: + raise EC2ResponseError(response.status, response.reason, body) + + @staticmethod + def get_keywords_as_string(keywords): + """ + Returns a comma+space-separated string of keywords from either a list or a string + """ + if type(keywords) is list: + final_keywords = ', '.join(keywords) + elif type(keywords) is str: + final_keywords = keywords + elif keywords is None: + final_keywords = "" + else: + raise TypeError("keywords argument must be a string or a list of strings; got a %s" % type(keywords)) + return final_keywords + + @staticmethod + def get_price_as_price(reward): + """ + Returns a Price data structure from either a float or a Price + """ + if isinstance(reward, Price): + final_price = reward + else: + final_price = Price(reward) + return final_price diff --git a/thirdparty/boto/mturk/notification.py b/thirdparty/boto/mturk/notification.py new file mode 100644 index 000000000..4b3b2d970 --- /dev/null +++ b/thirdparty/boto/mturk/notification.py @@ -0,0 +1,92 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Provides NotificationMessage and Event classes, with utility methods, for +implementations of the Mechanical Turk Notification API. +""" + +import hmac +import sha +import base64 +import re + +class NotificationMessage: + + NOTIFICATION_WSDL = "http://mechanicalturk.amazonaws.com/AWSMechanicalTurk/2006-05-05/AWSMechanicalTurkRequesterNotification.wsdl" + NOTIFICATION_VERSION = '2006-05-05' + + SERVICE_NAME = "AWSMechanicalTurkRequesterNotification" + OPERATION_NAME = "Notify" + + EVENT_PATTERN = r"Event\.(?P\d+)\.(?P\w+)" + EVENT_RE = re.compile(EVENT_PATTERN) + + def __init__(self, d): + """ + Constructor; expects parameter d to be a dict of string parameters from a REST transport notification message + """ + self.signature = d['Signature'] # vH6ZbE0NhkF/hfNyxz2OgmzXYKs= + self.timestamp = d['Timestamp'] # 2006-05-23T23:22:30Z + self.version = d['Version'] # 2006-05-05 + assert d['method'] == NotificationMessage.OPERATION_NAME, "Method should be '%s'" % NotificationMessage.OPERATION_NAME + + # Build Events + self.events = [] + events_dict = {} + if 'Event' in d: + # TurboGears surprised me by 'doing the right thing' and making { 'Event': { '1': { 'EventType': ... } } } etc. + events_dict = d['Event'] + else: + for k in d: + v = d[k] + if k.startswith('Event.'): + ed = NotificationMessage.EVENT_RE.search(k).groupdict() + n = int(ed['n']) + param = str(ed['param']) + if n not in events_dict: + events_dict[n] = {} + events_dict[n][param] = v + for n in events_dict: + self.events.append(Event(events_dict[n])) + + def verify(self, secret_key): + """ + Verifies the authenticity of a notification message. + """ + verification_input = NotificationMessage.SERVICE_NAME + NotificationMessage.OPERATION_NAME + self.timestamp + h = hmac.new(key=secret_key, digestmod=sha) + h.update(verification_input) + signature_calc = base64.b64encode(h.digest()) + return self.signature == signature_calc + +class Event: + def __init__(self, d): + self.event_type = d['EventType'] + self.event_time_str = d['EventTime'] + self.hit_type = d['HITTypeId'] + self.hit_id = d['HITId'] + self.assignment_id = d['AssignmentId'] + + #TODO: build self.event_time datetime from string self.event_time_str + + def __repr__(self): + return "" % (self.event_type, self.hit_id) diff --git a/thirdparty/boto/mturk/price.py b/thirdparty/boto/mturk/price.py new file mode 100644 index 000000000..3c88a9654 --- /dev/null +++ b/thirdparty/boto/mturk/price.py @@ -0,0 +1,48 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +class Price: + + def __init__(self, amount=0.0, currency_code='USD'): + self.amount = amount + self.currency_code = currency_code + self.formatted_price = '' + + def __repr__(self): + if self.formatted_price: + return self.formatted_price + else: + return str(self.amount) + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'Amount': + self.amount = float(value) + elif name == 'CurrencyCode': + self.currency_code = value + elif name == 'FormattedPrice': + self.formatted_price = value + + def get_as_params(self, label, ord=1): + return {'%s.%d.Amount'%(label, ord) : str(self.amount), + '%s.%d.CurrencyCode'%(label, ord) : self.currency_code} diff --git a/thirdparty/boto/mturk/question.py b/thirdparty/boto/mturk/question.py new file mode 100644 index 000000000..c54a140c4 --- /dev/null +++ b/thirdparty/boto/mturk/question.py @@ -0,0 +1,267 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +class Question: + + QUESTION_XML_TEMPLATE = """%s%s%s""" + + def __init__(self, identifier, content, answer_spec): #amount=0.0, currency_code='USD'): + self.identifier = identifier + self.content = content + self.answer_spec = answer_spec + + def get_as_params(self, label='Question', identifier=None): + + if identifier is None: + raise ValueError("identifier (QuestionIdentifier) is required per MTurk spec.") + + return { label : self.get_as_xml() } + + def get_as_xml(self): + ret = Question.QUESTION_XML_TEMPLATE % (self.identifier, self.content.get_as_xml(), self.answer_spec.get_as_xml()) + return ret + +class QuestionForm: + + QUESTIONFORM_SCHEMA_LOCATION = "http://mechanicalturk.amazonaws.com/AWSMechanicalTurkDataSchemas/2005-10-01/QuestionForm.xsd" + QUESTIONFORM_XML_TEMPLATE = """%s""" # % (ns, questions_xml) + + def __init__(self, questions=None): + if questions is None or type(questions) is not list: + raise ValueError("Must pass a list of Question instances to QuestionForm constructor") + else: + self.questions = questions + + def get_as_xml(self): + questions_xml = "".join([q.get_as_xml() for q in self.questions]) + return QuestionForm.QUESTIONFORM_XML_TEMPLATE % (QuestionForm.QUESTIONFORM_SCHEMA_LOCATION, questions_xml) + + #def startElement(self, name, attrs, connection): + # return None + # + #def endElement(self, name, value, connection): + # + # #if name == 'Amount': + # # self.amount = float(value) + # #elif name == 'CurrencyCode': + # # self.currency_code = value + # #elif name == 'FormattedPrice': + # # self.formatted_price = value + # + # pass # What's this method for? I don't get it. + +class QuestionContent: + + def __init__(self, title=None, text=None, bulleted_list=None, binary=None, application=None, formatted_content=None): + self.title = title + self.text = text + self.bulleted_list = bulleted_list + self.binary = binary + self.application = application + self.formatted_content = formatted_content + + def get_title_xml(self): + if self.title is None: + return '' # empty + else: + return "%s" % self.title + + def get_text_xml(self): + if self.text is None: + return '' + else: + return "%s" % self.text + + def get_bulleted_list_xml(self): + if self.bulleted_list is None: + return '' + elif type(self.bulleted_list) is list: + return "%s" % self.get_bulleted_list_items_xml() + else: + raise ValueError("QuestionContent bulleted_list argument should be a list.") + + def get_bulleted_list_items_xml(self): + ret = "" + for item in self.bulleted_list: + ret = ret + "%s" % item + return ret + + def get_binary_xml(self): + if self.binary is None: + return '' + else: + raise NotImplementedError("Binary question content is not yet supported.") + + def get_application_xml(self): + if self.application is None: + return '' + else: + raise NotImplementedError("Application question content is not yet supported.") + + def get_formatted_content_xml(self): + if self.formatted_content is None: + return '' + else: + return "" % self.formatted_content + + def get_as_xml(self): + children = self.get_title_xml() + self.get_text_xml() + self.get_bulleted_list_xml() + self.get_binary_xml() + self.get_application_xml() + self.get_formatted_content_xml() + return "%s" % children + +class AnswerSpecification: + + ANSWERSPECIFICATION_XML_TEMPLATE = """%s""" + + def __init__(self, spec): + self.spec = spec + def get_as_xml(self): + values = () # TODO + return AnswerSpecification.ANSWERSPECIFICATION_XML_TEMPLATE % self.spec.get_as_xml() + +class FreeTextAnswer: + + FREETEXTANSWER_XML_TEMPLATE = """%s%s""" # (constraints, default) + FREETEXTANSWER_CONSTRAINTS_XML_TEMPLATE = """%s%s""" # (is_numeric_xml, length_xml) + FREETEXTANSWER_LENGTH_XML_TEMPLATE = """""" # (min_length_attr, max_length_attr) + FREETEXTANSWER_ISNUMERIC_XML_TEMPLATE = """""" # (min_value_attr, max_value_attr) + FREETEXTANSWER_DEFAULTTEXT_XML_TEMPLATE = """%s""" # (default) + + def __init__(self, default=None, min_length=None, max_length=None, is_numeric=False, min_value=None, max_value=None): + self.default = default + self.min_length = min_length + self.max_length = max_length + self.is_numeric = is_numeric + self.min_value = min_value + self.max_value = max_value + + def get_as_xml(self): + is_numeric_xml = "" + if self.is_numeric: + min_value_attr = "" + max_value_attr = "" + if self.min_value: + min_value_attr = """minValue="%d" """ % self.min_value + if self.max_value: + max_value_attr = """maxValue="%d" """ % self.max_value + is_numeric_xml = FreeTextAnswer.FREETEXTANSWER_ISNUMERIC_XML_TEMPLATE % (min_value_attr, max_value_attr) + + length_xml = "" + if self.min_length or self.max_length: + min_length_attr = "" + max_length_attr = "" + if self.min_length: + min_length_attr = """minLength="%d" """ + if self.max_length: + max_length_attr = """maxLength="%d" """ + length_xml = FreeTextAnswer.FREETEXTANSWER_LENGTH_XML_TEMPLATE % (min_length_attr, max_length_attr) + + constraints_xml = "" + if is_numeric_xml != "" or length_xml != "": + constraints_xml = FreeTextAnswer.FREETEXTANSWER_CONSTRAINTS_XML_TEMPLATE % (is_numeric_xml, length_xml) + + default_xml = "" + if self.default is not None: + default_xml = FreeTextAnswer.FREETEXTANSWER_DEFAULTTEXT_XML_TEMPLATE % self.default + + return FreeTextAnswer.FREETEXTANSWER_XML_TEMPLATE % (constraints_xml, default_xml) + +class FileUploadAnswer: + FILEUPLOADANSWER_XML_TEMLPATE = """%d%d""" # (min, max) + DEFAULT_MIN_SIZE = 1024 # 1K (completely arbitrary!) + DEFAULT_MAX_SIZE = 5 * 1024 * 1024 # 5MB (completely arbitrary!) + + def __init__(self, min=None, max=None): + self.min = min + self.max = max + if self.min is None: + self.min = FileUploadAnswer.DEFAULT_MIN_SIZE + if self.max is None: + self.max = FileUploadAnswer.DEFAULT_MAX_SIZE + + def get_as_xml(self): + return FileUploadAnswer.FILEUPLOADANSWER_XML_TEMLPATE % (self.min, self.max) + +class SelectionAnswer: + """ + A class to generate SelectionAnswer XML data structures. + Does not yet implement Binary selection options. + """ + SELECTIONANSWER_XML_TEMPLATE = """%s%s""" # % (style_xml, selections_xml) + SELECTION_XML_TEMPLATE = """%s%s""" # (identifier, value_xml) + SELECTION_VALUE_XML_TEMPLATE = """<%s>%s""" # (type, value, type) + STYLE_XML_TEMPLATE = """%s""" # (style) + ACCEPTED_STYLES = ['radiobutton', 'dropdown', 'checkbox', 'list', 'combobox', 'multichooser'] + + def __init__(self, min=1, max=1, style=None, selections=None, type='text', other=False): + + if style is not None: + if style in SelectionAnswer.ACCEPTED_STYLES: + self.style_suggestion = style + else: + raise ValueError("style '%s' not recognized; should be one of %s" % (style, ', '.join(SelectionAnswer.ACCEPTED_STYLES))) + else: + self.style_suggestion = None + + if selections is None: + raise ValueError("SelectionAnswer.__init__(): selections must be a non-empty list of tuples") + else: + self.selections = selections + + self.min_selections = min + self.max_selections = max + + assert len(selections) >= self.min_selections, "# of selections is less than minimum of %d" % self.min_selections + #assert len(selections) <= self.max_selections, "# of selections exceeds maximum of %d" % self.max_selections + + self.type = type + + self.other = other + + def get_as_xml(self): + xml = "" + if self.type == 'text': + TYPE_TAG = "Text" + elif self.type == 'binary': + TYPE_TAG = "Binary" + else: + raise ValueError("illegal type: %s; must be either 'text' or 'binary'" % str(self.type)) + + # build list of elements + selections_xml = "" + for tpl in self.selections: + value_xml = SelectionAnswer.SELECTION_VALUE_XML_TEMPLATE % (TYPE_TAG, tpl[0], TYPE_TAG) + selection_xml = SelectionAnswer.SELECTION_XML_TEMPLATE % (tpl[1], value_xml) + selections_xml += selection_xml + + if self.other: + # add element + selections_xml += "" + + if self.style_suggestion is not None: + style_xml = SelectionAnswer.STYLE_XML_TEMPLATE % self.style_suggestion + else: + style_xml = "" + + ret = SelectionAnswer.SELECTIONANSWER_XML_TEMPLATE % (style_xml, selections_xml) + + # return XML + return ret + diff --git a/thirdparty/boto/pyami/__init__.py b/thirdparty/boto/pyami/__init__.py new file mode 100644 index 000000000..303dbb66c --- /dev/null +++ b/thirdparty/boto/pyami/__init__.py @@ -0,0 +1,22 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# + diff --git a/thirdparty/boto/pyami/bootstrap.py b/thirdparty/boto/pyami/bootstrap.py new file mode 100644 index 000000000..59462ca97 --- /dev/null +++ b/thirdparty/boto/pyami/bootstrap.py @@ -0,0 +1,121 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +import os, pwd +import boto +from boto.utils import get_instance_metadata, get_instance_userdata +from boto.pyami.config import Config, BotoConfigPath +from boto.pyami.scriptbase import ScriptBase + +class Bootstrap(ScriptBase): + """ + The Bootstrap class is instantiated and run as part of the PyAMI + instance initialization process. The methods in this class will + be run from the rc.local script of the instance and will be run + as the root user. + + The main purpose of this class is to make sure the boto distribution + on the instance is the one required. + """ + + def __init__(self): + self.working_dir = '/mnt/pyami' + self.write_metadata() + ScriptBase.__init__(self) + + def write_metadata(self): + fp = open(os.path.expanduser(BotoConfigPath), 'w') + fp.write('[Instance]\n') + inst_data = get_instance_metadata() + for key in inst_data: + fp.write('%s = %s\n' % (key, inst_data[key])) + user_data = get_instance_userdata() + fp.write('\n%s\n' % user_data) + fp.write('[Pyami]\n') + fp.write('working_dir = %s\n' % self.working_dir) + fp.close() + # This file has the AWS credentials, should we lock it down? + # os.chmod(BotoConfigPath, stat.S_IREAD | stat.S_IWRITE) + # now that we have written the file, read it into a pyami Config object + boto.config = Config() + boto.init_logging() + + def create_working_dir(self): + boto.log.info('Working directory: %s' % self.working_dir) + if not os.path.exists(self.working_dir): + os.mkdir(self.working_dir) + + def load_boto(self): + update = boto.config.get('Boto', 'boto_update', 'svn:HEAD') + if update.startswith('svn'): + if update.find(':') >= 0: + method, version = update.split(':') + version = '-r%s' % version + else: + version = '-rHEAD' + location = boto.config.get('Boto', 'boto_location', '/usr/local/boto') + self.run('svn update %s %s' % (version, location)) + else: + # first remove the symlink needed when running from subversion + self.run('rm /usr/local/lib/python2.5/site-packages/boto') + self.run('easy_install %s' % update) + + def fetch_s3_file(self, s3_file): + try: + if s3_file.startswith('s3:'): + bucket_name, key_name = s3_file[len('s3:'):].split('/') + c = boto.connect_s3() + bucket = c.get_bucket(bucket_name) + key = bucket.get_key(key_name) + boto.log.info('Fetching %s/%s' % (bucket.name, key.name)) + path = os.path.join(self.working_dir, key.name) + key.get_contents_to_filename(path) + except: + boto.log.exception('Problem Retrieving file: %s' % s3_file) + path = None + return path + + def load_packages(self): + package_str = boto.config.get('Pyami', 'packages') + if package_str: + packages = package_str.split(',') + for package in packages: + package = package.strip() + if package.startswith('s3:'): + package = self.fetch_s3_file(package) + if package: + # if the "package" is really a .py file, it doesn't have to + # be installed, just being in the working dir is enough + if not package.endswith('.py'): + self.run('easy_install -Z %s' % package, exit_on_error=False) + + def main(self): + self.create_working_dir() + self.load_boto() + self.load_packages() + self.notify('Bootstrap Completed for %s' % boto.config.get_instance('instance-id')) + +if __name__ == "__main__": + # because bootstrap starts before any logging configuration can be loaded from + # the boto config files, we will manually enable logging to /var/log/boto.log + boto.set_file_logger('bootstrap', '/var/log/boto.log') + bs = Bootstrap() + bs.main() diff --git a/thirdparty/boto/pyami/config.py b/thirdparty/boto/pyami/config.py new file mode 100644 index 000000000..1ca0598bd --- /dev/null +++ b/thirdparty/boto/pyami/config.py @@ -0,0 +1,141 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +import StringIO, os +import ConfigParser + +BotoConfigLocations = ['/etc/boto.cfg', os.path.expanduser('~/.boto')] +BotoConfigPath = BotoConfigLocations[0] + +class Config(ConfigParser.SafeConfigParser): + + def __init__(self, path=None, fp=None): + ConfigParser.SafeConfigParser.__init__(self, {'working_dir' : '/mnt/pyami', + 'debug' : '0'}) + if path: + self.read(path) + elif fp: + self.readfp(fp) + else: + self.read(BotoConfigLocations) + + def save_option(self, path, section, option, value): + """ + Write the specified Section.Option to the config file specified by path. + Replace any previous value. If the path doesn't exist, create it. + Also add the option the the in-memory config. + """ + config = ConfigParser.SafeConfigParser() + config.read(path) + if not config.has_section(section): + config.add_section(section) + config.set(section, option, value) + fp = open(path, 'w') + config.write(fp) + fp.close() + if not self.has_section(section): + self.add_section(section) + self.set(section, option, value) + + def save_user_option(self, section, option, value): + self.save_option(os.path.expanduser(UserConfigPath), section, option, value) + + def save_system_option(self, section, option, value): + self.save_option(BotoConfigPath, section, option, value) + + def get_instance(self, name, default=None): + try: + val = self.get('Instance', name) + except: + val = default + return val + + def get_user(self, name, default=None): + try: + val = self.get('User', name) + except: + val = default + return val + + def getint_user(self, name, default=0): + try: + val = self.getint('User', name) + except: + val = default + return val + + def get_value(self, section, name, default=None): + return self.get(section, name, default) + + def get(self, section, name, default=None): + try: + val = ConfigParser.SafeConfigParser.get(self, section, name) + except: + val = default + return val + + def getint(self, section, name, default=0): + try: + val = ConfigParser.SafeConfigParser.getint(self, section, name) + except: + val = int(default) + return val + + def getfloat(self, section, name, default=0.0): + try: + val = ConfigParser.SafeConfigParser.getfloat(self, section, name) + except: + val = float(default) + return val + + def getbool(self, section, name, default=False): + if self.has_option(section, name): + val = self.get(section, name) + if val.lower() == 'true': + val = True + else: + val = False + else: + val = default + return val + + def setbool(self, section, name, value): + if value: + self.set(section, name, 'true') + else: + self.set(section, name, 'false') + + def dump(self): + s = StringIO.StringIO() + self.write(s) + print s.getvalue() + + def dump_safe(self, fp=None): + if not fp: + fp = StringIO.StringIO() + for section in self.sections(): + fp.write('[%s]\n' % section) + for option in self.options(section): + if option == 'aws_secret_access_key': + fp.write('%s = xxxxxxxxxxxxxxxxxx\n' % option) + else: + fp.write('%s = %s\n' % (option, self.get(section, option))) + diff --git a/thirdparty/boto/pyami/copybot.cfg b/thirdparty/boto/pyami/copybot.cfg new file mode 100644 index 000000000..8bf77b5ce --- /dev/null +++ b/thirdparty/boto/pyami/copybot.cfg @@ -0,0 +1,47 @@ +# +# Your AWS Credentials +# +[Credentials] +aws_access_key_id = +aws_secret_access_key = + +# +# Fill out this section if you want emails from CopyBot +# when it starts and stops +# +[Notification] +#smtp_host = +#smtp_user = +#smtp_pass = +#smtp_from = +#smtp_to = + +# +# If you leave this section as is, it will automatically +# update boto from subversion upon start up. +# If you don't want that to happen, comment this out +# +[Boto] +boto_location = /usr/local/boto +boto_update = svn:HEAD + +# +# This tells the Pyami code in boto what scripts +# to run during startup +# +[Pyami] +scripts = boto.pyami.copybot.CopyBot + +# +# Source bucket and Destination Bucket, obviously. +# If exit_on_completion is false, the instance +# will keep running after the copy operation is +# complete which might be handy for debugging. +# If copy_acls is false, the ACL's will not be +# copied with the objects to the new bucket. +# +[CopyBot] +src_bucket = +dst_bucket = +exit_on_completion = true +copy_acls = true diff --git a/thirdparty/boto/pyami/copybot.py b/thirdparty/boto/pyami/copybot.py new file mode 100644 index 000000000..97c200ca6 --- /dev/null +++ b/thirdparty/boto/pyami/copybot.py @@ -0,0 +1,86 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +import boto +from boto.pyami.scriptbase import ScriptBase +import os, StringIO + +class CopyBot(ScriptBase): + + def __init__(self): + ScriptBase.__init__(self) + self.wdir = boto.config.get('Pyami', 'working_dir') + self.log_file = '%s.log' % self.instance_id + self.log_path = os.path.join(self.wdir, self.log_file) + boto.set_file_logger(self.name, self.log_path) + self.src_name = boto.config.get(self.name, 'src_bucket') + self.dst_name = boto.config.get(self.name, 'dst_bucket') + self.s3 = boto.connect_s3() + self.src = self.s3.lookup(self.src_name) + if not self.src: + boto.log.error('Source bucket does not exist: %s' % self.src_name) + self.dst = self.s3.lookup(self.dst_name) + if not self.dst: + self.dst = self.s3.create_bucket(self.dst_name) + + def copy_bucket_acl(self): + if boto.config.get(self.name, 'copy_acls', True): + acl = self.src.get_xml_acl() + self.dst.set_xml_acl(acl) + + def copy_key_acl(self, src, dst): + if boto.config.get(self.name, 'copy_acls', True): + acl = src.get_xml_acl() + dst.set_xml_acl(acl) + + def copy_keys(self): + boto.log.info('src=%s' % self.src.name) + boto.log.info('dst=%s' % self.dst.name) + try: + for key in self.src: + boto.log.info('copying %d bytes from key=%s' % (key.size, key.name)) + path = os.path.join(self.wdir, key.name) + key.get_contents_to_filename(path) + new_key = self.dst.new_key(key.name) + new_key.set_contents_from_filename(path) + self.copy_key_acl(key, new_key) + os.unlink(path) + except: + boto.log.exception('Error copying key: %s' % key.name) + + def copy_log(self): + key = self.dst.new_key(self.log_file) + key.set_contents_from_filename(self.log_path) + + def main(self): + fp = StringIO.StringIO() + boto.config.dump_safe(fp) + self.notify('%s (%s) Starting' % (self.name, self.instance_id), fp.getvalue()) + if self.src and self.dst: + self.copy_keys() + if self.dst: + self.copy_log() + self.notify('%s (%s) Stopping' % (self.name, self.instance_id), + 'Copy Operation Complete') + if boto.config.getbool(self.name, 'exit_on_completion', True): + ec2 = boto.connect_ec2() + ec2.terminate_instances([self.instance_id]) + diff --git a/thirdparty/boto/pyami/helloworld.py b/thirdparty/boto/pyami/helloworld.py new file mode 100644 index 000000000..680873ce1 --- /dev/null +++ b/thirdparty/boto/pyami/helloworld.py @@ -0,0 +1,28 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +from boto.pyami.scriptbase import ScriptBase + +class HelloWorld(ScriptBase): + + def main(self): + self.log('Hello World!!!') + diff --git a/thirdparty/boto/pyami/installers/__init__.py b/thirdparty/boto/pyami/installers/__init__.py new file mode 100644 index 000000000..4dcf2f426 --- /dev/null +++ b/thirdparty/boto/pyami/installers/__init__.py @@ -0,0 +1,64 @@ +# Copyright (c) 2006,2007,2008 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +from boto.pyami.scriptbase import ScriptBase +import os + +class Installer(ScriptBase): + """ + Abstract base class for installers + """ + + def add_cron(self, name, minute, hour, mday, month, wday, who, command, env=None): + """ + Add an entry to the system crontab. + """ + raise NotImplimented() + + def add_init_script(self, file): + """ + Add this file to the init.d directory + """ + + def add_env(self, key, value): + """ + Add an environemnt variable + """ + raise NotImplimented() + + def stop(self, service_name): + """ + Stop a service. + """ + raise NotImplimented() + + def start(self, service_name): + """ + Start a service. + """ + raise NotImplimented() + + def install(self): + """ + Do whatever is necessary to "install" the package. + """ + raise NotImplimented() + diff --git a/thirdparty/boto/pyami/installers/ubuntu/__init__.py b/thirdparty/boto/pyami/installers/ubuntu/__init__.py new file mode 100644 index 000000000..60ee658e3 --- /dev/null +++ b/thirdparty/boto/pyami/installers/ubuntu/__init__.py @@ -0,0 +1,22 @@ +# Copyright (c) 2006,2007,2008 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# + diff --git a/thirdparty/boto/pyami/installers/ubuntu/apache.py b/thirdparty/boto/pyami/installers/ubuntu/apache.py new file mode 100644 index 000000000..c4ef9bf29 --- /dev/null +++ b/thirdparty/boto/pyami/installers/ubuntu/apache.py @@ -0,0 +1,36 @@ +# Copyright (c) 2008 Chris Moyer http://coredumped.org +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +from boto.pyami.installers.ubuntu.installer import Installer + +class Apache(Installer): + """ + Install apache2, mod_python, and libapache2-svn + """ + + def install(self): + self.run('apt-get -y install apache2', notify=True, exit_on_error=True) + self.run('apt-get -y install libapache2-mod-python', notify=True, exit_on_error=True) + self.run('a2enmod rewrite', notify=True, exit_on_error=True) + self.run('a2enmod ssl', notify=True, exit_on_error=True) + + def main(self): + self.install() diff --git a/thirdparty/boto/pyami/installers/ubuntu/installer.py b/thirdparty/boto/pyami/installers/ubuntu/installer.py new file mode 100644 index 000000000..160d4f391 --- /dev/null +++ b/thirdparty/boto/pyami/installers/ubuntu/installer.py @@ -0,0 +1,82 @@ +# Copyright (c) 2006,2007,2008 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +import boto.pyami.installers +import os +import boto +from pwd import getpwnam + +class Installer(boto.pyami.installers.Installer): + """ + Base Installer class for Ubuntu-based AMI's + """ + def add_cron(self, name, command, minute="*", hour="*", mday="*", month="*", wday="*", who="root", env=None): + """ + Write a file to /etc/cron.d to schedule a command + env is a dict containing environment variables you want to set in the file + name will be used as the name of the file + """ + fp = open('/etc/cron.d/%s' % name, "w") + if env: + for key, value in env.items(): + fp.write('%s=%s\n' % (key, value)) + fp.write('%s %s %s %s %s %s %s\n' % (minute, hour, mday, month, wday, who, command)) + fp.close() + + def add_init_script(self, file): + """ + Add this file to the init.d directory + """ + + def add_env(self, key, value): + """ + Add an environemnt variable + For Ubuntu, the best place is /etc/environment. Values placed here do + not need to be exported. + """ + boto.log.info('Adding env variable: %s=%s' % (key, value)) + self.run('cp /etc/environment /etc/environment.orig', notify=False, exit_on_error=False) + fp = open('/etc/environment', 'a') + fp.write('\n%s=%s' % (key, value)) + fp.close() + os.environ[key] = value + + def stop(self, service_name): + self.run('/etc/init.d/%s stop' % service_name) + + def start(self, service_name): + self.run('/etc/init.d/%s start' % service_name) + + def create_user(self, user): + """ + Create a user on the local system + """ + self.run("useradd -m %s" % user) + usr = getpwnam(user) + return usr + + + def install(self): + """ + This is the only method you need to override + """ + raise NotImplimented() + diff --git a/thirdparty/boto/pyami/installers/ubuntu/mysql.py b/thirdparty/boto/pyami/installers/ubuntu/mysql.py new file mode 100644 index 000000000..1e6640880 --- /dev/null +++ b/thirdparty/boto/pyami/installers/ubuntu/mysql.py @@ -0,0 +1,76 @@ +# Copyright (c) 2006,2007,2008 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +from boto.pyami.installers.ubuntu.installer import Installer +import os +import boto +from ConfigParser import SafeConfigParser +import subprocess +import time + +class MySQL(Installer): + + def install(self): + self.run('apt-get update') + self.run('apt-get -y install mysql-server', notify=True, exit_on_error=True) + + def set_root_password(self, password=None): + if not password: + password = boto.config.get('Pyami', 'mysql_root_password') + if password: + self.run('mysqladmin -u root password %s' % password) + + def change_data_dir(self): + fresh_install = False; + time.sleep(2) #trying to stop mysql immediately after installing it fails + self.stop('mysql') + if not os.path.exists('/mnt/mysql'): + self.run('mkdir /mnt/mysql') + fresh_install = True; + self.run('chown -R mysql:mysql /mnt/mysql') + fp = open('/etc/mysql/conf.d/use_mnt.cnf', 'w') + fp.write('# created by pyami\n') + fp.write('# use the /mnt volume for data\n') + fp.write('[mysqld]\n') + fp.write('datadir = /mnt/mysql\n') + fp.write('log_bin = /mnt/mysql/mysql-bin.log\n') + fp.close() + if fresh_install: + self.run('cp -pr /var/lib/mysql/* /mnt/mysql/') + self.run('cp -pr /var/log/mysql/* /mnt/mysql/') + self.start('mysql') + else: + #get the password ubuntu expects to use: + config_parser = SafeConfigParser() + config_parser.read('/etc/mysql/debian.cnf') + password = config_parser.get('client', 'password') + # start the mysql deamon, then mysql with the required grant statement piped into it: + self.start('mysql') + time.sleep(1) #time for mysql to start + grant_command = "echo \"GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '%s' WITH GRANT OPTION;\" | mysql" % password + self.run(grant_command) + # leave mysqld running + + def main(self): + self.install() + self.set_root_password() + self.change_data_dir() + diff --git a/thirdparty/boto/pyami/installers/ubuntu/trac.py b/thirdparty/boto/pyami/installers/ubuntu/trac.py new file mode 100644 index 000000000..c97ddd29f --- /dev/null +++ b/thirdparty/boto/pyami/installers/ubuntu/trac.py @@ -0,0 +1,137 @@ +# Copyright (c) 2008 Chris Moyer http://coredumped.org +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +from boto.pyami.installers.ubuntu.installer import Installer +import boto +import os + +class Trac(Installer): + """ + Install Trac and DAV-SVN + Sets up a Vhost pointing to [Trac]->home + Using the config parameter [Trac]->hostname + Sets up a trac environment for every directory found under [Trac]->data_dir + + [Trac] + name = My Foo Server + hostname = trac.foo.com + home = /mnt/sites/trac + data_dir = /mnt/trac + svn_dir = /mnt/subversion + server_admin = root@foo.com + sdb_auth_domain = users + # Optional + SSLCertificateFile = /mnt/ssl/foo.crt + SSLCertificateKeyFile = /mnt/ssl/foo.key + SSLCertificateChainFile = /mnt/ssl/FooCA.crt + + """ + + def install(self): + self.run('apt-get -y install trac', notify=True, exit_on_error=True) + self.run('apt-get -y install libapache2-svn', notify=True, exit_on_error=True) + self.run("a2enmod ssl") + self.run("a2enmod python") + self.run("a2enmod dav_svn") + self.run("a2enmod rewrite") + + def setup_vhost(self): + domain = boto.config.get("Trac", "hostname").strip() + if domain: + cnf = open("/etc/apache2/sites-available/%s" % domain, "w") + cnf.write("NameVirtualHost *:80\n") + if boto.config.get("Trac", "SSLCertificateFile"): + cnf.write("NameVirtualHost *:443\n\n") + cnf.write("\n") + cnf.write("\tServerAdmin %s\n" % boto.config.get("Trac", "server_admin").strip()) + cnf.write("\tServerName %s\n" % domain) + cnf.write("\tRewriteEngine On\n") + cnf.write("\tRewriteRule ^(.*)$ https://%s$1\n" % domain) + cnf.write("\n\n") + + cnf.write("\n") + else: + cnf.write("\n") + + cnf.write("\tServerAdmin %s\n" % boto.config.get("Trac", "server_admin").strip()) + cnf.write("\tServerName %s\n" % domain) + cnf.write("\tDocumentRoot %s\n" % boto.config.get("Trac", "home").strip()) + + cnf.write("\t\n" % boto.config.get("Trac", "home").strip()) + cnf.write("\t\tOptions FollowSymLinks Indexes MultiViews\n") + cnf.write("\t\tAllowOverride All\n") + cnf.write("\t\tOrder allow,deny\n") + cnf.write("\t\tallow from all\n") + cnf.write("\t\n") + + cnf.write("\t\n") + cnf.write("\t\tAuthType Basic\n") + cnf.write("\t\tAuthName \"%s\"\n" % boto.config.get("Trac", "name")) + cnf.write("\t\tRequire valid-user\n") + cnf.write("\t\tAuthBasicAuthoritative off\n") + cnf.write("\t\tAuthUserFile /dev/null\n") + cnf.write("\t\tPythonAuthenHandler marajo.web.authen_handler\n") + cnf.write("\t\tPythonOption SDBDomain %s\n" % boto.config.get("Trac", "sdb_auth_domain")) + cnf.write("\t\n") + + data_dir = boto.config.get("Trac", "data_dir") + for env in os.listdir(data_dir): + if(env[0] != "."): + cnf.write("\t\n" % env) + cnf.write("\t\tSetHandler mod_python\n") + cnf.write("\t\tPythonInterpreter main_interpreter\n") + cnf.write("\t\tPythonHandler trac.web.modpython_frontend\n") + cnf.write("\t\tPythonOption TracEnv %s/%s\n" % (data_dir, env)) + cnf.write("\t\tPythonOption TracUriRoot /trac%s\n" % env) + cnf.write("\t\n") + + svn_dir = boto.config.get("Trac", "svn_dir") + for env in os.listdir(svn_dir): + if(env[0] != "."): + cnf.write("\t\n" % env) + cnf.write("\t\tDAV svn\n") + cnf.write("\t\tSVNPath %s/%s\n" % (svn_dir, env)) + cnf.write("\t\n") + + cnf.write("\tErrorLog /var/log/apache2/error.log\n") + cnf.write("\tLogLevel warn\n") + cnf.write("\tCustomLog /var/log/apache2/access.log combined\n") + cnf.write("\tServerSignature On\n") + SSLCertificateFile = boto.config.get("Trac", "SSLCertificateFile") + if SSLCertificateFile: + cnf.write("\tSSLEngine On\n") + cnf.write("\tSSLCertificateFile %s\n" % SSLCertificateFile) + + SSLCertificateKeyFile = boto.config.get("Trac", "SSLCertificateKeyFile") + if SSLCertificateKeyFile: + cnf.write("\tSSLCertificateKeyFile %s\n" % SSLCertificateKeyFile) + + SSLCertificateChainFile = boto.config.get("Trac", "SSLCertificateChainFile") + if SSLCertificateChainFile: + cnf.write("\tSSLCertificateChainFile %s\n" % SSLCertificateChainFile) + cnf.write("\n") + cnf.close() + self.run("a2ensite %s" % domain) + self.run("/etc/init.d/apache2 force-reload") + + def main(self): + self.install() + self.setup_vhost() diff --git a/thirdparty/boto/pyami/launch_ami.py b/thirdparty/boto/pyami/launch_ami.py new file mode 100644 index 000000000..c49c2a33d --- /dev/null +++ b/thirdparty/boto/pyami/launch_ami.py @@ -0,0 +1,176 @@ +#!/usr/bin/env python +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +import getopt, sys, imp, time +import boto +from boto.utils import get_instance_userdata + +usage_string = """ +SYNOPSIS + launch_ami.py -a ami_id [-b script_bucket] [-s script_name] + [-m module] [-c class_name] [-r] + [-g group] [-k key_name] [-n num_instances] + [-w] [extra_data] + Where: + ami_id - the id of the AMI you wish to launch + module - The name of the Python module containing the class you + want to run when the instance is started. If you use this + option the Python module must already be stored on the + instance in a location that is on the Python path. + script_file - The name of a local Python module that you would like + to have copied to S3 and then run on the instance + when it is started. The specified module must be + import'able (i.e. in your local Python path). It + will then be copied to the specified bucket in S3 + (see the -b option). Once the new instance(s) + start up the script will be copied from S3 and then + run locally on the instance. + class_name - The name of the class to be instantiated within the + module or script file specified. + script_bucket - the name of the bucket in which the script will be + stored + group - the name of the security group the instance will run in + key_name - the name of the keypair to use when launching the AMI + num_instances - how many instances of the AMI to launch (default 1) + input_queue_name - Name of SQS to read input messages from + output_queue_name - Name of SQS to write output messages to + extra_data - additional name-value pairs that will be passed as + userdata to the newly launched instance. These should + be of the form "name=value" + The -r option reloads the Python module to S3 without launching + another instance. This can be useful during debugging to allow + you to test a new version of your script without shutting down + your instance and starting up another one. + The -w option tells the script to run synchronously, meaning to + wait until the instance is actually up and running. It then prints + the IP address and internal and external DNS names before exiting. +""" + +def usage(): + print usage_string + sys.exit() + +def main(): + try: + opts, args = getopt.getopt(sys.argv[1:], 'a:b:c:g:hi:k:m:n:o:rs:w', + ['ami', 'bucket', 'class', 'group', 'help', + 'inputqueue', 'keypair', 'module', + 'numinstances', 'outputqueue', + 'reload', 'script_name', 'wait']) + except: + usage() + params = {'module_name' : None, + 'script_name' : None, + 'class_name' : None, + 'script_bucket' : None, + 'group' : 'default', + 'keypair' : None, + 'ami' : None, + 'num_instances' : 1, + 'input_queue_name' : None, + 'output_queue_name' : None} + reload = None + wait = None + for o, a in opts: + if o in ('-a', '--ami'): + params['ami'] = a + if o in ('-b', '--bucket'): + params['script_bucket'] = a + if o in ('-c', '--class'): + params['class_name'] = a + if o in ('-g', '--group'): + params['group'] = a + if o in ('-h', '--help'): + usage() + if o in ('-i', '--inputqueue'): + params['input_queue_name'] = a + if o in ('-k', '--keypair'): + params['keypair'] = a + if o in ('-m', '--module'): + params['module_name'] = a + if o in ('-n', '--num_instances'): + params['num_instances'] = int(a) + if o in ('-o', '--outputqueue'): + params['output_queue_name'] = a + if o in ('-r', '--reload'): + reload = True + if o in ('-s', '--script'): + params['script_name'] = a + if o in ('-w', '--wait'): + wait = True + + # check required fields + required = ['ami'] + for pname in required: + if not params.get(pname, None): + print '%s is required' % pname + usage() + if params['script_name']: + # first copy the desired module file to S3 bucket + if reload: + print 'Reloading module %s to S3' % params['script_name'] + else: + print 'Copying module %s to S3' % params['script_name'] + l = imp.find_module(params['script_name']) + c = boto.connect_s3() + bucket = c.get_bucket(params['script_bucket']) + key = bucket.new_key(params['script_name']+'.py') + key.set_contents_from_file(l[0]) + params['script_md5'] = key.md5 + # we have everything we need, now build userdata string + l = [] + for k, v in params.items(): + if v: + l.append('%s=%s' % (k, v)) + c = boto.connect_ec2() + l.append('aws_access_key_id=%s' % c.aws_access_key_id) + l.append('aws_secret_access_key=%s' % c.aws_secret_access_key) + for kv in args: + l.append(kv) + s = '|'.join(l) + if not reload: + rs = c.get_all_images([params['ami']]) + img = rs[0] + r = img.run(user_data=s, key_name=params['keypair'], + security_groups=[params['group']], + max_count=params.get('num_instances', 1)) + print 'AMI: %s - %s (Started)' % (params['ami'], img.location) + print 'Reservation %s contains the following instances:' % r.id + for i in r.instances: + print '\t%s' % i.id + if wait: + running = False + while not running: + time.sleep(30) + [i.update() for i in r.instances] + status = [i.state for i in r.instances] + print status + if status.count('running') == len(r.instances): + running = True + for i in r.instances: + print 'Instance: %s' % i.ami_launch_index + print 'Public DNS Name: %s' % i.public_dns_name + print 'Private DNS Name: %s' % i.private_dns_name + +if __name__ == "__main__": + main() + diff --git a/thirdparty/boto/pyami/scriptbase.py b/thirdparty/boto/pyami/scriptbase.py new file mode 100644 index 000000000..89a08e0e6 --- /dev/null +++ b/thirdparty/boto/pyami/scriptbase.py @@ -0,0 +1,58 @@ +import os, sys, time, traceback +import smtplib +from boto.utils import ShellCommand, get_ts +import boto + +class ScriptBase: + + def __init__(self, config_file=None): + self.instance_id = boto.config.get('Instance', 'instance-id', 'default') + self.name = self.__class__.__name__ + self.ts = get_ts() + if config_file: + boto.config.read(config_file) + + def notify(self, subject, body=''): + to_string = boto.config.get_value('Notification', 'smtp_to', None) + if to_string: + try: + from_string = boto.config.get_value('Notification', 'smtp_from', 'boto') + msg = "From: %s\n" % from_string + msg += "To: %s\n" % to_string + msg += "Subject: %s\n\n" % subject + msg += body + smtp_host = boto.config.get_value('Notification', 'smtp_host', 'localhost') + server = smtplib.SMTP(smtp_host) + smtp_user = boto.config.get_value('Notification', 'smtp_user', '') + smtp_pass = boto.config.get_value('Notification', 'smtp_pass', '') + if smtp_user: + server.login(smtp_user, smtp_pass) + server.sendmail(from_string, to_string, msg) + server.quit() + except: + boto.log.error('notify failed') + + def mkdir(self, path): + if not os.path.isdir(path): + try: + os.mkdir(path) + except: + boto.log.error('Error creating directory: %s' % path) + + def umount(self, path): + if os.path.ismount(path): + self.run('umount %s' % path) + + def run(self, command, notify=True, exit_on_error=False): + self.last_command = ShellCommand(command) + if self.last_command.status != 0: + boto.log.error(self.last_command.output) + if notify: + self.notify('Error encountered', self.last_command.output) + if exit_on_error: + sys.exit(-1) + return self.last_command.status + + def main(self): + pass + diff --git a/thirdparty/boto/pyami/startup.py b/thirdparty/boto/pyami/startup.py new file mode 100644 index 000000000..d6f13761f --- /dev/null +++ b/thirdparty/boto/pyami/startup.py @@ -0,0 +1,59 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +import os, sys, traceback, StringIO +import boto +from boto.utils import find_class +from boto import config +from boto.pyami.scriptbase import ScriptBase +from boto.utils import find_class + +class Startup(ScriptBase): + + def run_scripts(self): + scripts = config.get('Pyami', 'scripts') + if scripts: + for script in scripts.split(','): + script = script.strip(" ") + try: + pos = script.rfind('.') + if pos > 0: + mod_name = script[0:pos] + cls_name = script[pos+1:] + cls = find_class(mod_name, cls_name) + boto.log.info('Running Script: %s' % script) + s = cls() + s.main() + else: + boto.log.warning('Trouble parsing script: %s' % script) + except Exception, e: + boto.log.exception('Problem Running Script: %s' % script) + + def main(self): + self.run_scripts() + self.notify('Startup Completed for %s' % config.get('Instance', 'instance-id')) + +if __name__ == "__main__": + if not config.has_section('loggers'): + boto.set_file_logger('startup', '/var/log/boto.log') + sys.path.append(config.get('Pyami', 'working_dir')) + su = Startup() + su.main() diff --git a/thirdparty/boto/resultset.py b/thirdparty/boto/resultset.py new file mode 100644 index 000000000..d4481c420 --- /dev/null +++ b/thirdparty/boto/resultset.py @@ -0,0 +1,98 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +class ResultSet(list): + """ + The ResultSet is used to pass results back from the Amazon services + to the client. It has an ugly but workable mechanism for parsing + the XML results from AWS. Because I don't really want any dependencies + on external libraries, I'm using the standard SAX parser that comes + with Python. The good news is that it's quite fast and efficient but + it makes some things rather difficult. + + You can pass in, as the marker_elem parameter, a list of tuples. + Each tuple contains a string as the first element which represents + the XML element that the resultset needs to be on the lookout for + and a Python class as the second element of the tuple. Each time the + specified element is found in the XML, a new instance of the class + will be created and popped onto the stack. + + """ + + def __init__(self, marker_elem=None): + list.__init__(self) + if isinstance(marker_elem, list): + self.markers = marker_elem + else: + self.markers = [] + self.index = 0 + self.marker = None + self.is_truncated = False + self.next_token = None + self.status = True + + def __iter__(self): + return self + + def next(self): + if self.index == len(self): + self.index = 0 + raise StopIteration + self.index += 1 + return self[self.index-1] + + def startElement(self, name, attrs, connection): + for t in self.markers: + if name == t[0]: + obj = t[1](connection) + self.append(obj) + return obj + return None + + def to_boolean(self, value, true_value='true'): + if value == true_value: + return True + else: + return False + + def endElement(self, name, value, connection): + if name == 'IsTruncated': + self.is_truncated = self.to_boolean(value) + elif name == 'Marker': + self.marker = value + elif name == 'Prefix': + self.prefix = value + elif name == 'return': + self.status = self.to_boolean(value) + elif name == 'StatusCode': + self.status = self.to_boolean(value, 'Success') + elif name == 'ItemName': + self.append(value) + elif name == 'NextToken': + self.next_token = value + elif name == 'BoxUsage': + try: + connection.box_usage += float(value) + except: + pass + else: + setattr(self, name, value) + diff --git a/thirdparty/boto/s3/__init__.py b/thirdparty/boto/s3/__init__.py new file mode 100644 index 000000000..be2de1d51 --- /dev/null +++ b/thirdparty/boto/s3/__init__.py @@ -0,0 +1,31 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# + +import boto + +boto.check_extensions(__name__, __path__) + +from connection import S3Connection as Connection +from key import Key +from bucket import Bucket + +__all__ = ['Connection', 'Key', 'Bucket'] diff --git a/thirdparty/boto/s3/acl.py b/thirdparty/boto/s3/acl.py new file mode 100644 index 000000000..08fb0f4fb --- /dev/null +++ b/thirdparty/boto/s3/acl.py @@ -0,0 +1,146 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +from boto.s3.user import User +import StringIO + +CannedACLStrings = ['private', 'public-read', + 'public-read-write', 'authenticated-read'] + +class Policy: + + def __init__(self, parent=None): + self.parent = parent + self.acl = None + + def startElement(self, name, attrs, connection): + if name == 'Owner': + self.owner = User(self) + return self.owner + elif name == 'AccessControlList': + self.acl = ACL(self) + return self.acl + else: + return None + + def endElement(self, name, value, connection): + if name == 'Owner': + pass + elif name == 'AccessControlList': + pass + else: + setattr(self, name, value) + + def to_xml(self): + s = '' + s += self.owner.to_xml() + s += self.acl.to_xml() + s += '' + return s + +class ACL: + + def __init__(self, policy=None): + self.policy = policy + self.grants = [] + + def add_grant(self, grant): + self.grants.append(grant) + + def add_email_grant(self, permission, email_address): + grant = Grant(permission=permission, type='AmazonCustomerByEmail', + email_address=email_address) + self.grants.append(grant) + + def add_user_grant(self, permission, user_id): + grant = Grant(permission=permission, type='CanonicalUser', id=user_id) + self.grants.append(grant) + + def startElement(self, name, attrs, connection): + if name == 'Grant': + self.grants.append(Grant(self)) + return self.grants[-1] + else: + return None + + def endElement(self, name, value, connection): + if name == 'Grant': + pass + else: + setattr(self, name, value) + + def to_xml(self): + s = '' + for grant in self.grants: + s += grant.to_xml() + s += '' + return s + +class Grant: + + NameSpace = 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' + + def __init__(self, permission=None, type=None, id=None, + display_name=None, uri=None, email_address=None): + self.permission = permission + self.id = id + self.display_name = display_name + self.uri = uri + self.email_address = email_address + self.type = type + + def startElement(self, name, attrs, connection): + if name == 'Grantee': + self.type = attrs['xsi:type'] + return None + + def endElement(self, name, value, connection): + if name == 'ID': + self.id = value + elif name == 'DisplayName': + self.display_name = value + elif name == 'URI': + self.uri = value + elif name == 'EmailAddress': + self.email_address = value + elif name == 'Grantee': + pass + elif name == 'Permission': + self.permission = value + else: + setattr(self, name, value) + + def to_xml(self): + s = '' + s += '' % (self.NameSpace, self.type) + if self.type == 'CanonicalUser': + s += '%s' % self.id + s += '%s' % self.display_name + elif self.type == 'Group': + s += '%s' % self.uri + else: + s += '%s' % self.email_address + s += '' + s += '%s' % self.permission + s += '' + return s + + diff --git a/thirdparty/boto/s3/bucket.py b/thirdparty/boto/s3/bucket.py new file mode 100644 index 000000000..a6a2dba6c --- /dev/null +++ b/thirdparty/boto/s3/bucket.py @@ -0,0 +1,435 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import boto +from boto import handler +from boto.resultset import ResultSet +from boto.s3.acl import Policy, CannedACLStrings, ACL, Grant +from boto.s3.user import User +from boto.s3.key import Key +from boto.s3.prefix import Prefix +from boto.exception import S3ResponseError, S3PermissionsError, S3CopyError +from boto.s3.bucketlistresultset import BucketListResultSet +import boto.utils +import xml.sax +import urllib + +S3Permissions = ['READ', 'WRITE', 'READ_ACP', 'WRITE_ACP', 'FULL_CONTROL'] + +class Bucket: + + BucketLoggingBody = """ + + + %s + %s + + """ + + EmptyBucketLoggingBody = """ + + """ + + LoggingGroup = 'http://acs.amazonaws.com/groups/s3/LogDelivery' + + def __init__(self, connection=None, name=None, key_class=Key): + self.name = name + self.connection = connection + self.key_class = key_class + + def __repr__(self): + return '' % self.name + + def __iter__(self): + return iter(BucketListResultSet(self)) + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'Name': + self.name = value + elif name == 'CreationDate': + self.creation_date = value + else: + setattr(self, name, value) + + def set_key_class(self, key_class): + """ + Set the Key class associated with this bucket. By default, this + would be the boto.s3.key.Key class but if you want to subclass that + for some reason this allows you to associate your new class with a + bucket so that when you call bucket.new_key() or when you get a listing + of keys in the bucket you will get an instances of your key class + rather than the default. + + @type key_class: class + @param key_class: A subclass of Key that can be more specific + """ + self.key_class = key_class + + def lookup(self, key_name): + """ + Deprecated: Please use get_key method. + + @type key_name: string + @param key_name: The name of the key to retrieve + + @rtype: L{Key} + @returns: A Key object from this bucket. + """ + return self.get_key(key_name) + + def get_key(self, key_name): + """ + Check to see if a particular key exists within the bucket. This + method uses a HEAD request to check for the existance of the key. + Returns: An instance of a Key object or None + + @type key_name: string + @param key_name: The name of the key to retrieve + + @rtype: L{Key} + @returns: A Key object from this bucket. + """ + response = self.connection.make_request('HEAD', self.name, key_name) + if response.status == 200: + body = response.read() + k = self.key_class(self) + k.metadata = boto.utils.get_aws_metadata(response.msg) + k.etag = response.getheader('etag') + k.content_type = response.getheader('content-type') + k.last_modified = response.getheader('last-modified') + k.size = int(response.getheader('content-length')) + k.name = key_name + return k + else: + # -- gross hack -- + # httplib gets confused with chunked responses to HEAD requests + # so I have to fake it out + response.chunked = 0 + body = response.read() + if response.status == 404: + return None + else: + raise S3ResponseError(response.status, response.reason, body) + + def list(self, prefix="", delimiter=""): + """ + List key objects within a bucket. This returns an instance of an + BucketListResultSet that automatically handles all of the result + paging, etc. from S3. You just need to keep iterating until + there are no more results. + Called with no arguments, this will return an iterator object across + all keys within the bucket. + + @type prefix: string + @param prefix: allows you to limit the listing to a particular + prefix. For example, if you call the method with prefix='/foo/' + then the iterator will only cycle through the keys that begin with + the string '/foo/'. + + @type delimiter: string + @param delimiter: can be used in conjunction with the prefix + to allow you to organize and browse your keys hierarchically. See: + http://docs.amazonwebservices.com/AmazonS3/2006-03-01/ + for more details. + + @rtype: L{BucketListResultSet} + @return: an instance of a BucketListResultSet that handles paging, etc + """ + return BucketListResultSet(self, prefix, delimiter) + + def get_all_keys(self, headers=None, **params): + """ + Deprecated: This is better handled now by list method. + + params can be one of: prefix, marker, max-keys, delimiter + as defined in S3 Developer's Guide, however since max-keys is not + a legal variable in Python you have to pass maxkeys and this + method will munge it (Ugh!) + + @type maxkeys: int + @param maxkeys: The maximum number of keys to retrieve + + @type prefix: string + @param prefix: The prefix of the keys you want to retrieve + + @type marker: string + @param marker: The "marker" of where you are in the result set + + @type delimiter: string + @param delimiter: "If this optional, Unicode string parameter is included with your request, then keys that contain the same string between the prefix and the first occurrence of the delimiter will be rolled up into a single result element in the CommonPrefixes collection. These rolled-up keys are not returned elsewhere in the response." + + @rtype: ResultSet + @return: The result from S3 listing the keys requested + + """ + l = [] + for k,v in params.items(): + if k == 'maxkeys': + k = 'max-keys' + if isinstance(v, unicode): + v = v.encode('utf-8') + l.append('%s=%s' % (urllib.quote(k), urllib.quote(str(v)))) + if len(l): + s = '&'.join(l) + else: + s = None + response = self.connection.make_request('GET', self.name, + headers=headers, query_args=s) + body = response.read() + boto.log.debug(body) + if response.status == 200: + rs = ResultSet([('Contents', self.key_class), + ('CommonPrefixes', Prefix)]) + h = handler.XmlHandler(rs, self) + xml.sax.parseString(body, h) + return rs + else: + raise S3ResponseError(response.status, response.reason, body) + + def new_key(self, key_name=None): + """ + Creates a new key + + @type key_name: string + @param key_name: The name of the key to create + + @rtype: L{Key} or subclass + @returns: An instance of the newly created key object + """ + return self.key_class(self, key_name) + + def generate_url(self, expires_in, method='GET', headers=None): + return self.connection.generate_url(expires_in, method, self.name, headers=headers) + + def delete_key(self, key_name): + """ + Deletes a key from the bucket. + + @type key_name: string + @param key_name: The key name to delete + """ + response = self.connection.make_request('DELETE', self.name, key_name) + body = response.read() + if response.status != 204: + raise S3ResponseError(response.status, response.reason, body) + + def copy_key(self, new_key_name, src_bucket_name, src_key_name, metadata=None): + """ + Create a new key in the bucket by copying another existing key. + + @type new_key_name: string + @param new_key_name: The name of the new key + + @type src_bucket_name: string + @param src_bucket_name: The name of the source bucket + + @type src_key_name: string + @param src_key_name: The name of the source key + + @type metadata: dict + @param metadata: Metadata to be associated with new key. + If metadata is supplied, it will replace the + metadata of the source key being copied. + If no metadata is supplied, the source key's + metadata will be copied to the new key. + + @rtype: L{Key} or subclass + @returns: An instance of the newly created key object + """ + if metadata: + headers = metadata.copy() + headers['x-amz-metadata-directive'] = 'REPLACE' + else: + headers = {'x-amz-copy-source' : '%s/%s' % (src_bucket_name, src_key_name), + 'x-amz-metadata-directive' : 'COPY'} + response = self.connection.make_request('PUT', self.name, new_key_name, + headers=headers) + body = response.read() + if response.status == 200: + key = self.new_key(new_key_name) + h = handler.XmlHandler(key, self) + xml.sax.parseString(body, h) + if hasattr(key, 'Error'): + raise S3CopyError(key.Code, key.Message, body) + return key + else: + raise S3ResponseError(response.status, response.reason, body) + + def set_canned_acl(self, acl_str, key_name=''): + assert acl_str in CannedACLStrings + response = self.connection.make_request('PUT', self.name, key_name, + headers={'x-amz-acl': acl_str}, query_args='acl') + body = response.read() + if response.status != 200: + raise S3ResponseError(response.status, response.reason, body) + + def get_xml_acl(self, key_name=''): + response = self.connection.make_request('GET', self.name, key_name, + query_args='acl') + body = response.read() + if response.status != 200: + raise S3ResponseError(response.status, response.reason, body) + return body + + def set_xml_acl(self, acl_str, key_name=''): + response = self.connection.make_request('PUT', self.name, key_name, + data=acl_str, query_args='acl') + body = response.read() + if response.status != 200: + raise S3ResponseError(response.status, response.reason, body) + + def set_acl(self, acl_or_str, key_name=''): + if isinstance(acl_or_str, Policy): + self.set_xml_acl(acl_or_str.to_xml(), key_name) + else: + self.set_canned_acl(acl_or_str, key_name) + + def get_acl(self, key_name=''): + response = self.connection.make_request('GET', self.name, key_name, + query_args='acl') + body = response.read() + if response.status == 200: + policy = Policy(self) + h = handler.XmlHandler(policy, self) + xml.sax.parseString(body, h) + return policy + else: + raise S3ResponseError(response.status, response.reason, body) + + def make_public(self, recursive=False): + self.set_canned_acl('public-read') + if recursive: + for key in self: + self.set_canned_acl('public-read', key.name) + + def add_email_grant(self, permission, email_address, recursive=False): + """ + Convenience method that provides a quick way to add an email grant to a bucket. + This method retrieves the current ACL, creates a new grant based on the parameters + passed in, adds that grant to the ACL and then PUT's the new ACL back to S3. + Inputs: + permission - The permission being granted. Should be one of: + READ|WRITE|READ_ACP|WRITE_ACP|FULL_CONTROL + See http://docs.amazonwebservices.com/AmazonS3/2006-03-01/UsingAuthAccess.html + for more details on permissions. + email_address - The email address associated with the AWS account your are granting + the permission to. + recursive - A boolean value to controls whether the command will apply the + grant to all keys within the bucket or not. The default value is False. + By passing a True value, the call will iterate through all keys in the + bucket and apply the same grant to each key. + CAUTION: If you have a lot of keys, this could take a long time! + Returns: + Nothing + """ + if permission not in S3Permissions: + raise S3PermissionsError('Unknown Permission: %s' % permission) + policy = self.get_acl() + policy.acl.add_email_grant(permission, email_address) + self.set_acl(policy) + if recursive: + for key in self: + key.add_email_grant(permission, email_address) + + def add_user_grant(self, permission, user_id, recursive=False): + """ + Convenience method that provides a quick way to add a canonical user grant to a bucket. + This method retrieves the current ACL, creates a new grant based on the parameters + passed in, adds that grant to the ACL and then PUT's the new ACL back to S3. + + @type permission: string + @param permission: The permission being granted. Should be one of: + READ|WRITE|READ_ACP|WRITE_ACP|FULL_CONTROL + See http://docs.amazonwebservices.com/AmazonS3/2006-03-01/UsingAuthAccess.html + for more details on permissions. + + @type user_id: string + @param user_id: The canonical user id associated with the AWS account your are granting + the permission to. + + @type recursive: bool + @param recursive: A boolean value that controls whether the command will apply the + grant to all keys within the bucket or not. The default value is False. + By passing a True value, the call will iterate through all keys in the + bucket and apply the same grant to each key. + CAUTION: If you have a lot of keys, this could take a long time! + """ + if permission not in S3Permissions: + raise S3PermissionsError('Unknown Permission: %s' % permission) + policy = self.get_acl() + policy.acl.add_user_grant(permission, user_id) + self.set_acl(policy) + if recursive: + for key in self: + key.add_user_grant(permission, user_id) + + def list_grants(self): + policy = self.get_acl() + return policy.acl.grants + +# def get_location(self): +# location = _XmlInterpreter( +# string_attrs={'LocationConstraint': 'location'}) +# body = self.connection.checked_request(location, self, +# 'GET', self.name, query_args='location').location +# return parse_xml_string(body, location, self) + + def enable_logging(self, target_bucket, target_prefix=''): + if isinstance(target_bucket, Bucket): + target_bucket = target_bucket.name + body = self.BucketLoggingBody % (target_bucket, target_prefix) + response = self.connection.make_request('PUT', self.name, data=body, + query_args='logging') + body = response.read() + if response.status == 200: + return True + else: + raise S3ResponseError(response.status, response.reason, body) + + def disable_logging(self): + body = self.EmptyBucketLoggingBody + response = self.connection.make_request('PUT', self.name, data=body, + query_args='logging') + body = response.read() + if response.status == 200: + return True + else: + raise S3ResponseError(response.status, response.reason, body) + + def get_logging_status(self): + response = self.connection.make_request('GET', self.name, + query_args='logging') + body = response.read() + if response.status == 200: + return body + else: + raise S3ResponseError(response.status, response.reason, body) + + def set_as_logging_target(self): + policy = self.get_acl() + g1 = Grant(permission='WRITE', type='Group', uri=self.LoggingGroup) + g2 = Grant(permission='READ_ACP', type='Group', uri=self.LoggingGroup) + policy.acl.add_grant(g1) + policy.acl.add_grant(g2) + self.set_acl(policy) diff --git a/thirdparty/boto/s3/bucketlistresultset.py b/thirdparty/boto/s3/bucketlistresultset.py new file mode 100644 index 000000000..c2e763e38 --- /dev/null +++ b/thirdparty/boto/s3/bucketlistresultset.py @@ -0,0 +1,55 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +def bucket_lister(bucket, prefix='', delimiter=''): + """ + A generator function for listing keys in a bucket. + """ + more_results = True + marker = '' + k = None + while more_results: + rs = bucket.get_all_keys(prefix=prefix, marker=marker, + delimiter=delimiter) + for k in rs: + yield k + if k: + marker = k.name + more_results= rs.is_truncated + +class BucketListResultSet: + """ + A resultset for listing keys within a bucket. Uses the bucket_lister + generator function and implements the iterator interface. This + transparently handles the results paging from S3 so even if you have + many thousands of keys within the bucket you can iterate over all + keys in a reasonably efficient manner. + """ + + def __init__(self, bucket=None, prefix='', delimiter=''): + self.bucket = bucket + self.prefix = prefix + self.delimiter = delimiter + + def __iter__(self): + return bucket_lister(self.bucket, self.prefix, self.delimiter) + + diff --git a/thirdparty/boto/s3/connection.py b/thirdparty/boto/s3/connection.py new file mode 100644 index 000000000..266276925 --- /dev/null +++ b/thirdparty/boto/s3/connection.py @@ -0,0 +1,225 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import xml.sax +import urllib, base64 +import time +import boto.utils +from boto.connection import AWSAuthConnection +from boto import handler +from boto.s3.bucket import Bucket +from boto.s3.key import Key +from boto.resultset import ResultSet +from boto.exception import S3ResponseError, S3CreateError, BotoClientError + +def assert_case_insensitive(f): + def wrapper(*args, **kwargs): + if len(args) == 3 and not args[2].islower(): + raise BotoClientError("Bucket names cannot contain upper-case " \ + "characters when using either the sub-domain or virtual " \ + "hosting calling format.") + return f(*args, **kwargs) + return wrapper + +class _CallingFormat: + def build_url_base(self, protocol, server, bucket, key=''): + url_base = '%s://' % protocol + url_base += self.build_host(server, bucket) + url_base += self.build_path_base(bucket, key) + return url_base + + def build_host(self, server, bucket): + if bucket == '': + return server + else: + return self.get_bucket_server(server, bucket) + + def build_auth_path(self, bucket, key=''): + path = '' + if bucket != '': + path = '/' + bucket + return path + '/%s' % urllib.quote_plus(key) + + def build_path_base(self, bucket, key=''): + return '/%s' % urllib.quote_plus(key) + +class SubdomainCallingFormat(_CallingFormat): + @assert_case_insensitive + def get_bucket_server(self, server, bucket): + return '%s.%s' % (bucket, server) + +class VHostCallingFormat(_CallingFormat): + @assert_case_insensitive + def get_bucket_server(self, server, bucket): + return bucket + +class OrdinaryCallingFormat(_CallingFormat): + def get_bucket_server(self, server, bucket): + return server + + def build_path_base(self, bucket, key=''): + path_base = '/' + if bucket: + path_base += "%s/" % bucket + return path_base + urllib.quote_plus(key) + +class Location: + DEFAULT = '' + EU = 'EU' + +class S3Connection(AWSAuthConnection): + + DefaultHost = 's3.amazonaws.com' + QueryString = 'Signature=%s&Expires=%d&AWSAccessKeyId=%s' + + def __init__(self, aws_access_key_id=None, aws_secret_access_key=None, + is_secure=True, port=None, proxy=None, proxy_port=None, + host=DefaultHost, debug=0, https_connection_factory=None, + calling_format=SubdomainCallingFormat()): + self.calling_format = calling_format + AWSAuthConnection.__init__(self, host, + aws_access_key_id, aws_secret_access_key, + is_secure, port, proxy, proxy_port, debug=debug, + https_connection_factory=https_connection_factory) + + def __iter__(self): + return self.get_all_buckets() + + def generate_url(self, expires_in, method, bucket='', key='', + headers=None, query_auth=True): + if not headers: + headers = {} + expires = int(time.time() + expires_in) + auth_path = self.calling_format.build_auth_path(bucket, key) + canonical_str = boto.utils.canonical_string(method, auth_path, + headers, expires) + hmac_copy = self.hmac.copy() + hmac_copy.update(canonical_str) + b64_hmac = base64.encodestring(hmac_copy.digest()).strip() + encoded_canonical = urllib.quote_plus(b64_hmac) + path = self.calling_format.build_path_base(bucket, key) + if query_auth: + query_part = '?' + self.QueryString % (encoded_canonical, expires, + self.aws_access_key_id) + else: + query_part = '' + return self.calling_format.build_url_base(self.protocol, + self.server_name, bucket, key) + query_part + + def get_all_buckets(self): + response = self.make_request('GET') + body = response.read() + if response.status > 300: + raise S3ResponseError(response.status, response.reason, body) + rs = ResultSet([('Bucket', Bucket)]) + h = handler.XmlHandler(rs, self) + xml.sax.parseString(body, h) + return rs + + def get_canonical_user_id(self): + """ + Convenience method that returns the "CanonicalUserID" of the user who's credentials + are associated with the connection. The only way to get this value is to do a GET + request on the service which returns all buckets associated with the account. As part + of that response, the canonical userid is returned. This method simply does all of + that and then returns just the user id. + Returns: + A string containing the canonical user id. + """ + rs = self.get_all_buckets() + return rs.ID + + def get_bucket(self, bucket_name): + bucket = Bucket(self, bucket_name) + rs = bucket.get_all_keys(None, maxkeys=0) + return bucket + + def lookup(self, bucket_name): + try: + bucket = self.get_bucket(bucket_name) + except: + bucket = None + return bucket + + def create_bucket(self, bucket_name, headers=None, location=Location.DEFAULT, policy=None): + """ + Creates a new located bucket. By default it's in the USA. You can pass + Location.EU to create an European bucket. + + @type bucket_name: string + @param bucket_name: The name of the new bucket + + @type headers: dict + @param headers: Additional headers to pass along with the request to AWS. + + @type location: L{Location} + @param location: The location of the new bucket + + @type policy: L{CannedACLString} + @param policy: A canned ACL policy that will be applied to the new key in S3. + + """ + if policy: + if headers: + headers['x-amz-acl'] = policy + else: + headers = {'x-amz-acl' : policy} + if location == Location.DEFAULT: + data = '' + else: + data = '' + \ + location + '' + response = self.make_request('PUT', bucket_name, headers=headers, + data=data) + body = response.read() + if response.status == 409: + raise S3CreateError(response.status, response.reason, body) + if response.status == 200: + return Bucket(self, bucket_name) + else: + raise S3ResponseError(response.status, response.reason, body) + + def delete_bucket(self, bucket): + response = self.make_request('DELETE', bucket) + body = response.read() + if response.status != 204: + raise S3ResponseError(response.status, response.reason, body) + + def make_request(self, method, bucket='', key='', headers=None, data='', + query_args=None, sender=None): + if isinstance(bucket, Bucket): + bucket = bucket.name + if isinstance(key, Key): + key = key.name + path = self.calling_format.build_path_base(bucket, key) + auth_path = self.calling_format.build_auth_path(bucket, key) + host = self.calling_format.build_host(self.server, bucket) + if query_args: + path += '?' + query_args + auth_path += '?' + query_args + return AWSAuthConnection.make_request(self, method, path, headers, + data, host, auth_path, sender) + +# def checked_request(self, method, bucket='', key='', headers=None, data='', +# query_args=None, sender=None, good_status=200): +# response = self.make_request(method, bucket, key, headers, data, +# query_args, sender) +# return check_s3_response(response, good_status) diff --git a/thirdparty/boto/s3/key.py b/thirdparty/boto/s3/key.py new file mode 100644 index 000000000..3ea0db7f0 --- /dev/null +++ b/thirdparty/boto/s3/key.py @@ -0,0 +1,728 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import urllib +import socket +import mimetypes +import md5 +import os +import rfc822 +import StringIO +import time +import base64 +import boto +import boto.utils +from boto.exception import S3ResponseError, S3DataError, BotoClientError +from boto.s3.user import User +from boto import UserAgent, config + +class Key: + + DefaultContentType = 'application/octet-stream' + + BufferSize = 8192 + + def __init__(self, bucket=None, name=None): + self.bucket = bucket + self.name = name + self.metadata = {} + self.content_type = self.DefaultContentType + self.filename = None + self.etag = None + self.last_modified = None + self.owner = None + self.storage_class = None + self.md5 = None + self.base64md5 = None + self.path = None + self.resp = None + self.mode = None + self.size = None + + def __repr__(self): + if self.bucket: + return '' % (self.bucket.name, self.name) + else: + return '' % self.name + + def __getattr__(self, name): + if name == 'key': + return self.name + else: + raise AttributeError + + def __setattr__(self, name, value): + if name == 'key': + self.__dict__['name'] = value + else: + self.__dict__[name] = value + + def __iter__(self): + return self + + def open_read(self, headers=None, query_args=None): + """ + Open this key for reading + + @type headers: dict + @param headers: Headers to pass in the web request + + @type query_args: string + @param query_args: Arguments to pass in the query string (ie, 'torrent') + """ + if self.resp == None: + self.mode = 'r' + + self.resp = self.bucket.connection.make_request('GET', self.bucket.name, self.name, headers, query_args=query_args) + if self.resp.status < 199 or self.resp.status > 299: + raise S3ResponseError(self.resp.status, self.resp.reason) + response_headers = self.resp.msg + self.metadata = boto.utils.get_aws_metadata(response_headers) + for name,value in response_headers.items(): + if name.lower() == 'content-length': + self.size = int(value) + elif name.lower() == 'etag': + self.etag = value + elif name.lower() == 'content-type': + self.content_type = value + elif name.lower() == 'last-modified': + self.last_modified = value + + def open_write(self, headers=None): + """ + Open this key for writing. + Not yet implemented + + @type headers: dict + @param headers: Headers to pass in the write request + """ + raise BotoClientError('Not Implemented') + + def open(self, mode='r', headers=None, query_args=None): + if mode == 'r': + self.mode = 'r' + self.open_read(headers=headers, query_args=query_args) + elif mode == 'w': + self.mode = 'w' + self.open_write(headers=headers) + else: + raise BotoClientError('Invalid mode: %s' % mode) + + def close(self): + if self.resp: + self.resp.read() + self.resp = None + self.mode = None + + def next(self): + """ + By providing a next method, the key object supports use as an iterator. + For example, you can now say: + + for bytes in key: + write bytes to a file or whatever + + All of the HTTP connection stuff is handled for you. + """ + self.open_read() + data = self.resp.read(self.BufferSize) + if not data: + self.close() + raise StopIteration + return data + + def read(self, size=0): + if size == 0: + size = self.BufferSize + self.open_read() + data = self.resp.read(size) + if not data: + self.close() + return data + + def copy(self, dst_bucket, dst_key, metadata=None): + """ + Copy this Key to another bucket. + + @type dst_bucket: string + @param dst_bucket: The name of the destination bucket + + @type dst_key: string + @param dst_key: The name of the destinatino key + + @type metadata: dict + @param metadata: Metadata to be associated with new key. + If metadata is supplied, it will replace the + metadata of the source key being copied. + If no metadata is supplied, the source key's + metadata will be copied to the new key. + + @rtype: L{Key} or subclass + @returns: An instance of the newly created key object + """ + dst_bucket = self.bucket.connection.lookup(dst_bucket) + return dst_bucket.copy_key(dst_key, self.bucket.name, self.name, metadata) + + def startElement(self, name, attrs, connection): + if name == 'Owner': + self.owner = User(self) + return self.owner + else: + return None + + def endElement(self, name, value, connection): + if name == 'Key': + self.name = value.encode('utf-8') + elif name == 'ETag': + self.etag = value + elif name == 'LastModified': + self.last_modified = value + elif name == 'Size': + self.size = int(value) + elif name == 'StorageClass': + self.storage_class = value + elif name == 'Owner': + pass + else: + setattr(self, name, value) + + def exists(self): + """ + Returns True if the key exists + + @rtype: bool + @return: Whether the key exists on S3 + """ + return bool(self.bucket.lookup(self.name)) + + def delete(self): + """ + Delete this key from S3 + """ + return self.bucket.delete_key(self.name) + + def get_metadata(self, name): + return self.metadata.get(name) + + def set_metadata(self, name, value): + self.metadata[name] = value + + def update_metadata(self, d): + self.metadata.update(d) + + # convenience methods for setting/getting ACL + def set_acl(self, acl_str): + if self.bucket != None: + self.bucket.set_acl(acl_str, self.name) + + def get_acl(self): + if self.bucket != None: + return self.bucket.get_acl(self.name) + + def get_xml_acl(self): + if self.bucket != None: + return self.bucket.get_xml_acl(self.name) + + def set_xml_acl(self, acl_str): + if self.bucket != None: + return self.bucket.set_xml_acl(acl_str, self.name) + + def make_public(self): + response = self.bucket.connection.make_request('PUT', self.bucket.name, self.name, + headers={'x-amz-acl': 'public-read'}, query_args='acl') + body = response.read() + if response.status != 200: + raise S3ResponseError(response.status, response.reason, body) + + def generate_url(self, expires_in, method='GET', headers=None, query_auth=True): + """ + Generate a URL to access this key. + + @type expires_in: int + @param expires_in: How long the url is valid for + + @type method: string + @param method: The method to use for retrieving the file (default is GET) + + @type headers: dict + @param headers: Any headers to pass along in the request + + @type query_auth: bool + @param query_auth: + + @rtype: string + @return: The URL to access the key + """ + return self.bucket.connection.generate_url(expires_in, method, + self.bucket.name, self.name, + headers, query_auth) + + def send_file(self, fp, headers=None, cb=None, num_cb=10): + """ + Upload a file to a key into a bucket on S3. + + @type fp: file + @param fp: The file pointer to upload + + @type headers: dict + @param headers: The headers to pass along with the PUT request + + @type cb: function + @param cb: a callback function that will be called to report + progress on the upload. The callback should accept two integer + parameters, the first representing the number of bytes that have + been successfully transmitted to S3 and the second representing + the total number of bytes that need to be transmitted. + + @type cb: int + @param num_cb: (optional) If a callback is specified with the cb parameter + this parameter determines the granularity of the callback by defining + the maximum number of times the callback will be called during the file transfer. + + """ + def sender(http_conn, method, path, data, headers): + http_conn.putrequest('PUT', path) + for key in headers: + http_conn.putheader(key, headers[key]) + http_conn.endheaders() + fp.seek(0) + save_debug = self.bucket.connection.debug + self.bucket.connection.debug = 0 + if cb: + if num_cb > 2: + cb_count = self.size / self.BufferSize / (num_cb-2) + else: + cb_count = 0 + i = total_bytes = 0 + cb(total_bytes, self.size) + l = fp.read(self.BufferSize) + while len(l) > 0: + http_conn.send(l) + if cb: + total_bytes += len(l) + i += 1 + if i == cb_count: + cb(total_bytes, self.size) + i = 0 + l = fp.read(self.BufferSize) + if cb: + cb(total_bytes, self.size) + response = http_conn.getresponse() + body = response.read() + fp.seek(0) + self.bucket.connection.debug = save_debug + if response.status == 500 or response.status == 503 or \ + response.getheader('location'): + # we'll try again + return response + elif response.status >= 200 and response.status <= 299: + self.etag = response.getheader('etag') + if self.etag != '"%s"' % self.md5: + raise S3DataError('ETag from S3 did not match computed MD5') + return response + else: + raise S3ResponseError(response.status, response.reason, body) + + if not headers: + headers = {} + else: + headers = headers.copy() + headers['User-Agent'] = UserAgent + headers['Content-MD5'] = self.base64md5 + if headers.has_key('Content-Type'): + self.content_type = headers['Content-Type'] + elif self.path: + self.content_type = mimetypes.guess_type(self.path)[0] + if self.content_type == None: + self.content_type = self.DefaultContentType + headers['Content-Type'] = self.content_type + else: + headers['Content-Type'] = self.content_type + headers['Content-Length'] = self.size + headers['Expect'] = '100-Continue' + headers = boto.utils.merge_meta(headers, self.metadata) + return self.bucket.connection.make_request('PUT', self.bucket.name, + self.name, headers, sender=sender) + + def _compute_md5(self, fp): + """ + @type fp: file + @param fp: File pointer to the file to MD5 hash + + @rtype: string + @return: MD5 Hash of the file in fp + """ + m = md5.new() + s = fp.read(self.BufferSize) + while s: + m.update(s) + s = fp.read(self.BufferSize) + self.md5 = m.hexdigest() + self.base64md5 = base64.encodestring(m.digest()) + if self.base64md5[-1] == '\n': + self.base64md5 = self.base64md5[0:-1] + self.size = fp.tell() + fp.seek(0) + + def set_contents_from_file(self, fp, headers=None, replace=True, cb=None, num_cb=10, policy=None): + """ + Store an object in S3 using the name of the Key object as the + key in S3 and the contents of the file pointed to by 'fp' as the + contents. + + @type fp: file + @param fp: the file whose contents to upload + + @type headers: dict + @param headers: additional HTTP headers that will be sent with the PUT request. + + @type replace: bool + @param replace: If this parameter is False, the method + will first check to see if an object exists in the + bucket with the same key. If it does, it won't + overwrite it. The default value is True which will + overwrite the object. + + @type cb: function + @param cb: a callback function that will be called to report + progress on the upload. The callback should accept two integer + parameters, the first representing the number of bytes that have + been successfully transmitted to S3 and the second representing + the total number of bytes that need to be transmitted. + + @type cb: int + @param num_cb: (optional) If a callback is specified with the cb parameter + this parameter determines the granularity of the callback by defining + the maximum number of times the callback will be called during the file transfer. + + @type policy: L{CannedACLString} + @param policy: A canned ACL policy that will be applied to the new key in S3. + + """ + if policy: + if headers: + headers['x-amz-acl'] = policy + else: + headers = {'x-amz-acl' : policy} + if hasattr(fp, 'name'): + self.path = fp.name + if self.bucket != None: + self._compute_md5(fp) + if self.name == None: + self.name = self.md5 + if not replace: + k = self.bucket.lookup(self.name) + if k: + return + self.send_file(fp, headers, cb, num_cb) + + def set_contents_from_filename(self, filename, headers=None, replace=True, cb=None, num_cb=10, policy=None): + """ + Store an object in S3 using the name of the Key object as the + key in S3 and the contents of the file named by 'filename'. + See set_contents_from_file method for details about the + parameters. + + @type filename: string + @param filename: The name of the file that you want to put onto S3 + + @type headers: dict + @param headers: Additional headers to pass along with the request to AWS. + + @type replace: bool + @param replace: If True, replaces the contents of the file if it already exists. + + @type cb: function + @param cb: (optional) a callback function that will be called to report + progress on the download. The callback should accept two integer + parameters, the first representing the number of bytes that have + been successfully transmitted from S3 and the second representing + the total number of bytes that need to be transmitted. + + @type cb: int + @param num_cb: (optional) If a callback is specified with the cb parameter + this parameter determines the granularity of the callback by defining + the maximum number of times the callback will be called during the file transfer. + + @type policy: L{CannedACLString} + @param policy: A canned ACL policy that will be applied to the new key in S3. + + """ + fp = open(filename, 'rb') + self.set_contents_from_file(fp, headers, replace, cb, num_cb, policy) + fp.close() + + def set_contents_from_string(self, s, headers=None, replace=True, cb=None, num_cb=10, policy=None): + """ + Store an object in S3 using the name of the Key object as the + key in S3 and the string 's' as the contents. + See set_contents_from_file method for details about the + parameters. + + @type headers: dict + @param headers: Additional headers to pass along with the request to AWS. + + @type replace: bool + @param replace: If True, replaces the contents of the file if it already exists. + + @type cb: function + @param cb: (optional) a callback function that will be called to report + progress on the download. The callback should accept two integer + parameters, the first representing the number of bytes that have + been successfully transmitted from S3 and the second representing + the total number of bytes that need to be transmitted. + + @type cb: int + @param num_cb: (optional) If a callback is specified with the cb parameter + this parameter determines the granularity of the callback by defining + the maximum number of times the callback will be called during the file transfer. + + @type policy: L{CannedACLString} + @param policy: A canned ACL policy that will be applied to the new key in S3. + + """ + fp = StringIO.StringIO(s) + self.set_contents_from_file(fp, headers, replace, cb, num_cb, policy) + fp.close() + + def get_file(self, fp, headers=None, cb=None, num_cb=10, torrent=False): + """ + Retrieves a file from an S3 Key + + @type fp: file + @param fp: File pointer to put the data into + + @type headers: string + @param: headers to send when retrieving the files + + @type cb: function + @param cb: (optional) a callback function that will be called to report + progress on the download. The callback should accept two integer + parameters, the first representing the number of bytes that have + been successfully transmitted from S3 and the second representing + the total number of bytes that need to be transmitted. + + + @type cb: int + @param num_cb: (optional) If a callback is specified with the cb parameter + this parameter determines the granularity of the callback by defining + the maximum number of times the callback will be called during the file transfer. + + @type torrent: bool + @param torrent: Flag for whether to get a torrent for the file + """ + if cb: + if num_cb > 2: + cb_count = self.size / self.BufferSize / (num_cb-2) + else: + cb_count = 0 + i = total_bytes = 0 + cb(total_bytes, self.size) + save_debug = self.bucket.connection.debug + if self.bucket.connection.debug == 1: + self.bucket.connection.debug = 0 + + if torrent: torrent = "torrent" + self.open('r', headers, query_args=torrent) + for bytes in self: + fp.write(bytes) + if cb: + total_bytes += len(bytes) + i += 1 + if i == cb_count: + cb(total_bytes, self.size) + i = 0 + if cb: + cb(total_bytes, self.size) + self.close() + self.bucket.connection.debug = save_debug + + def get_torrent_file(self, fp, headers=None, cb=None, num_cb=10): + """ + Get a torrent file (see to get_file) + + @type fp: file + @param fp: The file pointer of where to put the torrent + + @type headers: dict + @param headers: Headers to be passed + + @type cb: function + @param cb: Callback function to call on retrieved data + + @type cb: int + @param num_cb: (optional) If a callback is specified with the cb parameter + this parameter determines the granularity of the callback by defining + the maximum number of times the callback will be called during the file transfer. + + """ + return self.get_file(fp, headers, cb, num_cb, torrent=True) + + def get_contents_to_file(self, fp, headers=None, cb=None, num_cb=10, torrent=False): + """ + Retrieve an object from S3 using the name of the Key object as the + key in S3. Write the contents of the object to the file pointed + to by 'fp'. + + @type fp: File -like object + @param fp: + + @type headers: dict + @param headers: additional HTTP headers that will be sent with the GET request. + + @type cb: function + @param cb: (optional) a callback function that will be called to report + progress on the download. The callback should accept two integer + parameters, the first representing the number of bytes that have + been successfully transmitted from S3 and the second representing + the total number of bytes that need to be transmitted. + + + @type cb: int + @param num_cb: (optional) If a callback is specified with the cb parameter + this parameter determines the granularity of the callback by defining + the maximum number of times the callback will be called during the file transfer. + + @type torrent: bool + @param torrent: If True, returns the contents of a torrent file as a string. + + """ + if self.bucket != None: + self.get_file(fp, headers, cb, num_cb, torrent=torrent) + + def get_contents_to_filename(self, filename, headers=None, cb=None, num_cb=10, torrent=False): + """ + Retrieve an object from S3 using the name of the Key object as the + key in S3. Store contents of the object to a file named by 'filename'. + See get_contents_to_file method for details about the + parameters. + + @type filename: string + @param filename: The filename of where to put the file contents + + @type headers: dict + @param headers: Any additional headers to send in the request + + @type cb: function + @param cb: (optional) a callback function that will be called to report + progress on the download. The callback should accept two integer + parameters, the first representing the number of bytes that have + been successfully transmitted from S3 and the second representing + the total number of bytes that need to be transmitted. + + + @type cb: int + @param num_cb: (optional) If a callback is specified with the cb parameter + this parameter determines the granularity of the callback by defining + the maximum number of times the callback will be called during the file transfer. + + @type torrent: bool + @param torrent: If True, returns the contents of a torrent file as a string. + + """ + fp = open(filename, 'wb') + self.get_contents_to_file(fp, headers, cb, num_cb, torrent=torrent) + fp.close() + # if last_modified date was sent from s3, try to set file's timestamp + if self.last_modified != None: + try: + modified_tuple = rfc822.parsedate_tz(self.last_modified) + modified_stamp = int(rfc822.mktime_tz(modified_tuple)) + os.utime(fp.name, (modified_stamp, modified_stamp)) + except Exception, e: pass + + def get_contents_as_string(self, headers=None, cb=None, num_cb=10, torrent=False): + """ + Retrieve an object from S3 using the name of the Key object as the + key in S3. Return the contents of the object as a string. + See get_contents_to_file method for details about the + parameters. + + @type headers: dict + @param headers: Any additional headers to send in the request + + @type cb: function + @param cb: (optional) a callback function that will be called to report + progress on the download. The callback should accept two integer + parameters, the first representing the number of bytes that have + been successfully transmitted from S3 and the second representing + the total number of bytes that need to be transmitted. + + @type cb: int + @param num_cb: (optional) If a callback is specified with the cb parameter + this parameter determines the granularity of the callback by defining + the maximum number of times the callback will be called during the file transfer. + + + @type cb: int + @param num_cb: (optional) If a callback is specified with the cb parameter + this parameter determines the granularity of the callback by defining + the maximum number of times the callback will be called during the file transfer. + + @type torrent: bool + @param torrent: If True, returns the contents of a torrent file as a string. + + @rtype: string + @returns: The contents of the file as a string + """ + fp = StringIO.StringIO() + self.get_contents_to_file(fp, headers, cb, num_cb, torrent=torrent) + return fp.getvalue() + + def add_email_grant(self, permission, email_address): + """ + Convenience method that provides a quick way to add an email grant to a key. + This method retrieves the current ACL, creates a new grant based on the parameters + passed in, adds that grant to the ACL and then PUT's the new ACL back to S3. + + @type permission: string + @param permission: The permission being granted. Should be one of: + READ|WRITE|READ_ACP|WRITE_ACP|FULL_CONTROL + See http://docs.amazonwebservices.com/AmazonS3/2006-03-01/UsingAuthAccess.html + for more details on permissions. + + @type email_address: string + @param email_address: The email address associated with the AWS account your are granting + the permission to. + """ + policy = self.get_acl() + policy.acl.add_email_grant(permission, email_address) + self.set_acl(policy) + + def add_user_grant(self, permission, user_id): + """ + Convenience method that provides a quick way to add a canonical user grant to a key. + This method retrieves the current ACL, creates a new grant based on the parameters + passed in, adds that grant to the ACL and then PUT's the new ACL back to S3. + + @type permission: string + @param permission: The permission being granted. Should be one of: + READ|WRITE|READ_ACP|WRITE_ACP|FULL_CONTROL + See http://docs.amazonwebservices.com/AmazonS3/2006-03-01/UsingAuthAccess.html + for more details on permissions. + + @type user_id: string + @param user_id: The canonical user id associated with the AWS account your are granting + the permission to. + """ + policy = self.get_acl() + policy.acl.add_user_grant(permission, user_id) + self.set_acl(policy) diff --git a/thirdparty/boto/s3/prefix.py b/thirdparty/boto/s3/prefix.py new file mode 100644 index 000000000..fc0f26ab5 --- /dev/null +++ b/thirdparty/boto/s3/prefix.py @@ -0,0 +1,35 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +class Prefix: + def __init__(self, bucket=None, name=None): + self.bucket = bucket + self.name = name + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'Prefix': + self.name = value + else: + setattr(self, name, value) + diff --git a/thirdparty/boto/s3/user.py b/thirdparty/boto/s3/user.py new file mode 100644 index 000000000..f45f03813 --- /dev/null +++ b/thirdparty/boto/s3/user.py @@ -0,0 +1,49 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +class User: + def __init__(self, parent=None, id='', display_name=''): + if parent: + parent.owner = self + self.type = None + self.id = id + self.display_name = display_name + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'DisplayName': + self.display_name = value + elif name == 'ID': + self.id = value + else: + setattr(self, name, value) + + def to_xml(self, element_name='Owner'): + if self.type: + s = '<%s xsi:type="%s">' % (element_name, self.type) + else: + s = '<%s>' % element_name + s += '%s' % self.id + s += '%s' % self.display_name + s += '' % element_name + return s diff --git a/thirdparty/boto/sdb/__init__.py b/thirdparty/boto/sdb/__init__.py new file mode 100644 index 000000000..449bd162a --- /dev/null +++ b/thirdparty/boto/sdb/__init__.py @@ -0,0 +1,23 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# + + diff --git a/thirdparty/boto/sdb/connection.py b/thirdparty/boto/sdb/connection.py new file mode 100644 index 000000000..c24d2109e --- /dev/null +++ b/thirdparty/boto/sdb/connection.py @@ -0,0 +1,242 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import urllib +import xml.sax +import threading +import boto +from boto import handler +from boto.connection import AWSQueryConnection +from boto.sdb.domain import Domain +from boto.sdb.item import Item +from boto.exception import SDBResponseError +from boto.resultset import ResultSet + +class ItemThread(threading.Thread): + + def __init__(self, name, domain_name, item_names): + threading.Thread.__init__(self, name=name) + print 'starting %s with %d items' % (name, len(item_names)) + self.domain_name = domain_name + self.conn = SDBConnection() + self.item_names = item_names + self.items = [] + + def run(self): + for item_name in self.item_names: + item = self.conn.get_attributes(self.domain_name, item_name) + self.items.append(item) + +class SDBConnection(AWSQueryConnection): + + APIVersion = '2007-11-07' + SignatureVersion = '1' + ResponseError = SDBResponseError + + def __init__(self, aws_access_key_id=None, aws_secret_access_key=None, + is_secure=False, port=None, proxy=None, proxy_port=None, + proxy_user=None, proxy_pass=None, host='sdb.amazonaws.com', debug=0, + https_connection_factory=None): + AWSQueryConnection.__init__(self, aws_access_key_id, aws_secret_access_key, + is_secure, port, proxy, proxy_port, proxy_user, proxy_pass, + host, debug, https_connection_factory) + self.box_usage = 0.0 + + def build_name_value_list(self, params, attributes, replace=False): + keys = attributes.keys() + keys.sort() + i = 1 + for key in keys: + value = attributes[key] + if isinstance(value, list): + for v in value: + params['Attribute.%d.Name'%i] = key + params['Attribute.%d.Value'%i] = v + i += 1 + else: + params['Attribute.%d.Name'%i] = key + params['Attribute.%d.Value'%i] = value + if replace: + params['Attribute.%d.Replace'%i] = 'true' + i += 1 + + def build_name_list(self, params, attribute_names): + i = 1 + attribute_names.sort() + for name in attribute_names: + params['Attribute.%d.Name'%i] = name + i += 1 + + def get_usage(self): + return self.box_usage + + def print_usage(self): + print 'Total Usage: %f compute seconds' % self.box_usage + cost = self.box_usage * 0.14 + print 'Approximate Cost: $%f' % cost + + def get_domain(self, domain_name, validate=True): + """ + Returns a Domain object for a given domain_name. + If the validate parameter is True, the domain_name is validated + by performing a query (returning a max of 1 item) against the domain. + """ + domain = Domain(self, domain_name) + if validate: + self.query(domain, '', max_items=1) + return domain + + def lookup(self, domain_name): + try: + domain = self.get_domain(domain_name) + except: + domain = None + return domain + + def get_all_domains(self, max_domains=None, next_token=None): + params = {} + if max_domains: + params['MaxNumberOfDomains'] = max_domains + if next_token: + params['NextToken'] = next_token + return self.get_list('ListDomains', params, [('DomainName', Domain)]) + + def create_domain(self, domain_name): + params = {'DomainName':domain_name} + d = self.get_object('CreateDomain', params, Domain) + d.name = domain_name + return d + + def get_domain_and_name(self, domain_or_name): + if (isinstance(domain_or_name, Domain)): + return (domain_or_name, domain_or_name.name) + else: + return (self.get_domain(domain_or_name), domain_or_name) + + def delete_domain(self, domain_or_name): + domain, domain_name = self.get_domain_and_name(domain_or_name) + params = {'DomainName':domain_name} + return self.get_status('DeleteDomain', params) + + def put_attributes(self, domain_or_name, item_name, attributes, replace=True): + """ + Store attributes for a given item in a domain. + Parameters: + domain__or_name - either a domain object or the name of a domain in SimpleDB + item_name - the name of the SDB item the attributes will be + associated with + attributes - a dict containing the name/value pairs to store + as attributes + replace - a boolean value that determines whether the attribute + values passed in will replace any existing values or will + be added as additional values. Defaults to True. + Returns: + Boolean True or raises an exception + """ + domain, domain_name = self.get_domain_and_name(domain_or_name) + params = {'DomainName' : domain_name, + 'ItemName' : item_name} + self.build_name_value_list(params, attributes, replace) + return self.get_status('PutAttributes', params) + + def get_attributes(self, domain_or_name, item_name, attribute_name=None, item=None): + domain, domain_name = self.get_domain_and_name(domain_or_name) + params = {'DomainName' : domain_name, + 'ItemName' : item_name} + if attribute_name: + params['AttributeName'] = attribute_name + response = self.make_request('GetAttributes', params) + body = response.read() + if response.status == 200: + if item == None: + item = Item(domain, item_name) + h = handler.XmlHandler(item, self) + xml.sax.parseString(body, h) + return item + else: + raise SDBResponseError(response.status, response.reason, body) + + def delete_attributes(self, domain_or_name, item_name, attr_names=None): + """ + Delete attributes from a given item in a domain. + Parameters: + domain__or_name - either a domain object or the name of a domain in SimpleDB + item_name - the name of the SDB item the attributes will be + removed from + attributes - either a list containing attribute names which will cause + all values associated with that attribute name to be deleted or + a dict containing the attribute names and keys and list of values + to delete as the value + Returns: + Boolean True or raises an exception + """ + domain, domain_name = self.get_domain_and_name(domain_or_name) + params = {'DomainName':domain_name, + 'ItemName' : item_name} + if attr_names: + if isinstance(attr_names, list): + self.build_name_list(params, attr_names) + elif isinstance(attr_names, dict): + self.build_name_value_list(params, attr_names) + return self.get_status('DeleteAttributes', params) + + def query(self, domain_or_name, query='', max_items=None, next_token=None): + """ + Returns a list of item names within domain_name that match the query. + """ + domain, domain_name = self.get_domain_and_name(domain_or_name) + params = {'DomainName':domain_name, + 'QueryExpression' : query} + if max_items: + params['MaxNumberOfItems'] = max_items + if next_token: + params['NextToken'] = next_token + return self.get_object('Query', params, ResultSet) + + def threaded_query(self, domain_or_name, query='', max_items=None, next_token=None, num_threads=6): + """ + Returns a list of fully populated items that match the query provided. + + The name/value pairs for all of the matching item names are retrieved in a number of separate + threads (specified by num_threads) to achieve maximum throughput. + The ResultSet that is returned has an attribute called next_token that can be used + to retrieve additional results for the same query. + """ + domain, domain_name = self.get_domain_and_name(domain_or_name) + if max_items and num_threads > max_items: + num_threads = max_items + rs = self.query(domain_or_name, query, max_items, next_token) + threads = [] + n = len(rs) / num_threads + for i in range(0, num_threads): + if i+1 == num_threads: + thread = ItemThread('Thread-%d' % i, domain_name, rs[n*i:]) + else: + thread = ItemThread('Thread-%d' % i, domain_name, rs[n*i:n*(i+1)]) + threads.append(thread) + thread.start() + del rs[0:] + for thread in threads: + thread.join() + for item in thread.items: + rs.append(item) + return rs + diff --git a/thirdparty/boto/sdb/domain.py b/thirdparty/boto/sdb/domain.py new file mode 100644 index 000000000..9f779916a --- /dev/null +++ b/thirdparty/boto/sdb/domain.py @@ -0,0 +1,74 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Represents an SDB Domain +""" +from boto.sdb.queryresultset import QueryResultSet +from boto.sdb.item import Item + +class Domain: + + def __init__(self, connection=None, name=None): + self.connection = connection + self.name = name + + def __repr__(self): + return 'Domain:%s' % self.name + + def __iter__(self): + return iter(QueryResultSet(self)) + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'DomainName': + self.name = value + else: + setattr(self, name, value) + + def put_attributes(self, item_name, attributes, replace=True): + return self.connection.put_attributes(self, item_name, attributes, replace) + + def get_attributes(self, item_name, attribute_name=None, item=None): + return self.connection.get_attributes(self, item_name, attribute_name, item) + + def delete_attributes(self, item_name, attributes=None): + return self.connection.delete_attributes(self, item_name, attributes) + + def query(self, query='', max_items=None): + return iter(QueryResultSet(self, query, max_items)) + + def get_item(self, item_name): + item = self.get_attributes(item_name) + if item: + item.domain = self + return item + else: + return None + + def new_item(self, item_name): + return Item(self, item_name) + + def delete_item(self, item): + self.delete_attributes(item.name) + diff --git a/thirdparty/boto/sdb/item.py b/thirdparty/boto/sdb/item.py new file mode 100644 index 000000000..59bd9b957 --- /dev/null +++ b/thirdparty/boto/sdb/item.py @@ -0,0 +1,111 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Represents an SDB Item +""" + +from UserDict import DictMixin + +class Item(DictMixin): + + def __init__(self, domain, name='', active=True): + self.domain = domain + self.name = name + self._dict = None + self.active = active + self.request_id = None + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'ItemName': + self.name = value + elif name == 'Name': + self.last_key = value + elif name == 'Value': + if self._dict == None: + self._dict = {} + if self._dict.has_key(self.last_key): + if not isinstance(self._dict[self.last_key], list): + self._dict[self.last_key] = [self._dict[self.last_key]] + self._dict[self.last_key].append(value) + else: + self._dict[self.last_key] = value + elif name == 'BoxUsage': + try: + connection.box_usage += float(value) + except: + pass + elif name == 'RequestId': + self.request_id = value + else: + setattr(self, name, value) + + def load(self): + if self._dict == None: + self._dict = {} + self.domain.get_attributes(self.name, item=self) + + def save(self, replace=True): + self.domain.put_attributes(self.name, self, replace) + + def __getitem__(self, key): + if self._dict == None: + self.load() + return self._dict[key] + + def __setitem__(self, key, value): + if self._dict == None: + self.load() + if self.active: + self.domain.put_attributes(self.name, {key : value}) + self._dict[key] = value + + def __delitem__(self, key): + if self._dict == None: + self.load() + if self.active: + self.domain.delete_attributes(self.name, [key]) + del self._dict[key] + + def keys(self): + if self._dict == None: + self.load() + return self._dict.keys() + + def add_value(self, key, value): + if self.has_key(key): + if self.active: + self.domain.put_attributes(self.name, {key : value}, replace=False) + if not isinstance(self._dict[key], list): + self._dict[key] = [self._dict[key]] + self._dict[key].append(value) + else: + self[key] = value + + def delete(self): + self.domain.delete_item(self) + + + + diff --git a/thirdparty/boto/sdb/persist/__init__.py b/thirdparty/boto/sdb/persist/__init__.py new file mode 100644 index 000000000..17d588e51 --- /dev/null +++ b/thirdparty/boto/sdb/persist/__init__.py @@ -0,0 +1,83 @@ +# Copyright (c) 2006,2007,2008 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import boto +from boto.utils import find_class + +class Manager(object): + + DefaultDomainName = boto.config.get('Persist', 'default_domain', None) + + def __init__(self, domain_name=None, aws_access_key_id=None, aws_secret_access_key=None, debug=0): + self.domain_name = domain_name + self.aws_access_key_id = aws_access_key_id + self.aws_secret_access_key = aws_secret_access_key + self.domain = None + self.sdb = None + self.s3 = None + if not self.domain_name: + self.domain_name = self.DefaultDomainName + if self.domain_name: + boto.log.info('No SimpleDB domain set, using default_domain: %s' % self.domain_name) + else: + boto.log.warning('No SimpleDB domain set, persistance is disabled') + if self.domain_name: + self.sdb = boto.connect_sdb(aws_access_key_id=self.aws_access_key_id, + aws_secret_access_key=self.aws_secret_access_key, + debug=debug) + self.domain = self.sdb.lookup(self.domain_name) + if not self.domain: + self.domain = self.sdb.create_domain(self.domain_name) + + def get_s3_connection(self): + if not self.s3: + self.s3 = boto.connect_s3(self.aws_access_key_id, self.aws_secret_access_key) + return self.s3 + +def get_manager(domain_name=None, aws_access_key_id=None, aws_secret_access_key=None, debug=0): + return Manager(domain_name, aws_access_key_id, aws_secret_access_key, debug=debug) + +def set_domain(domain_name): + Manager.DefaultDomainName = domain_name + +def get_domain(): + return Manager.DefaultDomainName + +def revive_object_from_id(id, manager): + if not manager.domain: + return None + attrs = manager.domain.get_attributes(id, ['__module__', '__type__', '__lineage__']) + try: + cls = find_class(attrs['__module__'], attrs['__type__']) + return cls(id, manager=manager) + except ImportError: + return None + +def object_lister(cls, query_lister, manager): + for item in query_lister: + if cls: + yield cls(item.name) + else: + o = revive_object_from_id(item.name, manager) + if o: + yield o + + diff --git a/thirdparty/boto/sdb/persist/checker.py b/thirdparty/boto/sdb/persist/checker.py new file mode 100644 index 000000000..47f736292 --- /dev/null +++ b/thirdparty/boto/sdb/persist/checker.py @@ -0,0 +1,303 @@ +# Copyright (c) 2006,2007,2008 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +from datetime import datetime +import boto +from boto.s3.key import Key +from boto.s3.bucket import Bucket +from boto.sdb.persist import revive_object_from_id +from boto.exception import SDBPersistenceError +from boto.utils import Password + +ISO8601 = '%Y-%m-%dT%H:%M:%SZ' + +class ValueChecker: + + def check(self, value): + """ + Checks a value to see if it is of the right type. + + Should raise a TypeError exception if an in appropriate value is passed in. + """ + raise TypeError + + def from_string(self, str_value, obj): + """ + Takes a string as input and returns the type-specific value represented by that string. + + Should raise a ValueError if the value cannot be converted to the appropriate type. + """ + raise ValueError + + def to_string(self, value): + """ + Convert a value to it's string representation. + + Should raise a ValueError if the value cannot be converted to a string representation. + """ + raise ValueError + +class StringChecker(ValueChecker): + + def __init__(self, **params): + if params.has_key('maxlength'): + self.maxlength = params['maxlength'] + else: + self.maxlength = 1024 + if params.has_key('default'): + self.check(params['default']) + self.default = params['default'] + else: + self.default = '' + + def check(self, value): + if isinstance(value, str) or isinstance(value, unicode): + if len(value) > self.maxlength: + raise ValueError, 'Length of value greater than maxlength' + else: + raise TypeError, 'Expecting String, got %s' % type(value) + + def from_string(self, str_value, obj): + return str_value + + def to_string(self, value): + self.check(value) + return value + +class PasswordChecker(StringChecker): + def check(self, value): + if isinstance(value, str) or isinstance(value, unicode) or isinstance(value, Password): + if len(value) > self.maxlength: + raise ValueError, 'Length of value greater than maxlength' + else: + raise TypeError, 'Expecting String, got %s' % type(value) + +class IntegerChecker(ValueChecker): + + __sizes__ = { 'small' : (65535, 32767, -32768, 5), + 'medium' : (4294967295, 2147483647, -2147483648, 10), + 'Large' : (18446744073709551615, 9223372036854775807, -9223372036854775808, 20)} + + def __init__(self, **params): + self.size = params.get('size', 'medium') + if self.size not in self.__sizes__.keys(): + raise ValueError, 'size must be one of %s' % self.__siz8es__.keys() + self.signed = params.get('signed', True) + self.default = params.get('default', 0) + self.format_string = '%%0%dd' % self.__sizes__[self.size][-1] + + def check(self, value): + if not isinstance(value, int) and not isinstance(value, long): + raise TypeError, 'Expecting int or long, got %s' % type(value) + if self.signed: + min = self.__sizes__[self.size][2] + max = self.__sizes__[self.size][1] + else: + min = 0 + max = self.__sizes__[self.size][0] + if value > max: + raise ValueError, 'Maximum value is %d' % max + if value < min: + raise ValueError, 'Minimum value is %d' % min + + def from_string(self, str_value, obj): + val = int(str_value) + if self.signed: + val = val + self.__sizes__[self.size][2] + return val + + def to_string(self, value): + self.check(value) + if self.signed: + value += -self.__sizes__[self.size][2] + return self.format_string % value + +class BooleanChecker(ValueChecker): + + def __init__(self, **params): + if params.has_key('default'): + self.default = params['default'] + else: + self.default = False + + def check(self, value): + if not isinstance(value, bool): + raise TypeError, 'Expecting bool, got %s' % type(value) + + def from_string(self, str_value, obj): + if str_value.lower() == 'true': + return True + else: + return False + + def to_string(self, value): + self.check(value) + if value == True: + return 'true' + else: + return 'false' + +class DateTimeChecker(ValueChecker): + + def __init__(self, **params): + if params.has_key('maxlength'): + self.maxlength = params['maxlength'] + else: + self.maxlength = 1024 + if params.has_key('default'): + self.default = params['default'] + else: + self.default = datetime.now() + + def check(self, value): + if not isinstance(value, datetime): + raise TypeError, 'Expecting datetime, got %s' % type(value) + + def from_string(self, str_value, obj): + try: + return datetime.strptime(str_value, ISO8601) + except: + raise ValueError, 'Unable to convert %s to DateTime' % str_value + + def to_string(self, value): + self.check(value) + return value.strftime(ISO8601) + +class ObjectChecker(ValueChecker): + + def __init__(self, **params): + self.default = None + self.ref_class = params.get('ref_class', None) + if self.ref_class == None: + raise SDBPersistenceError('ref_class parameter is required') + + def check(self, value): + if value == None: + return + if isinstance(value, str) or isinstance(value, unicode): + # ugly little hack - sometimes I want to just stick a UUID string + # in here rather than instantiate an object. + # This does a bit of hand waving to "type check" the string + t = value.split('-') + if len(t) != 5: + raise ValueError + else: + try: + obj_lineage = value.get_lineage() + cls_lineage = self.ref_class.get_lineage() + if obj_lineage.startswith(cls_lineage): + return + raise TypeError, '%s not instance of %s' % (obj_lineage, cls_lineage) + except: + raise ValueError, '%s is not an SDBObject' % value + + def from_string(self, str_value, obj): + if not str_value: + return None + try: + return revive_object_from_id(str_value, obj._manager) + except: + raise ValueError, 'Unable to convert %s to Object' % str_value + + def to_string(self, value): + self.check(value) + if isinstance(value, str) or isinstance(value, unicode): + return value + if value == None: + return '' + else: + return value.id + +class S3KeyChecker(ValueChecker): + + def __init__(self, **params): + self.default = None + + def check(self, value): + if value == None: + return + if isinstance(value, str) or isinstance(value, unicode): + try: + bucket_name, key_name = value.split('/', 1) + except: + raise ValueError + elif not isinstance(value, Key): + raise TypeError, 'Expecting Key, got %s' % type(value) + + def from_string(self, str_value, obj): + if not str_value: + return None + if str_value == 'None': + return None + try: + bucket_name, key_name = str_value.split('/', 1) + if obj: + s3 = obj._manager.get_s3_connection() + bucket = s3.get_bucket(bucket_name) + key = bucket.get_key(key_name) + if not key: + key = bucket.new_key(key_name) + return key + except: + raise ValueError, 'Unable to convert %s to S3Key' % str_value + + def to_string(self, value): + self.check(value) + if isinstance(value, str) or isinstance(value, unicode): + return value + if value == None: + return '' + else: + return '%s/%s' % (value.bucket.name, value.name) + +class S3BucketChecker(ValueChecker): + + def __init__(self, **params): + self.default = None + + def check(self, value): + if value == None: + return + if isinstance(value, str) or isinstance(value, unicode): + return + elif not isinstance(value, Bucket): + raise TypeError, 'Expecting Bucket, got %s' % type(value) + + def from_string(self, str_value, obj): + if not str_value: + return None + if str_value == 'None': + return None + try: + if obj: + s3 = obj._manager.get_s3_connection() + bucket = s3.get_bucket(str_value) + return bucket + except: + raise ValueError, 'Unable to convert %s to S3Bucket' % str_value + + def to_string(self, value): + self.check(value) + if value == None: + return '' + else: + return '%s' % value.name + diff --git a/thirdparty/boto/sdb/persist/object.py b/thirdparty/boto/sdb/persist/object.py new file mode 100644 index 000000000..114c03421 --- /dev/null +++ b/thirdparty/boto/sdb/persist/object.py @@ -0,0 +1,196 @@ +# Copyright (c) 2006,2007,2008 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +from boto.exception import SDBPersistenceError +from boto.sdb.persist import get_manager, object_lister +from boto.sdb.persist.property import * +import uuid + +class SDBBase(type): + "Metaclass for all SDBObjects" + def __init__(cls, name, bases, dict): + super(SDBBase, cls).__init__(name, bases, dict) + # Make sure this is a subclass of SDBObject - mainly copied from django ModelBase (thanks!) + try: + if filter(lambda b: issubclass(b, SDBObject), bases): + # look for all of the Properties and set their names + for key in dict.keys(): + if isinstance(dict[key], Property): + property = dict[key] + property.set_name(key) + prop_names = [] + props = cls.properties() + for prop in props: + prop_names.append(prop.name) + setattr(cls, '_prop_names', prop_names) + except NameError: + # 'SDBObject' isn't defined yet, meaning we're looking at our own + # SDBObject class, defined below. + pass + +class SDBObject(object): + __metaclass__ = SDBBase + + _manager = get_manager() + + @classmethod + def get_lineage(cls): + l = [c.__name__ for c in cls.mro()] + l.reverse() + return '.'.join(l) + + @classmethod + def get(cls, id=None, **params): + if cls._manager.domain and id: + a = cls._manager.domain.get_attributes(id, '__type__') + if a.has_key('__type__'): + return cls(id) + else: + raise SDBPersistenceError('%s object with id=%s does not exist' % (cls.__name__, id)) + else: + rs = cls.find(**params) + try: + obj = rs.next() + except StopIteration: + raise SDBPersistenceError('%s object matching query does not exist' % cls.__name__) + try: + rs.next() + except StopIteration: + return obj + raise SDBPersistenceError('Query matched more than 1 item') + + @classmethod + def find(cls, **params): + keys = params.keys() + if len(keys) > 4: + raise SDBPersistenceError('Too many fields, max is 4') + parts = ["['__type__'='%s'] union ['__lineage__'starts-with'%s']" % (cls.__name__, cls.get_lineage())] + properties = cls.properties() + for key in keys: + found = False + for property in properties: + if property.name == key: + found = True + if isinstance(property, ScalarProperty): + checker = property.checker + parts.append("['%s' = '%s']" % (key, checker.to_string(params[key]))) + else: + raise SDBPersistenceError('%s is not a searchable field' % key) + if not found: + raise SDBPersistenceError('%s is not a valid field' % key) + query = ' intersection '.join(parts) + if cls._manager.domain: + rs = cls._manager.domain.query(query) + else: + rs = [] + return object_lister(None, rs, cls._manager) + + @classmethod + def list(cls, max_items=None): + if cls._manager.domain: + rs = cls._manager.domain.query("['__type__' = '%s']" % cls.__name__, max_items=max_items) + else: + rs = [] + return object_lister(cls, rs, cls._manager) + + @classmethod + def properties(cls): + properties = [] + while cls: + for key in cls.__dict__.keys(): + if isinstance(cls.__dict__[key], ScalarProperty): + properties.append(cls.__dict__[key]) + if len(cls.__bases__) > 0: + cls = cls.__bases__[0] + else: + cls = None + return properties + + # for backwards compatibility + find_properties = properties + + def __init__(self, id=None, manager=None): + if manager: + self._manager = manager + self.id = id + if self.id: + self._auto_update = True + if self._manager.domain: + attrs = self._manager.domain.get_attributes(self.id, '__type__') + if len(attrs.keys()) == 0: + raise SDBPersistenceError('Object %s: not found' % self.id) + else: + self.id = str(uuid.uuid4()) + self._auto_update = False + + def __setattr__(self, name, value): + if name in self._prop_names: + object.__setattr__(self, name, value) + elif name.startswith('_'): + object.__setattr__(self, name, value) + elif name == 'id': + object.__setattr__(self, name, value) + else: + self._persist_attribute(name, value) + object.__setattr__(self, name, value) + + def __getattr__(self, name): + if not name.startswith('_'): + a = self._manager.domain.get_attributes(self.id, name) + if a.has_key(name): + object.__setattr__(self, name, a[name]) + return a[name] + raise AttributeError + + def __repr__(self): + return '%s<%s>' % (self.__class__.__name__, self.id) + + def _persist_attribute(self, name, value): + if self.id: + self._manager.domain.put_attributes(self.id, {name : value}, replace=True) + + def _get_sdb_item(self): + return self._manager.domain.get_item(self.id) + + def save(self): + attrs = {'__type__' : self.__class__.__name__, + '__module__' : self.__class__.__module__, + '__lineage__' : self.get_lineage()} + for property in self.properties(): + attrs[property.name] = property.to_string(self) + if self._manager.domain: + self._manager.domain.put_attributes(self.id, attrs, replace=True) + self._auto_update = True + + def delete(self): + if self._manager.domain: + self._manager.domain.delete_attributes(self.id) + + def get_related_objects(self, ref_name, ref_cls=None): + if self._manager.domain: + query = "['%s' = '%s']" % (ref_name, self.id) + if ref_cls: + query += " intersection ['__type__'='%s']" % ref_cls.__name__ + rs = self._manager.domain.query(query) + else: + rs = [] + return object_lister(ref_cls, rs, self._manager) + diff --git a/thirdparty/boto/sdb/persist/property.py b/thirdparty/boto/sdb/persist/property.py new file mode 100644 index 000000000..d36b16010 --- /dev/null +++ b/thirdparty/boto/sdb/persist/property.py @@ -0,0 +1,354 @@ +# Copyright (c) 2006,2007,2008 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +from boto.exception import SDBPersistenceError +from boto.sdb.persist.checker import * +from boto.utils import Password + +class Property(object): + + def __init__(self, checker_class, **params): + self.name = '' + self.checker = checker_class(**params) + self.slot_name = '__' + + def set_name(self, name): + self.name = name + self.slot_name = '__' + self.name + +class ScalarProperty(Property): + + def save(self, obj): + domain = obj._manager.domain + domain.put_attributes(obj.id, {self.name : self.to_string(obj)}, replace=True) + + def to_string(self, obj): + return self.checker.to_string(getattr(obj, self.name)) + + def load(self, obj): + domain = obj._manager.domain + a = domain.get_attributes(obj.id, self.name) + # try to get the attribute value from SDB + if self.name in a: + value = self.checker.from_string(a[self.name], obj) + setattr(obj, self.slot_name, value) + # if it's not there, set the value to the default value + else: + self.__set__(obj, self.checker.default) + + def __get__(self, obj, objtype): + if obj: + try: + value = getattr(obj, self.slot_name) + except AttributeError: + if obj._auto_update: + self.load(obj) + value = getattr(obj, self.slot_name) + else: + value = self.checker.default + setattr(obj, self.slot_name, self.checker.default) + return value + + def __set__(self, obj, value): + self.checker.check(value) + try: + old_value = getattr(obj, self.slot_name) + except: + old_value = self.checker.default + setattr(obj, self.slot_name, value) + if obj._auto_update: + try: + self.save(obj) + except: + setattr(obj, self.slot_name, old_value) + raise + +class StringProperty(ScalarProperty): + + def __init__(self, **params): + ScalarProperty.__init__(self, StringChecker, **params) + +class PasswordProperty(ScalarProperty): + """ + Hashed password + """ + + def __init__(self, **params): + ScalarProperty.__init__(self, PasswordChecker, **params) + + def __set__(self, obj, value): + p = Password() + p.set(value) + ScalarProperty.__set__(self, obj, p) + + def __get__(self, obj, objtype): + return Password(ScalarProperty.__get__(self, obj, objtype)) + +class SmallPositiveIntegerProperty(ScalarProperty): + + def __init__(self, **params): + params['size'] = 'small' + params['signed'] = False + ScalarProperty.__init__(self, IntegerChecker, **params) + +class SmallIntegerProperty(ScalarProperty): + + def __init__(self, **params): + params['size'] = 'small' + params['signed'] = True + ScalarProperty.__init__(self, IntegerChecker, **params) + +class PositiveIntegerProperty(ScalarProperty): + + def __init__(self, **params): + params['size'] = 'medium' + params['signed'] = False + ScalarProperty.__init__(self, IntegerChecker, **params) + +class IntegerProperty(ScalarProperty): + + def __init__(self, **params): + params['size'] = 'medium' + params['signed'] = True + ScalarProperty.__init__(self, IntegerChecker, **params) + +class LargePositiveIntegerProperty(ScalarProperty): + + def __init__(self, **params): + params['size'] = 'large' + params['signed'] = False + ScalarProperty.__init__(self, IntegerChecker, **params) + +class LargeIntegerProperty(ScalarProperty): + + def __init__(self, **params): + params['size'] = 'large' + params['signed'] = True + ScalarProperty.__init__(self, IntegerChecker, **params) + +class BooleanProperty(ScalarProperty): + + def __init__(self, **params): + ScalarProperty.__init__(self, BooleanChecker, **params) + +class DateTimeProperty(ScalarProperty): + + def __init__(self, **params): + ScalarProperty.__init__(self, DateTimeChecker, **params) + +class ObjectProperty(ScalarProperty): + + def __init__(self, **params): + ScalarProperty.__init__(self, ObjectChecker, **params) + +class S3KeyProperty(ScalarProperty): + + def __init__(self, **params): + ScalarProperty.__init__(self, S3KeyChecker, **params) + + def __set__(self, obj, value): + self.checker.check(value) + try: + old_value = getattr(obj, self.slot_name) + except: + old_value = self.checker.default + if isinstance(value, str): + value = self.checker.from_string(value, obj) + setattr(obj, self.slot_name, value) + if obj._auto_update: + try: + self.save(obj) + except: + setattr(obj, self.slot_name, old_value) + raise + +class S3BucketProperty(ScalarProperty): + + def __init__(self, **params): + ScalarProperty.__init__(self, S3BucketChecker, **params) + + def __set__(self, obj, value): + self.checker.check(value) + try: + old_value = getattr(obj, self.slot_name) + except: + old_value = self.checker.default + if isinstance(value, str): + value = self.checker.from_string(value, obj) + setattr(obj, self.slot_name, value) + if obj._auto_update: + try: + self.save(obj) + except: + setattr(obj, self.slot_name, old_value) + raise + +class MultiValueProperty(Property): + + def __init__(self, checker_class, **params): + Property.__init__(self, checker_class, **params) + + def __get__(self, obj, objtype): + if obj: + try: + value = getattr(obj, self.slot_name) + except AttributeError: + if obj._auto_update: + self.load(obj) + value = getattr(obj, self.slot_name) + else: + value = MultiValue(self, obj, []) + setattr(obj, self.slot_name, value) + return value + + def load(self, obj): + if obj != None: + _list = [] + domain = obj._manager.domain + a = domain.get_attributes(obj.id, self.name) + if self.name in a: + lst = a[self.name] + if not isinstance(lst, list): + lst = [lst] + for value in lst: + value = self.checker.from_string(value, obj) + _list.append(value) + setattr(obj, self.slot_name, MultiValue(self, obj, _list)) + + def __set__(self, obj, value): + if not isinstance(value, list): + raise SDBPersistenceError('Value must be a list') + self._list = value + str_list = [] + for value in self._list: + str_list.append(self.checker.to_string(value)) + domain = obj._manager.domain + try: + domain.put_attributes(obj.id, {self.name : str_list}, replace=True) + except: + print 'problem setting value: %s' % value + +class StringListProperty(MultiValueProperty): + + def __init__(self, **params): + MultiValueProperty.__init__(self, StringChecker, **params) + +class SmallIntegerListProperty(MultiValueProperty): + + def __init__(self, **params): + params['size'] = 'small' + params['signed'] = True + MultiValueProperty.__init__(self, IntegerChecker, **params) + +class SmallPositiveIntegerListProperty(MultiValueProperty): + + def __init__(self, **params): + params['size'] = 'small' + params['signed'] = False + MultiValueProperty.__init__(self, IntegerChecker, **params) + +class IntegerListProperty(MultiValueProperty): + + def __init__(self, **params): + params['size'] = 'medium' + params['signed'] = True + MultiValueProperty.__init__(self, IntegerChecker, **params) + +class PositiveIntegerListProperty(MultiValueProperty): + + def __init__(self, **params): + params['size'] = 'medium' + params['signed'] = False + MultiValueProperty.__init__(self, IntegerChecker, **params) + +class LargeIntegerListProperty(MultiValueProperty): + + def __init__(self, **params): + params['size'] = 'large' + params['signed'] = True + MultiValueProperty.__init__(self, IntegerChecker, **params) + +class LargePositiveIntegerListProperty(MultiValueProperty): + + def __init__(self, **params): + params['size'] = 'large' + params['signed'] = False + MultiValueProperty.__init__(self, IntegerChecker, **params) + +class BooleanListProperty(MultiValueProperty): + + def __init__(self, **params): + MultiValueProperty.__init__(self, BooleanChecker, **params) + +class ObjectListProperty(MultiValueProperty): + + def __init__(self, **params): + MultiValueProperty.__init__(self, ObjectChecker, **params) + +class HasManyProperty(Property): + + def set_name(self, name): + self.name = name + self.slot_name = '__' + self.name + + def __get__(self, obj, objtype): + return self + + +class MultiValue: + """ + Special Multi Value for boto persistence layer to allow us to do + obj.list.append(foo) + """ + def __init__(self, property, obj, _list): + self.checker = property.checker + self.name = property.name + self.object = obj + self._list = _list + + def __repr__(self): + return repr(self._list) + + def __getitem__(self, key): + return self._list.__getitem__(key) + + def __delitem__(self, key): + item = self[key] + self._list.__delitem__(key) + domain = self.object._manager.domain + domain.delete_attributes(self.object.id, {self.name: [self.checker.to_string(item)]}) + + def __len__(self): + return len(self._list) + + def append(self, value): + self.checker.check(value) + self._list.append(value) + domain = self.object._manager.domain + domain.put_attributes(self.object.id, {self.name: self.checker.to_string(value)}, replace=False) + + def index(self, value): + for x in self._list: + if x.id == value.id: + return self._list.index(x) + + def remove(self, value): + del(self[self.index(value)]) diff --git a/thirdparty/boto/sdb/persist/test_persist.py b/thirdparty/boto/sdb/persist/test_persist.py new file mode 100644 index 000000000..3207e58a7 --- /dev/null +++ b/thirdparty/boto/sdb/persist/test_persist.py @@ -0,0 +1,138 @@ +from boto.sdb.persist.object import SDBObject +from boto.sdb.persist.property import * +from boto.sdb.persist import Manager +from datetime import datetime +import time + +# +# This will eventually be moved to the boto.tests module and become a real unit test +# but for now it will live here. It shows examples of each of the Property types in +# use and tests the basic operations. +# +class TestScalar(SDBObject): + + name = StringProperty() + description = StringProperty() + size = PositiveIntegerProperty() + offset = IntegerProperty() + foo = BooleanProperty() + date = DateTimeProperty() + file = S3KeyProperty() + +class TestRef(SDBObject): + + name = StringProperty() + ref = ObjectProperty(ref_class=TestScalar) + +class TestSubClass1(TestRef): + + answer = PositiveIntegerProperty() + +class TestSubClass2(TestScalar): + + flag = BooleanProperty() + +class TestList(SDBObject): + + names = StringListProperty() + numbers = PositiveIntegerListProperty() + bools = BooleanListProperty() + objects = ObjectListProperty(ref_class=TestScalar) + +def test1(): + s = TestScalar() + s.name = 'foo' + s.description = 'This is foo' + s.size = 42 + s.offset = -100 + s.foo = True + s.date = datetime.now() + s.save() + return s + +def test2(ref_name): + s = TestRef() + s.name = 'testref' + rs = TestScalar.find(name=ref_name) + s.ref = rs.next() + s.save() + return s + +def test3(): + s = TestScalar() + s.name = 'bar' + s.description = 'This is bar' + s.size = 24 + s.foo = False + s.date = datetime.now() + s.save() + return s + +def test4(ref1, ref2): + s = TestList() + s.names.append(ref1.name) + s.names.append(ref2.name) + s.numbers.append(ref1.size) + s.numbers.append(ref2.size) + s.bools.append(ref1.foo) + s.bools.append(ref2.foo) + s.objects.append(ref1) + s.objects.append(ref2) + s.save() + return s + +def test5(ref): + s = TestSubClass1() + s.answer = 42 + s.ref = ref + s.save() + # test out free form attribute + s.fiddlefaddle = 'this is fiddlefaddle' + s._fiddlefaddle = 'this is not fiddlefaddle' + return s + +def test6(): + s = TestSubClass2() + s.name = 'fie' + s.description = 'This is fie' + s.size = 4200 + s.offset = -820 + s.foo = False + s.date = datetime.now() + s.flag = True + s.save() + return s + +def test(domain_name): + print 'Initialize the Persistance system' + Manager.DefaultDomainName = domain_name + print 'Call test1' + s1 = test1() + # now create a new instance and read the saved data from SDB + print 'Now sleep to wait for things to converge' + time.sleep(5) + print 'Now lookup the object and compare the fields' + s2 = TestScalar(s1.id) + assert s1.name == s2.name + assert s1.description == s2.description + assert s1.size == s2.size + assert s1.offset == s2.offset + assert s1.foo == s2.foo + #assert s1.date == s2.date + print 'Call test2' + s2 = test2(s1.name) + print 'Call test3' + s3 = test3() + print 'Call test4' + s4 = test4(s1, s3) + print 'Call test5' + s6 = test6() + s5 = test5(s6) + domain = s5._manager.domain + item1 = domain.get_item(s1.id) + item2 = domain.get_item(s2.id) + item3 = domain.get_item(s3.id) + item4 = domain.get_item(s4.id) + item5 = domain.get_item(s5.id) + item6 = domain.get_item(s6.id) + return [(s1, item1), (s2, item2), (s3, item3), (s4, item4), (s5, item5), (s6, item6)] diff --git a/thirdparty/boto/sdb/queryresultset.py b/thirdparty/boto/sdb/queryresultset.py new file mode 100644 index 000000000..776a97a0d --- /dev/null +++ b/thirdparty/boto/sdb/queryresultset.py @@ -0,0 +1,50 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +from boto.sdb.item import Item + +def query_lister(domain, query='', max_items=None): + more_results = True + num_results = 0 + next_token = None + while more_results: + rs = domain.connection.query(domain.name, query, None, next_token) + for item_name in rs: + if max_items: + if num_results == max_items: + raise StopIteration + yield Item(domain, item_name) + num_results += 1 + next_token = rs.next_token + more_results = next_token != None + +class QueryResultSet: + + def __init__(self, domain=None, query='', max_items=None): + self.max_items = max_items + self.domain = domain + self.query = query + + def __iter__(self): + return query_lister(self.domain, self.query, self.max_items) + + + diff --git a/thirdparty/boto/services/__init__.py b/thirdparty/boto/services/__init__.py new file mode 100644 index 000000000..449bd162a --- /dev/null +++ b/thirdparty/boto/services/__init__.py @@ -0,0 +1,23 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# + + diff --git a/thirdparty/boto/services/bs.py b/thirdparty/boto/services/bs.py new file mode 100644 index 000000000..3176c519b --- /dev/null +++ b/thirdparty/boto/services/bs.py @@ -0,0 +1,176 @@ +#!/usr/bin/env python +# Copyright (c) 2006-2008 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +from optparse import OptionParser +from boto.services.servicedef import ServiceDef +from boto.services.message import ServiceMessage +from boto.services.submit import Submitter +from boto.services.result import ResultProcessor +import boto +import sys, os, StringIO + +class BS(object): + + Usage = "usage: %prog [options] config_file command" + + Commands = {'reset' : 'Clear input queue and output bucket', + 'submit' : 'Submit local files to the service', + 'start' : 'Start the service', + 'status' : 'Report on the status of the service buckets and queues', + 'retrieve' : 'Retrieve output generated by a batch', + 'batches' : 'List all batches stored in current output_domain'} + + def __init__(self): + self.service_name = None + self.parser = OptionParser(usage=self.Usage) + self.parser.add_option("--help-commands", action="store_true", dest="help_commands", + help="provides help on the available commands") + self.parser.add_option("-a", "--access-key", action="store", type="string", + help="your AWS Access Key") + self.parser.add_option("-s", "--secret-key", action="store", type="string", + help="your AWS Secret Access Key") + self.parser.add_option("-p", "--path", action="store", type="string", dest="path", + help="the path to local directory for submit and retrieve") + self.parser.add_option("-k", "--keypair", action="store", type="string", dest="keypair", + help="the SSH keypair used with launched instance(s)") + self.parser.add_option("-l", "--leave", action="store_true", dest="leave", + help="leave the files (don't retrieve) files during retrieve command") + self.parser.set_defaults(leave=False) + self.parser.add_option("-n", "--num-instances", action="store", type="string", dest="num_instances", + help="the number of launched instance(s)") + self.parser.set_defaults(num_instances=1) + self.parser.add_option("-i", "--ignore-dirs", action="append", type="string", dest="ignore", + help="directories that should be ignored by submit command") + self.parser.add_option("-b", "--batch-id", action="store", type="string", dest="batch", + help="batch identifier required by the retrieve command") + + def print_command_help(self): + print '\nCommands:' + for key in self.Commands.keys(): + print ' %s\t\t%s' % (key, self.Commands[key]) + + def do_reset(self): + iq = self.sd.get_obj('input_queue') + if iq: + print 'clearing out input queue' + i = 0 + m = iq.read() + while m: + i += 1 + iq.delete_message(m) + m = iq.read() + print 'deleted %d messages' % i + ob = self.sd.get_obj('output_bucket') + ib = self.sd.get_obj('input_bucket') + if ob: + if ib and ob.name == ib.name: + return + print 'delete generated files in output bucket' + i = 0 + for k in ob: + i += 1 + k.delete() + print 'deleted %d keys' % i + + def do_submit(self): + if not self.options.path: + self.parser.error('No path provided') + if not os.path.exists(self.options.path): + self.parser.error('Invalid path (%s)' % self.options.path) + s = Submitter(self.sd) + t = s.submit_path(self.options.path, None, self.options.ignore, None, + None, True, self.options.path) + print 'A total of %d files were submitted' % t[1] + print 'Batch Identifier: %s' % t[0] + + def do_start(self): + ami_id = self.sd.get('ami_id') + if not ami_id: + self.parser.error('ami_id option is required when starting the service') + ec2 = boto.connect_ec2() + if not self.sd.has_section('Credentials'): + self.sd.add_section('Credentials') + self.sd.set('Credentials', 'aws_access_key_id', ec2.aws_access_key_id) + self.sd.set('Credentials', 'aws_secret_access_key', ec2.aws_secret_access_key) + s = StringIO.StringIO() + self.sd.write(s) + rs = ec2.get_all_images([ami_id]) + img = rs[0] + r = img.run(user_data=s.getvalue(), key_name=self.options.keypair, + max_count=self.options.num_instances) + print 'Starting AMI: %s' % ami_id + print 'Reservation %s contains the following instances:' % r.id + for i in r.instances: + print '\t%s' % i.id + + def do_status(self): + iq = self.sd.get_obj('input_queue') + if iq: + print 'The input_queue (%s) contains approximately %s messages' % (iq.id, iq.count()) + ob = self.sd.get_obj('output_bucket') + ib = self.sd.get_obj('input_bucket') + if ob: + if ib and ob.name == ib.name: + return + total = 0 + for k in ob: + total += 1 + print 'The output_bucket (%s) contains %d keys' % (ob.name, total) + + def do_retrieve(self): + if not self.options.path: + self.parser.error('No path provided') + if not os.path.exists(self.options.path): + self.parser.error('Invalid path (%s)' % self.options.path) + if not self.options.batch: + self.parser.error('batch identifier is required for retrieve command') + s = ResultProcessor(self.options.batch, self.sd) + s.get_results(self.options.path, get_file=(not self.options.leave)) + + def do_batches(self): + d = self.sd.get_obj('output_domain') + if d: + print 'Available Batches:' + rs = d.query("['type'='Batch']") + for item in rs: + print ' %s' % item.name + else: + self.parser.error('No output_domain specified for service') + + def main(self): + self.options, self.args = self.parser.parse_args() + if self.options.help_commands: + self.print_command_help() + sys.exit(0) + if len(self.args) != 2: + self.parser.error("config_file and command are required") + self.config_file = self.args[0] + self.sd = ServiceDef(self.config_file) + self.command = self.args[1] + if hasattr(self, 'do_%s' % self.command): + method = getattr(self, 'do_%s' % self.command) + method() + else: + self.parser.error('command (%s) not recognized' % self.command) + +if __name__ == "__main__": + bs = BS() + bs.main() diff --git a/thirdparty/boto/services/message.py b/thirdparty/boto/services/message.py new file mode 100644 index 000000000..6bb2e58ab --- /dev/null +++ b/thirdparty/boto/services/message.py @@ -0,0 +1,59 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import boto +from boto.sqs.message import MHMessage +from boto.utils import get_ts +from socket import gethostname +import os, mimetypes, time + +class ServiceMessage(MHMessage): + + def for_key(self, key, params=None, bucket_name=None): + if params: + self.update(params) + if key.path: + t = os.path.split(key.path) + self['OriginalLocation'] = t[0] + self['OriginalFileName'] = t[1] + mime_type = mimetypes.guess_type(t[1])[0] + if mime_type == None: + mime_type = 'application/octet-stream' + self['Content-Type'] = mime_type + s = os.stat(key.path) + t = time.gmtime(s[7]) + self['FileAccessedDate'] = get_ts(t) + t = time.gmtime(s[8]) + self['FileModifiedDate'] = get_ts(t) + t = time.gmtime(s[9]) + self['FileCreateDate'] = get_ts(t) + else: + self['OriginalFileName'] = key.name + self['OriginalLocation'] = key.bucket.name + self['ContentType'] = key.content_type + self['Host'] = gethostname() + if bucket_name: + self['Bucket'] = bucket_name + else: + self['Bucket'] = key.bucket.name + self['InputKey'] = key.name + self['Size'] = key.size + diff --git a/thirdparty/boto/services/result.py b/thirdparty/boto/services/result.py new file mode 100644 index 000000000..5ef9434c8 --- /dev/null +++ b/thirdparty/boto/services/result.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import getopt, sys, os, time, mimetypes +from datetime import datetime, timedelta +from boto.services.servicedef import ServiceDef +from boto.utils import parse_ts +import boto + +class ResultProcessor: + + LogFileName = 'log.csv' + + def __init__(self, batch_name, sd, mimetype_files=None): + self.sd = sd + self.batch = batch_name + self.log_fp = None + self.num_files = 0 + self.total_time = 0 + self.min_time = timedelta.max + self.max_time = timedelta.min + self.earliest_time = datetime.max + self.latest_time = datetime.min + self.queue = self.sd.get_obj('output_queue') + self.domain = self.sd.get_obj('output_domain') + + def calculate_stats(self, msg): + start_time = parse_ts(msg['Service-Read']) + end_time = parse_ts(msg['Service-Write']) + elapsed_time = end_time - start_time + if elapsed_time > self.max_time: + self.max_time = elapsed_time + if elapsed_time < self.min_time: + self.min_time = elapsed_time + self.total_time += elapsed_time.seconds + if start_time < self.earliest_time: + self.earliest_time = start_time + if end_time > self.latest_time: + self.latest_time = end_time + + def log_message(self, msg, path): + keys = msg.keys() + keys.sort() + if not self.log_fp: + self.log_fp = open(os.path.join(path, self.LogFileName), 'w') + line = ','.join(keys) + self.log_fp.write(line+'\n') + values = [] + for key in keys: + value = msg[key] + if value.find(',') > 0: + value = '"%s"' % value + values.append(value) + line = ','.join(values) + self.log_fp.write(line+'\n') + + def process_record(self, record, path, get_file=True): + self.log_message(record, path) + self.calculate_stats(record) + outputs = record['OutputKey'].split(',') + if record.has_key('OutputBucket'): + bucket = boto.lookup('s3', record['OutputBucket']) + else: + bucket = boto.lookup('s3', record['Bucket']) + for output in outputs: + if get_file: + key_name, type = output.split(';') + if type: + mimetype = type.split('=')[1] + key = bucket.lookup(key_name) + file_name = os.path.join(path, key_name) + print 'retrieving file: %s to %s' % (key_name, file_name) + key.get_contents_to_filename(file_name) + self.num_files += 1 + + def get_results_from_queue(self, path, get_file=True, delete_msg=True): + m = self.queue.read() + while m: + if m['Batch'] == self.batch: + self.process_record(m, path, get_file) + if delete_msg: + self.queue.delete_message(m) + m = self.queue.read() + + def get_results_from_domain(self, path, get_file=True): + rs = self.domain.query("['Batch'='%s']" % self.batch) + for item in rs: + self.process_record(item, path, get_file) + + def get_results_from_bucket(self, path): + bucket = self.sd.get_obj('output_bucket') + if bucket: + print 'No output queue or domain, just retrieving files from output_bucket' + for key in bucket: + file_name = os.path.join(path, key_name) + print 'retrieving file: %s to %s' % (key_name, file_name) + key.get_contents_to_filename(file_name) + self.num_files + 1 + + def get_results(self, path, get_file=True, delete_msg=True): + if not os.path.isdir(path): + os.mkdir(path) + if self.queue: + self.get_results_from_queue(path, get_file) + elif self.domain: + self.get_results_from_domain(path, get_file) + else: + self.get_results_from_bucket(path) + if self.log_fp: + self.log_fp.close() + print '%d results successfully retrieved.' % self.num_files + if self.num_files > 0: + self.avg_time = float(self.total_time)/self.num_files + print 'Minimum Processing Time: %d' % self.min_time.seconds + print 'Maximum Processing Time: %d' % self.max_time.seconds + print 'Average Processing Time: %f' % self.avg_time + self.elapsed_time = self.latest_time-self.earliest_time + print 'Elapsed Time: %d' % self.elapsed_time.seconds + tput = 1.0 / ((self.elapsed_time.seconds/60.0) / self.num_files) + print 'Throughput: %f transactions / minute' % tput + diff --git a/thirdparty/boto/services/service.py b/thirdparty/boto/services/service.py new file mode 100644 index 000000000..c35fa26d5 --- /dev/null +++ b/thirdparty/boto/services/service.py @@ -0,0 +1,165 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import boto +from boto.services.message import ServiceMessage +from boto.services.servicedef import ServiceDef +from boto.pyami.scriptbase import ScriptBase +from boto.exception import S3ResponseError +from boto.utils import get_ts +import StringIO +import time +import os +import sys, traceback +import md5 +import mimetypes + +class Service(ScriptBase): + + # Time required to process a transaction + ProcessingTime = 60 + + def __init__(self, config_file=None, mimetype_files=None): + ScriptBase.__init__(self, config_file) + self.name = self.__class__.__name__ + self.working_dir = boto.config.get('Pyami', 'working_dir') + self.sd = ServiceDef(config_file) + self.retry_count = self.sd.getint('retry_count', 5) + self.loop_delay = self.sd.getint('loop_delay', 30) + self.processing_time = self.sd.getint('processing_time', 60) + self.input_queue = self.sd.get_obj('input_queue') + self.output_queue = self.sd.get_obj('output_queue') + self.output_domain = self.sd.get_obj('output_domain') + if mimetype_files: + mimetypes.init(mimetype_files) + + def split_key(key): + if key.find(';') < 0: + t = (key, '') + else: + key, type = key.split(';') + label, mtype = type.split('=') + t = (key, mtype) + return t + + def read_message(self): + boto.log.info('read_message') + message = self.input_queue.read(self.processing_time) + if message: + boto.log.info(message.get_body()) + key = 'Service-Read' + message[key] = get_ts() + return message + + # retrieve the source file from S3 + def get_file(self, message): + bucket_name = message['Bucket'] + key_name = message['InputKey'] + file_name = os.path.join(self.working_dir, message.get('OriginalFileName', 'in_file')) + boto.log.info('get_file: %s/%s to %s' % (bucket_name, key_name, file_name)) + bucket = boto.lookup('s3', bucket_name) + key = bucket.new_key(key_name) + key.get_contents_to_filename(os.path.join(self.working_dir, file_name)) + return file_name + + # process source file, return list of output files + def process_file(self, in_file_name, msg): + return [] + + # store result file in S3 + def put_file(self, bucket_name, file_path, key_name=None): + boto.log.info('putting file %s as %s.%s' % (file_path, bucket_name, key_name)) + bucket = boto.lookup('s3', bucket_name) + key = bucket.new_key(key_name) + key.set_contents_from_filename(file_path) + return key + + def save_results(self, results, input_message, output_message): + output_keys = [] + for file, type in results: + if input_message.has_key('OutputBucket'): + output_bucket = input_message['OutputBucket'] + else: + output_bucket = input_message['Bucket'] + key_name = os.path.split(file)[1] + key = self.put_file(output_bucket, file, key_name) + output_keys.append('%s;type=%s' % (key.name, type)) + output_message['OutputKey'] = ','.join(output_keys) + + # write message to each output queue + def write_message(self, message): + message['Service-Write'] = get_ts() + message['Server'] = self.name + if os.environ.has_key('HOSTNAME'): + message['Host'] = os.environ['HOSTNAME'] + else: + message['Host'] = 'unknown' + message['Instance-ID'] = self.instance_id + if self.output_queue: + boto.log.info('Writing message to SQS queue: %s' % self.output_queue.id) + self.output_queue.write(message) + if self.output_domain: + boto.log.info('Writing message to SDB domain: %s' % self.output_domain.name) + item_name = '/'.join([message['Service-Write'], message['Bucket'], message['InputKey']]) + self.output_domain.put_attributes(item_name, message) + + # delete message from input queue + def delete_message(self, message): + boto.log.info('deleting message from %s' % self.input_queue.id) + self.input_queue.delete_message(message) + + # to clean up any files, etc. after each iteration + def cleanup(self): + pass + + def shutdown(self): + on_completion = self.sd.get('on_completion', 'shutdown') + if on_completion == 'shutdown': + if self.instance_id: + time.sleep(60) + c = boto.connect_ec2() + c.terminate_instances([self.instance_id]) + + def main(self, notify=False): + self.notify('Service: %s Starting' % self.name) + empty_reads = 0 + while self.retry_count < 0 or empty_reads < self.retry_count: + try: + input_message = self.read_message() + if input_message: + empty_reads = 0 + output_message = ServiceMessage(None, input_message.get_body()) + input_file = self.get_file(input_message) + results = self.process_file(input_file, output_message) + self.save_results(results, input_message, output_message) + self.write_message(output_message) + self.delete_message(input_message) + self.cleanup() + else: + empty_reads += 1 + time.sleep(self.loop_delay) + except Exception, e: + boto.log.exception('Service Failed') + empty_reads += 1 + self.create_connections() + self.notify('Service: %s Shutting Down' % self.name) + self.shutdown() + diff --git a/thirdparty/boto/services/servicedef.py b/thirdparty/boto/services/servicedef.py new file mode 100644 index 000000000..1cb01aa75 --- /dev/null +++ b/thirdparty/boto/services/servicedef.py @@ -0,0 +1,91 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +from boto.pyami.config import Config +from boto.services.message import ServiceMessage +import boto + +class ServiceDef(Config): + + def __init__(self, config_file, aws_access_key_id=None, aws_secret_access_key=None): + Config.__init__(self, config_file) + self.aws_access_key_id = aws_access_key_id + self.aws_secret_access_key = aws_secret_access_key + script = Config.get(self, 'Pyami', 'scripts') + if script: + self.name = script.split('.')[-1] + else: + self.name = None + + + def get(self, name, default=None): + return Config.get(self, self.name, name, default) + + def has_option(self, option): + return Config.has_option(self, self.name, option) + + def getint(self, option, default=0): + try: + val = Config.get(self, self.name, option) + val = int(val) + except: + val = int(default) + return val + + def getbool(self, option, default=False): + try: + val = Config.get(self, self.name, option) + if val.lower() == 'true': + val = True + else: + val = False + except: + val = default + return val + + def get_obj(self, name): + """ + Returns the AWS object associated with a given option. + + The heuristics used are a bit lame. If the option name contains + the word 'bucket' it is assumed to be an S3 bucket, if the name + contains the word 'queue' it is assumed to be an SQS queue and + if it contains the word 'domain' it is assumed to be a SimpleDB + domain. If the option name specified does not exist in the + config file or if the AWS object cannot be retrieved this + returns None. + """ + val = self.get(name) + if not val: + return None + if name.find('queue') >= 0: + obj = boto.lookup('sqs', val) + if obj: + obj.set_message_class(ServiceMessage) + elif name.find('bucket') >= 0: + obj = boto.lookup('s3', val) + elif name.find('domain') >= 0: + obj = boto.lookup('sdb', val) + else: + obj = None + return obj + + diff --git a/thirdparty/boto/services/sonofmmm.cfg b/thirdparty/boto/services/sonofmmm.cfg new file mode 100644 index 000000000..d70d3794d --- /dev/null +++ b/thirdparty/boto/services/sonofmmm.cfg @@ -0,0 +1,43 @@ +# +# Your AWS Credentials +# You only need to supply these in this file if you are not using +# the boto tools to start your service +# +#[Credentials] +#aws_access_key_id = +#aws_secret_access_key = + +# +# Fill out this section if you want emails from the service +# when it starts and stops +# +#[Notification] +#smtp_host = +#smtp_user = +#smtp_pass = +#smtp_from = +#smtp_to = + +[Pyami] +scripts = boto.services.sonofmmm.SonOfMMM + +[SonOfMMM] +# id of the AMI to be launched +ami_id = ami-dc799cb5 +# number of times service will read an empty queue before exiting +# a negative value will cause the service to run forever +retry_count = 5 +# seconds to wait after empty queue read before reading again +loop_delay = 10 +# average time it takes to process a transaction +# controls invisibility timeout of messages +processing_time = 60 +ffmpeg_args = -y -i %%s -f mov -r 29.97 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -ar 48000 -ab 19200 -s 320x240 -vcodec mpeg4 -acodec libfaac %%s +output_mimetype = video/quicktime +output_ext = .mov +input_bucket = +output_bucket = +output_domain = +output_queue = +input_queue = + diff --git a/thirdparty/boto/services/sonofmmm.py b/thirdparty/boto/services/sonofmmm.py new file mode 100644 index 000000000..5b94f902c --- /dev/null +++ b/thirdparty/boto/services/sonofmmm.py @@ -0,0 +1,80 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import boto +from boto.services.service import Service +from boto.services.message import ServiceMessage +import os, time, mimetypes + +class SonOfMMM(Service): + + def __init__(self, config_file=None): + Service.__init__(self, config_file) + self.log_file = '%s.log' % self.instance_id + self.log_path = os.path.join(self.working_dir, self.log_file) + boto.set_file_logger(self.name, self.log_path) + if self.sd.has_option('ffmpeg_args'): + self.command = '/usr/local/bin/ffmpeg ' + self.sd.get('ffmpeg_args') + else: + self.command = '/usr/local/bin/ffmpeg -y -i %s %s' + self.output_mimetype = self.sd.get('output_mimetype') + if self.sd.has_option('output_ext'): + self.output_ext = self.sd.get('output_ext') + else: + self.output_ext = mimetypes.guess_extension(self.output_mimetype) + self.output_bucket = self.sd.get_obj('output_bucket') + self.input_bucket = self.sd.get_obj('input_bucket') + # check to see if there are any messages queue + # if not, create messages for all files in input_bucket + m = self.input_queue.read(1) + if not m: + self.queue_files() + + def queue_files(self): + boto.log.info('Queueing files from %s' % self.input_bucket.name) + for key in self.input_bucket: + boto.log.info('Queueing %s' % key.name) + m = ServiceMessage() + if self.output_bucket: + d = {'OutputBucket' : self.output_bucket.name} + else: + d = None + m.for_key(key, d) + self.input_queue.write(m) + + def process_file(self, in_file_name, msg): + base, ext = os.path.splitext(in_file_name) + out_file_name = os.path.join(self.working_dir, + base+self.output_ext) + command = self.command % (in_file_name, out_file_name) + boto.log.info('running:\n%s' % command) + status = self.run(command) + if status == 0: + return [(out_file_name, self.output_mimetype)] + else: + return [] + + def shutdown(self): + if os.path.isfile(self.log_path): + if self.output_bucket: + key = self.output_bucket.new_key(self.log_file) + key.set_contents_from_filename(self.log_path) + Service.shutdown(self) diff --git a/thirdparty/boto/services/submit.py b/thirdparty/boto/services/submit.py new file mode 100644 index 000000000..dfa71f2a0 --- /dev/null +++ b/thirdparty/boto/services/submit.py @@ -0,0 +1,87 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import boto +import time, os + +class Submitter: + + def __init__(self, sd): + self.sd = sd + self.input_bucket = self.sd.get_obj('input_bucket') + self.output_bucket = self.sd.get_obj('output_bucket') + self.output_domain = self.sd.get_obj('output_domain') + self.queue = self.sd.get_obj('input_queue') + + def get_key_name(self, fullpath, prefix): + key_name = fullpath[len(prefix):] + l = key_name.split(os.sep) + return '/'.join(l) + + def write_message(self, key, metadata): + if self.queue: + m = self.queue.new_message() + m.for_key(key, metadata) + if self.output_bucket: + m['OutputBucket'] = self.output_bucket.name + self.queue.write(m) + + def submit_file(self, path, metadata=None, cb=None, num_cb=0, prefix='/'): + if not metadata: + metadata = {} + key_name = self.get_key_name(path, prefix) + k = self.input_bucket.new_key(key_name) + k.update_metadata(metadata) + k.set_contents_from_filename(path, replace=False, cb=cb, num_cb=num_cb) + self.write_message(k, metadata) + + def submit_path(self, path, tags=None, ignore_dirs=None, cb=None, num_cb=0, status=False, prefix='/'): + path = os.path.expanduser(path) + path = os.path.expandvars(path) + path = os.path.abspath(path) + total = 0 + metadata = {} + if tags: + metadata['Tags'] = tags + l = [] + for t in time.gmtime(): + l.append(str(t)) + metadata['Batch'] = '_'.join(l) + if self.output_domain: + self.output_domain.put_attributes(metadata['Batch'], {'type' : 'Batch'}) + if os.path.isdir(path): + for root, dirs, files in os.walk(path): + if ignore_dirs: + for ignore in ignore_dirs: + if ignore in dirs: + dirs.remove(ignore) + for file in files: + fullpath = os.path.join(root, file) + if status: + print 'Submitting %s' % fullpath + self.submit_file(fullpath, metadata, cb, num_cb, prefix) + total += 1 + elif os.path.isfile(path): + self.submit_file(path, metadata, cb, num_cb) + total += 1 + else: + print 'problem with %s' % path + return (metadata['Batch'], total) diff --git a/thirdparty/boto/sqs/20070501/__init__.py b/thirdparty/boto/sqs/20070501/__init__.py new file mode 100644 index 000000000..561f9cfff --- /dev/null +++ b/thirdparty/boto/sqs/20070501/__init__.py @@ -0,0 +1,27 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# + +from connection import SQSConnection as Connection +from queue import Queue +from message import Message, MHMessage + +__all__ = ['Connection', 'Queue', 'Message', 'MHMessage'] diff --git a/thirdparty/boto/sqs/20070501/attributes.py b/thirdparty/boto/sqs/20070501/attributes.py new file mode 100644 index 000000000..b13370df0 --- /dev/null +++ b/thirdparty/boto/sqs/20070501/attributes.py @@ -0,0 +1,45 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Represents an SQS Attribute Name/Value set +""" + +class Attributes(dict): + + def __init__(self): + self.current_key = None + self.current_value = None + + def startElement(self, name, attrs, connection): + pass + + def endElement(self, name, value, connection): + if name == 'AttributedValue': + self[self.current_key] = self.current_value + elif name == 'Attribute': + self.current_key = value + elif name == 'Value': + self.current_value = value + else: + setattr(self, name, value) + + diff --git a/thirdparty/boto/sqs/20070501/connection.py b/thirdparty/boto/sqs/20070501/connection.py new file mode 100644 index 000000000..7890aa2ed --- /dev/null +++ b/thirdparty/boto/sqs/20070501/connection.py @@ -0,0 +1,389 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +from boto.connection import AWSAuthConnection, AWSQueryConnection +import xml.sax +from boto.sqs.queue import Queue +from boto.sqs.message import Message +from boto.sqs.attributes import Attributes +from boto import handler +from boto.resultset import ResultSet +from boto.exception import SQSError + +PERM_ReceiveMessage = 'ReceiveMessage' +PERM_SendMessage = 'SendMessage' +PERM_FullControl = 'FullControl' + +AllPermissions = [PERM_ReceiveMessage, PERM_SendMessage, PERM_FullControl] + +class SQSQueryConnection(AWSQueryConnection): + + """ + This class uses the Query API (boo!) to SQS to access some of the + new features which have not yet been added to the REST api (yeah!). + """ + + DefaultHost = 'queue.amazonaws.com' + APIVersion = '2007-05-01' + SignatureVersion = '1' + DefaultContentType = 'text/plain' + + def __init__(self, aws_access_key_id=None, aws_secret_access_key=None, + is_secure=False, port=None, proxy=None, proxy_port=None, + host=DefaultHost, debug=0, https_connection_factory=None): + AWSQueryConnection.__init__(self, aws_access_key_id, + aws_secret_access_key, + is_secure, port, proxy, proxy_port, + host, debug, https_connection_factory) + + def get_queue_attributes(self, queue_url, attribute='All'): + params = {'Attribute' : attribute} + response = self.make_request('GetQueueAttributes', params, queue_url) + body = response.read() + if response.status == 200: + attrs = Attributes() + h = handler.XmlHandler(attrs, self) + xml.sax.parseString(body, h) + return attrs + else: + raise SQSError(response.status, response.reason, body) + + def set_queue_attribute(self, queue_url, attribute, value): + params = {'Attribute' : attribute, 'Value' : value} + response = self.make_request('SetQueueAttributes', params, queue_url) + body = response.read() + if response.status == 200: + rs = ResultSet() + h = handler.XmlHandler(rs, self) + xml.sax.parseString(body, h) + return rs.status + else: + raise SQSError(response.status, response.reason, body) + + def change_message_visibility(self, queue_url, message_id, vtimeout): + params = {'MessageId' : message_id, + 'VisibilityTimeout' : vtimeout} + response = self.make_request('ChangeMessageVisibility', params, + queue_url) + body = response.read() + if response.status == 200: + rs = ResultSet() + h = handler.XmlHandler(rs, self) + xml.sax.parseString(body, h) + return rs.status + else: + raise SQSError(response.status, response.reason, body) + + def add_grant(self, queue_url, permission, email_address=None, user_id=None): + params = {'Permission' : permission} + if user_id: + params['Grantee.ID'] = user_id + if email_address: + params['Grantee.EmailAddress'] = email_address + response = self.make_request('AddGrant', params, queue_url) + body = response.read() + if response.status == 200: + rs = ResultSet() + h = handler.XmlHandler(rs, self) + xml.sax.parseString(body, h) + return rs.status + else: + raise SQSError(response.status, response.reason, body) + + def remove_grant(self, queue_url, permission, email_address=None, user_id=None): + params = {'Permission' : permission} + if user_id: + params['Grantee.ID'] = user_id + if email_address: + params['Grantee.EmailAddress'] = email_address + response = self.make_request('RemoveGrant', params, queue_url) + body = response.read() + if response.status == 200: + rs = ResultSet() + h = handler.XmlHandler(rs, self) + xml.sax.parseString(body, h) + return rs.status + else: + raise SQSError(response.status, response.reason, body) + + def list_grants(self, queue_url, permission=None, email_address=None, user_id=None): + params = {} + if user_id: + params['Grantee.ID'] = user_id + if email_address: + params['Grantee.EmailAddress'] = email_address + if permission: + params['Permission'] = permission + response = self.make_request('ListGrants', params, queue_url) + body = response.read() + if response.status == 200: + return body + else: + raise SQSError(response.status, response.reason, body) + + def receive_message(self, queue_url, number_messages=1, + visibility_timeout=None, message_class=Message): + """ + This provides the same functionality as the read and get_messages methods + of the queue object. The only reason this is included here is that there is + currently a bug in SQS that makes it impossible to read a message from a queue + owned by someone else (even if you have been granted appropriate permissions) + via the REST interface. As it turns out, I need to be able to do this so until + the REST interface gets fixed this is the workaround. + """ + params = {'NumberOfMessages' : number_messages} + if visibility_timeout: + params['VisibilityTimeout'] = visibility_timeout + response = self.make_request('ReceiveMessage', params, queue_url) + body = response.read() + if response.status == 200: + rs = ResultSet([('Message', message_class)]) + h = handler.XmlHandler(rs, queue_url) + xml.sax.parseString(body, h) + if len(rs) == 1: + return rs[0] + else: + return rs + else: + raise SQSError(response.status, response.reason, body) + + def delete_message(self, queue_url, message_id): + """ + Because we have to use the Query interface to read messages from queues that + we don't own, we also have to provide a way to delete those messages via Query. + """ + params = {'MessageId' : message_id} + response = self.make_request('DeleteMessage', params, queue_url) + body = response.read() + if response.status == 200: + rs = ResultSet() + h = handler.XmlHandler(rs, self) + xml.sax.parseString(body, h) + return rs.status + else: + raise SQSError(response.status, response.reason, body) + +class SQSConnection(AWSAuthConnection): + + DefaultHost = 'queue.amazonaws.com' + APIVersion = '2007-05-01' + DefaultContentType = 'text/plain' + + def __init__(self, aws_access_key_id=None, aws_secret_access_key=None, + is_secure=False, port=None, proxy=None, proxy_port=None, + host=DefaultHost, debug=0, https_connection_factory=None): + AWSAuthConnection.__init__(self, host, + aws_access_key_id, aws_secret_access_key, + is_secure, port, proxy, proxy_port, debug, + https_connection_factory) + self.query_conn = None + + def make_request(self, method, path, headers=None, data=''): + # add auth header + if headers == None: + headers = {} + + if not headers.has_key('AWS-Version'): + headers['AWS-Version'] = self.APIVersion + + if not headers.has_key('Content-Type'): + headers['Content-Type'] = self.DefaultContentType + + return AWSAuthConnection.make_request(self, method, path, + headers, data) + + def get_query_connection(self): + if not self.query_conn: + self.query_conn = SQSQueryConnection(self.aws_access_key_id, + self.aws_secret_access_key, + self.is_secure, self.port, + self.proxy, self.proxy_port, + self.server, self.debug, + self.https_connection_factory) + return self.query_conn + + def get_all_queues(self, prefix=''): + if prefix: + path = '/?QueueNamePrefix=%s' % prefix + else: + path = '/' + response = self.make_request('GET', path) + body = response.read() + if response.status >= 300: + raise SQSError(response.status, response.reason, body) + rs = ResultSet([('QueueUrl', Queue)]) + h = handler.XmlHandler(rs, self) + xml.sax.parseString(body, h) + return rs + + def get_queue(self, queue_name): + i = 0 + rs = self.get_all_queues(queue_name) + for q in rs: + i += 1 + if i != 1: + return None + else: + return q + + def get_queue_attributes(self, queue_url, attribute='All'): + """ + Performs a GetQueueAttributes request and returns an Attributes + instance (subclass of a Dictionary) holding the requested + attribute name/value pairs. + Inputs: + queue_url - the URL of the desired SQS queue + attribute - All|ApproximateNumberOfMessages|VisibilityTimeout + Default value is "All" + Returns: + An Attribute object which is a mapping type holding the + requested name/value pairs + """ + qc = self.get_query_connection() + return qc.get_queue_attributes(queue_url, attribute) + + def set_queue_attribute(self, queue_url, attribute, value): + """ + Performs a SetQueueAttributes request. + Inputs: + queue_url - The URL of the desired SQS queue + attribute - The name of the attribute you want to set. The + only valid value at this time is: VisibilityTimeout + value - The new value for the attribute. + For VisibilityTimeout the value must be an + integer number of seconds from 0 to 86400. + Returns: + Boolean True if successful, otherwise False. + """ + qc = self.get_query_connection() + return qc.set_queue_attribute(queue_url, attribute, value) + + def change_message_visibility(self, queue_url, message_id, vtimeout): + """ + Change the VisibilityTimeout for an individual message. + Inputs: + queue_url - The URL of the desired SQS queue + message_id - The ID of the message whose timeout will be changed + vtimeout - The new VisibilityTimeout value, in seconds + Returns: + Boolean True if successful, otherwise False + Note: This functionality is also available as a method of the + Message object. + """ + qc = self.get_query_connection() + return qc.change_message_visibility(queue_url, message_id, vtimeout) + + def add_grant(self, queue_url, permission, email_address=None, user_id=None): + """ + Add a grant to a queue. + Inputs: + queue_url - The URL of the desired SQS queue + permission - The permission being granted. One of "ReceiveMessage", "SendMessage" or "FullControl" + email_address - the email address of the grantee. If email_address is supplied, user_id should be None + user_id - The ID of the grantee. If user_id is supplied, email_address should be None + Returns: + Boolean True if successful, otherwise False + """ + qc = self.get_query_connection() + return qc.add_grant(queue_url, permission, email_address, user_id) + + def remove_grant(self, queue_url, permission, email_address=None, user_id=None): + """ + Remove a grant from a queue. + Inputs: + queue_url - The URL of the desired SQS queue + permission - The permission being removed. One of "ReceiveMessage", "SendMessage" or "FullControl" + email_address - the email address of the grantee. If email_address is supplied, user_id should be None + user_id - The ID of the grantee. If user_id is supplied, email_address should be None + Returns: + Boolean True if successful, otherwise False + """ + qc = self.get_query_connection() + return qc.remove_grant(queue_url, permission, email_address, user_id) + + def list_grants(self, queue_url, permission=None, email_address=None, user_id=None): + """ + List the grants to a queue. + Inputs: + queue_url - The URL of the desired SQS queue + permission - The permission granted. One of "ReceiveMessage", "SendMessage" or "FullControl". + If supplied, only grants that allow this permission will be returned. + email_address - the email address of the grantee. If supplied, only grants related to this email + address will be returned + user_id - The ID of the grantee. If supplied, only grants related to his user_id will be returned. + Returns: + A string containing the XML Response elements describing the grants. + """ + qc = self.get_query_connection() + return qc.list_grants(queue_url, permission, email_address, user_id) + + def create_queue(self, queue_name, visibility_timeout=None): + """ + Create a new queue. + Inputs: + queue_name - The name of the new queue + visibility_timeout - (Optional) The default visibility + timeout for the new queue. + Returns: + A new Queue object representing the newly created queue. + """ + path = '/?QueueName=%s' % queue_name + if visibility_timeout: + path = path + '&DefaultVisibilityTimeout=%d' % visibility_timeout + response = self.make_request('POST', path) + body = response.read() + if response.status >= 300: + raise SQSError(response.status, response.reason, body) + q = Queue(self) + h = handler.XmlHandler(q, self) + xml.sax.parseString(body, h) + return q + + def delete_queue(self, queue, force_deletion=False): + """ + Delete an SQS Queue. + Inputs: + queue - a Queue object representing the SQS queue to be deleted. + force_deletion - (Optional) Normally, SQS will not delete a + queue that contains messages. However, if + the force_deletion argument is True, the + queue will be deleted regardless of whether + there are messages in the queue or not. + USE WITH CAUTION. This will delete all + messages in the queue as well. + Returns: + An empty ResultSet object. Not sure why, actually. It + should probably return a Boolean indicating success or + failure. + """ + method = 'DELETE' + path = queue.id + if force_deletion: + path = path + '?ForceDeletion=true' + response = self.make_request(method, path) + body = response.read() + if response.status >= 300: + raise SQSError(response.status, response.reason, body) + rs = ResultSet() + h = handler.XmlHandler(rs, self) + xml.sax.parseString(body, h) + return rs + diff --git a/thirdparty/boto/sqs/20070501/message.py b/thirdparty/boto/sqs/20070501/message.py new file mode 100644 index 000000000..0c45b31cc --- /dev/null +++ b/thirdparty/boto/sqs/20070501/message.py @@ -0,0 +1,180 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Represents an SQS Message +""" + +import base64 +import StringIO + +class RawMessage: + """ + Base class for SQS messages. RawMessage does not encode the message + in any way. Whatever you store in the body of the message is what + will be written to SQS and whatever is returned from SQS is stored + directly into the body of the message. + """ + + def __init__(self, queue=None, body=''): + self.queue = queue + self._body = '' + self.set_body(body) + self.id = None + + def __len__(self): + return len(self._body) + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'MessageBody': + self.set_body(value) + elif name == 'MessageId': + self.id = value + else: + setattr(self, name, value) + + def set_body(self, body): + """ + Set the body of the message. You should always call this method + rather than setting the attribute directly. + """ + self._body = body + + def get_body(self): + """ + Retrieve the body of the message. + """ + return self._body + + def get_body_encoded(self): + """ + This method is really a semi-private method used by the Queue.write + method when writing the contents of the message to SQS. The + RawMessage class does not encode the message in any way so this + just calls get_body(). You probably shouldn't need to call this + method in the normal course of events. + """ + return self.get_body() + + def change_visibility(self, vtimeout): + """ + Convenience function to allow you to directly change the + invisibility timeout for an individual message that has been + read from an SQS queue. This won't affect the default visibility + timeout of the queue. + """ + return self.queue.connection.change_message_visibility(self.queue.id, + self.id, + vtimeout) +class Message(RawMessage): + """ + The default Message class used for SQS queues. This class automatically + encodes/decodes the message body using Base64 encoding to avoid any + illegal characters in the message body. See: + + http://developer.amazonwebservices.com/connect/thread.jspa?messageID=49680%EC%88%90 + + for details on why this is a good idea. The encode/decode is meant to + be transparent to the end-user. + """ + + def endElement(self, name, value, connection): + if name == 'MessageBody': + # Decode the message body returned from SQS using base64 + self.set_body(base64.b64decode(value)) + elif name == 'MessageId': + self.id = value + else: + setattr(self, name, value) + + def get_body_encoded(self): + """ + Because the Message class encodes the message body in base64 + this private method used by queue.write needs to perform the + encoding. + """ + return base64.b64encode(self.get_body()) + +class MHMessage(Message): + """ + The MHMessage class provides a message that provides RFC821-like + headers like this: + + HeaderName: HeaderValue + + The encoding/decoding of this is handled automatically and after + the message body has been read, the message instance can be treated + like a mapping object, i.e. m['HeaderName'] would return 'HeaderValue'. + """ + + def __init__(self, queue=None, body='', xml_attrs=None): + self._dict = {} + Message.__init__(self, queue, body) + + def set_body(self, body): + fp = StringIO.StringIO(body) + line = fp.readline() + while line: + delim = line.find(':') + key = line[0:delim] + value = line[delim+1:].strip() + self._dict[key.strip()] = value.strip() + line = fp.readline() + + def get_body(self): + s = '' + for key,value in self._dict.items(): + s = s + '%s: %s\n' % (key, value) + return s + + def __len__(self): + return len(self.get_body()) + + def __getitem__(self, key): + if self._dict.has_key(key): + return self._dict[key] + else: + raise KeyError(key) + + def __setitem__(self, key, value): + self._dict[key] = value + + def keys(self): + return self._dict.keys() + + def values(self): + return self._dict.values() + + def items(self): + return self._dict.items() + + def has_key(self, key): + return self._dict.has_key(key) + + def update(self, d): + return self._dict.update(d) + + def get(self, key, default=None): + return self._dict.get(key, default) + diff --git a/thirdparty/boto/sqs/20070501/queue.py b/thirdparty/boto/sqs/20070501/queue.py new file mode 100644 index 000000000..b62087755 --- /dev/null +++ b/thirdparty/boto/sqs/20070501/queue.py @@ -0,0 +1,343 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Represents an SQS Queue +""" + +import xml.sax +import urlparse +from boto.exception import SQSError +from boto.handler import XmlHandler +from boto.sqs.message import Message +from boto.resultset import ResultSet + +class Queue: + + def __init__(self, connection=None, url=None, message_class=Message): + self.connection = connection + self.url = url + self.message_class = message_class + self.visibility_timeout = None + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'QueueUrl': + self.url = value + if value: + self.id = urlparse.urlparse(value)[2] + elif name == 'VisibilityTimeout': + self.visibility_timeout = int(value) + else: + setattr(self, name, value) + + def set_message_class(self, message_class): + """ + Set the message class that should be used when instantiating messages read + from the queue. By default, the class boto.sqs.message.Message is used but + this can be overriden with any class that behaves like a message. + Inputs: + message_class - The new message class + Returns: + Nothing + """ + self.message_class = message_class + + def get_attributes(self, attributes='All'): + """ + Retrieves attributes about this queue object and returns + them in an Attribute instance (subclass of a Dictionary). + Inputs: + attributes - A string containing + All|ApproximateNumberOfMessages|VisibilityTimeout + Default value is "All" + Returns: + An Attribute object which is a mapping type holding the + requested name/value pairs + """ + return self.connection.get_queue_attributes(self.id, attributes) + + def set_attribute(self, attribute, value): + """ + Set a new value for an attribute of the Queue. + Inputs: + attribute - The name of the attribute you want to set. The + only valid value at this time is: VisibilityTimeout + value - The new value for the attribute. + For VisibilityTimeout the value must be an + integer number of seconds from 0 to 86400. + Returns: + Boolean True if successful, otherwise False. + """ + return self.connection.set_queue_attribute(self.id, attribute, value) + + def add_grant(self, permission, email_address=None, user_id=None): + """ + Add a grant to this queue. + Inputs: + permission - The permission being granted. One of "ReceiveMessage", "SendMessage" or "FullControl" + email_address - the email address of the grantee. If email_address is supplied, user_id should be None + user_id - The ID of the grantee. If user_id is supplied, email_address should be None + Returns: + Boolean True if successful, otherwise False + """ + return self.connection.add_grant(self.id, permission, email_address, user_id) + + def remove_grant(self, permission, email_address=None, user_id=None): + """ + Remove a grant from this queue. + Inputs: + permission - The permission being removed. One of "ReceiveMessage", "SendMessage" or "FullControl" + email_address - the email address of the grantee. If email_address is supplied, user_id should be None + user_id - The ID of the grantee. If user_id is supplied, email_address should be None + Returns: + Boolean True if successful, otherwise False + """ + return self.connection.remove_grant(self.id, permission, email_address, user_id) + + def list_grants(self, permission=None, email_address=None, user_id=None): + """ + List the grants to this queue. + Inputs: + permission - The permission granted. One of "ReceiveMessage", "SendMessage" or "FullControl". + If supplied, only grants that allow this permission will be returned. + email_address - the email address of the grantee. If supplied, only grants related to this email + address will be returned + user_id - The ID of the grantee. If supplied, only grants related to his user_id will be returned. + Returns: + A string containing the XML Response elements describing the grants. + """ + return self.connection.list_grants(self.id, permission, email_address, user_id) + + def get_timeout(self): + """ + Get the visibility timeout for the queue. + Inputs: + None + Returns: + The number of seconds as an integer. + """ + a = self.get_attributes('VisibilityTimeout') + return int(a['VisibilityTimeout']) + + def set_timeout(self, visibility_timeout): + """ + Set the visibility timeout for the queue. + Inputs: + visibility_timeout - The desired timeout in seconds + Returns: + Nothing + """ + retval = self.set_attribute('VisibilityTimeout', visibility_timeout) + if retval: + self.visibility_timeout = visibility_timeout + return retval + + def read(self, visibility_timeout=None): + """ + Read a single message from the queue. + Inputs: + visibility_timeout - The timeout for this message in seconds + Returns: + A single message or None if queue is empty + """ + rs = self.get_messages(1, visibility_timeout) + if len(rs) == 1: + return rs[0] + else: + return None + + def write(self, message): + """ + Add a single message to the queue. + Inputs: + message - The message to be written to the queue + Returns: + None + """ + path = '%s/back' % self.id + message.queue = self + response = self.connection.make_request('PUT', path, None, + message.get_body_encoded()) + body = response.read() + if response.status >= 300: + raise SQSError(response.status, response.reason, body) + handler = XmlHandler(message, self.connection) + xml.sax.parseString(body, handler) + return None + + def new_message(self, body=''): + return self.message_class(self, body) + + # get a variable number of messages, returns a list of messages + def get_messages(self, num_messages=1, visibility_timeout=None): + path = '%s/front?NumberOfMessages=%d' % (self.id, num_messages) + if visibility_timeout: + path = '%s&VisibilityTimeout=%d' % (path, visibility_timeout) + response = self.connection.make_request('GET', path) + body = response.read() + if response.status >= 300: + raise SQSError(response.status, response.reason, body) + rs = ResultSet([('Message', self.message_class)]) + h = XmlHandler(rs, self) + xml.sax.parseString(body, h) + return rs + + def delete_message(self, message): + path = '%s/%s' % (self.id, message.id) + response = self.connection.make_request('DELETE', path) + body = response.read() + if response.status >= 300: + raise SQSError(response.status, response.reason, body) + rs = ResultSet() + h = XmlHandler(rs, self.connection) + xml.sax.parseString(body, h) + return rs + + def clear(self, page_size=100, vtimeout=10): + """Utility function to remove all messages from a queue""" + n = 0 + l = self.get_messages(page_size, vtimeout) + while l: + for m in l: + self.delete_message(m) + n += 1 + l = self.get_messages(page_size, vtimeout) + return n + + def count(self, page_size=100, vtimeout=10): + """ + Utility function to count the number of messages in a queue. + Note: This function now calls GetQueueAttributes to obtain + an 'approximate' count of the number of messages in a queue. + """ + a = self.get_attributes('ApproximateNumberOfMessages') + return a['ApproximateNumberOfMessages'] + + def count_slow(self, page_size=100, vtimeout=10): + """ + Deprecated. This is the old 'count' method that actually counts + the messages by reading them all. This gives an accurate count but + is very slow for queues with non-trivial number of messasges. + Instead, use get_attribute('ApproximateNumberOfMessages') to take + advantage of the new SQS capability. This is retained only for + the unit tests. + """ + n = 0 + l = self.get_messages(page_size, vtimeout) + while l: + for m in l: + n += 1 + l = self.get_messages(page_size, vtimeout) + return n + + def dump(self, file_name, page_size=100, vtimeout=10, sep='\n'): + """Utility function to dump the messages in a queue to a file""" + fp = open(file_name, 'wb') + n = 0 + l = self.get_messages(page_size, vtimeout) + while l: + for m in l: + fp.write(m.get_body()) + if sep: + fp.write(sep) + n += 1 + l = self.get_messages(page_size, vtimeout) + fp.close() + return n + + def save(self, file_name, sep='\n'): + """ + Read all messages from the queue and persist them to local file. + Messages are written to the file and the 'sep' string is written + in between messages. Messages are deleted from the queue after + being written to the file. + Returns the number of messages saved. + """ + fp = open(file_name, 'wb') + n = 0 + m = self.read() + while m: + n += 1 + fp.write(m.get_body()) + if sep: + fp.write(sep) + self.delete_message(m) + m = self.read() + fp.close() + return n + + def save_to_s3(self, bucket): + """ + Read all messages from the queue and persist them to S3. + Messages are stored in the S3 bucket using a naming scheme of: + / + Messages are deleted from the queue after being saved to S3. + Returns the number of messages saved. + """ + n = 0 + m = self.read() + while m: + n += 1 + key = bucket.new_key('%s/%s' % (self.id, m.id)) + key.set_contents_from_string(m.get_body()) + self.delete_message(m) + m = self.read() + return n + + def load_from_s3(self, bucket, prefix=None): + """ + Load messages previously saved to S3. + """ + n = 0 + if prefix: + prefix = '%s/' % prefix + else: + prefix = '%s/' % self.id + rs = bucket.list(prefix=prefix) + for key in rs: + n += 1 + m = self.new_message(key.get_contents_as_string()) + self.write(m) + return n + + def load(self, file_name, sep='\n'): + """Utility function to load messages from a file to a queue""" + fp = open(file_name, 'rb') + n = 0 + body = '' + l = fp.readline() + while l: + if l == sep: + m = Message(self, body) + self.write(m) + n += 1 + print 'writing message %d' % n + body = '' + else: + body = body + l + l = fp.readline() + fp.close() + return n + + diff --git a/thirdparty/boto/sqs/20070501/readme.txt b/thirdparty/boto/sqs/20070501/readme.txt new file mode 100644 index 000000000..71325797f --- /dev/null +++ b/thirdparty/boto/sqs/20070501/readme.txt @@ -0,0 +1,6 @@ +The main SQS implementation now uses the 2008-01-01 API verson. To use the older API version +(2007-05-01) you need to edit your /etc/boto.cfg or ~/.boto file to add the following line: + +boto.sqs_extend = 20070501 + +This will allow the code in the boto.sqs.20070501 module to override the code in boto.sqs. diff --git a/thirdparty/boto/sqs/__init__.py b/thirdparty/boto/sqs/__init__.py new file mode 100644 index 000000000..5be8e3e47 --- /dev/null +++ b/thirdparty/boto/sqs/__init__.py @@ -0,0 +1,31 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# + +import boto + +boto.check_extensions(__name__, __path__) + +__all__ = ['Connection', 'Queue', 'Message', 'MHMessage'] + +from connection import SQSConnection as Connection +from queue import Queue +from message import Message, MHMessage diff --git a/thirdparty/boto/sqs/attributes.py b/thirdparty/boto/sqs/attributes.py new file mode 100644 index 000000000..26c720416 --- /dev/null +++ b/thirdparty/boto/sqs/attributes.py @@ -0,0 +1,46 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Represents an SQS Attribute Name/Value set +""" + +class Attributes(dict): + + def __init__(self, parent): + self.parent = parent + self.current_key = None + self.current_value = None + + def startElement(self, name, attrs, connection): + pass + + def endElement(self, name, value, connection): + if name == 'Attribute': + self[self.current_key] = self.current_value + elif name == 'Name': + self.current_key = value + elif name == 'Value': + self.current_value = value + else: + setattr(self, name, value) + + diff --git a/thirdparty/boto/sqs/connection.py b/thirdparty/boto/sqs/connection.py new file mode 100644 index 000000000..4de05df27 --- /dev/null +++ b/thirdparty/boto/sqs/connection.py @@ -0,0 +1,129 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +from boto.connection import AWSQueryConnection +import xml.sax +from boto.sqs.queue import Queue +from boto.sqs.message import Message +from boto.sqs.attributes import Attributes +from boto import handler +from boto.resultset import ResultSet +from boto.exception import SQSError + +PERM_ReceiveMessage = 'ReceiveMessage' +PERM_SendMessage = 'SendMessage' +PERM_FullControl = 'FullControl' + +AllPermissions = [PERM_ReceiveMessage, PERM_SendMessage, PERM_FullControl] + +class SQSConnection(AWSQueryConnection): + + """ + A subclass of the original SQSQueryConnection targeting the 2008-01-01 SQS API. + """ + + DefaultHost = 'queue.amazonaws.com' + APIVersion = '2008-01-01' + SignatureVersion = '1' + DefaultContentType = 'text/plain' + ResponseError = SQSError + + def __init__(self, aws_access_key_id=None, aws_secret_access_key=None, + is_secure=False, port=None, proxy=None, proxy_port=None, + proxy_user=None, proxy_pass=None, host=DefaultHost, debug=0, + https_connection_factory=None): + AWSQueryConnection.__init__(self, aws_access_key_id, aws_secret_access_key, + is_secure, port, proxy, proxy_port, proxy_user, proxy_pass, + host, debug, https_connection_factory) + + def create_queue(self, queue_name, visibility_timeout=None): + params = {'QueueName': queue_name} + if visibility_timeout: + params['DefaultVisibilityTimeout'] = '%d' % (visibility_timeout,) + return self.get_object('CreateQueue', params, Queue) + + def delete_queue(self, queue, force_deletion=False): + """ + Delete an SQS Queue. + + @type queue: A Queue object + @param queue: The SQS queue to be deleted + @type force_deletion: Boolean + @param force_deletion: Normally, SQS will not delete a queue that contains messages. + However, if the force_deletion argument is True, the + queue will be deleted regardless of whether there are messages in + the queue or not. USE WITH CAUTION. This will delete all + messages in the queue as well. + @rtype: bool + @return: True if the command succeeded, False otherwise + """ + return self.get_status('DeleteQueue', None, queue.url) + + def get_queue_attributes(self, queue, attribute='All'): + params = {'AttributeName' : attribute} + return self.get_object('GetQueueAttributes', params, Attributes, queue.url) + + def set_queue_attribute(self, queue, attribute, value): + params = {'Attribute.Name' : attribute, 'Attribute.Value' : value} + return self.get_status('SetQueueAttributes', params, queue.url) + + def receive_message(self, queue, number_messages=1, + visibility_timeout=None): + """ + Read messages from an SQS Queue. + + @type queue: A Queue object or a queue URL. + @param queue: The Queue from which messages are read. + @type number_messages: int + @param number_messages: The maximum number of messages to read (default=1) + @type visibility_timeout: int + @param visibility_timeout: The number of seconds the message should remain invisible + to other queue readers (default=None which uses the Queues default) + + """ + params = {'MaxNumberOfMessages' : number_messages} + if visibility_timeout: + params['VisibilityTimeout'] = visibility_timeout + return self.get_list('ReceiveMessage', params, [('Message', queue.message_class)], + queue.url, queue) + + def delete_message(self, queue, message): + params = {'ReceiptHandle' : message.receipt_handle} + return self.get_status('DeleteMessage', params, queue.url) + + def send_message(self, queue, message_content): + params = {'MessageBody' : message_content} + return self.get_status('SendMessage', params, queue.url) + + def get_all_queues(self, prefix=''): + params = {} + if prefix: + params['QueueNamePrefix'] = prefix + return self.get_list('ListQueues', params, [('QueueUrl', Queue)]) + + def get_queue(self, queue_name): + rs = self.get_all_queues(queue_name) + if len(rs) == 1: + return rs[0] + return None + + lookup = get_queue + diff --git a/thirdparty/boto/sqs/jsonmessage.py b/thirdparty/boto/sqs/jsonmessage.py new file mode 100644 index 000000000..2331519ff --- /dev/null +++ b/thirdparty/boto/sqs/jsonmessage.py @@ -0,0 +1,37 @@ +# Copyright (c) 2006-2008 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +from boto.sqs.message import MHMessage +import base64 +import simplejson + +class JSONMessage(MHMessage): + """ + Acts like a dictionary but encodes it's data as a Base64 encoded JSON payload. + """ + + def decode(self, value): + value = base64.b64decode(value) + return simplejson.loads(value) + + def encode(self, value): + value = simplejson.dumps(value) + return base64.b64encode(value) diff --git a/thirdparty/boto/sqs/message.py b/thirdparty/boto/sqs/message.py new file mode 100644 index 000000000..e95f6a9e5 --- /dev/null +++ b/thirdparty/boto/sqs/message.py @@ -0,0 +1,206 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +SQS Message + +A Message represents the data stored in an SQS queue. The rules for what is allowed within an SQS +Message are here: + + http://docs.amazonwebservices.com/AWSSimpleQueueService/2008-01-01/SQSDeveloperGuide/Query_QuerySendMessage.html + +So, at it's simplest level a Message just needs to allow a developer to store bytes in it and get the bytes +back out. However, to allow messages to have richer semantics, the Message class must support the +following interfaces: + +The constructor for the Message class must accept a keyword parameter "queue" which is an instance of a +boto Queue object and represents the queue that the message will be stored in. The default value for +this parameter is None. + +The constructor for the Message class must accept a keyword parameter "body" which represents the +content or body of the message. The format of this parameter will depend on the behavior of the +particular Message subclass. For example, if the Message subclass provides dictionary-like behavior to the +user the body passed to the constructor should be a dict-like object that can be used to populate +the initial state of the message. + +The Message class must provide an encode method that accepts a value of the same type as the body +parameter of the constructor and returns a string of characters that are able to be stored in an +SQS message body (see rules above). + +The Message class must provide a decode method that accepts a string of characters that can be +stored (and probably were stored!) in an SQS message and return an object of a type that is consistent +with the "body" parameter accepted on the class constructor. + +The Message class must provide a __len__ method that will return the size of the encoded message +that would be stored in SQS based on the current state of the Message object. + +The Message class must provide a get_body method that will return the body of the message in the +same format accepted in the constructor of the class. + +The Message class must provide a set_body method that accepts a message body in the same format +accepted by the constructor of the class. This method should alter to the internal state of the +Message object to reflect the state represented in the message body parameter. + +The Message class must provide a get_body_encoded method that returns the current body of the message +in the format in which it would be stored in SQS. +""" + +import base64 +import StringIO + +class RawMessage: + """ + Base class for SQS messages. RawMessage does not encode the message + in any way. Whatever you store in the body of the message is what + will be written to SQS and whatever is returned from SQS is stored + directly into the body of the message. + """ + + def __init__(self, queue=None, body=''): + self.queue = queue + self.set_body(body) + self.id = None + self.receipt_handle = None + + def __len__(self): + return len(self.encode(self._body)) + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'Body': + self.set_body(self.decode(value)) + elif name == 'MessageId': + self.id = value + elif name == 'ReceiptHandle': + self.receipt_handle = value + else: + setattr(self, name, value) + + def encode(self, value): + """Transform body object into serialized byte array format.""" + return value + + def decode(self, value): + """Transform seralized byte array into any object.""" + return value + + def set_body(self, body): + """Override the current body for this object, using decoded format.""" + self._body = body + + def get_body(self): + return self._body + + def get_body_encoded(self): + """ + This method is really a semi-private method used by the Queue.write + method when writing the contents of the message to SQS. + You probably shouldn't need to call this method in the normal course of events. + """ + return self.encode(self.get_body()) + + def delete(self): + if self.queue: + return self.queue.delete_message(self) + +class Message(RawMessage): + """ + The default Message class used for SQS queues. This class automatically + encodes/decodes the message body using Base64 encoding to avoid any + illegal characters in the message body. See: + + http://developer.amazonwebservices.com/connect/thread.jspa?messageID=49680%EC%88%90 + + for details on why this is a good idea. The encode/decode is meant to + be transparent to the end-user. + """ + + def encode(self, value): + return base64.b64encode(value) + + def decode(self, value): + return base64.b64decode(value) + +class MHMessage(Message): + """ + The MHMessage class provides a message that provides RFC821-like + headers like this: + + HeaderName: HeaderValue + + The encoding/decoding of this is handled automatically and after + the message body has been read, the message instance can be treated + like a mapping object, i.e. m['HeaderName'] would return 'HeaderValue'. + """ + + def __init__(self, queue=None, body=None, xml_attrs=None): + if body == None or body == '': + body = {} + Message.__init__(self, queue, body) + + def decode(self, value): + msg = {} + fp = StringIO.StringIO(value) + line = fp.readline() + while line: + delim = line.find(':') + key = line[0:delim] + value = line[delim+1:].strip() + msg[key.strip()] = value.strip() + line = fp.readline() + return msg + + def encode(self, value): + s = '' + for item in value.items(): + s = s + '%s: %s\n' % (item[0], item[1]) + return s + + def __getitem__(self, key): + if self._body.has_key(key): + return self._body[key] + else: + raise KeyError(key) + + def __setitem__(self, key, value): + self._body[key] = value + self.set_body(self._body) + + def keys(self): + return self._body.keys() + + def values(self): + return self._body.values() + + def items(self): + return self._body.items() + + def has_key(self, key): + return self._body.has_key(key) + + def update(self, d): + self._body.update(d) + self.set_body(self._body) + + def get(self, key, default=None): + return self._body.get(key, default) diff --git a/thirdparty/boto/sqs/queue.py b/thirdparty/boto/sqs/queue.py new file mode 100644 index 000000000..344978563 --- /dev/null +++ b/thirdparty/boto/sqs/queue.py @@ -0,0 +1,316 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Represents an SQS Queue +""" + +import xml.sax +import urlparse +from boto.exception import SQSError +from boto.handler import XmlHandler +from boto.sqs.message import Message +from boto.resultset import ResultSet + +class Queue: + + def __init__(self, connection=None, url=None, message_class=Message): + self.connection = connection + self.url = url + self.message_class = message_class + self.visibility_timeout = None + + def startElement(self, name, attrs, connection): + return None + + def endElement(self, name, value, connection): + if name == 'QueueUrl': + self.url = value + if value: + self.id = urlparse.urlparse(value)[2] + elif name == 'VisibilityTimeout': + self.visibility_timeout = int(value) + else: + setattr(self, name, value) + + def set_message_class(self, message_class): + """ + Set the message class that should be used when instantiating messages read + from the queue. By default, the class boto.sqs.message.Message is used but + this can be overriden with any class that behaves like a message. + + @type message_class: Message-like class + @param message_class: The new Message class + """ + self.message_class = message_class + + def get_attributes(self, attributes='All'): + """ + Retrieves attributes about this queue object and returns + them in an Attribute instance (subclass of a Dictionary). + + @type attributes: string + @param attributes: String containing one of + All|ApproximateNumberOfMessages|VisibilityTimeout + Default value is "All" + @rtype: Attribute object + @return: An Attribute object which is a mapping type holding the + requested name/value pairs + """ + return self.connection.get_queue_attributes(self, attributes) + + def set_attribute(self, attribute, value): + """ + Set a new value for an attribute of the Queue. + + @type attribute: String + @param attribute: The name of the attribute you want to set. The + only valid value at this time is: VisibilityTimeout + @type value: int + @param value: The new value for the attribute. + For VisibilityTimeout the value must be an + integer number of seconds from 0 to 86400. + + @rtype: bool + @return: True if successful, otherwise False. + """ + return self.connection.set_queue_attribute(self, attribute, value) + + def get_timeout(self): + """ + Get the visibility timeout for the queue. + + @rtype: int + @return: The number of seconds as an integer. + """ + a = self.get_attributes('VisibilityTimeout') + return int(a['VisibilityTimeout']) + + def set_timeout(self, visibility_timeout): + """ + Set the visibility timeout for the queue. + + @type visibility_timeout: int + @param visibility_timeout: The desired timeout in seconds + """ + retval = self.set_attribute('VisibilityTimeout', visibility_timeout) + if retval: + self.visibility_timeout = visibility_timeout + return retval + + def read(self, visibility_timeout=None): + """ + Read a single message from the queue. + + @type visibility_timeout: int + @param visibility_timeout: The timeout for this message in seconds + + @rtype: Message + @return: A single message or None if queue is empty + """ + rs = self.get_messages(1, visibility_timeout) + if len(rs) == 1: + return rs[0] + else: + return None + + def write(self, message): + """ + Add a single message to the queue. + + @type message: Message + @param message: The message to be written to the queue + """ + self.connection.send_message(self, message.get_body_encoded()) + return None + + def new_message(self, body=''): + """ + Create new message of appropriate class. + + @type body: message body + @param body: The body of the newly created message (optional). + """ + m = self.message_class(self, body) + m.queue = self + return m + + # get a variable number of messages, returns a list of messages + def get_messages(self, num_messages=1, visibility_timeout=None): + """ + Get a variable number of messages. + + @type num_messages: int + @param num_messages: The maximum number of messages to read from the queue. + @type visibility_timeout: int + @param visibility_timeout: The VisibilityTimeout for the messages read. + + @rtype: list + @return: A list of messages. + """ + return self.connection.receive_message(self, number_messages=num_messages, + visibility_timeout=visibility_timeout) + + def delete_message(self, message): + """ + Delete a message from the queue. + + @type message: Message + @param message: The message object to delete. + + @rtype: bool + @return: True if successful, False otherwise + """ + return self.connection.delete_message(self, message) + + def delete(self): + """ + Delete the queue. + """ + return self.connection.delete_queue(self) + + def clear(self, page_size=10, vtimeout=10): + """Utility function to remove all messages from a queue""" + n = 0 + l = self.get_messages(page_size, vtimeout) + while l: + for m in l: + self.delete_message(m) + n += 1 + l = self.get_messages(page_size, vtimeout) + return n + + def count(self, page_size=10, vtimeout=10): + """ + Utility function to count the number of messages in a queue. + Note: This function now calls GetQueueAttributes to obtain + an 'approximate' count of the number of messages in a queue. + """ + a = self.get_attributes('ApproximateNumberOfMessages') + return a['ApproximateNumberOfMessages'] + + def count_slow(self, page_size=10, vtimeout=10): + """ + Deprecated. This is the old 'count' method that actually counts + the messages by reading them all. This gives an accurate count but + is very slow for queues with non-trivial number of messasges. + Instead, use get_attribute('ApproximateNumberOfMessages') to take + advantage of the new SQS capability. This is retained only for + the unit tests. + """ + n = 0 + l = self.get_messages(page_size, vtimeout) + while l: + for m in l: + n += 1 + l = self.get_messages(page_size, vtimeout) + return n + + def dump(self, file_name, page_size=100, vtimeout=10, sep='\n'): + """Utility function to dump the messages in a queue to a file""" + fp = open(file_name, 'wb') + n = 0 + l = self.get_messages(page_size, vtimeout) + while l: + for m in l: + fp.write(m.get_body()) + if sep: + fp.write(sep) + n += 1 + l = self.get_messages(page_size, vtimeout) + fp.close() + return n + + def save(self, file_name, sep='\n'): + """ + Read all messages from the queue and persist them to local file. + Messages are written to the file and the 'sep' string is written + in between messages. Messages are deleted from the queue after + being written to the file. + Returns the number of messages saved. + """ + fp = open(file_name, 'wb') + n = 0 + m = self.read() + while m: + n += 1 + fp.write(m.get_body()) + if sep: + fp.write(sep) + self.delete_message(m) + m = self.read() + fp.close() + return n + + def save_to_s3(self, bucket): + """ + Read all messages from the queue and persist them to S3. + Messages are stored in the S3 bucket using a naming scheme of: + / + Messages are deleted from the queue after being saved to S3. + Returns the number of messages saved. + """ + n = 0 + m = self.read() + while m: + n += 1 + key = bucket.new_key('%s/%s' % (self.id, m.id)) + key.set_contents_from_string(m.get_body()) + self.delete_message(m) + m = self.read() + return n + + def load_from_s3(self, bucket, prefix=None): + """ + Load messages previously saved to S3. + """ + n = 0 + if prefix: + prefix = '%s/' % prefix + else: + prefix = '%s/' % self.id + rs = bucket.list(prefix=prefix) + for key in rs: + n += 1 + m = self.new_message(key.get_contents_as_string()) + self.write(m) + return n + + def load(self, file_name, sep='\n'): + """Utility function to load messages from a file to a queue""" + fp = open(file_name, 'rb') + n = 0 + body = '' + l = fp.readline() + while l: + if l == sep: + m = Message(self, body) + self.write(m) + n += 1 + print 'writing message %d' % n + body = '' + else: + body = body + l + l = fp.readline() + fp.close() + return n + + diff --git a/thirdparty/boto/tests/__init__.py b/thirdparty/boto/tests/__init__.py new file mode 100644 index 000000000..449bd162a --- /dev/null +++ b/thirdparty/boto/tests/__init__.py @@ -0,0 +1,23 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# + + diff --git a/thirdparty/boto/tests/test.py b/thirdparty/boto/tests/test.py new file mode 100644 index 000000000..c6175cac0 --- /dev/null +++ b/thirdparty/boto/tests/test.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +do the unit tests! +""" + +import sys, os, unittest +import getopt, sys +import boto + +from boto.tests.test_sqsconnection import SQSConnectionTest +from boto.tests.test_s3connection import S3ConnectionTest +from boto.tests.test_ec2connection import EC2ConnectionTest +from boto.tests.test_sdbconnection import SDBConnectionTest + +def usage(): + print 'test.py [-t testsuite] [-v verbosity]' + print ' -t run specific testsuite (s3|sqs|ec2|sdb|all)' + print ' -v verbosity (0|1|2)' + +def main(): + try: + opts, args = getopt.getopt(sys.argv[1:], 'ht:v:', + ['help', 'testsuite', 'verbosity']) + except: + usage() + sys.exit(2) + testsuite = 'all' + verbosity = 1 + for o, a in opts: + if o in ('-h', '--help'): + usage() + sys.exit() + if o in ('-t', '--testsuite'): + testsuite = a + if o in ('-v', '--verbosity'): + verbosity = int(a) + if len(args) != 0: + usage() + sys.exit() + suite = unittest.TestSuite() + if testsuite == 'all': + suite.addTest(unittest.makeSuite(SQSConnectionTest)) + suite.addTest(unittest.makeSuite(S3ConnectionTest)) + suite.addTest(unittest.makeSuite(EC2ConnectionTest)) + suite.addTest(unittest.makeSuite(SDBConnectionTest)) + elif testsuite == 's3': + suite.addTest(unittest.makeSuite(S3ConnectionTest)) + elif testsuite == 'sqs': + suite.addTest(unittest.makeSuite(SQSConnectionTest)) + elif testsuite == 'ec2': + suite.addTest(unittest.makeSuite(EC2ConnectionTest)) + elif testsuite == 'sdb': + suite.addTest(unittest.makeSuite(SDBConnectionTest)) + else: + usage() + sys.exit() + unittest.TextTestRunner(verbosity=verbosity).run(suite) + +if __name__ == "__main__": + main() diff --git a/thirdparty/boto/tests/test_ec2connection.py b/thirdparty/boto/tests/test_ec2connection.py new file mode 100644 index 000000000..8f1fb5985 --- /dev/null +++ b/thirdparty/boto/tests/test_ec2connection.py @@ -0,0 +1,154 @@ +#!/usr/bin/env python + +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Some unit tests for the EC2Connection +""" + +import unittest +import time +import os +from boto.ec2.connection import EC2Connection +import telnetlib +import socket + +class EC2ConnectionTest (unittest.TestCase): + + def test_1_basic(self): + # this is my user_id, if you want to run these tests you should + # replace this with yours or they won't work + user_id = '084307701560' + print '--- running EC2Connection tests ---' + c = EC2Connection() + # get list of private AMI's + rs = c.get_all_images(owners=[user_id]) + assert len(rs) > 0 + # now pick the first one + image = rs[0] + # temporarily make this image runnable by everyone + status = image.set_launch_permissions(group_names=['all']) + assert status + d = image.get_launch_permissions() + assert d.has_key('groups') + assert len(d['groups']) > 0 + # now remove that permission + status = image.remove_launch_permissions(group_names=['all']) + assert status + d = image.get_launch_permissions() + assert not d.has_key('groups') + + # create a new security group + group_name = 'test-%d' % int(time.time()) + group_desc = 'This is a security group created during unit testing' + group = c.create_security_group(group_name, group_desc) + # now get a listing of all security groups and look for our new one + rs = c.get_all_security_groups() + found = False + for g in rs: + if g.name == group_name: + found = True + assert found + # now pass arg to filter results to only our new group + rs = c.get_all_security_groups([group_name]) + assert len(rs) == 1 + group = rs[0] + # + # now delete the security group + status = c.delete_security_group(group_name) + # now make sure it's really gone + rs = c.get_all_security_groups() + found = False + for g in rs: + if g.name == group_name: + found = True + assert not found + # now create it again for use with the instance test + group = c.create_security_group(group_name, group_desc) + + # now try to launch apache image with our new security group + rs = c.get_all_images() + img_loc = 'ec2-public-images/fedora-core4-apache.manifest.xml' + for image in rs: + if image.location == img_loc: + break + reservation = image.run(security_groups=[group.name]) + instance = reservation.instances[0] + while instance.state != 'running': + print '\tinstance is %s' % instance.state + time.sleep(30) + instance.update() + # instance in now running, try to telnet to port 80 + t = telnetlib.Telnet() + try: + t.open(instance.dns_name, 80) + except socket.error: + pass + # now open up port 80 and try again, it should work + group.authorize('tcp', 80, 80, '0.0.0.0/0') + t.open(instance.dns_name, 80) + t.close() + # now revoke authorization and try again + group.revoke('tcp', 80, 80, '0.0.0.0/0') + try: + t.open(instance.dns_name, 80) + except socket.error: + pass + # now kill the instance and delete the security group + instance.stop() + # unfortunately, I can't delete the sg within this script + #sg.delete() + + # create a new key pair + key_name = 'test-%d' % int(time.time()) + status = c.create_key_pair(key_name) + assert status + # now get a listing of all key pairs and look for our new one + rs = c.get_all_key_pairs() + found = False + for k in rs: + if k.name == key_name: + found = True + assert found + # now pass arg to filter results to only our new key pair + rs = c.get_all_key_pairs([key_name]) + assert len(rs) == 1 + key_pair = rs[0] + # now delete the key pair + status = c.delete_key_pair(key_name) + # now make sure it's really gone + rs = c.get_all_key_pairs() + found = False + for k in rs: + if k.name == key_name: + found = True + assert not found + + # short test around Paid AMI capability + demo_paid_ami_id = 'ami-bd9d78d4' + demo_paid_ami_product_code = 'A79EC0DB' + l = c.get_all_images([demo_paid_ami_id]) + assert len(l) == 1 + assert len(l[0].product_codes) == 1 + assert l[0].product_codes[0] == demo_paid_ami_product_code + + print '--- tests completed ---' diff --git a/thirdparty/boto/tests/test_s3connection.py b/thirdparty/boto/tests/test_s3connection.py new file mode 100644 index 000000000..ecf7ebfd0 --- /dev/null +++ b/thirdparty/boto/tests/test_s3connection.py @@ -0,0 +1,150 @@ +#!/usr/bin/env python + +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Some unit tests for the S3Connection +""" + +import unittest +import time +import os +from boto.s3.connection import S3Connection +from boto.exception import S3PermissionsError + +class S3ConnectionTest (unittest.TestCase): + + def test_1_basic(self): + print '--- running S3Connection tests ---' + c = S3Connection() + # create a new, empty bucket + bucket_name = 'test-%d' % int(time.time()) + bucket = c.create_bucket(bucket_name) + # now try a get_bucket call and see if it's really there + bucket = c.get_bucket(bucket_name) + # create a new key and store it's content from a string + k = bucket.new_key() + k.name = 'foobar' + s1 = 'This is a test of file upload and download' + s2 = 'This is a second string to test file upload and download' + k.set_contents_from_string(s1) + fp = open('foobar', 'wb') + # now get the contents from s3 to a local file + k.get_contents_to_file(fp) + fp.close() + fp = open('foobar') + # check to make sure content read from s3 is identical to original + assert s1 == fp.read(), 'corrupted file' + fp.close() + bucket.delete_key(k) + # test a few variations on get_all_keys - first load some data + # for the first one, let's override the content type + phony_mimetype = 'application/x-boto-test' + headers = {'Content-Type': phony_mimetype} + k.name = 'foo/bar' + k.set_contents_from_string(s1, headers) + k.name = 'foo/bas' + k.set_contents_from_filename('foobar') + k.name = 'foo/bat' + k.set_contents_from_string(s1) + k.name = 'fie/bar' + k.set_contents_from_string(s1) + k.name = 'fie/bas' + k.set_contents_from_string(s1) + k.name = 'fie/bat' + k.set_contents_from_string(s1) + # try resetting the contents to another value + md5 = k.md5 + k.set_contents_from_string(s2) + assert k.md5 != md5 + os.unlink('foobar') + all = bucket.get_all_keys() + assert len(all) == 6 + rs = bucket.get_all_keys(prefix='foo') + assert len(rs) == 3 + rs = bucket.get_all_keys(prefix='', delimiter='/') + assert len(rs) == 2 + rs = bucket.get_all_keys(maxkeys=5) + assert len(rs) == 5 + # test the lookup method + k = bucket.lookup('foo/bar') + assert isinstance(k, bucket.key_class) + assert k.content_type == phony_mimetype + k = bucket.lookup('notthere') + assert k == None + # try some metadata stuff + k = bucket.new_key() + k.name = 'has_metadata' + mdkey1 = 'meta1' + mdval1 = 'This is the first metadata value' + k.set_metadata(mdkey1, mdval1) + mdkey2 = 'meta2' + mdval2 = 'This is the second metadata value' + k.set_metadata(mdkey2, mdval2) + k.set_contents_from_string(s1) + k = bucket.lookup('has_metadata') + assert k.get_metadata(mdkey1) == mdval1 + assert k.get_metadata(mdkey2) == mdval2 + k = bucket.new_key() + k.name = 'has_metadata' + k.get_contents_as_string() + assert k.get_metadata(mdkey1) == mdval1 + assert k.get_metadata(mdkey2) == mdval2 + bucket.delete_key(k) + # try a key with a funny character + rs = bucket.get_all_keys() + num_keys = len(rs) + k = bucket.new_key() + k.name = 'testnewline\n' + k.set_contents_from_string('This is a test') + rs = bucket.get_all_keys() + assert len(rs) == num_keys + 1 + bucket.delete_key(k) + rs = bucket.get_all_keys() + assert len(rs) == num_keys + # try some acl stuff + bucket.set_acl('public-read') + policy = bucket.get_acl() + assert len(policy.acl.grants) == 2 + bucket.set_acl('private') + policy = bucket.get_acl() + assert len(policy.acl.grants) == 1 + k = bucket.lookup('foo/bar') + k.set_acl('public-read') + policy = k.get_acl() + assert len(policy.acl.grants) == 2 + k.set_acl('private') + policy = k.get_acl() + assert len(policy.acl.grants) == 1 + # try the convenience methods for grants + bucket.add_user_grant('FULL_CONTROL', + 'c1e724fbfa0979a4448393c59a8c055011f739b6d102fb37a65f26414653cd67') + try: + bucket.add_email_grant('foobar', 'foo@bar.com') + except S3PermissionsError: + pass + # now delete all keys in bucket + for k in all: + bucket.delete_key(k) + # now delete bucket + c.delete_bucket(bucket) + print '--- tests completed ---' diff --git a/thirdparty/boto/tests/test_sdbconnection.py b/thirdparty/boto/tests/test_sdbconnection.py new file mode 100644 index 000000000..1dc16652b --- /dev/null +++ b/thirdparty/boto/tests/test_sdbconnection.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python + +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Some unit tests for the SDBConnection +""" + +import unittest +import time +from boto.sdb.connection import SDBConnection +from boto.exception import SDBResponseError + +class SDBConnectionTest (unittest.TestCase): + + def test_1_basic(self): + print '--- running SDBConnection tests ---' + c = SDBConnection() + rs = c.get_all_domains() + num_domains = len(rs) + + # try illegal name + try: + domain = c.create_domain('bad:domain:name') + except SDBResponseError: + pass + + # now create one that should work and should be unique (i.e. a new one) + domain_name = 'test%d' % int(time.time()) + domain = c.create_domain(domain_name) + rs = c.get_all_domains() + assert len(rs) == num_domains+1 + + # now let's a couple of items and attributes + item_1 = 'item1' + same_value = 'same_value' + attrs_1 = {'name1' : same_value, 'name2' : 'diff_value_1'} + domain.put_attributes(item_1, attrs_1) + item_2 = 'item2' + attrs_2 = {'name1' : same_value, 'name2' : 'diff_value_2'} + domain.put_attributes(item_2, attrs_2) + time.sleep(10) + + # try to get the attributes and see if they match + item = domain.get_attributes(item_1) + assert len(item.keys()) == len(attrs_1.keys()) + assert item['name1'] == attrs_1['name1'] + assert item['name2'] == attrs_1['name2'] + + # try a search or two + rs = domain.query("['name1'='%s']" % same_value) + n = 0 + for item in rs: + n += 1 + assert n == 2 + rs = domain.query("['name2'='diff_value_2']") + n = 0 + for item in rs: + n += 1 + assert n == 1 + + # delete all attributes associated with item_1 + stat = domain.delete_attributes(item_1) + assert stat + + # now delete the domain + stat = c.delete_domain(domain) + assert stat + + print '--- tests completed ---' + diff --git a/thirdparty/boto/tests/test_sqsconnection.py b/thirdparty/boto/tests/test_sqsconnection.py new file mode 100644 index 000000000..802d329f4 --- /dev/null +++ b/thirdparty/boto/tests/test_sqsconnection.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python + +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Some unit tests for the SQSConnection +""" + +import unittest +import time +from boto.sqs.connection import SQSConnection +from boto.sqs.message import MHMessage +from boto.exception import SQSError + +class SQSConnectionTest (unittest.TestCase): + + def test_1_basic(self): + print '--- running SQSConnection tests ---' + c = SQSConnection() + rs = c.get_all_queues() + num_queues = 0 + for q in rs: + num_queues += 1 + + # try illegal name + try: + queue = c.create_queue('bad_queue_name') + except SQSError: + pass + + # now create one that should work and should be unique (i.e. a new one) + queue_name = 'test%d' % int(time.time()) + timeout = 60 + queue = c.create_queue(queue_name, timeout) + time.sleep(30) + rs = c.get_all_queues() + i = 0 + for q in rs: + i += 1 + assert i == num_queues+1 + assert queue.count_slow() == 0 + + # check the visibility timeout + t = queue.get_timeout() + assert t == timeout, '%d != %d' % (t, timeout) + + # now try to get queue attributes + a = q.get_attributes() + assert a.has_key('ApproximateNumberOfMessages') + assert a.has_key('VisibilityTimeout') + a = q.get_attributes('ApproximateNumberOfMessages') + assert a.has_key('ApproximateNumberOfMessages') + assert not a.has_key('VisibilityTimeout') + a = q.get_attributes('VisibilityTimeout') + assert not a.has_key('ApproximateNumberOfMessages') + assert a.has_key('VisibilityTimeout') + + # now change the visibility timeout + timeout = 45 + queue.set_timeout(timeout) + time.sleep(30) + t = queue.get_timeout() + assert t == timeout, '%d != %d' % (t, timeout) + + # now add a message + message_body = 'This is a test\n' + message = queue.new_message(message_body) + queue.write(message) + time.sleep(30) + assert queue.count_slow() == 1 + time.sleep(30) + + # now read the message from the queue with a 10 second timeout + message = queue.read(visibility_timeout=10) + assert message + assert message.get_body() == message_body + + # now immediately try another read, shouldn't find anything + message = queue.read() + assert message == None + + # now wait 10 seconds and try again + time.sleep(10) + message = queue.read() + assert message + + if c.APIVersion == '2007-05-01': + # now terminate the visibility timeout for this message + message.change_visibility(0) + # now see if we can read it in the queue + message = queue.read() + assert message + + # now delete the message + queue.delete_message(message) + time.sleep(30) + assert queue.count_slow() == 0 + + # create another queue so we can test force deletion + # we will also test MHMessage with this queue + queue_name = 'test%d' % int(time.time()) + timeout = 60 + queue = c.create_queue(queue_name, timeout) + queue.set_message_class(MHMessage) + time.sleep(30) + + # now add a couple of messages + message = queue.new_message() + message['foo'] = 'bar' + queue.write(message) + message_body = {'fie' : 'baz', 'foo' : 'bar'} + message = queue.new_message(body=message_body) + queue.write(message) + time.sleep(30) + + m = queue.read() + assert m['foo'] == 'bar' + + # now delete that queue and messages + c.delete_queue(queue, True) + + print '--- tests completed ---' + diff --git a/thirdparty/boto/utils.py b/thirdparty/boto/utils.py new file mode 100644 index 000000000..6109be7b9 --- /dev/null +++ b/thirdparty/boto/utils.py @@ -0,0 +1,457 @@ +# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +# +# Parts of this code were copied or derived from sample code supplied by AWS. +# The following notice applies to that code. +# +# This software code is made available "AS IS" without warranties of any +# kind. You may copy, display, modify and redistribute the software +# code either by itself or as incorporated into your code; provided that +# you do not remove any proprietary notices. Your use of this software +# code is at your own risk and you waive any claim against Amazon +# Digital Services, Inc. or its affiliates with respect to your use of +# this software code. (c) 2006 Amazon Digital Services, Inc. or its +# affiliates. + +""" +Some handy utility functions used by several classes. +""" + +import base64 +import hmac +import re +import sha +import urllib, urllib2 +import imp +import popen2, os, StringIO +import time, datetime +import logging.handlers +import boto +import tempfile +try: + import hashlib + _hashfn = hashlib.sha512 +except ImportError: + import md5 + _hashfn = md5.md5 + +METADATA_PREFIX = 'x-amz-meta-' +AMAZON_HEADER_PREFIX = 'x-amz-' + +# generates the aws canonical string for the given parameters +def canonical_string(method, path, headers, expires=None): + interesting_headers = {} + for key in headers: + lk = key.lower() + if lk in ['content-md5', 'content-type', 'date'] or lk.startswith(AMAZON_HEADER_PREFIX): + interesting_headers[lk] = headers[key].strip() + + # these keys get empty strings if they don't exist + if not interesting_headers.has_key('content-type'): + interesting_headers['content-type'] = '' + if not interesting_headers.has_key('content-md5'): + interesting_headers['content-md5'] = '' + + # just in case someone used this. it's not necessary in this lib. + if interesting_headers.has_key('x-amz-date'): + interesting_headers['date'] = '' + + # if you're using expires for query string auth, then it trumps date + # (and x-amz-date) + if expires: + interesting_headers['date'] = str(expires) + + sorted_header_keys = interesting_headers.keys() + sorted_header_keys.sort() + + buf = "%s\n" % method + for key in sorted_header_keys: + if key.startswith(AMAZON_HEADER_PREFIX): + buf += "%s:%s\n" % (key, interesting_headers[key]) + else: + buf += "%s\n" % interesting_headers[key] + + # don't include anything after the first ? in the resource... + buf += "%s" % path.split('?')[0] + + # ...unless there is an acl or torrent parameter + if re.search("[&?]acl($|=|&)", path): + buf += "?acl" + elif re.search("[&?]logging($|=|&)", path): + buf += "?logging" + elif re.search("[&?]torrent($|=|&)", path): + buf += "?torrent" + elif re.search("[&?]location($|=|&)", path): + buf += "?location" + + return buf + +def merge_meta(headers, metadata): + final_headers = headers.copy() + for k in metadata.keys(): + final_headers[METADATA_PREFIX + k] = metadata[k] + + return final_headers + +def get_aws_metadata(headers): + metadata = {} + for hkey in headers.keys(): + if hkey.lower().startswith(METADATA_PREFIX): + metadata[hkey[len(METADATA_PREFIX):]] = headers[hkey] + del headers[hkey] + return metadata + +def retry_url(url): + for i in range(0, 10): + try: + req = urllib2.Request(url) + resp = urllib2.urlopen(req) + return resp.read() + except: + boto.log.exception('Caught exception reading instance data') + time.sleep(2**i) + boto.log.error('Unable to read instance data, giving up') + return '' + +def get_instance_metadata(version='latest'): + metadata = {} + url = 'http://169.254.169.254/%s/meta-data/' % version + data = retry_url(url) + if data: + md_fields = data.split('\n') + for md in md_fields: + val = retry_url(url + md) + if val.find('\n') > 0: + val = val.split('\n') + metadata[md] = val + return metadata + +def get_instance_userdata(version='latest', sep=None): + url = 'http://169.254.169.254/%s/user-data/' % version + user_data = retry_url(url) + if user_data: + if sep: + l = user_data.split(sep) + user_data = {} + for nvpair in l: + t = nvpair.split('=') + user_data[t[0].strip()] = t[1].strip() + return user_data + +ISO8601 = '%Y-%m-%dT%H:%M:%SZ' + +def get_ts(ts=None): + if not ts: + ts = time.gmtime() + return time.strftime(ISO8601, ts) + +def parse_ts(ts): + return datetime.datetime.strptime(ts, ISO8601) + +def find_class(module_name, class_name=None): + if class_name: + module_name = "%s.%s" % (module_name, class_name) + modules = module_name.split('.') + path = None + c = None + + for m in modules[1:]: + if c: + c = getattr(c, m) + else: + c = getattr(__import__(".".join(modules[0:-1])), m) + return c + +def update_dme(username, password, dme_id, ip_address): + """ + Update your Dynamic DNS record with DNSMadeEasy.com + """ + dme_url = 'https://www.dnsmadeeasy.com/servlet/updateip' + dme_url += '?username=%s&password=%s&id=%s&ip=%s' + s = urllib2.urlopen(dme_url % (username, password, dme_id, ip_address)) + return s.read() + +def fetch_file(uri, file=None, username=None, password=None): + """ + Fetch a file based on the URI provided. If you do not pass in a file pointer + a tempfile.NamedTemporaryFile, or None if the file could not be + retrieved is returned. + The URI can be either an HTTP url, or "s3://bucket_name/key_name" + """ + boto.log.info('Fetching %s' % uri) + if file == None: + file = tempfile.NamedTemporaryFile() + try: + working_dir = boto.config.get("General", "working_dir") + if uri.startswith('s3://'): + bucket_name, key_name = uri[len('s3://'):].split('/') + c = boto.connect_s3() + bucket = c.get_bucket(bucket_name) + key = bucket.get_key(key_name) + key.get_contents_to_file(file) + else: + if username and password: + passman = urllib2.HTTPPasswordMgrWithDefaultRealm() + passman.add_password(None, uri, username, password) + authhandler = urllib2.HTTPBasicAuthHandler(passman) + opener = urllib2.build_opener(authhandler) + urllib2.install_opener(opener) + s = urllib2.urlopen(uri) + file.write(s.read()) + file.seek(0) + except: + raise + boto.log.exception('Problem Retrieving file: %s' % uri) + file = None + return file + +class ShellCommand(object): + + def __init__(self, command, wait=True): + self.exit_code = 0 + self.command = command + self.log_fp = StringIO.StringIO() + self.wait = wait + self.run() + + def run(self): + boto.log.info('running:%s' % self.command) + self.process = popen2.Popen4(self.command) + if(self.wait): + return self.getStatus() + + def setReadOnly(self, value): + raise AttributeError + + def getStatus(self): + if(not self.exit_code): + status = self.process.wait() + self.log_fp.write(self.process.fromchild.read()) + boto.log.info(self.log_fp.getvalue()) + self.exit_code = os.WEXITSTATUS(status) + return self.exit_code + + status = property(getStatus, setReadOnly, None, 'The exit code for the command') + + def getOutput(self): + return self.log_fp.getvalue() + + output = property(getOutput, setReadOnly, None, 'The STDIN and STDERR output of the command') + +class AuthSMTPHandler(logging.handlers.SMTPHandler): + """ + This class extends the SMTPHandler in the standard Python logging module + to accept a username and password on the constructor and to then use those + credentials to authenticate with the SMTP server. To use this, you could + add something like this in your boto config file: + + [handler_hand07] + class=boto.utils.AuthSMTPHandler + level=WARN + formatter=form07 + args=('localhost', 'username', 'password', 'from@abc', ['user1@abc', 'user2@xyz'], 'Logger Subject') + """ + + def __init__(self, mailhost, username, password, fromaddr, toaddrs, subject): + """ + Initialize the handler. + + We have extended the constructor to accept a username/password + for SMTP authentication. + """ + logging.handlers.SMTPHandler.__init__(self, mailhost, fromaddr, toaddrs, subject) + self.username = username + self.password = password + + def emit(self, record): + """ + Emit a record. + + Format the record and send it to the specified addressees. + It would be really nice if I could add authorization to this class + without having to resort to cut and paste inheritance but, no. + """ + try: + import smtplib + try: + from email.Utils import formatdate + except: + formatdate = self.date_time + port = self.mailport + if not port: + port = smtplib.SMTP_PORT + smtp = smtplib.SMTP(self.mailhost, port) + smtp.login(self.username, self.password) + msg = self.format(record) + msg = "From: %s\r\nTo: %s\r\nSubject: %s\r\nDate: %s\r\n\r\n%s" % ( + self.fromaddr, + string.join(self.toaddrs, ","), + self.getSubject(record), + formatdate(), msg) + smtp.sendmail(self.fromaddr, self.toaddrs, msg) + smtp.quit() + except (KeyboardInterrupt, SystemExit): + raise + except: + self.handleError(record) + +class LRUCache(dict): + """A dictionary-like object that stores only a certain number of items, and + discards its least recently used item when full. + + >>> cache = LRUCache(3) + >>> cache['A'] = 0 + >>> cache['B'] = 1 + >>> cache['C'] = 2 + >>> len(cache) + 3 + + >>> cache['A'] + 0 + + Adding new items to the cache does not increase its size. Instead, the least + recently used item is dropped: + + >>> cache['D'] = 3 + >>> len(cache) + 3 + >>> 'B' in cache + False + + Iterating over the cache returns the keys, starting with the most recently + used: + + >>> for key in cache: + ... print key + D + A + C + + This code is based on the LRUCache class from Genshi which is based on + Mighty's LRUCache from ``myghtyutils.util``, written + by Mike Bayer and released under the MIT license (Genshi uses the + BSD License). See: + + http://svn.myghty.org/myghtyutils/trunk/lib/myghtyutils/util.py + """ + + class _Item(object): + def __init__(self, key, value): + self.previous = self.next = None + self.key = key + self.value = value + def __repr__(self): + return repr(self.value) + + def __init__(self, capacity): + self._dict = dict() + self.capacity = capacity + self.head = None + self.tail = None + + def __contains__(self, key): + return key in self._dict + + def __iter__(self): + cur = self.head + while cur: + yield cur.key + cur = cur.next + + def __len__(self): + return len(self._dict) + + def __getitem__(self, key): + item = self._dict[key] + self._update_item(item) + return item.value + + def __setitem__(self, key, value): + item = self._dict.get(key) + if item is None: + item = self._Item(key, value) + self._dict[key] = item + self._insert_item(item) + else: + item.value = value + self._update_item(item) + self._manage_size() + + def __repr__(self): + return repr(self._dict) + + def _insert_item(self, item): + item.previous = None + item.next = self.head + if self.head is not None: + self.head.previous = item + else: + self.tail = item + self.head = item + self._manage_size() + + def _manage_size(self): + while len(self._dict) > self.capacity: + olditem = self._dict[self.tail.key] + del self._dict[self.tail.key] + if self.tail != self.head: + self.tail = self.tail.previous + self.tail.next = None + else: + self.head = self.tail = None + + def _update_item(self, item): + if self.head == item: + return + + previous = item.previous + previous.next = item.next + if item.next is not None: + item.next.previous = previous + else: + self.tail = previous + + item.previous = None + item.next = self.head + self.head.previous = self.head = item + +class Password: + """ + Password object that stores itself as SHA512 hashed. + """ + def __init__(self, str=None): + """ + Load the string from an initial value, this should be the raw SHA512 hashed password + """ + self.str = str + + def set(self, value): + self.str = _hashfn(value).hexdigest() + + def __str__(self): + return str(self.str) + + def __eq__(self, other): + return str(_hashfn(other).hexdigest()) == str(self.str) + + def __len__(self): + return len(self.str) diff --git a/thirdparty/duplicity/Homepage.txt b/thirdparty/duplicity/Homepage.txt new file mode 100644 index 000000000..5f4fd5b96 --- /dev/null +++ b/thirdparty/duplicity/Homepage.txt @@ -0,0 +1 @@ +http://www.nongnu.org/duplicity/duplicity.1.html \ No newline at end of file diff --git a/thirdparty/duplicity/License.txt b/thirdparty/duplicity/License.txt new file mode 100644 index 000000000..94a9ed024 --- /dev/null +++ b/thirdparty/duplicity/License.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/thirdparty/duplicity/duplicity.py b/thirdparty/duplicity/duplicity.py new file mode 100644 index 000000000..4f0a0b1f8 --- /dev/null +++ b/thirdparty/duplicity/duplicity.py @@ -0,0 +1,470 @@ +#!/usr/bin/env python +# duplicity -- Encrypted bandwidth efficient backup +# Version 0.4.10 released September 29, 2002 +# +# Copyright (C) 2002 Ben Escoto +# +# This file is part of duplicity. +# +# Duplicity is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at your +# option) any later version. +# +# Duplicity is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with duplicity; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.nongnu.org/duplicity for more information. +# Please send mail to me or the mailing list if you find bugs or have +# any suggestions. + +from __future__ import generators +import getpass, gzip, os, sys, time, types +from duplicity import collections, commandline, diffdir, dup_temp, \ + dup_time, file_naming, globals, gpg, log, manifest, patchdir, \ + path, robust, tempdir + +# If exit_val is not None, exit with given value at end. +exit_val = None + + +def get_passphrase(): + """Get passphrase from environment or, failing that, from user""" + try: + return os.environ['PASSPHRASE'] + except KeyError: + pass + + log.Log("PASSPHRASE variable not set, asking user.", 5) + while 1: + pass1 = getpass.getpass("GnuPG passphrase: ") + pass2 = getpass.getpass("Retype to confirm: ") + if not pass1 == pass2: + print "First and second passphrases do not match! Please try again." + continue + if not pass1 and not globals.gpg_profile.recipients: + print "Cannot use empty passphrase with symmetric encryption! Please try again." + continue + return pass1 + + +def write_multivol(backup_type, tarblock_iter, backend): + """Encrypt volumes of tarblock_iter and write to backend + + backup_type should be "inc" or "full" and only matters here when + picking the filenames. The path_prefix will determine the names + of the files written to backend. Also writes manifest file. + Returns number of bytes written. + + """ + def get_indicies(tarblock_iter): + """Return start_index and end_index of previous volume""" + start_index = tarblock_iter.recall_index() + if start_index is None: + start_index = () + end_index = tarblock_iter.get_previous_index() + if end_index is None: + end_index = start_index + return start_index, end_index + + mf = manifest.Manifest().set_dirinfo() + vol_num = 1; bytes_written = 0; at_end = 0 + while not at_end: + # Create volume + tarblock_iter.remember_next_index() # keep track of start index + dest_filename = file_naming.get(backup_type, vol_num, + encrypted = globals.encryption, + gzipped = not globals.encryption) + tdp = dup_temp.new_tempduppath(file_naming.parse(dest_filename)) + if globals.encryption: + at_end = gpg.GPGWriteFile(tarblock_iter, tdp.name, + globals.gpg_profile,globals.volsize) + else: + at_end = gpg.GzipWriteFile(tarblock_iter, tdp.name,globals.volsize) + tdp.setdata() + + # Add volume information to manifest + vi = manifest.VolumeInfo() + start_index, end_index = get_indicies(tarblock_iter) + vi.set_info(vol_num, start_index, end_index) + vi.set_hash("SHA1", gpg.get_hash("SHA1", tdp)) + mf.add_volume_info(vi) + + backend.put(tdp, dest_filename) + vol_num += 1; bytes_written += tdp.getsize() + tdp.delete() + + bytes_written += write_manifest(mf, backup_type, backend) + return bytes_written + + +def write_manifest(mf, backup_type, backend): + """Write manifest to file in archive_dir and encrypted to backend + + Returns number of bytes written + + """ + mf_string = mf.to_string() + if globals.archive_dir: + local_mf_name = file_naming.get(backup_type, manifest = 1) + fin = dup_temp.get_fileobj_duppath(globals.archive_dir, local_mf_name) + fin.write(mf_string) + fin.close() + + sizelist = [] # will hold length of file in bytes + remote_mf_name = file_naming.get(backup_type, manifest = 1, + encrypted = globals.encryption) + remote_fin = backend.get_fileobj_write(remote_mf_name, sizelist = sizelist) + remote_fin.write(mf_string) + remote_fin.close() + return sizelist[0] + + +def get_sig_fileobj(sig_type): + """Return a fileobj opened for writing, save results as signature + + If globals.archive_dir is available, save signatures there + gzipped. Save them on the backend encrypted as needed. + + """ + assert sig_type == "full-sig" or sig_type == "new-sig" + + sig_filename = file_naming.get(sig_type, encrypted = globals.encryption, + gzipped = not globals.encryption) + fh = globals.backend.get_fileobj_write(sig_filename) + + # by MDR. This was changed to use addfilehandle so we get both + # remote and local sig files + if globals.archive_dir: + local_sig_filename = file_naming.get(sig_type, gzipped = 1) + fh.addfilehandle(dup_temp.get_fileobj_duppath(globals.archive_dir, + local_sig_filename)) + return fh + + +def full_backup(col_stats): + """Do full backup of directory to backend, using archive_dir""" + sig_outfp = get_sig_fileobj("full-sig") + tarblock_iter = diffdir.DirFull_WriteSig(globals.select, sig_outfp) + bytes_written = write_multivol("full", tarblock_iter, globals.backend) + sig_outfp.close() + col_stats.set_values(sig_chain_warning = None).cleanup_signatures() + print_statistics(diffdir.stats, bytes_written) + + +def check_sig_chain(col_stats): + """Get last signature chain for inc backup, or None if none available""" + if not col_stats.matched_chain_pair: + if globals.incremental: + log.FatalError("Fatal Error: Unable to start incremental backup. " + "Old signatures not found and incremental specified") + else: + log.Warn("No signatures found, switching to full backup.") + return None + return col_stats.matched_chain_pair[0] + + +def print_statistics(stats, bytes_written): + """If globals.print_statistics, print stats after adding bytes_written""" + if globals.print_statistics: + diffdir.stats.TotalDestinationSizeChange = bytes_written + print diffdir.stats.get_stats_logstring("Backup Statistics") + + +def incremental_backup(sig_chain): + """Do incremental backup of directory to backend, using archive_dir""" + dup_time.setprevtime(sig_chain.end_time) + new_sig_outfp = get_sig_fileobj("new-sig") + tarblock_iter = diffdir.DirDelta_WriteSig(globals.select, + sig_chain.get_fileobjs(), new_sig_outfp) + bytes_written = write_multivol("inc", tarblock_iter, globals.backend) + new_sig_outfp.close() + print_statistics(diffdir.stats, bytes_written) + + +def list_current(col_stats): + """List the files current in the archive (examining signature only)""" + sig_chain = check_sig_chain(col_stats) + if not sig_chain: + log.FatalError("No signature data found, unable to list files.") + path_iter = diffdir.get_combined_path_iter(sig_chain.get_fileobjs()) + for path in path_iter: + if path.difftype != "deleted": + print dup_time.timetopretty(path.getmtime()), \ + path.get_relative_path() + + +def restore(col_stats): + """Restore archive in globals.backend to globals.local_path""" + if not patchdir.Write_ROPaths(globals.local_path, + restore_get_patched_rop_iter(col_stats)): + if globals.restore_dir: + log.FatalError("%s not found in archive, no files restored." + % (globals.restore_dir,)) + else: + log.FatalError("No files found in archive - nothing restored.") + + +def restore_get_patched_rop_iter(col_stats): + """Return iterator of patched ROPaths of desired restore data""" + if globals.restore_dir: + index = tuple(globals.restore_dir.split("/")) + else: + index = () + time = globals.restore_time or dup_time.curtime + backup_chain = col_stats.get_backup_chain_at_time(time) + assert backup_chain, col_stats.all_backup_chains + backup_setlist = backup_chain.get_sets_at_time(time) + + def get_fileobj_iter(backup_set): + """Get file object iterator from backup_set contain given index""" + manifest = backup_set.get_manifest() + for vol_num in manifest.get_containing_volumes(index): + yield restore_get_enc_fileobj(backup_set.backend, + backup_set.volume_name_dict[vol_num], + manifest.volume_info_dict[vol_num]) + + fileobj_iters = map(get_fileobj_iter, backup_setlist) + tarfiles = map(patchdir.TarFile_FromFileobjs, fileobj_iters) + return patchdir.tarfiles2rop_iter(tarfiles, index) + + +def restore_get_enc_fileobj(backend, filename, volume_info): + """Return plaintext fileobj from encrypted filename on backend + + If volume_info is set, the hash of the file will be checked, + assuming some hash is available. Also, if globals.sign_key is + set, a fatal error will be raised if file not signed by sign_key. + + """ + parseresults = file_naming.parse(filename) + tdp = dup_temp.new_tempduppath(parseresults) + backend.get(filename, tdp) + restore_check_hash(volume_info, tdp) + + fileobj = tdp.filtered_open_with_delete("rb") + if parseresults.encrypted and globals.gpg_profile.sign_key: + restore_add_sig_check(fileobj) + return fileobj + + +def restore_check_hash(volume_info, vol_path): + """Check the hash of vol_path path against data in volume_info""" + hash_pair = volume_info.get_best_hash() + if hash_pair: + calculated_hash = gpg.get_hash(hash_pair[0], vol_path) + if calculated_hash != hash_pair[1]: + log.FatalError("Invalid data - %s hash mismatch:\n" + "Calculated hash: %s\n" + "Manifest hash: %s\n" % + (hash_pair[0], calculated_hash, hash_pair[1])) + + +def restore_add_sig_check(fileobj): + """Require signature when closing fileobj matches sig in gpg_profile""" + assert (isinstance(fileobj, dup_temp.FileobjHooked) and + isinstance(fileobj.fileobj, gpg.GPGFile)), fileobj + def check_signature(): + """Thunk run when closing volume file""" + actual_sig = fileobj.fileobj.get_signature() + if actual_sig != globals.gpg_profile.sign_key: + log.FatalError("Volume was not signed by key %s, not %s" % + (actual_sig, globals.gpg_profile.sign_key)) + fileobj.addhook(check_signature) + + +def verify(col_stats): + """Verify files, logging differences""" + global exit_val + collated = diffdir.collate2iters(restore_get_patched_rop_iter(col_stats), + globals.select) + diff_count = 0; total_count = 0 + for backup_ropath, current_path in collated: + if not backup_ropath: + backup_ropath = path.ROPath(current_path.index) + if not current_path: + current_path = path.ROPath(backup_ropath.index) + if not backup_ropath.compare_verbose(current_path): + diff_count += 1 + total_count += 1 + log.Log("Verify complete: %s %s compared, %s %s found." % + (total_count, total_count == 1 and "file" or "files", + diff_count, diff_count == 1 and "difference" or "differences"), 3) + if diff_count >= 1: + exit_val = 1 + + +def cleanup(col_stats): + """Delete the extraneous files in the current backend""" + extraneous = col_stats.get_extraneous() + if not extraneous: + log.Warn("No extraneous files found, nothing deleted in cleanup.") + return + + filestr = "\n".join(extraneous) + if globals.force: + if len(extraneous) > 1: + log.Log("Deleting these files from backend:\n"+filestr, 3) + else: + log.Log("Deleting this file from backend:\n"+filestr, 3) + col_stats.backend.delete(extraneous) + else: + if len(extraneous) > 1: + log.Warn("Found the following files to delete:") + else: + log.Warn("Found the following file to delete:") + log.Warn(filestr + "\nRun duplicity again with the --force " + "option to actually delete.") + +def remove_all_but_n_full(col_stats): + "Remove backup files older than the last n full backups." + assert globals.keep_chains is not None + + globals.remove_time = col_stats.get_nth_last_full_backup_time(globals.keep_chains) + + return remove_old(col_stats) + +def remove_old(col_stats): + """Remove backup files older than globals.remove_time from backend""" + assert globals.remove_time is not None + def set_times_str(setlist): + """Return string listing times of sets in setlist""" + return "\n".join(map(lambda s: dup_time.timetopretty(s.get_time()), + setlist)) + + req_list = col_stats.get_older_than_required(globals.remove_time) + if req_list: + log.Warn("There are backup set(s) at time(s):\n%s\nWhich can't be " + "deleted because newer sets depend on them." % + set_times_str(req_list)) + + if (col_stats.matched_chain_pair and + col_stats.matched_chain_pair[1].end_time < globals.remove_time): + log.Warn("Current active backup chain is older than specified time.\n" + "However, it will not be deleted. To remove all your backups,\n" + "manually purge the repository.") + + setlist = col_stats.get_older_than(globals.remove_time) + if not setlist: + log.Warn("No old backup sets found, nothing deleted.") + return + if globals.force: + if len(setlist) > 1: + log.Log("Deleting backup sets at times:\n" + + set_times_str(setlist), 3) + else: + log.Log("Deleting backup set at times:\n" + + set_times_str(setlist), 3) + setlist.reverse() # save oldest for last + for set in setlist: + set.delete() + col_stats.set_values(sig_chain_warning = None).cleanup_signatures() + else: + if len(setlist) > 1: + log.Warn("Found old backup sets at the following times:") + else: + log.Warn("Found old backup set at the following time:") + log.Warn(set_times_str(setlist) + + "\nRerun command with --force option to actually delete.") + + +def check_last_manifest(col_stats): + """Check consistency and hostname/directory of last manifest""" + if not col_stats.all_backup_chains: + return + last_backup_set = col_stats.all_backup_chains[-1].get_last() + last_backup_set.check_manifests() + + +def main(): + """Start/end here""" + dup_time.setcurtime() + action = commandline.ProcessCommandLine(sys.argv[1:]) + col_stats = collections.CollectionsStatus(globals.backend, + globals.archive_dir).set_values() + log.Log("Collection Status\n-----------------\n" + str(col_stats), 8) + + last_full_time = col_stats.get_last_full_backup_time() + if last_full_time > 0: + log.Log("Last full backup date: " + dup_time.timetopretty(last_full_time), 4) + else: + log.Log("Last full backup date: none", 4) + if action == "inc" and last_full_time < globals.full_force_time: + log.Log("Last full backup is too old, forcing full backup", 3) + action = "full" + + os.umask(077) + + # for public key encryption (without signing!), no passphrase is required. + pubkey_only = (not globals.gpg_profile.sign_key and + globals.gpg_profile.recipients and + globals.encryption) + + # cases where we do not need to get a passphrase: + # full: with pubkey enc. doesn't depend on old encrypted info + # inc and pubkey enc.: need a manifest, which the archive dir has unencrypted + # with encryption disabled + # listing files: needs a manifest, but the archive dir has that + # collection status only looks at a repository + if ((action == "full" and pubkey_only) or + (action == "inc" and pubkey_only and globals.archive_dir) or + (not globals.encryption) or + (action == "list-current" and globals.archive_dir) or + action in ["collection-status", + "remove-older-then", + "remove-all-but-n-full", + ]): + globals.gpg_profile.passphrase = "" + else: + globals.gpg_profile.passphrase = get_passphrase() + + if action == "restore": + restore(col_stats) + elif action == "verify": + verify(col_stats) + elif action == "list-current": + list_current(col_stats) + elif action == "collection-status": + print str(col_stats) + elif action == "cleanup": + cleanup(col_stats) + elif action == "remove-old": + remove_old(col_stats) + elif action == "remove-all-but-n-full": + remove_all_but_n_full(col_stats) + else: + assert action == "inc" or action == "full", action + if action == "full": + full_backup(col_stats) + else: + check_last_manifest(col_stats) # not needed for full backup + sig_chain = check_sig_chain(col_stats) + if not sig_chain: + full_backup(col_stats) + else: + incremental_backup(sig_chain) + globals.backend.close() + if exit_val is not None: + sys.exit(exit_val) + +def with_tempdir(fn): + globals.badfiles = [] + try: + fn() + finally: + for i in globals.badfiles: + try: + os.unlink(i) + except: + pass + + tempdir.default().cleanup() + +if __name__ == "__main__": + with_tempdir(main) diff --git a/thirdparty/duplicity/duplicity/__init__.py b/thirdparty/duplicity/duplicity/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/thirdparty/duplicity/duplicity/_librsync.pyd b/thirdparty/duplicity/duplicity/_librsync.pyd new file mode 100644 index 0000000000000000000000000000000000000000..605c6d53f5a4756da1d713735e681c2fa6ac03a6 GIT binary patch literal 28160 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 literal 0 HcmV?d00001 diff --git a/thirdparty/duplicity/duplicity/backends.py b/thirdparty/duplicity/duplicity/backends.py new file mode 100644 index 000000000..8be95d491 --- /dev/null +++ b/thirdparty/duplicity/duplicity/backends.py @@ -0,0 +1,1039 @@ +# Copyright 2002 Ben Escoto +# +# This file is part of duplicity. +# +# Duplicity is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at your +# option) any later version. +# +# Duplicity is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with duplicity; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +"""Provides functions and classes for getting/sending files to destination""" + +import os, socket, types, tempfile, time, sys +import log, path, dup_temp, file_naming, atexit +import base64, getpass, xml.dom.minidom, httplib, urllib +import socket, globals, re, string +from duplicity import tempdir + +import urlparse_2_5 as urlparser + +socket.setdefaulttimeout(globals.timeout) + +class BackendException(Exception): pass +class ParsingException(Exception): pass + + +def straight_url(parsed_url): + """Return a URL from a urlparse object without a username or password.""" + + # Get a copy of the network location without the username or password. + straight_netloc = parsed_url.netloc.split('@')[-1] + + # Replace the full network location with the stripped copy. + return parsed_url.geturl().replace(parsed_url.netloc, straight_netloc, 1) + + +def ParsedUrl(url_string): + # These URL schemes have a backend with a notion of an RFC "network location". + # The 'file' and 's3+http' schemes should not be in this list. + # 'http' and 'https' are not actually used for duplicity backend urls, but are needed + # in order to properly support urls returned from some webdav servers. adding them here + # is a hack. we should instead not stomp on the url parsing module to begin with. + urlparser.uses_netloc = [ 'ftp', 'hsi', 'rsync', 's3', 'scp', 'ssh', 'webdav', 'webdavs', 'http', 'https' ] + + # Do not transform or otherwise parse the URL path component. + urlparser.uses_query = [] + urlparser.uses_fragment = [] + + pu = urlparser.urlparse(url_string) + + # This happens for implicit local paths. + if not pu.scheme: + return pu + + # Our backends do not handle implicit hosts. + if pu.scheme in urlparser.uses_netloc and not pu.hostname: + log.FatalError('Bad %s:// URL syntax: %s' % (pu.scheme, url_string)) + + # Our backends do not handle implicit relative paths. + if not pu.scheme in urlparser.uses_netloc and not pu.path.startswith('//'): + log.FatalError('Bad %s:// URL syntax: %s' % (pu.scheme, url_string)) + + return pu + + +def get_backend(url_string): + """Return Backend object from url string, or None if not a url string""" + """If a protocol is unsupported a fatal error will be raised.""" + + pu = ParsedUrl(url_string) + + # This happens for implicit local paths. + if not pu.scheme: + return None + + global protocol_class_dict + try: + backend_class = protocol_class_dict[pu.scheme] + except KeyError: + log.FatalError("Unknown scheme '%s'" % (pu.scheme,)) + return backend_class(pu) + + +class Backend: + """Represent a connection to the destination device/computer + + Classes that subclass this should implement the put, get, list, + and delete methods. + + """ + def __init__(self, parsed_url): + self.parsed_url = parsed_url + + def put(self, source_path, remote_filename = None): + """Transfer source_path (Path object) to remote_filename (string) + + If remote_filename is None, get the filename from the last + path component of pathname. + + """ + if not remote_filename: remote_filename = source_path.get_filename() + pass + + def get(self, remote_filename, local_path): + """Retrieve remote_filename and place in local_path""" + local_path.setdata() + pass + + def list(self): + """Return list of filenames (strings) present in backend""" + pass + + def delete(self, filename_list): + """Delete each filename in filename_list, in order if possible""" + pass + + def get_password(self): + """Get a password from the target url or from the environment.""" + + if self.parsed_url.password: + return self.parsed_url.password + + try: + password = os.environ['FTP_PASSWORD'] + except KeyError: + password = getpass.getpass("Password for '%s': " % self.parsed_url.hostname) + os.environ['FTP_PASSWORD'] = password + return password + + def munge_password(self, commandline): + """Remove password from commandline""" + if self.parsed_url.password: + return re.sub(self.parsed_url.password, '', commandline) + else: + return commandline + + def run_command(self, commandline): + """Run given commandline with logging and error detection""" + private = self.munge_password(commandline) + log.Log("Running '%s'" % private, 5) + if os.system(commandline): + raise BackendException("Error running '%s'" % private) + + def run_command_persist(self, commandline): + """Run given commandline with logging and error detection + repeating it several times if it fails""" + private = self.munge_password(commandline) + for n in range(1, globals.num_retries+1): + log.Log("Running '%s' (attempt #%d)" % (private, n), 5) + if not os.system(commandline): + return + log.Log("Running '%s' failed (attempt #%d)" % (private, n), 1) + time.sleep(30) + log.Log("Giving up trying to execute '%s' after %d attempts" % (private, globals.num_retries), 1) + raise BackendException("Error running '%s'" % private) + + def popen(self, commandline): + """Run command and return stdout results""" + private = self.munge_password(commandline) + log.Log("Reading results of '%s'" % private, 5) + fout = os.popen(commandline) + results = fout.read() + if fout.close(): + raise BackendException("Error running '%s'" % private) + return results + + def popen_persist(self, commandline): + """Run command and return stdout results, repeating on failure""" + private = self.munge_password(commandline) + for n in range(1, globals.num_retries+1): + log.Log("Reading results of '%s'" % private, 5) + fout = os.popen(commandline) + results = fout.read() + result_status = fout.close() + if not result_status: + return results + elif result_status == 1280 and self.parsed_url.scheme == 'ftp': + # This squelches the "file not found" result fromm ncftpls when + # the ftp backend looks for a collection that does not exist. + return '' + log.Log("Running '%s' failed (attempt #%d)" % (private, n), 1) + time.sleep(30) + log.Log("Giving up trying to execute '%s' after %d attempts" % (private, globals.num_retries), 1) + raise BackendException("Error running '%s'" % private) + + def get_fileobj_read(self, filename, parseresults = None): + """Return fileobject opened for reading of filename on backend + + The file will be downloaded first into a temp file. When the + returned fileobj is closed, the temp file will be deleted. + + """ + if not parseresults: + parseresults = file_naming.parse(filename) + assert parseresults, "Filename not correctly parsed" + tdp = dup_temp.new_tempduppath(parseresults) + self.get(filename, tdp) + tdp.setdata() + return tdp.filtered_open_with_delete("rb") + + def get_fileobj_write(self, filename, parseresults = None, + sizelist = None): + """Return fileobj opened for writing, write to backend on close + + The file will be encoded as specified in parseresults (or as + read from the filename), and stored in a temp file until it + can be copied over and deleted. + + If sizelist is not None, it should be set to an empty list. + The number of bytes will be inserted into the list. + + """ + if not parseresults: + parseresults = file_naming.parse(filename) + assert parseresults, "Filename %s not correctly parsed" % filename + tdp = dup_temp.new_tempduppath(parseresults) + + def close_file_hook(): + """This is called when returned fileobj is closed""" + self.put(tdp, filename) + if sizelist is not None: + tdp.setdata() + sizelist.append(tdp.getsize()) + tdp.delete() + + fh = dup_temp.FileobjHooked(tdp.filtered_open("wb")) + fh.addhook(close_file_hook) + return fh + + def get_data(self, filename, parseresults = None): + """Retrieve a file from backend, process it, return contents""" + fin = self.get_fileobj_read(filename, parseresults) + buf = fin.read() + assert not fin.close() + return buf + + def put_data(self, buffer, filename, parseresults = None): + """Put buffer into filename on backend after processing""" + fout = self.get_fileobj_write(filename, parseresults) + fout.write(buffer) + assert not fout.close() + + def close(self): + """This is called when a connection is no longer needed""" + pass + + +class LocalBackend(Backend): + """Use this backend when saving to local disk + + Urls look like file://testfiles/output. Relative to root can be + gotten with extra slash (file:///usr/local). + + """ + def __init__(self, parsed_url): + Backend.__init__(self, parsed_url) + # The URL form "file:MyFile" is not a valid duplicity target. + if not parsed_url.path.startswith( '//' ): + raise BackendException( "Bad file:// path syntax." ) + self.remote_pathdir = path.Path(parsed_url.path[2:]) + + def put(self, source_path, remote_filename = None, rename = None): + """If rename is set, try that first, copying if doesn't work""" + if not remote_filename: remote_filename = source_path.get_filename() + target_path = self.remote_pathdir.append(remote_filename) + log.Log("Writing %s" % target_path.name, 6) + if rename: + try: source_path.rename(target_path) + except OSError: pass + else: return + target_path.writefileobj(source_path.open("rb")) + + def get(self, filename, local_path): + """Get file and put in local_path (Path object)""" + source_path = self.remote_pathdir.append(filename) + local_path.writefileobj(source_path.open("rb")) + + def list(self): + """List files in that directory""" + try: + os.makedirs(self.remote_pathdir.base) + except: + pass + return self.remote_pathdir.listdir() + + def delete(self, filename_list): + """Delete all files in filename list""" + assert type(filename_list) is not types.StringType + try: + for filename in filename_list: + self.remote_pathdir.append(filename).delete() + except OSError, e: raise BackendException(str(e)) + + +# The following can be redefined to use different shell commands from +# ssh or scp or to add more arguments. However, the replacements must +# have the same syntax. Also these strings will be executed by the +# shell, so shouldn't have strange characters in them. +scp_command = "scp" +sftp_command = "sftp" + +# default to batch mode using public-key encryption +ssh_askpass = False + +# user added ssh options +ssh_options = "" + +class sshBackend(Backend): + """This backend copies files using scp. List not supported""" + def __init__(self, parsed_url): + """scpBackend initializer""" + Backend.__init__(self, parsed_url) + try: + import pexpect + self.pexpect = pexpect + except ImportError: + self.pexpect = None + if not (self.pexpect and + hasattr(self.pexpect, '__version__') and + self.pexpect.__version__ >= '2.1'): + log.FatalError("This backend requires the pexpect module version 2.1 or later." + "You can get pexpect from http://pexpect.sourceforge.net or " + "python-pexpect from your distro's repository.") + + # host string of form user@hostname:port + self.host_string = parsed_url.netloc + # make sure remote_dir is always valid + if parsed_url.path: + # remove leading '/' + self.remote_dir = re.sub(r'^/', r'', parsed_url.path, 1) + else: + self.remote_dir = '.' + self.remote_prefix = self.remote_dir + '/' + # maybe use different ssh port + if parsed_url.port: + self.ssh_options = ssh_options + " -oPort=%s" % parsed_url.port + else: + self.ssh_options = ssh_options + # set up password + if ssh_askpass: + self.password = self.get_password() + else: + self.password = '' + + def run_scp_command(self, commandline): + """ Run an scp command, responding to password prompts """ + for n in range(1, globals.num_retries+1): + log.Log("Running '%s' (attempt #%d)" % (commandline, n), 5) + child = self.pexpect.spawn(commandline, timeout = globals.timeout) + cmdloc = 0 + if ssh_askpass: + state = "authorizing" + else: + state = "copying" + while 1: + if state == "authorizing": + match = child.expect([self.pexpect.EOF, + self.pexpect.TIMEOUT, + "(?i)password:", + "(?i)permission denied", + "authenticity"], + timeout = globals.timeout) + log.Log("State = %s, Before = '%s'" % (state, child.before.strip()), 9) + if match == 0: + log.Log("Failed to authenticate", 5) + break + elif match == 1: + log.Log("Timeout waiting to authenticate", 5) + break + elif match == 2: + child.sendline(self.password) + state = "copying" + elif match == 3: + log.Log("Invalid SSH password", 1) + break + elif match == 4: + log.Log("Remote host authentication failed (missing known_hosts entry?)", 1) + break + elif state == "copying": + match = child.expect([self.pexpect.EOF, + self.pexpect.TIMEOUT, + "stalled", + "authenticity", + "ETA"], + timeout = globals.timeout) + log.Log("State = %s, Before = '%s'" % (state, child.before.strip()), 9) + if match == 0: + break + elif match == 1: + log.Log("Timeout waiting for response", 5) + break + elif match == 2: + state = "stalled" + elif match == 3: + log.Log("Remote host authentication failed (missing known_hosts entry?)", 1) + break + elif state == "stalled": + match = child.expect([self.pexpect.EOF, + self.pexpect.TIMEOUT, + "ETA"], + timeout = globals.timeout) + log.Log("State = %s, Before = '%s'" % (state, child.before.strip()), 9) + if match == 0: + break + elif match == 1: + log.Log("Stalled for too long, aborted copy", 5) + break + elif match == 2: + state = "copying" + child.close(force = True) + if child.exitstatus == 0: + return + log.Log("Running '%s' failed (attempt #%d)" % (commandline, n), 1) + time.sleep(30) + log.Log("Giving up trying to execute '%s' after %d attempts" % (commandline, globals.num_retries), 1) + raise BackendException("Error running '%s'" % commandline) + + def run_sftp_command(self, commandline, commands): + """ Run an sftp command, responding to password prompts, passing commands from list """ + for n in range(1, globals.num_retries+1): + log.Log("Running '%s' (attempt #%d)" % (commandline, n), 5) + child = self.pexpect.spawn(commandline, timeout = globals.timeout) + cmdloc = 0 + while 1: + match = child.expect([self.pexpect.EOF, + self.pexpect.TIMEOUT, + "sftp>", + "(?i)password:", + "(?i)permission denied", + "authenticity", + "(?i)no such file or directory"]) + log.Log("State = sftp, Before = '%s'" % (child.before.strip()), 9) + if match == 0: + break + elif match == 1: + log.Log("Timeout waiting for response", 5) + break + if match == 2: + if cmdloc < len(commands): + command = commands[cmdloc] + log.Log("sftp command: '%s'" % (command,), 5) + child.sendline(command) + cmdloc += 1 + else: + command = 'quit' + child.sendline(command) + res = child.before + elif match == 3: + child.sendline(self.password) + elif match == 4: + log.Log("Invalid SSH password", 1) + break + elif match == 5: + log.Log("Host key authenticity could not be verified (missing known_hosts entry?)", 1) + break + elif match == 6: + log.Log("Remote file or directory '%s' does not exist" % self.remote_dir, 1) + break + child.close(force = True) + if child.exitstatus == 0: + return res + log.Log("Running '%s' failed (attempt #%d)" % (commandline, n), 1) + time.sleep(30) + log.Log("Giving up trying to execute '%s' after %d attempts" % (commandline, globals.num_retries), 1) + raise BackendException("Error running '%s'" % commandline) + + def put(self, source_path, remote_filename = None): + """Use scp to copy source_dir/filename to remote computer""" + if not remote_filename: remote_filename = source_path.get_filename() + commandline = "%s %s %s %s:%s%s" % \ + (scp_command, self.ssh_options, source_path.name, self.host_string, + self.remote_prefix, remote_filename) + self.run_scp_command(commandline) + + def get(self, remote_filename, local_path): + """Use scp to get a remote file""" + commandline = "%s %s %s:%s%s %s" % \ + (scp_command, self.ssh_options, self.host_string, self.remote_prefix, + remote_filename, local_path.name) + self.run_scp_command(commandline) + local_path.setdata() + if not local_path.exists(): + raise BackendException("File %s not found" % local_path.name) + + def list(self): + """List files available for scp + + Note that this command can get confused when dealing with + files with newlines in them, as the embedded newlines cannot + be distinguished from the file boundaries. + """ + commands = ["mkdir %s" % (self.remote_dir,), + "cd %s" % (self.remote_dir,), + "ls -1"] + commandline = ("%s %s %s" % (sftp_command, self.ssh_options, self.host_string)) + l = self.run_sftp_command(commandline, commands).split('\n')[1:] + return filter(lambda x: x, map(string.strip, l)) + + def delete(self, filename_list): + """Runs sftp rm to delete files. Files must not require quoting""" + commands = ["cd %s" % (self.remote_dir,)] + for fn in filename_list: + commands.append("rm %s" % fn) + commandline = ("%s %s %s" % (sftp_command, self.ssh_options, self.host_string)) + self.run_sftp_command(commandline, commands) + + +class ftpBackend(Backend): + """Connect to remote store using File Transfer Protocol""" + def __init__(self, parsed_url): + Backend.__init__(self, parsed_url) + + # we expect an error return, so go low-level and ignore it + try: + p = os.popen("ncftpls -v") + fout = p.read() + ret = p.close() + except: + pass + # the expected error is 8 in the high-byte and some output + if ret != 0x0800 or not fout: + log.FatalError("NcFTP not found: Please install NcFTP version 3.1.9 or later") + + # version is the second word of the first line + version = fout.split('\n')[0].split()[1] + if version < "3.1.9": + log.FatalError("NcFTP too old: Duplicity requires NcFTP version 3.1.9 or later") + log.Log("NcFTP version is %s" % version, 4) + + self.parsed_url = parsed_url + + self.url_string = straight_url(self.parsed_url) + + # Use an explicit directory name. + if self.url_string[-1] != '/': + self.url_string += '/' + + self.password = self.get_password() + + if globals.ftp_connection == 'regular': + self.conn_opt = '-E' + else: + self.conn_opt = '-F' + + self.tempfile, self.tempname = tempdir.default().mkstemp() + os.write(self.tempfile, "host %s\n" % self.parsed_url.hostname) + os.write(self.tempfile, "user %s\n" % self.parsed_url.username) + os.write(self.tempfile, "pass %s\n" % self.password) + os.close(self.tempfile) + self.flags = "-f %s %s -t %s" % \ + (self.tempname, self.conn_opt, globals.timeout) + if parsed_url.port != None and parsed_url.port != 21: + self.flags += " -P '%s'" % (parsed_url.port) + + def put(self, source_path, remote_filename = None): + """Transfer source_path to remote_filename""" + remote_path = os.path.join(urllib.unquote(self.parsed_url.path.lstrip('/')), remote_filename).rstrip() + commandline = "ncftpput %s -m -V -C '%s' '%s'" % \ + (self.flags, source_path.name, remote_path) + self.run_command_persist(commandline) + + def get(self, remote_filename, local_path): + """Get remote filename, saving it to local_path""" + remote_path = os.path.join(urllib.unquote(self.parsed_url.path), remote_filename).rstrip() + commandline = "ncftpget %s -V -C '%s' '%s' '%s'" % \ + (self.flags, self.parsed_url.hostname, remote_path.lstrip('/'), local_path.name) + self.run_command_persist(commandline) + local_path.setdata() + + def list(self): + """List files in directory""" + # try for a long listing to avoid connection reset + commandline = "ncftpls %s -l '%s'" % \ + (self.flags, self.url_string) + l = self.popen_persist(commandline).split('\n') + l = filter(lambda x: x, l) + if not l: + return l + # if long list is not empty, get short list of names only + commandline = "ncftpls -x '' %s '%s'" % \ + (self.flags, self.url_string) + l = self.popen_persist(commandline).split('\n') + l = [x.split()[-1] for x in l if x] + return l + + def delete(self, filename_list): + """Delete files in filename_list""" + for filename in filename_list: + commandline = "ncftpls -x '' %s -X 'DELE %s' '%s'" % \ + (self.flags, filename, self.url_string) + self.popen_persist(commandline) + + +class rsyncBackend(Backend): + """Connect to remote store using rsync + + rsync backend contributed by Sebastian Wilhelmi + + """ + def __init__(self, parsed_url): + """rsyncBackend initializer""" + Backend.__init__(self, parsed_url) + user, host = parsed_url.netloc.split('@') + if parsed_url.password: + user = user.split(':')[0] + mynetloc = '%s@%s' % (user, host) + # module url: rsync://user@host::/modname/path + # rsync via ssh/rsh: rsync://user@host//some_absolute_path + # -or- rsync://user@host/some_relative_path + if parsed_url.netloc.endswith("::"): + # its a module path + self.url_string = "%s%s" % (mynetloc, parsed_url.path.lstrip('/')) + elif parsed_url.path.startswith("//"): + # its an absolute path + self.url_string = "%s:/%s" % (mynetloc.rstrip(':'), parsed_url.path.lstrip('/')) + else: + # its a relative path + self.url_string = "%s:%s" % (mynetloc.rstrip(':'), parsed_url.path.lstrip('/')) + if self.url_string[-1] != '/': + self.url_string += '/' + + def put(self, source_path, remote_filename = None): + """Use rsync to copy source_dir/filename to remote computer""" + if not remote_filename: remote_filename = source_path.get_filename() + remote_path = os.path.join(self.url_string, remote_filename) + commandline = "rsync %s %s" % (source_path.name, remote_path) + self.run_command(commandline) + + def get(self, remote_filename, local_path): + """Use rsync to get a remote file""" + remote_path = os.path.join (self.url_string, remote_filename) + commandline = "rsync %s %s" % (remote_path, local_path.name) + self.run_command(commandline) + local_path.setdata() + if not local_path.exists(): + raise BackendException("File %s not found" % local_path.name) + + def list(self): + """List files""" + def split (str): + line = str.split () + if len (line) > 4 and line[4] != '.': + return line[4] + else: + return None + commandline = "rsync %s" % self.url_string + return filter(lambda x: x, map (split, self.popen(commandline).split('\n'))) + + def delete(self, filename_list): + """Delete files.""" + delete_list = filename_list + dont_delete_list = [] + for file in self.list (): + if file in delete_list: + delete_list.remove (file) + else: + dont_delete_list.append (file) + if len (delete_list) > 0: + raise BackendException("Files %s not found" % str (delete_list)) + + dir = tempfile.mkdtemp() + exclude, exclude_name = tempdir.default().mkstemp_file() + to_delete = [exclude_name] + for file in dont_delete_list: + path = os.path.join (dir, file) + to_delete.append (path) + f = open (path, 'w') + print >>exclude, file + f.close() + exclude.close() + commandline = ("rsync --recursive --delete --exclude-from=%s %s/ %s" % + (exclude_name, dir, self.url_string)) + self.run_command(commandline) + for file in to_delete: + os.unlink (file) + os.rmdir (dir) + + +class BotoBackend(Backend): + """ + Backend for Amazon's Simple Storage System, (aka Amazon S3), though + the use of the boto module, (http://code.google.com/p/boto/). + + To make use of this backend you must export the environment variables + AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY with your Amazon Web + Services key id and secret respectively. + """ + + def __init__(self, parsed_url): + Backend.__init__(self, parsed_url) + try: + from boto.s3.connection import S3Connection + from boto.s3.key import Key + assert hasattr(S3Connection, 'lookup') + + # Newer versions of boto default to using virtual hosting for + # buckets. This is bad because it will break backups stored in + # buckets that contain upper-case characters in the name. + try: + from boto.s3.connection import OrdinaryCallingFormat + calling_format = OrdinaryCallingFormat() + except ImportError: + calling_format = None + except ImportError: + log.FatalError("This backend requires boto library, version 0.9d or later, " + "(http://code.google.com/p/boto/).") + + if not os.environ.has_key('AWS_ACCESS_KEY_ID'): + raise BackendException("The AWS_ACCESS_KEY_ID environment variable is not set.") + + if not os.environ.has_key('AWS_SECRET_ACCESS_KEY'): + raise BackendException("The AWS_SECRET_ACCESS_KEY environment variable is not set.") + + if parsed_url.scheme == 's3+http': + # Use the default Amazon S3 host. + self.conn = S3Connection() + else: + assert parsed_url.scheme == 's3' + self.conn = S3Connection(host=parsed_url.hostname) + + if hasattr(self.conn, 'calling_format'): + self.conn.calling_format = calling_format + + # This folds the null prefix and all null parts, which means that: + # //MyBucket/ and //MyBucket are equivalent. + # //MyBucket//My///My/Prefix/ and //MyBucket/My/Prefix are equivalent. + self.url_parts = filter(lambda x: x != '', parsed_url.path.split('/')) + + if self.url_parts: + self.bucket_name = self.url_parts.pop(0) + else: + # Duplicity hangs if boto gets a null bucket name. + # HC: Caught a socket error, trying to recover + raise BackendException('Boto requires a bucket name.') + + self.bucket = self.conn.lookup(self.bucket_name) + self.key_class = Key + + if self.url_parts: + self.key_prefix = '%s/' % '/'.join(self.url_parts) + else: + self.key_prefix = '' + + self.straight_url = straight_url(parsed_url) + + + def put(self, source_path, remote_filename=None): + if not self.bucket: + self.bucket = self.conn.create_bucket(self.bucket_name) + if not remote_filename: + remote_filename = source_path.get_filename() + key = self.key_class(self.bucket) + key.key = self.key_prefix + remote_filename + for n in range(1, globals.num_retries+1): + log.Log("Uploading %s/%s" % (self.straight_url, remote_filename), 5) + try: + key.set_contents_from_filename(source_path.name, {'Content-Type': 'application/octet-stream'}) + return + except: + pass + log.Log("Upload '%s/%s' failed (attempt #%d)" % (self.straight_url, remote_filename, n), 1) + time.sleep(30) + log.Log("Giving up trying to upload %s/%s after %d attempts" % (self.straight_url, remote_filename, globals.num_retries), 1) + raise BackendException("Error uploading %s/%s" % (self.straight_url, remote_filename)) + + def get(self, remote_filename, local_path): + key = self.key_class(self.bucket) + key.key = self.key_prefix + remote_filename + for n in range(1, globals.num_retries+1): + log.Log("Downloading %s/%s" % (self.straight_url, remote_filename), 5) + try: + key.get_contents_to_filename(local_path.name) + local_path.setdata() + return + except: + pass + log.Log("Download %s/%s failed (attempt #%d)" % (self.straight_url, remote_filename, n), 1) + time.sleep(30) + log.Log("Giving up trying to download %s/%s after %d attempts" % (self.straight_url, remote_filename, globals.num_retries), 1) + raise BackendException("Error downloading %s/%s" % (self.straight_url, remote_filename)) + + def list(self): + filename_list = [] + if self.bucket: + # We add a 'd' to the prefix to make sure it is not null (for boto) and + # to optimize the listing of our filenames, which always begin with 'd'. + # This will cause a failure in the regression tests as below: + # FAIL: Test basic backend operations + # + # AssertionError: Got list: [] + # Wanted: ['testfile'] + # Because of the need for this optimization, it should be left as is. + #for k in self.bucket.list(prefix = self.key_prefix + 'd', delimiter = '/'): + for k in self.bucket.list(prefix = self.key_prefix, delimiter = '/'): + try: + filename = k.key.replace(self.key_prefix, '', 1) + filename_list.append(filename) + log.Log("Listed %s/%s" % (self.straight_url, filename), 9) + except AttributeError: + pass + return filename_list + + def delete(self, filename_list): + for filename in filename_list: + self.bucket.delete_key(self.key_prefix + filename) + log.Log("Deleted %s/%s" % (self.straight_url, filename), 9) + + +class webdavBackend(Backend): + """Backend for accessing a WebDAV repository. + + webdav backend contributed in 2006 by Jesper Zedlitz + """ + listbody = """\ + + + + + +""" + + """Connect to remote store using WebDAV Protocol""" + def __init__(self, parsed_url): + Backend.__init__(self, parsed_url) + self.headers = {} + self.parsed_url = parsed_url + + + if parsed_url.path: + foldpath = re.compile('/+') + self.directory = foldpath.sub('/', parsed_url.path + '/' ) + else: + self.directory = '/' + + log.Log("Using WebDAV host %s" % (parsed_url.hostname,), 5) + log.Log("Using WebDAV directory %s" % (self.directory,), 5) + log.Log("Using WebDAV protocol %s" % (globals.webdav_proto,), 5) + + password = self.get_password() + + if parsed_url.scheme == 'webdav': + self.conn = httplib.HTTPConnection(parsed_url.hostname) + elif parsed_url.scheme == 'webdavs': + self.conn = httplib.HTTPSConnection(parsed_url.hostname) + else: + raise BackendException("Unknown URI scheme: %s" % (parsed_url.scheme)) + + self.headers['Authorization'] = 'Basic ' + base64.encodestring(parsed_url.username+':'+ password).strip() + + # check password by connection to the server + self.conn.request("OPTIONS", self.directory, None, self.headers) + response = self.conn.getresponse() + response.read() + if response.status != 200: + raise BackendException((response.status, response.reason)) + + def _getText(self,nodelist): + rc = "" + for node in nodelist: + if node.nodeType == node.TEXT_NODE: + rc = rc + node.data + return rc + + def close(self): + self.conn.close() + + def list(self): + """List files in directory""" + for n in range(1, globals.num_retries+1): + log.Log("Listing directory %s on WebDAV server" % (self.directory,), 5) + self.headers['Depth'] = "1" + self.conn.request("PROPFIND", self.directory, self.listbody, self.headers) + del self.headers['Depth'] + response = self.conn.getresponse() + if response.status == 207: + document = response.read() + break + log.Log("WebDAV PROPFIND attempt #%d failed: %s %s" % (n, response.status, response.reason), 5) + if n == globals.num_retries +1: + log.Log("WebDAV backend giving up after %d attempts to PROPFIND %s" % (globals.num_retries, self.directory), 1) + raise BackendException((response.status, response.reason)) + + log.Log("%s" % (document,), 6) + dom = xml.dom.minidom.parseString(document) + result = [] + for href in dom.getElementsByTagName('D:href'): + filename = self.__taste_href(href) + if not filename is None: + result.append(filename) + return result + + def __taste_href(self, href): + """ + Internal helper to taste the given href node and, if + it is a duplicity file, collect it as a result file. + + @returns A matching filename, or None if the href did + not match. + """ + raw_filename = self._getText(href.childNodes).strip() + parsed_url = urlparser.urlparse(urllib.unquote(raw_filename)) + filename = parsed_url.path + log.Debug("webdav path decoding and translation: "\ + "%s -> %s" % (raw_filename, filename)) + + # at least one WebDAV server returns files in the form + # of full URL:s. this may or may not be + # according to the standard, but regardless we + # feel we want to bail out if the hostname + # does not match until someone has looked into + # what the WebDAV protocol mandages. + if not parsed_url.hostname is None \ + and not (parsed_url.hostname == self.parsed_url.hostname): + m = "Received filename was in the form of a "\ + "full url, but the hostname (%s) did "\ + "not match that of the webdav backend "\ + "url (%s) - aborting as a conservative "\ + "safety measure. If this happens to you, "\ + "please report the problem"\ + "" % (parsed_url.hostname, + self.parsed_url.hostname) + raise BackendException(m) + + if filename.startswith(self.directory): + filename = filename.replace(self.directory,'',1) + return filename + else: + return None + + def get(self, remote_filename, local_path): + """Get remote filename, saving it to local_path""" + url = self.directory + remote_filename + target_file = local_path.open("wb") + for n in range(1, globals.num_retries+1): + log.Log("Retrieving %s from WebDAV server" % (url ,), 5) + self.conn.request("GET", url, None, self.headers) + response = self.conn.getresponse() + if response.status == 200: + target_file.write(response.read()) + assert not target_file.close() + local_path.setdata() + return + log.Log("WebDAV GET attempt #%d failed: %s %s" % (n, response.status, response.reason), 5) + log.Log("WebDAV backend giving up after %d attempts to GET %s" % (globals.num_retries, url), 1) + raise BackendException((response.status, response.reason)) + + def put(self, source_path, remote_filename = None): + """Transfer source_path to remote_filename""" + if not remote_filename: + remote_filename = source_path.get_filename() + url = self.directory + remote_filename + source_file = source_path.open("rb") + for n in range(1, globals.num_retries+1): + log.Log("Saving %s on WebDAV server" % (url ,), 5) + self.conn.request("PUT", url, source_file.read(), self.headers) + response = self.conn.getresponse() + if response.status == 201: + response.read() + assert not source_file.close() + return + log.Log("WebDAV PUT attempt #%d failed: %s %s" % (n, response.status, response.reason), 5) + log.Log("WebDAV backend giving up after %d attempts to PUT %s" % (globals.num_retries, url), 1) + raise BackendException((response.status, response.reason)) + + def delete(self, filename_list): + """Delete files in filename_list""" + for filename in filename_list: + url = self.directory + filename + for n in range(1, globals.num_retries+1): + log.Log("Deleting %s from WebDAV server" % (url ,), 5) + self.conn.request("DELETE", url, None, self.headers) + response = self.conn.getresponse() + if response.status == 204: + response.read() + break + log.Log("WebDAV DELETE attempt #%d failed: %s %s" % (n, response.status, response.reason), 5) + if n == globals.num_retries +1: + log.Log("WebDAV backend giving up after %d attempts to DELETE %s" % (globals.num_retries, url), 1) + raise BackendException((response.status, response.reason)) + +hsi_command = "hsi" +class hsiBackend(Backend): + def __init__(self, parsed_url): + Backend.__init__(self, parsed_url) + self.host_string = parsed_url.hostname + self.remote_dir = parsed_url.path + if self.remote_dir: self.remote_prefix = self.remote_dir + "/" + else: self.remote_prefix = "" + + def put(self, source_path, remote_filename = None): + if not remote_filename: remote_filename = source_path.get_filename() + commandline = '%s "put %s : %s%s"' % (hsi_command,source_path.name,self.remote_prefix,remote_filename) + try: + self.run_command(commandline) + except: + print commandline + + def get(self, remote_filename, local_path): + commandline = '%s "get %s : %s%s"' % (hsi_command, local_path.name, self.remote_prefix, remote_filename) + self.run_command(commandline) + local_path.setdata() + if not local_path.exists(): + raise BackendException("File %s not found" % local_path.name) + + def list(self): + commandline = '%s "ls -l %s"' % (hsi_command, self.remote_dir) + l = os.popen3(commandline)[2].readlines()[3:] + for i in range(0,len(l)): + l[i] = l[i].split()[-1] + print filter(lambda x: x, l) + return filter(lambda x: x, l) + + def delete(self, filename_list): + assert len(filename_ist) > 0 + pathlist = map(lambda fn: self.remote_prefix + fn, filename_list) + for fn in filename_list: + commandline = '%s "rm %s%s"' % (hsi_command, self.remote_prefix, fn) + self.run_command(commandline) + +# Dictionary relating protocol strings to backend_object classes. +protocol_class_dict = {"file": LocalBackend, + "ftp": ftpBackend, + "hsi": hsiBackend, + "rsync": rsyncBackend, + "scp": sshBackend, + "ssh": sshBackend, + "s3": BotoBackend, + "s3+http": BotoBackend, + "webdav": webdavBackend, + "webdavs": webdavBackend, + } diff --git a/thirdparty/duplicity/duplicity/collections.py b/thirdparty/duplicity/duplicity/collections.py new file mode 100644 index 000000000..07748c33e --- /dev/null +++ b/thirdparty/duplicity/duplicity/collections.py @@ -0,0 +1,836 @@ +# Copyright 2002 Ben Escoto +# +# This file is part of duplicity. +# +# Duplicity is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at your +# option) any later version. +# +# Duplicity is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with duplicity; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +"""Classes and functions on collections of backup volumes""" + +import gzip, types +import log, file_naming, path, dup_time, globals, manifest + +class CollectionsError(Exception): + pass + +class BackupSet: + """Backup set - the backup information produced by one session""" + def __init__(self, backend): + """Initialize new backup set, only backend is required at first""" + self.backend = backend + self.info_set = None + self.volume_name_dict = {} # dict from volume number to filename + self.remote_manifest_name = None + self.local_manifest_path = None + self.time = None # will be set if is full backup set + self.start_time, self.end_time = None, None # will be set if inc + + def is_complete(self): + """Assume complete if found manifest file""" + return self.remote_manifest_name + + def add_filename(self, filename): + """Add a filename to given set. Return true if it fits. + + The filename will match the given set if it has the right + times and is of the right type. The information will be set + from the first filename given. + + """ + pr = file_naming.parse(filename) + if not pr or not (pr.type == "full" or pr.type == "inc"): + return None + + if not self.info_set: + self.set_info(pr) + else: + if pr.type != self.type: + return None + if pr.time != self.time: + return None + if (pr.start_time != self.start_time or + pr.end_time != self.end_time): + return None + + if pr.manifest: + self.set_manifest(filename) + else: + assert pr.volume_number is not None + assert not self.volume_name_dict.has_key(pr.volume_number), \ + (self.volume_name_dict, filename) + self.volume_name_dict[pr.volume_number] = filename + return 1 + + def set_info(self, pr): + """Set BackupSet information from ParseResults object""" + assert not self.info_set + self.type = pr.type + self.time = pr.time + self.start_time, self.end_time = pr.start_time, pr.end_time + self.time = pr.time + self.info_set = 1 + + def set_manifest(self, remote_filename): + """Add local and remote manifest filenames to backup set""" + assert not self.remote_manifest_name, (self.remote_manifest_name, + remote_filename) + self.remote_manifest_name = remote_filename + + if not globals.archive_dir: + return + for local_filename in globals.archive_dir.listdir(): + pr = file_naming.parse(local_filename) + if (pr and pr.manifest and pr.type == self.type and + pr.time == self.time and pr.start_time == self.start_time + and pr.end_time == self.end_time): + self.local_manifest_path = \ + globals.archive_dir.append(local_filename) + break + + def delete(self): + """Remove all files in set""" + l = self.get_filenames() + l.reverse() # delete starting with manifest + self.backend.delete(l) + + def __str__(self): + """For now just list files in set""" + filelist = [] + if self.remote_manifest_name: + filelist.append(self.remote_manifest_name) + filelist.extend(self.volume_name_dict.values()) + return "[%s]" % ", ".join(filelist) + + def get_timestr(self): + """Return time string suitable for log statements""" + return dup_time.timetopretty(self.time or self.end_time) + + def check_manifests(self): + """Make sure remote manifest is equal to local one""" + if not self.remote_manifest_name and not self.local_manifest_path: + log.FatalError("Fatal Error: No manifests found for most recent backup") + assert self.remote_manifest_name, "if only one, should be remote" + + remote_manifest = self.get_remote_manifest() + if self.local_manifest_path: + local_manifest = self.get_local_manifest() + if remote_manifest and self.local_manifest_path and local_manifest: + if remote_manifest != local_manifest: + log.FatalError("Fatal Error: Remote manifest does not match local one. Either the " + "remote backup set or the local archive directory has been corrupted.") + if not remote_manifest: + if self.local_manifest_path: + remote_manifest = local_manifest + else: + log.FatalError("Fatal Error: Neither remote nor local manifest is readable.") + remote_manifest.check_dirinfo() + + def get_local_manifest(self): + """Return manifest object by reading local manifest file""" + assert self.local_manifest_path + manifest_buffer = self.local_manifest_path.get_data() + return manifest.Manifest().from_string(manifest_buffer) + + def get_remote_manifest(self): + """Return manifest by reading remote manifest on backend""" + assert self.remote_manifest_name + # Following by MDR. Should catch if remote encrypted with + # public key w/o secret key + try: + manifest_buffer = self.backend.get_data(self.remote_manifest_name) + except IOError, message: + if message.args[0] == "GnuPG exited non-zero, with code 131072": + return None + else: + raise + return manifest.Manifest().from_string(manifest_buffer) + + def get_manifest(self): + """Return manifest object, showing preference for local copy""" + if self.local_manifest_path: + return self.get_local_manifest() + else: + return self.get_remote_manifest() + + def get_filenames(self): + """Return sorted list of (remote) filenames of files in set""" + assert self.info_set + volume_num_list = self.volume_name_dict.keys() + volume_num_list.sort() + volume_filenames = map(lambda x: self.volume_name_dict[x], + volume_num_list) + if self.remote_manifest_name: + return [self.remote_manifest_name] + volume_filenames + else: + return volume_filenames + + def get_time(self): + """Return time if full backup, or end_time if incremental""" + if self.time: + return self.time + if self.end_time: + return self.end_time + assert 0, "Neither self.time nor self.end_time set" + + def __len__(self): + """Return the number of volumes in the set""" + return len(self.volume_name_dict.keys()) + + +class BackupChain: + """BackupChain - a number of linked BackupSets + + A BackupChain always starts with a full backup set and continues + with incremental ones. + + """ + def __init__(self, backend): + """Initialize new chain, only backend is required at first""" + self.backend = backend + self.fullset = None + self.incset_list = [] # sorted list of BackupSets + self.start_time, self.end_time = None, None + + def set_full(self, fullset): + """Add full backup set""" + assert not self.fullset and isinstance(fullset, BackupSet) + self.fullset = fullset + assert fullset.time + self.start_time, self.end_time = fullset.time, fullset.time + + def add_inc(self, incset): + """Add incset to self. Return None if incset does not match""" + if self.end_time == incset.start_time: + self.incset_list.append(incset) + else: + if (self.incset_list + and incset.start_time == self.incset_list[-1].start_time + and incset.end_time > self.incset_list[-1]): + log.Log("Preferring Backupset over previous one!", 8) + self.incset_list[-1] = incset + else: + log.Log("Ignoring incremental Backupset (start_time: %s; needed: %s)" % + (dup_time.timetopretty(incset.start_time), + dup_time.timetopretty(self.end_time)), 8) + return None + self.end_time = incset.end_time + log.Log("Added incremental Backupset (start_time: %s / end_time: %s)" % + (dup_time.timetopretty(incset.start_time), + dup_time.timetopretty(incset.end_time)), 8) + assert self.end_time + return 1 + + def delete(self): + """Delete all sets in chain, in reverse order""" + for i in range(len(self.incset_list)-1, -1, -1): + self.incset_list[i].delete() + if self.fullset: + self.fullset.delete() + + def get_sets_at_time(self, time): + """Return a list of sets in chain earlier or equal to time""" + older_incsets = filter(lambda s: s.end_time <= time, self.incset_list) + return [self.fullset] + older_incsets + + def get_last(self): + """Return last BackupSet in chain""" + if self.incset_list: + return self.incset_list[-1] + else: + return self.fullset + + def get_first(self): + """Return first BackupSet in chain (ie the full backup)""" + return self.fullset + + def short_desc(self): + """Return a short one-line description of the chain, suitable + for log messages.""" + return "[%s]-[%s]" % (dup_time.timetopretty(self.start_time), + dup_time.timetopretty(self.end_time)) + + def __str__(self): + """Return string representation, for testing purposes""" + set_schema = "%20s %30s %15s" + l = ["-------------------------", + "Chain start time: " + dup_time.timetopretty(self.start_time), + "Chain end time: " + dup_time.timetopretty(self.end_time), + "Number of contained backup sets: %d" % + (len(self.incset_list)+1,), + "Total number of contained volumes: %d" % + (self.get_num_volumes(),), + set_schema % ("Type of backup set:", "Time:", "Num volumes:")] + + for s in self.get_all_sets(): + if s.time: + type = "Full" + time = s.time + else: + type = "Incremental" + time = s.end_time + l.append(set_schema % (type, dup_time.timetopretty(time), len(s))) + + l.append("-------------------------") + return "\n".join(l) + + def get_num_volumes(self): + """Return the total number of volumes in the chain""" + n = 0 + for s in self.get_all_sets(): + n += len(s) + return n + + def get_all_sets(self): + """Return list of all backup sets in chain""" + if self.fullset: + return [self.fullset] + self.incset_list + else: + return self.incset_list + + +class SignatureChain: + """A number of linked signatures + + Analog to BackupChain - start with a full-sig, and continue with + new-sigs. + + """ + def __init__(self, local, location): + """Return new SignatureChain. + + local should be true iff the signature chain resides in + globals.archive_dir and false if the chain is in + globals.backend. + + """ + if local: + self.archive_dir, self.backend = location, None + else: + self.archive_dir, self.backend = None, location + self.fullsig = None # filename of full signature + self.inclist = [] # list of filenames of incremental signatures + self.start_time, self.end_time = None, None + + def __str__(self): + """Local or Remote and List of files in the set""" + if self.archive_dir: + place = "local" + else: + place = "remote" + filelist = [] + if self.fullsig: + filelist.append(self.fullsig) + filelist.extend(self.inclist) + return "%s: [%s]" % (place, ", ".join(filelist)) + + def check_times(self, time_list): + """Check to make sure times are in whole seconds""" + for time in time_list: + if type(time) not in (types.LongType, types.IntType): + assert 0, "Time %s in %s wrong type" % (time, time_list) + + def islocal(self): + """Return true if represents a signature chain in archive_dir""" + if self.archive_dir: + return True + else: + return False + + def add_filename(self, filename, pr = None): + """Add new sig filename to current chain. Return true if fits""" + if not pr: + pr = file_naming.parse(filename) + if not pr: + return None + + if self.fullsig: + if pr.type != "new-sig": + return None + if pr.start_time != self.end_time: + return None + self.inclist.append(filename) + self.check_times([pr.end_time]) + self.end_time = pr.end_time + return 1 + else: + if pr.type != "full-sig": + return None + self.fullsig = filename + self.check_times([pr.time, pr.time]) + self.start_time, self.end_time = pr.time, pr.time + return 1 + + def get_fileobjs(self): + """Return ordered list of signature fileobjs opened for reading""" + assert self.fullsig + if self.archive_dir: # local + def filename_to_fileobj(filename): + """Open filename in archive_dir, return filtered fileobj""" + sig_dp = path.DupPath(self.archive_dir.name, (filename,)) + return sig_dp.filtered_open("rb") + else: + filename_to_fileobj = self.backend.get_fileobj_read + return map(filename_to_fileobj, [self.fullsig] + self.inclist) + + def delete(self): + """Remove all files in signature set""" + # Try to delete in opposite order, so something useful even if aborted + if self.archive_dir: + for i in range(len(self.inclist)-1, -1, -1): + self.archive_dir.append(self.inclist[i]).delete() + self.archive_dir.append(self.fullsig).delete() + else: + assert self.backend + inclist_copy = self.inclist[:] + inclist_copy.reverse() + inclist_copy.append(self.fullsig) + self.backend.delete(inclist_copy) + + def get_filenames(self): + """Return ordered list of filenames in set""" + if self.fullsig: + l = [self.fullsig] + else: + l = [] + l.extend(self.inclist) + return l + + +class CollectionsStatus: + """Hold information about available chains and sets""" + def __init__(self, backend, archive_dir = None): + """Make new object. Does not set values""" + self.backend, self.archive_dir = backend, archive_dir + + # Will hold (signature chain, backup chain) pair of active + # (most recent) chains + self.matched_chain_pair = None + + # These should be sorted by end_time + self.all_backup_chains = None + self.other_backup_chains = None + self.other_sig_chains = None + + # Other misc paths and sets which shouldn't be there + self.orphaned_sig_names = None + self.orphaned_backup_sets = None + self.incomplete_backup_sets = None + + # True if set_values() below has run + self.values_set = None + + def __str__(self): + """Return string summary of the collection""" + l = ["Connecting with backend: %s" % + (self.backend.__class__.__name__,), + "Archive dir: %s" % (self.archive_dir,)] + + l.append("\nFound %d backup chains without signatures." + % len(self.other_backup_chains)) + for i in range(len(self.other_backup_chains)): + l.append("Signature-less chain %d of %d:" % + (i+1, len(self.other_backup_chains))) + l.append(str(self.other_backup_chains[i])) + l.append("") + + if self.matched_chain_pair: + l.append("\nFound a complete backup chain with matching " + "signature chain:") + l.append(str(self.matched_chain_pair[1])) + else: + l.append("No backup chains with active signatures found") + + if self.orphaned_backup_sets or self.incomplete_backup_sets: + l.append("Also found %d backup sets not part of any chain," + % (len(self.orphaned_backup_sets),)) + l.append("and %d incomplete backup sets." + % (len(self.incomplete_backup_sets),)) + l.append("These may be deleted by running duplicity with the " + "--cleanup option.") + else: + l.append("No orphaned or incomplete backup sets found.") + + return "\n".join(l) + + def set_values(self, sig_chain_warning = 1): + """Set values from archive_dir and backend. + + if archive_dir is None, omit any local chains. Returns self + for convenience. If sig_chain_warning is set to None, do not + warn about unnecessary sig chains. This is because there may + naturally be some unecessary ones after a full backup. + + """ + self.values_set = 1 + backend_filename_list = self.backend.list() + log.Debug("%d files exist on backend" % (len(backend_filename_list,))) + + (backup_chains, self.orphaned_backup_sets, + self.incomplete_backup_sets) = \ + self.get_backup_chains(backend_filename_list) + backup_chains = self.get_sorted_chains(backup_chains) + self.all_backup_chains = backup_chains + + assert len(backup_chains) == len(self.all_backup_chains), "get_sorted_chains() did something more than re-ordering" + + if self.archive_dir: + local_sig_chains, local_orphaned_sig_names = \ + self.get_signature_chains(True) + else: + local_sig_chains, local_orphaned_sig_names = [], [] + remote_sig_chains, remote_orphaned_sig_names = \ + self.get_signature_chains(False, filelist = backend_filename_list) + self.orphaned_sig_names = (local_orphaned_sig_names + + remote_orphaned_sig_names) + self.set_matched_chain_pair(local_sig_chains + remote_sig_chains, + backup_chains) + self.warn(sig_chain_warning) + return self + + def set_matched_chain_pair(self, sig_chains, backup_chains): + """Set self.matched_chain_pair and self.other_sig/backup_chains + + The latest matched_chain_pair will be set. If there are both + remote and local signature chains capable of matching the + latest backup chain, use the local sig chain (it does not need + to be downloaded). + + """ + self.other_sig_chains = sig_chains + self.other_backup_chains = backup_chains[:] + self.matched_chain_pair = None + if sig_chains and backup_chains: + latest_backup_chain = backup_chains[-1] + sig_chains = self.get_sorted_chains(sig_chains) + for i in range(len(sig_chains)-1, -1, -1): + if sig_chains[i].end_time == latest_backup_chain.end_time: + pass + # See if the set before last matches: + elif (len(latest_backup_chain.get_all_sets()) >= 2 and + sig_chains[i].end_time == latest_backup_chain.get_all_sets()[-2].end_time): + # It matches, remove the last backup set: + log.Warn("Warning, discarding last backup set, because of missing signature file.") + self.incomplete_backup_sets.append(latest_backup_chain.incset_list[-1]) + latest_backup_chain.incset_list = latest_backup_chain.incset_list[:-1] + else: + continue + + # Found a matching pair: + if self.matched_chain_pair == None: + self.matched_chain_pair = (sig_chains[i], latest_backup_chain) + + del sig_chains[i] + break + + if self.matched_chain_pair: + # if we have local and remote sig chains, remove both from the other_sig_chains list + matched_sig_chain = self.matched_chain_pair[0] + if len(self.other_sig_chains) > 1: + for sig_chain in self.other_sig_chains[1:]: + if (sig_chain.islocal() != matched_sig_chain.islocal() and + sig_chain.start_time == matched_sig_chain.start_time and + sig_chain.end_time == matched_sig_chain.end_time): + self.other_sig_chains.remove(sig_chain) + self.other_sig_chains.remove(matched_sig_chain) + self.other_backup_chains.remove(self.matched_chain_pair[1]) + + def warn(self, sig_chain_warning): + """Log various error messages if find incomplete/orphaned files""" + assert self.values_set + if self.orphaned_sig_names: + log.Log("Warning, found the following orphaned signature files:\n" + + "\n".join(self.orphaned_sig_names), 2) + if self.other_sig_chains and sig_chain_warning: + if self.matched_chain_pair: + log.Log("Warning, found unnecessary signature chain(s)", 2) + else: + log.Log("Warning, found signatures but no corresponding " + "backup files", 2) + + if self.incomplete_backup_sets: + log.Log("Warning, found incomplete backup sets, probably left " + "from aborted session", 2) + if self.orphaned_backup_sets: + log.Log("Warning, found the following orphaned backup files:\n" + + "\n".join(map(lambda x: str(x), + self.orphaned_backup_sets)), 2) + + def get_backup_chains(self, filename_list): + """Split given filename_list into chains + + Return value will be pair (list of chains, list of sets, list + of incomplete sets), where the list of sets will comprise sets + not fitting into any chain, and the incomplete sets are sets + missing files. + + """ + log.Debug("Extracting backup chains from list of files: %s" % (filename_list,)) + # First put filenames in set form + sets = [] + def add_to_sets(filename): + """Try adding filename to existing sets, or make new one""" + for set in sets: + if set.add_filename(filename): + log.Debug("File %s is part of known set" % (filename,)) + break + else: + log.Debug("File %s is not part of a known set; creating new set" % (filename,)) + new_set = BackupSet(self.backend) + if new_set.add_filename(filename): + sets.append(new_set) + else: + log.Log("Ignoring file (rejected by backup set) '%s'" % filename, 9) + map(add_to_sets, filename_list) + sets, incomplete_sets = self.get_sorted_sets(sets) + + chains, orphaned_sets = [], [] + def add_to_chains(set): + """Try adding set to existing chains, or make new one""" + if set.type == "full": + new_chain = BackupChain(self.backend) + new_chain.set_full(set) + chains.append(new_chain) + log.Debug("Found backup chain %s" % (new_chain.short_desc())) + else: + assert set.type == "inc" + for chain in chains: + if chain.add_inc(set): + log.Debug("Added set %s to pre-existing chain %s" % (set.get_timestr(), + chain.short_desc())) + break + else: + log.Debug("Found orphaned set %s" % (set.get_timestr(),)) + orphaned_sets.append(set) + map(add_to_chains, sets) + return (chains, orphaned_sets, incomplete_sets) + + def get_sorted_sets(self, set_list): + """Sort set list by end time, return (sorted list, incomplete)""" + time_set_pairs, incomplete_sets = [], [] + for set in set_list: + if not set.is_complete(): + incomplete_sets.append(set) + elif set.type == "full": + time_set_pairs.append((set.time, set)) + else: + time_set_pairs.append((set.end_time, set)) + time_set_pairs.sort() + return (map(lambda p: p[1], time_set_pairs), incomplete_sets) + + def get_signature_chains(self, local, filelist = None): + """Find chains in archive_dir (if local is true) or backend + + Use filelist if given, otherwise regenerate. Return value is + pair (list of chains, list of signature paths not in any + chains). + + """ + def get_filelist(): + if filelist is not None: + return filelist + elif local: + return self.archive_dir.listdir() + else: + return self.backend.list() + + def get_new_sigchain(): + """Return new empty signature chain""" + if local: + return SignatureChain(True, self.archive_dir) + else: + return SignatureChain(False, self.backend) + + # Build initial chains from full sig filenames + chains, new_sig_filenames = [], [] + for filename in get_filelist(): + pr = file_naming.parse(filename) + if pr: + if pr.type == "full-sig": + new_chain = get_new_sigchain() + assert new_chain.add_filename(filename, pr) + chains.append(new_chain) + elif pr.type == "new-sig": + new_sig_filenames.append(filename) + + # Try adding new signatures to existing chains + orphaned_filenames = [] + new_sig_filenames.sort() + for sig_filename in new_sig_filenames: + for chain in chains: + if chain.add_filename(sig_filename): + break + else: + orphaned_filenames.append(sig_filename) + return (chains, orphaned_filenames) + + def get_sorted_chains(self, chain_list): + """Return chains sorted by end_time. If tie, local goes last""" + # Build dictionary from end_times to lists of corresponding chains + endtime_chain_dict = {} + for chain in chain_list: + if endtime_chain_dict.has_key(chain.end_time): + endtime_chain_dict[chain.end_time].append(chain) + else: + endtime_chain_dict[chain.end_time] = [chain] + + # Use dictionary to build final sorted list + sorted_end_times = endtime_chain_dict.keys() + sorted_end_times.sort() + sorted_chain_list = [] + for end_time in sorted_end_times: + chain_list = endtime_chain_dict[end_time] + if len(chain_list) == 1: + sorted_chain_list.append(chain_list[0]) + else: + assert len(chain_list) == 2 + if chain_list[0].backend: # is remote, goes first + assert chain_list[1].archive_dir # other is local + sorted_chain_list.append(chain_list[0]) + sorted_chain_list.append(chain_list[1]) + else: # is local, goes second + assert chain_list[1].backend # other is remote + sorted_chain_list.append(chain_list[1]) + sorted_chain_list.append(chain_list[0]) + + return sorted_chain_list + + def get_backup_chain_at_time(self, time): + """Return backup chain covering specified time + + Tries to find the backup chain covering the given time. If + there is none, return the earliest chain before, and failing + that, the earliest chain. + + """ + if not self.all_backup_chains: + raise CollectionsError("No backup chains found") + + covering_chains = filter(lambda c: c.start_time <= time <= c.end_time, + self.all_backup_chains) + if len(covering_chains) > 1: + raise CollectionsError("Two chains cover the given time") + elif len(covering_chains) == 1: + return covering_chains[0] + + old_chains = filter(lambda c: c.end_time < time, + self.all_backup_chains) + if old_chains: + return old_chains[-1] + else: + return self.all_backup_chains[0] # no chains are old enough + + def cleanup_signatures(self): + """Delete unnecessary older signatures""" + map(SignatureChain.delete, self.other_sig_chains) + + def get_extraneous(self): + """Return list of the names of extraneous duplicity files + + A duplicity file is considered extraneous if it is + recognizable as a duplicity file, but isn't part of some + complete backup set, or current signature chain. + + """ + assert self.values_set + filenames = [] + ext_containers = (self.other_sig_chains, self.orphaned_backup_sets, + self.incomplete_backup_sets) + for set_or_chain_list in ext_containers: + for set_or_chain in set_or_chain_list: + filenames.extend(set_or_chain.get_filenames()) + filenames.extend(self.orphaned_sig_names) + return filenames + + def sort_sets(self, setlist): + """Return new list containing same elems of setlist, sorted by time""" + pairs = map(lambda s: (s.get_time(), s), setlist) + pairs.sort() + return map(lambda p: p[1], pairs) + + def get_chains_older_than(self, t): + """Return a list of chains older than time t""" + assert self.values_set + return filter(lambda c: c.end_time < t, self.all_backup_chains) + + def get_last_full_backup_time(self): + """Return the time of the last full backup, or 0 if + there is none.""" + return self.get_nth_last_full_backup_time(1) + + def get_nth_last_full_backup_time(self, n): + """Return the time of the nth to last full backup, or 0 + if there is none.""" + chain = self.get_nth_last_backup_chain(n) + if chain is None: + return 0 + else: + return chain.get_first().time + + def get_last_backup_chain(self): + """Return the last full backup of the collection, or None + if there is no full backup chain.""" + return self.get_nth_last_backup_chain(1) + + def get_nth_last_backup_chain(self,n): + """Return the nth-to-last full backup of the collection, or None + if there is less than n backup chains. + + NOTE: n = 1 -> time of latest available chain (n = 0 is not + a valid input). Thus the second-to-last is obtained with n=2 + rather than n=1.""" + assert self.values_set + assert n > 0 + + if len(self.all_backup_chains) < n: + return None + + sorted = self.all_backup_chains[:] + sorted.sort(reverse = True, + key = lambda chain: chain.get_first().time) + + return sorted[n - 1] + + def get_older_than(self, t): + """Returns a list of backup sets older than the given time t + + All of the times will be associated with an intact chain. + Furthermore, none of the times will be of a set which a newer + set may depend on. For instance, if set A is a full set older + than t, and set B is an incremental based on A which is newer + than tt, then the time of set A will not be returned. + + """ + old_sets = [] + for chain in self.get_chains_older_than(t): + if (not self.matched_chain_pair or + chain is not self.matched_chain_pair[1]): + # don't delete the active (matched) chain + old_sets.extend(chain.get_all_sets()) + return self.sort_sets(old_sets) + + def get_older_than_required(self, t): + """Returns list of old backup sets required by new sets + + This function is similar to the previous one, but it only + returns the times of sets which are old but part of the chains + where the newer end of the chain is newer than t. + + """ + assert self.values_set + new_chains = filter(lambda c: c.end_time >= t, self.all_backup_chains) + result_sets = [] + for chain in new_chains: + old_sets = filter(lambda s: s.get_time() < t, chain.get_all_sets()) + result_sets.extend(old_sets) + return self.sort_sets(result_sets) diff --git a/thirdparty/duplicity/duplicity/commandline.py b/thirdparty/duplicity/duplicity/commandline.py new file mode 100644 index 000000000..f8b3f59dd --- /dev/null +++ b/thirdparty/duplicity/duplicity/commandline.py @@ -0,0 +1,476 @@ +# Copyright 2002 Ben Escoto +# +# This file is part of duplicity. +# +# Duplicity is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at your +# option) any later version. +# +# Duplicity is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with duplicity; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +"""Parse command line, check for consistency, and set globals""" + +import getopt, re, sys, os +import backends, globals, log, path, selection, gpg, dup_time + +select_opts = [] # Will hold all the selection options +select_files = [] # Will hold file objects when filelist given +full_backup = None # Will be set to true if -f or --full option given +list_current = None # Will be set to true if --list-current option given +collection_status = None # Will be set to true if --collection-status given +cleanup = None # Set to true if --cleanup option given +verify = None # Set to true if --verify option given + +commands = ["cleanup", + "collection-status", + "full", + "incremental", + "list-current-files", + "remove-older-than", + "remove-all-but-n-full", + "restore", + "verify", + ] + +options = ["allow-source-mismatch", + "archive-dir=", + "current-time=", + "encrypt-key=", + "exclude=", + "exclude-device-files", + "exclude-filelist=", + "exclude-globbing-filelist=", + "exclude-filelist-stdin", + "exclude-other-filesystems", + "exclude-regexp=", + "file-to-restore=", + "force", + "ftp-passive", + "ftp-regular", + "full-if-older-than=", + "gpg-options=", + "help", + "include=", + "include-filelist=", + "include-filelist-stdin", + "include-globbing-filelist=", + "include-regexp=", + "no-encryption", + "no-print-statistics", + "null-separator", + "num-retries=", + "restore-dir=", + "restore-time=", + "scp-command=", + "sftp-command=", + "short-filenames", + "sign-key=", + "ssh-askpass", + "ssh-options=", + "tempdir=", + "timeout=", + "time-separator=", + "verbosity=", + "version", + "volsize=", + ] + +def parse_cmdline_options(arglist): + """Parse argument list""" + global select_opts, select_files, full_backup + global list_current, collection_status, cleanup, remove_time, verify + + def sel_fl(filename): + """Helper function for including/excluding filelists below""" + try: + return open(filename, "r") + except IOError: + log.FatalError("Error opening file %s" % filename) + + # expect no cmd and two positional args + cmd = "" + num_expect = 2 + + # process first arg as command + if arglist and arglist[0][0] != '-': + cmd = arglist.pop(0) + possible = [c for c in commands if c.startswith(cmd)] + # no unique match, that's an error + if len(possible) > 1: + log.FatalError("command '%s' not unique, could be %s" % (cmd, possible)) + # only one match, that's a keeper + elif len(possible) == 1: + cmd = possible[0] + # no matches, assume no cmd + elif not possible: + arglist.insert(0, cmd) + + if cmd == "cleanup": + cleanup = True + num_expect = 1 + elif cmd == "collection-status": + collection_status = True + num_expect = 1 + elif cmd == "full": + full_backup = True + num_expect = 2 + elif cmd == "incremental": + globals.incremental = True + num_expect = 2 + elif cmd == "list-current-files": + list_current = True + num_expect = 1 + elif cmd == "remove-older-than": + try: + arg = arglist.pop(0) + except: + command_line_error("Missing time string for remove-older-than") + globals.remove_time = dup_time.genstrtotime(arg) + num_expect = 1 + elif cmd == "remove-all-but-n-full": + try: + arg = arglist.pop(0) + except: + command_line_error("Missing count for remove-all-but-n-full") + globals.keep_chains = int(arg) + + if not globals.keep_chains > 0: + command_line_error("remove-all-but-n-full count must be > 0") + + num_expect = 1 + elif cmd == "verify": + verify = True + num_expect = 2 + + # parse the remaining args + try: + optlist, args = getopt.gnu_getopt(arglist, "rt:v:V", options) + except getopt.error, e: + command_line_error("%s" % (str(e),)) + + for opt, arg in optlist: + if opt == "--allow-source-mismatch": + globals.allow_source_mismatch = 1 + elif opt == "--archive-dir": + set_archive_dir(arg) + elif opt == "--current-time": + dup_time.setcurtime(get_int(arg, "current-time")) + elif opt == "--encrypt-key": + globals.gpg_profile.recipients.append(arg) + elif (opt == "--exclude" or + opt == "--exclude-regexp" or + opt == "--include" or + opt == "--include-regexp"): + select_opts.append((opt, arg)) + elif (opt == "--exclude-device-files" or + opt == "--exclude-other-filesystems"): + select_opts.append((opt, None)) + elif (opt == "--exclude-filelist" or + opt == "--include-filelist" or + opt == "--exclude-globbing-filelist" or + opt == "--include-globbing-filelist"): + select_opts.append((opt, arg)) + select_files.append(sel_fl(arg)) + elif opt == "--exclude-filelist-stdin": + select_opts.append(("--exclude-filelist", "standard input")) + select_files.append(sys.stdin) + elif opt == "--full-if-older-than": + globals.full_force_time = dup_time.genstrtotime(arg) + elif opt == "--force": + globals.force = 1 + elif opt == "--ftp-passive": + globals.ftp_connection = 'passive' + elif opt == "--ftp-regular": + globals.ftp_connection = 'regular' + elif opt == "--gpg-options": + gpg.gpg_options = (gpg.gpg_options + ' ' + arg).strip() + elif opt == "--help": + usage(); + sys.exit(1); + elif opt == "--include-filelist-stdin": + select_opts.append(("--include-filelist", "standard input")) + select_files.append(sys.stdin) + elif opt == "--no-encryption": + globals.encryption = 0 + elif opt == "--no-print-statistics": + globals.print_statistics = 0 + elif opt == "--null-separator": + globals.null_separator = 1 + elif opt == "--num-retries": + globals.num_retries = int(arg) + elif (opt == "-r" or + opt == "--file-to-restore"): + globals.restore_dir = arg + elif (opt == "-t" or + opt == "--restore-time"): + globals.restore_time = dup_time.genstrtotime(arg) + elif opt == "--scp-command": + backends.scp_command = arg + elif opt == "--sftp-command": + backends.sftp_command = arg + elif opt == "--short-filenames": + globals.short_filenames = 1 + elif opt == "--sign-key": + set_sign_key(arg) + elif opt == "--ssh-askpass": + backends.ssh_askpass = True + elif opt == "--ssh-options": + backends.ssh_options = (backends.ssh_options + ' ' + arg).strip() + elif opt == "--tempdir": + globals.temproot = arg + elif opt == "--timeout": + globals.timeout = int(arg) + elif opt == "--time-separator": + if arg == '-': + command_line_error("Dash ('-') not valid for time-separator.") + globals.time_separator = arg + dup_time.curtimestr = dup_time.timetostring(dup_time.curtime) + elif opt == "-V" or opt == "--version": + print "duplicity", str(globals.version) + sys.exit(0) + elif (opt == "-v" or + opt == "--verbosity"): + log.setverbosity(int(arg)) + elif opt == "--volsize": + globals.volsize = int(arg)*1024*1024 + else: + command_line_error("Unknown option %s" % opt) + + if len(args) != num_expect: + command_line_error("Expected %d args, got %d" % (num_expect, len(args))) + + return args + +def command_line_error(message): + """Indicate a command line error and exit""" + sys.stderr.write("Command line error: %s\n" % (message,)) + sys.stderr.write("Enter 'duplicity --help' for help screen.\n") + sys.exit(1) + +def usage(): + """Print terse usage info""" + sys.stdout.write(""" +duplicity version %s running on %s. +Usage: + duplicity [full|incremental] [options] source_dir target_url + duplicity [restore] [options] source_url target_dir + duplicity verify [options] source_url target_dir + duplicity collection-status [options] target_url + duplicity list-current-files [options] target_url + duplicity cleanup [options] target_url + duplicity remove-older-than time [options] target_url + duplicity remove-all-but-n-full count [options] target_url + +Backends and their URL formats: + ssh://user[:password]@other.host[:port]/some_dir + scp://user[:password]@other.host[:port]/some_dir + ftp://user[:password]@other.host[:port]/some_dir + hsi://user[:password]@other.host[:port]/some_dir + file:///some_dir + rsync://user[:password]@other.host[:port]::/module/some_dir + rsync://user[:password]@other.host[:port]/relative_path + rsync://user[:password]@other.host[:port]//absolute_path + s3://other.host/bucket_name[/prefix] + s3+http://bucket_name[/prefix] + webdav://user[:password]@other.host/some_dir + webdavs://user[:password]@other.host/some_dir + +Commands: + cleanup + collection-status + full + incr + list-current-files + restore + remove-older-than

+<_NDt5AdeI;Z%2EQ*%GM3kA9a0^ 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

JMSPm{<1T(y;ZCXk=;`T{{R0U-R;T|wCm)k@o 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 RAummVgit01uYHEVCMtP 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

    jD9 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πQ;}GFGQ~W|Gxv|N|?(a4o7z1 z3b6b5TVp^MYJr0wEK4CH0PLvJhZsK3u!s0r>eT=LI|`8ejA`;2sL4!VlR+*Egg6c4 zvZ|~9|L*{qh1+Exp!yGi?%F>2ayRJGc+hOJ0I@TUpn30(UeL66M=NO7yQ3F0=?$7d zaTCNoYXuHr=!`T-H*CfcWCm=;5oD49!XzQ=CLzx_LQI0pI6_PU%_161MKehlyGbCm zuo*{)Nst*wh)JMXL=2Neu$u%@3!8C-m;{+|gqQ@HMZ_>k6uU_vwXhjSh)IwcM~F$F zSwswz#ITzLQVW}LgqQ@GafFxznnlDgNgTULAhoa=M~F#~8ApgokQqm`5SJh}C4p8+ zbo7E2Np!S=)<|^pf|f{tQ<5Zh*C3}PkZxE?0+|6zNg$I95GF}sHwif?AB#23% z)L}3c%_M2;CV|w#QWC@@NJ@g31WFwkCdpto38WU5k{~8QQWC@@Q0l-iNfx_FAhocR z1ThJck{~95QU``fa@b7*sfDE^h)Ix?1ThJeIxtL<$8HixEi5HLOoF5&h)Ix?ga~o$ zGuGglVrW4Qnw~|>Sa*SEu#H+lX%wbl258b5WEEHdG>eQfr;RfG4W6Ke&uK%Zpp9EW zsT`~sV!UxH$gyAnkZIUwy}{BD^+t#(ZHZQtBO|PzCNzgPo_*y-PIJD&g)g25SL7xDMqAq7fh#E*^5#l&V z0}(pyF4g5G1TqhNSsz4IR~V#I47J{k32wx6ABL_lX|O5HuxWl+gUL-8rW-QGXL!2H z57cY~>2YI5HUg|4)Xo95Gu=cCFL#B>pv|Orh4Fw@!JHrp)ei}QFj>&tJaPy?=J25* z0G<0cf`ot@D^xFd6$02)Xgdtr|B>r*7Xz7x90JgpZm9LBZP~7Hd9W#PC&NO(T^t$$ z(19Prb5JL^v%{S*9lBBs>V15x1i~e{+y$CH9fJ?{K>CT{kkkQl8fw}Imjo>qKn@wm zQVVFvz-Ct)pcHoC&4px%P6Hh_#;pyg2ur@Au zMtz141FYE%3mM!A!yS|`!e!t~2w+}7Nf_>^2_swkJ7_Iqzd#U52U9G)Zs1E^$^fhahuds!2;<9K@uWri9t-N zKqLmxpgwes1uR$~=>irkSW`vwr`u4gVRI6&;sUyQ1-vW;7C}U$3g}`9SOgPF6@QVv z57R_cs({U76acoy#g(TMvc?78$nYY)kueJrK+qUQsYu9bWFQvEfILWCBLjW) z3@m*>R|b;W$bhbYfkrjKM#dzR5TLw~fmoFT3IXC88BizVE;#Tc5y+4uY9j-6JrA_t zct&c$(SQ;%C~1S3>ZJJ-bX^dlUO}x)NNQw27Y{*}?SVrU(gcNt3=!1{blDIzVGt-d znm<(_dmpBWsOkjg`Xkb+6R3MBNEN7!4AhlN&{W|{YN~jG94zEiCr=RR!4S4`7u;@# z4RaG{WT3Bzf)y8JHZq{gnqU!(zdC9DbQjtCFik|H3iMh8WD>YH(&bKCs(`u|cd8(< zk%78K3z{lkkeVtkA_ogOsRDg@7paX5Si_!5O;40XTf{appzFg(NEOYWpnA}g2XUza zdm{tkc5pdKRwDzp8V%IQ0Ix=aH!`k~-pJs^ojAy9WFVHZfjmfDBLjV%8?4kIvylN^ zsRoT|f{l!0C?P<3BLmvyhSjG;^;w}##$9m0s#2U?6Vyfq>dHH4!EuAsg2NOgWXNb_ zKv(b~Div6uKzghM8X3)>ZomUX7R&GjiylCJwS1 z8Hh!vAP*AP$bhXQf~F5jr%PZf^&pc11REKpC?P<3BLlJ06%+!*jbuQbjJx1~Ri#8W zGEmpZLJN)`q!t|JC?P{eBLh|)kUIqW16o-_6NbC6;b}5wpzVR)%4Tm}}igjyFN$o__DA}TqAK;jO)jX_-N0=@}B9`0d`(t*SY64V_E z&~&he)O2tkIXuWo2hg1kWS0)GEfDZ72rP3z=21yV2VI~QThLt#u$U#39F&p057R_c za!{ruIbd&AAlweFbCA0rFZ0j+|KIrycHVU7Q_zvtp*+n$x%j6X0GsB~{GfpqbPZ1P zPp(cT@U1tX?GxZzZx(=#&j#Ikqi_dw*^SI`h6hJL429zi4Hw)Pc8IL?VJP9+A+y$p zq4{T8DO2oW!vnF0C%^&8_tk)p+G~6>fq{XccLV5jsBT}5&e9jX;KPWzH-L^L>gMc> zz0=v70@}^c0lF2X)Ava?m*KhI84NrO44tJPI%6Lgo;1AO75llf^hTHOr|!}hov~NC zWoC5q^mUg$VZ7Ptd%^Hzm+!~!*bChzeTF9uKX>_l=#0J49s8hrE6Ch#neJ}i3t)xa zwHFM(ch+9$_Px_xdZF8s#qeBb>4omt3!SlVx?^8-`M!rFgwAsyBj0uNba%^aV7%E~ z`lQqM3`pp0ckCIsEpIww&wy+xy#co349JQzAfs!~7=G{eX~UCX zwP!kGKNy1i0`dq?U$@B&#*dx8CqO2D?2diXUHSlQ(h0+xP|*+FwI{kw`atgg-dTI1 zJN5*`tP|a_cR*6nJcjqXV_$%zN>6l_zUlIP-|2e|J;178ENsfJEPRmu>+0;-uldF5fqur5iw2 z#@+#20rGCNM5phDZr=mlwHqKF+0b3O0qP476Lcax$QNrshJETTT?4bC({}|(2ozu- zBSF4c0rCY{^h0;;3a}MBK)zVf9lHYJixpsBtmuxGfyTv(?$Q;oxL5)*?_GE45||a; zu}?aE7l1_Hc9$+d_Qe8_m7us-0E&wR-L(t4eK)}4VnKJbLU-u`s4o_Dmo9+$Vh+f# zPu-<+P^_2%5{1Xb43ICtLLa(oXMlaN0_2Ms-LW$uzL){_#fo86aPDbjNl;e9-~+MMrnE4m2)0x=TA? zanS-Y?_GCk3(N{|Tr_}0-*%TaAp4>LWx*6|v zZUr+-8@eGXpejMO&IQYOT7ZKM!U2<=u^+$%;pfiY0;pA=y0?Ou$br_I1C{&Oy%od+ z1s$kJ0du;1KY)B^($@`E#`v)lOhZ%}{_6xQ0=ogM)zb#z1~6wXh=do$oxK@gd%CxR z=q}%P-8LHx4|MZ%ce%dpj(x)Tv)iQE@IaUA8$)nHw`uEkz0(c$Gvm+h2nWNDhBvz- zT)JC9h8o`J1k>HF91xdu8g+6s9s$)&;GFI{1hK!eRzdoxUFoPj-2;bOo~_t73zzV&}Zr8~P=vH}pfN z@0S-Ze*FL69r_`n^Fl`$^T8Jq9c^G>2iG!(dzpSqLrruq?HG(^({y%4_GUx+G6Hu>vp#>ylHqF za^A4(=dRdKVBHX{GBZG0Wx!g&w#tCDf^C&)>vp#=yli;M@G$rqkoR4o?~t@2I~Z&$ z#KB-&K@K*7Iru}DD|9r~7wT7J2ZL>eI2ddz$iW6M2ZQ|D6^m>uvV+04LL3aX735$Y zn1eyKc7-DQ71_aHTOkex+X`~92F$@ATfrU$l`i1OL3S|MR)~Yawt^h2Vt5l4zF>`p zw>yt@#eM?CE3$*Zwn7{XwiV=H1(<_DwvraYGB5{&{0g?Wi`WpBAU}jfU=9Y^N?HgD zz#ROh%M}u-pr#l&giSVp5~4{5D9yj^_I+Y((gGplVY|_~6&I4+Vf$lSW(OC*= z9r}Liiv8RTjh7i9rJ$k56} z&C=W*%fZYt+3-?VD5!`uhA`iNbg@kCj%P9aV0Z&`VPGjocPvl$G*D4sc(L~|0f=6t%JzbzyJUL$+6ag_y7MtJl0zH{{MgB zW35H+|NsATthE?oX36{i|8@Dbw82OI)kaGNkQfCIkyh(PNB{?<;= z9`JA7EL#mgA=B?45~`p8vlV#=dC+zc+&7&@7|R6pz4mNi-pVZQinTpuOs94Qh{z) zo-PrlUPq>ma3;e`NCM0q;fzQE9aF*DTfyWMuf?|^-KzZ; zbcr-57xcD*GHG}gM?lbvWxqki4Nq??D8Khk1slE>loz392L-$^2Hn1mBgZ_28h-8% z$Z(MEupnq&3wp8Z8~l1^u=d`)AWM)l9P>VKhHLHr^Z&o$$(J2}{{IITT>G>^r}^J{ zhg^Dvc0L8)KMcOQ+Ew5hf^7e5mt6=f#6B z1P;EG09V)DEUgB|d>D*bdJRtbFz|1K4tZ;{^co!UVd&DQFNfic&fndE zES<*<4;h~9@?(Su zB>NB^S|T8GSUZnv;&c`vAEE>nTX%p2BhJ7g0hJTSd>9}j@`fKk5{G;kG(RAfHavzmK#f<44nYtl(Ba73 z5y%K)a&-Oxb+`kWIviO*Oo0wZRuIk6;mFqcqr;IMeCuNrsFC}!xnNa9`kD%i9 zHcIi@6$t8Sg9_P4D1~g7BQv;k>^u&-@tl?OH>j5lE?Civ*v{+Sfi~d6)sG(*6X>NF zp^S-C^jK(uiyl5)MiDA5;HlOGlxlfFi3Da8$)y-d`k+#>)dA%rkkhzf&O#3?LOw)s z6<2qFh9SH_B-w}X(4uP5qX3CR4sv}6ca;n%pxCJwhg7OQL|}2qO0Ex4;*bSg;lhj} zKMtwd1mJ+gArs75q^44M9I}AokkJrS|6lApe()_)?;~^h38yufZiB2E%)uzxlVF?=1b$ z9SaVFb3P2xj@<@I6&ce3u5Z$eIWDsx1H_ueFGYK z_x*72rGVjQsO=CFKsUM?{sw6Rng6*n_C0_|RB>78!hJDpw} zou~P?o$a;(3wL|47@qIEiD+>1fP>TUJpZ=OyFnq?S$f0RW^;GxorCWrc7tr`EWKiE zv)S-=R|E$*WIAIn7~9O-4fatLPj~H=Zj;^nK{`Pr^G~{Ew(kS!GQ0_zE`_Qy{MlXm zrrTsUNCihHU$+-WR}>rnwy%&dZF~&sPj=gE1sMs7a!~Zj%mo|yv%8Ar;Cl(fo83_? z-6nfMCi8Fm4>qS;W-lld4R3b(v2=U!be=o-QsCe_SiV3p&G0AxHY<>NPzc`amg3*` zy(@|fVJ|2We|DF0bVF^u+3Cm8UB%P+b05e_;21gsPk*sz4!)OwI@6eEp5g7TD5iZN z$9Be^fbyBaLC_g{#F%Fu$Xak*aTwn0^aqtNUTob_9Nk4MATyw;`#|SMNLYYk3FLj> z1E4rP(D@ORJZlfYQuqDN&!E&@d!Re^04$+_X2HFfJ7W)k^j-p`VTj&t-vgZ--BKU} zAW?7lyEAr6ckBUBIt5L&LL&ZLr|+K5o1LXw4!#uVuH6E4h6y;MfKwT07JUoG72wnej&%NQu^T#Lmvn~Nf~~GrtUdlHK2(3*d?A=Rq1`_kaSbbPp(AFZnP) z!prbpXXzf0&%iOg2b|pvzk^dxXYC%)^lt2)ZkwH;7}x_^#}T`yGg1JQVVOF8K~uFJ z%-yjwK!E^?d!BiQ=es?4__y7KCaWpNHuJzKihmm@<95bQfY@qmGY@1ZNRKav;rGr; zk!}x`?g|e6Z684yUS=yO^@7a+B{fi>-|YN-@U_Ij_X3@Abp z~G9&>Yz5C(-4>2C=d8T(<`cC`Dm28(ak5?~Lu}wwcGjt$>4nTLg>YPf)&w z1h~muuqCw|h95iqK@AgdDPI7Ovzwj1Eg1Qr1(Xk3p!uK$Js-4m$F_ii0Av9uAAm~v z7Em~X^8rL}w{Hu)l!s>o$ZTtD3n&q91<$-f%fWMJHcY0h~5j5gm@lg(Ip=S za1u5A-U*fg49u>3I>JV6Y~MxcE4lYbjnd*@!z#4ETa0L8^e$kgn?cM{NfX|SWZ zWwv*N=gJLlc13VNjNK1Pqo8sZl!{HZ8{X`$Z7}@ac@CttwxK(=q0@^86c09AK}D?L zZ%9;h#x_7_s%4-hP=n!3uu+}94c#W&!G?fSerIh1XlB&6q0?W%@MKpMQEZku`CQ7ru1ia6j| zkAK^D!=K$qS-jIv$M9sA7aOP!f~10OFAl@gXn7Bu=L~;CQ&;Cl{%v0kPa6L2@?wT% zX>bDwlnOp~-t3eB6$@6Nf(Bf4cJ_w+|NkG9y&ws<8_Wmg0FXGO0Rpb~p%FSa0<`=A zQthCs1?M+V!)Y!^r{U>NFb#^T^WA$vLeM-0%93C%*e3pMH#nX#Z-Fv~IAhXNxW;Y}{Z03PlZXBKd2HgQ1@PS>Br$Meh+2z63Edn;%@KbjI3&=N@ zd>A@GZ5G2@Al^9;58_;i0H_YS)fsNm9l+Ch@!%^^mk2V112q$BTsMc|CqyL%N?|bL z3~zyIO>U5KknpF@a0_r%`IUd$MNlyTsh6O}z-;b{V1i_=E(ge%45+*TX}{Gi(+Ua$ z!&}`f;Bv(9P-nPJ;}K9F1k^t{jJ*C5+&ckHfOMM%fUfTSR-&~q0eNP#A2hRB1DYGK z16@W8zv&k|f77b*|NsBvtRS6?3=9m%zf7fHJ+W-ImPe0bG z^Z);Up<}JO|Ns9tIo7K8|NsB6W3BrC|NpNz)(W}`Q~6k{Aw+`_M1%4F|NlFWwVFUQ zm_js|K{S~E|Nnp1u~vou|Nk={YgL5Urv%Zi4AHIv(XRUc|Nqs;TGjsl|9|#atNQ={ z|KA^Lm4IlF1Z9w8ty2I0|Mx%ED*gZe|EI@VW&Z#F-*T)~_W%F?b;nxe{{R2)a;#PU z|NsA+g0lnydRr|(OFicb{Qv(y;KiD>#G>bw^i9R9-bIea2!FUT_F zDHwx$J`5Iz_*=Xf85lZwL7@$r@dQtGLeBm+y63|X@Ip?UnE@OZ%|`^lQ=p(3&%%HI z|3j`|t`!jAZ%z95|9`hDkKv`xgT1jgx&%O@a*VyD9S0u>z$ZVz(<9(9I%dv8h6g%B zZx~+c!Z$?%QFRBTilfVs6WJ^-&{PZ9EN+OZ2Ow2EU5>m5A4$N+0{P&o_`^64b>8R< zebO6x;>Ft!|NloAUINuzE>k-?S*ANR|KhLv&>MQ9^G4W<^B?~Ik2k#3u{r`XGJ;=OV?_N;UAP2ucB=}n!L6gTPUsnD5|G#&O8hE}R=X_TH0|NtOzKi)d zLqP~=noH(5gMclFp>Uj`z{#CqN8mjl25QWAHNUaxbiLB;d!;kh9o?I>b+!|+n4>l4t5i@RN+H@a&JW~s}eHjeTcZ;+ZFhc~N8(ufO)NRsQ@ZX1_+ZD91*aD>XVOQuKkSJ8^ zvu+uP)_dJNaILou&w&j3@55kt0JN>+LT3>RXvxNdF4w2sGGJ@FSs>a#6LYS&ko4X+ zJl*Yk0ipe};ib+zU?50?jX&Izx|ix}N9`J<{#OVR*c=_C~i8kKr-H1EAr9DuFK7yP#gn z19%8^7m0MaJ_7mR2B_2b1mq5|l~B)jxjr|%Z+ITX-Pa8-by{|X-sy6E2n{ZnvyXv- z@fj!_z-Dy0-Zlh#0vcR~mpThsx6(Wl68(xO`*YE&nZ4bEt)g5}I`H;YW-xHl4 zJe{FO_*)-=3yw1fAFzN@m+O`8&@+sOx}APN!|IRWF;GY`ftHs&=yqZOEz{|8y#ZR= z?t7t&rL~aTm!X3Zd68OhP@B+?zoV|b`Dkf-^G4Y+RYMOi=8`82rsjX}4s0BEg} zD@V6rXXp#iRB`B=?m&*t&=1{#JiWdzIzzwohTaH#@%J~VFu&1!M4*$o+x1STGfTJY zgHC6TZr3NB&OAFLK$Y-Hkeb*(C&9}mL%~avn&0SvR(ghVbk_=i3X3b;>8Ny};6*uoe zY{L`1-5?t~n?bt3)l=7GkN_zLfLz+y4AKQP03<+)0U#fCHiL9Q4FCxcX~2ojX0Yl| zj^@JxmPY*jZ~sA;OuUf!1&T0^;|?GN4Bequx=T3@K4R&XXZ+L+4sb|`?a$H;4t2v5 zphCNxqZ=Ibka9boryCspNJaNkXwm%~RJeAzf{X6gKG353F+}jb;q~rN9#FA!A0%M- zz0(S`gzhG^=!R+q7u_JO;G!F<^)aOAz7Hz%c?_=^Ug|6WWkyhObQe@)JqHcEPb~mx zLloUmz0VC#gNh@FotHt^07r3v3e6{=GLWaW07);R=!WXO4Jo>z_Fn7`z2XHfj4m|) zV&w1h1SK|5b$9Rq3*&`O*E68@Ww+~@?g`*@11f84Z*=bfrGc){8;1WtrPBs*gnsUf zeb7Av6a$6_Kx67pKxyx_4+E$svH?5E@BpZ62iJU1w+#K@1J`^PJUU%3fU3L~0-dgB znrkmG^7o$r73`rL-Ax>f3=ELcyom?Igj9ZAt~a`Offhj-{_bihxaY$F3cXDt;M$W1 zT=jK;3+|^7*$yXYsSZ}#;RKeu50itI=}JEL=?fT&b%eVjk zyM5n)3jR}FY>sY5OdU)e?C#!`AO8EkC_UGk`UPw&$f}nsz>`ZP+UE)R zy2QE|4KKKLu)B8%I%2iY0>i$>H#tn8Rf;qIg4f_Nbh`?4wl4Ym|Np`QP!AHcHnySM zmtnUN0|P_r0sfX{3=9lAmVhd+H(wyD%Wi;ta=3Tuj=!MZBS;sh(h0~C$Y2okWe9pP z--a)Wx7p&Z@4AQKJ0b#fhd z0vXBhTB`F?Z|sZaM}Im$Fy88pwAu-wwc3}5bkPQya#{>*+cY;Ma!6L7>1oXCoVieRxbNv4Q z|9((({sG_ggc^@$Ao1900qUAf1!)P$lE^Rsr;Q4bPme&;MuvhQI6+MQ_W%EW4?$lB zY^HsIn)V9ZNd%b|4syYMkRFhJY1)%G%3cxP-_6I3-W<)?-AP6#T z0uC3rKuya4nFbC5a5vQ!qz9xQn+tNFdQAR;*JOPgE`fUKSZ4{yOQ-7J8XoBO z-O=T`1rj`lCw8(jFfequOkDwLPHcsU8oBQ5aG44UN7rpIkzE}wQ$a!Lx*aC6yTfJb zYBU>~e{$5kd3h9+z)RE^VEdtWfmYgrH$^x9WG@kE{>i~V^?>1}jzeC}j}9~*0@qEh zJk3AZI|Wd8M!x{%P*;iL3=5J#LlQE_87@SF7z)Q33}W0Fc1#rVWhfEZF;&Qyq4_6A z3D=G}U=}CZctz*az`$X?`QJ@J59%LpSe*3SWkRg?B(?x9F7$UxtN8 zDts9Ng8~*l0EsPp0w&LZ$rE7m0GNbc!Iu%i#K4fTLCBXO;KdYXX0U%kkF$aT0F(&a5CZqWshKxEwkQho9;xIBL````cnudgG< zUyrjkR6v3YW*&Gvb_N3jL+9bf!yqSgy0-MXb_BdQzzEui(9-Sv=1*r6NMa{9D7QI( z=yYc3cK!nDCOZGN5FGTP4P*;=;;ow*)TCkTJcP@R|Go_s>7ByeQ^Avg zPAnk5IB|gd;=}{;i<3a7vp_e*wi6HsH6IAEyusg8460vSLE3hTfa=`?BAud0J&z*dIkpQfWv<9_$A0a!Od?33@>%Za%3^Q z$Obp01Qvo4WApF-C2XCtAZE8HD5bVuDuJZV?pU<(1Rk(+L1PxR0^Ow?phjFj0|Ns% z<1pS>49Y*??BlQ)l!?4SCTDev3RL(q^g1yv2GI*ar9~H?n*k3~qb*1voQZ*<>}vCW z#yYO!tP0RX4_0-Y6(kRG{)<0<{{Qdh1!Y6W*4waf=>!WbcBt@W0NGSJt@#KKIQm}r z{{H{}W%_^6Vk>BSxSJOgZ=FwDPlg5ax9k9A5K(aUyu{zK3giQj%^>g01#t?%5zpUZ z1}Z#xLB&_MD9GKrr-DkG5;cZyrshK|y3tWlQJsv<2U)x;-+^8HBIM8i{|iCRbXW`` z7lO3Dum=f(iWrB*ATnSf$SE11M3=$X%)k)v;@=-8P&wIotog@({+8Qd$AQ#jF}~RR z_y7N>)&nI1&2M&=wwlOF?|gK$QfXptRd#L9w_Mt z8DIl8fFa<8GQGEe`okgmUxFIUpp-ZVBq;=yv|7W!@X`U4>fQ*vc>9lu zAr9o8EB`>wM!4sIurI^w)3%^eh`-h8|Ns9l^FVVo-$KFTWg-hfg>tv-hH_s9ht}JR zLA+9>ZeDOip5$)7_(S{UvNQNldfMt{D2p~{`~)coJ9qk8tWi|(CPZ7*YyoV`u3my z|6iCffbL}F>2!V3>-qvBei)Q+LAmI~&L5yI4W{E>#)0OGGOmM)lRKcA1zeo$UcJ&mIc*%-Mpact{bf0k@0XRnA-`FausMjP{IqY$3bI+yO2Z}&9n9fB*j3{PpE-UQme#x)?YN z6y)e01-B<~`F6{9EWVu&5(N9U*Y7{rldrA2MH!%lHi!n7V_htup@&9WkN~*Q<~q&_ zVuP~8LW2rl22YR0AgcN2|I!0sfz|{39fz107{JZuh6Yfv?fxB{3OWyiO5GN4 zLt7MFY%{$0^Bq!b3pT&u34ZYoqVT08sEOgaBQP)^_{AxR7%07h4r)m2cHO7S@PUEB z7G!owN&u{c{Q@dP&zeI@=&#GbCG_i+(EQYP@8AFb0U0kqWk(1T1H(&ZCP=XX%DLc- z8U7;hD+9wzN6?{eT+e`Nyqk;+4B!&C#1>R)%ZT_gyzT`R`tCnLwFX1L z3%#EpkMh8r6eQxy@Dj9W=!Ggs!h(gr6*O)b(AygE_y2!zjT8|4BJ&$alR)#2|0UPK z#`Cwn0=36L0df~C#{h<#DvKeDCE!KHcSH&N z2W0UPp3c?)P>_O2h@xPq8LNMR%e3wqQ-y}a{7P&|9_$L15~>*m3knwy|n%f&ZMAp{Bj+rczPr7g5?JjLu9u= z(2LjL=!OSjx`;2si|?k8Smg)B>KlO<*S~|pTO#R0giq(FBm zPj@Xx7Gt-oKtM0cSCD4{Uex^rMGQ~p;jn=47lEMIiREZMA^6SeJ8v46kQV&X!z5;dRG`!K#cL~2HTUB74*UxpXC zP%+aB3=GFvK`sWBDlfjR2KBaH)PH7T;9q|O6lyM@ct0ZW60|r4r<13-lbqQ!G zQUpi0MYjV_r|W`V*A-a~K>;sTePLqgc3sdNy1?*8x9ztu3xLu&2a``~F?}A<#j?NQ?Ke~OlDBdvq!FXb)7}x@XcjxvV zynLY7M55buf#Hpf?1~?ZT^BIB?&xi?SkGVc6>fL8?;fz_CqQPkaA+NCci#ybQ$@GF z+xLLs2gVbfAj^f_3|638egxHW#;I<9u~>ehx5eVdjD}1k%g-QNzW%#QHxA1$z%Abx z{r^9z20w{QkDA#wsj+C=MTdViZ={D zFuNY;Z4q$T>~Nqv^a?bn4Sy(pF#N%IVHarZ8XV4nQE_TWUcI6C!|+76?+V5f;NEp_ zi@~bn+g>7BsSJv0X4gHvEf%o?`q#jAcKcp{Sqj=0y`Z;+BUr?RX(uNG0|Ut7Zr>-J zt_z@cL!!6w*}@x`*6u)9d*b)y=a|->>20xicJ`qn)Y=E=)?Q;bKa6DU7IbUdd9QxK zwDttT+P5N6u9()|>20xKeffAL)Y=W`*8W)h{tuG1M^LPVMCnbY{B&59-qh|3Mu?!ZCE6?Ba z1`qXs?Ckc1cnp$Kds`$Dymx;?weAA4bp?C&??dt#*g8;19;=(J0kv)gs&&8A7rsKW z4ibHE>sk%oUqQ9*0J3$gvK=hw)`8NC<%KIZq1N3%weIQ6+s}}!gCtUjb&yE=QL{)M z5ozLvKbT!N^tKqJhOIdQwyE<%^N0T%**HIdqGv^Ki-n7l<`=MCoi{)-T%12Z`S3_@ zi@@~%TF%{}4?y7vDsew_`z~ny@SpPpI5&c(1i`s+x$>0Na4-G=cE> zq2+?ff53KkyMhdWSq>_B4o60(A}sIr-2$>57L$|C@bvElO>kkjpxYN5Yhe3pzr05j zdB&=jEk}O{|>_c3k5m+ zu-Ff(bDHXcza!g!1=)VnPgZ+z*}nmlj5;qu;(Yg|>spXF2l;=aDCZ4OmORtjVleS? z+iR%ROS(B2e|A@}baF6$@Aly7F5qCi$9S=`f~B*7qtk;2+H%4&J_uR@S<2HLE6`jY z;=tds7&KG*jlX3wXiUgGr1e0FdF$;G#pWOO^)kHyj9qMQ-W@Jh!kytEofk^DoSJ{w z*S!X{rvkDVvKYc&ECr3X91&=}T@u>-+rCVx^Hb-K7YDxo|KIH|;CS2}+!pEd7ifO% z(0t6H`L})fy&V~#-gWNx|NmQWmnd|*hk&e-z_5x9Y87+Z1560|xOX?zqso&h?Hu9O4h)UX%7Kpm1Wfo{K$&dbe51P(rCJNQbfGxS5} zEymN9mpgAXhkjr<_(Hb3_QS#F%m*Jcch-LB4*kG+sQIUPXXuA|yxFs)nK~~Vb1@QTX#Qc|8^l=mu{TVl(=Ft+8+1MZq1ql*wLMsMr&|a(1jAk=gXUqv zME>jqRfvWMIQ}OLx`}kVv2?mgbh~kMy2*6A@pQT=z)}W!`w+DLlq0tJ zfCyy10K7lHxt4>m)E9gXO9Uu=fX-nN*y#m1heZf1A^|=TkD(iM2FrqS=)BK^dJse9 zIKzbo5JTfQ14ENL!;TH2z6`K4amkop>2@X1{{8Uq(&6I{pfP!d;|?GPgKUGw2c*By z_~s0#%kH|Qo1xoxNoT7EC{4I7>Gos+FN)}P;OOji`S%|*;02QLUD6Gbz*uL5#V4*ziW@FU1etTS0~ze%Q#` zUAhLM7i2Eur;TzD-Mv%5x-K8<{Ll$%nr~zUwf`<3>g8eTcHO{u5Mo?!4w?RN3_om?V?5ODx&=fmxO@Oy)b!4g0_ivW(Rphl zE7%#XI~WgbloHYGIm`6)3FESbC78pElm0kHiW<$7DdUIW!$hd}<@$Z7~`E#83Ge*|F~Od;6r&O?`vcmCMOYWM-g zQzyWN67tj;l09_+;S9WU3Sv z?YaP;ue*K0$!!ft{}~YR0B*<(kRdZbhOB|4Gq^dIk3$k%=OIW;Uq00ByFl?ox9<+a z4*HPU&>r01dEi*9D!oE+5#)+6hkoKOjB>8MFrya9coT zTmcbt;08^A88o5Obqh45L)_Q-32YWP8D2gF>LxD$X$7a}9UvCCZ8ZaKQV+7J z*B#)1UikWEUgw9)hdX~E1v6L=D6zZl0U2=zL`;Dj(E$ph4p12Ffdw?!6xRiyu(^B; zl(`LWfWily0S^S0sEx$P`B%X%f}7Dc?x6_X!*A5 z5s)EIKtvDRqy~^l8|6A(8#-N&^v;n2nSmO_kN^hh0yO~-b-RMo%^Z+G2h14o6SN=_lD0u^0~b@BKahhQoISy*XM*7g$lNmAEYL1ch*=;O zXcq?9Z-l}gl#^Y-Numd2B*;T>BSAYzK}K$rgB;)6>3V}eBs_tna&VgJ0GS8!7u-D1 zh%C%J5WCa$4l(gC2b2TBX{-fgB*=SkBS9NLK}L4Af>@od4+uoX43JsiRMr483*c)jHBR!L^HTn1t&>J)O7cPJPJ1zG%XD?6~qP=hsaTcs3tl;fI`Uzyu<|5 zH0t(U0BMzR-cY=ycmi@5Ip?A7R*(|L3*A$}Y4;Q~@=if^yc(W@RJ&6_n*uK%V!Qxq zVD;{?xU)yPek4}gLsFem9oc{nRg*!t}aNg+rqd2a4|PrjZN}{U zrT7VQ#5u?+kO;^UaA|W28r7$|dqF`3w*<7`6JiO71=^qnZmn*V>xJ3_=7OuHjjWtM zKsJH4VRnZuQ2e0y3uFz5%Xpz1d@y?VRB)<41&#hw-Myf&f?EdKxCgRqqg>}y5W6$< zO79#Akas{9fLg*ES-V3Qblw2P7HHQdB>h1GQV~=^a-Qf0-^`)-17tNw3CM@wym1Pe zI!<->g2D@KDQL4M%u*1$GxSF976Y)Q;JN^07bs1DhF&3w0wf}WoK`q*z@iT<+zU#L zAbY`?2%b8+dqF`6w->aZ6lO1o-5GiZnpiqNT|NwIQGx8?K}sr$w?Gy_5*^5UAUTjV z;4B4C9o^uqsc>sJ{{R0EvZiw?h}9YT0BWIV?*u0m&L10D6+eK|$sbTZEp&n6FG$h@Sq2gUSq3f> z;i;p$7Zg5l%YOWW_z09rK?uX+kF>+A`g0t3Wg;+~9UR0Nc?y6-0w)iZ;q! zJ_gI*KTt}MJD~13IDLSMB9ILr5s(ewlJ^uWU3B+?0ts%z4X_Q27doecSe>Ceh)Ew; zK!FEIAD~1BvJ4~yvJ6!HfV=@o7u~&}z<^tJ0csg2eSp}Vp?h$rk24@ku%!=B!30Sk zASED6K|Tgq3P~5;y`bQNTMF8R1IlI~OF`_;&;vxIk0S`%k<$lQ7+gw$>;-uqWG^IL zboYXS5N_`QxM$JQ2Uy}jXX_qNj6u^!XXp`F5&?xKND5LYfvf>}7-S73X>|93f(~xY z4yZMqQ$Z|n5du#l8(BL;7j%M){tY0@ekp$9{GfOPQVxOa0f~ZafMqO5(&+95g_Gf_ z&aGQOqamP~+0LnJ!1h3B#tWc24P0m-7bK8kgC!u{2N(}^wt`rlt`|1S_0Ew3m;A1vftS_=|Nj5q z$l5&>L_;c_Iq(QmJk$-A@9qUTg7b&siSE6iC;E_*$0(-qXc0*3@Bk|0Kd zyI;_8u*-+KdqGJGWGcwBAXC8+f1oR%wzz|{CAcdFb}*QW)C~p= zl|jlGklEne0gvJCUXZ`xW_Li%2DL9i>`vDwy>p~Mrs8T}f=iSiAcH}U2RRxXc_+Gi zLB56?+=65W;a01?ra6II$hU* z;?4?WHukuKB?z$7;c?d83-U1B&>Fa*AXcaA23U^(Y%a!l1-KLdxfER3!K19Z7vx#E zp%rjLL99;KEs%B@?x-{T07@31WB@W7I*(Ff3K~V={ce?H%5Ov@@ z4vsol>V-sEcQ44xaDxkw3CAV))@th*QFbGX?#P_sK*L99;K z0|cTDlygCbf}MT>7G>SNAP>V01+6Otb!R$TL99;KBLt!jlxIPPf?N!8DJ06edqJLs z8=3-kX=f{l1{D)0@I@VHfX46#G~a@T_*y{@2bm3tvhH4xcj0CyfX!w+1d2Kk8??z6 zf35?k0C3cS91k)W5@p@JATPrWjzKaQ#O`#xKupwuk^v|{AjJ+W%DQ_&eutYK0X4g` z6~yXvy+R=BK=BVU6zp_RPZ6{)>qK`i$ir|$L%@c1y58t)1u;RLVNh4C1yWq1=Q@ya zAh#N~g0k*LM&njclo_{zyb2m<1eds=8g8T9<>S2&LpHL)#$rJw+TH+=D}I2o8OSh@ z8;x5*@eeW#6i3Ej-(5Zc8YTn}W`XNFpMU@VLnZ;BSqy2W0qhoIa8U#@1QZ{}V9$V) zr0WydECehfLYIKLFCbTTgC~3#KXilVWEej~8seQ%EZuWKvnq@?JDEDYIJ#RwGb-J^ zAU80c=yc+NPS5=4bP{Mh0-8VqulIsZETOEQ1}#CW<>-dauSQ_ZuSVdQUls2Rk05@2 z)!^y>|K08)4#(ZWlU$wdA{g_lbDzNGS0m8oSD{v6%&$sx{&;cy32Xu}_6fQbIOkVE zyFEZF+`;p!!6Mz>5uMjS^Q+Hb^Q)g2&skpU{D3;Y`V9O0s-y(U{Hl~VVtzGPqSHA7 zb$%7B8Zo~LRt=qBb&defuLeWrSA!+c=2wq72QVCS4rG8#rgk_7f#z17gF8Qf4l;KR z0nq{-&Y>Whqr*9@^FxPoc;}55+aALL$ma3?|J}l!7dnEa!CE9hX9x>)I7@^MM$ z`Q7wqoLR>mSX$Sm?>_FpQS>>_=C}io)mQ(e#~lRfgZKiEJBajTu+Bd2AhG&pv;1)f z8OgH`qK`W$fEGO-cSr$Iv4=tT(Shf)k2Bnu$9nL%0}K1r8nfdL9O8Ei430bSSVr=F zKkgu4$bI1daR(7W(TI%W4id}zf2JIFkXhpYYae#=!29ETK=a4ou5LF&FSxe{?bx(} z+9lm!8R%RxOJ^&nztPzW>X<@gKoiX1nyRxE)YO0p@^pe*#GS36UL{OWptBX!`|3On z6AGH`q;#2Rnas&jlMh z737=d5C0W^DcvUr22FE<(jqYBMshv(7kbV$I2gnKFiUt(pjL@LzbQ0(W$2j8$NDsBsNu(Pb z+l)6log})!aSW=UWEzivk|nrSngFeqAnP4a>!TEm`X~iQeWctOoL4$z8$W zxH~xib-F7c*GC?py^n8y!|J0HwE75Y6-Ire()r^>JLrZWu>Q56vxiWuAhJGE==M&b zq&`wXt&fzE>LZm-=M=R12&5XRJ_4z>hphK;PC==UR50qJ7=~lcvGDpR4qP9_gX$lN z4(9|AEzsed2%074rc=pQ=r4y5JW@jBO?$~q9fS6!`TGH6zFg^ z1<@Sc!6F^bW+0|SN3eB=vjvDL(BW(eqB**QB|4m~Kun1aXB!YL(BW(gqB%O8?K*<( zyMtvwHLNq(M-CtffevR!5Y5ry>;$Xn!26LP>*Hga52&ElZyeD24YcYEyl>qBR=){@ zYdneL44}FLT)#Ce0M%v+#~Cgx1~F8QGaOg~VrU#^IIzr}VaEkA(E24vc?w$}#f@%$ zFoyY{?aN^EFAy;QI@o;3ihoG{ZG3YFw4be1r1cwrOEzRP7HCh?N&XgAR?t4SDqqk! zC#}kC3=9heD#4tV$Dj>S3J^}~3h;I}s4{Uj@Rqxb4`RLyFHW5T?a$!pJPg{Rqrkzy z5FVcKR}8f0T;LQF!(xyD8DiqT48boLKzxHrUxo}7F#p3zCWgfhAig1({{X}f0P!8b z{0ks{0*LPi<{tp@3qbrBFn(L8FT{%(82;=(CGN|xlLNG; z;NItD{4FNXK)3=@v9$!US*7JW>gV@>8Z42^j>;IBv-KHRKwtg#_ z(=7|~VC(IYN!`34ueF{m>FBlvd8+k4e@hi;PR11EB~ZkHCVjePK^|(o&EEprjoHl$ z@=ohX{ua=1c-=EmRu|1}sH7=nX)=YrV5VgE%zE(NJ6F;@G>G9T%-~a!sFhQILVuK6=MHbjFZMb2DtPBibb27k+|A%tKM}U-qLLa2G z^bvUHFyjeu{48XEB=MHufB*k4ya3^}dLyUzIM988Z+LoJRet^dACMu*z{HTnknus> zmmz}*6w}{Nf=vQt071~E$u~S13KG5yFa93`i-WR8Nl~{cIQYKtx2mu(Fa!o>=t_Vx z#p`2C42vIt5~UrOe;dUA0OI?D`KOODF?5@P6vQuPsPbiqYW-Hi*Ubx3(R#9krS(9m z1bFM-;bTk;hPN{kK=!H^fp;z)X9f8NGz{H(yQH=mnYjv5JH zhAf6s)*TBZd>I0=82*cbY-&Ej(|VxPyIU0O;!FIkCM*mLpnC%qK>qJ;1(_1?Ulinq z2vGcYx1vada>RFU1*r-9FA8#U^AR4ZVS0(bMT8kz%pPa`0NuU^N-q5%9|r_wh)DV}yeKFDN88I>uwYn*1xPR&DtHNW zOz#_>g(aZ4d+~HP1H)@y&@yGPhr`1Ig2BE_mh@%F0GB?+$C(%+TMxwXw>bU&|KAq0 zqmjS07?i3(Ca^L%Ffary1~G#If?t&F0o&Yp7;Jne*i2}4Dwzu^26I48xsVT5^}4&; zRUizK!KQ%3cR<8n9s=#Yd&84)03^5=DtP7R|Nmg4j)P4FRg$2sq?L>e4835H?yaC) z)jJoog%R$L=aRk*VK3GnV`2bhSpF6^$OhZ)y&$#WFUlYp>*XZSfd$}1dVs&x8f4^L z(1`qNk$`~ku>Yc9czg#QoaXgh1-te>mO>(goTw9}pP) zUldfPf{rrS)msKBN3v8vomY_XX-JaEC;^!v3^ijLRB#GN@Lw*(wj!wD z5s=_Zs354*+5Cnl;{{0Y3RI8>x|vf%+Lz(QeyE^3RL}+_xC$y*1rKMun6DS-67SbmU+ zp?51N&2}E|1s??7$)eIb7c^ni+X|ZK3J41he{u0369e36Xrg!J3CQ9IgK}zlAgV!k zxDv~p&;YS@ZwDtBuC5z zZPzYQV|bAbiuhL0`i8LXSe{-mD>#b<6gnuzLfb>lZ+MP_kC1l()kbqQ{{R0U{G$B; zJSJQq{t`IO3i1u8Zhi?`AO&fxPnbZ?c~Ri~3>+u-d_L~L0vYz=uwH(u<+uY6Wb{iw z`^S`j#~nlej5+QA@+8CYh7%wj0|RKA1f>52A1{lYyZiKU2M)-v8IP9c ztfb=(0+7)&ktoKxl2G~ug71IIiQXE z-5wI%5i*^<6F}l~r+~;_&}kW+;4?Y8JruelR62V>w-tBJ?E%YLfc4sd?bYax(CO@L z0Ey3S0g=51U|G=NdEFic-4Q08y*ohSbN7JAUJbCU4p^^6cZ5x6?*@?g+$|uoR{<=m z0!qZapdV4~4_K^7QdmnZN)4gE|iry1~ruo}-{J z>z;EI6lk5NI&U0&#Cz}oZ|77Akj1yU_k!qyuY@~WMgIQ(&w0J`MCYmQtswTn7s3Z$ z$#Nd+oGJiv9m`!%+UdO2*~$YtXYZA4FUwi5$W#uHNv$j(4}z6;gH?bQBYz)d7p5d{Buh|UG8Qy2!aupPG-91-7fCiN2T>bLr|9{~v}=5ovomwoG!lXo(dAX_!_hh4)=BPsE*ehoxMLm zCiQ|$>YNL*=-@+%&R(#^b3w{MSC7nn15z^=q>>w~hPxLeVtC8&1jL|ju#Nm{Zn7VI z&2D(Y@D}4S!RwHaX5Mo21=#sVL0USu90kQ@=bocEfB*k?=mbYb^ACUiKG2LGB$_~> z*S!^-sP=*q*uiH)-K}88bD{33An}7Q_&Prxe8tCku=96!D@de!D@Xz7<%19Sx~GDe z2j2;G?*+*me8kt;dgIUk{|Da-aegp7*g5qM$TMJFoWCIY3@;yi!3ov(OdP836=!Gb z1(3ey;+!8k&vj0{0y^2_80W9f`<+`sBYlR~yQhMZDdSWSuXFDckh#5}B-`Bzia)_# zhzQ6ziU+&rf?U(x3W~(;y`aReco^cX<`4fN-ctP0y%m%nnm_$FJgE4|@G@gB$YjB} zU~}ez(nvSY-2fS121tT|NO#NJ4FL(YTm^+}cP}VGL$yq~3JPV$R*)&(b3qASa4Og= z@bMuBAF^~$1*tyxn5FYvH>41`fAA$!H@GA@_)4a;_Y5ciUdV7>=R5{caPYBQcPm)a z3#RU=AZgB9ovkN8${xxYUgtc~Jr!gR#2GMy*bR>ze97K9^$1AWW693m1K^+nD{KX^ z4?dLSyv2FK@Ot-LP+`^G3o5J(k3pQ*4R)>KDbV^Qu$H-?B1`cm#B}AkprQ+u=DNWJ zT{m17WClW(@mO~&DAc=qK`|hBy|Wb*cimG#0S-B)i5VPDom0UvI29CwkT~m{3f4Cj zbTE-HIQ%+$LApApf@8E76u;e5L2l|qF7kRo?&<_5+|H?>Vw4%2Y9PMp>;;(yaWUj* z6-aIo2B#v2Zb)ejjvYuI=|n20JEwxY*0~iF7@d1TkSgxD`}2bc2s- z>7EO&F{Xk<1owg}3&vJ()gTNxS*jasl;BiQMbSMKB*WMWt{j3nx~GCX(A^8tBsdjZ zS9r5@_d-;H)p&#YAmH)_EE_D)=`GR?4kpG{P#pqE-hxv>HA(kWkO*Tdxb_H^faDNJ zvKO2Rs!Y14f}|K*!4*ibLibcqG(nFx!Y!`KR{L%OGem3hl__k#3xdaHB> zYjpR5m4Rcl(_2SyDyW|621hevE2wVio(j_28EnuEj$^^8psJ?37o@Dy+oXFcSWPcT zurt`A)7z%;2&mEp&nAF6s(aKyB@?7Qk365yxF6Jf0G%4j-?9z5ix_m?a(6pOy!Akd z8EAuV^N;#^X~gbc_s;1c+0F|kpaK8-x)-1!FNW|Jb3y%j@IKJz{liNAvm zH@a;cnGqDcDW{{1F*lgr+YW`7Q z_X0A03u{&OhI@4Wc+m&iSPVAH#+M2OqF^PXhbi^+o5w&I$*W#m%iyd(Rqu1$th<3CEuA3K49*=dGHyt z;q8MjWjkG8fGqmZ`HS-e=dI3To!6UdpXAqDc85Oc_T}ij;Bd@^%cG(BM}9qMt95S~ zL$@o(F&8FxhRzGkKk`9S6z{r2IeMc!I-5W)d>zv5`vk0n(W9aBgaar{#d`x7yL~y1 zxp28NfYw#JJ^_d48<5|?ngT&189^^DfjZ7dc)DXbnh$$q6@UUJe;sHDNC4y#&`sf; zzd9O02PA^-2p8y>xEpl1ZR1YR0PT;1FE~0HcY&B6_}Bc9=xE#nV+(XNf{q>R1c`HW zH0}e7cQk@JaowSBKyv~T9gPP-WBL%DKu6<21dpSm@eqX9G4U{j(e3(zf6WDnj>aR% ze1VR}qsV-Yj>cmkt4?%O9asz9ezn5%^L%O{0c!#jt;*fkY8s(boiGLL$Ad1Pqg_MWAk-}m#lxF=Yv7|XR*x(JW%JixS;b- zpfj?;^IHPDp!@UT^IM=k7I^-tU^8eoOW`hRh@o+uVZlMr{FWT%{1zv= z`N|mP8-P3n+W*h61!Nj-^RI)=hjf`kJD)bc5$OgUdOLAFsC3|IJy61Q@-XOFID^%o zW6Br;UL3DyV2Fwg$oL=!I{!8jbaa+M739!j!viM|Lknb35x@X3?>H++9#mO$yK)4) zNMFyya1t6`p!1~-4|I!y6trF{;c9-vlg02NwVr|DBy_z#!Fd*==CS)L%LOq_K_?a;2Mqu&WME(j3(H~*e{mHwz;{HT^B73jm=QFE zlA$aQnxylF)R>)zUnu?upGMgFl7WHY1!&t(=dIQQB_^#0g7{m$F)%O$wEpk>!Qb)_ z#LO@RxtBj2?B3RIB|P96mHiM~3@>$F=oAeAIrmbjc6aTE<~Ka8ZAJ%rG&@uWN+%1&J*BPMz^a#vjs;f=&p)xhSmcmkGoxEI)8$g-L4A!QxCNs z;GYURbF}ot>m#84aA07Dmpo{!*%{*Y&ciQ3!)QAq<$W1mivIuqAHo8OyC>}s34u^7dmx9iu?yd&ioZ(=}#NPwHro)#5ba{odNb99;PmxaF z52Z@2-#QIpZUSA?;rpV~iKWvE>DZOl|D|@_0^PnJdLvl6Yv1&;h=I@XwYfHb2e#O$Q?U6UOY0?m@CA$h zrLVvzj)MZr_d_SkM9>Z%4h$o^1uQ@DH-qkH>~{U2d9Bj`tm)-e&^ahb=g~vYZ;|PC z<|&^z#S`|*G``@V7L^nC$}v^>y6xi3$5oJe<} z2xyee^#Le~TmN@Eh;+Js;BUDP3RK@Gpf*;^21W)3%i1^mEkTS74B=tH-M$|JU)cFD zF!YLm+8YerzMzBcdQG@`Wu&@8-)R2oyxuL`d9nF0i{`;jKG5|Q7x~*kv1EC#M6@^j zzv0Q|UktA~yIHzBS^69;Pt||zc75}j2Ne7vO@CT1m9l!Y9;p8S3Kri7pcauM_^K^O zc-n!KYMr5PKzAG+2gO+s*o&brxl-DM)jA%5$25b2Htd9L+8 zKln;Y!%N-1Z!Ax}7J-g$cKd#SCI;)!H#Hx-Ltk{ez5(sQ^W^{?!S4E?6UhZ7Y7GAT zEudXS;AjS=FVICDt(Qt(fb&*xa6r(DRj!a!QTQKpVrf9oia%D~9pVt4dP>Oxg zdYiu`9CSg7>jO}+`4Uv_fuadiCWU*04YjO&)9HGr#I2VF5@VqsdQAj+MI^do-*hu+ z{_Z^3?RtmtMDrmQ$aNzpiVQ8Ul?Zzqo^1XNj;StiOq~YhJkTv!zMzY7x)qY8Z^DDax??{Czu-gmL+FQYpQb;pCt-dF zeF4fLlR;$NgF|B5~Mu_ zuP;DlPN_h5Esy1=602@E(0S0%0<_bOCm<|5=!GL_ty&xp=m>qdPdeSu@;A8NZFd13 z{|TBcaX>c5nI||r?8UEN|NnQQ9D};T3AES(?w+vV?pTiQQW5CUq&xw^FOGrqlnQjl z^1yV0j&gq)&x!5)RD^zCfxzxio}l0tVxUd8nEK^885qE|CV~K+mkzSO^)~qA_}~|- zA#t&SrBtfhnWgnWiEwwY2s9&bcyxkHiw&UFGTtoUX_?lO zC9>VlBHbY!e|CW8(ONH+u<`Fb)cisI;6qk$dH|hu-U&LdJuDbhH-vI@9_u`O@EvRO zV|l{^mPIUO;@wUn9XEG@N{h>nT17U%D(dJsZ1*LA%&6t)Jly<1{@`oYPS+2X@hs(B zy~T`{^2G|BYPn%cka6EZ}RiUUM90=?Aqu94$WipJPNwEVES{xbJ3n^2emKqoy1s^?yPQSyUS~NpszA9IR-Q?8mvVI1 z@`Sz628~U}fifZJ{)T*zM2KUCh#Ysni;r=9{Z| z7)muPKbBawUMgkpb_R6_b1grXXtiD{QG;;hds+Bk$pqS6Za(oJq_O0^<;T+Fh6h?t zmOKpz>@F4w>y8%*ez8rRfuZvdq+q#Ja=Q7`|89StgRkUUPr?cX!wbzn7$pxhpJ05w zrt?H^>KDxq;N%PoAMo|5wF2RwVDe@O><$(QdNDyA9Alk_S`U;!99pW-`mIE$+fAhP zQl|jS=uS6K%Iv%VHc#_<=dahdFvn9yA#}Ee?h^ zyQ^3_UFUTAZV2c+-0jMv`8(i+p$*vj*4zAjt&rOqS`U=)2LuFzd(*-Y*=|>n?odzz zvH3qEsM%Y31azEJkqCdwOVDx~nSI@^9G$UyS`UzDqh?SAgc;MGSAZ9w-qC=ynwec(K}+fgx%I zV`K@_X2#&~7d@7ss;%2~NoP#!iEh_50pZ=Q2Lgg$Yynpj3Z1bBx?|S_cl+)L><&E= z6!u~cSX`hxc1P=h61Gm3dEK#d0-&10vKYF3_XNI(Py-ig%|{ekFO^7Y{ssqs=$=lN zSsS46vVgxXDP_f-7&ov-qB{tAtV?XY?094*~ zyDkU_f8lGvzyP{g9W*51GWW!5uI|_auqM;5nopg+2dqnvlt>z0dMyAcHoAR}bhAwC zWSQn<9lE3DV|VP1mwQ3mx8Gl+&cKdR`JfL~F6CS8yt(QOv%6AL@)B}dMJH2>14tFAoUh7hx5^Yc)+Kt8V z66h)=H}EA&t~)GUSJVo1M~ig(iGbZV8SFk#Vc2@0A;CP_Ml72aS!q;W_RK zTKxNdO`@Pf-48q%Ny3JQQ1FU$~u?0TZp^#~}K_dtUg9E>kPGsCd<3Mk17fR~(r zMu@T)UReAAUjPQ0`~ZzVLF$X+u5Umd>5c_mUj%9<-s^Ve>2&>2k`@4J)olT_b=*P4 zU+aMqt?t?nt^Z53K>dH$H?0RstU#SIR}N?>yxeYqH2(jg^<>G-?l6|tOC^^AKw)$9 z1Lz81P{*nDK1WqzK?CVefVWtzebvc74%$pv1V_^+hMb z)r=Ml3=;yf7{kL~sC@>X>ko3RHrTZi16SSO_mG{5mBINoD<(cu_@4cp!7;$U|9Hz3{V+wqVht(46=xx!wjsFG5p0m zm`a$ZV4(_i-2{01zyj9abp>sk?R5Qc-1QE~zsFs#fT-?Rfv^_|=3w(XkG%*3u@1l1 z?ED6~Rp}czeSuu09+<@#7WU%kSCA8VvKWJdU+nz)|3Ap#VK2_Zl$D%-=-c=C|Nl!H@SkcK&*9ZJ9 zju1t`FAjhe-H43OVhDSY46}>B^*&_rYZl{+f1m(A-t7w3eSp8k6{0olMXMP&0>MWI zo&YV8>;Wx&4gejk47%SG9Eb%$OF0xJmp z2oey0T^m;dz|za$BB2+8x?L{>yqE$O5rEimA>hT5Par)4pyB2$P*LT2 zp&Q&cZ3SK805Cg(q^n;Q$i^>akLy&Tw zPS-nO-Jx%S0$#Me2gk~fnBbL{%Rm>>fRe`US75CWr!qrq z%3^#`0#|z6fd`cMUj~D22MZ4dhoIQ||NpzgK($k6=owIje*)%Skhj3ItFC9dLoal? z@pK3AK-D1oDIg#S6t^#YO+kg=h3?QZodG;A-+~;~?Fw32`vQ^>*S-V0?&T+t49K}W zuRxUtXl0rkXoBZTKp4n5FVvt0tATFvgO^Pp2E4xPuH^x>{oQ%G<5@sA zX}bzQ`bVH57t{+Z5j*Y%t~j8@DXgUH4QA{N{a`6pW7h2^((NnI>G~!xxI0`VDBuMH zq;_sSP{IkCx@MWx9s2=Pg~qWU4HE?f1ckkDGXNzBf!BNB z6!2n-J}Bam%s&FPqGWDBFsK3PBoffevM=DpYH%?Dx)N>ys2*pT*6sSF)AhsaNxdlT zDVyW2palsGptfZx$V10nLF2~^AlC;&<^*c9!7~7FI(=_IYmL@#B~svakQgLEtY9o* zKkj-3l-#>PnnXH7Ux1GFspdKE3L4I2XuVw`2i}eI6cXSo7)$t$yIufkfc7`LgGD++ z@4Sxh_67w!l2y0CRt3LU4c7^`%8do23$!xhL3bV8s&6GCV7FDlH1M~Arslf+L^^%% zbi3Z@4t-;I9JJiS^#kLn&e}7ewH6hi>)S!v0$w;HwCw<`x`B=Sx6FYQ zL18b1VdDHPprHWJv|@Mcli(MxwLw?+odDhV)_EK>U=M1_@wff}O;Wl(0oT2*Ct44b z$TZiUV1is!82~Cn!@EHv@3p$%gxL*h6h7(pJ<}a~q%(k}(}M>zT>l)@+i*RC)Fk|; z1F{Spo-c(#V~pQGBmJ&VEE#LvtZN_ePdQ{=dk5O=4Si5w3goIguX#GZ zf%{9-K~rwlp)YDazWfU*AwkN!OYekr$G!oVh~Y1o)j&Q~Xg$y!`UF-OY98tgeex2t z%^Q~4CWMD~mp*|^229ieRX-oPt3+Oc&W?dptxp18RDxa6dARwAz-#tymg$`=pw7^f znlH_7c*0-Y2KnoL^AUlUQ~!Y`R3KIQn}8QiS|A4qSl8a^1iAh}iG<;$*IdZ%e^c}E zr7h^ZGuJz>A4Ah?Xy;SJ_^vCY+YAt=l}mfg&q=ylz)wHKgAty@r>XYqv1+x0o|C zFo4y9#vuY(jyr;z)Ud>H+;s^^@k`MBLSSHb=z^eb*DV1rGBp?&K;7clEuF3tnvV$Z z?{%388E~1w-@1~SfuXx}i{T~9(iyM$JHK_uPJs8Hx72(DZANkh4_%b8fEK=&Zm_(@ z-#-_m$(IMx$?taE0BXhYv49NX=muX{Y{|yos|gx23O&&6JHaya2&lj3djyvAT8qGn z_gI!5;crO;?;Y&k3yL(*@K@N29hwZFPz4nh;6O6G^qRN3bPqTwPJ?8n4K?pNV^?&S zZU_qMtvvx6%jk~X((5A46!4--oq^#`r)vx3Eb5)0E6oiLd|ut{dZ77;z;Rd5_C1Dg z42&g$;93GS`p16UbqXlpx_x(a#~$$P1RqA*Ez`}v_b_N&sugsoY3GeD@OiG6A21&1 z1Ro;3L!Nk z@Ln6U7ZtM5oVTSusXO)v^+%6n6dtO=$)Xmt^%Q89O#UDXX z7jR4S5rvoU|NZ|z;XgRB@ppi3xb2<`IxD!_^}um(dIC*Lb<51?oC`Yb_N6@Ng3RDR zka;hz>w)qbWXfj?D4QT<&c5V7|NjRBbbfFM4|tKM0V?$RD` zHU|ykZK(N(aBFwzhOlnmo{(} z;BWo)`~QEBPEavW{|r(Zw0;7Oto~%14kd z=LA4XsDKwikYT*zuAuv?89H5$yqp4ZwCfB|Is?`E;4+cFR|%AHV>!CLML?++y3pkl zXl(R|b?FxV-Xf4ZNLPvAOVIHsAXPD&|FqsNW%XJ(5{`y^$Bc)qP!h2b^f-17^&?CJv0^Ok#dU*u8 zUAJg{=oaie)_I}%AdBXYPUhyrES49_MEpuLxyW6*?^(23*FsMTg8fo7U@Zy>xO1gZ_ z3o6@DlH|LWUm>vpEiG%0guj>oX`#Ga2673wZUg0pFpy)Q$@K_0xz6ANWe-qteF?ht zsJnJXcvyGrkzi2W>md^OVum)T;RK$#JJ1~@(iwV$zr_&Lu3_2a_EH0s&jPw#mw*Sa zU+5rQ+R^EH0P4~Xa43Q@&yJdRFTql^c$ozBfSKhR_?`A`?49FSK4Nz0~dd zz|!{ye=F#E;%?VFAgirGLr=9gIQjeKnHU(ld~Y=VOp;Kfwkp&uYaO_^W+|L?8^cX49RG#?SrJl=Y{LKoUz1r06vzF_>;%`!9Kg*?P_ ztp`e&o6j+NS3Uw=YaPePzyO{o?DBnZ`GMsJ{yuQ7cD>RqvZ3`-X$h#;qYTQUx2;1T z)TqAv52}-0-+%&)Wk$dYX=PC2x&rD1ux#o)^C2oz4;zE`?gHU@OpUVwCs znn0>!Z*;rfaRylyd&AQ827e!DBPz%#z83;tJWxRP3AptGj^ySa40RfvkoBtIj^GuL z4w0sy7wZ&2mG+J1BLWVct~ab>Z`9xK_Px^S3!f=CTf@K*mSvIA07|aipyXQJzy!Kp zJ&WPRM>!;)zx0I6jbt&t$W(!gGrcqdHBYiUAqMn<46tfoVhG4`fQT#uiD-aD>>(m+ zK_X%eObkI;b`X*EAQ6@ZCI(QR2sOL}>VX*E24(I77RU^>2WSqc^*||~Q}ba3%WLHy zJ8yty{`vPDU_1T!Hqgpu)oYOlGHUIk0-%`)Wz;N&p$OKTj?F6l+dt({;fWHNN$2qDI(_luV zp%`HUvaIyQan}c+UNh&l&e9i+wJ$&?GVr(8g5+XfbcYHwA7(%Jnz`4R`QQtt)=QnP zPx!&Jr_FD8_JOilz>ABJMqj7voz5H0512KNb$$S)Z_u$C%@6)`hu+aV1{w`=;sA|^ zII)1n#GSzXiPi)BeV{(S;qB&s%=LENp%4$$gVv!x=I93dfulQI#yVV~C=lGKTsD<~ zK^2q{nvV!@9`1I1;07vhn*TA^9qJCfWB9GxNdz?b5;NhCSL>zD&=0TYb-QyIUUKMk z=je7<=@Mb=b!6;xmwCAhRFk-Kz{FXYz=m=j?sWo5zg`APr@nUrU$Du6N(S%%KB)QQ z`X(qSAmaciUHE{?c2JMyL8m~s>m69t57OxR1R5|NSOcaLTz9!Kzq}7|1QzGTfnc<>QN7c=J}=jNZxbx*oWUl^Y3b`$9g+40A}^?yBRp#W%L zQJ~xP1yVo7>rw|NsB@Ix@dZg_I8&iVD6AFP>>IFhq8Tz6g4uBLj+A@KR}T z%<`aH5EvMiVF}W+2~v%|z71)}qs_m`K-ax@$HHQwi`hn(zeR_Ufx*V0gcn@G!yMgE z%~(3)bCkG#JID(cimpsIu{|yL#F|&e+p*!>g;~{TQ4hsFydb`fBJB%fu+fBss z7HF-)j${R2hQQJ*J2Dk~8N36+U!=oyz%vF)?q)y6V9+h! z?fSvFQy!Mm5c1(5dEIVyhfemF>5#k-_QLNvsI|otkddnZI@0KWIp}Z_@YJpA2bdAZ zU3tnCd>NqJm$%EA7y<*svkYDwtYBhzeK{Z?JWKb*)(X&G7lD_&pxg!?=td7OPz%47 z=fxdR8~zPXaObfXAHlsPo-D@juop`~&EZm>uiiNRWsgn`RVyI&UB`k(cN0x3c7SN(8s6gytkhlZO>ud1&2A6HQPTLK+c*m}EDqLgVfW4A9)>&a3HP~?KL5O~OLCM0#O zU@R#E5A$gjgHv1Q@y>(YaV)PDLGvOaGax(n7{RCd33Nbcjt)l04narn$~&Du8|)cM z#X+m*nZS$aJsdlk8Y~$~LCX(5SpF;#>~{SS)XfkO82+NN92~ZwMQA_3)A3+ii;EZ- zUUz`})9nkIKLEALeL0T1f@{>+m!J^=P_l)!HzYv)@LG`p573H|DDG`n-i{;8-iM36(WWw4G(m2d37;)9elvSdC>3x zm?Z#bNpK$Q7aaz14?d9KJotJ?c*b=`28Il9(XgH+d7HPJ;Sjy>9`PuLQsM%&e$_-7J0IKYLdG04>RjJ>2W@@AXTJ^}0IH z@~XL3hLOKz9U}t+e_uZ6Y`9t(CjJ(FCQy@ErrT9S^8zTkN@aR^8oOO3I(-GYYc~Ap z4%zSn)LrikyX-JlsRj{m-Q zI!!u2E)A9Gj+yv}zf%u1)QBibyL~}n0dl%e-=F4JOr5@0UUP$1NU}`pbeYEDRrwjb z)e%(Afip0FD`u=agYd>Op!f}^|kL8nbqx9bbd50W?k`@ZQs)_I!0 z6MTGSs6b~FOQ+FG&O9?ftlReubLoZV%MAa0-yCP@2dR5Kv)lDTcj<*z(B3}7+Z~6y zT`y?f=sf)W-b>KFjc#8V(AX5{@C5L@3Um(U!^@k0|NqzgCms6)=AfORk*zWY@OiA^ zVZmXbsITSejumPBR$|`k_8&A+%+qdpv&g{kWOMBYhSzf7_64X$Dg6MNg#$(YMNk#T zvdOQr^h4#-&J&Qe)gUFV9L?{Tj5>;o5IAG&Mbbh3QxX4wv3B^mr;F<6SH^H6u}hh7#w&}4;3 zGu-W^JQx3gZPW)XA_Aq!Sf1|M54}8~);B}12xBkH{O(!-&^RFn+5V!7*^ zUYQNSFD`=4;X49aB-Ek9#J~{NYXjB{avyjBF!$4g1^pBy)xT-dD^={o1nl$z+R=FLFbTx+OwZ~S!M-v`||X%bOi*wm<)ED zK<9DrT1x&F5l|K53RV?J0fI%QK@}us4#Wmqomj(egs)P5x%k&XUegUY(&&N~F+s zP=Tf`|NA~EebM<1JlE$d09vWSG7&U$ZTYF@eHd&2yjGxB#3HCW_5WO<_VQ?Zygf6GVE91v(9rDG>(gI(*%l2?|W z_*-uM{r?}jLys4fU%FZPI$63LEl<~fg(aTwaA-2=u6+YK;!VV|yY@pED8a;n(@NwY zPz#O+C9N!lFHG#b^7sFL&=!?90o}D9!e4j`fgBA=B%p>DG!3Dol}t>%9H6C~y)5zp zFL=P(1wirBcNesJ2{eo8D*zhz2CWL{yw%IHIiT~z3(#3DFE9N4|34g@rh{K>{{8>| z%cY>XA!Hq{908ptx6p$1_s9CFQ5Mf6}tQ_ z(I7RoPYf^lH~$CkYJ}`3zFz+oJVgdCuRylMa)7D~aA{Ro5^Q+jHRpumEVzm*VQ_hZ zt-RvtMwC}Ppz>-vq~QlEuXvElt5vXQ1C>UCR;v;u5%60f?3iQfs=;Z;Oee(^ic z0JN4Dw7sd@RV1Jr~_FU>SGBEu2{ZRS> zQeJ?@dqDvV+S!g=Uigaiif{yhymTQT;Kc;6TfyZ8sJjDh&T@1fhS*%l0vcoll~o_X z$hhw!DleF9O2A>)SR3fLop%pn!bw z6kbLkqOuXT$d*07-HLyin%@hYu)7`#@6QG$8^?6Jgz<96^CE-2VRm|56Jy zQw0rdj(`_Upd1WZs|jl9v4}%bZqN&9kkayh|NmS5J{x!%N;E5AcB6O&uh3-<0=2{8;ECc|3Bv=REkxTvE%#87Zcqu! z-wrx_fWKum0|SHMf!F-d`L5$Epr$^9gSD$b&1b^{-Jt@zLG?~2%e3ZWEU(2TfXiF{ zmR_()0?rU|>sX1}xNcvOZkCy#cH(Vt&kI!PhrO_YWZl=7pyvNEJkVQv0=&wmH}=Hm z)u1_ciQsNuP@yRRDg?pUMN9w^Gi)ozo3i(V|*)ArrU`HH2TK{ zD$0E&EWJ4Rdp>~%Xlo_-`TLE)?JH298RSY(ZRN`Gq7O8u2I|@IfO}>FjE6v_N+?fv zsD$Qq#)F-;0-zB;Uk=Mq0sbD)q8CsP(vzpt_YLUKSy_-pt}>PZ0{lI!V7A1;2TYx= zA3zbv-w&FM1qV+6xG%@k?fNGCg$!g}e7CDax35ezg79G#^+mc9b~;JdNAeFZ@NTMLTDS^<9kzGa|F zD^#YN2^7A2L4|$**m2-pj27TNxd`}BmTm`@fES>f)0&ScfcywLy@ey7+ld8y`c3$Y zznqZD^LV!_D6E=~2=vNubRGm5R=~pe5!A^7H*Jx9C`7dPV2KQz*&cx=q>l)IW`at2 z3~z_M_?W@~K0Um|3!EjoT_u7U4+Ojb&Fg`N1bihxaSb|d1)Kr-`_BCZpAjz8T`JKX z3*Plu!P4ytI(+7Z*ysQMUmgavFiSnY{Y-lIAx&fiKd~?Jk9>&_J;pblMog zZt$w-PA`F%o8czg!t|YeeGJ^5=?;|%1BG`KOLwS9aJTE5z@Y9>o)@j3{{Mfu1k_r8 z16d{{5Ck3{0;hFX8E~{r1hoi3z3%2WJXs<4YaT+9YWIGZ?miULYP+ z$bnAX=yc`ij{S4;<-a)i#xX?x3kJ1Ex_JxgeHmI$LWgimHM?CwOYHs2l%|J9B`#%bho%YK9wOQ{MdtAiX3x+<*sh`@Je zfgk_>|1UL$1qTBtK;Q6yJ@zGW5hSb)63*d;Z}@}F ze?a`}EU<#HRHXR?V|TGgr?UX0-5}Wdt<(wXNl5w$3d&*(cySH1KKfv{GYfd-V(WoA z9_V^S%V3uJFP+{ZouwQQZ7;R|{r?}B0ooUx;il-zkP!fK1zS9976x>_1vI|BK)x<9 zgZWx18nl*!=QuMsy+b0*8LRB!2td}G zfXCYnzd>Rw806y8l;9WF{{R0UwSuwK8|-+NfES>SYUi=;V3y7R7SO&{H=b^1flfDp zZf8(cXn3;IjidP&Lmha>ZWiw=+ioC=kM4n8kpmczC+KIReA77+y>V&4wKV1;qzQ ztQ>~v-5bHc@cIy_;R`GOAnQ>e{<8)9&oB7Jw}1ctN3LKjH3jQq33zc7bV|XYQ{C_c%FhWI3! zBN*h9v!Ja>po0oJFQED4b2!K+pz;IU{sh+=wVdx*S- zosR(SdQWq*yjAlRG~*S|0!j<+9NkU=o$dml9)df3-%db4aQKTmpoaPpf!CX%?MHBW z0L?{~@^o{zo~+aFb{1*<)@cAOC1GnMVa22~3$)yXx_$yEKLx*NgPM8>i_uibO-QsOLT@F=?)O+ z3_SocCUj4?V5dNL0So9X&I%5YA%Ps70iZKAI|F#S0|hz*1iAx7Is-(yU5|8!9_W

    hR**?H>VOXlWB?5!tDvV%bVJa?Ji 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�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

    qto?sh%U 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

    -M%lJI1hG) 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%0AZ4S%GTfSQ;opvEs`&}GSNt;$$0=h|312ovC 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,?5Wp^*NoSV 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

    VZ-4&&g8ha2i}n}q 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%0DYup>$CN3ziaEiRDc^%BUyUi>jj_g^ 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

    nz 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%0DpEce|89aTt0hT0e@Bm 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�=KT z6qZ~w{v0R%9B1~#Ox7xY_GB&gWNr2o9hN*z)@n8WoFev=a`u!m)@nbNybv~JTQ+4I zRu^wp?`T%<7`BuocI{YpGZS_@8+KP$mbgmxz&iG@c-A5Z_9##G1S|FgOV)~D)@pxt z?Kl>HWtLDIc2_s{AVv1DME0-*_9!p**gXE6V%F*a7AF<9C_lE86t7c2`e!S9f+FPu6Tzb{{X6)Ijzi74{%y z_8=wpAXWCTB$f^WQkHBh_Sgc} zvP$;YeD>I4mK-;h99Q<(67~dZ_QY)V#2nVD0QO`Z_GDf5WIdKVE%p>$_LNHYlnVBg zD)v-=)*2O-yg=3(UG~&k_B1c{G;g*5Z&ur2wx}Rh7eBVBKo%!8Ru><(r~pC%1lC{;)?jVcC`Z;{Ef#+@cI{+VP;b

    AaV-N%RB$Cp1Pg+C>gKP8PnC7m@bg*97)JxH4+ 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℘Q)g&17D*C13RA{0}q1%!vO{(1_m171_omWMtw^L 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

  1. dd3LO?YDs)`vq|j-hvqI;E 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
    ;h3=9`mfy4wrJ>AtH zmIxCALqiKl7Svx3m<198^_LqKf>@ybazQId7SvxBm<$pF^_LCWKrB#ySs@O@0*!|_ zq=8r_ObiSU3PCIjkjZ%m-P^gNcE`;TDLs2gJG!VjTdv`4EV81QZ6JKq=w`$n{{>8IXA$AQxN!*$YnhS3u(& z;QVm|lwpU<$}bU{(e*1H%TeY!1kd?I0Zm%nS?#%RsCW5UUl$ssQ=CUP>;D zp|@=Z0|UeHwi=NA#Zqzs$J-h}TFXI_$J<&!9(ItFdvTPk7s7>vV3o-%JdTs!h zk)Y8KP|qL?GK2}*BJtu`HX}pW3xOmM`KyP4A?(Ey@F0o|tXKvW?O+UQzk&90tzar; z16Qzz!K*VfW-x=sjItPBoOT2?R6%1t2B7u;&kHTk>^Eowv@ob48koiK;)Mf92}k#_ zxWl048@S=jWPAYJX$Q4ex;-3PPnL>xGjw}^CMQMAK@G*n;4?RQ4tEC_fZWh20C5@? z^#)+|o8js?x}8`+&E)0>+^|*_*ehTHte+#SyHEsdYj}4BM~QG2V}^%0s4bBPF(f_? zvSv7oI~Xc4^**>(Y&}q_n#GjG2ov5176vUe=KFS-xrC)To#hW_Jd5#xXjm5w&At+$ zEXIr)uw6_LyW$RaJ8*P?dssZ*4uTvmP@-$?AyO|~!)hHMP|joRAyY2{VoMZ@W+Z^M z9={244WuO+cepcvqtk;2BRu7hyM!~$mE^$T+v%gi^0NKQ|Nq?qpneTUSa*>`r(t)H zOlKfVw+BaeAZQ|5pi`jRQ>4>_1!^cbGt60EEMPr6zO*0 z==NZVZ$8Nq2X+T+8DaAq(AjAQttZ2}jl11MI!jbQ=TP#L8o=fq7!*oWz(+(_1cJuW z<}3w`vk8Ejp%JVMpi`&>Km(YsIbba*&^G^Y(0Ef&*bDzV;Pai12(+AsPkaz@yy{LV~z|j4p`G`pC{}Sik6cq-@5fc2ZXIK~*nyX_J_}dP#fM=a- zvKYV`1H+Cx=YY;VIPMC{g$ysO5Jr?9e8IB>v?!>Qtvi&VGnnJW-^Cy4!)G=@D}Oz zmg&B5@RdMEuqar0r;myOXsoy+S**iZyxUo#BUl0?AP;Vli-Dbww(0@W!C zQUKb>q|=cs*WoPR?X1udtN;=e02$X2tk{vQ)ZwiR)(O$$t>!j$lpD&ZrJ=9f$$Jx*f@S9nSjQ#T?yXEZ+_ZfMYg9 zMS#CGiWw5L#atOC7D{q2{Xu7PIfD+Fb+A5B$JBkW`4JQ76b$gVP#tK~FR0(@$MKrE z*OOr;e@hz!0|WCx;p?E&F}g2+HeEKqVr;&_V12wssGi08ViAwEn@EjDJ*#z?K$&8< zi;9D#iwaNuhHow^0v!A;x0x6iy8R@&!(=-BI6A|4Ai}L1K{4c_!qe@?(Ot(g6J&w) zb^iWY3=9l4phZy46Cer%nokIHy0N?jZSvGU(S2O{Q1`{=LyXNA7_5(j^LQ9XIghoQ zOubGGt96(}u`0{~{QcVh|AWqd1UVuMj=52;{Lko)--ZA&D;; zG~iy#&|543OM0#hh}7rG0E%RRjsV7PSB8!ZrtVON4lm|zR|Zh3?Dk**$x3ttuyn%} zvVs+Yl6Z#~J4iTyr!z!F&LjvmLjsOXe5NK0wiHZ&=rv*sDO_l=bagqipfS4=;WeRiz z$bwCk17&m{6_pMz&@yWiXd%(Ana2a(A0Uz;V*#2=-hcW3|JOm?c^utgJj_RhPjxz5bb8x-b7KLW{}*hr160>D zUl2ag84MDCt=;Wy(d}&0d=QlSI=wAAoo!x=XK+|3fmX3g1iUD?{Qp1rl%wV&9I>E* z|JDN~%An*3Jq|@6Tou%;2nY;%(fScor3-)#!qGVl+OFGtL^9?43<|6{Fprer$_*-j1W;%n$q=f=PUp(^% zSq9p*+o}wba8c3d_LG>|{i54Vru$cSmO*_8%ZKc_3~rt?qW_fV2j5It9A}ct9=Nr(z4S;V0jtc1&8?W@w~A+46~XqML7CGsHu1_!)|4}bJ z0h8eN3u=4wj0LE@Sqwg(ljksaIW-5Yxd~nm(jDl~dZ|>jo3YzNBq-wnSh)*KIcS7L zpgYh7pp`b>PKsQ@=1Zd_`#Q1INf$$Q+(2O4zphnYQaDwIO ze$ng45*YjWe8phbaft#3=2KF#Xy-5wEn6aoOxOgfG3netr!Mq77_^zePIv;iY{;#IsnQv z&@2SX`wILmpj_7t$w#0i#)y108#Ek$sr5D_4}qIw&^%;+l?gmyD$x3^G`_n;1$4rc z3h1bxEC#UaLSLK(=LViEhF&*^fZ*^KcMpJcfKJo}HTL?!OY9|D50tRAek*0_{s2l> ztp`ekLtm6!0fj6m(IBKmKzCaqrcmSKVnJSpH4I-jfnpGp^g#U>(EO4136Ocxhm0>- zUno*2XS4KC;V6>;rKk)AaM!^OuBni7Jy^K`aC2?K+9Gbg2J;HLtm`B3<@;?>*Jugw-R2^eHJh0axyT07~L&k z2WB`bFfasw9T)Z@51gE#>iJu%I2jna_oyrZB@TDcDhYuM5i3wXi|y?H|1a}785nwd zR6vDnVCV~D@R1B0;4(>szttY3wFNBs?TAB(K*j}2kjArT{{Mez#>v3&4Pv`PiFtP$ zc;@{;i9p62u$q-1H9{c6gIR*I1hPcKUbsC0`vYe9BM#8iQg3!d_gRb^#$Hs-0JVZj z6hpHV!d~R+gK`(7q!i(AUCF_~0Bz2{=Isp@=nMsMLFXat01=(eF`do{z0Lxi&Y+1L z1>=+57dp8*y;wTEI6A#}I=ut}I=w`?-C02MJq9Qy`-65n`LlGJgO3xl0&i7!Ly9+X01nS=wPbLNiTksj< zl9t6W{B3jC;ogAuN?vcb1>fevZTq_I|9}40Dt34fGxE3Ourn}pJBzGf=`9v0l{xMv z0BTqqcN6*l|9|~)HwjRYbKDKIOQc~1V<}tn38qdr7SK&IZX(@&9LL!}14;b-o@@*Z zHJsLd0{rcEYzz$6ZZiBmrfduh^_ z0Mh)F==MM~KMfAPLNq@O$Z38?Kupy^Zhl69O@%f;BRZ0BH9tcLH9tKLzLMyGH9tMT zrb3&Z9vw+UH$7cIO;6Bi4Ul}_9ipO=B^C;*y$>7&>_V!%l)4 z3>+_$Ss56h`F;gs3Fo&X3jD1TSQr>Usj6uT3j@Ooo2j4}EM)_=sGT{wOBtH&82MX3 zW4qnO9GxYg^DV$C_**~=SGuXv#dT2;z}CI(>`?)&!64Ynt-0xZ7jlJ22S#_dMFq5#2HfNAE>V#H#a}S2*UQ)ZlZn4&F*5^0^G`YR`aD z1gOV<@!%^^*BjL7>d0W~@L+DXVB~Lg0(FFuI$R)C9RaMMCR~V003;;}bY!q~c(6lL zIanB+#6wg9ItsWt0=OYo1n_`paIXs7jk18~_UXvr>+s<3hIFPvR4hP_4ghUYw&*Aj z>Ie`9>5}LO5CPHPo>Ktm7+MF2Zj+7-u?`RMZVzy(4N-9b>z3>eQE})fkm?AK2I-RM z2#^8M0>>B_jyW(g9CKh|IOf322s)6fBS5wzL$1R^9u!`Xa^%JBNuUJA-!c_cL_i9@ z)&r%Wwv`HOp96yee=BHCr?(o`fqk(Qsw*C(3tF)B77Kh{3hJM6fb0haGrY%2Vb?YR z;(q~XsJntn=>)Lnp|whh^aBq*Z`Ya05%m`wiMtlTXH~N1V<34&yJ;Qn{g1S zY{>wd3N2eQNGMxUu#_zf;IbuUFH+gU-}3(V|Nk#VL6PC3B9q0?+XAlO04VA0Yjm5>QtQT>HJ`{0Uy!A_E=_4S2EZ2)Jwlb;rORB+zmr5J!-Kf#KyQ zP}9RlMFu=_6!@YKP3>fmG(7sj`3Ic6K!Y0$0i8Z7pqW*Lj08(i4^d)uIQwuL}FGFXoZ(%J5gHfX(FqSWmt(;X(!?Ise~?FT+(N+lpLIOxSB z@OUt2@C=lgOIi<<7=as~@M0QtcyM6Q3$90?x*fDiQwX#=u=OOUplNi*G5`p%kK$cga_M=2V zJ#uJc6V#jG=w|Eo5CM(r3bg*O70d9k0tJuJVQ@UaHerDK7bS|Iu4#ZwPidH>MXjt*LJ_SW}hzd_9C{%flJCq2pNrKjz@Emun zU|^O6pVWWcsm9v4FFH-Vb_0wA7?3eWKdP+M1k17;?uORxasiVzi^<4vGO_yV|@pf>XZkUp@P zpq{{i_tFqYHi4$$9llC~Mr}ZYEgZcb0-YY91}9G^Y+41>bpc~g?*!BzIu2TY0UA{U zcP`;P(AqJ!;|!qDgdJy;l;jQvcDI3+iU)@p-!^`0eYk`_?1iKzGeh$c7VE<$Ox-Um z=YiIlmk5Wwm?Q)fX0v_`>Z@AL12x-9T)%@?A%NE5l`3?Dm(^Q??gC{92z!w?8I+P7ZezfQ2{ojA7se>BcN>nM?|cDmmacy z9bd}27gTKY_JP(42ZnXd1KIK7>2)-R_D*wQWMBvidvO|Frn?QaF5miai9kTui@&O% z1jo@i4<(ImoN zNPT5u=xzgb`5=)ZmBrZWqQVmp_F{n(sN@9QH3u_g9%w57$ehrRXy#bX11+EgyC?EK zNDe7dy4ygjl%PJ+hWQ92*4+l`=tE@$VKN}GZa2`Cb-V##FMg>&f*{VNyA8C9+WK(k zJkYL+&UrT&7#KWNgR{>9vfEPF)jqRKVQr0;S)FABa11(L7jy${*6s0dsL5o2{ zR0O(@#&%AF%7BwKoB*Y7#CoSv!7PT18{o2HF?foJ=Wure$a2tpAb2tmG?&=;29z0E z4}f;BbFeTllm>$i;&ye{{T+bJNAOC7eJEl?E}RL$nrDFpx6MP76NkBndUbR!QHYkj7oB#U4uU0 zv+*Jt>>0Yhmq>!8&_RJ3uRdqd^D3W#oX3T!Un! zkBTs8%c4XOHX~V(joiWmHu621kuhK+Baw`BQ4t0mQ!EjP&B%?sNUltT7|HVm)s-G# zBiZ0a@*_O{(w>`vA;SW!;Hd_v`~(j$A7TLSz65(kB`CuHGjuF@85lBDK;kdf!t|Aj zW-)?Be0)}c><14ofkR0ItgH=18B^#BRWxNRU}fc1;VIGXBnZ}<2>I@8JJlzL(f*3EKae)r(2?~9&CI^&X z1VAkwu>V)EfSl2$4h!BE10Dv3j5~H9(E^016iD<4STqVITI$-1H$`oNI84MAG>pRE zZpp#GkOfMpn&3e+L=@zJLxLG*EPv~ICI$vrXs85Yi{Wrk%Gd%5n-{0mpiVE9$YRU@ zEyWLgAr3lV_6Wj;C18~cQB^81FoeE%dlgi)AXH8Pt1L%V=>SrB7)@mhSfwwj$_9|i znP@62z$%qdRWdL#guci}Q<(u)`BN3uM@$T%FI>@7hJaO`M^nkd5c)zIO{EK1K0yJeZU}aixWsnF`U9EINvDY5I0IIh15?T03K~^~Br%217hBL&&j9BmJDBQH0tNUq&~T`W3Zwvc zV+WVE4{bq(38DbsV++cJua%)*Ep^79-JGFDLbKZ`(EjPr7cq9IhBkoRISp>8BP^p~ zFT&q}Mn+-ooW}-sXQU&lkvU)^oso>hTX)SyHqsknq?7d&*pd}Ob3PJ*;Zvi-ddtmxX#X*Z+LFLm-cT~qr04q#J zQV1IG4G4WvfTpkptk4QcA!u1&KhII_fHic1M3zkJYmEG+rSLsIlDG$U=mMjlas zg%N?ACxdL{8PK}M&==}x!L9)|vJlBgXmY~dbUF!I5e0K)CB(=SG$Td8M#>=>39at2 z=esgwBh?^AE<`i(hYhHFI4uwJxHF>ZgsnBEjBMm((3V))fY28;9-xGTDD|Fz4K0Hk zYLCCrIR_e|by0!T@#T>Lp)Xd0kE%nIVi&*$s=^J7g%vp96P;y(GLG0FHE%_le=za4 zf|iGZ#(o-qf|?HCRt$*o60{^6G;9nm;>uqK1ctttlLl(fAl%Oa4(Dxhus|V@!1$o< z2REMff!3UdzL=Q~G7{l~Enpuc!;N&sAI`g(7#NysR74p0TR}^kAvFd^=!+)s8K4N4 z?f|=#2W~9rwj*$(7JDKCE%FA9dN?Z9bBl%mtg0`^C09zD^5WNo)Jpxwi3==K2g~c%Tq&*unDhjc_ z+&>`n#V)k6zXNQ^7a5puKo|Dn=?Z}cB0%BN{NsO_V)M!WfdOF|2{xc5HI3{4|8G75 z8r%af>;?CVvJ?YCUv#*FJd22l5U`C+FdO+>L92jZ=^lFxat(AKnFA>0zVL$SE0uuM zAOWE-+Q9Qk2pe?3Diz==B|!_^L3`3eUqquRl>jUKDh>0#B>0YqEXIJ)7Y1lbS-?t9 zAt?nF(O{*lXi7g=gPKkAk(7cKJAjqmIspnMxLdF z`mIDU?8T>*kQ*@rf-_Fog9czXg3S>DADAovT4@dHD63|Py*L3<8KNQsRT=c69ikF! z9r*Ii@GQoRBlb#i!T&|4fUcMN-F$?{AH06D%bn4^XgOK>Q~OY_kHr55 z%ZO3~&kYdB=k0h&_c`2OnPFQ)E82VclDAM)&UQQ>H?j3~L{ z2pXtRfsVy%1ZJ$USCRuAOTf^0R)~>-;l(W}P*PwC2n`N<@y;5u<6Z=GkY+6d1H**o ze}eq2HK0Qg{)0-)?&EdJU4o7+m-t&iJ863Z{_pUAbHop1Gc(lY)&uo-TmN?-uM-E2 zhj@C-+$RNc>%WFWiLD1Z1nb{|wi82~;r=34iWxMyqtSc>x%#XL2HOLf-`2=gNBS))_@{i1bWe-z~NZvxH(8UJo3++ITH*TaOZ&x${ODW ztsUYIdl8-vN?xFG7pCqTkcAzfRW4yK;vRyA@<0-7t+z`-lF*w9Rl%!zz+=Az4bteNI=+& z&jJh#-R>;S$5|i;xV-7^1MQs-40~}?09=1`w}Ga1S`UZ1n2Kl@7K#4Rs0p@hDIJUk8CFfGEZqU_+pj8zATmP2`b|3EzU_|7X z3dYvArJ$>qB)X4+@)G3!JA`}zBWT$Z=&ny>Z4RJArI?Qe^}1LH2L!)}g`Cg?TIF~g zRIk*iNPuo?Gyc~4za*r=o}t7){DmdB(FIC0EFd{lXLO(FzIgB@Q}_4o-=CLupK5-{ z%zWeX68?S8{{z4!#(&WW@YoAS_lNKIq`$efzAcGwsAXU%i41-5034?vgV{g^8-D|P z1nz^@ZzU|pm}8t_R{ZY%N|Y7dH7Yu-|4YI_&JPNIQH5a(N;sn1LeL|}m_Y{y2!N&{ z=Zk^T2q@R6fLbj7OJqSi^g%1gg92U%fd&L)RCGYMn7)1a@GoRi5`2cTN{MMV=t|rW z6$6mR1B1d}n1FZ1fKJ{0RsvcwCJ+$*;sW?QDGt!p6rdHa;4<3+w6nF_M@1ko{KW>S zJZM8_G^k(z*$!Hn2x-}XH?V`ozZ>6x2G9cn!(YgOkHY}3$WsLM@g(RpQ+&Dy;{CL&Nx6&VefIHz0-oMb9uO$$@Vt5(x-@p$&F~KZTi>HM37z4v=nO+wa z0hFX_3vvQ~OC19PLzjz+K+Ay=O&jGBRsMYk0{)AFhN!_K?xiB2Ga>@RUpT&m+_uWm z`mMAu7<9`4*d3sYkYMg8Z3_M`+5_gXbhm@@W$S@bQP4rrpr&j1i#~WG3^Y*|8{K#W z6mo|%E`WzG3zq%=57*BFTWJhc1D9awJ{AYp2``^Pvnj^6TMv{dbUVmEPNfus?9Od@ zQo$4UB4s70yl07vJ`9<=fi9`!0Tp$xMZl|)1p>of+|>XT%AnbRY|vUm&@^rqL&hKQ z81KauAR|CCcA$bCyqphIAGm@SS(ezr7Fd>;WHE$+E65l3SAxoOQ2K=y@!?@FRzuGH zY&{TP0u}5&92b4q`2Xuipb|B_`$yP|<>0eOK@0X|y8A)XE{!KayM@ETJHfmc-@(fQ zIpPn4?mrd)-9ZFi^9f#9ssQmdIJtrD7X%;e2Tpr|pe*tN6sK?bTk}EFEr%KRgIZ)I zY@GW*wtPPf+CW~y)d-#h0!?&)Lw!|<3?2t1xfiP;)0W?kD|EJjCZu3DV3mM&1gU_E@NdT*N?4nHR8&}6{#UYa z)~Kj}EM;VX2nv8WOi+#jh{FQqID7+7e6m2)flggg2@HGDeUgcx`vs^De9PYo>il-O zsHm)9Ea7TA4ceyO8Ka`Jf(6WTU|<0AIKaFHC{F;)V_<~HDL{Bk5FW^zr$Hwhfb}tz zNP#+23ZU(Lrl6V57og(iEq^OBGXn$2zu;-O5=lq|HJ%0?o&Z{_7o(yB*(2T!j)lha z;JEGtb6(s5Ey;yN+AdJf2t4)JdZ3i8Ge<=PyxufKMItEdg_0UH>GHQ)GDD(;i2*eC zxU-cJ90Dw@Z~0rx!A5|VqJmB`1|4GrPQLstdq5KKwf5^k{cnb_<1Q)^peT7Ex*RDK zjX_F(H$Dfs6I{g$hrO8c5TXEVi4Y`NG_Zp0|H;OJu>U*gB!R;W4J=@(I#yL)WLp0pZv)MFgG!>3=-xKaJa|BsKo)b@3;vyuU=RR#V=ri4 zsSh*@9+)KnI^|wyw2Nc#MCM4(i@dm5-*{pO^@SR&kdyOcld1y3wIF_r3t zy{HAP|Ar*bQh7*;$=?E6ZXWicX&JN`o2J&zl$gtJ}C5hi0bQnvbL&IMDTm1ij zcZ`Zc_Y2UlNkH(6zxTkMDvK9`~VfWpxvFakgSo#f|@zrp97b#Sq#Ci#bL|F zUnYTyIUf}P(2DWEpckt_Cc3D|fJy+w?gYqsd~luaq5`_j7Pbr>v=#=^7yy;Vkn=YM zKuc|SGFT)S7{W3n96&u))}~>u)RqW)aTR

    wo%5S-EAs3aE-%Br9w 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 y~ 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ν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

    2?FH2My>7 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

    D*5_r1nEohG$$gw^ukkol> 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

    G01Ty7awcC)_%1M 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 literal 0 HcmV?d00001 diff --git a/thirdparty/python25/DLLs/_ctypes_test.pyd b/thirdparty/python25/DLLs/_ctypes_test.pyd new file mode 100644 index 0000000000000000000000000000000000000000..c1b7f6db477823fa41ecfa8b7cb9a77016f94d10 GIT binary patch literal 11264 zcmeZ`n!v!!z`(%5z`*eTKLf)K1_*F~P^1JvLws4+R+`;H`RxuC)34zqL*ud;^g`^SK->?*Ci+bSzlB6s-Q>n=&X}0H%X7 zlQTeOL#=~T0j>-TK8!33pZ2S|!2};L@F{XLvU4$rF)%O)K}5rp85kG@7#J7~zoq~hl2=UV0gla zLk>yU!;paiC9Vt@7$T75(V2QBsTCy*3=9pTPzQnh3ikv=wE_b}f?iQdVo4$c!%l9f z-+34q7^EQbFw%j6!9fqAj9~#t5abY$=hZ+Q1a@FxIG|UQnv;h83?4u&k>7&AO+eL-thKq{G9Tydem+1lw z3?Rj4&YU4eJ+d7j_jGe~hp2FLyLA0Id}blYJ4gz`yK7W9x{vn;F!s&{g>n~%L(9q1 zpW25U0{)9C7%&JlA7N=dP|6g4IIR0a_j&E_U4k7Ve2y)bO25U$A3k&Dzp4s~|HHaV zR5-%J{)=iDFbMS4FffI~jNxcKP|6%1cewj}_r-%RnYw>`UfO-C`62V?CGl|x2mMzC zX@q+A%$YM_^Rk$-82^hkAK}Pi$zuK=#$tQ`t^@2p284dF`fj$c{{bxBd}03sIp8WG zW;Vak=w(p}IPRjt0xC_8yQpx0a^P`L;4?5V9CuL>0OkJUE-E6d5WWN(gqC54&U%lAG$H372q5D_&IqvhN_u}Kauf}#Cjz)wOBs@Ujcbq}Nfk9vgC_D~#yQuKA z9w-rnrdf_oj?Ms%8ieAV^lcq-ni?c!f}Uph5>`X9TydqyCEt9AQd+r-aH6Wb?@XIS&#wu zAACFFSZdw;hU2b`%Ks1*n>#Kl9L+~Syt^(cAgvsDwU!*cd*d#P%AFDwiRL2;Feie- zm?x~;RL6h;9EbwJ;TdNP7zF-b%Qyh0vK0Pb@BR_~|8jW73a~))5rz0Tc)0B_K=p6N z6ObZN2LlEHP>^*p!YqOW?-@|eYktE4N^`wFDjb0sKMWWIg8qy8fU}lB>w!|1<|7=3 z7kYq+Uq0wU!CDY?2i4nATtzS#Ka z05b!F@u^M@SaRU$7C88j%lK5|Lxvg#1`Iv?AUzBX@|b!=!Fm`T@PqYqg{bg=T-Fi5 zf-pIN<={gOu(JP*AfusjT|O#2#+SMRIE*efKVnQX4B$B24f3Xo3QMmDr%?b$^CLDi z(X$|bfn_XEWDY)LOEdQ1XnY9rR+^y)2Rw)lKH^F<4&Z2f1o9R{kBbTm$eG3`yF9pz zPBlNYPc!u3LejvNW*orP_~?K<14Ei&0N3H}|0hHk1n!712z(Y{5a1JK5YP~15O5M@ z5Qq_F5GWI65NHx*5bzX3;CZ490$W8H1Wt=G2s{;K5cn_3ARsBmAYdSdsF6_O`!A^E zQEA;G4vlYygAe2n{*VWS2TM2O!3VMjf5?Gc$kNSp@PX99AF`0ZWjOdi?BEX>xH7?m zKcwNxxDWo2f-7S=_(Kw`jDMda3q*+%%fScy2Y-lz)ueTMaHJi4$j`t3;K3jKUJ}$UENC}kI z?ZK6H@F6o;ALn7?1BZJ(8Fq*<2pkn-5V$19AaGxdLEw!TgTPNQ1_3s41_5Dl1_2py z27z@*SWBEiz*d|=AV8c!AX%J2piG=WphKKNV754e0RKKvWqokw;s#KW7#12D+9}%N zz##DbW%r?jFXWjIfifLDcb+-JzYVIs1EIbLpZfh!^~9RL9jcy4^Ff8sj@7GHt@{43 z`%ot@NY`;zkb^*3;NlB#xONloy)&R9ACxn*7_yiH1Hhru$qNdQ7eO2h42RL>LH2d> zg6wdi|4F3;t$<5XCU#pofSuXV!8(uza02Hj3vK;)q`BV1Cl>M$qi@z1U0Qm zF@L*{3MuA;!=J?bL?C~HYC;ao{Pu_in%|J+L7@Q6Z$+#i`I{~(952jS!12X_J->0h z5N83$4+oa~21*-{!VgmJp#}dLg7JkG#i0C%H$2hR6N)c%^@QRJO+BIbLQ@XPj~sa7 z3tc%#J#zejN_l8`sl?2{aEJ#>eneJ}6rYQ*st3n!I1`Te#c&QNKXSZKXTlNRSlr{H z!h#(C=s6seK0sk;%~8v2eBiLP2S@!6Q1i>$gQezuSa$)B@g?hX{PPaQbwg@OkosO8 zhHe)Xwq6m3G*H(ztusW04I~aqTcG|iM4qQt#G%^--23I|w7LsUe%LsS$x!2;mMYp08fLbr>GN?50lib5~X0g&10u1K9JVQqSEc6!qm$H z_Bc~F3#f~R8lqw0&2JQXT~rLZ|G=DR5b$~Fizom7|L^|L?E>mns(@u64nL%Vnu0*R zL5|jMC2WvB@4^ZP27%TCC2ZXs0sjLzI!!@*r0(*WjIYcL3|S0W3>hX43<4P(hM;C< z0Jt+E0*a5&?l;YE6q=uWxOw1ah>FDh8Wn;2IVu9(Au1A}$Z0)LVsr0h>!nJ$n=&fh zJSvSJL1Sl)2mk;7U*CLzp*uuHr1=uVYaOU8MEnLs{1(G&P;`lWKLk=;y5nYyiUbIs z1lbD?+%sp+gogzi{|Ci8_kmgw_wEoCf$ulI-)g?W&6#XC0ym8Z)&r4?XMhA* zj1Ro7Y*t`c2;wcC;=myAqKA=zA!CmUgTRXdMh1rCEGjIZ&X)K{};g$&AK2V7E4wTReUetzbI%#s96R6FfdquC}C~>$5d*# zaE=3mfc5bbp8ur+VgE}x{$J>HePUVrguew;G(ZJkJpK3of2Zpc>*FOw-LV3}AcZgN z85tNlU7s}nV=U#fK3>Wd9R9zQstHlJ;@|)Oph2n5T9Cmd!V95R za)G767B>6-`QPpOzi(lZq9(f7q=J~7$PGNcc;DpNg5w`p~DC+*#D~b&*A?iDl9K9{{R2~`wi&>-)}^E9M0m& z&;W(d640QM>ysIV3<8a{V5(TDIrR@ix9gK`hSmcm-2X4UW;Z_I0JFc@^$E-Ct1nhC zFff43umG6>8hStO`eXsb3=l<>8KB|!!~az+K)$F^;b1HkZng!52tz3s$i4qX84MT% zAn|$TOh$<+gFwncP$?Y%O7)#NDgwPZDgxRMg2TeQU4L|@z6j`c{d3&)&;S3RDEiUs z`XOa8NcrJz-w!FBydY*|d|dR&z{CGl1wf-8syqgu$pMhWz~LBUh}}WP3=A&D3=9Uw z3=CV07#Q{$F)*AkVqmyn#K3UNh=Jje5d*^;BL)U0V+IC3V+IB}s6HkJ22ciM$TMPK zXfR@6m|_GmFRe5$8N>q7@x_@8X_-aEB?_tO=?n}EWr;bZsYVP8d5O6o3c@#p@C`wl z;P`<(jG3I6lT)malAo8Vqfk&%q)?t%te{%J#Q+k|%u5H2NixJ&R8+)g=4F;Br016? zs1|?~FfcHjxR|q22GDJ zfMQWXg+V}51rkRf{!$eNft5)7mnsYbZ=rk-u&Lw`1r7`X6AT#yKs9fPDyA78&@ctb zBp5L;I2bT61R#kmGh$%yFkoO1Koa|A#K6E|z`($PBvt{6Gsrv^$S4#{t90P+`fb8$&gNq#m111pG?oKeKU@QJCgIKQZb;XYGt zVh(twX$@0aQEDm!g9&qaa&b;-9s|Q0rh=l(ypl8q2H)T?=OA-KuyOW`;51W`T9nJM zn;||iC9AZ!Bt9)Avy6ekhao=Rxu75-xuC=?Gp8iAh~Xncd}>8=Z4#s#WtA)WOvp6v+Cp9FaC^a#~Co`!iv8d7+l#&^|U4#5w zePH2&5*6?{$qI7@22h#+m2V)t!4GIhl3i1pL3JMGi z6GR}`0W{wz%)oF#fPtYvh=E~&5Cg*lK?a5if(#4`1Q-}LKWkXf<}3=6~<7&^@v7^aysFf1@S|pfv-7yfp)ZiZug+rZoeDo;3r5u{8sOg*5|%tu+IKvo!;Qr!@nEzcm9xs5Jva zv^4`mqBR3Ux-|nst~CQgu{8rjr8NUXy)^?vt2F~dmo)=JzcmBH6l(^Cnbr&p^Q;*d z7F#ngtgr^<7e)pq24)5p237_(1}z3{1|0@n20aFS1_K5|1|tSz1``HT1~Ue81`7sD z1}g?@1{(%j20I3O1_uU51}6q*1{Vf)1`Y;J1}+9}1|9}p20jLU1_1^^1|bGv1`!5P z1~CS41_=g91}O$<1{nrf1~~?K1_cI11|QuhFFF;hIj_#`bMvyGKIlC zwInDtxg;?!Jtq~!2`(wh%u8qRPE9TFPs&P7E@24B&&(_F%mb-n2r19^FD-E_N-t)J zFQ|+M)v|B~sJaE$V<6G^#7qkY1TU$wEHMX(pB!HhUx3U{%*jbgOwNwajL%HNCSDj{ zh*i8ivm_(F0OZ2dA~by_B2eTnV3STUMR>c&C5nI zyAV?YOsEh^Ss6oOUVLU=Nosm(5kq=vNpOIpucM!ftGjzJh#QY88(&;f1gdvHtqtU; zWB{8`lvt9=kds(k5?_)QpIDS0UyQ;lWypb41@Y;rB@DTh@!*Oow=y15h2>Vp7Z(kqKeP7srFRP$>r!2B-j3 z-oe-iBvO(V?*x%6NsIS@vpnG}A2=(}!2+ry2`-l8gb?&VFg+1W9|SYd!4PI=QW8Qq z1xYv!A)J9=W+Iq52xcKdUkY3_4eqoII4cv*%7L>Ap*qUqL9)fECGkm_C25(dIVr^q zpfCXu9w5RKMEHP+KoF4xCY-<|SUw4?APKA@38Dm|CIze}4NPW$$xJYr111YWBv=Vp z1y})C9xPqRP*N73$xxbC0LqpKmw}2v8sHuS27wj>27wv_27wY#ht2@fE){TK5YS>^ zV0a+RAdq0dAP^t|5eGRT!hk_wfd~V5ApwYw5BoiH*o{wqRF2LeAi%)j!N|bCWFTZ< zWbn{{*U-q&(=f!a$?%(zp|PuRmT{Z$LE{(3UyOen^Oz`_7@C-yB${NHRG8G8EHqhR za>T^PEWj+pEW#|tEWs?rEW<3vtiY_qtir6utii0sti!CwY=YSovn^&@%y*dYF+X5_ z#QcQ$8S@L~SIlpi-!Xq+{>1!+`5W^O=3mTznEx^7v=Fhdv~aP=v?#HdX|crOyv0?E z7Z#r_m8O-6RlHTIRfpANtNm6- zt=?OGwUW11vDUKow+^w6vaYmlv0iDt#rmf86KhTz5gQ8|XPbPRQk#C8sW$6vw%VMx zxngt6=Dp1qn_o6;wmi0)wkEcbwkfuqwo`0(+8(ieVf)!u-cHrd-!9ay-mcYdz1d8dJzRJPA-U)=^1JvLws4+R+`;H`Rxu6FP}aqTHL!L$ZgeXxrj zm=4NJ&H$MWwGK`NxH2&KFtRZG->>Qh6MVqHr^wC7&c!f+k%6HABC0Tjk%2*gfq`KG zBLf42fGn6T00}RU3Q)L#Xa)f$h&l!a1}2CAlrI3KAymLUMurdu28Jis7#RY<>TnPr z7#Z$}GcW`!WMq)Rp#&ssagC7yC9W1QGPr=83X;Tv^-5AJN*EXz?zKVv1@bG%e@JQ- z7#I@tic%6w5*Zkl*g^dcvIHCk2!##|3=Vn_Weh(+0r3E8CWuBT1G(>jUQudJeli0C zg9HNu!v{tN1_daMs?G_CJIWjlfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@RpkfGw zcmG&;w!|Kg*pobWxF{tW-Jnv4g4=^uuxF8`3Q&cf%wB=Sxo;$O+d0Anvbxw zek)~;i$C1W-7N~z>e$KM8OPJj?hw|=9@JSU@L$vhr1D2MTk{bPk50Byu5LG$u>S!P z%|}?`x{t>nK7$0pyMJ`Mb2PtT;BVQ_z`)?q?amX%-!hkhfuWltG>ajNA@IMb0?4=* z%}01z-F2F&e*a@P&V|xs0v8tM)MJl*4w3G|9u%sxw=DHLjMPWtcs3}135j5 z5yj;tFT#R5>v-_F@jrJdSGPAy@c%%NF_@-;ywGj%pY1INN0S-qNh`+`})P3>bOQ!B0 zpOc(~Jz2VxS~`ZL{b0$9~w`3+YufULgx4M#UGC>`~(s04Jo zsE7pihN$oaW$albC>wCxMFpIU{)@f=*?vT%^*||0^AV22-7G4t2g15bR3u8pTECUb zLE{xnb-JjqyfzB>FZuzjhvhXJ%v&ItQr0+-0j=Lk_`?GJi+))kDBJC#!qa?&Be*+8 zh35s&-~a!+KXkjOaQx>0kE-E4c z;GC0j22>g!cToY40>XSE1MvwD!Y49h`Gn^%E}w+IaQp-H3J=&TJk1uM@-=`Z08+Yj z*QkhOF?Qd7aS|MrHH!b)y4{h|378%4*y+I%-3{_I&*A@k$W=jnwDEzs<|8Pvf94D* zQaHNZL|PA&u)fg${r`Wr8z>~*I3Tto3NkmI<_G^kg%(fqqko{1P5_jfzzGai*0~8l zl?Wh|fP@gSfhbB~B>*T2ctB|h68H~5fe#CGfz|`1Op%Ad5e;@{7UPRE;B;A|4#^|| zEZq(~ohB0?nFO4ix;Y%;M1m8?CoXYPy}Fapa84k=<@Qoe)I~-Oiw> z`OneqjLU)DZUUVUMW9-%^*~8_w*yPS3$I_GlA%@@wb}+HuEU@j&5OnOK5dhEX}H%iCq%is_0O7{Af}&4cK}OgAWP_f(GXCv z`vX+mhlL0H7hM42-som;J|f`J$&TDAYrS173odrTSi&I1RvbKhJF8e;KL$11V!^=; zDU!Q+6BY={28VTj=yqeVJ{Z0mG?!9R+HD)NKu|UiT-Sm!XbPxy=Z#n(C~JMNL2ww3{A znojHO5{)!leFpxP^8f$;r`c*T@VDfGSK3)%l{pe7xpoNaysDSLZ)R6s2Qj-XB#6;Q=2k)g0yP&VK{v}FJ) z+953i7ZsKl-~WPAVu?;Sk4krl3Jb^)fpCAyfc#m4>`w_$ZUxl}0#KiJyQr}IX8@7l zl!frA;RHD{*yuSAINU7Q9SW+5X0O+4Jw&#URZ-FfW`V^DbI_|pTKTr?sVgU zHpfKK`X3Petp`fBLcSJ^1eQcgnY&q3{xg8m1vFe?6e!DNxF8!1Do&8=`%<0&NRWZL z%b;8m2fhByN)&nK-3-6$f0E9r|9zFsPiERWR64W^0`Onbl1}ef? z{xg7$0fj|)SU_hOws8PImM~~P^mu$6IQ&7%yS+d)qdX{RS`XBSTRXDU3Uzz(bn`U+ zXY39V>GtC3W@$X!Em{FeM@$(lkkErW4!JpX29ymsAlVQp9HS41ch{&0wEnMUGX4*0 zT1m8it7S6&*6qMz{h^Mj`-AnrI;QS_-N&?#BLW{(p~uBXAGZG2eZ5xE_)S1pdF=-J>!G)FO6KF=;-c5g!+AeCEZ|Tt~870^sgmDOyS3hEx)O##FjN@y;3*0r038Z2Z#tIA~-{6{;09t^^tx>#SnIGAd?Sqastw(pjS-)19NDVEw+9 z&G>C+j*0@b$a+!7*8Kv+x6DzIsblHPQIP=+h;)C|{@CrKqGEl%M5x=5#hMk=^5Jjg z2X$~NIa(?y{@%Abb&yWbz*n#csEW){5$F~X?9S!s3~6O>XgyjAJ;y{eDvT0CXkDQc)E4EI&}m<>?{_?<^wF&XKS9l zcCB*;DGPXU@inMi!t7#-v3P9o}ikpQ>5{=Mt7jde=nBq zKoO8isqR2CE#w zVgCd)?W*0*0xK9x+|dRt&0qL~wU+pGIt#qk+}{Dw#tySp71HeBG(OOM`i01g|Npx` zzqtDfWLb$!H%EM&V{9i!^x=hbz!4ORC=cU}55&bnhf~4r7lGE>rP5G!8A~AXhzPf6 zaI-5c91ume#zloA;|Qd(h13C%_R-7Y|NsAk+|ym6!qM$!0BU%E zMp+C%bt3Zkv71ioff6y$z^4vq)RU+C5K=wqrU8@Gz#^#vlT^VXsQ{Byz#=IDvQGkw z1gIkfc8mxXNzgD+m;e?D(BM-T4;BefQwVGv2Zki(P%StHq4f@!0);ZT4h;_HZ2^S*Y!3m1DIifIO%Z^O;(`X&z|#eHpTI`eBtg|#9FMguC}owXW--1fd-H&B2{FI)pIQZlZf6csObg7tOQadf*$bocZ-6@?M{_CG+Qv1T3d#(l$tfyaWIw|bVqRXIx_}@{}c1+VC{sB#W1P}J)>js*Cl7`pqUr_3HaOvwO;nC?P(;dhY-fhzaPD-HC z3}ehVjHf$JqxE)Y7$~KcgoI`>b-#kn*Z%;8-2W2G|ID57JfI|%FVO9#02=NE1vO}} zmjg7|D-WH5?{*XD=4d{`5(|p#Za0DG!?4r>l7I_>ni?G4z6z};`CBG{iU=PSp4OAW z;U#+Av7iyu+SUW5tUEvx_uZf_KtKl1Qc&#x>SA^O05y~Umqh(%el6G?YtVYT#Q#4t zY`PwOiA0G`XB9E1Z-2v7pipA%S$)RhCx zHh{)seN;F=T?dvIU;h064;oQHsF%Q^9;BA%#f-lYwID0H9XLQf2B*gV42REvda)S_ zOTnE%9HJRozk=Kv5SXC=uGgWhNl@JYQUsn1;%=}JV5s15us&Gx z)%d_+@Q6KB0g}8RSUxc5zvvD~X>d5h1{9`2|3$Ze1wd1m;Qo<7Xn6PUUVp}3Plhgb z_m%^tKec~`2SfCAzW|jApl%LNDSLcubmSop(8#bzw}(g=s1XPnGwl8VQuD1u`ac_F zxrr-FD5MaEOizIH7$0c;U&k|{!A7FCgw?_Nc+FSq<0U4&`HZ2Up%ah`yGvA5y3coC z?7ngECDSoyk?P)RQSgNS5e~?l|KIK$6@k~R|6Lin?}Ci$^%kk)Zm{8CsPF_E*!{UX zL`9<8NhB;3xnIcNn+__F!K-V0SwbNLc>noIy}HpRRY1-J2T^z+B#62{fC_yck51-N zE<~Z<`mJ<2#G7!_Ad@m6{h*PB=ATUbJtsh!(?x}&!9tC{bvFY8LvZuKf4u>WFQWcI z<`*HQJZM~xr`ug1IN-l1C@4Vzd7#9p+n=Ygk_FVVE9DOB{_x`J&;S49UW<3vE42PE zNeIX&SSlzR{$F$tBpzE2l=%GTDD^FYu%F ze`k#f4}Z%XMg|5@38m0n%fJxE-@?VnzyRyUgT^WNTPi@!1XqUE1N<%j7#J8Pbo;V^ zin31(3=9FmFY-X9`LcB1=swt6zz7+z12bPXUGs1N4%k`$Oxuk}Oc! z+U)^LnBk?;FYLa9nt!kL!2ty-Xvjiq2s}YP4+wu@3|eaea;8PMzY4_KKuCyn zV@(BcTisd0A!QZVR?wINsQm2??PPQHZm4Si`6+VvE zCu+V1Ac}i%q#1X+Yd}H+5ecma&<9|^5dzO3aq*Cv0%R5}LN|e3a|Z1HZVw$$o(0X& zgX%$^?qj_HjJ=Tc2~d{>cguowhIZ?Ma;Wwp@(;Fo1_}yQiq|FfuS09|`N;q5=xM@Xi($4n_usoy;KN z1Ks~Vub$B1!ouNT%fQIMQ1d0D1XL>bx~K?bfCK{miyi=%_aM)SH&$?f1WVLWb3Lfv z-`%4Ek}^K?LNbDpq45aF1&6yUc#KbW|4-`{@lR{~_4j`X2mkgtUcZksL53 z-MpZslHiOFUb2|cu~bmDllRCILD_CzP_3B(Vg_`Io_HcC+i82|iJqsW^Ko>H?Myp*^KItO}85dBv_h{xMWN)5s(e|A7}y7nBib9ARF{Qz@Xbr1Ck3x zk&Lkbn_$v>grgfg3?vFSE2F>?Y>*2`4(f<3hKvPPVADLBkMMwop+FG|&Q%Bk;uKIZ z!~vcJ3DoI!(*Y$B`VTUJDs1rJj||4(Pq!N=xq~IKjY8oZPr^9@B?21I!W^?gq<`>a z+L<$F!UMY9I07M|6cq43P^I~Z0BAAu3CKd%pw|DTL9oaR>a7p~wHCpN9@I31gs4Jy z7^q_!0M4vI{{tif{);0TkQ@OSM<96?+IR#lT8FlDz!Z2HH9W#VZ3t}rGjI%o3mD^* zyFlI77f$~{xurzA+Yi>_D3u2nP4H!6pv8kI-M_fQ@cC80e z&G^z4sO?bLgvx*J(l3au0B}*z!hd*`g{l+e8kA_*4OvS>N;JgB#X=S@f$Imzf=tlr z4bYSpcy%zS2wVsnrVPkvSq3VuprH&JGiPZ&A^@7;6AA8);%Te~w~k9>q0>Sc4iM$g z*#z*400HoPLbrfZSf@a@vx4zA>tiLtpmmrEmIla+3PFWsr?W!0vkFXs3RnSrP_Wxs z!}?ffu?j@D23Qi2)|_=fk{S?69k3*lP6Lpn4n)!bED6`yS!@7G^w3#NHE@aiAH1oe z(^&(YL%`!chy`Ha0PtYx7Ci%6o_8uVyhJ=G@V_W%0UxNVbAZ1k2GogiQ4z2#;OHz- zk>T$%VPpVRup&IL7Lg8Pw<}9GY=NIJXv7przYHS-L$9mIeo)oX{b45?YzBxMG)$GP z^70U9QVLXabR$jAsDb+3&Y*@UsPJ*tKpWWa%+`3>1=44*Oi;G_!%j|^p~_%=pizIY zJ{=5wI7ydkS)wAs-*e^P|Nqe7kB>zQeNpf%BvXdS zGEm(L+es833z~fbM-MM}Wq@En2E#H?Wh@FQ`*;v4Ux>!Tu*F$I#lzzYRJR8)c> z$+Y>11Sm&C?L6iSu@gGK2kL4=b0etD((R*?6AM~JFdwGu#R5UujIYcL44}p2amqtM*~Lp9gBo{Fz^y_N(7*sIBLhPiWY_@Ihv9Ge%)r19{$KO~ zXk|mjhK=C0CwCSI%7Tmx%V1<=V8{?y4l?8hXd=P(3dl;9 z3Ce;tQGohn84p0l{lA{!u?S==X#3dz>ls&;3Cd=iStcmE7_<=Wzvu<9UqDs9VYk8l zEz1ODcZ!2T8x%G2%@r&G<&w=6989Ic-5xxxCrf#{Jp@`$E(SF{ZkH*8#^6Mz!IRM7s7`qMDT6U zrXE-*fLsR^j>-Ra@c8Q=pJ28RWRK$zzNmO$_!3c>yXdE6u5SOch-MhZ))ez5tS zFnLC>F(4^0hUtgcAJQ2Rfgum|ZwOcdVLwD6f**q>p8(^7?T473(ixBe76#i5A`tph zz!C^PL?MC?Suup*7r@oG9w>pju>@3CvvfL?faOrluKDok zR$~J=UBc~aY(e99pz(Vke9#I*czPEFrC-oC0glebH;fDn;Fix};{yl_!Q4D};u17t3^?0Il2st=!cs}DmT`kjn7PJfqy6;Z=D|jFtyz|bP15~M^uuS(MkPE$Km``*%b98#kbUI6PJIjEolE}jl=O}^-MbL&K2p6=$1- zmhKKv=!Q0+K&a!rR>mR(Z07S^FR)nSssgfQl-12XM4r zDv{DY1sam=4J7FR>nnmxq|iLj1OT#e@bWm|f1n6x z!89zt2K)~MrBG0L0BWd#%5(74gaBF}A4xq-KTGR@I^O0Vn#CO5EUgTi1Z9y!WrxI0 zL0L%DfV=~;pCv4OCn)W7|LEj5zGVEZGn}QfoC8`T?pOgb0IU>DfVV#JbkEHJ#n|nz z@RB@GO7~Xj4rX!hWwErrP!ii+%+VdJ!TeqOqV=abgRsE=p&&=M9w_nZ4py-Y<|$?F zbmr;y7HB2a4sOfWR!quon%U3=E+D zrcCSqQlYRHhX4PARs*#h0H^a3rtahMafiYETkuj+nJzY?ODzXBGlqABsPJ{fsPLEa zH(N54_{7KU0PWQTWnRwKlO;9{mKCMu4V8?!rG^caOgW|6U4hIEzw%1O8Y)?eO9dJ# zSs6;X;^TIxGcYhjM;>muRLXkHMTL*CD@27a)c9@7ffDzY+a>(Xe^u%^tXe;85|k}r zGP>PzsZ^@VM@6{hWQkDoUs;fp%w|E^5|CbDhAtO9M%R`DrN>%smvA=!RViiJ$oQJc z=wz3Rig3#TkdSOC%Lb6p0jrB8g2o40F7Zz}5E~yC-Rr`j7J0bkKnZtjeB2HVh?}}= zR3y6EZ-B~*10{^E-Sa`sr`FpgI@Z||bu!(-0==aYVL|`Hp%H1_Su6pXjqG$5=yqo5 zYzL`+ZILDOKb!~D<7a8TT_OR}@jo1thCzF)1xkg2|A&KCZ-Q)v7PC-Ox~m1c&w?Yo zGg|}{rPYgAM^nLCSlx;I) zyHXe#7#a`GU|?XdK3K|m+yS(bkl{6RX9P>@w{9O5jc(1(Y?e;R64`FAl-83aV%-HS z-3;A9EZ^@*e^dS*77+CRV)GH6Sn#$fP+kNj_|Wb*%};(bz7b(zVCW93X}uKA-|~%t zfuZ@t|DB-W;NBV)j?b&ReK~qvR5${<+d$QEV8HPf6$!BI3=GFxR6u$`4c6l=Dl$;f z|Chkyqx>zPnXnhz4H+2%{)a&WtL*~=14F4&cZ-Su3j;$ds95Y#0c}4I{C}bO2+Iyo z=*4$GjXm7e_l5yfy6+6=6O=7w-MOJvP_}ytSZPrA6tM1~-Vhampa77^K%?U7pwViO zPav|L;4-kY?+a+DH|7#P4RKw$&I&2KnD!@KtxfEvSZt^bzPce`_R zwt=`^E-E6O**wRb6&SnwbU>AaKS$?2Fe9F)dzuAEBwV0VzcZhu!(F7?nWa0Mqsv>7 z`9;ggP8SuP-Vhaz62I=gCkzY>L7@SG|3S-ZC9)Vm9kD>DFes1fga!nLy$}szU}!#K z@Y*s<;(r(qD3h~T|K)G3`2YWZJUGB&LFHz5AIR1$ka^v0AcH|#vs^)1K?`17KvkOc z%Myj=eW2=(xl~-+M};T8)0^jbn*<{RgTX!lS+F_BoD~?l!#TS9K>qBU2KE!kb0BU! zSOq9(z!+SAA=QUn94#kHj2eFOmT-1?FoI^OJ|FHr(IwFEi?@{j7$a9#0HdQr!!NE< zw%5!Zf{qRi77V2ik1@hq#a-SW&2KnbPJ+(W0BtU?G4-d)Gz(0q```gqO9mP;jq z;8ky>TwSi5EeA@OJM%#6(=6S1N?ltIlqzQ>9Cs4{boAekzo(ba1@p zwLVtD)ll(Yp@iiagMves7o$_l$kBUOC%~nup9u68>?2Y^XU!WUQEE^way#&fo{4K$t-p%>$U*Ib3^J>V69ILur zK|6g9fX3JO+dwn3(D4XYhHjRQ)&rd`Dk>$3-2yMTL4(}jtk}YH6t#A{GIWOu1pE(zEbj18k?0ChG3YGi09oAW%g_RX$@oB-8pM6weBB~DyWIqW{s(Y$vo#-KInJ^J6kFYH9PZXXiXI$y1C0SQ zz$abc`eEZk$okzt^Ex1HFT44=-2?*v2Y>|NdO`LZpX~5p>Ga^}^x)})bi6$v12-T^ z(D)8xCsVg4M=wi9rxU1;)Xik=#8M*E&DG7=e2}H}KqprzyR{cf={snr+V~`R2&fZ$ zx=p7C)JPF{9`AN!X+6-*SjyVz$nsjO^+1VGc(*|7rS3|WPK!=QmhMBPAL5ULk}Sh< zM{vG8?g;kqaYs<0$#A%vz4bs?i4bTLmO;S(K#+f0zjYrgeb?>I0x}J>ZOZ_ZCP3X| zumnnXYdEp4BgzF&MXj%ySaNEIY3RrKo;f;@tw{*oxvO% z7~>9i2Xkm&v<_gY4d~|R76wg5uyhv-bb7ONdvj=?1E+xQAI--(I+;O@Ku{uB(#;HN z90v1rpU^(ve2|0rVy_2BXE0Bvw?KCQ3-iTzn90no2SQ7NyS)W^130Wtm3np;b7+6; z_7=JLtT&7UG_42Pgw=YWlev^FHs0t!+~LjwmTuhps;{x!_KI-os2y{;Sq|Ajzdbf9EyX9i0*cPB@;H&1u5fc3df z<`QA3e|jr85PqqK+6M7SXE0B107tKj1_#tW0g!!Xg2O;H`}P!28PWzyxyHAx50}bx zw_jmoU;tHUkT$jT;ZCq@iASeIciS2U1_sME(Af<|{@s0`#nINMOXRZ;SOf$@+U(Yc zOXR!zK*}yY>;%)V6*3x_85m%um9j%OPaFpu20FaCvkhcWH`v(jePDLq76t}}-T=nV zX&}40FJxbmVZLsCxajE+!l=||%O z@ttlwoo)i4eL3B&VBQ9I!+5$adPOE3e8j~3tJ4B%ZVeX?sQGf+ z`gEB`XN-!(YtX(e1yC8=9VP(kI?8~Wq%zDGgTe#A{mbnCpe=4XpyON)iZmY)akjnz zs`0ve!FJa0OBC&kKkf$3njp7;&I{rQ3-8_y_IEotl>1kJ0-dFym!&b_e=rYdEh$Uu zw^Fuv@VeUW{UAlXBKvz;rh%Hw;LYElB{2bEy?!ED48ff~Dhe-_{R4G%MX;<92n7Wy zPj?%r!Q1?TX)mbg;BNs9w0ZEi90yI8f!5*q$#lC(1b4@&g!k4-FrNx%z7^ORr_vpx zq7o3+xelZkGGfx{C)4St(J>Fy75_gC)Mf@Ra_DRW4L+5~LdI9(qdUP(RY;?{Ay_~* z4%B>uxS{nx4S(|w#ya!nAIzn!d%@!p;*hbL-agQ1Okj5(Xlw?wwK2e?TfF&*Kzwv3 zcvL5@`)KUp*4riLW_#ujw7#JAhz-!;#G`jsHKp_zx5E#}u59EDJ&&qU91GU8CJEwt~!OmL>XgyG3*WCu{540W# zE)nnM=yqV~o(Jj!1-@AE8I(F$qT>#CgWcQ>j-GCC$0F!O7hDz;O3iNsf zFzA?ziaZynU(ECJ5h%5~1%TSRw?Rx76^VeChe0fmF8&r!@z)jX(Q=8u6*Sh}9j4Rm zW)RRBqM`uq0|oZFsHg;hdqSYG0#H+kAEg%rDrGD{Jt0sR=pcVf8EAbj$Xk>dRJ!N2 ze)mOCJ5~E)P++$o3%Hxl^IEJM@IfkBSJW2my7+z^S|$H0nMF zbhaWtc+Vqvq$5N{0vyuV!?z7o9>m9W`ZC1s08P9_gXe7Be83YCU1Y{Z57#Wz@K!BMAMB>A&phS;^1Hrv3f$m;t z(!U8>)E5@sZBZ)HyA_n-dwW3%ztgVMM@8T@Z}(PEmg@~;=>!#{J}L^GcA!F)fuR?a zIs?OlK_z+!xZ|w=%K>_wg8c2EeXso6CN!jg(*D$(6am?8S5PJfO(sf&cYl5H`8^~# zK!O6)Ygg$6wKcbbiX-C#&Hs?21bmc-M0_V(Tn1gD|M!&WH*vXUtRvK%P_vZs;-WTR6AWEof(8JJjz z1z)d9?lKyoi+tDDg@5XWMZvhPwg7kgUSd?>%S$M z-T%A&VyyilN_l$Y0$vDw{r|t^KuKkHSWFjt2UB-gjFY?d-_Ed@(woT2UVZ^93+fJw zImX1$?HAMSmf)Dh(dicx(CcRt_#*QI$VEJ@2TJt2{SquWN;$g2VmiYTUNd+4#elQ3 zBTJVnXgHU@6?C2xC=Ni?FnE+3RN){czcb+SH@tfv$TQvTplok+sr3M4cL8WkNO#*B z&;&=@3PuKoQsLftpesFIxPx8D-*N@iZ|?&sIL2rTQQ6f88e(;5IoS!;*gYL&WOtQF z38TO9+t&Ye?$)SA{rL>?EPqQU$S4;Tp6(8?hCl(RaXeZb9NqIkRyey_zwZRIx)0av z+{6f8N$+UW?dj6X(*Y{Mz~OIwutcz1qxk?!>s!zyVQH!L!P56&rJCIbyFEC1U3wWn zRg3kD5;4$zhwfU2=A$gF|M^=hLH>ME`mP)7A?rRAABRGn`3TgGo(6IbC~Cl7jCY8I z`n7EXBLf4Zyr=~k*^>YN|NoXtB?jGK9oExOjAViu*$*-jY|=3Xp8sG*cP&GMJwu5j z=sW;yt~ve*5@;ce3=CcD5Ys!DAheTvC)hU781^Boe(8kj76VxfR(p)ewtFAQQ(e>OT%DdrDY6K@|8fHYaE#ibKpo9-PaVeCg+ex5{1>rQX zw;bH9e?o$)W*?}S1C{@q7+-q+`~SboU!mnBe@ogwECI$3wdLYRkgrRUASnY8SfCQi z9&32PbWVrp)W8>3$3Wv9n;2g{{`>zw^vE|*$2(&WXknC?@k!7=?}Mex#s>~}dIWTO zgmii&bb7>edPH;ce<1Uft z&{$nS=X|is=Yw*2$9#~>|A%pO_k)}r*f}4h>_2GrD@R;x=X{W0=X|hV=7XHlIUnqo z`5?b^%m;g7KFAZt+QI&cK5Q8wz~5p88d>xZ0nOV5{tp5TNW4^s?3D+Vdtm?e=8J@N zmooIqv`w)74D~N)LD+fFRL^Iye@#H%0Q>ia=DYv@yT86r0*RDsypRIZHZO!g!tS6t zRH)lOr5kkY6s?dBy#QIo?@(VAB5{2$yj-b#maJvIVN$K5gXMx!0!=Rzi z!=V1phwhu*&OFx69HpEucww5odAh_p1iPJi96*z|C%V|&S`L)n=yn!}>+}|g2A_Kh z9-|5l>%P_f0qn%^?w_TcFHXM&yU?=rTb%}|e1w_286vLOCEo4L12Ngpz4cqCGf(|( z&`652Ks>}~@N^v5Y*2ato!kf-gTGm#1+G8fE=`7*C)FheF)x_M$*nV(r@@Y)^ft(u zP&Wp5-wfzJ{9-G(Lkt@6672TovG(RD<$a+DHlY-J_HlPG&oL&3|IR$!&H^YMD$v*j zY+xd+H#Q)!`&0Mf7oc(wG8h!w9n51L3<|nSZ@?b+>2~Hh#sD@dTA=lIiA|P7udhgO z;EN#82_hdr(}3Sf)Gg&oc)CLqIzwZ+kAahcYfPtW0%*lb*bB?=p!Nex>w(h8;B)QZ zVF3ycQ1_h!(wzh?Py_WPOAH~CE~UJk;5HF>{wwZqZy&fVAPqj=5h7E<4wVBnpg^Xb z0iRC-8d0^r&);GK-mSPAG}Rww{k~M7dvyV*&V66v*0~$R>i*m9uF{>$5YSnpBJn?1 zq`O=P6bRo+q`UnDy6ad1{|AeNL08%R@BUu;610gBvh0q<`2XuQ-J3y;W9#pw0^OTI zQ)kxSOGG+%gIL|iy34@JXqu0(yuR1n44PnmVR+;J|L*1zMh1o#YB&D>@7)ddkM?U2 z6XcH<3a|hF?`j6GcsURkTdD*ZMrr+DBGDVn6VyHV4rtB7CH^S~0$wcr4GL3^?(Pmo z1_qEjyC+{@WMBva`2xCt$6E&?-UAbF2F=TY*Y-4nrb?TSNVFa(;py%M&7Ok$Y%IZG z&$7fLr5Moq4A6+HD)`)wK2Wo*`C!0{seeF=_e+`L4tKVJ7WaYN&j2}%_c(a9A85=P zDhP=fC<$66%Yn4q3N)+Z!Qb+W0kW}Fr1fpsaqwa+Pz#d3btR~VcTtgPJjtlu>MfQC3k(SEYzB>`bb4$2pNtr+0k4EA4TD(HdZ5M`G#+CD8lph)Y21xLB}fq7QdBgE~o_&7e-w@n(>v-~k|T z;S(DCV(m?EytIN&R47pq35PBW=mt%QD12TT0G><<4gS33h4WjGO3=Ya(WtAXpghpn z4tnDmKEBfh9-(Tv-5sMM!awBzXcM7KuaAmI0A!>oJUFoX+zUZ)4-2#ooMj$>e`Y>!E3jdTt5Ct2S2*?J72Sd#c$YKb4 z@l6e7CCc(UAl)pml_(sbl_=4NjSql~gT_0If{afQc7NE5ppPI!L0bk?pw35j^j-nk z7YDpSGv8oG!|iH*0~&YDQPBX6LmPvpr3^qDlRI5h6gpj0WIA0`B)VEb{j-(>-8Z{G zflgotZI0U^0A7Ny!=Oh{wl_pY1hnoz1w>eY2on&Y6V%%aiu=IuP9GHqNC!GNFbvd* z(`Y?VD$x23I)>1EK(6_S%;DB=rJzH;M8FBh`b4Qz_f$~s>1YBqAuL-#%MnZ2I=6!8 zZt#E(Xy6C5aS}8$*?O|XzPlBaR09M42Pky!1u?^26r|@a9Naw@?26;vUtgF$07VW0$a7m(x%v9J5Xi;SoL|2O{=Dh18`f%bB! zbb{|(08Jvxpj1}i{Vt&MCKW)%7-(^5iHb~j8z@>qSx^PMDj_HsG?u9GKU@GdAfnCR z-VEw)=BSuV;NRBJQvn(iY0an*kPQz1AFcyh#C?Fj=Q9%nLzj<=M$5@kndTn~rQ+Sb zJlz+yLk0L-#F-cvEFAyyx9~ABfEJL51O~iN<^`?O=YY(-^0#bdVqh@-)_Q=y?-eNS zLwT%2IZFAv@4n!E3a-XY!BOGM(-mSO(jnL#%j4{3{h>3Kr{>DbogfV*pgsRbU&MX` z$1A9Dx`>g10V()+4tKk|Fdqg5D`e=UR0^~SAylCIg!U=^mJ&t=2GHUF{+29|aS;2t zyYIf}egd|CYqu-UF$RVIt~@V2K?>YKi&X@)PXsa_4ha7rZqR&$r{zEgXcAeY8=_gb z`|b-rux9=i(CmE|XxPq|r-Kn>251XGx4R3diLd>E`EYlPib5m!oD5LoXvSBVCt9pQ z?NCUIhW7;n)HF4aAWEx-zeVW(|NmJG;AjngQGOphSg6xI5uA}e^g4r(erT{;oeAOOvzzvk+i4C*jI7p{TAb29@2L+iH^KhW%R zmzzS%0sdA{RnrYRtA@YT1{5e^ETF0T01(rSBb512Ku~vxipeoI1;*}1&`@_!K;Vn& zzaY;^v>rI-rod3@2%2vOwTcyS<2Qq z4^)zY$4)_`o}gO}x|%`m1&ye|{KMbk3)-Uht)#rmO$p>&H_&RNxY!+_{l3v4J+N%b za~Ntc7sx4{Z6L!zNe4Vs2T}-?hT2O&iVspu@PHOc?%;-TtapN)4$7lCo!|wzAY(vt z!(gYtrCn5XIvZgQ;K#2UG{Fqk-Ti-VxqxhUsetUUask=pS_!+UPh~ z4AjzTwr1!oQ4u)qq5`V-8A?T81V04jn^GQF%cJ>-2zWtDcZ`Zocz2D84kX4wC5Q+t zmKFHhConTGyyk*-_If=TK=Ti^;PU1}jeu-dE2MQ<%3}?#QTSWbKm`*bBlXS&HA+F5 zC>Sza52}>pKnW7o%h>$@ZZR0)r(z|L0Pn8 zGFSk#>=AT4z8?qk35c;%L76KcDD;INxLYLvE>tzZ=C_72F)+M53(D{=Dk7lrCb;=P z#tTz$3KvjqcqTuZIE9iDBu|Clomr=_3qVPT_ zBufs1`)XYOoq1kof?^X^AJ~EBkbG2R0s~%{vm?rS3H}z4CqZR>on`lbPz$g-xS-p+ zr1@}$^~F-b7gAtj`CBqTr5tFi${SSZ%XEM`ijJT{-TQ-CLlIM1ti^- za)IjgPH=k)BnMLm3Oi7i28lt`gILJ2qA2#E%Yu3xATfwus9kKGU^j!rkxc>>GaxZy z)Pf2!47H%5NT72nC_F%N$Yx_z4|T_J7ZnZAgafi35F6qSxf%i4BUJ*j88rg3Q$RVk zNOTBJ?;S`B52%m;Wmx!N#X70@baP%(4{(oF*2F$Jl|IbT>nOc#NSOn?Sk ziUk}&yIpunIUrS1HZMdefWhK*wvun8C7_g zG~EV=i3l`Iz>965u4ae08sz9XSN{J8IXLKlDEO>|(=SflLUQk6P<(R025`E4W2}86 zN(Fjj170YDjpuLa17(m<@Jx0;1@eO!pjK4)2RCe<<{H!QVY^Y<*EsbudW6CKF zZKz|;EA?-vV<|56>~dpmIZ(o3V^wO`a-dW+zVRq%JU6a0izW7$6DK3sf-H{aV{Bo~ zM{Po1>;=Vnh>8qoHE&#OrxOcYk?{fWx@-yl7SQU)hM!g?qFp`);1$fDK;0A2To7nO z6X@zWP%p7g4>CRn31Z$Chi`&HrX(0NY~RIW-W?j#!PV^>5QSRZt}(|L7(m|kO~~R1>+! zKCUw~0klU55`v(y*?6FHzYt)Pjib)f9r4W5t6;s|IyXyY2#2^M>y14_>?K%<0j`CHb4 zG`ccagB60;g9?BKlRUtO5O=yV@V9h>RDc}>nN{kpQQ_%wXLPsWDe(ZuN6Uc{d&q4m#>o{vu#lQu!$x;u>O(=h(=H{0S(oHUEK|KOcq06 z(2Et9K+XhB;IbTZP+)ARWnd^_bp;s<@l5w$h}RnI8Tebzfajw&FoI7siwEseYCgh& z=mmr3Z@X_oZgK!E%LgsQ;Rp@uWoZPJ+%glaPm~CDTQ(nLfh>(K6|_E4`W{}TfL2d* zo5M$}^RGby-3(L?uyqIXbTC0j=)1(+S}t{;D816{3~G&e3qZy)vEdh!2% z(8+~7t#A2TzJr3d95eva0-g$o6=niZc^o@Ia{+EGmrAc83>Kn<4v0ia#Mpu=LCfBft01GOmmTR=BKHUIcuQq=r|r&Oo= zU|9G0U7(i0i{H;^R6wK!cm{agbFt@Wo)IpwSf>&~go^G%KhFhb#>m#Iu0Rsq6qPtU()N1o@u_ zv|WQIta~e{#|WwQK&w^4gTp#wR5bpB26|f$)JcKM6Y!cY9~Ftf@SrfLO#SPwUeH)` z%gIu~R?zMxNW)hGRF55Q{_(Fw4-`o9tp`d3!-K;@Ur2&`N&=vcG`PzOYW#uMKJ0)v z9+dh)E(MROgWDG(pa>E`M34kHfflYy=m0G+15FURLe{>8cOQJw11_RiUh6@(5{8GpcnKaJ;dw3G zeGsy}Fs%Ff3l`WU4Sx%0k`xq4&{>%mOx-^_!5dIZ5W}H9uzt);=v<> z;BW>duIR(@5Vye=2Emg`$$5}jkQjh1H7w-?4Zgru3xN%RL`?VpGwlMhTpa?kt{noh zh8+U3iX8&7p6vp%G3^4f`t1U;huQ^X84xXP&`1Cag3HRm#sO({gVSFas8KBt7#tMv z;>>GM;+JSWP-@k3yHoQb6lVtbdm9cC$Ah2Tiw$ zTmLNm3`#iNjvC#b2E8I3ogpd`uXDN$dSe5iLj>@$`0)jhwfrri%nYCgJHEow2z1&9 zM?kNuO~4BuaQXuG0Hi@WeN-e~f_ANe3Qv%GKqVD;jf??kjm$Uj8W}0@8X3@VUV%ur zhfFU^AE?3g@*=2cagDKdg|=t|p)NWM8lv!xImXEF-!-P&t~WLST7vSv(1R*j0BY#) zqm-iJ?x-bvEfWKSLl#d!ud7DDi)o;Q2RSa8za<%@*^i^cpQGCi)T3{4`2YWZR~RQ~ z#Iz%vv%8Fi71ZXm{!q%-+Y4fK`m?;00rjrMvKWHEq2P8J6w5rF?kq2vK@u)1643Cq z{!k*?E!TXErS&%WSen*jpgI2!rLRGz_tpl4cAtN-;s;1K*y`(`=0}N&N^dV{_$08m z4McUHf6ryTge=4F1TVtq2CtNl@9YKDi`~;e%Ov7Dr-CTxJQ!$Duba8o zH{eD01JD!%e~T<514EWXKyRo>&nI^A6*9jeWVFNFG z2aTh2`|~(7ALFq;2x=_Ubb(e&y!-|kG|>o$Zo2`OT%dr1R@Gn%R9=AVYXMM2CD7dt zstW4XNii+{{YCk;(sOaplZjo`3GOA5XgM%&!t>l?cj>)K#4D?W(^1q3qRft znv*nW6_9=L5nQB$>s^?-QqW#}nfOja@Ivs;?VzSWd>pi%LQ)i>A`{cw}S(F>qJ0%${adlR1`oJ?F)kwpmfax9!*mz_3jQ)@#tpi z^$U0reh-pnv^l_OCj12(vP%9IVGag{u3m62@nnf`K=;uXUm;@?p#JJNb_UScnhNN| z`l+Dl@9x$bP_C&_aR>s>%=xHz1O$fv57+1pQSs^S1xtSDWdT+D)(1OFR3timR1E5D znhywcf^{Bzz!K2i3Nk4Gw$-1%Wdb_`gLR3DK_^(E4z$eFB_IrJEa-&2y&&brC#^qr z)~G0S`ltx-_nijKyn$9;LmUO#jcNlLhj-{c)h)si6!t$%f%$kqcv$EQiw}_OApt&C zS%<$x8RRAQE|32$C;3}JMLnpRI_B`7v75bX6RKW*l6^V3Tn_z8K!sF0Aid&#dlNP)Dz` z71Ympo!?yu($`(1;?Ua)(i`|f4l=XWdZ5I(8$8b2-3nTRXng`QI8w^{qUIE+ngK0R zdCdbJ_yn&kaTe%~Q4wi90P=Sy%S`?jK{f^k$RH7Ds2es=1R7AW>GJ1nIa#9I?W5uY z+UgtF%`+=7JRtN1(|(YHU?F>=T;P0^q?Ov==Q7}FUDxW*&f(|O`cHpo+SQ6eX(B%YLPU~lU!1`ug z5VU-^6lpIpX+FSYeYob!Yg=n@lM{R`s6clwD2*I^z|t+k0U0F(HAp}uMs)KLjl-R- zphJ&da~%iMpgCwu9~B!&QUWbj>-164>GcF{Q&s796k!H!-{j~PY^eIrP#V=;z|s1x zvqZ(9#J{_crS)5hX+tF^LkTF_eY#y#41xjz!$Mzt+zSnm5=~GeDn^9^Y%wS#{=2Bi zykx-Q{^Fcw!-%@elmCTg47qY9|P-S?gDeWr}i*1FhI5T@{}EX$P^gVS)yWs$e$mW85lZSLCRi( zwqIy~Mm3vH{%`$OqR`7ycJKicG=3mPHNW8TJI*2i3gyzbo~^e#eN;3$!S3bnJIBPp z@R|dvd;(|~5;UsOZPL+D_n+yQ+kXcB)?82vBt*p|i=p|DMpzK6RsO>NFerqAw@(=+pV9k8Z4z&O@?%f?I(8VGS$spFfpbXOCqGD4j4#^}h zB9DWz2!9JNGw5Po6&pxC=wSK}&U~N-Rpv>^{^Sdw$TmLJ3EFqyA>wZRvt~gTpIgIE ztI{8^{nn5iYYonZU1A*}DmJCUP2};1iSZwGCTh^9~B#S zn>5z>5fs+=>FlS{JncGC@LT!-_2uTeVV@&JP--qb7Adc!BT1f zodt5S;OLUHk|-6|J_xFxTW<5WJo)qgKWKlOl?+G8`vyw}{+3IBK0FUTz*r$O9fDZ>Gs zL2d;dU)FMA>T0uQOzGUkD^?51i?s(?UOS)S@ zi~c}8^llFxYj1&4=FR|~ZidzarSH3g1%m#EigdfEIDl@%au(<=23>Iq%Ja;}x=U0{ zpc{D+`(8^_3|haHD0TIMQcL%*4j+sE-NN1Hx{a8BbRRtUk_lm}w*aV()5!%|jRcy` z(KrlVk0<~dkAO7tAid{s@Iu$%(17m0ojEERo!~Psz+Gs_p~{f{eVtFQCqwfO9{!ej zpaWZe@RbT#pDyKtb!PcnK(m&;Au19$22tHV;Ux) z#-(cOff8}Zm_Tr7VAu=$hoJI}n2`T^(4#RTf|f@(|XPynd$0S#2dNF=!V4A~z@>W-UI z;coEC(tsCtcfi~W8dC!eIDk%z;|UCcua4^xkbM#U1*A#*=SerpZK0=+`{Owyf7#RMmw5BW(kOi%M2~kM^t)DrB zvVKOm#If5Iw8>DkI~2aj5VS^(=jBmw{~El%a2tr}qLKg_r;q^8Y^Cf1d6DHMxQAGy z5(BaTbhfIGN&=`P)&9VIu=y}}>c|Q_nhfr(F5v`^6@bqk9a-cM# z^>%4`w`)b~ffAeG@a|BSAh0jGL2d)BR&xQj;}beLx?4dz#=yG>Rk*-s_wjNuFo0GB zy%*OHD*P=s*clj_4=8lHX>`Wv^t$PEx~LdH%Fj-=&aI$wv@=eiGft%2 z-vyLpdszen!aLnq{)a1cx^et(1r76pR#U`rFyH8OQHkkxQvsa?((R|=3A)f;BPh7n zMI|EuG>7Z~S=n#V9j4Olqf(%KsQHMDHE4KUr6jrAO{F_dL;J?X$H7RwFlSH)Bt%7} zmq()0O@;XoXm@3&p9ZKw-|eR10XhaqAuy;Hl#;=F0>B1?IyM>LL-ia$dk7A7`lzUs z&hI`5S}FxPRNqadH;$*18FZXT5NMLeMI|LTAUyPiB6v*)xC8M3WUs49>wywwNHe}$ z7`!YJyiA&>w-?mgd11Ks|NoZ-piVw`XQL=6bU?#iLEsD}3`rJHwX7huE+Dm_^jq%2 zT%wW?7Jl4C#RRlu;h2j`4CDWB1?FR6khWR(hwj5KE}jD=EYP%#33L(})^ao73(9KX zPLwF5wFVj-11FenaN+^w5^%TMg1_ZIE37Nk3%VS**GI)B5Za*%QOO7j4}GBl-rxuJ z_;XOd3t~`-iUqV00}co=Xh4Lr1cpJf;xQMM5Qc77i`D}r3f*8eJfQYYH|VTCiB7I= zSC+7V|DmAus;||$TvS3@4wT42awF&@7*N?K(jB7`16q;!Y%9pCEYQHZvHSmjQ0ubw zTZvh>YewsV?tdkG-D2Hb-JvXjV7ocGdqGR;d)-*N4O+i-a&+zmal6I4-8nj)SV~WI zgOepFOP&E;8xx|E(e0v=0vgl~3J45+QT_sC9k|YEKH>lxYL2k%1tnzu7Io0+V&GKY zE!N!%%0it}!FhlU6uq6`ECyZ{;S~%T?1%v^i}2%UKEh#rkiT^yNb`yAW8DQT-M@`5 zeO|`j+6NK>o89ed;n{ki6U;6tgSErDYg9tI!v#u0TQ8LacDu`T$MbY?F&}O@St0EMT{|gHH0chXi}M4o0}U>wu1|^VjK~3JUSgFqY1(AVxP^w;$-}-)@lh(u45u zZ)y1V|Nl$(U;qDuf-eYZxoZcg!{lqzda^{J*GI)9FyKYtBL;?mZdaDx5ETcIlWm%h zh`ba4X$9pk{uV|M6I36$sE7oD^Vs^$V0XWK{S#Eq+ki%gKz-0|Ur@~#q7o4lc+5p5 z0lK~Z7+8@9c#pU*Xp{PDX;^TCs3Zh+9|Rj2vl*QBG9dfJbGm(0G6F#5m`qqu_wnwt zFZO^(83aH{Yd6RTE}&rx{?^Q&pt-o?t)Rg-fkFXUP`e78v_N$+WP3wbIC$$m=v07i zSDo%qgP=|qm55#!m56}AULTbl(AbhqcZf;}$j(k-uo@Qa6X5E>rn^N2G`@?pd;j|n zutOz46;Z|ps3Zh}N2^!e1_e5})4PO` zf#GEyNH#0g2bw3XoU?^_jr!nGA3|PT2?!9%wv9fRYAi zJi!uNFqDE8A7_AuL1FO(x8Fr21C&xh_6vY#Rviv^yQqNl_kkA5K=kvsgg_^@cp+US zup-bY>YW^r{plcgL(JrF)qtu6&qX05NIILqf)s){&;_s% z8R*Je2nV!KE*ho`y3!RQ16m{pmI?bG3OchAWDa6%TQENag4!OSv|QrbK?W z)Z2VS;k9WuDC=HBNm+=v1En7ql@v(Td1F0V+?9fc@+3Mz+X!}mPW=VD6A~3A!k_^W za8&Lub}ST-Em|xf zyKJF=ET|s|n%(7qZKLT9Q4s)b(E&BJkOh5;Dgc@IZkqMq61a%l% z--$6WKz49|+K4Yf+ZnoDK|5C+z&&r!n0XCo@(bL)5lqe05Y`QGWz|hqUs%ct4b4pyYJ6Gz z2Q?%?LnhrfUMhnc*WgHOJy4?E-3tnk?y2BNX8?KBl_lVRXh`!BXnemY-uVANI9$5H zDW~;7DPI>j!a%F!KxdqQ)_Ql%1I?r!1NTuGyTN<5Ks5LOqNP-A84Ky z9PNQGEZ2g(0^YRM1w*&H#~PZJ>!;hHeju?f`*q2a&*T-;$t! zEQUbX(surqFd+tpF0ite10^c(Ua?lUD`>a2GORxgN{uZ~g%}uK3&8!s)&X%f*f$K_ zuAs`Rr54md1lQ;(a;yq!Q zzqAfgDnO3tmP*H&zWA{MawHg(bZhx0aa5Nta2ny}K{$dKaoe7?$ zoGAdF5EkgJNazNgkde?0PLj}Igz5|Lz8e%^bm@i83Q(kgLr@yza&Xvy!Yl=3GdS^r zcwxW)|L?*cg5UsxOxwT%W7%3r2%Z2%12ixQhF~F7(`1k)aKM3jY+wdt9sy4Xs)0f< z95kW;{*k;E4(TmJD7728h2} z50n~asq{_;1va=U2zsHn9GcoX!9M42S^n$)|KkpzW<0}d7EpZ*t8MvPZiBim&fN8hYx6CnyHNq1)*p(j6Sr8JzI43S%l3h(@_SJV!EAVKwjT}?3+ zq_z2o%F7CfR#0mL)I?DMx5YpkR9g>}@E-?z57bV4X#`RiqauKa!kM69b&!vbgOVZ0 zx4xip?hnTQt-tfPtp4%;f0jyE@C%8h;8bCK9F{63{`mjj(x61J+c}}rIi_wv3FTaC)0BPfb_J1rv z^T)~WP=9zQbb7=5!40wooE9O@@2rr3IP#dIA|q~pfZLHBPH=x5`TGC=%e$c4v%!Ic zML(sC;XBVuAyyn~g z|1WA6ff6ZbUcGZG#HkxVqa>^#Gr+EHJx~(S?V8Yfpd=8KhG0cm4A{`aP(#1(1o?o! zB@z_0pz{kfzoH zCC?x>-UqKV0-47MH7|?d^;*dA3TP|82B@(f0ABv}^@Z^QP~?LqsX&8P7Tqo?I-q8@ zi;6+7kBUQJ=!;3e0G79WJ zh;>~&0?daRe%A1})PbfRd{hLEG3azPf@b4DHiHgeLzu7=WWuFSpjrUrbf^g|Og1|F zE%s3DT@%52FO}G|94NKuZUi|F>d=r0f4Un%PRqU|(+#q>`6qLU=y3+n_!P_%@HH(8 z4Bfq83#Ni1~0lc1RVkb znkC7D*;~Q`83Hjr(0cMUS64Tv4+q-*#Xsdh>wyw?(ADCqYzz#LUF|LEU?zA1P!lx! z0a^oG5(#SZ+wf00(0#A_YrugonfS$1@TdL8_& zG9Vv;rY-qf1VK#DENnP<(t_uu97q5>H5d%r;p`{T9VXE2CK4DF0N&y3TY}UL1n)p@ z@n!*a%0WFw@Jc@g2L9Grpd;*%_cR~*@c%!`Cg-W3HHPps*AC)=x^SSXy+%bP^u?F0 z|Nlb|nd^jf`dYX_k>#Qy06WeNbokk^22e6$e3=3=0NjcI@j=}t6Oahl0`QHjfmtGu z3}tItv5>96Ldawj??QVGUJi6$}c( z<|91d(hAfuIMxKRj^X8g(4lT9)^7!gOaP~9@ac2iK3#vhCxBD+Ntxp;f}mkSSYqaH zX@CF!|H}pM|Nl4s|5|uIxLeAzA9SwIYu5c>l_+LMzW@Kf^*?xzvI*$;>DT<-po>Ud zR7|v;TtFwubRT^ovKUebTmuC|j0$MsheG#V;)x7Zri-3E*;R11Q+MIw2g9Y26z@_Ge#` z>GUyT=>~^p>q-7r(87!^9~Fg`lcgrzcV8$k0eiURDJbAU$q3Ry3OD0IgP0-%j-+cV7o8JEa|ME0QJ!G(N5s1GV#0Q53$SI((=mv?v8@RO~ zMbkh+ph}j%B^ShR1M$I00IcaGe@hrh1l~9F04YiY3Hhj4fXAA_Qv*Dp0~t&}qxXWa zQGdvx6`+z7JZu6QLjjfkU=C#9)A~n=ETnkq3KVI%R0>Kt7Kp)Wp2J1*CzlQelwO#bBObt>Zpi?lA5C=`p zff54;G;tu!GVmNey-Ps0WvPJdzFh*c8+QrF&f6s*>$OKfR&1Am?DnMsvhlkGWL0(v z$Ua;uAS=F3Kz8La0a^290jh-z zuNRPw+$A8ZzDYp#)g}Sin9TyRWt#+K+gA$69$qORdu^qF?8}t`vR_vU$TF@HkmX$^ zAS<~_Kvs2?fNTg9XYLY^4PPlBdwUfGKU^&!3&Q_)2*}!O7m)3SVy+zmvM)Ca$O`Th zkd@gfAS=34KvsFDfUN9R0omJI1Z4ep2*^h55ReVtAt0N$LqPVzP6633I|XEGmI=r< zZ5EK7ycL2WE4LsdeE$Qk{fhquATueTNCsU3cL;PQ4tVGqeEC;!ctF^T>(4;R&j7R) zFc38P!UMUmtMz23j|xjE2l$+uxX8o7q1~CF`S9*op78Ek4(1!oKe}8MTMm>MLT=Ln zugVJtO>2OrF0vSULsWEvx~GAb*#!oK2M2|{$b(q)S{5Rj#n9`bA`{TB>INuu$AHe6f^H3w2n-K~?i75mS3vf^0BmU=C;{?M0S6GcEe;MK z&_Qo6wt-H#I${tX8yy!3-603A(&mABku3*6%QpC@9E9vX1mzu2;j9n@IUhg3_(1Dz z{;3B*YvNw~y#Weo8Hhok7z7132l?yoVkd&k1FaXtwf+ut(A#zJnMdIDcSNKY(7@Dz zdS_Uul!6YHLD^Oc+QTUgTJOl)dZ5%iJ`PfNABJy)iH`&CER8-4+G_*4(n$oevJ$*L zFE|`L?S)8{GT>AR2|G}HfYPS~s4D~xesKCUe**HQ0w{goSSo|&6FChEEQi*}V z_%`Ug-`^$tkW((ZkH0Wp{r^9xLm!NKW;o>F%g%YAZr+RcCm9&J-8eekBs$$>I^{a! zSUTfOI^!%l<7_(P96IA%I^#S#<9s^f0y^VDI^!Zb<6=7F5<25jI^!}r<8nIV3OeH| zI_H5Zz0P@{VXMx0ph1Jqd7z`;I^$G2<1{+wfhzaTd7y#m&Uv7LiOzYT3AE06psAJ4 zc^;s2JI@D9f;yd@^FV#dj(MQ5+KzdkL2Jmh7oBA##s@kXI~`e?kMMNP1Kp9$(TvV{prtsS^T5k)=7F}}cg_Rt!|0p`I>54X-XG8w?0KM5D?7pI z7jlC|$2?HA*)b0^+0r==bgJI5HqgR7M)0;5pZUe3P>Hgg<-N_DK%u*uRy$-a(1#vsKChT_Z*4xM3bwDkf&V3+FrH5l-H&m1; z!q?w}uNLg};OK^5?G4K6rO&(DKt5|dP$G%*_V4aKkcR{RhlzBzfjkW!aV+8Ko(A$e zxJ$tTNiHvzP5b}9w{Hh%5^nai|NlW-vR_OB4R3?bS?_h@33$=G43q|0c3jvfDEs2r z-v9sOqvH;rp>+N1++MJ$tp`edyTONpf`)pJHG(=TjNNUZ6R)~`RCt0~K}C#6Kwwyj z2qdE%m?j|m;sJOisX*Leh?u|u0ofNae?SI;vpP7wf62&<1qZGOxn| zL0OO%yG}QjPCt$eP-u6I1b(o209ZAv=N-e`Y>egS1Dg8d=&*~U2+EKG9{P_ zSDjLcZt&hL(4umPLg*PZhgm@iJ6%D`5oN3o^S2xZrCac-VNm>Z&IP5a&bgqJ(>WKE zCOYSWMlU+&g1X$Du{E7@L3eQ;YX$jIv12Z1H(bYD&^r6hxjmrlHW#$isblUG5PK_V zQ)nmn?5@tapjA1Yb3x-uopZq>O>zoTZ)vj~y z0Z{UZ0ga0vw?16rWjPmgwqvPN=!+HLITO&SHz5DNh+O>tKPYfO>!0~s4ZtfybOJzY z>cKmn0{@4KKmr1ExG6{nXqSWa=Mu$Z;Da|AU(7fL+Ped)R=dRF<2t~*FuIS%Mjw7L z?+8pL9&{T{^x-qjZ*ss%U=L*dlfOlGIB1iUM7O^KsB6~k@6j2eBGVo20@~8k?GL&R zMWs932eien+dl!caj82zrqf5oqT4^C6Vw9^Pw9r-P8AR8+c|Xm7j)})f;JL_=XCn0 zcy#;MbcU$7bca`T`ltkS_k&Bt5EY;9>EKe*MH5 zr-KViAC-)5|B}uSm6WdOpdzT#M>(xDxfPi6gu5NBXugBZlLKkgHAsiP)n!N4K%1{(-{Vu zsL|>4^8hs@I^95P(mguEK)dWLI>9$RICQ!dbi1g8bcTTzX}NUzWq@|!b+&+Ayu z>NHR|gHKtk=$-~jqM*_*FzChM1E7KhG)^Snef-7I9iR!j5|MaF(W5X!Ko)#(b@P#& z!(lJBg9qrL2_7T_skH-+wSnpw#uwMcKx0lUP|XR4ku-yj+XCI$5thXO3RIE67gnGg z1&NOmRY*&zKu){?~B*^%{iz)bwo(?y9F1pds zYyZGzg9z|UR4H$BjS7oQDccTf1_p-1#~Bu!6p)2nnGU+5w%74%^ADkNUH)wi4yQmz zSG4M!5|A}MaCnC~Ncj#65D5yz49i3~n#jx$_1DImK8 zw2kvHcr6+{rXWTl%yVjf!BnCEG7+D7Aa8a%3bY>BvEhz@Y$@vwgL?w9os2s`>-i3Y zPrpR90AzmiPmpVWN`uTM9X#OcgO!!O7pjZ zXA50aMB?M3k28SNnJNPVL+oMD&FbBLE}$)npnhvc$4)`naOTs2VgJKqzPfX=&b{=r}3-TXte#HRU& zN(tzCM3(MANXhd9QSyMxCQzXU3jgB_(1=rKU|`sx2TJb{;ebm5vO7S6&?p4OU$5iG z<{#qx?Vw>-{%s9M&V$RqCFfx(K|23?u$1zmnyL#k6^k6)Ml5prc=Q>7<$P3Fjx#O* zxzq^E4^d$`&IINgg842gc#Gb5=LBR+&I`zXIVT{ib6!AJ;JkpW$9VzSl=A|zE$0Pf z8Q4L9k)53hL_;t$3o9Eazar8XXcDFQuTXGUcxezU?SPU}#spAI2P2Y%AZP_EIQ9Zg zgQ|_#!x;@2N?@sG0#pe|4>9Qgbdw{zB>cYe-xWP0l)cH%|C=nRGWWj66^kga{{tEj6vA}IXi>vGjM*EDo^C! z*5Gp)oRn$((ZGCDkjbEof1Cl#2ki?(R&NHA$JdzX z^<>y}NkI1OB>~w3mjq<*UJ{Ufdr3g{?mz(r`*Bcb$%7<%T+8HD>m-4lrWOCyMM-vLl&1J$v3-4_6I zA4C->NFYT6f!Yb89CRPIj|vAgy{YhTYsk3@PHzeD#15+0k26jHSs_nMlF_;)Ef|4}E{i5YQ{M#C0u7Ta}aZNxLn)o5@ zF;I=U176{w)`O6`4qRs;YFChMd|5;3nt-gtH38XIR|RAluL;O%Tm$tDK=(Q_vY>Pj zP`d}n`GF|^ZUE(c(4p95mbV2U{mA9DiwXy*Jz@$fuZV1l6kHLI-5~^ueYD0SH2r|` zw|4VS(2^bk?f>Hp=*1|wKJ0b-*!)9^za4b0DgU;HjvL@e%(ww9^uQGwDA!7K2e@P$ z*eNI*$P7BBAmD!hw35sPRU^k4E`XA)Ht1erP&#eFs#l~!6GaQC)P$&j8m&(9K&x#)eQ!ve1g*@#1(p`L|C6CYlwwV=VvqwMX_G(= z0J0$VFuZ+a0xAzon}3KA+kR<)r3z4RvK(jJ0LrbPb2-u4Ux@m}ntxlvi`(F=ed9KG z7Z?k+Mk-R9uHdGC><-WbJt#Zl?J`VQcw0cW>$ZUG^4kKk+iwfVGB7hTF=GWxkcfnm zpn?Nb9+KRCbGRiSyF&w9D1w3#=4-Oe19wM3cdDZ%Iq+sZfnHaZ<{t`S;r#8)p#3!4 z8hGx3!|}si0oi!)vJ8w~attWZ^on?6c4$Gl4K#`a%J|WTyZu};H1MfSxP!<_el8gf z_|yu3)PjNoVlF6uhNHT{4U|B^S(E{kMM3QlaFzoP)j?PmpcNV5jjJ|b7HHWvNC#sA zXev}*l-Whu=uaiI|IZ7H@F|12Xz|{ zcYE-(o-E<>>;w;OL3l49d6B#M7owvNAHD1hQQ>$Ax__|OlOgk-fNaD)0oj6k0+DccT9P%Z!+-rebpe_z*Q6@JdB`q3aCPXhZDHkf~>13QBldj(dURg&H#1*BoSk;bB{A#xDU?N;NjqC zqLX^}{}m4eWZfPJ$VNR7kTrTBAiL=Ss7=ZU9j=BnM9D6n1Re;;f)_SG0}c{>;Q3yj zUN`Und>a3@28KuAfP3)}lqKRIBk*yD!9(!imK3}hX923zLHksDL2FgvEjiE;Z5+oL z7#<49g8dKH#DO$$PfYWx*OMXtp@3}JLjl?BhXS&-4+Ug5Jrs~V{1B9%7@3%uA=w5( zBJvK%OVIWx$Upq;Q^Dt9H*h?L_~{WiF>oAb41oF$R5%=G0`Wj|ps@QY8NdRdsRx+j z!2+OS4cy#>1c8T31}F%?t2=smypTqGlpw|;2Z4(U2c%E~&s`7`1aXf9WPKkA$mTy1 zko9~dAZ!0fK(^tLfb7;s0oGJ%w4wQgy;RdIe!{Gj4 zmm^clfl7-m!G>S&gG&V(DjD~ea&6vgbwm2V_ZzP{RSxJJ_;y43fJ5tn=u)AEUk^%! zyBry978J383@g=!m}GpQ%MoP5$A({TOSv}Aw>p8LyYwo0>_O^_E=T5;1C?4J(@Inz zj*$g(#6eE_P%75t$=L97LJ>#9!vhUJ4`8wJODWgJexhsywVye{x<6Qd4d-t;%D}+T zV5iI9dV_(1!Oi+Bq?geBSNk9Qd`tdqeEi#7Bz>BHNb|RYE=%CwHetmxP=1^`;hBJJ z^M5A(o>m41hOprOlR>kykjoES+d+-{M&pa zeVPxxY5vJxUjJXEH|M#4Y*>)Pi>`nF|2H4uh(7Gl$p)U4h(7FKeW*mU7j$wA1485X z=AWYFZv5Li=R5}mZ*R|Y0a*v@L#20{PyCNQ-0Q(;eX8UO|29GXZ9Y;y%?H8C`S`bW z?tv)Z@?1c+lMOuQ6@9pq4YW?<_cH<6wC4h{tj|$tkl4Ft0hPY@h)}h+eQ2;Pe~b{loe%=q{F0 zws>&F^KWD4-{vCW(|q7}^ACw~KK^YTCtiU=alK$AjyssbkawsWqj=6=HpDSy}Pe!UvK`!T%!R}1zIczQN`U2+E8HuHmmtK z^K0eqv)bpIf3nna#6y!FNIht=99VrxOY?CS>%U?AE#;tv8(+1*qq>wId^|Y+whorp zVAno*B_QkW_d2NgA5%>V$Rr;|(8>hR8Rc=!$C;YnF}*fx{>NP70g?kP&x6?F*L!H@Q8ys8`Ld`>x6g=l*i&a zEy11yg-UOUia_`A7mEKtI|fRwx?BI{Z&?l+JOKNLA6h=}^S6VBSoyb2umF2zs={jl zS&&C&gB%1e8%n1_J(AG;kD0%x`v3p`AbCXD&iXC^5(_;^VWcXWS|Ns9F^R|zQ0MsYpe?dOsZ~64^|9^Mu zza@7Y?CtnlSwSnGTvSBd<2pf$YIx#7M&0u3et_A6lsy_!!Zz5&^0(fF)E1?j(Q!LKM=-}81{KY0elL%J z5`~Y7j9YZ4VH~(~9(x#6bRXj1Ce~0R<-=9V2c#X8kq1q#9HWcK_$!#s&+N@+AIk z9W&m7Giu9QaNSo^3Nj1sy3({}NS$W|s`D&Ca&QNgYC-EfIZ&Oa3zCDop;Qi9=P`k* zw9;a3CqfgPaKChp2$~MsZMnuO~y+8v$7mUh+mj7KAsy7LZkVBOn{} zMnJY2D);fVfULk90a@3#0;huvOhL4uvB#vSBk^zzm)F7_}e7F{6m z&RnAiQUxz>`CC9&Nr7SyRM4IS7qqZC9;6Ua&~`T;V*y254Jg`BomigFzpdj8#CdDp zL*gw1q#IGVCLzb04@eGCxCSA|n*m4;QMiht#9Ifn83HO`L5&PhfF8?CbSp`1DplR^pw2tmQia+4pY+WS_hhkj;7zE{i~A4+0~VW6kdbWaqyVklp=G zKvwX*fNa!z0om*C1Z1B;F#{tLJ2Nw+3D}CvaYf_=J`h zKy8m>;I;=S8R5zcpti>~aN7f<3Z55Axk0rXGzAfpC0Za^g1-f{A{CS^K<9-a(if#v~0qh-2p9CuLx z?J8p^6>2{5A9TVAXi7x}mY$*Y3AFSC?Wo}2)^Xt*IK`~_CLjwb37PnN*q9;RDtH|5 zgD>Q4KF0L&Ht1Y1aCOGa-*b-%q7EJ({4Ly|X5%sDmzzQA!1W^wf6q3kI(Xdhw@zSU zVCXc5jbOW|NPu=kpMzBIAYXv?rSi9!{r~@;f14QpHWw*q3!A@vC1hxZ% zfU1EP_53Yf|NsAgc@=b>vL~e13OWG`(NX0qk!b$GS;N)*gRAZVXj#i`xEDcw0&VaB z_jTj{LA_NY<UI52!%~3Qu^WfxlH8tcc}h+W-ImdqGzWfilL6sNdlJX6pg|K2=aa zg6@0v`2YVu*w3KDu@F%Ss$%%tFF>L)1QL}l-@(-ke~ZIkQ1C!||IpOh1y(wt1FUpv z3dpD6cw(xF0l5tk*C`+$T0nwC7XjJ2F9Nc+J`2ds z{wyF{`UQd+7@0VjL6^uwZ;xYUWdqfv9PGWG3=cjF$g+G9kkx?dL(&6MgTP32uKhOw zSrGR5CLkN}RX}#{7XjI4Uj$^izY542e1*s@{VE{a`b|JK@|%Ec`ZsX>3hAmdGcz;v zdNN%2Dj@sztAH%mHvw5>wIH{{%!ard;%HV54i08E4)Dd(?686jN`uQc9&iH?RJuuY z-{f!6WCmSR2ub~r9yfn`9$2iS;y0)~=neTTAnW!z7ZSxx{5{^#ObkyT{4KW33=E(| z;sHtF%=|r|tLs5&0iIC!TO`1WAl+yN*O5o!`V!SJ_yW&)YSV*T~FiwbDDD+7N^ zJE$c3tNjnuen&31%Io>JHS7Vqv2_Z_js7nsL750NinSb?3z3T3ParvPi~i*&(16x| zX8s<~&NYxLkxJXeU}c~It(T|4%2@b&BB7=s6}F%v6Li!&yf^{XZJ+`dbV)9#;SX{@ zq{KZAZc`)Yz4D{{+a`PfyL{@6-{3|pe-CKi7|1Q~U@e&st)<-8IgLHQkWza=vZD8F;S@_Vl* z!_*%FvU`3A$UgodAiM9UfNaMv0oj?q1Z4Yu2*~pM6p;P@1A-YCnK+r5SvWy}m6MZ` znT;LPHsa*y^D@Nqs+~RnP1z2IuA}DRR|XvLpl%5M_HN=v%HoD)#}zSN_-n?8DdL0 zt#6b#H(1-1=(+j3I$M{h$ndv1frjvWR1{*P<2wz(gCpP>KQP}2ncsYj2_Eh)AoZOF z@i6)S)_( z7$C=9zo%Nl=$GGYET_o%Ykk$UQLEB%HVE}Jl z0o~nY6bD|#1fB~LfcBt!JsC{?3&=+O7m%&~FCbgMASi42UqDvvzkqBVgP<&^&&Ukw z^MOh@Ha0e9Sf7!(`~S870@2+Aff2+CgiFCc5oASfFG)d$tW2I^{p`kE{( zkhLtJCKXZR2XmOfDWQc4EhP-L@dJ7O_DSISzT*nS#XFb~=^+hNH^UoKB?-`$33&X# z3nT|`L6rnR3WC?*@dG`O9K6|7A`B@4Amax+-heX@Nds)4q72mJ+5u`Cg2xK%7zJfh z7zJf}7zJgm83knxpcvnn{xe2FStceySve*_*&-%E*+-0mvaU>mvT01Pw1P-1ptJ&x zb7pV~fGqp~MLujjI;1%b={ACL8a$Kz;N@=zEo0>0)}g}!P6Hw=g0kRAR?v(pC}fZd zThPHh&`=Eojmo5h=%l#O5(lr3Qvl%2pVD7&0l5M|DTg{AvH zCySu$eXuxU_7TB?1TfC_0Mh)%fq%_EltTI2AFzP>F&$Sp!6Dti3C?W_;HE(q&x;^X zTk;4`ET|a(8juIK4zhS(SRskKfzAOn1sj9hSm$rA0Eh;FjNkDQ+^hh# zCX9Oh7~viI7n~&$9wm~^FStuU9a(U-X9(VU8h6IfwC#0-^0~>j2UdkYw&0+yu^eV!2H_1`#fm+i-o^uI<&_L z?+%r4H6LSv=vD(63oldoTW*5e1T3#P!P0K8+1&ODgYGf^&fl^ZI)~T&Q~O`9Cj-1_ z0<~4-`P=7%+bRa7C0nWyq2H?&>uP4Jf7D3t5 ztb(%V*#u>U*#%_-*#%`ySp{W%SOsNQunEe}V-b|y#v&-YlTA=|7ptIbKf9ppbap}6 z0!~5M$*h91LTrMv%4~wND_I3)r?WxC8AKSFm{~+v+1NQaML>Xyn~jH;hnJUEgpXf9 zP((yXc!CP6pe!G&pzKc;LD^(ZP}vS!Yyw>;&cF;70F7U@vkA(kvI)wDunEeRvBA}| zu&^+K#@|^Oz$BPpU}9!qxXCUk`?L+VSyv8-UM)^RSrJYM zn}Lyuiyd%)!abJdHz8b{mJF>@^OE8Ty=pvVk1nIv&(} zMPO!D(3l%5d?FrF{eaf*ae(R|0qbL>?9kpQsOsVAz5s1c!xjqtYyK%*E(_{baf2#} z-UHl%vdssWUUN4eV1CWke1PROBWNz_9H?TA?qq`YPOJ}==7L0m!W>={fKLJAhz1u< z649MZpq`=iq0+OUWt|Suos7`VsP&;zOOR0<(eQpOM?;Mys2>YDAq1oop%Qd9ri25? zLeM&La6u>mG75C;Vcg*fVcdeU4%~vWa@>Nl%G`po8r*`iCES9tiQIy+^SA|Nb-6)d z#lghP!odn2P=pLRz=svPA?H=_SRX270|(DxQ0RbqNU-@4Sor*H{wWO(9~NG4_&njk z5vj7!kl^{7pW3d$4Sd?+| zxBgrr*I=huDhOr@H`qm&vi)~a5dd*v?M3iNUnFRC-sh5!pjN>XkZj4b20Odbo1i&N zH-FG2pdO&hj$fYuom&SRm5T)LIslLCfsfNu0kt?|jSoaeg4T(szy{?a55qO>0BzBU zjyycUf=^Hug!l3a%3kLclzqi3C>zTwDBH*@D7%msA_vN%p!Kd{;PE0Sf9vZdpbL0- zx|sO4o#5Z*V+dJRCsnSHYz17HV&n{ zPS)2;55$Alr$Mqxe5W8t&4lxOg0frq1Z5BN3CbSl1C@8ophf4P$tPye7&ZeF155zq zEI1Af2FJYu$cZw>Z{2&{8Ns(>x~NEiPl@f!Q4#2p=ihdje_IHXPxGO_&A+7h+d&8E z@Nb(`BM5Ty)Br(2*;debqd6)HwQQYs$J}@r!J0wCP3}&h1C}7<>#aDIH6LPXKF)-s zv?`5(gd`S>nBr*CRhVmVr9x|6kB>Jg5Z`37Yqo5EPWn;1`tb=NFXS#V;uP zS3pqKP*6}-KtNE|RX|X7o`9h23w}XaGeJRF1};V>W-b=cUPmr2E>$erZBO1!GBR z6u5PN7$R6u>J4G!mpV06Fcz2EK=#--SR|GjLS%AFH5w`y3rdwBhuMJ55bI*FNiX5D z$tmU80ord`-!xte? zE@*uqBq-a(=H_U1p){t8txFKh3WBpdV64|{U2KkSR)x&-;R9YQj#Y*QDT1!IXa zxO8x_gwB1J3-fQAAR!F0W2%6#pe(p$1uFt3GzbaGmI(>U<_QVPP7xB6T_*&p520H? zz)cnw78X#;fti_wx!057l8~V6b&wk5#kHVSwxE)Nfq@Zyy$t9S?JlO41E6pKheC;< z^|=x;3&v8RE+Z&JKX($ov@(nW?@0u9m0aLdxZsM&k5u4 zGuRaf0?9p)bv~R$5)D7O%2*qIik9;6Z}VUT2|G0W*FQ z;!>db?0;DML4bc-h>=h8q2JBFSj*-9t4!S?0`Z72sA0tiYFKf03p#aXvUCbMbO*9H zSs(8VWGOus7aM=LThPhD`go^c2{*X1Hv%`2Ix|^bUoRICl&ujFlx-9dl7M6p=+|E_@l z4UY~q{Aws=?-uv4K2-kB`b3F%m!M;Zn49&9(r=({Kqo)A-itom$q#DWgR4E*sh1%C zcXL?#sPKSB5=FwgOBwiEKnnpt?FNDH-a01h5)~ExmT#b&${6{#UEtpqBIVQkij}`* z6$1l|I7>wji(rHFfi~k++koy>kRvo*6IGI`5?>dz^*{X zhDY{boB8)$f>?d<0UP&)E=ML6u=v48Y}^;pI>Y`oA7p;5s3M=nzwbhqBO^qz`54o| zM{LcWtI?y5BE#TDf(7sck;bg;Wwr&CIt0lZ0 zT>lxm`5diJck-1Uj*pE)jUTWD*5^tLKq(ZIB4mPlmw?757`g?mua}5-OQi8{lTPcD zYG!2WmT>OAY<;a$qVzFns0rp!C=H2kkP!mb=Sy@z=7Ah669zNS(E4kMaJN90P>0xm z#%=?*?rYZ9I}J*ogOc-^GiUg>9bg4rSlawUy<8nM`7I7AxLVhU3(A7qxrf11kB1w6 z{wv~W`1!vayfp?i>U6mKf48`x>_l-v+3DhfvP;ATL89Q{Hc0V>lSJ9z3pzg!yoNv^ zEWEpx!TLvuIVg#Dg)?^X^Kbjq`0qAo0J;4jh}JE1SA!~c4N#L%`)czq7XF?yV8bpRe8txM zjQQX*Chlua-M0?@W@oM@7k$x;1LVgo#y}c*Ngn&~WNO*UbZuz{Xq#*#}Qp z-~{EPBGY`F$@(XM>+OI4|98TC3>r?g0DFFdri7rZlZ2pbxP+kW9SKl53#u#_A$v7& zM#<2V0G(O_$^xLFen=hwm9Ql$GTnON-M_T|f(|F>zT5o#pY~1b`*nO>vHu$$|7iGq zqm;S%EtB=x5=~hCu(SSEBGb)be7mcXu}d$9B}rT4($3bG1} zaiv%BE`LU(^m+)K#O5)`fYa*-X|(kE0AG4tgPvZ`f(@fAy)t2>*KkJC608qp3HBED z1bb6TQ1+9Qpe(zzplq-7XnKXG*MIQzdh{Rm^lI4^$w)B0T3-iM2OMD~30+Q%peuSn zH-a=+>GHRNipAzbOxD*+T)V$(e}d)*u&Pon{%uU)Dd^YiU0g42fQJ2lNP`--9X4{H z6y2*LCkWoVlL+buzGJe!UV03&`X99W$fx-bGibZfOVD;B`{qNS{Y9_uz*Lr8gV=Gp z!AiIE7{mpKAwtp(R(7Rg&4-xcIzt(tTkv3$(I6qvJW{VGgQT3G>}pv-*#okIvS(!l zWpBv}%5IPa)jzDPte`y#h*3Bg3qA}N4B8uZ9kfafG+_p@7S*?}KudyNh&2CT=Whp{ z>GEHt)kR)VHmvy&(~EVW4%ZQu_~^sUhnV8QyY)K7z#QxAC6=J|({K~Hz}ud{;Wq

    jL919hH4i!IQ!Yr`HgjpaCD*hTOKF5Sv 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 z zpSA0gPTw2#I=w8-Y26-7Y1Y1fN+i2$|L|`=sr{3GI|u*zpP)4&j8y??ogPg8eLr;j z-T*hm4*d81)13Q-31nO8{P?)&lb~is^BV=@OTossjZZp-vqHiot=l4v`RB#w-RILf zeL^2NIXE=`;;(yd8Ou?l#lPKW9#iYd66szS-v`E*(z*rsxBm(ZcS`FNc#--WG-l5- z&)GVbqwZRKG&~iEH2ePe4;r%X_7mt1V+rrJYfg4xFh0ig1*)kav%iW=WI$eJpYmopYLx$IEY0W9^Obiaz2Wu|Awr{Te!Boou zS;6(1$@ljb>Fkij z*nPOO8^n8&4H`f6cIozZ>23xIbZ!CL{vRv^bxJQ!d#CS*v~JE`k?m>BT%DnB(z-8p z`+iC56zT7pVhnOy7sQEH7m8T~?(vq9FD2`MM20N`2>S|Yx?#nN7K+Y`v(fz&q@C%lIpxGg4`~(Jq zq9-^kJd3^iBmZ^}rYPgvttYcs;!8QQn0Ix7D$%q?pABsP|F?eQ?`Z;cRt~Ury8dzN zKG^O1hkrY#v-Pc77VCp0$=3I~Lpf@BdZ&Qv`ZPwV*ZQD^A=a)xN;uN~w?IVyH(lUo zV0bOs{F|$uGwpxV6%da-?SIn^eg+1R&7H14O4-5ozGk;RSjwKo7L~>Pnl+0(DvKq) z+4T>LUui2S^}@;+fo9(?|AWK$w-+*n8{cmImc<@*-1P@&-%u$J*qGz4KR_p&b=PvV z{^##`1Mtu79BixY5yHOS}&FI^!9)& z$+Z8BuLJqF^>EZmGcb7d_H=AvVPHu6&j{HhTg%12tw*31v^tNs`_#do?EKq$7;9x2 z7G&mDZotQ}x--1QHr3EH~>R8IXSdo>gPcHx(u z3=9nX+qN)+LX>~|o{elQ;IzAug@u9Ph4R<`|GRCrg4*D%|4aC~FKbWP&>+Xa@Pg~> z|Ns2keLr*uaPV)J@%r!jq476pItvs9TbQ9ya2gy1TfkA!?aR~4vyp#$B@_R4!562$ zfXxL39o*b6Aagf;`Tswy+xN$X-2Z9T9v=Kns{jB02elSB__yz50y}LYXb0Pi&M*J} z$AeZP2JZlMbi<6lb>Harm*^ESOzY-Kvp!M84yxczyk;^!>E`C0*2z`+5TZl|pOUy} zNF67V)*WWk?Iyy%{S@Og}Fy^TzuRaxD27M-piAd4sdcd_svcl`l6MX|&6 zUm17fA-2Z<|2sp!yk==m{ld`rAEcv(9i)VXfdOpd<<8JI%on;`|5>nD@wYB#U|{HS z{cqu7^`F0W7Kp=S#mL_Z>cKd5F^0$I|H%?try^c&)5~Wq$u^+lmICe2QSuvH` zKxq>wtplZ1ptKB>7Jp+pV?NP+(fWFC_rHJt|JTV_Ur6h&p|siTDOc-nsw}#&RC8zp+?sq;DI;L zpbdYk*niL%I=ns)3^cx!W;t1kpMjw>ID)@*E9k6&-fmDbGCr^ml(ag1e}s4Y{s1-n zjQ@8scJsMke%|`OPTcr^#}sh71dBNQcl~2o`={n*v+EC*=3^{QjsFhJ5tFSs+A&3< zMw)@4w;Pm#j1L%J+6PKkoxVSCn<>M0;7->cFOGfx|G&E%ZAv} zVEy+0f0j^O7IQrRwl+`&lGePZ8B~EVl(PC+f3JPn?H$tVQYOgg9MJ6?(0qWa`5@Q9 z7t9A=GFzW0XX-xK9m>;uh{gIsxmj~92SbTLcc?)3;TNeNKn{rjEv-4o)%@^B^8uD# zmV@2CJXwsOMN7^R-G^Uveft0o{jR z)cpGYzuP(FwRZC%mKQuAgPTGAadQahb}n%MsW|lmH0$~2f9a1G{$Rxc%*PqQc1V4K zjF6UazL@^u|Nmy^2=;F0i1@gJFPNiG9^zpL3=Io6e%t-QGEXIosWV4KAfCU4kBNaH zxVcV+sm_jnyC1kL+UCN+)E%bK9Vc<{5v%c`U7(Dpe5lh+A+4LmS@~3Vm`qwHi&wXw zLU))%T6dgHTBnTHYgXd}op}~%)<@I2|vLY`}pi5)T>bOtZe)?PszB)Jra5=HGru z`=IsN8czQ0ekRO*BB1IaG$641*bBwKpbE{+rqj*jb&h3@ia<$tTDO}`x1UIw2mkg1 z{M&dqj4yQ`dlB;;Gzeef1d>d%KHBYPQpyfC{53QG_5(N!Kk^4*I0tB#I%t#!GU>XJ{ZNn&7!+l;ovh?q1@QbZ){{PSN zj(V~7&Hw)|p8xs(zuQ;C!2zV1fBS(>#u9<u`i516B4 z52-M`EMa0`czK0^0kkTs+m#2@iR=U~5$kpp=xm$82^!*-267r6V^ zCV<@2)&p|SfzEXqAaBfT;bdUg$-n{99oCtr(wV2x(N+VJfqCNvH>mxw&c+!OiM{)N zXfQDB+`|M?pT*I;PtJycVdqZ<5I3@S-#aG|qq_|hDWF}7`#|B_+rz;q$iM*hgz*9R zYLWQ3SkOMAU{Jj9bh~jF-?ly+Ucw#le;Oz(dl+GK@~CS-Djf;-3x_ebJ&XqybKKSo%1R<7#QNf zj)!c<>W*UxH~yc+64hD9(Ft~RC)kmlcAel5=mZ&u;B(V|Bgp!3N8PXncP&{`cg4*nL<93~`yncY}=Sz1|K zK#LvWO4>j{#^16YG)xAL2JEUpLCD_%>cK$F>h@#lZ2?D90K&R9P>`0SXMplcCmTZC z&7dSG19TcXl8{b`eFmt|LlQCxE75uJTM)F{WTOy>%;y13B9(|`1T-=-AQZNN!n%|z z?8V2w;8pFM#s?fa+dyFqO(KvzIiMw+3|S0eFIeOl7{a@6gmuRLc#$r{z>vil25J>O z!414DD|A4bq_3oQW#hX17;VK4kd7#PCCUa*4}|C=}0{$VN= z4|`D{0J5G9rlwGwf#LP7=Gs5Zr6S>BFK!EhcT0gXVAzWkVFm`qc_21y8InGXZB^P_F8XQ|XM; zcnMne*6qsyY2s-g?5$wzcIC+8m>K>3_byQUXkW1YRm;?Uz1z(si1|cdzzYu@28Ql1 z741-t?mCl$ub6vltQdFxmuFzmK82oRL4)CLD!V|*LHnTg#pWYC)`yCjx-WFQ89>bX zqYXMM>`%9w2DpOLKBRpLr08G~sG;enbMOIEKrhS0fWQ}*K?+?tG~HCXUH>#6;n8%{ z2z!yw588PQ4ieC`TbHARjY2J-jsX9*1E2$_UVv7q!Zsd;gA&4LUQm$#1O9SNJQ-fwfC$K7ISp=8K{DG__BfoI@>@T(9{^DI)T)RfuL<9 zek{S=^FUQhIMmE;f$rbkhqQlcAGZEk%))&9H52o}Za!^r-Nk&$`e1#f@qcjA0WV2Z z2@iX5UKW&G{)C5zy|^v~POB$)Kz`u`Ilqp>_yDX5gr=X*s~wC_cJ^g}N+my)PCpIM zGA6KdL36HdE}d>3oo+szZWf)OW}ZVQ*pr=-pmAV$XSMl_LANUpWc%1WP(8_fxYPAb zZyTt7F+OR@0a{I5;%V6jYCm*x90&VfK%If1#2||?i!toQHFnVGNn05QDCY@;y*LJ1 zX$Wp@sDgUP0a*fJFE+6=Fuc|Z%wl}~xwrb8yQH#?}p{gTr2IlVf0L z{=wAg`lm*?mq)_-e3@nUaqYtpp<1nOwk{Ut?l6^ZKZ6by!T)Y5-EJz*|6M=W{`k)T zT8dgUC-}wpzyJTgo&rkIKaBW$zp^kebWa17ZM{4aoxVSMyZ`brFm(D}=;q_!#v{qU zt;Y~l&3Ag~boYT&WifR|%0yZp?2NtB>C3_21iC{Z%b?dUBB~QKfcmGKv+*Zr0H>I< ztH&^gg@NI zsFva1w#VE~je&vrC&b>)8ZMF7+91&{>LB-B;osJC&K;!Se0S{?{%!j~nwZabL+UUe zD-npc?%F^9T{%GGb)7L>EKo7~P8+V~LlTy*9QK=?>uN4D;xA;CXG*da0Bf%ysDw z;Cap0{EM+vuseVUNs+*7{_X$)umBHO7e}X?k7ewSZa0@sN0x3kk4{I9Za1G!M;`tb z7ElK>>_w{#14F0lALhf>u20H@xtu=T-WrtTBnu0OP0 z?>JZ=>~!U*SJ3w5=w)#@_<-55)0YDh*v&qSBLABYNc{KZD1F<@BGu{oqucjOx1&I( z>y2(U{%tH0{M%X#KuL_*^@g>hMloBbqef?>L>5zo^@UDX4*sU~pb{$dORrl*^C5>$ z*AJbcS3vW747Si@)?xroW>U7`RK|Dk1!osTh(+i%>%kX-EK1F_9Gv{yP817tyK?lh zoB&w}N?NZaxCdWF9&>;M1%FIhn@^_dpX{F52%(+iNO?&Rq7z0w)MQYz8> zOQ24;8&VRm1~>bN0KElAnb(`sFVa-Y3=%_ z=zh2BmF6GJ-LV&nM7sSvI{kdQ{al(4{Ok1d=yY>=Ed)BWqTA1<*QL#+8ES4OgBEnCl%(Xkr?BeJSQ_(uz9cR$+lBt773RE0%bcbnl$LaL)cy{xg@8p^M-%X=i;pG zc^m6A80r`p_?uS#`u`u)M0w#0S+n0d6*Sxt%MtwI=a2vYUv`0bK5d|g>h!%+D%Jc$ zpiUGXFTKu;0bwsrNi#6KRy6+aZhgE=w)?oY8%wW?1WQ0Ki+n)Xi?z}W4DQyoe~O-U zyZ-6+Q|YcV>AraI6*KcMXaF$Z&|&I~<=_xUDUAIzx?S&dhv{^(bp3bJX#T-mBo4~7 zZa$z4?B>z!dIuDhZZ5Ay!Bfp8e5g^`Sf>Ii$N8I0|ARcO@uME(*S$ag|9=UZ*#Uc? zv6cs1n}C~?wQBHidIVZ|^cSN>j`N4sPJ5V)^$qDM}>#8K&0WPK!=A!Tzz17M*;@} zgLOv=2LnTqaCZl&lXToc2Gp491WQ2_bOnfY2>x#Xsf7uM!vqc{hzK+|NC-4kNC?!e zhiy#FV3@%G?QekAyS0G~E)nT$0~x`3U^=Kv53&<_1_h{57S_7~q^O&(^<)Wm;QtAr z9%-{0LnO>Q%?m&~sTdBiFo4$G{OE21jgMHms0h?+)v|yNE9~9`+LY3LqWk8-mrS3R zcAo}y*OzF5)iE}KY{U0^g_KeWUp|TRk`9 zOpr@nf|q}R>VQ9C;mrqrb${rs{jfA`X?N|P=HtJ1ym;~A#p<-x-Hjl%y)hEsI%9vl zW_S7z<~LZqDE$JFaLtk-SSYh%#*zecQkCaA5(eAxO&F_-o4A{On>-TykRx?_KU zhPT05SzjN5*w9-FvaR_rS9~YfJ#o+_548deU_VAf+J%rrTPncp%F})A#X(S^exvnv zEhrSsoA-fiV+b!%>D>n!YiP6w<+ft6?rET2D03)J_u=kyFF+Hj|Jh%&{ci)Q=?0&1 z16sq{o1-$L@eO#`ygRleEZq1&mPBN4?TgQ=yM1eVO}M+*I$YC@LF*t&6OOS}^Y?+) zY5O#;fIIsbuqi<2vRn!$s8 z<$0~%{GYXsIg2&E+qVKVw8_6sL_+%%|F+JJ^FSv|`o2i}&zSb#m9N*u;{R)DJc=Bw zU2FJzD*ylgpT*egx+9?1)gz$S^+iCI$p6xU7v9pKQ!4oPx!8IHfR2nQc(Luz|NrjI z|3zwE8UMGet>Nzj-AmT%BG1?*BX9i8LZVd9&A~#VG9vF0}>AFoG0|fW{pmrgr<5@NeVc z*FMO18`3+QbF4O|6efJUyuUfh)gjUx26@i~K4fJV;(dfPyQS>Qo{eUhNA zBX~U{3;(vp7*+;`<^w{#6AM7a6;rWLZ_h!{sN6Be6o=-69M()lUtxVv@J`s?Hqe+K z%$Z>?{6YKhzymx7A29FS!^ps34elWa^tL5ffgJ!cEgQ!Ze6n{6 z2Pgy^tQbm}k1=sOHvR;KUD1oz0;n=Pj@=VLe(n{y3Q}Nws_1@i2gpggK*88x3DVBU z;pkQRCE&${fB*kOJGIckjbm+~)+EERwph@@yJKx}EDQ`x$J*jq7#Nt3yZ!;)t#{0o zn+3X}1hjUlPQM$}rv1~q2iy?ta^>#2(e)cVD$#xT-~)lQ?!)lW#O_0ku0Q^{a+9m? zV(Op9+8>~XZ%qqyA&2n+qm!)%x-XP)e>=oj!u0Rp#b2dgyF*l1I(nFDIT#omz-Nfp z+&aVpUS1DA&0V0^|G&|t){`~L-32edw4 zbOu;BTA!~u6&)W3UGxDOH3&QI`UkY2(fCqt2Phka^KZB0-?l{n6tDd2zcZHpadLEo zto0~*(!2u{iwwtHxf#lQj4uWAZ`%awc zKVU!giX7+PJ|zsa3r73&lTLx;QobK)wS<943HjJ^!{}{M)D0eX(a?06W6?cGn#9Z|V#TAfJQ0-2>*4WI54(Z`c7U z4;V_SxADX+YYkBya zZv6qRa{{ku0^M1G$VP4~@ND#F2xOyTW(I~X9`^3gKizIR-7HL?p*2W0>hR?zEhmB2 z@4<7@Pn4X*0ggzFoWuc2QnboRpzDM|Q>!fe+ou?Uat_1|h-`KF5y*PdauU&rnSWa? z_rPT($jn~DPiFom(1ttyHqa&){%seHZ#(yT{k{CS+xN%8m(1SEH^E_|eX98&^X11I znK|P`w7_$M4B)~ITs~2;=a?(6;7yUDtAQa277P z-%$&fBfpUg7tnT)U{L3>cO$5C(EV@q>eZ`3$CU=^7~i)3-5L9*Osbm+)II(oP{iB( zfW5cH5u`BfKZAeivn-BC{_Skmu7ApyLF2|Z+}u1%-(|5zb{{sr^!;OeT(qU@pEB;| zTAq|5R?vb9$U#Kl6C18;e12j}xd7m-e6Wzw4iupoP{AHf-$OPCDH@?8R=-`2^6~UqMjY{Iw!%4555%S-*&S3pi;M!0oYuY6Ck6t7#LprkzvZghb+B4f^6ELmBNfL zBYT_#Y>)-Ieg8nt#`)8HoW%{~^CsT^|NqBFcf0-pHyuGu@$N2AQ?~h_!oi0uVd32$ z558nFKG3@h3x|_f@9Z&$3WXz2}6_`PjC4Y+8jSswx zW@2DC_<$uitouWF_c`#GkMV)ty?cKC|NnV4Wb9{E_c@5$_SSp`i$dJi?JCiFfWHlN z4Nnp|P^SdcxNJr6F|i%{r#5%OIx!t&phr?!x9&W&p@b`@bt>$K+ICd0_TZH_Rgi_84m0W>#q z53~^UfPM3W1D&oste|PD-adv8|Nny~r~Y*Me&BC*1}%==07|L*LBwk|(CB?A2Po0A z@o(?(1z8pz*nQ&QOE@<$Ea1hwKmY&lu3!Z%+2C(`2O3Ck18MKRaPSoy|Mn@NU~NIY zeGH&QkQb2zgStaG0s>#e{rUgj`Y?anW{6f$@L*{D^8Y_*1_5p!RI4&rYgrBG?6KZ? z4F5o9Eite$Fj(Ix&ggAp`1SvPr>jVJC`b30-4f94DuToZoi`=&;>Pd) z|E*nrl(BWX{^*ST((EeY(0tgTw+&)k(XPhYA4}L67>WeCUB7gn(DvnlECMZ-Vyyks z?fQrLyS3{F{-#r)6m}p!I_~5l35G6T;qFk5e+N6dKrsnA1dg%WSElu32``fEpmlZ* zug`*8y)vK@g0VZ01AJU1|8^GkUY4eAgHDU?2d21ovu&HCAu924nAjUR$*u8 zcH{w3#s^*+gC;bym?FBbYhPo&(0!xRl>;;z==!GHk*6~-qWk*6M@-CzK=X@^0?dax zWB-6AVqO3Aidb|r@^2Fn=#1rIzSkN00yGxd?fOFdLaA~0VeMng$F*bsbjH2_O~t=( z`0vWoSjz+2j9jbMEy#SUJCuiin}~3?B>y%U3GK@zw_7jOMs|ntSckr;v#}24s8jDg zu6?XGf(bOW=+YPfnp_LzX+FSW8OqTqQS$*bx7rI@;NR`~!TL~V=o`??Ju_&Rrt6nZ zgKkHjUXcymMxY&MpC{vIdPqg@TP0=w;c^ZP4lZ!@BfInR0jRpO>FN!`O~I z-Jw4YK4a=;Ve4e-b`z)q&g{xZjW9Q z3+C%xEOJ&%rR>g5*0CHlpR8kf>Lfr%9)bf397?e~$3X=-L(O{>-9A`!cf0af->4Jn z^=S-nXgFYa@4YbCO*4eIpF76H@^`9 z&8~vZl;__rA{f?Pz|m_mty|1GRG^cuUaUI+RGBra2r_g#@HDG1GQ9i%X~9$oWHH5c zmV)+Jb(VhUF5v0DdGIk4^JnJY-LV{oy^czSInc8kAOv5x&x2Uext?fb#{W+!;VMh$bP zFGr_Xw}(Kl$waUR>*TwAd0zT}hObX`2k;zx$kZ(&*eM1&oS%iUll?VYvl>IQIs-Uc z^MJ<*LC0`_HgiG(D!kWbnk9d!Y;bpsiiD+nxuo%>PVw#nP>6Mk7meQhAIO?tz1`| zo+<-_jX*6c|GopSnX?2UdRyFBR6*@ChSz%Gz577Y|JaQWq;8&5%YcXy+qG18-6=5(ylKwmVET8u<#zc==#VgYC1STP2mk(yVaDImy0-+Z0iABs zJwZp6fr0sCn)Rv9(jWDu!QuS-|6P3ESqoYQQu`;(`c$n-_l5V z>So4A^Y8cNNb3&$k=8lI1LP`j8yW0i(A5uV-5Wq|OuP8+HG9|#lmGw!`=vGiW32t$ z?aR{%-s1-fmJW!+E?Q3jC4)}iKeYng6F>o!*2&e}0AetKm4S=`I~L-FEXK6X2_UVW zX`LM)xfho~r;2vZ0EzMMKW*IsG7e#u6x6KlP>%nu9G#&*`1gNG>lX3n-|zb;jakGW zw2v*VQ=}YZF4##gn!)CQ4&?9I07`CYopUyTQdwH_4v>9}{Qb6|Ea=Pgzw}4<1&D`U zbbzKwqCs2Tz*VFQcoH(ayH>#XcDFB&_33U`kHmDUZ4q$zHo82InX z!N1>?!}?&&nY3<*tSu8mt#O+5;S#wtOR$-x+-b+%nHU*fg4VgD9cO1`c$x73|9}4d zZ6F)FeI?R5WgK6pgU;YR_P*T6ak3owQC7KmL6Ty)LeI z(*83zTKn?U+yN(Z35Nfw7bb|w{#QK%CQpFLBVh6XnA`&2D zdjEMrbn_3!ZeEiKVzS+woxEqZh{=}vgYVOYTwU3EAad~)kRWJ|xw2V-VIhdO_`()3 z*%zRrtTO)eh{?VvV`N}B&Z5GyK}`sUz}kCt)qA7 zbbVs{zq9sFcPWqc_fj59TaaJ)Th@Sf0(~f9ZT`npYPj&m7BN}t<0U-*LAU;va{Ry0 z>H5U7_6dJWEBGWLfiTd?b5H+)nyOE%kCzm6#|i|4#auy$y|_MU{>NC#XMMbsD;RVx z=!@O|{{OfB4l0b1^E7jQs&NDkijLwFe|yh(qIdlegFLLc75_%s@wHVH%B*T zK;Vl93=9mBk%zleUw|Zy54zE1F%Ou)Mzd0(2-1$P5FJ83_yw498ucEP$8+qKGmh zg@J+L@PAbckS}UfI2cQXn{7c+!BENta_@gph6!Sz6YCH0Fq}D)v87i`Hf15`wpq~4 zhXSBoXuUZq0@@EiOG8|Lbf&%t=yv^c+!b^xz<AMuIY4 z;NkzOHsJ7cm;kz05+pH-M?-+T5D;3%z_4c#1H-jN3=B^eF)%PKW?)#d2x3;nQU->m zr3?%`OBonuEM;I=w3LA%Zz%)Ak);d_SC%p`JX^}Z@M|dp1IIE3hLoiY3^7X?7($jZ zFnBFxU~pQ>z_4Q}1B1meMU}%`az|c_1z|c^|z|c^`z|gRqfuW(8 zfuX^GfuW&Ffd$N!ocui2?N8wB@7G_OBooZEn#42 zS;D|jvV?&lX$b>^-x3A}hb0UQI!hQBq?Rx+a4lhA__mmV;mKkKhAWF17!E9EVCY-S zz)-W8fgxit14Gba1_q183=DFM85mZ9^C!fA{spOdE{P?HNr}a&8hMGisX7X2If?1T znhLsh3MonXNm*RsMTrH)3ckge&PAz-C8zx=#ZkRCT@Plyvh+xki~Qy?4-u+xi6iZb)k85lz0;tUM&xy6}! zFwcSvU|?WyPb~>9&CN|Ls`SiD%P-1JEXmBz(kND7CmWrv%{ukP5Ig*lv(I1_lP-{FKbJN{!t7lvJG}aEyapfa-LRPKZLN zdIko!)RN>3-1dN_LH58H?x`it`8lPzd7$9Ot`9{CNH4m8Yei~uX-TR^L1Iy2Zm})M zjW`?&Rms4>0AqpE1ZE0g2uLj|&Md|nVMwZ>szBSRAnF-{Q%eGh@(WUnN-8zV5_3vZ zvA6`;0H|7IeV{Z6Hv_CaGY=`ckaW8vECZ)iNP33pg$bdUS5TB+keLED73@4jGQe&w zG`wMELh=x_2yo6xO)LT>K}fuzxDuko9j*jq4l*Y=wZt>8BsD#?NFyyXH77+U6PndP zv4?OJ#2AEPP&h&LF@V^?B}J);xlkiOB?PFb0Q-)xIS{>|v6|G9U~q8(HK(|w2%ixU zwaEG);qC_V2RP7ihev7&LKP@pka!FX`K2Wa`DqHdsk!+@l?s`83Ztywr-4cz`+eR*B@jqJo~`P9ficA^wQka zyb^`n(&7?@q*R4O1xPW=z`)>d1uLBx7{GQQN=RrqixkihT?+Y0S*gh-3=En6R?rfe zfuYz6Q5%5GLCWILnvS73)5k42cBEgZPdC0e+6Yt_&cyvxj4lvwx^x2&jzobcql54{|}~2RORBBJ+J5 zgF}KH!(8KCLVRK7IS08qhCoF?W`fiN1bO;}xVnJt2yzYc3-xt!4T9PMl6MRZ@$e5~ z0LzEC`UdzohPcAb^Y`_2^$Q7x@x5ImLC%8nk@W_LI(fM|hd|8n4DkUO0&;`1zl$r# z?I1IJgFSuyT|C_)+=IIyg8Wa)_ z@|1s&V^AcroD0laP@F-{@O2GxcSYg{xd!++I)nUyaGPUru&28ps+&RsKt4eggV>EK z7Ub#{a#RuJZ7U|;}YE(QkB#V8D*D{euUhk=0sghBmr5XNOcvEm^2f!qeNTR>2VfrFis zjf<6=g@>7!iI0&V!x)&qKzcwJqz{BaDnVGDfq?;p?HL#tK)9ZPfdPa;Th+lBG-L(B zpri3Y7F85kG>85kHq^-m=O0|V%6p_L2_3`ZCk7#@OjgEWI_ zko!O`WB~(KGypnA10QCm5P%N$7)T5{u`;MfOg6a(GPVTbKkX5deTl@^>=l#M?S;sL z$}3Q?k%JFx5tE&;Kui`E^dK{~^nyrKJOw;#1`$hG#K2H7fq|g~No)paTwwwOgA9_G z0H|+1fq~%*l9<*~28J6G7#J*&#MUfjV2}YN28i(} z7Qb6jYN{gx!%Ifcm_kTCM9`7pA(#(oF)=U%1vm$VnCOADGVEe-%gjj)$;?d+$#=;w zc1bJ&a~O6biTmUyC+5JEG3Y`1=^l_qY!stAsK1bt3hEm}8*EOMP)P<~==cjrvm=AI zYmlF-kFgQN=DmyomHyxsVZ3{4UTRTha&T&iV@XL7!yXJ7cc_dJQ$QuePw{R=`MD4# z!%l{PO4o|ycwca*1kwy_0f`kA#UmQjdq5%;$?<;qC7!tjIjNwQZE6Zc^*V%&&WSlW zzNsY{`6&$Q2-_Tsp?2kfOerdgcLR^ZFfg0~@hg(!Ln;eWA!Zda1yq7~@t(!OrAeTc zIRk?w!X%IsLpgJNKxI6r`xjhNR0?VnUxJzw2I`MP3}P^045;+UEG_{X&cMzPQ0Z8d z9v_fcRGb=8S^(-nNHGRfdghgY1H%X0_c@C2iDzDB3Bzdw-#0NQCqJ3N7~vK~7&_*q z1ZP&IGBAijO>``Vn5O{cgPqNg%otGVo1apelN#@sk^+f628KM4+lz|g{Zh+aE0R+S zKz%0$h9nfVo_QtC`FX`9iFqXqUzh?a<3X;27-ho1P*7Qtk)LN|3P~CFnQ|dcWmvZp;E^9 zoZ{5fYzBsJOhu`=`DLjL3<6B?C8@aud7z#YKXY+OQC@OECBrkO+|*pK0^i^;=OA-K zumkKF<1_OzOG;9Uav63r#3!a?l@^!8r=?_;F);Wr#K$`q6htH!l(=Q)fckkK8RApH zzK)0V>xzsS7_u4S<5O~S^7B$FGD{eCFvde!EetN1#feEdsUaC4*ZX896(tr`f|6V@ zv~>KqU)2r7Oj-sy;{|~umN78IEMs6uSjNCGL6LzWdl^U-sAZ^EPzmayW|n|BAi+^Q z8UmvsFd71*Aut*OqaiRF0;3@?NJ8MqG%?u)5@NETag+(u#AI8hiOGJDfb`LQrisZq zOcRq0kc9AArisb^m?|c_0m?rxRZMovR595DQ2i}aA!7u{UPJEdS4+Dw#LMJN6_XW^g7{x&s+g<<$p6xi@VYZa zO!mSQG1&*w5cwHX#AGLc_%aargejQrKn@R&Df9^sgN>N(AU*_8RXR)&lNFGK_?Ksj znCzd)VzLZ!5dMkDVzLJ&i^(pKh4_EQWHH$ZAPkjHm@Fn6F;$O)r%V)+ZJ8)0 ztDp#x_n3(34ww97@O&S5eF*~tgWofU-K4r{RQ+fOjE2By2#kinXb6mkz-S1JhQMeD zjMxwmU|{HAWMJSj5I2xBP&KeM@G$T<2s6kss4|#ju*l$$!6gG`Lm@+F!yv;7!*;_> zhKCGa7=AZYGEz6vHOe)rGg@J^)@X~-ccVW>%*N8j>c&>aPR5?bdB*j|`;0Fd-!cAb z%w?izqH7Xsl44S0(qS^yWRA&VlgXwtOy`;|GF@)E#&o0UHq+gvM@;XUJ~e$~s%WNR zW@qMX=3$m)mTxx2Y>wGtvt4Ef&CZ!!HM?WxW$tetW}ao9Z(e5JX+FVxs`(uA1Lnuf z&ze6le`fyHoWX+Cg2%$$BG;nSqTOPH#T|>s7L1l0miCrzmWh@bmh&x_Sst`JVfo*Z z%}T|}+^XH`kkv`6D^|~}-dcUJ;pi&t-38?`$7ypJG4VevbWO`?dCe>_L|ilvp21Ut_Xb*qhKA9G35My0g@!W?=NT?GTxq!1@QC3#!yAT= z4Br@jGh{a6H4-;cG}1OQHF7fYF$yzEFv>D2F={mGHkxWQ-)N=LW}^c}r;M%`-7|V& z^vUSI5vQ@Rv8=JWv7xb@v4?Spag=e2ajtQRalbW#0|NtS4Goi-f|-xmW_yMJ29OgO z78{%}XfwQL_|RC+#LT3~q|4-@$rsc0whRdjpmQY{L`}R*W||e)PPNsu>$C$ceq~_L zU|?X-GqN-DFpDrtHS4rIY`N5GtJNW^0{a^K8TL!;*V%6cpW+HSoz~9E#mdVnz$(lt z#wy7w!z$0J#Hz}w!K%%w$7+(*46AuoORQE|ZLr#Awa4m^)d{O}R(GtPSiQCSYQ<#D zWi4SXYprf=Y;9rfZ0&CyZJlAAXI*MtXWe2w*?NQZ5o>dsGMgHkCYx@X2{u!0cH11c zIcM|VhTB%i*2&i2HpVv7cAM=UTZRP?zlaz}7^oO%7?>DX7}OXv7%*&L03ike0}%rm z0|f&W104ec0}}%q0|x^a10RC`gAjulgBpVlgB=EY44xPm7@8Q`7&;ib82T6n7={?e z7$z8|80HxE7|t*}VR**yi=l&&i;<5}fKiB1j8TG7icyYHfl-N3jZuS9i&2l!8lxRX zFO1$8i5Mpsrx@oL7Z{fq*BCb#w;1;ruQA?X{KEK+v4}~6Ns391Nr6d;NsUQ^NsCF3 t$pn)rCUZ77N@zD?%4S~@R7!85Z5Eu=C(GVC7fzc2c4FMb>006*j6ej=x literal 0 HcmV?d00001 diff --git a/thirdparty/python25/DLLs/_socket.pyd b/thirdparty/python25/DLLs/_socket.pyd new file mode 100644 index 0000000000000000000000000000000000000000..fa477db41901caa751e15cc918c47fe82e36424b GIT binary patch literal 53248 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 U(GVC7fzc2c4S~@Rpg{-#07xNc&j0`b literal 0 HcmV?d00001 diff --git a/thirdparty/python25/DLLs/_sqlite3.pyd b/thirdparty/python25/DLLs/_sqlite3.pyd new file mode 100644 index 0000000000000000000000000000000000000000..ce2e15b48425e3115728394e36022d63ee7def4a GIT binary patch literal 49152 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õmXg`N>0!gl6G*@j0fD$k>PKd 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

    QtHaBe?hBs$WTbC4zPATL3VJ2H5& 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
    2Y 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
    Fxn?rmw4uC+N&=AOCRB86o~b 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 z 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 CAV($u literal 0 HcmV?d00001 diff --git a/thirdparty/python25/DLLs/_testcapi.pyd b/thirdparty/python25/DLLs/_testcapi.pyd new file mode 100644 index 0000000000000000000000000000000000000000..b6a789d1c35d046a4fd9171af474af83ea730ca3 GIT binary patch literal 16384 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⪙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 S&7+2mhQMeDjE2CF4*>w}M4)~E literal 0 HcmV?d00001 diff --git a/thirdparty/python25/DLLs/bz2.pyd b/thirdparty/python25/DLLs/bz2.pyd new file mode 100644 index 0000000000000000000000000000000000000000..249ae31942ca6c613196bb98e27b845d31e74c7a GIT binary patch literal 77824 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 WqaiRF0;3@?8UmvsFd6~_69NF|w_()) literal 0 HcmV?d00001 diff --git a/thirdparty/python25/DLLs/py.ico b/thirdparty/python25/DLLs/py.ico new file mode 100644 index 0000000000000000000000000000000000000000..3357aef14888c501bcd7bfe02393760306a18d06 GIT binary patch literal 19790 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 G#|QwP5L9ab literal 0 HcmV?d00001 diff --git a/thirdparty/python25/DLLs/pyc.ico b/thirdparty/python25/DLLs/pyc.ico new file mode 100644 index 0000000000000000000000000000000000000000..f7bd2b1cc238c09301af80da5b8085ce13150b97 GIT binary patch literal 19790 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 Rf;b3}JP3pIfJ++&1^{**M5h1% literal 0 HcmV?d00001 diff --git a/thirdparty/python25/DLLs/pyexpat.pyd b/thirdparty/python25/DLLs/pyexpat.pyd new file mode 100644 index 0000000000000000000000000000000000000000..499507f4a5ee0da8c21dc124feb7e82414c1e949 GIT binary patch literal 135168 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~qts$b!#7hK`n!s(%AWKWGURR6i_# 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 literal 0 HcmV?d00001 diff --git a/thirdparty/python25/DLLs/select.pyd b/thirdparty/python25/DLLs/select.pyd new file mode 100644 index 0000000000000000000000000000000000000000..70aae3a266c8d62ac3d1df2ae2eb2285b07d5b52 GIT binary patch literal 7680 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

    wwFBH&s^w|@U&`~^xbquCsm=t$Z{6`c*5+er zaH{T{09wG&*)ati244bRm~b&O7#_f$c0n!F%$%Im^u!#6qSTVoqCDs%hz4jzBCRMt z7u5^^1hgOMvq+sH;=Tld-`FG!i)X2otDw0A)0ARt@qG_jCb`DJLc;rxq83 z+NP?-dSC=<92XSjXJjU2mZYXIpeaC;g~S6Szkxfa44tljnsCMG=HKro)m_We9j;<| zs6@8&e&^-hFey;lIHcm(`mKc9@@FkODEAyLecO7nMzZx=i75YmHp_#xe7zzkd))-O zWhQ{z5}@(prWK&h@d5spGoWHX0@S`d1Y-H}bUSLa9;jvScIIh4P{Y$5%mJE&F==|u zHesK;@q~o#+CSayEZx38dPO|DZ6I|N$Nvp$z)ki4##thu0liJ2bkN-d^6vi&pyt;P zrc%ysU!G%(QLp1BH2+{M1$8N#Etu-rnrnZ6$M(O3{WlKJ2msjt8n9+L%)|hip9%YK zoKXl81htLcA7WzYuH`uH&H`G=2W}Iz9w-5Ic_EdxI8v7vv|s_2f>Ki;!b=MC_ZnUjaXZ7ERj z`|@-Kvb0_*5$tXPS=hY?4Dw&MD+m8JfrF1Y__sMQavtiufUu8$8`r^y68zho7!N)W;5^8`&57yY z0}e2Qne$-h32<2lvNM#Y^TNRw936}ufsC**B!sv`2O~&Ypu-VNb96W|bp$fQ)HT0> zlw%ytM}G9Wdjy2Ph*pA3tqZh%E6wb7muRS9W+-(7RUYLYFWB}&8X};v2;JcS`3Fi*v7knT;kRSXjts2_N@T&^sDOZOXOHe+pP+#M z#V)}wCa6O^rO^7VR0!neVwV?p_JRr?7f@6}-3yKbXc(4qbj1pE*Ri}XggMu(o2~Ug ziQqQ}PKOfihTlvjY|XVijHUYB?hc@S$^=V;5}EE$9?JlhQW1*?j#Ac!-;5<(J3xKA z*F2!Q+<~X{K*MRmCfbh!TSE@v^k{o=qWX!vAxv$q~75dvGt(@^`L zu@qusP`8`IYnBP!AoEK2pjLjgv?zVsdARjuxuPPG_FZIESv#|5m{qWy~GH9H3Bz44XjR1q#||hIaOgZS^ZW14 zgT0Q7md8q&dkdL5KY&9H9Pi+Ay%y9M0cBg)FCDJGTW^>0?BHf#V0bwTI=A~HIQ&J? z|Ns9x4>ce80~+QF`fvV1Z~-H1u}NtOXs9myh2Q`G|1}Ty#?1cR4Vpm_=nDO9CBj@P z3Q9>X5{v;aEdPK9T&-P2N=!hhr}WQ@Mav<^fHIasx9gv-&@UY#%%GN8?xO!l%E2fPqE22O#DH(rC& zpfh9V;ny4!j=TN=<>_wMKb`IZ-Ju)}Rm=<}psrc3J4XOm-?k%642*|gTXlYenEa#p zM}3(HsLXWz0a3BzC=&zYjn~Y*ATzs5e{_~}9Crr|_Aqq2{$OP>}AKOn^s zXmtP2e^6oh<9{hn@Cye>`!XQ-#j1b*|AQk5(hkx9=YR(Rpz5@g<3-QE|Nr^7yZ$-} zsSlgqfY*zF$9G%5l_WwHhlRgL1{ve~!SHtT5dr?~uHOtVHPkaRlnOKZz7URmV|lq= zxYXG4U^(w=-3gYL>)A@xEDx3`ffht;cm2WmA>hUTAOHV@Di-E||K$!Z9RK|P|C+V8 zi~&^MKvpb3(-5>>2=T?Tzo6{)BOv%i0%+I})PaNf8RSk-=O&b++sT1{yMsu;3x^$` zCff^8Rya_~1upDfa)X+8pvh5}PTx1(p&b0%oH#mNfADYj;_LMN!oS@~q|@~S*n|jB z6$Vj!j}_=)4DNOx1p1 zC<*JX{lZ-PrrY&Hr|Ta`9U1=O`**O@yJKH49u5Z2)7FBsv*xvK*EftGKzfh-2?`E) zQ8fv)SmZ}o_zRXFAT0{b$C>{7{wduFUTWt1qdW9XuL~Dzz>BBf|Nrj>&G5cC=EA|q zaLk2+2}H0nbccTE_Wjb!64-p?kLIzkECy!RHvuo4z~+KG?5-~YUVPuigcR72v;ZzU zT{*fPTsmF9G}rPl*RvmY%2Usi*^Y?%nbInJ7bl%VgudikO{{Me3i?OyV&&xgFa=Y_G^N}yiu3tJ`KLos3 z4l?8zC~m*iF9Mk!`=|LZYj^Dz#{1zfx}cI@x_$q2hkogG;bIPWQTh!OUL5?}1NlIq zUHikjo~M_^sq>R|D39fZI!M=;BjCkaa3TZsrPT}%ymsmQ)*bqVe>;mShwpJP@(7m68-=yM4@RKlvY7aoC=rb zS^;n%3xEUJmje=pKb*kf$iw)f)Aa>t)xaU9&d?{|vaGZ856H8=e|lvsgI_HA3QCgA zM+B@(d1_f&ztukg*E2i;!7q+~1tp#zVW1^hFLr@Bpt-tkUxC2x&?mhtRsk=TeEt8w z+f@J*eT<;!bL4OU6{bf7Ubce68&u1Q*mZ_}33_1(vgj~Kz{i}a)AvK*3-z!6|M&73 z^g1#(A5pNpQ4`d9yUwrkmgcE$kS`oLG(y#$e{y!i3u|9|kFffsskw}6au zk!K2car+CX=Ft2AUdi-=7oy-bGs3SdmH{ueeS!M5^&5YGA}ITZ{^)WMXSHwvZPg-|ndLTHu&78w3A#M+vBiOj@Ti&jyBuYF36) zzJ_WRhEleMYBq*arVWf8&g{|1bzdzHD7iQ|bh`ck^-!FAEPs@Uf>wdFGBPkUSTU4H zysU<-x9WD~Xs}=?;V?Y#60|yNLU$-fbCnN6sc7r}62ZIDk2hIWaLDb7BNlZv5K=#5zO2fJ%aGpw)k%;Qikj z`$5z7L$~XPv`!~JP{IuT)9WI|8t{VS^Z);y&=CI84Hjh%c=72IC=R<_Inp`{MEJLR zh;)bk0F}AT2Yz(A-q{rv8XEfjRk!P%gFoaoLG!wn7y0`aF)%QswSFt*YyDrs)m-nv z$luxz8OeYc%NX!tHpJM_Km6NVq}V|Pqzx0uo!gy6xxj>i2@3 zUm;{&`=yri7z3l>0Z_jO+EzlXhr#7(El0Pz3uq)S+@Uk{2miKm4*u;>tL@!7rBfFf(+y@^pYk9CRgma{I#`7I>XJRKi{Dci8CnmNs`76S7U_2V!+5CE$)z*Op|i+i z14Hva#!{vYDIHE6ptiOEsP4W28k~cf2Wl&VRsggfC}jr+&};SPBY%Ry8-u#x9XR1` z;RY)PaH;vfR3zvH>tARC1>6n>jbpVQDB%Vr+ya*uM`kiIz}qIEwgC@wEJwGqPwRma zf#c3Tp!OYjUg*I8|NoCM!^e1=-+;P;%#h5%e~bYXjQ0q`Q=3|03532|Gbk0Do36d|p<{e%!SK6fw<5zGU&d zxU?QL#R963{+IGX8XLMy;5CrP+&MryPdeFO{M!R+k@SE&x$(^)b0eE;I~YpgtHx#) zz&j5mQQe_E-BBE^w@Wm@W1FB5Fn*D}gpna2>_tu&sFeU(N84fuYSKizwB9bg1)fEa zT@P;jf?VbC!Up6j=-h;Sx2wQ$kdHvK4dE}ou47_=xD!;0^p-LFFBQoGFChzl@vdeH}-+cjpid?f?sT12eRi&_=`2`Kx=QHMt6RAX$D$hAI}0BiwSX^knrF5 z1yeUj+mDO}2$#K^5j3&~atd@QCAcI8O%#7wz{t?y%nMF{69TeQ{u{qw1#1R1TzXv> z1iV=H?*IR^PG^yZBmbI@2&CCE)Rl9C5+`Vl=!FvdG|)^E%Q0s@hhxtC3dfuU6u{xk z1rBGHW6naL6@*?BI^$WoLj^jm{yT$~ri8tCv6hM9bsebPU%I5rb!mq)Uzh8$4rl%@ z*X13~0>_*M!Ig*Wk$@L&??4qRXb}sjCJ^G^?kuADA+6IH)R6#j0{$Dnu<8Q&SD-tz zr=g04p+pMo1QD6vT+!>s=LHWnR@IdcU&{`dEXBL)+pyM{( z6g|^C2U}6 zP)F~-*^3=LU>`Nt*)Ws{ce`1%9ssS?{u0pbW&;{U1P#jkFSB^Da1A(3guR%t2GYEQ zEC~YFq2N3SD%wCR2m>^lkNgPwZ}8%J2P1ee8s=Y6e(!bwB_2?Z#NfsJ798@R-VH>_ z9H&h{<-fs;q=lf;0xS+1w*YT>>n;`Oj$i?=Hs{&_TF3j^p|^~o^;<0$|Mp@L z{_W0Un#X#Z82?#!f+Z==- zd}x0Rw0@t1p@hruz{{zSdLNu&{sd$(g1Z)akR2AF7D6d_4EsxWDaU`a7i=BiSZqDO z-v?SC1zN`z;nI0y*9X%H2|GbMw>yt@UI!O${H>q`*$ve~jQs5qphiZuFe86EAH=X; zXMunhYOg_~5xq{J)zhsP_**}LI|CePodF_g{M(#GK%VUmynltrR^6o>9d1J1wH*B0-Nkx6zVL4g=i^_0 zYIkEpLqq3@@2?q89sI@Kc>>%@=q-BLSuO!m*n9w_ke`43h0f47ofp2p?yh~)%Oig9 zCwu1)kkW(A2VZu(a&&rt*3yFO-~)F%ofIIfFCg2tg$p2bGl#x8_=~;U^$kexq2@y` zJHu5hKi2cLeyiaE4Jy+9T8aVHOG-2_^DweiRQ z|IniLm@^NgS_Gv-=s063c$K@^i)XE{^wGZ>6rFAypoR;0uqXJ%$tjGGjm4m{ueFzf zfdQOu7J?E_Cv&$G3uuZIRJd_~h60^Iy&(SWZXyBT)MD}S|NmpoLX5|pg&Dit#Ja*n zG!AtHi*&j1bvTQ5x$$>6i*>mPbU2ImR!eld{`j*~7(CMs3L#$5cBmJtzy1Gz%neiw zD>T#zF_iFuq!__T=gW)#|3R4$GI|CLZ%DZbZZ}7;7=G(=;ILsT;jm#WCo>p8tzAUOab$ z231L6b2SG;DX8@u{37xXsDTS=1bi!XY5iYf2OH7}^&9Q@)xq(|EPkCnfr`2YX^t=~!wz~fgO45iHf zolRQ*mvDExavXEuV0z67>aTJfbK(G%1YJ%XR?a$Q%pJ};py5SGVGN0Pa38dm!|+?T zyF;hz7yfPHouMDP-95mKcJLyM+Rvb&pm34S&>zr|GtlDNYqg=^KIWf*@E5N^MZjUu z&|~Y_W%FOAE2xXT7Ll+4t`w$Y6Gx$y50b# zFNW|J<)1*I;4aeXdIhw6M!@n|Z56n#{Sg-a;uXj_pw?AG?S1A_cW@#6ARsvWh3jju zt!dyHG*A`F4;uEm5%7Wo;v7p?o>Ee5hqpS4s5G?s=ORO{dxO1L16Z6%01LEc3P)FV&-|L=0W(ZLSNG>{$( zBu#+(E1SxeX& zYJW3=8u6h0-+%xAf2{yYyZ_5vUWh^*)_R~sDm;q?(!C6P0UZJY83Wpe57J#y2@XKe z?i|oaIY+>YG*B-R6uzyuOXDCNHc}sd2m1sN0w4IH=@iFg)-w6|8qrC26uQW zKK}oI92ViA#tLXTQLpQVfL_pcM^FeJ5`Zon1106yfB*km)_y481CFORFD#L@fB9ef z;eY8L{%x+m1OAtSMpA-aw16s%!_7xPy^#NFP=RFnE(>@<>+>V2&)9VI1d(90L}GTwB80c-oZnI z_Moch25bfaQVu}cD&27`4Rst$rIH}O7{7>`2u{qc2THAvIqNWj>L+k_^VwsNeFC6% zO^Hyqvk9of5o`ilN5FE-S%(4CpaFLmt-eEQX>d~+Vh^~yspaSf^%ehs0yg-?i-(Zv zL7??pi882>QzF~#%+k%!4VuAy4=$4fUfjL`>SYMLz7Ogbe+hq)40S?12UDpv#I+eP z*OoAW4psqA@?|jwzYuv3c5UkcaD@#j7N$W&Kz?ed=U~9<2X_tzsDFcB6rqghg6kg8 zI0px)Q&GXe1RBKSVJHy>FBAf|E|kD6i`UW*u ztD1+QL=>!rAL1q5$)Kg_;5ibIW6<>&UIMuQq)QB}3zS&@8^4%8nUSIM5J*Gk1+W%y z`v^P-%LD2Pg^G07N_1Ydyj924dGn9qfzQiISR@bdFt#2jW$C=3c>&xR1?z#%f4g#Y zSFm)u%0NdFY6Tcdj2h~B8A^D-{(K2qJq(JMKcGE0pmQ=F8i0DFpz(CbocGInpgdU5 z!2nKK;8N(;7kI4mx9$f?ANi6M@uGenXr>xcE^>ia7QC(p&6k7bt3^O544gF0U+7oE zk|xJKP%q|nlhK0ZT)*BNHeM{K#Smei3{hWP$*s70=o2%+l$^ z@|t}Dh~dW49SmB8!q)A~(dh(ko)=5Jc=ZOP;Y-+yw~)FFoUwH0!n@kgF=K)7u=XkvrI#Le0?jcnK)Wd2PN3!Ruu(OkI!4fmL!d)?VD%rQAC9cZvklal zM#zV9q%~JrF@Tm${ONU42>4$l^S?;qMb%@_h#ELwfZO1u9No1%4Rwx8;H7t?qi5g3lUgWdUB6x4nQd(r>@|Nm|`jqWg=PWH}l z7Encv61F((_;DA_4jHf=91uHRgIeohFO0!v8+5WGOa;3eTrPpyL7-XUZYI!ph3l8@ zDA4?Q(2IZIiBAsx?T#kQj-X9o%|`?bFEvy%Gn6uS2Wm9eN-&f#F<$HCG4GD$U=B90 zyjaEsE(~7&1=VGsl@GyYme*_5sBP@;or6nQw0+n<)Ys7iEMmAq#%N1v3FsCxP;6DMxo4D6+#|2>u1N{{2jt z{S*ujK;zg=qZw4_@iHFd-yUYBdFVB7Zy5uKX?duOsq+x1h85^M0qwYh(-SB!HB>k< zmVm;7e*$O;JH!7{o`4r!|KWKBiyB6-8qk_jXuehfPeTd+FO~qUbN~&06|uaS^aAX? z)&r#u-JyT@w>!(Ebvg-jJ4+mM0LAo|fEQa{fTjojbUI5Mca{M)UDJ*`TQM-CfzE&^ z0j+gr@B9W1;O^KP@UeA}d%6RBS}&ETG*@{rmV?3rG+Evq5Hi7C_HJhha6p3R1sy>}KWaY$oE~3mHXr!{UfwJd@M7zo|NjGC{J#$J z1ZYY&AoztGxRD217tIY$@+=G`=L`>kt7}+!3rUx+4Z(f7FZ|n_Il6;EF~Je=V#{?< z8y-CT<0b^r-9VPg;1%NhUH&i+@lnQtIN*redZ9FzS z@bV^P4hA&fS|M@V^#Vxvxa$p2HsIgxF5=PYdIh|2MF}(vTPg$22QQa^`&yt*T98a< z=#7^w5WepfOWzy({og1ah7z{! z&?}t*pm+hDc~mG9{$k55aC~iZ=j=5RXg(s)P|wa#qRzjK4K(}yqrMDu-U%p!hrRGx z2x?gfFn$2f{r9>tg4(h_dSgEXhrQrhz{Jq)%+h>Bp!1fc>yvt}Qt@ur2iC41%J`w) ze5nZ;8}4>uu?8!U>kfTj8Tz42?6~U%P}CiFy#oq|m!Kn0K=J8%0n9xJZh-v(<)$}~ zp6#Pwp!ONK52Dc>sMG2C0W=fr`etUg?-x+V@?yPqckG8!7R$rspiv*t++%m>gP<_b zc|ZRP1-c!1{$J>H1+6xIod{|hf_g$Po=%2rIR>Bh25L2i{V)9hYBX{LytoV9Ci4Y! z+C{hTgFuiRXau4_pz~0-6U;bJuPN+>&J=Jcf%;!yr`KL!DAjJLXJaVg0*xy1w-|#` zVXXuMf6Hso+#)D-fIWKm@Bjax{8W2^p_UJnLIPx*Izw-~=IQ(f_Nxpib##Ybu?)Sz z-v_EEK*p6ig3^tp>x~-FKn=>kiuM&yo)&m54fZ3rn|&iN{Kb(QpbXCkmIP%} z@#+AEI+5ef0id9PWcQb#+fxMav4hs&DQ)9sC zDBwjlT+#w8IsM1~|J|Uy`2x+=G7KfR|9eA&zoCMSp+p5Vy<92>S}qp+LIo5WBAwth z&=7wc9suq8GdutZ9dNY^tGB^rZma|-Cpd6)x`JADpxovH9;EWS2r2`bkASjkALs;= zd;K1q>4@L5FWS3%9tHz4%~_*>_*FfcUK{%0y>Ip+G9u{%_x z+f|?w)GX-s{qVog1oI(CMTA zVutc`GC_mrWeK$Y0JYM^(hk00QUz^}Za(nC()9&@e*iNma2_-8w}>$^Fj&Tl@VD}U ztC%0%u{@o^pa5>JeZf$w-dy{Hp;Qp!$L=7PZlTTqh1atubjLpFc6NaX2)ynFwR5_i zT$&GX1iYAe9ujHL0WZ*amC!wC2!Iw3v`zq@$oB)IE!mffW{nva22FND45KKK8>wkxRD(t4nl>H7`K z8?~&RwRbuXHy>khx2}CrbMrM9xE=(Rd!WWnckG?+&>Oujvp51?_?-hg4;1YsoYt-) z{H@?AR9}Hk(9(eJSdRb3FP3G28n^=8p#qjn{OuLsNPOXC8G5Hyu-o@VckGRBmu{AB z-#eWy-JqQqLEWx5z$wcJY&K}KUvRgpz<PSA_YJBWxXH3aqYm_e!ZR1L_EFWq2{ zX(cqmKu1RLg0h0~i=&V}6gb%&`O@wCB=E&1h!Du_{H+JUOV7XjFa7ai)}8qn zGz0d+<4i^d2hh?8(8BPBY9R*j@oNFWFPtub{om~?V9i*{>;UpLnuB+MJCe{$+|mS^ zIs*;2g3SiGLI-5qB+!s8XubvP07Pv>g4%i@&!)7JdPp zYxLsd?f?H@N5SO2ym$za1Nq?^mgcwSs zvKX?M{+D|Mya43~@G@DDd1;Ic46Wb5+v-76SGG{QKrMk*FHkyjcYzGZ9d`f^pMW|W zECTAZG}GPgi>J?j|Tdfy(aN{H?DU zK&9~)&|(2-j(0u{@(N__9!hZrY6~8#2?wRaa+en~${+y(cH~m9DL=pmuX%vHU<}iGf@T}QLF)PkR!~1a1@g-ekTGDv zUY89V0WZ#iMPcT<{`hb3!VKIYg%mk|Ui5%`eFHW~0Zj+sIuUd(3r}~I19&v$K|pZO zixfy<1)kt56?@qQIuilXcL2?1b$;u-@wyt+ecbN)1GEfS@DwP-KmiI~ME~W#`HL#> z_GAIeW97%e#@-1C3x83110L|DpgDwY*E^t;d+8)Z`mv1HI6m&v94K)Exu3qIc+YJpe6E!E?$i46rTWy)vM6 zzzhvl>v-L*W7_d%1W%&t70u1A_{uQ2fUfp&Vd ze&cTi6+qpkcR+(a3}L;lcLI7{Zv=F^9te2B^&Jw_3f-Xx8mfdCN@QBUl}NPSE|mz& zV)$-A*nbM;!sByDWx)7w#uOrOl1*3YX^NEZw08K+8{h3qU6-cE?_^ z{9MP>`Pn-5OdWG~>={t~+3k8EApAvI5;KEl>=nlQjIkFqW6x;bYd#{-TziIrzm*R( zgc+*P8F~gZM(ujx3qF~yq!?7AyYhh6{rxw3A&9j8 z5F`XzoZBm7&|u9_V%qHtT6V17dH^!#THx}+ya1f+I;(wJ|3d`JU0xhZ2Mcz)illWq zgR)lG3x0??a0f+*0lcSE6tv#3+#`z>o*3*-f!183jO{|lfV!PQ>(W6dgt9Pz$D3+8 zzZrf54QE&$2c7K(YC{CShyxcN0-&*uQbq7Nd;u?J9Ro!Ps8IV8@B%a<06nm_)WQv{ z{aDRmuzF3fdXzzxcx0`|Ktnypk2y0kbixlahn5duH$wJlxq+7X@^5$J>t%`PuKmM! z9K12$-%*eo{(uf%2nc)e=luWwy}^vlM-*Q3ceyiluy?sLcepb;H6Lf<-|i-2d8p=P z+J8ULmLm{1fPb4C2Y8t;XvFQy(f|L`n%#t$j=3>ntlfp3dl3uD=3TBb9j^Bq>X;Zx zxqE{_CJR{}s&jAsUn0f7&Go+K;a(97X3%LNe}V&oUT`EZGj!Gp@Ne^D`sc>f%K|zz zlL3_1LJTB8=MHp+7=Q+igculJg3fH609qI5dWL^n7)NI)=nSl07Xj8zP{t5G`u~3? zXjGIB6(zA} z7=L%WUT8kR-06D6@@Jjcgf6Fl9ZX$L|2v!*n-BhLKJ?G>XZ>qX(ht266#QZq*xnx? zR|j;vo?!;9^K3f;T5!b3*zM-fd_)0UH-nDi0vBMe0s&z!5>NjB-;KHhs*ahVR204g zO0?9}@?bgtYyI9b2FuH6d!U$I1p;3DI{g3t|1ys(=79fY4litugGN+KnLx!isxNHUuHq8m>b)6B=?b;FWA{RUj4(_2CgIYIk5}mFfcLjvKa0Atau2Vq%baUa~ z#t`tobjFKbaN|^=*L6xjuj_<>EJl#vfq$SF1g%Y;(OCf+K>#&7)RRHQ6X^VGP)vgM zJZyIp@dyZeA$J@cPyt~tI*$MU-|N~F0Gg5R25rE36BLle&>OoTIQ+#La913B0_QA9 zizbT&G$GLw+#T8y6#k+B+_(mfY1Dz5U}YX4ce=I&gui$NEl^ s*hP4QPQUz(Ia{0IqC6VxVnmAdz$6AONr2dM(7j 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 ~<0O{jA)OoS<^1 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 UOdCvHEI6zKK%>E+*2sv%0CJKXp8x;= literal 0 HcmV?d00001 diff --git a/thirdparty/python25/DLLs/tcl84.dll b/thirdparty/python25/DLLs/tcl84.dll new file mode 100644 index 0000000000000000000000000000000000000000..9d0b2227e3072f2b4e9ac6c86ec49e6d3591fa47 GIT binary patch literal 576000 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≫D+dA7l3# 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%0DMRI>2D1(-$h=6*&a^2Yy zpgGF!W1TrFJTDr-A;I7J7*wm(vB-tK|xRX}|mXNlwNpx#ZVKg)4<0Z^Z&JB%Z&GhF1jJLp^? zhU4y_TA$&?X7F$dXiO?K>_r&7vMgXQ2Me8qoN2 zEJL?5Xe%{Gw<}BY50)^{TJO@x&=(>wYxrB+*gzNXZANUtFJ)t3Xs%^pEs@Kph+`M% z{`w*e;!xpcTo{>YW|_z{RwmrOlPnJs9C|^eu@>;w(fZF1=P0gUGarQ0CY8MsEkJz zW3cvxpa9UQ6lmc=z>5iBE5Jj^2U!^yy1hYT;o$M;5JL{;3!R|?pb+z6Gm<=aqRT5;CboA!oUDB)mH|z#386Vlmlcq=pZ+lz@UH^=C470Iq+~(2FPF^6`4+7 zkYUWnyDL~;wlXp>SQmqRxfXov5O}iL8$8+k^Ef-GrQGey0Zt&GRyYHAf?5M~QF%%b z=w6*pXNhiCfhjYYR(CN<6Sqch= zZhsc$L)srZ3pkEDfO|+Ue}EDjcw$uqwB`vkx%!n&An-*`IH)Pc(;dzN9Y=}n3^q9K z3?7~CbT)yf8&{6*P|(PdOdu#GE(C#AfvE(%h;sjfaV-ObhBlE*3deHWifQJy?Al}sVgsn z=*rhz0|fwR=PoFPq=4=0Em2YF{`+|;XpJ)>!ztZ^sC1S9E#!E>!h8%e5f9C8zC4{C zpx6Qpynq74S;VO`SfV?WhxvGC07wGl)t82#;?}xfbN1a2n_0NQF#Hr zvD|Yv14BTsze3>ua39e5^Nb7(LERr-1nmLEv`p)_?yn`X87^_`0x#sjBgHK6@(o&U zWXOOdnXpTCJ4;wQgY#D4UATw5L8tE+fY%p*E>S+t04jGu=h=W=4)#*DgnMXbwZsc+ zh_Rq(SOW@tSC)OCuC?{C5=&5h9QxwaPq48d1>Fz@%|AFwg+pI3B6JopGBCVmu|8Jn zVOh#jdKy%Wl&DB_`wDc27_cxO(>?_)dqD^J2JnQwIQAB9ra9P50nnZ<=nx7x7iGMN z1(&2e5S17~vIipl7Ciij8Da|{(&unU=Rl;_ik#u;m?#02he=nMGjRXBL60pIHRHd}a|4{=y<)^o2#B;0vhl!^F(X0_pnj zVgPO)US38uX@=8v1-C23g8APL%852}(t3p{$`Edn~lJHuHz!#O&`c{;-dI^#t; z!zGTpLng5NH9E_6I>Svs$5DW8(*%uAfOcnghN#GN`l#rd9k#p!Gk0iydf<#5ew_2YOu?m;%CI zgmy48bl(7-YjeBQy7k)*nRxJh&m!^c0$B_J8GqtH_e?fS1#K5%3CQ^23Oas1FalJd zNWcblK<+-=`mGys1Ltw53qjM2;V;}ygLTHo#daT#Zae~3+F;L6Y6fy^saE$Cl@AP{ zRX7M|knn2stz{7%IO~)BQJ_1h(gonO(?+h{)G#S7b9Pr{|JLq^D zj_wodShu3p4J?s#dvUFz8SZQl_#kf-(uykir{VhDYqs0faqfQ*-F43}8or;thtuo1=M*zqS6a(*X6kM6x(u?2!2L zA9OFD=mPNRD=co--#bBVti>RH&An*Qx<8oyz~HcMQ;@hZ=m@X)&~EUS#qe&vEJpBz zTi}adb3xt&dD^V`$Ny4x(B?$0Qmxk8-E}Ob!eO1ZAl)yPNP-hv_xIPLVV%`1FQ&lx z@B_V8$H&G+Lrw{V*$%p|5Ht_u5*%v$*7_)DzSAchv=F>AM@53a4|JkzcZ^CzH_PgP z7fD@=4BaBDvlzg~KLmCEc#!~hnE=RDj;-HdtAqGk9x^a6guU1VzEPN^`v+_^nX8m_ z{}ylp3(uGk587z_KNOUr1YT|c4F|fYh=2~CI#3EenG<1Z1>;t?=;!Ss~LIqayLzr}bNj zNArXFfEQ}&;F=V)VzT>37DMyH`tZOP6V*UUSppyzA5?&~^ZJ2I1utU{&&U7^d4U}b zng9-QwSK|hbNkKr(khP_zm4|Y!$L)eQnIj~qjh6~sU$3s9e z0tbe5=;UA zyIoXV9IRjPx3qy;wmm8~j0_B()-U;6%0PS<6%U8b92J*N7Zs0}9uN^7hPut{UtZI!jc1c7ci( z{#MX|{@oD!EPYf|_*)b~#!mrzq}yc`i}mqN7Zo4=7A|H6hFzfY@MRCES=|D5p{0w8 zN-5|xHBhGmJgm6;eA8tm-ABTc&*nHd;LIoyo@@8)C#39FT=fo7;$50r?4PEH9p?xF%3 zsb_d`v=!{}<1Sz~F}QWRsF<`KC;=_I5V3Rt-&Jh_Y8HaeF#s*-XL!vS@S-20tJ_7z z0!^_6Trv1;IgsK*BH%zo3Mib%7D3%2E4v{HA~+~4u-8W= zqx<@cPVg9{1Z2@Sf6D?;kJ3fO#`qg(`b!IR%XW#13^-N=fLsSHU-~reIu>;hRMh;!@ z8qXKUg~48L{a<3)VCPV3(on}}SgP0M#?*44R2>>1pp@Dw3~KC#sEB~B%ml>+D6xPe z`gLqK{^X*7lw1^$l1nf&xpZHD5eRPkfYJ$QZAVK6sLvjv63}|7#HM=-INp0%w5*TS zN_X#pB;6C*r+Rt%yJgxtB^{a%vREIh`3zcyqy5R(qZ6V5)KCL0423$*)zSJzr;mzC zZI$u2mqwt)_fx97q72w0+J4RPgbQ0`pcjk5 zrKiZtgV>a2F+kOB02^BlRXY`=)BL5;3NP}GZLk;-CMx! z3J7~~Mgm;A24u7(unUB}^k#-`PwA{t(RrQS-J;?FYIz+f(GLLCW&tl`nm`7D)`;9d z7}5?iBm!&*8#4n#7SjvE1)$OzG(;~4I%s%N9aJYMqn2=kGbpIgdCdxDf)<6e9w<%i zZczc1lL6i^`f!E31TT}u-9{yHhoW<~Bem%%$7I3HuAlp7o z92#m2VB1BR7#KR)UaMwtys$yFdu=Vq1P+J^V7nDwoCK}Hby4x?AfoddF|`**D&Oh3zx28)_f;VuuxmXjsY4L{XN*}FWLT27X* zyIcRNxe30n4OIFvSpO>J0&Py~^ik1xtphEMz)cKL#TRg#Whcn!7cAfe25$O%1+|7i zi+EjBTv`uwA1nopHVAZws3dgjb&B4a#@~26Uef(>@&-^kTs@P+-Zl z9_ZBLZ#@Y*zTZV9A>f7Q8gR2Iq1#8rr#nO?0<=1ar^%tyMI{Ebq!Co^mGE1;s7Qdu zwEjS%tlLE;qSHmi0klfW8dT*+fR%`Vl-z_WffOjc@r>3tKy^QV&jL_Os0Cd5cKfJ= zbeE{abb?kjB?P@Vx*F^T1Mopd@v+hTE#RWcMFn)9aXll$OEK`O{LmLQqR^D_A|BKy zxC?I92!Nc^dH`g34AgQL6^+&d2sgRHg&m;6VBhFLg||Sm;kOdeZqQ+z`~fdSATp5i zXuG#S@(hyv7jU9yfy+ZvHC+D{6!{vJkkbsEh!+y9ryW^ue&!vpFI zZ10Bk1rQwpH|x(eH^N`M<^`AS&FB8Vya)AW97J*&ASp=s3VG(Hf%_6|`pGAOy1qK*dm|#q@Xl8Jy1G>LK!T3NZXzUxb zrxA1%El+s&VHFNgua~9!ck^?mZ#O{a^><&BKA?Os;QKAVDSZ;O z-5Pv8ybfr&nMtpUiUlYu7=Xr#y+QXZy=Xon)B2Xb2eeb{+hI`h0iB#7QsUD3twgT% zWT_NLpGrnfBD+9_PaP_q7xSS;?l?e|HEGV z0iTx)Zev3dbaxF%KPZcXqJ}fzMHO5C)JW$Hc##PafJ{?@Zb$1KyGUJvXW7VzO7B}Sm}yzX)q&{8gcmTs{u z=AajEr5QkbUb2`2UObWp^$P!R{rL|*-~$w5m%?AX;rau*@>?YE#iIzQ9i{W)^+0SiDEIG!cmydB__whKL$`Q_!B5b#=yGRlInX8FTh3Ub$iM9b zY;9mESA(5isZ_&ny%NzbIZzX=-F)t0Fo(vZGEv+tihh4gr|$mz2!g&qnq*V*ULeDly9wXOT?@%mT=Xv zwB9ZOwfb4XJ*7@p2J4HUK3g3dn19&#fb~WGDF-~jCqIL41mp<=owFqp(Ax`+(!l>y z!71ejsKp6MDbiUyFaENF4z2*zo(DSFI^9@0-8eeSd0sPjm-BSs`{g`gu(8{dG2ms$^$f_8L) zmX~$+fUjlEV#s)r%r20zB^hMwoMd)^z~kUEQfGk90xkp_En$41@d!x!;n40iDj?0l z;OiVfUA6G;|J{4Q7q~zw@K#Vzh6g}{5|rso5J9<#4RkXNBq*6Xomo1aLCeBlGk3@F zG+Q%(1|;}f8$fMnXHc!*IvLb-FJ>|R-}((S99fbCSpy61V_3k8CyT({bI_D3XzbV_ z=ta?L1_tmTl}E;kx1g;K2SG|87t4Y#i7aK^F(a8Bbnp;(S>lU@5P4AV4-!fuS?s+b zDh3%7l0oHb(;`sJf=Wi6fY29HZvO_A3nqcxA6|4U2FtX5D-{ZT(QOCfu>5yX5qX&p zN-%P=qV^TLSHC3 zgB&UVIoTd&nv04+cL7VceOPBT$BP6}28Qq#QKAf>U8aj~{r(TC5j9>&iZL*B&jH^k z3=X(na54*qB{Lrt2hd$Tpc}pp$3eFK&l{9G?ZczRcu>oY(*V zS^qPZB!Mnid2t{NbjC*(!;9tq;C0-+v6vZ^~qB`5erZ8FFPpJ32(`9hE` zu?z+VCI+Xl&`z-z4<7vnFYlE=NGb^;U$ptT0!FTM+dThpN7%hm%W<{2fR zczUt%`tSdsRo9?unm^#hBxZ1F3~9l}A9n*+_uy+5V2Ke@lz}#ibQ`vQE42v=&qx59 zln!!83pfRWE{i+B-}2(m|NmhD;7|*F;o$)CDq6~(11XVim&(HL5G!Hr4g{T2%?LW% z32G_07u<75eFx!LY8Z;Sl zfWHNF&_lNaPq#tqH_+M@{uWRt6Ew1~(0aR6wA)8TqxED7Yj*%gr(ib&Xwgw5=u~%s z0I;9leFytV1mY*qk5;V&M5%QA&%(5w;Y;!JQ^ zp2d(MkisrdA_I+$43-qoT+J4+S{bO)P^joUu&4-B6ch-c{a~OoRX|;UEQWxIYE>@IM_P6wuoZ@?9Xzcc3;!OD||>6MTWZ!E4^`3*Coboc;VCG<0sz?F+j6 zRv;koMfJk}purQ1?jjaY4*1sn160<4#w1DtK0(J1nvo1A<@ZnS!z&55k|_ek`D%dImWO7p$7Uzy{={6$`*# zl5he|QfY$?1s%BxYL!kvoVSW_Wb;3!680>Hmu3I{gPJ=s0lk|+VHx%!KM0iez(MK6 z!T>%$q}zk1*^;4@9egEEiF~)8Ml;5}4FSO~Tp^`CxE_4L;R7-TR0qxlF+!%toCx%HCWANFrxWEX(kzjomBGS~s=pu^%^R7`sP zSd9N$A1t-#4%x~R^rCz|Xm3jJi}&E=Um*9kZu<+~{;k#R$`kM+eE$FcVc`M6FYF*Y zz+Nji|6nd<0Uei{(UHO~@UjN9xy47tAS^sE_=O}`5onCJ)sK;Z0VO>)|6?xU2PIyv zj1rJW@U9q;7rxAcrbTA32W-%D8^}>De?ik04m{lqpeDlyCQ$n^Ao#^kBlJY$%M4Y2X5bpyjE=f!OY*f0kkdg8-MEx&^Qh(G*^R_fI_oH z=?|!N67WL9j{$U}`bB+^zd`vOUMMh?s&qGlTjB@!Th4>pS)g2X!w{qp6zJVd-`S4Y!#D1-w`~7j!Rn7hCfYj+O(ZBJr`u!N!8JHLM8g_E9l$41B@; z3#_#hEZ=<&`J`?{4#~&>MRph{%>S|Qw}J}LZcxeeZw|;BaAEWr#C#Fl{r5#C_<%Ri zFlwv8Z&1ng??o6`2z;NA?C<~o1GcG=ozyj*AfJf^20)t;%FlS)sF5>_fW2J8qu7{-8 z5RexpgUklG+y&&^4`7#Df|y{JuLmy~16k2p_6y?jIbb2M%aecohjvLou4e|_C>sL0 zJDDXY_{CQPP!zEQyr@|W$_E?>%QF;G*acpQZUzanAcTDdSp~ievI?{avkH6{W))a3 z!Ybe{$|}Gk#wxHuj8%X`oK+x2oK@gI_?Yl+hUOpY{QaOoNd6X3Te$g$5Pv`DdV2nr zZJ^Nm!BL-AlGgl#rQV^$qWK3?y-JCU?Nql9|3PcG8Tnf^nHU&$%t&V!IJ{#5nCt+N z;8e>8l4<~PcT|AL<`=9bVjd;D9{jDJ85tOM6o3SGWPr&OFc||Pn_qA?|KQ+n2c^>g zDy?&*SOs>3fFySKfJqlHX#*xrz@!eCQ~{GRU{VA`Hop*V{vpiY-o^;7#}9xE;sHtQ zU;&eV(m<~M0w&*p$tPg)4wyUxCXay0Jz#PRm|O!Umw?GRU~&qW>;aQ4V6p~8Hvg#O z?+2YN&EEnlkDFg;H2(|R9Wbc?CMCcm513>ClRr|xt^$*Hz~lum zc>qLq|Gy!@D)2;tRp62YtH3u2R)I4TtO6e-SOum?u?pOiU=?^J!7AV_$tn;o$ts{L z$ts{O$tvI~$tqwh$tn;l2~npg$tn;i$tqAP$tsX9$tqwe$tsX6$toZ%$tsWuRU-&G!_$SFKut$#K3Is{93KU2|{0s^oT)0e%RiHzPRiH_VRlrJ$RlrS( zRlrAzRX`7_w?>Lp0Mt&0VbFeSYUKTdJWy17fJq$?iOBmhAnpzp5Q(1m-{gXHT>z6u zz~lxH*?izTa^7De$11R64oG501(?hLlQCd208H9|NeM8?0wzD?unQb+KJXSf@1Fn} zbOj`_V+WXA0Vbz_$pSDL115dIqy?B%0h1zN@=rF%y>Gze88CSOOfCVFJz%m1OlE*c z^t^xI26Em{kO${|33*n59RVQaI~2eq1DJf11+wY{nA`#;7l6qYFj)X51HhyXnB)PI zUot_uu7JrcU~&eS>;RJ)AQF-H4>ZE^{tl2EJV3HLRKTPFnEa9fGVKYNyZ|P*fXO9b zvH?tHfJq-PX#yriz~m2b;rakf?g5hvKqR!j0c}lU`L8Mi+FSnriVUm30~uC|b0a7%_&;F%1ofV(WKK(H*UfTk>~fU+#BfTJv{fW9oNK%^{0 zovbXYfUhj8K%p$FK(;KafT=92K)fugfVeEHKq^#?Ae6S2Wfiy}%PMe9mQ~=FEUUl{ zSyq94vaAAZa;yS(WLX6^$+8L@k!2P5BFidpN|sgNoh+*WgB+{CBUx5~7qYAZYh+mk zmO;&;RXGqM$10E@$0`sd$0}eT$0}eW$10E}$130_$10E`2k|o~d~o3+IaYxdIaYx> zIaUEPIaUEDIaUD=IaUEJsNM=WNI3w`{|Ejx{}3rR;@{TLpa4#jDGICtJC=ZQ?2b8L zatfI20h29YvIb1%fJh$&RslB!RsjbER)HV|R)GiwRskyoR)IJLRsjY!Mm9D!CN?%^ zHa0dEHZWj?6+V#j-&vXw_A@Ag?SF!>pCKQV2H$|}+3^5Oo&b|;z$DoIGYYH%#}rrv z4k)k+TvA{axS_x*uuFke;2sh7FI)k+uTN*;lKC700WbD^05?~Uvx2yw=In9SHS;+@ zTRa$!vx3xu#E>Rwx(o5%2;OAd>B!OP$kPe-N9^HlUXXu4<53)8;oY_%UB(AmPj+9g69msUSxS{iIW!*< zus&GxB{)MSpIzX^Oz=23XjuF3e=nBO@7+Z_-9a3l)(1PmX4NWyEIkie%zwPwveTlw zlBKhPrMr@&vx1}Blc&>zr}a|Fq2_g?*hhDk`P2-LV4Q&Me(qR6vWe9XgFWomq~%sDP&68D7UV*D^5HDfPOjfTlVA z_JaouO#%a62th_wJ6lvhtGv5kbeA%?Whr!)GQ7xm^ZS4I6qPlgUe6847{BmwXGr46 z=IL|>pT_Ad(djJH{i(Z01vIY*Ha_shy#D{717Q?EEB1HxYD)`0pc-~~>;pt&c= zY6C;ir7k`y3f3p;6v6j-*kr6JfNu?GJ|d9C0G?xi`3p2vR4wsZ2sD}384Q|OSLk#G z?J!bkJqa5(ss|l$EYaPf0_w;Hc1pb9cneK5ke%0{06g5i2I5Uf7=e~bf>&^Z2BUjJ zR1|``MLL4QUer~CoD1qax6T7u4Z76r2NQq4ITPrVM*fyCh@e2XL4zFwe~SZ%d#pEr z5pkx~i{=^?8KzQ6&?cyEM;2tcP8Sso@H!n0P?^zvu8XndKuM*IMrnNa!L9&Chn7pF zKN>3jYnH}>2Squ$r>KCVyagPsSqvEy3fKh#GfF@ql_9_an)QFD1adD+zzb7v@B(9< zz!%)0$XlZVIti)yh{DV3ObiU5Q|}ro8LjwRW`YiNb7XXEIZ)aTS{er$7umb;?StRHo%*iAYxfW7jFGFve28<^xR4$Cz49mOd~(@S0WnK=Y0N zpdB>NK+`(z9M&!>BK)m4K^%Xc=7--Ke}YyX^0yubiMWH7Zt;V|g}-GhXtmaX5)TNs z6?Ez|XvG_7UM?u$MO-g9d0KRbsDSPfx4y{VYRbsK5C|F+bI3B-6FNJHR@Ij?^I z2c;&^uygYf76)t4Rf{70Jw1Q_|9_bR8s-8myL?d!Q6>XQZ`~pt%|}?W7&1W9{y`Z& z1?&PZ!N*^Ps0eg3b@xDGeF`kr4GKV$$Dmjb1jl;NiysQmShx2C&&%ipybuMMkBD{9 zig=Lwx&^yiAjb8mfXap}hKwKipqZ}+`5;3JN|IA(w1`14sag#tL zfs2X=cgo5hgPlFu&C-2=|E5O0UQV1yaw0bZ2}+UyBhy2Se5o8@(6w=V-^ z7R#5Ro-_1?>wHj&&eH7+8pt>9E|%yP1MPNm1FcpPL7acj8Sp|HqB88or5C^dgANEj z0vb3y8~ozX3$R;2kqcRTvJoPHv~>$yvLH2H&VbfufOlw!bi1dt9sn)&r&G-6bj_t>0=QUmNmoyMTPzT8Sih zYesPRi*s<*p4ufUBCnbKjNgLB$6LRZ@*5ujom~+h*U1RFKK3x!0VO<^1rjCCyB$Cy z*J^sPyB~ftIcmLK$X1@XlsTC=sdds&_$UBpgZUsK>@=V z_@c5C9JakaDgmG(p6fq|%hUYhe~DD{ssGv+n17YZX7CiU3j}8|hP{Y(0C`XVu`9{q zaPxmg(7A@aF3l|6aVedCDW$^Q0vQYpEDS+mFJ2!71v}4cv4HRw|En1oz~TX6FD`?{ zMY?}9|7QeUXv7f!D!?<|fXYP3Nl{s#sz)X$?8S*yAR{EYkH>e$rNl)yAF+T}w`UsP zfbs!o{}ZUT04=!y(T%k{po=^}$M%9M!|?7}fzrHg_HNMa@B-cbEY^LX6&j_imhl`V zp5NR>7)y+-kCiB7F=PZ3f;N^cQw9Yk;sV6RBOqH2cTWRp1MLTk=Xfm``d@U3E$G%A zmgBDAeZf#$`CGup)3m4@0A;g%petOn7=l6T(E`Id+d$kG$3p-A2W_7cXuVx392)jt zbb~F2Kv?&U7k5*^f!}(&6ReNF628vkslGX#ItUD%rW)lblU5+)$ z402|(Ll$EvTX#EXGP>JCAS{a^F#N@|osgM%8AzE1KGdrS;*jp?44`Vyy`cFNXqhsY zSK>~{0%_6q0Mg(C)!^oHjDe{;&&Rbh&!_wJ z!Iu){yW!+e}N!+g3AbzeUCN}xla+s((J(+w=o(ZPXc`~-;S6l$fr!(_Vs6s#{I zd5;|&tlEbe-4r0}JYgkd^P3vb^@l%N|95}f3ySPg_V~Ei<|8$SoBy-$_n&59U}*i% z-*XsL%=~966$c$*&cMJB@PZk#9t^ISvBb8!M+G#{9r(gs5>!00H2-Jb@#PbnKnd%P zGoRQ5y7z#kv;GH!zfhF`s|a|}1MZdZyk>{WHvhA!;{q+)Vb}{Ptc)Q=Q>h@BKcUOT z_`jdZ0h@-BuigF}fuX@+pc5T3))d0K6W}Ff8Uf)iHZB2WausMz1oji?%tkN+p5(#l zH-H6l`Aq;zJ)}!E?e~9Z|E=-O5!m?}7eKR%t{h>Y1y(I84?wMF9~IDUKG60YiEfUd zz!!Z@|NnP~@^sGuO9y1+6tN401%(EKmb$+v1n+}V05zivz($EQ{{W?NfjWVM4_E_U zJiG^TFAHej`ly(I7V7E*26xt| z*mUNo1ayXgSJ=nA*v0Ype|M<>Xzh4+DCmSn@VVdq)*nF)iB2CC1<-Q9np#+S>BRHx z2qS;XGX@5RZ%3H;TmLaIFj$`})o!SgNbGfzC{^nIuzv{?yTDG+E_>qxpO^8s`~($u zpyMHHR0P0{n*Vh?-7P9lK<;Jfc+KAJ1j=>F&B-#~JDLA8bPF{fR&eyUJ_obBuB-Jw zf8Q;TDO*(TFo9M*u!@7o|DvE3g54i7T1-K;Zh{@8`P&_%V$ln_k}@FpMNB@pBV^Hh zM8W!C0DlW;JJ*Zpcfmb&&>;dcf!#kq^SM(B7#IS=!(PbPf!4%b0|&Lr%RiuGeMllG zL!*dY;KhaMps)t55C!L!=*AAil%S2EkJRtDJH|78T zJDFiU3XsRUTfja$?f|YLx?@>D^PA2Aov|!0R<`~9-|Y)p9pTyi0kmJU)0YL*rWFLI z7tk!a3{*F`HxZ+v63~6@g)?{-ou&IjcMsU)z!wK&!K=^|dLer-AZLiYxeHEI-N!(y zccC5%4tpVL3(9}sVzl`OV|T7ZjYIbj@cL?3fz|_A3?-5oKSbFDdR-*~GA@9dJcn&S zIz(Oz_4-OcmbZnySPvEx@bAuLC_M&kZHB#=2^Qtq2P(*4#{CBu^YHw(!@-ahwiXB^ z*!(5{)c#Be?R92s{vi?;-kYN$P$$&OGZ%DdV&IE2w;}F-(R#a1y}L%Gp!=)#-)<4} ztp7nT9P~lkdb$Ogk8n6OA7kqLR_=qLLCC92Rig1+>$bf#HQQXoXp4 ziwbBG?!_|D0yhtq<|87lC&Nm3UrYn>9YA;Sz2I-2>k6p21Me4p|3v)dbuM2dCr4 zBOv96L2Y1Adhd2-3Gc1|T`|KQ@M3N)$d@eLKR``kkSxeKpbgFnpthd^Xeq8l5U2_a z4|{Pj8r)ge0j~}%)eX#eQ3P7bc?ML*y$AsZ5lg^}*;b&i5{ZLco*50b9Ms(dEzJzb z*iytU@cN{+pGXNm=(fT>03R_S(R!eC zW3P*fLcojpW#9rppxY0$0?ztiiAuKzOV)poD>Z^%EGz?UYwLAUG00%}$R-f*VgmSL z7SKsf0-+F9Izcb0L1xsbsDPIFWGEQ23WR5Xf;b@Th2SP|so??@1trwLuou~ze}noN z5kcKAUc{F(Fm&dFnxCL$I!7!Te}Wo3kUM?5y*UD3_|<^cD}a_ou-GV+a`$>NfHncx zD3ttYuuCjW&0@&_6`f&7qZ*|FU2ZJR$5>hpln8+GpN&GP9Y{~hfzmIauz2yi8g69E zffDI%ThO)c{M!x${J#!aQN|Bd{`$D9zydv1f!Mfs@F4@>NIwHQ>jJb}2NZ_^fiGfX zLGcY5pkX{57SR3S#hnO{0BGSAQ}>6)IvG${fENCPhD;UW4xa(_3pv7GY{jCil(pMU z0dbQ8C^w&h+^+}H#A6-DQ6>)RO@nr)#X*KgLE}RV4AFlC`fG`d-C1%$u&;}0(16*?I~LN2#h0>WRsfQacd9|0Y^!U*fi zf*k;^&pEywWdbciERksb`M*@S+XJ+xhNqLO+ra=-KzA}8w)WsC6YUOB0hNFP$C*I) zcpPT{k%zkjG`dAjfqWp)Dc0?v(d}~rbRLoj^b$g_`2nDnm!Jij0UDiwEZq(|osJyP z237MLiC|EJszya8{Dr*$14DO=ib=OKxc4fNaitjEl>(1KhQFv0WnkzQmGI*bXg(rg z{I>PdP7u39rn{J@`w-|px(_9cuHB9t%?Cm2@;)~IWh@cPV#sg^1oi0Uku>wPUfKuN zD%Z`{>daHZ+wI2^82&;=6qFr72Zc8u1DWs$WCCapO2uS|pMjx!j|!+?mz4rOC?ks@{KZl~P=O}W{3B%tsF_yIx&zd9 z?4AN1hsudt1P#PGy8VXA=m3_T5u@dsHScFfasWF=VB^2=n{> zA3T&~13GqS38;aYaibVi=f45pMeY(G*LVcvu*0CV+zsksm~?xBhKD&iJp@2^4*79F zYL(!y@QfTr28N6cpe+~cz=aWq@$KFU7RY=|vpqwJPxp3EKfT+}1X7ConbfQHy0HYj z_@Ddxf47?kBwuj`yjXt?FKm(g1K>^JNSpr`$W`j(ZX+2OP-~5BIl-c+I z=u&h3fQ$!VpBI6byz(@k_z$^+0FuB!wo6)-iQo?57yb6a)?Ivx$Y7b3Fv)@JjkboK<>K*-H+QHX5!U- z2-Hgl1&$v};EP8&sDU%-D#-aPVJ|u%4AAM`p!o~X5hkE4fD{etmJAHtH@cZYE2j>W zie@one6V5_fL<>!s{qtXjo7SO34?#)M8n*YnyOv|!(k$?I3|LzaXCqT=tM2z1CcIK&c<|%Z# z>2$goyf7+YVCZfE@6ds6?*VNK1Z~MX0UF!{ZJ?b3-m4RI@nvAASU_(WOVEq6M!)}e z{{Zc233y>x2+CU;)_?h1K;5FS7YSE>|A)FAG-Q3Wgg-okrvx;v-v(~XL9-$BJe$`4 zCGOoJyIH!o>;{bq_4@yBJz1mF>(b5P*j@3b)1tegq_d);dk5(Jp3WVhAZkAF$FuY? zH0U~mSvs9-IyZy#b~l4aP@@8BHs}fzk+Yx``#~?VF8%)Bn_bcArUAPm!<7M&16;ay zgZEwdL-UD0C@Hvu?tjnv{lD8Ckx$w$gOft|i#iCS+m|8mMG=&JbSLN_Ee7k~eUHfKN^iJe)HR}6Mm*Th4;bSw^Zxd|w-K{5s; z`<(%8VeLK?)?2^`$?veCuwz-wpu8s#6!0Pv+;bH`Nw3{=RGvV~J&@zVtv`2fQ32JU zpktn-{|9`(-x;TH+zoPEf9Zz zpd`csx+?*8%n{U|FbY({VD)czi3&#+b3jnoi%f9h0@eAf%_siHfr?O`K+s4o19&7C z8W2ze!Q(L^VW3ehiSBrw#@`Hn90J|t0;MdLdL=%fU9th;FP0aBTY{kb0AxY~1A<<# zfmY6bXg(s*`mK}|l+F%!`DdFvo25lx}3;%x^6rtq;$K82AhJri=KNc5i zJGlG-Rjw>q%mINf^1%+|0o{Y*0F7nP<#Pg{9s^HUmT*Au3m?#$+z+7rUf)WJx?NO6 zK;B9sTi#Zjvokd%srzTINJY0BhxU1gP9GJX5+>sV-E|sS4B-L2 zZaM*hLEuPBPX$GqOzVO85>-&Fu|e)iZM_YPu;3S0z#A5L;y^>`k%yrd??!_6FR*}0 zzwRBNc6san60hzY6^X7;23Y^v+)Auezx!yHMAvC6Iq0lg1Y_4}t2kVE!4R2c7!V?GGw9Iz2eRjeV5H&>3)evUGQV26LO=@HlpYS-m_e zfz1a*0$#jV2K5p^<9bT)^9uraf?gc|4_>Iw67XWJEL275Gsvb`aQnwcg#(oCIy*pl z2Hc{W0Lm-f6F~NKc7SqFcL%7&;N;i|6$9}=Q3%#Q0jdwwgaYdXwW1)ULLf&s*wogO zrQ+QkAX8gUmhyIk&1^jht|YZ@Pq(v3 zz>A;Yij<{$HzYZ2k9n&t-0%Xa#)bcS(sy76>(gB%$Tx;J|>h!qzb z4a%^L+k(2ov@_m&I7)*S)_#Re*-w6{aIR1mhf~thy=j)k9PYDbow%MiwC_ZIQ#p5 z_=_xXARtCnU@-@ZJ@EV)XwO-9+Y|8hi8U$`o$eej%$ooI?*t3|2knLd9mmPmyAHHD z)cCgb(NdM(aEVUwZaz@|3LKtRhfBY8#`DB?>UGAk#C60nfP&4h!unvTZl^y_cUVnl zxIlLssO#V9F4D;#-x*iY8CTOe4=jSDr!$_XlO4qrP+JSsdj1b0nk^XWeY#I{JA(H1 zKxPz5ctIx-2k->^4+0GzfH)4I-V{>jKl2PY6?FS?bc=$nVebqS=yu~+3}SY(b^GyH zA1vjH>-14!d1-&<_y6uP(1?#{^FL;gsEZ2AOU*OC{|A6q!^DBh7tq3-8Wo=I?Vup* zYzLA58M?(F%{8%lE22guuABxt3iaCdZg-H=F>t87W(7N| z^*|}ti#ypQ-C}0ZHuYh1H^_k;pdxk1+JV~!1pQzzL*HE{a_tS zNOl4D=fP<*ixFm1*o*I=ixt|yMxEejJ|fZyW`o@x912n`(9PGK#{#a@jc;53?(|U+ zDdq2N14U$qL?>Hk9LwuyP?-s;?0jKUh*qade`+7H1$DdXgdGB2IGz9p-f=e;&>bhQ zIU)K%7m~4owmw127kGXIb^BklcG`8iu~@$@k#GLX99SyyBIYF6knVdg4*mWAAKX*` z-<;ij@5M%#0Mx5s3KXy$-OLRZ4E!y#Kxf{Cz32q3vVf#IX3)NK(99ql^kUHoaAx2RgrpB=NM>jTg<&W2F$RWiaH0bj%3zm62#EVZhLz}o z@|9#abHIymXh=fLc(LQp|Nqg4yHQPku?Q>**8gG}sC@-C1nM5ndVj zi+6`rSf45pz$l;GSga41NP#jXS2thai$h1i(Jux`O`UNp-S=L|{RG_tQ4!zC2FpgE z`3lfN-N2Qqk^KP&_u+2r!g#c8At5AGAJH!yVZD6>)CoAng2oG>^{FGcAAnY$!tS$auwV!; zwFrCB1B!8I1cGLUYCwEg1m^z)<&n%3P^3Zf$XrM_5Y!<6kH-bS=uQP~;I8NvYd*r^ zV12Pvw0j!J;SDxipaAi!VZLB}u|^Og$b2E_#cFWxoTb~XqI(}mA@h&$fEQ_rpb{0- zG2{9V&KJkn72H8{D4;uRJwY~r?}lzZ!oz$bz7x!bmU4l?;oU!s4|JdFWbAZg>2w5b z*yIT6bmR%|bQE|IXA15NgJ#Uqnt#TXN-=}RsyG6|kF$Yh>t5KQ$jA1|Sd@zN`lxUO z2ER~7NHO0CHGZ4c{4=&hX+m1_Pu)^R*WM5no}l0t|4hKuT z@Phfk@BhZPLE~PpJKZ?yM0jJzIe4Cl=@gY-2`4UcgBGdGEY!A_<~cG7wb$I z7?^*6`gqMpIMQrm8M<%8mawJS>N1q7cKfk(hjFBJvUqieL7GfX;hkYDFRDzyVF%U* z*251z)*9L$>f&$ssawk4ed8tQ+y$^nMGZe=OBG?p$#`}9v7~{9ksLvn93JfU<4Efi zaeNJ$kmm>pe<2O>Vwga;9}n0Da8O#`D3(m?l0n%iw*b6GttiSe#sOW@uhNy_tN%XRS zHpVgpyfEMQ`+qlRu{=n;`yJ>i+&Yf#v&ILye|=uv?V?iA#bNxvO4cbZZq8Oy92dt_22nX{Ckhw2+ zF)%Qs*)}lnH_u@Joz#0E;J;|YBQ^o>cqe~LJ7@_)h)P8k7x++Hub}^;HILXJC)-$n zHqi4l{8TAT0a@b^7yz40=0w;8E-rOILrn)j_JK}c1?4OLRsoQI-2Q{lnUvt~kpe9w zuTiOK{a?ameVo4+bn@a-5*3-(5};$VS`WZh_4Bu$2Q8+kQKR4Blsx(+K@VA@+sRbpfz!#wiwQ%3;js>L-%NP}bQf;vMIUw~e zDxf1DR1xYSW`mT0qPPU26m&N_cs{XTX$}UTyux-#Q7j{60rTqNWDa;c7k5 z{k4Rp`^9VK=A)qLEKq4{V12OEv{wXNJO;fuz3cb?ZqR9kpwm7&V^l=6PwxWdOlbb@ zwqfkFfK=zN#bIS?zzfseAYIKzI6ykAzt#$a+6&!hwa@k1Y%)IZc{QlQ0%fHCEX|;U zIzh>;0u-LDaiA7rjfzZniAoJfkMV8m&!t?}zq`MevUG#)#DJ`zus#erY1{au_2)X- zZk8@k=f5AcM$GzmDTno8{ua=ci;mXkY9528iW4{E>_ zFfXAuM5P9jhAMQyH9!_*#eFa2&YQqvEi4_N8Yg2*3A;e|6!4T}(2F_XBN$i$UOWb` zSrd5;S^!uQoKXTclsh=X2Bg|Yr6%yjM(}w8pvD^Lx@-f;`kJ0yFkgX(C8I$eyA;AI zFeQXlpf{9NU~UMjz^gD;_&Jx1OiWBnkdrQ%LFZjEgV;>qrV5y7e3QY%zz_Boi!>Joi!>hojEF?D<*Vm^}1VBT0jLw zj|xb0#*$L#a*$&}pkZ9tqU_klBOpt_D?&Oz%7Zz=gI-($E$^730ut!;QSk_DKK3^( z0CXp~NoR>l!HdV>)kqSc5dv<|p+ZnIx=U0XtiRVO!RrR;9pC`5{@(qfGe^auj-&gW z@qzBYpI3K#vlxF13w)6UvL{4ErTa%06ZrUu&KmF52&?mql2864ndgiN<7sQ3jh zh7WwPNCzya!oNL4MTYr=@$Deck++>ODlspfn}Q-7G$;qEr6mHwUzF-FFz|2pQBeS$ z?{)$v&EN8foq?gjo`JuGm4kr+G@r-(FDSgTMn&U=GsyT4prTMA;KekUj?zmn*RwM) zfQk|k)lzlPDZss;Q;&mQ2!qszsHi|{B+#7!X|~`RNv6~YY{P7J2GFi1kZYc6LyAQi z<{zM%%i2dp0_17_)_QgZhL?UI3qbXk7N|r3uYv&`d>#R=#@1*QCuRM}hu^*=gYR7^lyYk~q^eANOw+W=h0 zfQ6H+(RKVT`8vrtk zfBOMg4Fg)Y#J{b9BN<%7+(`n}FiiZdpFpP*#i+z|pVvMe_~LW?|No!`c`S~dpa~|O zPM2N=N6=X^po>^u9s{Wro$`oH;FybwaOQCr6%*)XEjGtpR6H(hVi0%;f~e@`(~O|70w*^eRtAP|hZ#$)z#9p|UlePCasYU%+lLp&AV=V|9w-s& zVlij_*Kz=q{z|XB1Ra$G*8Y}-fq{RYi;6HfP$l@=H-H4TH8?;5RU?@dR6S{c)^LHM z4^$R)9|s+;-eAvAVhOf0;KhFpBs+s(c7i52O2t4Yn=v2r1Ze@~+Y(mL5XJFthnY&% zw2udbzbIyBU;xDr2YUQ~w1eUZbn(thDNv&Xd^U3_2izSlDl)w#DhZ&ykuUyy0v|vn z1Jc!C!BFDRoui@wbzTD4c`+&qpdGR`Dhb^mUab8By5O@!2&A0(m@mk65SN|l1|`B8 z70?`KM$n6;Tfp1CO27@p63&1ZQ?`JMIgmcRH_N~%W}}sV4x{7hvp-2 z|FCp{lN(3}+&iG-+Xbx`xa`3T3i!%U#a;cwLgT_&;JM@1s=g&AmRCuj%= zDR5r0f*O(Fuqa`-Wnf}pDC67#qCoo&n@<d93$0zdI6%SCU7}*r z{R1){!oTle^MR|)KYaPyK|5jiw>4BiVmv09RiO1-Dfd2TN;Y}T+Wb$Tl&$eJsDbtE zutSMs^W*;4nXTVSIro9mZD)y!N#kQsm*sUx>$g%tbV2*(e;jq;P!&ea|G4VBpd8h2 zhXqP(n;*Y_E!}dv5_H^hsr7|Yoqf=ZV$%4y{{R2~9iU_2Rh-;GKI-CcISC4+5_Vty zR?GkY|9?BIz~3s)#K6$y^xvkUgvBPJln>N|_VNHJ2PK_vhne_WZ!>}$oyV9MO2R?s z6Mxdf8dM5 zETB3^;$=SQI<$ZnTN3~Of0+Qk;M@3KSad?YOGG{fm)4#ULTc;j2Wef zMPQI#4QMfIG1xqjm-37Z49!3O2bA-^aEJyCG_bq`-MII{7|H={I{+23tp{MS4$cUm zhzDh{#>b$|HjSqZm>C#aPxh9mlyo2NEKyM@E9mx7QRouvj#1I*{>i`ZRP({B%|ETm zBl)*=-T}vW?}=nqf#wJ2U+bV0Kd=%$|AwEb zU`2urKV3_B{JPJ3f+RqT!B;Sq+JF*m7DLc6HirMA(2L|F?z*T%+?7#zaXuUrAROJG ztYrbq3ebE7%2Oa){=2C7fT}=H=2z~{QL%Wr336znLKov}HqeA?7wB3GP@sVhI${7F z{cilt_$~MpdK<`McFPjbvHsw5pZ0(oM9s%}VC`)e6^m|`4Xp=Cs=N8Sr>Hc5P8nke z$YKZ#a(!{W6P^*$7&fEaKHE(9Ny8vgGY$iplFFI>R~+=+mifuIg0=v;lb=Ho2Z zANYH+K!XG|Di+-_Dh93pOE|+{{8$eun@Ut{Ks}CQkj(D_+WZSXeG+`@1b=H6L_DJP zKuJc{|CcQc3=A*!rvCrm4KnNoC=BY>Pv~aZ-g=-!GXQkG&w*e6{&%x%2bI!1o}C=s zBHNp-80zJ^4+Xq93f`B-@>=jkb?X2BVAYd;f!ds)=CXsE^@o~mFTuC}-Y($>EkzA} zvG^-k`nA*x&(#0_UxRM50l9=b^o3^x*wfuNx_iLE8yxt84SX#mM>KfN2(0D#|3);c zz{O}*0qtm3fy2?P0{+pg0^g!o1@fa=1x`h?3M`Fg73hj)6?hWOD!{-60gOz{%*h7Y7#?XZQchF{}cMVp#>Q#2!?0|lgwZeHvu^- zAJpLh&4=(n<_N=$|6AX$mA3v~BHDeg*P9VMKHJ6Y+;X7wr}jSq3hjQeQr(KpEY zX^v)V#?Y|tVxI6i-i#Ba>;f;$Alb|Kzx8*}f&&)o<0Wjt;Caa4&T5_)>7dBSQBmkF zQIP?Su)ePqwfi7Tdv)vavow3A)Gbk=J7~(p!Ibx#^gV%QpwB81%7!gqTg07Vl0*yjK!q+*i*(MGY zzBwu)-L5>X2YPL!;Zy6OU?=yw3k4i^g#_K(m7t(&y$uaF323;5Vh^~q<1P^b3=EyF z0xwE@L4^d!AF!DjNCE-JKTmh8K(qD#uM6O2wF4N=_qjA5gY?>hd_c4 zyxyOu+l|K-l(I|mTMv}Tb^Ecjo-Ab#`yapqvc`=EWuZit&~Z1gNiP&v{QeJFL=Sa4 zXk9j_j`4#`K$eJuZf@`ZjoNqnu^eOJV(4@eFg_4>7&=c6at0L>ovtjg(T71L*x@=E{_P=gprJ#Nz@Qg7(x7HF_}FS^ z>l-ysz-vs)mxCf0R7AzHbhCBVf!t^Ozx6jXdt`*MJ;D0Bra@Cjo9ZQv^5Zm>E~%;w?LdZ6^H_KDU5 zo%|&d-F_Sa+9#MnOR3#u85p|x!Ts4z{%&#WFpg55gw5Rd!W8sJcB|)CF zZkGU*1)p&9K=bY02=hwVA!Z1My;unv5-bB5+v_F}cewcgvH@`Yhe0mJ)XxK1f7%Uk zmX8Wg>&dthmTrMg!R7;?75i}g&8YfIdBR>yfOrv<=s2wXI7*Ge!(P1c053fSUyQE( z)1CQXc)$w_&>Y3<(neErGEDwG}{X=RikE3us?-3hH(75D0j28$6E10h`kX z)qfn|@)lIsUiro*@Zw}VsAypUwRqlvyq+xpYFC2pQ$NCC{iCiHybPg~z1tTQ#`(}q zUgE6>N`!m;83O}e>|6@Uz#O2{y)MA!nEEWv$ zamQUjt9k!JPa24gJ`6gm)x_TVLz!rAm{3sY3+1K1|98LW%m&Rab(V5~CXuXvfQsE( zhE89ev`&{=&}JG}me@{b4x~Z>HGIB+Dx;Ng@bEbYn%+hYAO5~3P@V@ZR)K|43Dl{e ztqu~9Fj9qtQR{(HuXxCX9N>V818>=dT<9fI^0d1cv=&YU5?Hd`Kj4dYpaGTd4sNZ2 z>O9aKA?Okew18446i|>+TSRCn_WB70hQ4TB0tzkA(J~yM8yh43|Nq~aEznuY@tVo_ zfbk_z$Q|meW#|lrhFqsBOI)WjM=aDhXyJ9{%$e}+AFcmul|hTWKqU-+%PR0Bg9U%f zLQpXMcTa1!sbDDm(fXgirJsR;0W$d}0!qwabqz!!L=SJ74L1S19~g( z-wu8;4|FGi8>nc|08L(W8yLR@#p!2|o55G&wsiqmVSUcb#M7w zz?nWqC8N7UMWNeUpgWMImqpL|P^XJZPMv1!w^HWN*OI*=3_-y!R)Lolf%c*a_O|4K z;v*pVMJae83)SeIkb8Nyx1KDK1fQJ+TJPJz)aA(N1Uk^_tDE)L zng^|yN|=u^F?9Q=$CmAAAFEu$BQG>;r1;AE*^+yfof2T|FCMAC+vj~ z=pr(3wc6_;(9IAS`eFhkWaDC^4}<3-!(RMz1RYlan&=CC;RJRF4@efg5EMME68_>g zNQoI}xE(wR-}!Cuog(H-GEN8gA=TrR>Zf!S_!Egmxc#kp?!4qxE)t32V2n zK&K(dRFHShAeRrKplhp3+|n$~OB~(Onr+HK<=nRtQ&8~`@ZypcxLDu_3=4nZCIl`N zKpO`@yL4oNUa>FU#Vhbp_cC$NtxI5A5CpjW0LprGycr#!_~M3+9@MCawEizK z1;v{NB&5K5b~##4c7v|e1x*=;y@0I0;)sts3|ik5_QDR_r9^IVfi806=yv3RT}{kV z!qI4Pe%InZCEUju_mr^6IeY>cDrZ-qR86jfbZY-8;H9pM;ID$LfSPnj53J-Wu zF$dKA1-C7YPl9TtI??Vhj&7E&)&nIhoh-ZEyV)GAPt?4I9Gb`(@M8H~Pzk}(X&2ua z#}N%$v<@mcSvo};|Fc1?0XYSXLGB3)*mnW6`?3KNny{u8SU#-V6eMSSp!HjwENGQY zH}8%490JxNjV0_3*2ikT#T`D*(g>PZfoOx8cLZb}==^=qGDu`Aq4IY?@&efH1IZ!V z_XMAP;V*8vGBPX#*#{08&9H@MK+$2c19r3HtU2JofZTfnRtV}K+>DEV`2eI7q#B%9 zO85g_EHkv8Ecs)7p_IGZL!y%xr1`Z}x0i(Vi4tB=f4BQ0 zm{a;4B<&^99RTW4a0GM;zL*4F9L!>T0699&WXZgc1UVSAMF{MaP7ct}2ur62N2do* zr-wkNhe&6D#A1*|AdL$_jMf7siXg}KdNNpYlyG!AfZYqqC>+NfI6woQogUC5G@IXW zgoVGj2AcW+O=?OQ|6id{!fIK^Q|jOR0Mt3G<0y5tK3)=LX;%UohUW-)G1Hfkp_{Lp zQQJiYbWs&gw^+9qXiGP!N27fTv)NWl7dEk|dK3J8PlG2sY! zQDO$J2IAwIkD#m|YK?-9$RsyZv|q|A%pe zz0d@Or#Yyd@U`^#i`$?H`wy0R9Hq{ddL<#?g8s!eA4Z05wr&P+e`8%69~BYnqqQ8JIVu93IVzw94FW+g`c1)}jEjX_gah^mBw51Az_5T9 z8P@;*XR&pE$Y3aE7l0pT0NP+^3tltiK6p!UHD zFuU|SNXk(lyxS`LMaGK%|3Pa4L1lcKqOHJy@E1RmK^Yj-84=0gC-Jy)JJnC1(}U%;7}$9woS&O(MDy|tD80V`Es^T}@XbX)Cz&l;R2Pi$6Zt)<4kO&TCFEb)xc$bseBg4aW`J~7 zLnNS+??vcz$X#NfO)+oah2fbqXCTI@fjj9SNu#hV8Hm`UUl>-{8-Rrps#pbH1RH^3 zPp11AvT0||G`|r5ZO4QdaURtC{sC%pvsnKv)q$DZ@$3Kp(2N6cxBqzYOdliyHutw7 z*xW3M7miaw`~1KcjJCD{uf|-HgJ7~2uXjVD%5{S!uu#*kcc4j_g3ocaL zSZcUf5A6N$ztfH7KWGX{r`tzGqce=B(~qM&oW-g8P-i%3{cAV7@g?h{CDPq;-5l1Z z>xD}>KxxU3rJl3k{-L`qpY&0jNj7KuQ7^%FF|^#fF}Ao*#_Pmm9g z{Un6&lRCstmiauT9+vr_l0+X?lH_IEO&fiz~>@p!)<{zm@92;(-A(5yk2uVz|%%921~ML+hmyv2HfdIBp4_Wq?2l zclQa%nU|m94!52xEw$8AI1E7%J2W(0V17&A`t%VDZi2HTTuRj1mh-9^Bdhs zxj(@6Bf{~+i&MH_A#mcjrw?{gmcR>@$>76dKu1nVfbU@L_7mv@*Rh~n*6jzXY+6s2 zvUa-hyk_on&w-@#5n zxbDUa9VFK|KwQ`D3_7{!K#2!v--1AxrADbXsPeJ&U@2AVF5n4xabhyKC~N)SeXNwV zvl!&Sa-P<2B|?^ZC0DzDbUT2KD?Jex8y|f*uCrPIM1$iJL^Qtv?Yo7zu>jQ0#>`%t z-_es|yADVM9D;N7z#-UO&SU+xloNcB9H@p3?v5Afb!O~z7Xj_4Jgt4ALb=w!~ZJY zyI~mA72<&GdkhN$)hFekMBC{O+NRTbpoBZ%g%`Nb#`2mkEaN~0tH6saNOP;(4OD{r zu{2vU)N^-V40>_M18h;)i^@r$(-A-wZ|i~5^>N`ZGA4n;7d)2I{Kf$iSk7O-%3BX~ zvZ$0Az_P&Kuc$E!%6u;(w84Vl@XFBzhgWlriVst*Qn!mrK(~*I2jT*}JFh_UkPGmd zk2o9#pHB(eDR>23)19>fHT^-`2_sltl+uh!yyn>%G2!tnj#Z<83bC?9HJr-6!2oIG3=Bg4jXO$7Aa;11{+=e z79r3Q7SLHmNUN+{!MAjUvViX{3&=Q8&MuJQ63qcRnSuW`$nl^fe3i2pGUk9<7a1<@ zpc>lr94NFz;$or4N`brvDq@>oFz~m44wd%cZvmb0>`@|~ky6es@Pfq)q=6+a7IYXA zRCP@A52jKV@Sq}pi#4dtrt9*EO~BH+RIb|%d_s>-MnpMiamLkN&?=7b7x&JBOcCiW z6KMTbdL3a{^AFH%QUT@c0x!)$Yd%~#f?qrW@?D1bogfgK8(?4Sb_9m>Hs-M;X7^#6ZA zaQF+8+yDLthrf7x7-YB%lFMpTVwh{WGIT(0o6W$$kR|e>qYqSZb-Sn}G#_DU{=wWS zSIW^H%F!9d@>;n0C`a>wf1v>{n!%?7bAUETy0QERRc->HCchuYe+LQJ;8-wASZA03 zI2&{pv%EL}8lZ#(oC!4GL_q-%1$% zLi+_M&IM4yqm;9|l%ummMc}m<+gtctO2S6FWxke?1sZ==N#rGc| zzau5)ERh$RdoUuEwcC~BwE#TCHi8d}2gN9IbarP*xQ2CRNOXs&NPwLg^y0?1|NlW} z4>*GwA)Upbttp^|Q5N7h4T7wE0-wP$y~&S|wJ? z13HDPgAvm6Y&}q;W&59Hg2ZojEMvh1viA z|CvGkONHjcphe2oH;SHh$Ee6?e`o$27W(441}Hu_z^92K&6R-M0Pe5wZ)39s9q!EE z16uoJ3p)FvR;$a8vFjrAFw+uH1HIv)eH#D1lg$t04?bXv<35qr$psFC!?vK46>0;z z!Wg?wH9S1f@Ux-Rw9Ahvxa(%a;{y%98=_0q8Xkf4UOM=It>K}49QTDZ{(T2QVSVrs z8~25@PC;iTpp7Na z(V{bF0zn$V9+C(LHw-gC9tnH##0fGg(0oJy;WPGasm~2prj|# zdNMw)gtc2lrBe{rMF%ab2si%Uda@)L)G-0sCJ+oha)sB^$*uKd>F4g_(Q)yIyV$y< zI$TsF__zJw-*#C0c=u3? z?g9R7C-}D=j*inl7=O6?IJglBjwuKc2u?5(t#8A^%Thq=e?U2`i{01eKrw$B|GpdG zSO;ywdo2WBs~`R%3N&XM1FjR9e}H2Lr0@hpp^u6HI2(W>#}K5@M@0g(PT@nE_03YA z*0<$L;=$9kk%!~?w;zt<-+nPx`w+_hL>Cp7?h^-pvNk>h74`hvCPqYa2poLG+I^z= zp*;6R{%w;YiZ}$id8Tqq;1FmzSt;ClvX1TGPciL-hreGu_*3lrMQzw#M34_b`JZ_6 zz8!QZff>jQH;@_0Kw`}k0lTmJ)WM&u%@5hX9b_yKY?WXj}=7;|rnNOs3A3WUr zlciL+^->+%!Czw9hYo+gbnuth_e0tUs2D`8FSCYCg==`j)>n0CZ(FI5~k*)3G@I z?I&Zk52BWc*y9USXFg)(zQDh&36h$?9%z0jzr&7+f#LFx<_FN}572ojSkfaN{S4&j zhXi2r19=_(Z#Se5zz!>eoxg>VAJFYb=;tI#Kd$`L{7`<^zxp5cmw$ab#8|>*qfo*I z&ewd$FF{E@%{H2WzqJ6gci=cv>)R41{_Q7`GyVi{Zhges zeX#j~JSg8lN?{goDYwF*1WRu1{@8q&X#%J`0qsR^(PCy`0J}^Pw6oxCi5FVYLdXWO z)&q5%2Y-k$pXk2$njc;!bYFbU)P14(I8$1)y>4l3TDLnBhyw}&P-D3DZHWh(Mes80 zW%E;c?xVyMJl#1eGTjG3=2~AXXHB#IP$rvZeT=_d{{R2~Y1W_k+r|F>|NojZ&H5UD zD>q22n;mr60DlXp<(>xGH3f5*Z7f6SyO$?H$Hu>BdU+7Emd7@Rp;REPI~?NfOZ+XM z{Slz9;&jmNJk)4_yPfvsuXyW$IxcW{r&)h|EeH>A5RW;{`V@a_1Squ}200rk;k9;y zPGJJoSj=&;{8J7@9|mo$=Wo>p?S)QJVE_eUv%OZy_q1;FG|=tXpjm>}woo^+4(J*J2^LHY29r6 zEw$iW4$AKkmOVo$NAoeJ=A%rn&qFf%BvAAnV`@DK3VUA$QgS;|Ui^uaG`fGjW=ZR= zWdK53|_Bi{kcRCq_f#Bw)AuJF{YPx zpw8ku&}DfqjX`Qb#Q`_e{h$qLpu&3wxFqmpATNW6AhpFrI9@Y#U&Iv_KbxP+b05bD z3*@5U;%iZOP^4L3e9fNL?aPp6&Bx!G1ximx!5+!_`~N>A+lPV#!7-y%@*NcYR-pU* zPNsF+fl?i4YXk8uLQs@|8<#dn9=%@C*i@zcJ5!0IgNAtJL1n2nw_K-D^Y0dv* z_*+2f0-6{yKv|`@9JD?mt=p9$&H6`47FEiCpCzCnb&=+yOx7=omb?}Pttz#CQOuiW zUCU6y4iWwgy7~{a1TQdH`)b(5UqPWS#KGkO=*~4ckjqMxnvXKQH2M$jVT!~XABeMl z2`NkAcgY=wbfXS~=64}`DH`k;!n^-yjl)aV$}HBC-}FYY&}`W59trrLVMXljXyyReo$o$8kGZ$ zw^`q)RRJAF1lqp?+Pw1>x=NDy@aH9D*$1w@1Jxcdt1K$5}( zvc6OTG_nOrAp+g+_*i)8AEX7%4!#NK zwIFy$!?2b zt7^_;t#+|DU_ogETVEp0`XZ>cQz`~2!1>$1{sSNW3BGiK<8VBv>(9Ua5UBT$8k}dE z-+-?2DS_mHnsDPwy*g~h|BY{3f9-_qoi3K=-^LgCUlh~{1gGv2RyXUfMXx}6b3s>E zeJ$nbT%*#$z`*blbgOR{n@x2o`+m@xve#lZN~OZbAqU!k1fW{nx?5C0xvLd)iW=nb zm=dN=3+u1^&7j#I{(WrC2fjD|DB*8^1*+G#HLRHrK6qlvd{zO_GJeqFb@!L&Kz)S& zjCE}OFF^<6@VD*-wIA+j-*f{Rbb^tAfqxrY0Ft};Tc?BOmSR+DT5p$lcK?Iahy2_4 zkv&(+(;FsY{i~SO-TH6Q<1p=ipg~QUjDkvb_{|!Oy*?@$fx$1BR)JEl47|!|K9X@b z3v_P1NMP8Dr?3A12d(+-hTOu@TOtO!0lEj|<|90>MO*)u3btM<I8Cl)4zZJ|670MZ+#7FiT~$sSr77+i%Jcs!?qtZ-N=v;0CLQW=9M7pLFZJ1Q*AWJ zdXRA-Q<^~?DE@6?K`7n_wUW9a-uLhR2VL*Zzl|L^kV<)a{Y0#PLj9j%Q^_s>4ulXD zg$$lb#2s*q(CgFwg6}3*KnaA_OC_q^U?-P=E<$-z0h*<~0#=CTT*%>B-S@O_Sbr^+ zfL*=A7YMt02b|L0fezgPg~AjS&}f@=6U@E%^!d?Sc;jEMnxgs=IH47h8g(@@L65Ec&3nB8AXre24NQo|22IhM$pi|XEKx=LITcB5&gAZm<04?fH#(O|AsZ1ZhT&HjG4jtwJ>;UNhRz>C8$Sngr_&g7<6r}NS7;v zW6J?h@d+6*1x;Op+NIqgDmI`q1&*_{fjkr6X%rXR$p|h{Wk6FP0s$}H=Yv*ouz;p! zK!;+=91eVO2NXswDxkx}S`UEJ{~B<1y|NTNyUKtEs3G$U0-#Iit>1$haiy%_Ya&5j z0quI^>pt3xwEw49M#K7b_tz3`P`kCdgvCawlyyI-WnulgI1kjGg_oY?zWm!76c&R^ zP96~Dq9X9x^1qLYK&5f>dDho@y>5)whf9kHCFs~8;9z~O^xH9pT8C)RA??~nV-Gi2R+sWS9&=@gIp)e(-RsKKe454jT!{|< zKEdWg-UxP48UY~_9%3dFd13B%OD`V|3S0)B^2QMkZz!b_~GE4uTlMAOThofd{j);#a}O&ITH<2Q6F= zQDJF*!_mv45)c^lV%OvU|GQjNc$$y!*c>S40B!vSwNb#UZ+m@ISOQ;gJb}2svXD@7lCe*iTvBxAjM_?_^K69{+__U z&5zM75Xvw82tL>Wex^g~?K+*_8smTb+rk-<>*5lD=HE;;tPS=tC2ZdQt+(s%fu@*R zZy#nUfpO=8-j=3@@xPr1D=vXkw-MIq%J)jNA*6&OBj=BD4hy|5GU{4%# zWkBMggcc~g1iO*F{AIbn=cwU{Dsri``rQ{qF`HROX|i z5)hchkn#Wj|N8JOh8IHHL7Fu{yUI?1+zKi&1r8hk2bor<)y=XQbX;6ez>8Hpppp`F zHZN$t4m79%x}2C1r0-Vi|58?P6&C(NI1?O+-5-o^w}S3$mnr2q#>Vgxyp-EVMaB3) z>&fnSpcMoBedie%7+~{v-61L(-7HPuLpK9n*zthJ5I|F~ttY!b)Fn>nVza4-G(?JJ z`L~@2{C^#^MHtfX<#F?DJ=y7_B2a(xwQ1|gI%ClN7%qnYZR(5Fz~{FisTFPh$yCGM zP-FNnri2rw?GkuT@1E@s6e7wgullF)FCQS zk+FVP!VZdR@7FA#I7VFJAkGE5#34YS6MP3od}jemTx@3q$8k{I#Q;4iAR4rB0yRN^ z)^CG`>>yJl8vOhCTR|s3$?&%{f@VlSN7d;nJZ2MsgSuY5d#312P)UuXUgeZbq09t=~!{KubO}f?n7@1Q`pu(^mu1 zp6_C}iREuGVrBsMl0lOy2pbLrfUiOTB?|Y~Mrr)pPNadVefQUD;6nk!U(CM^GL3`z z2WW9F=%_-GfETwPfW$yHh&0&i^0$KaPIb96x`Tq@G!p}ZO+&Ff!~-V+Va7|izcvSX zz#X*e>9r0xVTZqPL^53jWV%Gai(0tp65zAPLCeNOK&#i&tS^FwPEVAnq*)*2Z&wA) znpmIWZA>5 z_>1PdAb)Ul|8Rc^I-9roXG|$imp`L>%SrwgW{^LSM!__|5eQyI0*bqiTVSosH^7UK zKx<7dq=9;(Fjb%j zz5z0^^wjI=;7#DcFLp!JFyDA7jy$6R3R_qg3ci^DQeU(1?_+dq{t;9Doqt<{z*X5@#0XAON)%VgE_*&gI;K2I0tlM2jnQH_|9yWxK8Ho z3&&Wrz?U+4a|8ywn4Scx8$pf}?#yO^NY^x2_y_0|zQ-5o0hoC($3XY$2E3S) z@cVx!8|ZKumhKCn`XBB;&^1osEZuIPjR_z#u$utB?x&U;qWBuXMk>-4R`@QGVllwxMK;Gzw4sH z0g7{x@a8uhcV$#E1SWBS_7sBFk%R707HBz8V%KfE;1QbuB)-^e8j6|SUW-7NfcIPh z2P5+b@Txhz5@@3c+#o6yXs}}_J$sBz@0c5-!7(=`29%?8z%Br-F9g}oVSTK`BP`&> zpKJgBgAU5&X!u!OD&GCy`dEo!Sip;?NWvwryEqztD%8t1{N${WX!yxn$J+2yp_I@1 zSP5H0#s3({^~vC(G43#E@Pw!Je<|pMQI2B_2FDy28NgDY#eCmySpNts)c~zq4bSNL z%m(v#_c2iaHh>Wne~|HuIPF96hg<*GFm)dXsWv{@!50h;kD0qcXK#N0?bv#tYtorY zc7YBN!}?dP|7%$tkFgl)8eeKX+5NLls7uDEi^Z@*#;}9M$jQ_CV$HkgIPhXZNO}gj zQUK)2)^BwJVHr0n*#%x4k^qNn>$h5o*8e3!-QRotK;tRk$o{GQ@imk2x7KeZ%8(uh zc$f}4OvB^n-ukWdEvRCQKHU1Plnuh_Vz<#QVX@IIWpeim3x5%;12+EqjduR!`CFmKl=C$IV6I~YFR~8E5CQE_LB7%(bWAx& zMLmo0$=BM=KUnGl8tR#KOT9p|hTyYkn~$@E2fg^P47BwDRIOHlHe`Lj*?Jpvr%H(+ zTi8-KpjyEb*Ow0>|BWKn{dlMF|?8YyDQ@6!zlwR8TmwWHDqIRIv-ZmVnA= zguOTjml3G~UDVD|1-ejq^%SuBfESL8RWdQAQmhkg$3uAN(f^thgg2(e9x}!@3LF0Si z{wYMH^dl(4f=*!P0d-!p7&1btK!da9vp`Pei3ew#xWk|sRah)8{4gJS^D{U*pLw~O zpOFE=1e2ir4H{z!0G-*Y51uYXDStroHK2v_-61M00fC@{ShL=NEQ7T%z~{Sk=cpt! z{}l-fujlG5Q4s+RF1{9np28FGLNgkY?7%xyTHk_aXzNtEYgBTy|4ry-F%Qf7AMj!e zcxIBP`523DZwxbI>GSR!m5ksQZ==9^!P{3dxOH?vSS&y+Xyk7!+7|WHAH;zL@_BF z3kPGjHwS2sH!(hd#ph$KWqWbfs$48W5(bNmPs4}AcZYXpiK@UAcf$; zzR(v*yFt01rS$+<7r0}Eq$Bi25JX4pjs;chpaTS5R3t#AhlPV~-Czt02n>Dk-hqJu zbP*P)=w{u2_XV2(^x*e!=;r$y;GKSTw#~l<>n)mpr_>vRCg7}(muQ0;Drykty@>ev z|9^1Cj4E~kaP14(@Y8%m1k&CHjU|Kb6qgADdj@3hc1N&hK(i_pV8?+%4uV194_$5# zI(ns7036n>2TCMB+&)-zfX=29V0KXv>0}4zX3&jat^Z5>!(MRz{`Wt;`@;+7i6EVz zi$Fl-T380C^a_9RwjU(Q67a%g$N&FX%o!IzWg4vPRcJj>%G`X6IV}8zDdZ>|Scw5~ z8;AtE4>XQCiGhLPo12USe=B&_#*L%(0H_ueDbekAV9EL)5dPxhcJNp;=-|F?ClOHc zK2ai&#gxJDkqy+|+zxUHPdE6ANq(?~0}vt5X)4AEXhKIy)2N_8Q259Hv z%$YNRkbx43@E3=E{`=qk0n~AK5Pw&>P1T3{4~8W1c|1I~-kN z)?lGqY6!X!gh%^W_lIuKb+4fFLqMsNEgXD$XJ@`ZXSv96cb*B8I0Qg7do1`w8xiPj z8(|qSHK3D=Tfo%}tad>hm<77OnIi+FH$33Q{qLY5H&9v6VtgR-aJRoeD0o>M&kI(N z6 z>wywAPGd=)ybho2K>wyw}(9R7@ff8lN!6P4$ z^oM3tfOT#K>l86Q5Qp#zIF`EIKqg3byGe9=NCb5HNxY~E`~AP$4Rohu>w(heuzCut z7}P&>lUc!0qTTH$(0Z~|rQ1)W^<=5+3V{+y@Li;!BD-rbxLgQ(VHgIf8~&FVbi0Fe zX?FXAbSZWFgLFx+5GWCc#1Ln|ix7ye@E5;BQO=JDd$Fq*d};P@#APECVX@c(NFRGGhLKl&=R1!m38Fm%!_% z9R#`qSiHJVwVvz@V5#Q>@4F8!`2QcY{xL*_rP~R#dxoRaQJ^~rv=RTm1Iuwoo{&kP ziW^kka)1sDa~28fE|h5fR^k9E^SjMFTECT;f{v{T1>IcQTgw>!;z024|DfY^n~zBx ze8~i=4t^jX8yw%6%@G?HeK?Ep#k62>&~-YqfaX7rJA;q70M`#7_lAXcSBP|%3v|27 z_^sgREEniLS5ne?vc6yiONmvtIp`P`KN*j22RS<31WGhp50t8QyMY&XeLIL8Q4beF zBdQ|=Y#St!v>}nC0*NF@)Pl1SXTXc~5FOz!!XP?8C54X)OShv)cOWE)0tGr9MgBX0 zPG`*khY#4j-30=z-$0Ho@k8uOwSuG=)N5-Y#Szktw{IXJ0UnF(bQ9<_1s!`F{^BY` z7;ArsCA2#Ov?H*)K%~U_zbgasz9{WO!QD4{of*ReUKj;IPH+Z|7Nf?)F%}7i?hnzR zY}8pG64#j_aNL2XW)g=$?BO$kkd+)F-FYJ6-F2Xfi#KCW4ZFaLVDPXy3%FYs{=)U^ zzyF}Y$?l_|yBa(gVbdg_c~yz-8@)B$OyC0}*9L-*U6AR%*y+a7S;qlt{X!ko4H@#vBwxRK|M2AD;S)#!9?>L8PIG2D4FVj z7wYMB`=uOb_zN2HKHU6(5xj~QHX{SNPNbB(+bsojkXE=d%;6oNQIgk3nt!nHw_XDc zll!QMd^^m{-Bs_Fv=I$r)~J|3s372xa8I9dB3+S;U6-xm5M}wL(g(&TU$aV|Y`zKF zR96IEJXNA%(4EWBd`!W?8g!X~LCu_Q7Zsb<1K@$OVucdWB^2UW7BA-egBAc}F@(LC zx)hW*c{+;~APFk$f0#ixXhSb(=D77hiO!3~Kfs%w<2ws@;$oo(7DqQ9kpXR*bpf5) z%mivGK}6g@>q5Xx(70`Q*#9ud9dF=UO&q#K4Zu}lY^NY>_T2%lp}PirCyoIqJlBBM zBjt(kw=8A=-9ltl%GFTMXa!lyXZ#OmU|ARsU!d@_51=XGc;5+3k_*>tDCIi92!ryWgwEE6R#Q?O8TLZS7!2mP~ zCIe1kFIX>tXTc1bkANCYMxgryx_LdI-r#_F!$rjfJe$?{`0sz%+0NYeUlxH}q0b}^f$k6$2XK%j?O zI|DdMr9cx)ttU%_KwgcHi-q_W9NOI>Dxj!1&ICH46C%P33Tu#aJ2{LGz|uQ7r$Pu& z`%a}BRLO?(w|rt?U|8Y6-wIl%1-kyC^<*i?s}i7VDO#8q85kCVP4fZo2nU_=D*_r^ z0ZsZIh1}~2Zkw(UD6#DJ10D8@(0r7EfnlKw$m>`%cOYqQe(S_$1et|45EDQ*;ef(N02Dq;A-bc%+94qi zAsgR-Hm`U0sDLhI3hiE_0xI9STS05cnji3i$G072!a=9D!OmAJ;f^;x5ZibJr0;Nd zpg{8pg-%DA?iLl09w+PLoq+-+%>Nw(Ecd8@&Z`UVo&%=CI%`xUO7lRo2i>1b(rh$J zxS*?pzPyg;KGx;O=+<(w^hcN9f4_#Gnx(GVhr2;{o$3UU^X{uWSL|K=d0z~8zLlphO3TEBrj4Ou7$I$y?(r+W(6K+u5|-F_Uc z7x}>(T*6*#1Q|9(MFvzLw}6#&`>_NC1cwIx7X$V3K*Mkz-ykv$CHmcN94${Oxx-&@ z`hc4suXR>3FfcNdsCM&vb{_*sw&XzXV?p&7_i4h zz-NLm^0$Dz3`vmPANX5C{{R0Ew~M>62kaiu*6D7Dce_!2_8PWd1at)|L@~&Jt$rMk zh5KPIE=TE)sVI&n_CyBCzmK+ChZ zPjrIWFO@+%9)2+Lw@N|c0pws%Jqg+h)(r`KRRazNhUOmv`#?Qz&<)ZGC49CF91IMl z!uvkdunWBA*>~j~o4{+;1irhdh=3y|DEx)qn}7d9yKlTuYXaZ)0!mj|41wS# zc^J4!9{R$&{r~^&78MhaGeCtiyk#Dc0cx3tzR+q1`B@~3A^5dp=!-jzptFI3QH*kuz&z)X20c0B}e#+t)9RCzm|X`C=o=0;tYRr z`#-4GVd-vB0q^`eP{RD*1Edku4dMk|78~@!0&;5&Jf+BV2M9DjyYJOmAk!HDQmYUO z$~+Sz;R!G1+8*yx{Zv{lD8C)Yq~; zT>8A5y*EUKCn(^B_}st$L0v}<>(`KU9oAjS^UY0$u_UP5&iZ$W2iQl}hdcS}t-IZM ztPg|xxYmbDpncqKchJ?~NUi8)9^gdS%?oNhclrx-+JYINTd_4P<3u{+cuKOH(`4>< zi+4ML`}?390eW2pN}0P|K@EEy(6aCD92JG&z<{8z;LsOW!AIwaG#`<%K3pQ*?IzOg z!IQ-t(CH`gLJAZtZlEiatq+$z?RL$uK3u|QX;8}C8Nt!*z+!#4^i#K+O!I@E%_lfp z4s^Q7RC24PS+${F_Jt2@}iy`bApU%Z$K2@V$P*Zi%Y{{8RqyyYL)teghiAa)GqcEkI`k9|si|3|)LJCqdBw8XFJ*9dQj> zw*k6@vilf+%Q8@N12W&;@Kd9Nx66akq2*-h=a;>pGVq4>J*dEsE|32npwhUa^?!*@ zw~LAksD_d376n&QE-D^D0igQZ<%JvgR!&eO3f!VlIjnuG8FV0fiGA~5sTv{httFdW z!CnMyJpeCF5CC0ag4*^6o!EVhMT4RHL$3=nW2cLXLw61Mb|{zb92JXR9~B!=14$w% zJRmIeh0qt!S;@^uBwBBmf==fKoirW;YLk3B%2W~zI%TW7M#Ui@Fs%FQi)E0jKwsN* zdCP2IX*p5C-YwnYEK~Xu)G~pN=z*><3<(A;D)kBP1f6;r5)=rsCkkA3DuAna&~4We z)`vjderGqZcOa*rG#^oc4jeSU0i_=UQ2#?B6qJIxU3tQ~i&Mgl|J#DPR3Ptz?pE%! zEKTZm6=*$B64qU#qSN}n#ID;##Q@yWIS%RqxPneo?Gj(E(WkZV2{*4oC@ou^em$N9(ul8=WyK8l{}zkN>zo5sQCtjs@NnlLdi*n&F8r4^t;z1vry+d;(o zM0c%7slqoG6$8f7fCg);QnrR_MynFn)^8<_&2=mcr7YGLO3XpqUO^|UgVZsVYJkQ8 zZNO%OxBF0m0orU%0;mmy8PCH7cO~iuUp57fjtBKyzH6%b`K$z1ZUP`+s+cica^r?i=8Z zI=v<0jNnDZCm`zpKDUmnoXvQo~_7a32%NeHyG1d@td50r>> zJAeiWc_Ai4ub}`fPX=E^3hlZofQHX?0)v7BUM%?lnpZQv)OMj5g_{J11q8jA{uz{66uN&P)(OHYEKo)j0A*BxZdZ}k1EAte1ypXTlyZa5 zigyMTE83uI=(>-of_937f<&Slbfk0hNrAxdpwQre7u&&S1Ijf2U@Qskc9mJdSi-Y{ zqm-lD6>?*95B`!#GQ4!FbtpO+&5>OcvE!_KBGiG*~2fp_DyAk#s%1cLPiy)Z)72MT5#(2R>4cxVpPSt;diJy2ra?IF^7vcv$K zDo!^(1O*f*@>H?}K+&lHj=l(R^nrr6lpWlIi9Fo>yZJds3Fo)NETt^Xeli^24)cU| z>+!dMPWSufCc{yp)cUqWuG^OZ(zNzvsOJoQap4;{!5n7;)rH1yL3@8da|x|)OHCnH zqqV**<$fXc@E`Q1G}t|9#s@lGk#0(J<>++f>C}6z*<8!OSf>{HLgV2-&>9Y3hUOzI z$o3^b?CaJ84a$M?zKe=PP-wsljc$-TK!?b+JY-;Ch=uy8^=&EW?g*Vuw*L$-LH!c2 z`4OQnPCUS3zIC@NXdoUooCwLs;Ji_S)DW6$53Z%44Iy8FPVkLza2ExIzR;cz${QT7 zqq<#GbgYk-1a-1?b2zrX?c^wNM-D$LqU_U!*asQDbcI>xCj&|x%@02|pJZ(P-{~h) z!qS{B^BtTNO1WGAmzZ|DgYuakC|QB`WL$211WF2^G$7Obn7R41LU2GJXz`K{xTOI~ z3nhx6R1eE)Y_ZYtptJfxvu+(Cpx&U5iU2qzu)eT>bQuL8N?4#2sA!vzB@?X6Ma`MeY~Le%LhV|>8+M5il5r>jV(t3)ZM^^KBxOJ|Xis_qhS zy`TXa(E~Z#22yB0y5D@#A+R$<1yts^1VP8x!e4xb)ZsRutwIM%q`CvZ?fVcFjTe@n zy9Qmr2XM6>D1FxLp3!=sL>aoi!cwD@9Xc8bu2DL z)!O`wx%r$!7&t})!(Uwd1m1>V(R@T;1!H`PS9ggD2WXARf4*irhI(tFrVI93LqZ6= zNV_u(I$zN3D${ZR*3EF0`R^+L+OrK_Ndrpfph`{zv|vU86fPoJj9HA}u*q2Sj!mHP zBq-y7%3y_{fWQ}XK7;E0<|7KN|4TVw)3e`?F*GnRl!$&m2JR^HX8Zxo2snNLB^Z`0 zffvUu!HpeI>p-RPS-}iOhRyp6#Fmiz5o9Q_1%te5SRmOYlo&-T`O>WfNcV22~Zvcg*iCVL8}ZP z9s_v`w1x;2#FpSy9iVYtM$i=s60Ik@9Y7O#A|+CwRW+bECLrv^>f8T71%XQUi(VH^*it#oQc(}< zqeTMU{~Ihc_*+0XrF&Q(E&c@Ve`YacF@o#x3{XnQVgMx9}zhWYE5?Af_j@_FBTPmMovP(BPS5&LFPnHm4d_} zBO_ri_LPE5(?K?*^(24aEC%qvAo$LxV9;PII9^yfx+6gM`f>-naJdC?GfVf4a8P!D zm=E%PaA??z2=Kmgh1LTlPT+xG9~FV_kS-Q*@B{^ih6jYbCnP9|vlufja4+wLK7Ty32r$+v6x@S;17Aw!)zllpq~p9$%Rc z@*vdX61D6C;E|`W7Z*!F;xLaNF2V3Pd@S2t=7otFWGtKgg;ozJt@40J<3SDrCsQ~9 ztpgQ8!@6HIKV|Cv6y9BzQp()v2ihws1K!sF4j_j*b^%^c0D*F=NkCxO3np;QtkC+l z`vkb-!Q5Gw0_q@M0?lFFuF(b`+FdG`!BNL9@Iv$hI8}lQgKl???i>}BgO6F6Z*>2D zc?*=0T~t7!4eF+fbbE2UX72U`-2(*bx`uu`%v`F{`oBa0Y+i{ZNH2IUEEH)jti#!oz;@Jv78NW3r?*+fpnwAH?*%VU1J_<4wcrh;;MIOvjE$!m7+64eyS-TR z7*hU8wEi!(3wt4(_y2!5G%6lg!=u8j7`*hvARIRHZVI+U2eje_6w?q(d{hLif0oK- zF=RA=T_TVJatWvpkK__?LkM)7b`03f0brHSia;ts3w)4O%BtnJ3VFwM3`&QmICFm`LlTQpFVlC9;tEgfrm9%_dL+U!SO^e>PBSBkO+v$P}5NFyjN= z*I$4Rx9JvZJ|g4Q{iFL(>w!+Odg7+i7n*>}Vn|yQHkA%qMGHF%6y$8sd7#ZdnQCF# zmLtQXj$I%ii!tzpV=pM2pxY8abresxYf9?@$Qd`?0W7VT_*+2d6a+)JL0g}%D+Et} zn(PKo>x0Ji-h$`+SQ;!Cx=)mV?nmniWOQt~RQkjEM41Sv{BE!W4SiJpw<=-vv_4V( z0mNsuK2gT#nDsx4Aux*}3>;?0C%dn{NC0o^0Ih7`26do7gB6oO**H4(u2 zew(NH2eN-MVE!otXMCuCf{-tV-8wY2KE3;_rcek0WWS`2G=#< zvL+z>MW!b#gOtcNpZc$Tf%(?A!;B?T869=(0%2K<;V-s>8^i+8N-g?u>+Rl>HkLXk zP<*+uKmrG9b`8XAP}>3&4guY4SquT-e5CXXWDO_~wl}|KYCgu%db|E0Xh9fwoejkG zp!T~6WGq>wJ1!u+cOPgM*Y9Z=u-#kK|i{&#zW3J&X!rCi5dR5U=P z+-n}|52YL+9%u)7@QZ+3zy5=#*-AJXeN;3UK(9Iw27#7^g|Kihia6&U_KEe~2#Ss2t(j{;x1_Xy0 z-+s{wYMk&l9}$7{zxnGq!(Tjn23FARC*T>{=_l~wVeQ}l-C;7_ZX(T(em0-t1Un6S zRDNfeOo==wKcWon+k@`f0}t)D9w>bZ>9OEj3RYhWDlu5XUZ@#>iylx@06e!I@WP}8 z;p0{T(3Dn`?|-*HXcAYa@gOKBK$pgR z1WgG#FfcHH175%pv>8>96(kD{eE}y128Qq#mu?`3z5qD%K|ANdUaV;T`@j1J=vo~P z>%06d>p<r+x;IDKaj3j zn8=Iy_MrATcV#`Q+DaXZ;s8`2=zec=G8ecvRNP57ATLWGf$)weJ&^uJQws*7px!L)_QTL8WdNcc)!cv8V1@yQKF&|_QJIh zDcvA1@B^=ncT@>AertU+th-QyzYjF6272shlP|+^{9@~JF=Pp3F$9N&hrVbBZ{L&w4^Q#Fn0Xa8 zq8oV_bRIhB=nGhJd0)HQKz&2KywK$Dhl9&v6RL5|7-4m7ushb zrRWdPp()_*Il9f=F)9YZFPOnu2gP=ou<%gO@Y#$Ppa_N79tiRfWWXI%MS{oLL2JH1 zO)hA+6YLokxM$cvo&m2}RspTl4-15Ni5cuA@c0vQdk$ng4|qRLXjphDXYh;cGZ6Q` z05zFf50tVPe*<|d1S)WJjVs1AdsDDeC|*kl#B6Fs1g0L?j- zsAzyp1NB=$lgXeKA4A5HcWeT|Vc~%<7hgm%`b=)AZGb{OcQSI`WC4rm5Jz4bPD=A(plA#~xAKmgdn z?tk4SDjI<=UR?sk0uOj7z>NnolgJnLKLE5Z5?XtAy9#)8|L*?U=_>HT`x3Z{0jIWR z)V+(KAOLm6!F~S_6&_I6l?T+-;0Xe6uXzC8^CJO|OG4@$z;j&0tN(ySJ$S8zNb`Tj zy`au?ts z!9q8zG`Rc6J`Xc?ft{d%593Rpmz8RPvcYap`^@@qNqV=7ibA&o=-N8tx2-2(CRjjB z=>D-!gM(cFe8M0|Z+DG~Oev$Y_5E6X&{=oT{Z1egcxHrVF$9Lam=C_90yL@3(fAkS zpAsHt>-#mg<3KYUv4`WLVV(emEChpw#G2pmgc*MW^;$rCcR-_t5*aUG-rrph_CB~5 z6bFjX<{wPKq2Z+|;Mvq7marF{C;t8Ku2IqGz5(vSg9~U-1_F=IWHE$=zeoq4il73$ zwp0Tu5e&Lq@((CQLx%SGTS4n0;-Qymg6-jU%zs?%m-t?IZ>T`i|iAV+u z69WS%Jt|}|1cAEF^3b|P1~l=V3~Drj4zsYnQFAgZ{KX>hMc1HpAjSv4js*uOBs^t6 zfvE)QOoL`q5P_LjhX_p2+F5W|hK2LD&INVXa#U=(OIgBRSRDWNzdJ_7qBlgvCI}v! zp!yDcBfKQ|*ac8%f=9JM;^Bb-!7nyGf)ADOw@NZGFuafljXi$owgZP&n0u#PcPL91 z=uYu4&~h3+aC7|!cvXC@J#irXEG^k?&t%RVp z1=#E?&~@64_uw^gXNihN$$rqa-Zd&Rj-V+gffDBb?gHJ;kQ@V!9}!Ue_#6Y<2|B|A zG^d^+0PfcYg@=W{cnE5Yf-VA-@NE6xeWTM4WQMTj;Rk zaZn`(ijnSYf$mxs&}!1|QjXpb_J7u)44ow^0-ZG~DxD!J5_PVfpkvG|9GZ`_SRbr;7Tg)i@?zUj@NgYy)0;xKH7H$y zgFQG4oLoJE0^9>TtzQ&?0*t%)h=OM~Bv!#*jJgR98_;a47O4Fiqhb;s{NhO%s8r{G zO<6$>F9Yqj0iE3R#sGBb7%2TZfE=2!q#imXv#uIB{Tdtw)io~N&MctznL{t=U=q-_ zm>+Bc8A~Q{fDY!&tpRC}0Buo;-2v*OMmHZZINa^b5e7b%2-M~)Pi8w1Sf%^u@`D|B$^C;5jCi<{w=A z?eiHJ82+oY7W`lpXs%K5VJVTzm{89y5S+yn`eJ1j$WNdVIwT)~7fABAUS$Jc!sXFj z%@Y{feeZ?sDTu>4TK|`v1D7}8@kP$=0G@A7G8`q^z3vlCbG01=yVq;y$i|* z0YNVgodSgkJcbMoXMxg%MBs~+=n`NT^0y)uYVx=Gg52Sv0&+(H$Q@fxf}u~{vVie{*8lud4g|aeT~^ZVqTQ#yu{V*snPtCv4o@f=l|XcPzSRD5`U$j*;df8IXXw60Z}5K^*{WD zZV{-=0?uz^5RY|$S%-Yu&LcODjxsc1zw!I`tLt@>Ca0U(w z41MtnG<5O9#)W2hLkBs2hRWAzCO2z~J@6XG+T)^Gf+6`;i9 zqv8`D82aKNvP3*c!bL>}wEqQi(3K2-4+}`JM#ZDs9n{VD3GxW-bQgG$8T9{uH+S<9 z4v34m`TGt3{{J8RV&fHXv?Ed=DESzlZ2rLt+U4Krqat(MMMVKri17EfF)}b%`ltx- zw|)f;%Kl&}73y~833%~$KiCXVx$@eg`3GyMaksZX;EQMb|NZX`QBetk7Ehoey4#s2 z;|ipdI$jQnWYC~ztJHG8lKREwF(i?y4NmxwbN^{Ko zeV~ITK~22o7Yrrl9wiDMrTL%&E+{JvzqJa<+`GAWdaB--26jU4y7_?COWyatC-H?l2OH{M|hlRdK4+N=X33%a`_y2#` ziw-GJRRgL(p_XJZWJuJr3xvL?3jiqug*{5u3aUg(_?v%#VvGe8UL`-k9t2k*UqHKu zelVA+gC>1JEr!6*7t_G&jX}ZLa`gvzbO*`2V4k2CS9kyW-^~x6RnZ9ud?A(xiZAer zu%$mhSKENfTJU)>(2Ba$rkfv2-4Yi5;`UyUlR>FK60{00iy=HH^o1DQ{?@DC|Nn<% zuZig(OF&i0LP%@V;BfbUp%1JATRyM~7=C0G@cqat(DRv9!1^nz!1J%H0)pRI1v0;} z3J82>6`1s$RRGk%097lX{wZip1ET*7?ytOH0FRfT_J=_&G$O~Z3@?Iw0-E?01I-OV zhpwWpfkY)*50tV)O6J3m`3?}T`(X6pfES&+z-2DTPlsXiUty)0V3!uKgonMz*afXH z;e8o!$)Y zKqluv=VXDx8iYalJ}ew`A_-F#IL(0u!DK+4M2YSX-Jmt&GGXB6x7~|{pffg5CrUZP zUfhO^-+@lL1iKbK>JzjR8f@s}9UKt*CS}5k>u%6)91+J(KG4WeU{F}Vi*2AuKe6T` z5{Nlj;?^tiii5Hq3v_JU54K+EIDBI>sQ(Hc!wykl3CLmqo#zS}RDik?6ds^CThI{z zp!CN93gv(oSHWj6i$LNZRlgRfiFX7xM!xU|>iIK`Z$L-Kcekj3CQy2LR00=+6dZR^ zVF8K%7rpU-O#ozP>w(1#3pfNyc{8rmvkSZkJr54N4(nS~%# zP`5(k4?6oR3eL|BmNBKw#~AgY^S~dFl!BC>3GIH9^*`fBJ-a~0zcXwCDGNaj*MO8x zRS*ptybBBOOnm`bk@}?5_0JB_I;Wl~-c7ZGg zh=&U%a|pZ$TKwmKH!sNli$Qw29Wy|k+ynfrrx_R+GLAH`3;Y+I01CYipwWwM3=9n2 zwhtb#31qBkU>6Acf4y52q&H&@h}Y?q@&7u+u#66{fMd@8>lrBx>;kWo7Y0n`0G%xb z59{NsAPYf0DNRDNs3Z_-i4VvWxFt3q9o@{l$cp^_ANE3A z1eEGITK{){FMWn;9wb0PDF~7hLc8BIKl#!8rY5*s*5EN4=;T3Lu%Z9cK;1}31`s7= z1*Sw|z?2vR1AogB(3YMQ6^3qCj&A+{@BzZ0b|d(B(KP;j;VfC^;BgaB#{qQMrUb;x zf&YUlS`U5D9$7jc5WL0uu4!0rz(iey2n zq`N{?Bs#)a7J?kx=>|IAxf2{IkTXFY(rlv`(m;c8Wo>W^#Jhbty2S#)XI_EKcZQh% zGK=TMKLOAN^=?;=fEU7G4LHgNnP71F04)l-K}*%I7=P<5{SzD*)a`nOe^ICF zmCo23oxXQELmxy%Mt8gNbo*ZEKK8b`!sd0BHN7#SSCl5g9mE?n3@kdx*%N=(GZAWH!@ovMP|Cp}W z0V?Lu-EoKqe2iH08;&fN42}gHpiOU})xx0tz@X7@h8KY)|NnPE?#KOh5VZ7|q4hwC zT(<{D>&a5?ZU>Rp1Errp=YfOH5r1K_23){{_;A007*NAsus{qGXgvl|5uN6eQb&j0WT88Wj%E ziOnpa#i*RkCz(1uc#IDmZhrU|!T_DeBN7~X98~%-fck4;#kbnL`hUIqM)U9grCKo6B?GAQ3&b5Ay3_b{ST^gz|&JQpkCy0 zc95f?o;&CWYG!p`05yI@I$cyi(}oHG2Y<r*8ny^bQy77V4IGTt<>3%vMo^xyx;!`)sW#W3@x z6o4}?$UIQywGZnyX#G}VKA{_Q5Lk&uw;Rt2#!|)R6O36roo+lYT)Dx^U5_&?U}O{M zEZ}$%vKr(Gp6)V{)^DY!5TO7*PLjv?c6etT#|!&ae?SLPDR$fb0p*@=|F2uS36z*; zeT6Xevc5nVs@-m&>wA8HQ$eXXEchqrA*V74nA2~9#yvng^jZ&;cv~MU5rdR9U&CJf z=LWS4SRnV+!<4TADF;j^(%;xWw)Z<2mjo0m^RwMH?Qo3516QXZ!#)Io~h) z`#(d)iCrK=#|bnez|hI|;`NEY|GU{TBpTTTGHf8CFRp{dnvXcd$3=sd)Qebqu#~cP zGsHz71|7$V?0=~DQ**F*Um*{)8W4;3%NHZO-@O##eKXMEs=?i|3=i1^ASZzEf>X(5 zs8=847s~^Bd66PC}URw*c@oPl<}iiyJziXkxKG*6E_cQOXXU-itU4K8d=Z z`)Kn6X6<93;XGB365))HMs|T0#}9!g>|~mcu)NmZ&A`9_x-y3cw9W0c42bJ++(m^4 ze8vzjh}!_-f~J7GkE$}TGcedPure^ztCm>Uf(DCAL~X%Sw}!S1%nS^rGW$R(Uu*0G z>sPd8U<2*^um$NWVF#b{`kDtkJp7td1Tz^QfVBFv7(kslnXoK|Eau>V|A8WqLOdOkwYo1fKKlQkfuZ?VUMbJ_ z`_liLpZhf*XX-v4@IpqLfuXxZr2w3AOLReJ33>8^gAZh21$f0~z>Bn15TOhoKhTzg z>8{{DeSB;*G;G8Ei}HZt?ML%}rcyKT{7=|_Q4VnNTEY&#u;#S}cmOvHv<4D1oA6(h z1tKl59~?5A&Hq{X+l3fG^EP{VxWTG%^7qc`#r2=^Ua}dNk0WZ?DkX+5*Qv4s3 z(86By^MR+?Dw>b51b|&0_+kyD@D0eYXau?Zt_zyWK?QeEuaAmLV8Dw4h)waa(cK^7 znvX<)syBh4UKbUYfUpHhH=G}SHf?J!FTci4-C z5K-`EeHl{U>#1ioN|`>p#J*!i2d*aToWi;GR*6epX2FBcnl915Iy&YXev zmm5F^W9u&`K-!z2{_=xP*E`*@Jk~e(TdY9C!r*o%BGwIiU9SXSM7s2G*BzkP?)BXf z7zU4WR&bR2H~(khZ|?)o)a|{&!zK{i8#*Bt~Ubyi-Kw~Xn*0jD|o!%wHTx_M;bwh<>?0PXMO@Y zxy<+grj-o6z7v82!(OcY2}+*=7z!qA<6#p3;a}Wr0(-dG1a5Of;t|xIXnw&I7GC1i z{DP^(u=xc`iF8H}s8sv7_uqd|a}czt7<5`YsC3iW@#X*j|KPG{e}EIaz-#FpUtt2T zxpsU5u|eh4{s<@V4SS$^9CVatUh9F9tgwI=Xa7RVdC*3?C`45fmc{U5(IHTyTmUp@ zYl^5&Kr$T&8R_th94FAKY=##_2vJthJlA26(z#bahCs#z!ATTSymbp2A85VAKlMOZ z76W)8iSZ=|@bP96-@k!!FsQ7O2nhN=5wudi^?wN`C{yvTKiA2RR$ZJq&ML5g1ALtj zq!vT!FG!R^`U?`U{sNc*I*%nRJc}iRX90)63*U6`srwq;x+u>&M*`K=wAL3H*K$wE*16lk1iRC626b|1Vp!l^A7x1=CttU%<3dH|W;D)&r%I zup)c23MjY1x;+-)l2W8QP6V`2-A6@2`4;Hl1xC=x3f9L;xO+V~x*1y!lzx8A+U>y6 z$=L1Y(t4moAm9ZLc+)V;aW@x`gTh|?VFWh;VFweSob3!sK%nt+4)BgX8A#i!+gU<| z>D!HP=>y+ycm#AiYXtlk1;rvb7P@soosUwn|5uMQaDxh_tK9^w z0WY2_gZ*;c8MKU?;XjI^Z_W}-C9&N(Dl*pD9(D5F&LD?#2D}J{I5e~~+vCOa|De@} zES=6S-PJDO9_Lx`)fV83EkI{9f}GWv?ekw$1C$uN4Fdm*g3?<&=t9A0P_+bJgxk#> z6cE^3qoVWT8fX&r2xu3hEG)d8A#Ox<9B48VGR_YQ8xU@O1HO(xAiTRy1eVA%QvQSY z5BPu=yeMDn3==8Q124k>H!nf0A5h?zvUhWI`f+p`^oFQ#1if&Y18yUL&Yb5s4BlXN zq8rqsm$3d&!Viy6h%`7(Axw}XkT9q`>*fH>j&yPv9{}AKEz=#Q)6Ewg+N}$UrthGb z>;4fQ1iC5c|5b3TmH2ndf&vQEANuANz*1Ta(huG-3hu$n1P1*V)q%7&tiHJgaFhmh zgR<6TaMl8cY8rtxK_~K z(%`Ug=z7RnpVt4~u`Xo+P(FBkvzrk-!ZP&`*c_37?&D6~pNubo3xAD(U}(V)E%aLt zlyGVPWWL$@zx?29PKb9qT^+hzL0KJ?jk;Z-zVwGAS+FmCRAd5CdiLjIif=X%z zSkYg?Wc>e|n+Q`0uknEwJb(ZHZ#_`MWc(j8ih92Fe{?Btua62x;EM+{z>yLck2IhF!{3|(K>O@PN}{@h zBf7mqKto~Lr>qb5mPo~PpQx2WE04S*;+apxb$Ulc9|oVk1HBIK^AeD5=a6pifOzdg z%@4oFb$SOJca8uBNAzK6S~WDj)cTDd8h79$aTL0xq45_G9{fMB1~l`_zy2I(2(C5e z|NsBTSS%Uh<3O{Mpz#oJ#d{?l9IVjs3-EX$BxEZ=yMVhLIC>%HaakWL;e&)6WZW?B zaC4f(zb-cs&>4&@CF0$F8sULRC4LE{EeZ~QY2yPgdVYh$UjS5&l(2)Z@_fzQe4eR0 zOr+b5NBMeCz>CPKkT%K=&@d```vO*ms-U>Hq!QxTLRc{t4qkHH>&eg(Cs7*Mx&Z=c;{a>Qo?I*!~I*SK%_V&D=zy4=21RQ6$ zAPO0#SvwPyM0g+}usA*zy}Jw=&u9>16UayqVH0?vKLxBB(h`E?;Dw;(5vbnIV#rY7 zV-tY1mq0#!5jYjpQ|Ev*gi2yS4OP%&xDm|DhH;=?SO(m9$QbL3uF2rezJfTLz>9fc zBjAe_&w%!8seqRJzi9dY|9?h|0t3T~Q$K!z7EZWye=t6rsv0@PeLwAmfM;Lf~B(&2_=KuBJu+R*P zDI5YXUV{#YvvmMz)wKZ?vqv<(9cJou<0;7pPm~A*1weYPpr&*4gXhgBK;^PPHy>!g z(BdJR0B8>|2nvh3R=CfK!{Bs1Js)bsj~ThHH#^r(@o{S zsL4Y%0Z`w>6Psxo$fg05Y&a7;YfcGzExh-F`fX_IM!pen-%DJsw0; z9CRDx-)(>YF9gjSc5{GsA)G7`0O38F(@h3EgvxT<0n`&j z9NiB#;5e%UN_)K5Mde5H8;*b%%Co@(pd33c`z8r|e+ilv$UOOinStTpFShPO2VclD zA7VZTTF(wP22OzM*DRI{kp&zAdqK%|Kj`e17gM9b#fJj4R4##J#~f&>{LM{(r9`&7 z4b*$cLX^wg-EIoTZ>@jSFm?a<<|e>Yf-KNo#?tz&^l0nb=u*}0<1=@Hoc8@^<|Pmf zx{MEeG$UxH?1koJP%dMMi;qPrw_y%O>VJqp`yV2({s)-xh69v8pgwwW7Idm;iHb_M ztPdy!gL@v`FSyH@m}9vP6QAO3PB7ZnqRr2tj%&ekmZ+!xDo2U+;Cx2>37R z0diCyC>TK!(?GksL4AlekeQ&41z#3x;BmJUQ1$Tta&sEb?-x8%u=FNOpuGtlXm3KL zTP*1R_0|KW(vaFb;6$lw@ z_rZe3$3dp|#$^Qm7mWaiD|kb9hzgJP+0H&N+ebwtJka<+Xs0_*r#nYC8_4!257`8Q zJ6%*n{)>iybb(j$mFhqoqYH9O30L!rni46{!E)fi-EOfg#=!6(nA1w0!7Ox95$WdW zo(8f?`z-Ut;7%|TVlK3`dl-ISX*cM|qTXVS2dG^fS3LcT<*(^&`7HH$m$3K~ge0MBrN&b<5PEW!jD^eoYBJy`}iNlC-{U|D7N z!Plk7T_OE5@FZFsN<&@XFp^@Q?t`yAz~Ky3mgVbGeeoMoD8AC^NZoe|2r)#Z9yd)e@hV~ z1H%i^iJ)Z8-(!v8H+34_&7f=nxrK1)Cvdh1?F7rcF#8DRc7j!O?*^&sE>V$z zoIN88!ltBGg zL0Duoi-0}!8ho&X_0f`}-Of7T15-Mkbs(+T2w{TSUoxO6RF!UU8Qt9niY;(|2z0V=7O3eX0_w6M zb=UTQx}>4u(DJo=9XK(}1I0MFJ;a#B@Lv?vylTA-TBTj)-Q5OClC1|y9eZ6=3<82f zduvowUWkClxIxFU34u;cvp!rZp?!n-MeFVI^RFc!X`mCV@io_RFf9uzFML!q0wE)= z-P1rx4c2XSvw(D4>-xY!0rmh!w>1#7CK@_rAp`5sHNTMo9Tvft!P5kqA9xGC_l5&B zmduyI0v5Uj6Jjah%lHAFMK}%<;wa(E_y88#0uvG_;mddd7Fq}uI?hOoa0=f)1 zyw{Jh3v#Do_a5-6-`&TxKlTPNLeo0@{a~|1ovn;BR{eiu@K8&{q7g z431XN(DYUCZ2|nPmqAiAHAQgzk&5cJuUISI3 z8r{sjAu0-u5C3oe|39etBx69QkBY&6(Hux!*P6)Az<^|^6FX?5Q^pRksovO4ZT`o| z-J7#J?TI{1PqW5Q=P0nl|WCZP3fR-jc~Hvg}6uTil8pQ8@SnzF$eOIp|k z!v9|b2X-l_a?{`iO>2U(c6STJdJd4^L904o-YsHdU;rIV62->A5CHaO=!+ChtbrGt zF$dWK&{9zi)&KAR|L0{mpwA+KFOE91#M8)cb#_M0;4K^&jE-DJ3MgS~eC0Q95K#M^cSz!Si_JSL`D?nGE zXE9`aXa<#P&(%SJ0ltAG=*6j5;JO^X`y4f7n*Xuzx4ANbQvH)=09odgi?rLr)9*HwY$oEaGy8Y)@6nos?6YW~GoYS{X=L?DYHV?i@0 zhJv7u0^L^r!W6rsjQ@Lp_F&BfMUN~fAx{9!_H?`K0^N8j6BrQsVvY%@n&klv9kpbE zlz|SH6WQ5)sJDO-RR2NC6YXOG88e#M1;C3Gd0G#Yf{r|vfv4c_x1=vMA7TR~;tXh> zJp}3^yyb5ZWdwzF1K7#))xhESk`ZK4h>AeB$S$x&NS4$fTVey+zSG?U$tHr|Z%7|# zKEM(X^j{QWNogV|?QUTJS&#y@zz%A`0#Kpm0^(-)~Bv zY(B^dTE_*kphO3Bj#2Y*CQs|1{5=OjyGOwX-EGVg|5fp-R zz^Mr-B?UL1``>)_|BLHoAj=`?NfeasTvQ~Qe=v6M0eiGm9AsrTQ^0@G7|;^Be3RxQ zEZrYot2X~&Dh2I+7w8u3)&)s{CfPujAc=H)umplKJ4g2mklvsdN1uZ;LF+gEHqc(d z*0=m^$3S7u9vT+#Uo-`r21?aiZ}WpsY7EGD(F8iNcD@S8U6?r@wBJl2FsQTKpfleD zR{KD-hk=t1sK5w*k$^+HyFvGfgD;ps#VDv0Ht1##y7)36t-8G61uRIIt3gr%?A|%!-HN}>w_~` z{P!Di(g$L{-++~*&HtGA+dv0jhGjG$nZgfVF%3TY!uVS_w2BY!EK%|3EK%|4EKvb1 z(+TM;QHgl*P!DW!>w!`eP$v(X89|%oJAG7Kx;a3(F#!@2%GUo%_`@@G$-lx`;>S#gR@>kaE2C?>^L9!3Zk=j(57Kh?EL}Rf6`#%!8`Z z1dk{DVB&8(3C``HCQK0Q8c%Qyv=Nm0YE(qJeHp;Jy#nFMNV~g5Wdo=%Ish&_K}jj# zg{Tt9dgPP{^2XsV9~J+GpDdtpAW+uakXO#hzwKgI(~MSjfi54FfR>Y`>^nhi!`J)` zKN)vUX=N8EVcj{Qm0h4)7Sz}bv7#_9CDIwEK(;9Hu-F^JBVupyq?h zmq4T-Ep_Y;H2^K%ftVkFWIpKHsjwGJ9smD#hnj$tSb&`n@c(kJkBUQJ*o)`jD`zxX z|Ch>yz0hj<|33rNTnKw{z8&O%PO!rSAP%VQo&t3MNC|SBmL|dD5_Y8$EKd1bH2(en z&%ZB3C9qo-bn`pN5i%KDWI+vEkRwzA!(Jq{LzJX}Bn^-xEds+{xWZki6!xN{5fmRR zpwRg`%J~Hl$@I&>gD-OEoWEd;(v| z15W-K1>n{;LMeYM=r*@*UyeY~DhE)Ez1Wfb_kVXNxHqcs;&(DAt8w(kW`IVa6rdvz zp`cV90~)4}0Zqn&27$Wwf=4BMR8oSOe?rD1x?NO2{c#CMVq`uT09rBzj+-EOvhZ#L zj|&?x{|xU9QGvu9MAji7?1e5!wnoLK`G^K+by3?3P@M-$A}Qd6jO>+@AZb_7k`ftE zi?0Au+JIVokQ~R~GV2d`Qo{!n3NPl%fdU#M*MTbGz!yc}V~9aRhKP`dCJty0&JX|v zdjL4RnvZ~tfyEH0B!b}PH$1Rmfrl>OAq(hCB7e(%1_lQ3xHW&vW=J0#Jc-m2C&J$f z8o}vu6EJ?ef~7o<1!66wx33CMk6bt>Iq3f(8P&s(1=V(oNOdCk)LwnVwxO@#X}XuYt=3(@<~i6{XD z$V8M%J*X$n10E&kZ;gO-y%EQ(KsDY%88K{x39)dop60m%FUIGIkYg3Mom z$Ah*wf}#>M-eUoGLV+_VuDd@VtbmM5zBpb1p2FH-$R_aOHrN!I?qd*ZUvz`^$h)Yp z1VF|mKqq81pZE{z6@uE^9N@{8EQSmQ1_p;LX3z*pV9@^n&`E`mAOPJD8veo!H2Vc= z^u0K97d-o=(*42st?_}K8lYVJ@AK;J8Wow&IG#?s&ODCJJc;9OplezfI@f`+Q0F>O zE0La2%&;>2Q zVSyPHpoy_dRiODIljb7|;Nfk9pnz~lODKy!{J$tDIx=Jya0rC|7X?+y-wrc%gJ;o7 zxI#m-7(+p`R6d{?txza86m-^4Xs27k|LdWlp`o2^pvnWr28}ZPzuxPY5!eYHcls|{ z@{kR5Igmh5Xjq1UA}EF#85lzUi-M-;I^9yb-8eE33ztJ*n9lk8zuS)kF}W2O`a%&T z2HLWu0IKJqJ0lSDQ;*>DQ=m;sJOM8bhJ#8fmQFVd*!+|QXy_U?asi1S(0UYG9!3U+ zB3{s@Mll8khL;jg{{H9R*RW#>hX81~|4WW1fB!>NpE(0oZ>-M1P$X^}uFk+vF3`== z`sW8bMCHB5e?h02uz-!Z`1tRC==w{EHXQqrK*xr4roQMd<>{{FXg>YFGxkaAfBqKG zO{ER?4E!zDpjP2G{ua=1K!Y6ve~T9A20zH|AJADU;N$`vkT`Q4-uO zM&9HIwxT=sN%QajCBof@F_s`g2IT@?yaJD$v%Fw>{P%zJ56)8dEZ&!(-H9(gJ^~5w z^0$J@&Tz=&|NlUPPS*!vkYShqL7{GV;UG^6V_94YbGRYI z;lW|hKuLMcmBsYJ8)7;*I57Nt<_u_Xlmpb~76x@@K_Scqxcig-GeSZO?CkE#&5!;Ch5Zjm>Hg9Bzl0AG5@G)XWm*rE zo(0+N1+l&Le@P@HWP-!~2c^J|%!3hxqhajX-gk^>^XU;Uf5n*Cr05_`@m_WlqVf-zR zKtWjx+I4vY7M7v^10q0&Cx8lxZc|W5{=XLRq8_w-3 zfx-CF=Vc}0`&HTy!ptDy1D}_biuU%XJYis92n_x&x&yNLX8&uhEWsCU_rXPB@PE;Y zhin4z;JND;iQuaMSYAkiB!6g@f)vVv*hfIOA!>kP^FWF6i(mIZkt0|t83&ycga%y} z(~I{YDX?lCh-#jItpA}eB94LTULG{{kVMn?1~ljiy7aV!iGcys8>;~gMs*v98~?X{ z-&q4b$xESxxx1DDbQl>pTEajJ=l%zRk}+gVt3dYC{( z3TQkqy736eio@X4586v5o5h)7(FW?@`-6_5_h#`741Vzhd;q=3YtST(0a(%qEW*=m z4AuxfCnW5DfI{;R@B+8e09Y||>LiRr z+TEb`JE-P@x)0Q43f(u>fl^vzl;2uHni}_&n9IbCl_(0RoL7^{tAtIn*IY?lFj}{61AEW{* zr5^tSA0s0X0EtFWe1R^(3w{w+2#zIxux^3Yw%{N?gEeI>TRhmx53E22D&i|6-}tZM{^Y2^uWt>EdYksb3=9 z@H3`Ftf7L@s#K`?7gGs$mjjcHehG_BOevG`x3CvI5bdBdhvPe$j1R;?+r5z31l7M1 zETH-qG@hly!oUE%)&?{h0&48Oc=HKzJ~jtv&~Or{OmR^G9i-LL#>Bt?+CmJP{pIfi z-5Lo#e*=6(QDATu!;2s}@D3y!@T_j&i{_Gl|GQswxiT~#k+9L{Z+Xf9p5{O371(ZQSwN>|5q-+biH5#04yT9&4WZD&=1{3H)1%JlC;1?V(|ANcd{|voTz;{mv zy=Vn(xAai~9p!8i5cq-(WVw%uP45)&z0E;^0WU7^|NkGnMZ}<6p!tY`SEm3dYcyLh zfR0yV>j1|$IPQ9Fjpzfgrs0lYYp63^ z6LEAhzJ#|tnk_(?)P#kBp+vd$K<^gtX2TNRwB|i3pd(EgO3YvDfjE#oh>Bn(9Lx+1 zCA?iNU==L~Nwnmb+xx&}j6)Yk z^AUlDpLM0GSxgx@X6ynl9x8!HR&2UMR4f960zmg!zqqRp@}tOWA<+GlfdMb}g2x>> zK1sI7~owrfc^UFfZtZ6QuF?+PHg<3Ml2a{x8wUV#si51I=h%Ed)m( zB*TWkIK~EYCQHBzUWj{PLsPA{(asCyZ3F8Al^T$$7L+@Xdwifo0^P&T0=mT{=*2Fu zJ3wbkfbtZoJm`EK&*LFHnJibVI1=Kudo zJVEsVcoZfm?8S{%kfT6jq8=dQTMv}*f)Wt7O)IF#c+C&0O}a(E<;V9+%D=!Sh6n!- z02Qtxp)VxCODRADPv8P4I`S~&Rt|7U04h(j7&3a=Kr`6$3&2@cq+6u7WEuykHU$-e z0vR=+#%4weSWPu6G$;@0f*3MjGZ7)w_y#mg5gZo&qNxRR;9{?f3Qs@=NbJ984P^MN ztlMr>4|ln! z@U$H0Em7eqQQoYd^*^j5j_Cz2O!F6sfB(DOSelQqG#?RZIZ%54KZ<5ZCro zZ+!EH9kd?&$$Roj58M7ewxSt^RxSMOA{0H5d1PXPS{U)}cGOSqnxGShXzyRuq zYk}mm7~p+th>{}c)`8;;YM`NyG-d_{!PnJ*XF#}_85qLCA+4hSK_Q?<40ty% z_@Iq|7sc;D$&n?C0oHvN2!=Z~OoEJGZi{(l&%vJhCy$LcLO;9dk>1Vscdf9oPpU)c4D z0DsF2(2X*_Cjxt?^8EV$KL{Ks@Du{_MmZxqOme_#j|BEkW%&V93yTVH_<`=3hK8R5 zNNq33Ot|kkdRsyI0wA9JAIQ-=^~1ma|AVsr_qKu*2E1_E0jjWjdqw{I{~wt3A8OAF zZIJMd?$$5={{IgM4uj3`sI(pcEoudA*E`Mt8cyr&1(_H4Vs+a8|GiT|h6KHsp9b@9mQ0LL@dZG0|onyD_m2QJ>-#gumT>@RFti(!XT27XTfX?+iWfjI)ia6Et0sK@? z(6*#3p%=H$gWHYWu6F`n*q{9MzuWgp;0v>ppy_B1@PO1VhyrlAi#Z?#8qW-P@$L0r z(4~YNpxxhrFJ8O`8yWCoJ@|S6_}VK_p#~a{40v%2q5{<1f2sBMKYX+jGF}<*Vj0Lh za9_Il2n%R^H>goxDhf+N-(P{kkp=9e!{BB$$Y?Nbd;{tOfyZ}1os6*X&@6@*?(ZNc zNOJVHfX5pGKn)M2EKu>y67a%u+ka3yXaTr0%kV<#9mw?}y;D>`<_C5E$oe1t;%g>U zG0(RD{~-r&^{AX+WMByFouUG|UOgzo!In+n#o70u)8l(vR6u(y0$!|3`TxJS2i%?u ze6cVEg2@&(1Eu;Dk9+J0kuUR4l*?#V`@22 ziX45V+}&GLW-u`@bn3lM3V#sI9va`Q z01d2nuTj~+2rh5;sO({6U@-pH`oE+mH0(vs8${HB#+<-Wm!1KQjk+!W|94MOc?0TG z`>05O)(1$x0UZh3d_PA&sND+}3X;zF{verGpzYpjJ%x zhu|*3F1fBl-~)CKl!$?1G7c1(mrMDYVR4B#V7K)^bSZatkIDf?28K?}*P!M)52&ee zUmTn=LFugd2x!+a=YP-%P&|PzLLtrswKrlLkAQ*@68vXE!RO62zOi5fg{JX=fD8r( z1*Rum3`TzN zW>;`M+uNcdz|6o909r0>0~w1I&fsBYVCeNxVF8WwE_uKv@LCn*P>3*Sh&c@U-Mu_2-4}X28M+u9JD8kW4wQcD z<^_odzL>S<|9`OanvbwRT?_LJXnq!Su?S0DWbkG^u=y4-O#e%zEMl1cm5OxvF#QFM zQLr}rj45Sne!=YaTBG$_iH=|EfjTKzdFaFR-vgwG6Eu*)(t4o&ZSxP78usQNEcKgT zGde^!|6qx$HEumnq7SNPdAhhjie*8HB^s(2tx6@De=wEsb_Fpt{L(LBZTJ;a$_A<@ z7@+k~7n@CTcnOP*bE#mLA7jJMeEyb3(DmFu{Yz?Wa!Ocid`iW-+!$>NN?2?HO1Zn- zm~2W)>}*0xth#M~JY*BdxB}`={=W{Ics@`fmvI4^%b#%uiCdb!12jSrf4Iwy*~YLY z(#E(xw9Ad9-jxg{(%zNOM#e#{L&4QqrOewx(t zfi;w#hpMv4D`BzmE9L8QV+Qrwq2?POh=-Ogpz#|}bcce5Zw#0j7{Vdzj|5({K=xl| zShT~>34H-tO*jcOLt^^i0h>T@hDtlTKGzm~xQ679b6{~Gx0 zas~btH_#m7ZT=R}J;b1%j2Xy?78Mg_28Jw$fadd{8B6faz5k*UK5v=mlM93`*RWL2EdIx^KJ?iv9mzdy9$%GXn$Yu%X-C z|M*)$qd&baDk=dlwnT$#7LaT&XqA6>(2GD5@Bz9i%|}3{$pmIG1_b>NQ88#eP+9}( zA9ojkjtW&wYqn!3k?!sRn+!T+X39hGqW4GOu{)mER*>ulSr8WVUvvU!Jv77}VZD%* z-dRimFE$&2Mrks>fFk^bTQtZM5>P|ImI(%QhNy`A4^feU_}dv00icltP+u+pBohib z@f1=|MVA(KZvls5_mA!t6;SLoSZI|5WV`@%EE0U0;iK=IfEF7C^8 zAWjAa%zx1i(4JFfu%%%y)`Ir`u|XD(G#&vZjlSWMN#UT=U~C}y$t@!QS-D(>4>FfO!vl$nxDXvwQ9+VCsQe6g zA@=Yu^lV&E3-^Cu0_fZvSkasbzKw_lw8{dtEei54q@-?q!vUH#0_~-MboKrR>a-px zwSyU<2D)@;iwbCp50nC)aGn zP-2?aT%*Fm05ZQs2E=BwDis0I95JOlAet)%Jc|Kp&4DZl%laSiS`T!FDoe|OULO^f z60wFqR;7X<5jLBcQVy#JrJyCvY~2t?g=PH@d||ly|Nm|_&^R3r=+c1R*`NX21`E*n z#|-*i9*hnxCrdwcv%y>k^8J}JttU%(K-1{#I~f)*FuWG+KGE<{;M+~Ck=g;4kLJN1(PJ_o?oK2Y;|NKak;u zAG-+JF4g!3G?oiG+c5A&4|q}?G*z$FEusRxlXxZ{s3X@c25Qkc1$2tNkO1Gb#M6B& zuJH&+=V4H_2xfrFH_#$t&_YqriWbl?4;Oes9yHOw5f5Fg85Z#3Ni5_R3(%%p?l|KE zFsUs4Fi5ckPOYU{-KL-qUNpgUi+A(EF6aT@#<3GJ76~dkL3d2` zhNyT1f&30C4Rcq5$5bP_LsUWngI?6}f`X>kMI|QS1ycmbW{K`&aWKDtVzBv*0BH6_ zrkgE%rt$x9R)&cJ+cFxa&0uK0#1s_p;%^ZHWV5Rq3#d4niJ{<55$Fg_kRQUqqX=2d z;o;EhOboyq(Lu$SM)NU|7n|-vQu}`~@L6#sphaOEpaq#CLE&NlMQ4DEqEhH_AptKw z-vK$7rTP5-=70Z7*ux+#P*CB682p5cpEW=E(fGy&v~izzMmxJeaJMXI>JC&8O=)Kr z2nWs9LiUth?)70{0v|NdTcaWa+C>OjH{AS?IpFh>|ChnHOr%+ssDMg;ff7kb`cG@N z)GuXCJI)xx(0q_7&C;;+ZCZ1U3tvpHj|*QZH;Bz+Rl=OsX=r=^(gNS3BEiJK@Od@3 zKXtrCMTUt1w1Z{A|H~I2@NYi>GNrRcMGZ9MGX+8&Jou6+t#gZt5)%Uhh}L3aU}!$X zl-4;#1vKm3TcRS;yGI2yrHwcSqX(k3mZSL~4`>Cz9I&lvojqXtUZ{Qr-C}?^HXIby zU<}H6jc>q>>fRa^mKQN!KnFdPaD$rmjYmM@hr9QvfO;3fy)h~rFYbK#|35k&Dg$0$ z!2;T%1TE!3i#fg>VJQ{K5_?g!9~{5n;tQnaaCq+?aHp&L*o$wULAI1Ccej8=S`U;c z+k#q6B{H_4o=J&lme>m;h<;Gf+;{|RfblobB*X^>28I~^R?y0`Zd;p2Yyw%_y*(;l zK!=vEX=eu=zyMiN>e)L*1*A48?Rbj{=#JtTh8J;5z=_D_f62TK7Zr|P7Zr{yrU3X5 zF~f^kuK)i*M-y;3#&>eWLG8_AfmyHs$$}DzESBCW5Q{+xD+ttx0}Z0Hf{!=j-`=D0 z3e-;p4N${J4PM+?`u{)Ztdm|I&<%<*+Q$L{U%cS_51J~n>-AAla1ZRXdyyUja;606 zR5GX&z;Oj4!n!}Uek&FJc9;n=)(9G=lxAdLh&v40Gbr48pp+kcd3g!T3Z_zS@Jy*2 zi21ekK#AH4#u8T0GNubzxl#M=kJurl`u9taa=q~ps7&WR)p!zAthXNMzF5NC ze9EEw)WM(3jSs;^`b7|jt@)u0_o;5NZ-Hs1~jl<+k^1grZAszORMza3KGZ;}50|9`+v(DKUe!!H`Z!woE|AXT=Y>W9De z_rL%DcYvf}3xmLo5%8u(P+D#N@xK(_RhxJN6zZUQJsKRCEGrmGML@wNw?d#)s{7ar zgYTdKD&^1OeKB(q!}mc`6al?G zDmE+(41wS_Tk!uN&{-W8Fi}uFp1Jt{|Lz}M?9E4bnos|?iQ#Vrtx2$OXXI}Mor};d z3u;yOhBIZw1pUA4kQD)&-iml^yI^5~9H;puGwYYli&4Y}LpwM@%_ z5{ZU-&^$B$z7v5jigo}0=ihz0m=`3Q^gf9~s@exL?4=)$LPU4{m`tKe#^@#ejaa~T5zI>TgMB;+$NK=+(< zx+!$GsHiY9Fkn&p!W^OybO3Xwn@V?!3djlA6!PUWFuYs>is)Jna1R7LkdOg7lTbK| z=|%i5SgMH!7sZgqB6uRRw*?%Fkk(@O|3DM4m!YDdntbs>^jPd?U|;~pBKWLcNG$p@ zWyJ)d#-dynBWOiZKud?;iv) z0>Eh*bapB@4g(-@2-W#wyFW-53u+u*2zs$z8#xYLR4f8s^!S5Q5opNE#P~n=anPYU zJ}RKS=O)INxG#cEBkyzroi3+Bwnn}1>caT1Bx*h6%8z^UUWc|$bjO?MMVOe zlGI$#;$)3(SB@7^p!?H&!I#Mjys-TW_DNc29ZOng9amas9Z!6xTw13aTW6d=+Hp4y zMh4>p;J5?lcJTN$2dGUN77+O20r>DpmhKNPra`7e;|`w*dl9u9T;g+NF$TQYcjfPY z(5f0xuj0i;up$mv$pkU5@eOFYE;tml`bQ!ha;mV*3o&2tz@Q5#pTCF<22Ff|1_*0Z zL|%A<&Z(KA0+IrsH`6O4Zhf?inZGrbk%7TRzm(Cr`?L1{AUSA%K`q@uM7+f z*1!2%-h%2UNNNrU1GRnqhc%N#(BHHGk?7c;<@>F~U+?rl+d0ordC{$CWdP7qYOsv(;q59-o`Ml=;N_JG$M z#zA#DcJ+WeLoFwJ_kbCt?7e$bBtQdAkfliAGz`%d^g_c2)K%_vQPBwxcp(ioLZY_^ zoGAleX#4*E-{qnr-h70m2{6+t_|Npze!z`c;7+L>=LtpIS`~N@mgQ!hy!t;{p|NsB3Z%cHH52SUor`aYl6tOiQc#zhKo;s?$ zzySbWqYYYj))mOu@Jp}Pk+Iao`fxE(pU&2b(V@{F@c&+8Am{^vlm=Ym7bu+BB=ArfSjgeSQr?fb!ZlN z$0Jx*(2Fac|NnU?`VCZ=0&dv1E`y(5FYR%9BdCHg~8Hs zGT0j|p!JZT6FRkTf);@<1+~LKH#UQo9!&vfwxEE(7ww=jphe{eC?)YVAK_^^*?l9R zBp5VP0$wT9{vXtN1s%Sb^*}M z^AQcm^@@D;%3&|UlEF#jHK;;;!^ptU4JmK}gI?@m0LLyYR$iAQSjvK7<3g zDx&cSsAPkTvOvl@5D97hG``^htUQwtj30Hqop=!EkB0FZWlNM#FMQdOd`LZCDXVtKbyPV0dZ z3sC!6544{D|Ap2ArBbk=n(A{P4}x2TP)oqutH9QQ8i(##A}`uEp*sX5BOKm+>_rZE zfdLE5fgnpnvqWEnV(7>ce&K*2c;*bmiIDICjd*}p?SY$mkYFi=9##_Y;?h~LLqTI3 zV8?-j3);vnxwS%|R5(lI#odiym%HmMI&(47BGl9l8e?V(U4uB5+;%@;h zi)#R_h26jmK1D(TbW`gZ6#>v00HH5*ZvF*dd&&VCe%J<@aq0ml%fJ^&Zr~zBBq;pF zb028>lL56$LCG`>E*}x}!om$)L+Ugi0c|1xV;U(Xr-A~pe>@Vi4)TwtX@P}qy_)4`5{G>ZNQ z7{H{uZ@gFob}viw@BjQQsgU&_{4Ft{^&p^i^)AqL^=Yo)d16r8G!WFdTLv~zqIZhQ z9?+U`n8DEXfFh*@u+;eWG*~03B^vm`0TRLB}IU#sG@@!@X0$)oIX+JD?C+qoTmd zz|aL+TghUhS0Z8)Q_9v*%cxhv1=?8(8Ww!b0b+qVTHSNNet^}2y*(;#K)(MUX#D@h z{b}Hiu8WEaxQpJ!R;pp6S8CPe#t5Fo&@0vNas$nJYrw6Kb^ZVUGEBgieFsRD#kLAAk|Ghr{Z=794gM;1fCi@uXc?d65wOEJ;f%b>%| zcv^3VmDmNpNC2q@owpzm@FL_S$Oh23umb2lH&8Vi9@zckMGs_*0CW~c{PzoS%7>v> zihxdR4tgO6)&<%j@v8g7i-uqS|Hnn6)>xpn{z8id90HxZAo6fnx9J?v1PQ}&R?tm+ zpdB#(uQi`w4ETQy+^`Q03-A8W{S(wgYCX_>uSAA_`+=~47p@Zj|1*DRKF$PgJvATU zNNYV%`Xs*l*fBPSIPJp-OJ8_T{QrNU0q9z~1IJlSpl4NrP7Y*J0kzdxjkgEzM0oW#RYT#Sx~pg z#({r^8`E=Q;Nh)S9*H$$-k|MnBzBE1WsR;@uO&4yS7>OBR#*k=c-6Eg~Q z*ab3jbU+K6dBDd|f$lx4&SK1{0eJ`_@fm#V0cfuU=)UA$9~G0p7xV2v&gRKt%qT!8 zJcX(d6w@!tAPPYzt+gJ=Vyt5au>xMRX5@hMAz6PGVtucVica7Q1v_vH!XPLkp@UuE zg`p`ZHbEn-hL9E_bVb&GQ3mk(g%T;yU^aMz0I1+U16r;1B4+~FiQOS8I-oFLf(VGD zF7V1OhkzG9z^;>sYdivqdw5a+C5JPOZ*GA1x`QUbK?{kxkAc?D2!KXGdOaAs|91&E zv|K9vseQ1wf-(F>--2KNyU%yu=mrhpcmIYC&j){A@}fl@+~$@EeBosac9HSh|Dr2E z)7b*uOrWZ(2Gke#1g*Xh0W}G-7+yT&{qw*3LzXRkf=QzFK#7O;vF;ze;f$cJgG9iK zy|$neA=K6X|L@}N5^FxfV|A+ga48RHA)p_ln}gNGk}nN*wxz5M77Qg`p!^;1f(z_h z7FVeC9NjD{TMv}BcSE|Hof_Ra;295*z!wi}LD#BFEd;IN;DDU{-*^NR9EZE7fcvJM zRT1%QuY@I!obZ!u`I^0 zEC#2H86E5b;hkbHW|l%aAR>@<7`TsmH4N0WVad2KjYA;(#r6WQnQ`%l&p_q^!$1>w zpz-A_#*8H(V_uYWf|?qjdh8p23uvAhG}a&R;;c0|8h8T3!e11g1i1uMR(&gp%wov6 zp#ixVMDr%7>Hwv5XHW^%Rq*$JSon)%@bnuozN2CLh{8_8&IUP#KUGF;Q`k8<^wBee@yopl|QTu3}M|LkT-Ak z#u)s!zE@_{V69)m?rnXq{M&1l?qet_TnzqO-zeqH_yNiybrIlTa<;x#%A0WmB$5LW z0rwbsdsKcfgGP!Ebbu!NH$Z0C6d`huRdqobTRPYUI$FTf8vjMtJY*AiZPVSN@`ag! zA+7a5c<&a-;=4UylS*VKK&rDcL2T98F*b(yt`_k6JJ8_9X;2D>EXM;4OMm+C?|%TO zVRG~3Ur_S~R162b=;;9GN)=FZUk6qI2ECYi0DPORN%Ikv)&q4>kR1|@e}aPli>?5B zqr?rg(*Se=KlohX&X|rrFCJKe#~KAd_X~orCJhXFapu?`(8^Vfzkkz%e!k&_t6!>w)+ZrtS~DVT{MvV!97&Uxv(2c5!s@Fo9;~ zzk$2KFKpVuWhh71|DYEQ@BjS=^$5;@8mUB#S|Np;`01Y_Wg3gJ_`16?!G##qa{UJlAlU*RNvqVMa|Md)kFW}P?0y1PeK{eI& z<|8sMn%Kat1W8cQBLeE=FoLWHU9$7yImliSkR1vye*gLZ|AkuH|NmjVF)AuA_JA6| zEh?b>Uf>yZ{+1NbK3veXx1c_~L{Pws&VAstpwP<$%GV5m#{-&A*xIoV#o0{^<2lNeJu>2DMaFLW4S8=Kgq*bL7we z&YHPDx_wj%0s~&~z5^8uSqv|}JOd|k(EM1?i*^f8YEx^&0K5_%6xOb^tPygx*MRu)C{m$4xJ%$zr1jPnBxF8XNn4_VHFhc;@%sm zH;+F33mSC<9g5X_#3kTGDAQ@uVaA{iE-yz!y|BmgR66vBdD6q|y= zSSBF+|7CDq<_UPwUNn6%neZ3YkeNr=5P=W) z5@-GJ7tYrI{zI0H{112$){dBq6A1Vptp5G)-UBY|n?bkPo$v!4eI|DeR3wTt{)=K^U?}%3(da(b{GzU;&ZE>n ziy>oACrHh&s~|Nz@jJk6bf~|w7&6v$vI}HP04uo;Rw96^r2Cj|6KDsbRr3qx5}mLY zOuNCMlf@AJ!hAlcz+edoe=!%V6VvdVPIiIU>{$#M2_Rc+z_t{E)uP)1spsO4GdWbS z34j+TKvx1ms$|gO7tnGt7tl@*P~+ZB270nix0?#+-ta8Ofd8T;poM3CDuMq+D;~26 z{O5I8z#&j7_#(a$w6*6!C#ZIpdld!$Z1q@hr9h`peI*@`;s6RW*KDIfGz@a`Tg&Ix9AE#4uS3y3y%bW zHq&ufA1Yz`{~)}(Ql<5ONj%6WJgwhKS&R?7R_zXBfm~$p3UPfww;1HM0Omubtl-FM zJ<#c>5eGVMF(8XE{J10Nyj+I=qB)P*1mX`vL_qyai1(pOM8jYX+WZULm~&A9?55yf3V6X)pno{yEuG2+@W>^&2MCa zVNPZM8Ogf_6oxkzo`HtpLC_Rr33uTC3(ZGZqCrK23s z;HTHj&FB7u4vhl!&=^4e178#*69B$7Kse(+s2d*8>kV2&`d>5vSrup~1*9szBpt2~ zH2f3t7<@M{_&mwL|Dq9~6z44y*nI9k^kDO2abVYhZpV8DY9<8z7maz$25L-j1pF6G zfT{;~^ig$md&>kGe?t`mB`q*+2H*DpD$v3MUYvIa&$TLaADp=lbg#tsf88}IpsoL) zEi6#KU+=!f{Gsu;gA+eP9lKlOYY?MbcgsUIfx!P)!E2sgbbyS3>{PM-SMLlOAt+_B zK3r?reOmhjBw4=fKBs*i^L~wh|5w4Y<1bv1ji}oT+B*w6Z5(udxJFnwEJF2vfYRVX zP;NB--+Y9_`gmzjXN?L6^wDQIE%L0-%8z-i$Y$>;f+od_g4}OSdS<0;jM}Fx^?F&{?MgIY6qjPUXMo zj)!al;o(_~;hk<0kdw$e-DE&Zd76)C96ocL)dxC;11{drWO2NRoCI#XfHqSd2dxZa z==5NLNS--!20S7MT0Fa7r3a;QmMVj~9#dz#eP<|G(4} zGJM~CqVeJX{|pSxKS9^v-jn{;{LHWU7*qGLfES`$z>4FcqpaY7_;#4HgcoudXgK6% z^em1SIujs)T>%>Bg@kuBv{Md>t}~5q9)QQMwy4|z4b|-h%}X9A1ubO*i9-`baA-KF z;$dW9ffx_ke{-N0x`_?6hh>e*7f?C@Z58Kl0o?%yTG|h)C&8Y}`VZ<5DgFQbzl)<= z7Ifi9^AUlTlieRmY$i0=ah2+IpVK}8IxG~dIuO+4X+2O93@#Ey0+OI3z4Uiwj&^-^?gt_+ky7a zfZ89;cFf@=(isL_>;f;MJ-~%n*bAqAu%AKeD-XY5)dhFfP;O3VDY*r?Ii02CBIM?D zmXZ^Y#f1lihbb;DaCm@skCA?6p!Jz=%gag(IAsXMX zfX^ENt#J-Bz8%mRqayO+x+Zw}3~25@>p!R)nG^KlF-XisrKI_Y0BBXj-V3uh1j4&P zy+{d=ij1HaiCWNQCIz7ZFSdY`hp2!yepK}KsDKXS2n-5%@wOTi@}TQZ6+nX(0-)JD zaN!&bX`l!H4~XgQ0gvhic7J%$2R>|{#riXU3uq4`xabC*DFV_4nb?LLIkZB6zZE)M z0y+&JW;Cc1KfC(>|L!f|6DgXH@N{46;&ABTaHP)!8_(qk07Q%xz*;)TC5zZ(;v#X@K`6z4S-zT#;1o(Sq{QLj^ zbrEQrf{jB7Cv+wE>&Wg9m4x8npsfaZlCqcPL0$N;ylHB3ue~cxp&HtE6A-mGS zsi3z<1vD2Q*nKhRe}GLdWLzH1KJ;l9Gxbh#Z)gM!6)pq zbVJV60^0>i>mai64XB(41r$$Mz>9ZkU_XF1D0lNglDbULiyt6S@T99i>w!AZsc$YS zA{i^*vIzvdxC1%yy}Jcm0~+6M1+AIl;O}bz?a~eJ{@;4Ll(Tyac(nJmTz3z6?{l}w zOz_OQ4A_jI7c(Gcbg>z~Z8=b4-*TY)Ur8Wz{~fq=4u28)@85s^?V#iOyKlT$!4Aqa zpf&`57mGae@0J6lH@ag~1YXO4NN~j*3R-!XQSgyXAn1i9#Q5%Gp!uW*yO`2E@J_p! z65fWNN+qDvtzuhFmPUdqoj}kqgF?^?Hnso%yWAK-8RVavjZz8dKrPTlIUbvsQt2)? zMmHO!(l_15w2yPa)`q12|wr zK!XRML;xyo&osZ00M#ohVK0i9!O7Ql0w~Y5_A)RqgonMbWd=?2cDsYlYcl@UdZ4Zx zG=ZuS+N}$kTJ)x4TNfi%T8g`sTPh_$p`6{XY_iyB%0wuLdP! zI7YgUP5^ozodE1UIxqu%AGQmq8*KaL-~a9y6@%^)6^(B21-;$iJLy0L+-=aYe4s`> zsMA`)+5DS{zjZRG#B&pAJ;2`rUi<83(0ZUGsu$GeK);GkwL8os2zo88n*r#iY{+fD zpqsJ{kZ#I`+)`};IwaW7CGh`su(s>R-3&n1cDsoLAkGgf;enh^(#_H7qax6p#_{*K zn+Ql*>uu12dlvqdWnlM7fZPY#Zq@Ck(|VvJwL8ot>p$o+0Y4pZehNgpHBYrW%mMCH z9aN|4AURbBbQvD#4({vSel}pIIs}0(*VX~Kq1#O&;KkYRpsWd+02hJmA}mFB^6%qr z;CrUJ{dl^=IFwJd-tP3{DFI!M20q*nbR%N7kBS87!n+cY?*G=uO1L2RL6v@a&C<=# z$p|{N-R9DnT&6DhpBYC zfx5ve!JxHn(z&3LSD^dHYkP=HP{0fK9FQ2ti~5{@|GV8}S`U;c2E1Ux?-k?!-Jo%p zI-c$@m7o`9!`;rHo7Ck3Ua+hHN5pYwA5h%$e^#go~9J9oO8@{doOXMJ_szl8C zLkS;*UHSzg3rb}W7I-}y2k2f7PSD(Nw}Z%Qp5`AcrQ#5tMC*YPo^B5o(Bcp9b>EOi zCA=_#tcT-iegoPBUZ(`QgAcSuA)}#-T>x}A*Nc01KqJNiU~SDuBn~(KU2Y2W|Zmf!!_~3b`}=n_CP^X)P!MvY>O{ z;Ni2N|Dp##m*f6mEOmkuMCB3R++sLN3%lJcz!!_UKoe|tm<8hI^o@}674_zHj>E7f z-g?OPFNmUM3kA^4=`lz*r*j7FNWha^fuDwAGxL6&3-W~;N$pTvo`-=D^cnWvw+tK z8jv#Wp*$$1v4GB_i3Od94{p4o-=N<7h6hxniF7+lbbC8=2it^pXRw5U);xf#ZP2av zogpd`Q2)sUAYEBr8sA+U(fX~sI-txL>`Rfru<%e=p;5vIibw4a%s*Pcl|Oh5y=Sr0 z+2^qA@&TDaVLprkt<>SDxg=%DdG@O|i@as_tXC#=c`uMm78 z{p8>OE*}->Ee0h);2R7|yr4JlPWa}=1HKR41a#`qW$;axB}}0E(0L&Dq3eJLP{8-0 zo3(x`y?}Hb`bBAQc%oc~eg+(Pp`fH8(47am^t;o#+f4v^Bl?Sbe?SYd{+9|tl3+JO zd|W3pq~r&sZcxQpqTCgh&>`5I7W2KkMn%Tazx6<8jfxD|Go|1&<6@%^cZaCRfRlwp zK({MP5a_rLP>KXCvH)$R5$R>I1ed_A|4U$6V0mCQXdjU+=-jI2BP{=~gL6T*TTJr_ zmiSJ$7;p$5{(rq2RGD`QgZH-~7l)wxEJ0!Y;>aU#u!08rza8WNUndI**$VKAFXa2s zdAmU&_YGWN#T{-=6ZqHV#sj|&-30q}=sZj%pzF}r!mmS*VJShr4&9BXJB&s7M|jW+ zF9}dP7kbepV&VYm>MWKFuzN*N+*?usaclu7FM~=cr2EhXN&~yxc#NU@fa(kxWV=9CHowsUE&I+&d2y&3+=A%-@S*~8#RO=5 zo=10xicfcqii7d(PB)2e7nK0etq^enopCXpbt0X9GM!-xoo*_faRHriA)RqPopCIk zaU3tEsWLEhgReWc{tdadq0>#H#3dMXM?>)c>%qan!JTdvAVwBraHpHg|LfqHgW#}? z2mR2y7=k<9JfJs@8~g{~U*7D;!StHBGtR&=M#ZJX71b~kxM4Qn>(B*)g2OTnOh6ds z@c(M3n@+czK^EvDFVKDH&3+s#pd*pcv+#dcXs8y&EV+gNw3K+1CG{rW_>xOE}`=qQUx%|AVjS1+5T02I_H$frC5f zzvvOrl&6b|0O&O91N<%X85kIBdl(oFl!uhK*m8gv8YR}Yp!4&K_-vUN7#hlSZCM!@ z4wR^YilpOAVhjuiy8piH0_l?liM!aUFfbe_duXc$(tHcz7;dnt*XgXq|NqMIUHi7>tty`wE34o3qJ0?8dx+UA5M724IVK2C8N};k?Ed>&5?ZE) zsK^{=09{3LoQaEp;Xw2G|J`iRF~e>@j<8Pd7amoRlzlutE;=^y@C5hiYyzRv*#zXL zvk4?mXA}52jZFX)oM6nzLKnb9i7m{aoD0EWSv)T|Dj@#*@M0h6>HrrN&<;hOPPR@z zmTpl{+UgAB=me)V@Wmsb!C3jQ7n4A0!IRaX?jKLU3&qc%5`v}EO#`fq<+uarHW&tI zLWWp(rtysmD+5F5ix80R9u*VNI&Z=5H7Yu+3=E+2c$pX&0)j$cq=HZI;{hM}!%@n+ z1C)eg8;^kW9u5W_gA)MSdJAsAfQD=pUZ{vbdKRK0pcMJR_`ps<(DJbw6`jwkyL(i? zmspcYUlaNI>D0yJ0C8KRQX8KRQW8KRN{YF+Sv?xl%Q(da%@!qIHW zT*}<-$kN@T;sH7&>ty#Wm|!GG&<8Bo8KNRk!UIyv-tEZ(YSdXD>b4aC9d+fSl2WPy zZnCL>MvB1qV?sytCA&jZKu6$%MnPZmWHDtiW-$bY1%&;--dv-S^1l>*9>4l5u;)M< zHDc;OwHHf3Mo2g4Qp&wsKxMhW%O{{yihlp^)&&iFmqx!xO$0R@7)$k=Yg9xSOEnM< zC;$yIfmR|w9RbQLa7P%yhSOQV>wQ6!J`4;F89v?Y0{^dex~OEl7JxXj*GHu!Ff2Ii z|MhMcm5k=o|E&+hW~~BVRLlgAD%yZ94h0?081`aWE!5Q--JnIo>`+(hfp!SFs0dge zE>(ir4BGah6NF)N4wB6kkU+AGQOQAA%8X&DA(dDO193eETIRIe|vaz^TppM5$4CjY>ooXsuxcBLf5XkBlE(>;ge)$6Zu17#KQh zR8n?>vi*ybf}q&pd0E5Az_6PGbm}bl3iYJtpao4TBHcH>-I!KaKDUF-sZFQUNK31s~T zpTzXS8ZvVg@Z!>O@bW~7?iWF!FP4h````To)DZ41vH0J7M8Nuc86RXkRKG;r&-#1$ zw+1`?65fmxpgEp$Jy6iFXn%JL16_S6@uKbcKhQ1}kgZw&yFUbmy=b}e?|(O6_Y@US zf_DrH>g0QoH~|!?pwScFj1?eb3?RmUjwbrL3?v8IP9fS2^-M+&NDU8I4M%qmcqtiZ z$a#uN40zLFlfeJ~-M$RXM|dFXczqe_IYVFYXoH=GvH|sn7FY}(N*Uk~Vd>tZ;s7d6 zrl^2YUT=>IXdQiEcu;SPiV3J#dBN}!yu3bz5wyG>v@Edzdb(h5h>8KYKLu(NFl2!b zxeJtNJy2=|YXvU_?L^uFHW+;3XxNL(pzEhVyM_b6o27y>AOrn68$oW9cpV1Gc)Z;% zDg{|a&;cFLQnQQ>VFrf4|DrCS1s5SIB|*?BM;DcX)&t!=Dgmqv44sVN3m7Vb0$#-Y z0wpfclmz%lv)&f4uL53_fI`bfC8OIERC<6;J^1mzggM~!;EMeh-Lil~AmD}TR8X+6ywI%# zjd6s(SXu2&1i zbmR$2JI>6+@L#k6G>iEyt<#yQl-Kw`r!(X%+BopZk}VL=fDX4UeH!*(Gy|meK#30j zeh;p02cB+&?u+3EUo!R9sBnPJ7;1jV{CNqelN66+Oa^EH9r*uhH)!2j zsVZc29CUxNNNbotsm?by4#rZcZg+;6>HJ@y!*jrinkOua5!B8umztdr=hlj*Ee z>8#T@?k1uPYU*-8!$lMncHLntph{dLqoo^k^`$6i5+sWa)CsT%%y==2L*RuC&)@$U z72WIt89Gkv0s-NjY%eUq_r~ggI@==MVnN|AG8{l@h$Ai@>V7tGNuFT?*6@N0tQ>Ti zaH&W)UtstPOH}2SwK63d-61MsLH|XkfWpQ{MS_3(0nokM9U!h)K({OCcJ)x1<|6_y zJD{oK%$Yz)xTjtOZ>*94B|>nP105@O0Mb(^-A5jVjAV4@sK|tadMVwYRE8FISq!1ULH|W(fSeg7 z(EX$N(ZAOJonZpqhe`}V>s|s^D1aJ0peznfZd$gWo9RlGLH7U#WGTLohub;#wGy~H zCl4Zx|GyRwcwsaVQY1)~g3lIK>0|^odiM)Z#R&?LlaP*3Dc^AhXo$puM)p8~BJ$0RgQY|wAWPsy2WXV$2q-8x zvP*{N0&6Fm9`)`l} z4&v|9Za;x8H;(3qe^)Se`hog58l{neSxPU&VHTF8b%!#*%n$m185B^U5$EnO(5cv< z5qP-yB}>1#@i3KG7#{#_Tm~&+0G|f*!kQDDOJB<$X9Q*5*CGKgUO;yFy|_^P7qrks zqmu~~lCBJhV7%OYJU%)O>`{2if-t~|sr5jq9H_)H9_o6oo2b=!;BO zfHE$KfGslZ_TvfcWcx3w0vcSlVIo|JR|4K=XzmMfES@K_LJ&2kcNN0df~dc-HH%|DqP476PaZCt%CS!oa}a zF3iZlP-4`5!m~uolfM;o*#O9ypp~AWMLCBAAotjF1cG(jfL7r`mbHS4=I(HT;86bU zH?sa8d?66j{Q_EvmxFd`wk!t~bS^3~p!GIxpbJ^cG+Muve(4SufR3=nMni4*c37cA zsM}4T`N3D{yk4i9z-x|ghdD}^|GPC?;r7WT0SrW!?!R1_M zj*7qwv$LS?K^NpS+2$i0D>zEI#*V=%lBb+1b4^rDBl33Cq?ukX$1>7 z4}-?#*%%lYUT1(#$4KwyhqPZ{#T}@r62@W-I-XP_5HwY!16pmM6BKaV1-u;=)Wk99 zbWzdyFFFU(!UCN>AOK$VBi0=z5Z3(YUlt>%_CYj*a#RGq9TqAPYCg*XO3GZ|wonOk z^I4|Wx6vg$-F%^eFSwYXwKupw2lEarJv6`32n~a@z`B2cd;l7`Fn-&7?*EIAC;$Bi zmAeZ;bquI>IZ(<8nhc8tE%fbnQLzaIr5TUj7!{cpt&nr2K=b;b_-p-N%F*qj0-EcU z?)Fjf3G6=J8>6E0A`YPpbT(5KLlz@wf@KA$Qu)yQ?>~RbHPGfXhAhS~NMk4ie7o)o zu{7|;>i|e2+b0Wjm90z=Xn8!SbOc>@IuCR{;{X5u>p{CoVS=FfsIV6+zkpY}`t$4n zb#|MNuyCK~bQkIL=XnXT49Tg&Spwi;1cbRIUZ5f1)&te5&m!v2f)KrATH zK{zA^j za{RgoOS>UM-Tr zF2KN$0a|z*_+J!MZh?AUJdof9wH;oAZo~s^Y*i0Kj4LLKKOi~ z9MB%1pcm^Qhy6fS&o&=%Io$fKL>=tF*PtQcdd33&RwmH34jD2?4&-lr2da-kR6wam z1k@i;0JUTaz?m3wkZ0?+QW3D8&=;>cKu4J@L7IG2)S8cQ1VS3v{M#>p8vPCdFU~WAcLTcw zhQ27_09hyiI^#h0Kgb1}nLq+8uY+5^mH0yfE8xXE(Dm*mDhZ&p`HjEDlaYY|G&(Xp z3si)#1Z1%EunW8dU4h(C&sfagdKI+oBjX1s(f+>-jx5NLn$Y+W0Xf3}RJvDy-Ot|& zYMz3_0;DJO#eH^=OJ;(d2D;7LAP627N7%t(VSyYLpab@h!h$34HJYY=h$b`8dIDHj zoB*wMbqIQKnCU-gAEQe^=!*>S`aE!02>t`PU^yc=ERf@!zwI07K5HM9n2aYN{{_BC zdJ1mxftuo=q|sfX64UyvL=zTt$*o{BK*5!f2@S3@;DNl8^Fet| z9!|NQ#gK7fJ)6J_mA}9LXE9_1tY;I*Xqd+)@Phd_D9}XW;~@PUklR2QocF_wzgZtE zF$Xo#173JRZhw4n$qTd@4b=GkFACa>_Fr@Zs2TzHhyo!y3_DFhRad9!n}r+#ou(fa za)5TMflNi<#y3+K!B>t!g5mEWP%JD2X)wOse1ygNFn=qksTG`2umN=0JxBsnL%vw@ z`!{F@PKHk}Xz})h2W$e?hZlov<8PVI0y-iZw4XA=r5DugzP1=NCII$Hh7Cjn(s9c$ z=w%lOTpY20L*W0lZc&i-42@oPfuO~pGXMXz#h_XRqE7-v9|u?;s8oRK`_lu`2O69C ze{FHj0uBL)z7IWM7eMWM&;zm$R5HQ!T>jTxG|F12cuz*7#qo;=*;#kmVAUOImTEO~1 z%|^Js8n8Z4SN#9A#h?Zf#J&;~`!c}#Kz&HKK8AN}0zr#G&C~za7K0iZ5PcCS`h39p zKy7KbJ{z!opd|JG+G0=-AEM6yqR&zm6s3!IEZ`8}Z%JZeV6c=0#Ug)87?=%;KK>Rj zFdGzy{4Jmh%PeI<(ZkaW`m-DzvUj74T=Z;mP=qZDAf5|j)B>r;O1}H1!jZ7oWErqm<oGsp~>G;2WEqUk-r5rU0^8-3QPW$G_W`*y!nRAJL6RKn2?2V5Fio_>2CIAV``3TSAU5cJ0!XI}RQL;IF=Rx5%A6NmGr_e8xb8Z9rumJ=ixUVf;Bgbs z8eW9@TQk7wL7R0nK+QsjZXXrUou?+?n|)0{eFmGrEQTNuBP9GqHRyO+$UWO7_1%6f zpz4|jJYE?DIqV2DUg@GD695^n?D_r&eY~<$5>#`5$16p<`9KFcZPx~gaDe*7pvG;t z7m< zaG6mC{~$pkf*B+#&>*S&h7lxX5`X`L?ljYhi;V`m6<*O>|G|PU`oSxeI9{_KV+Gm8aGVw7 zBv5-{2Z-Nz1msreKnOHOKy8}V17YE%fiDWb|A(g<*FB&}09~7bJcZ>a(p{s%)9J6# z9VQUeStkM+=L-jC&46w;UGp;wqPjz^qQ;NU!#))JU0Wf6JlZO?dVe8j5iJJ0x#YQfDC2{H$H%AKiG$1 z;Tc~RatQnvjR384s8Ip+USMNR65&}40f9kT4F5$fKqo~(N`X>gsE&|_Y_P)(4u5k| zkzp+1?q&~o@e1r07U(`HWVN8%0A70U{)cq^;+g-dp#92Vr+|rtHj6+Pg_Wv@b(@xe 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

    SJINn8LsYUV#SUi!ibYNHMYr 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 literal 0 HcmV?d00001 diff --git a/thirdparty/python25/DLLs/tclpip84.dll b/thirdparty/python25/DLLs/tclpip84.dll new file mode 100644 index 0000000000000000000000000000000000000000..f71915360abad761c2acb4b99c3fa0220b1666b1 GIT binary patch literal 5120 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 literal 0 HcmV?d00001 diff --git a/thirdparty/python25/DLLs/tix84.dll b/thirdparty/python25/DLLs/tix84.dll new file mode 100644 index 0000000000000000000000000000000000000000..bc6309e5c891f2026ac69d0266b9fb54147f3bca GIT binary patch literal 266240 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
    j$QW+E?JEyP#nQhSwa@ zC!25n2TxT$=?r}Un$ay)$zsUp0oef>IY7yNkc~<&O+-OWa65vCUZ*+&= z04*WD-tBt_vV{0L$Q_|Kz)Og)fkYuoh;J}8yWU}HsJ#Yu2Pob_?f@4%p%=PcFMubH z&oGplfyNX=CAwL}jBOsT7y3ioaovuf^ zeUE@b=y12|2}lSX2D!}l2snfefkYu8bcCtd^#oHx?IEzsKojsFmq9{kPj~2^&d?pr zwL3sA11%cApHzZ$kK&l+q72UooI(?Tk*De9M z3^Z~Lijcr8M$pDHq!F=h@Ipl7Fv}JOU0n!v*@6oommy+vPIu@WP;Acb_FVvp&DkKA zh0X!T<}8pXBsS+THM=fgYN(wBb{VKJ1cezSHm7vEPU&==&|EtKq zOwF!6ObxYdV3&bf`XHABqKv);Vz|!`h(# zKLL3Lo)UT!z>Wivpe6_SqRU>8GDwpH#0Pn1Dp&!i$q@%q4^aVWa)4x*np;77m>Twi zq`{tvKzIh6TBd>ox?4eHXKM)9GawS=8RV41h*A!02d}qBPC3&B7#Lo53xGTm@c;k+ zHz3cz6HluT*l{4TOR!_AH;C5?Qf4IpYCnPaAkXxI6$CPNO!Y#j2mrUAKr&3tU_DF? zdqL7*&$u8w15RMQAc5|wAhL6+1K2Yl666^~GGheoRX{2_UV%3YAbaK%KLf+def%KL z*!=(h{{zS~h-3yjh_bsCM1qo;ImoF~LCPS>48#X{2BH9z%*+rfAju4*m8rQEq=%_t zFGw2f83Tl8AdOm(KzA>Q?CjM6dj>=@l%|8HG9aZ5Xb&9X)~di4wHW2#Up`Q6_NNd@27$l zfYK%C6pn6)3P`#H$uKpyg7h#o>;*}KeGj^U58QO*hHPsA-`Cd-zR0h$71Yvd-U}i@ zzDJ}>P$okz(dseE+W))^po2-fp%oe^?vXY4VQ4tV%fRsR5HHC0BA^I~Laz0}$ESDq zf(}s!C1mg!LCPS>48#X{rWdRLl+30fR6vp$NQS8ytcR&#FGw2fnF$EbK$00qpnEEa?3~&I z_6&#wc?LO|p|<`u^P)GHKs)$fs)Ie#@$dhC3y^0J$*cwJI1mX+X3ZepRFE=AG6V5J zo@oUu041{~gbGM91IaKow}SLAHS7gRgFRD&@C+oGfdsmHL1brd1=uqn666^~G6U5! z$hGV<@O9(JF_Xs5!0hpAyNNE+;!5QJwS$qXdWJrzWDP6e&=ZQctaL7qV*GxSRH4o1wJVFk5+SV5lg z`S<_756Cl!Waa^O9Eb!ZGj|YgDo7b5nSuBq&$NOSfRdRTLIot5fn=DPTS0o58uo&u z!JctIcm|TpKmy&pAhNU91{^aW666`=WQJO4@?&`BKMMoH%g-zz&shBX|33!g8ALKO z0Xq&vf|8jrh}R2J21#ZhKFBju!3sdh%m|?ZlFUFdOwFwzJxmRILDFE)=pZ};NoF8{ z?p6@l*{T8d42T4I29eCrD@`YE^a8*L^q3p3sMG2W*|PuGY|!! zWcCfA0+P%?TA7-`Ml&_+1xbTF^WiVNV-87XAc5{y5ZT%K2DI>GFNg$r2059b_GNE_ zchDkx<}_%8d_QQgyY{R1n!Y^#<58AQI#mL^1=_Gss;4J`B(NV_;x- z`3XEaf93E0|1BWTAd=Yyu;V}^D4CrH@uq^5L6RAW5AsYaSOF-RokOUABr}ibJh!9nkf?m zZsbA-UN3;=%8r0;AA*i^g7=-*{$K>{rv1TG2XaaZX!JQ$CMY8V!~n$tR5R2S$6Z02 zLK$A#vw%9_AG(?N_i=!C0zGJcr3@MM_2zG%1)7a_eZar1HKf>hATIp|RWph-#i2^b(BcYr(!^6?T71GkTTnHj)E#-E@U zv5+H~K{uy>uhauwhaL3d`&rO5B?st;5MK%K6bZ*M7XcIIZje7XAd?yr-Jwr9MLJ%? zJ^CF~#!LYR7wGP(58Z;$C<8B1orvxO@WPnTKd{~UOeK1tW7j|q_mv6ExB_B?q9+_! zn1V{OEYQB}z!!5af}INT0C-b0Xo-5@3p1z(LPfe=CBSR0IY4W!nZQ2cfJ{_Kbo)N( zOiWyf9bya2o618AMgjc(r?pz+n~-L7{aL?L7O z*k>8Qm7wdMZr?qfzK~f4dC=@WXlfrcnh!eusD!^e^aHe@ z18<9Hu6@H;stR@vQs^;&rs7;dOZz~ELRWHjyS@Q$nhAZwAh7NYgFx|H1_6_I3(aCt2Px_%UN zpUn@)PEbw!12jkS`M>LrhT6}dQ@4D7XoJ>4z3C2p13vlZPe6tZIEjd$9JvLG+T%^2 zX&lfRm2Ov#;|<^iO`t0B9B8F0=$Zuwkj79El-nfb!D>MoL6us!FURplkVcRxFQv`D97<8n8w%f-L8KEGJHU~d{Nyg16Byq z1-1^^ov%TM0){~KWR!py7?}~g+y-|0960UF$jF7*B|(q zUSHr@>`yn?r=VSRNIvE01g)M0tqcOSKA`7!f%Z#)*8hO+F5qc?#8|@gItF~09cb-h zpiWT64p6%WbeJ~iEQ~+hOaU*h+yx!cD$)tvO|P4A1f&GA0TaAjV1fX+c;x_1-@@(@ zo&Z`X1ln+h*aQPk51=Ks;IpTHfVNFO0v%NYTDu2w0_0SGouCYsXlC&K8Sv5KKR`|h zggF6pbPz*{ZiWa*iSG~4zECtLAc?`8;L8)3@c_IhjOP}!0OE>h(D}4~pyk>GP|^jt z7qr)!r}-3Px9gA20G^D7ub@@6Kj6s~X;&O*Jr`&%6)3I#0UZbnX)1wBNbuq)$Z8V! zjzF;gLB%dOBn6mD6f#1hnFT<#y$HCe1zMc4YUZ>N0&+D^*^ zsxbmNf?iw-N7CCJ`lj27r}@D@uu(kVt(b4XJA&Q>W~>1vwNUt>y3l>Jpu1T!6u!gu zP$J~P$0HpPfV8~9;SEXep!;WB$$u#_ldWMIa3+6quuh`a>doC!K8 z2UIUPu|QY-fGcqHV<@3DSQ)4X0S!^GTS1dC&^9%q%7-fU>~;MDI!mTI5OjPA=m3Aj zDVG?ELFc}MPcs8;HHDrz20da460#uQLCX^fa1Qv;Tr0pA$w+5dZOl)AI-L zse$}tO+oc$Yw0S3{SIV;P3>U zj|DnMn^55Zb-yS$g+OrbMgZCkW7R`XJ7(Ctp z+6VyIwfp0EBWR;8m;*8&w0sAm2DHQnEbRN^cq6Fw12!@A$MGgms}js{{c*ejR4afv zAZ6eMOQ7HYDFZDU2g`tzfl6R72c!(%1O_PswNSt^AZ4J~1=XRT00-aG2j+m3fmXH& zs55{=wE?sX7t8^f20ls!W+|v(1DWY zeSh3#{lUO2aCauCMFUm{T9^sCB^j&`bh8wg1G372k%0lMEA+=*)(;?Evm!u6FUaXW zj0_BLg#j=Q$m!tyFCYhkl!13DfjFSJf!vV-3U}xx-XGn(J-3(zIz4Q_E&&~T2X%6H zM+c}40y--2M`ss^4NALE!SA4@^yq@Wu?fD%CU_s4;C^Jm;|(uB?tr?x5qvK8)dI1hD&@y9ixPsQwf^~tym4^|k3uGP#NEl?e>yNvv zU|lmnZQyR-AB_hS7#SD>U-)-{8qJ{7EgKKzFfuR%y|9Ifxc*?RU}Rtjc%cIo@cj{( zk-*9*kipQP1j-|z=2bVes0Jn7<|6_b4WPUp`XeZVffbzTyFI`QUO_EJSR17T6!u3% zKtbXp0BTQ*G#>yRlrGTxk|_{$0S`#=3&{Rgk=6qxGT`P92W*H0l=Pa9uz*@R46g+s za-eNuUOJr|kdhO;eif8SK*AnA;L{R7H#38V#2^jWj0H)cmOD>3xaAHrIso-5GIP+N zq%Ti*U`V$s4|9M_w=Yj;Ab9hjlZ`biC~1{=g0__f+E|Ouxy39{Vhvig4JtQXdAdDp z0yAttY|sXANXs9TO`4C0fV7B$baw{YfIac@9B6nFw9WO8wTBOXi#jM5gz|JZff8o( z3DC0M&PEWsJCvvK5NO3SXn8lQ1SoE@7_t~M0zmeF9O@JF!r>|?Iwg*`g4VWyk_>2j z0*DP-qze{o-V5R~@%Qcrr3>&Px`Pi{K^wAKxIj+qY>fdgrU8)*CEm?@K@8>+R&dj~ z8?GL_tghRY=XT2kkW0EldG7RZfwKJz(EbR7x=^0Z7B0{+{;z!@HZzpUgW{zFq$~R* zS2x(8gO6B24euTSkV=R;#!?w%Q$TteK%R#h_fi$KZV2RS(0yExn1t3F4P22dOX!lHcwC~QFkyWoX@;Oi3{7)rp~eVrUY?ORai z4csQ00CwFG@aEpBDWDB1fes*ddHBHVNl@-aI|p<|-G45*e^zE}&{0w4(*86y~r{o^G%&I-Oj= zel!4$n=Sw|O+ZYTmB(GzfXdfnt{<3=yMhjNW#|PtLZ?BIup>NRj_@Gp2oJE$7GRsf z%oq?89vvVnc|g$-%7a{%VEQ`&W@Q3FD-*!>_;iL&0S8n{C+M;So^Gd%PS*)wDTB_b z1)!t@iXM|r@Df#UxLb6(Hh>lAKuekcP&{?Ef@<;Ot)SJbq3jF{z2McXU{^SC1iV<7 z4Qga^fV##!fiIX@K{GPYQV803gpT)tZX|>ifI8rr6Bg7%mqGU&W`QoU$YmCIVRZzY zi$UWbNSg#Qp!(2Hm;kqjA^kVl`B@*jT|YFx-~=DG@`0DXoeeZ6;QN7p+r*XZi~|2v zrcPuB70-W~D>xWRY{17{Kn}|Qoo)qM`1z+BbVDPg;Oc<1{XmzlBZ)2n7vrF@l)x9K zz*A8y83#b7f_k|SjnIDPOHhP@>}UivJV1pK__knB!vo9#58`wOI)G0v`qMc9)Cd6$ z(FAgIJGp=liu}{r2+F{q^}>IGUd#c91IJ54P(cYA)Zpo!05aJ+P^69@Je;MUX#@U)cZnJj%Q42Z_2vn_21POp_hBPToI&_ErfwVKSm_YrT7q=iG z`nm|@&55Ak0T1N-=>(TWNP-TaQ%b;sSxlhL*^32Go#3NxAvFYOK;jRqhWG=kHXK0P z@W9nZ789s@{2~pa6Ew^w&CVzg%FZYd!^S8ugOyQ$m5ouLmz`07fsvJom6es18APza z6EHY^nSlGxp!4*bcY=Db4E!yi#x7(y|4(-ZNG$M$VmLSlbh2!tc z;Bf18JrmFiI?;JLSc0R|^$AGjnV=Wfzyd6tu1`S6%auxjRK5_50GY?q?RzHhg{c#m z{rckTrQlEp*%&e3L4q*#6TEF1C@*VuO{AzJHo4UBE^ApKd1?aC(NHM2oD( z1E$6Ux0(c)ngpC`c7mJZpwmD8bT@(6AeDhHWZgk729+71e}Z1T&ja&7Cra%AHMbZ_ z1T!phQ4eDVZI=LzaDq|*r0D{!=|Bx?@Ht$d3!cDv4l?wG7|R4jA~^ma{bg|cRdO(t zsDgsf3DkoJWlTqC=KldL`X)ddS)jxM9zOw{kJk-4)eAh5SHcI)i9+Blrr=GTAd8?F zGTz7o=~gn9aDYxLFOht$1KO|&P3)juq>#k^S`_~8OhYMbO)%=LDRJYre1KMgo z$aoF>w4q z?|0}14fSz!hW-JK>XdnbYjJ`PF3v!c8x9J0Afleufs003x56HiCu#K*_`@1auqh zpYA{h?F-<*mbv&4bUw=)6iF9U$tTUVZ(v8Gv%a*3nGdRy4!&S%e!y6w2pZ6Okq)kO zLH$Hns(ufeqXO43AoIc5xmvpt`t50u)-lKe_`Pv;!l+t%)Cq)IQ9e>;^YPv?qex2+l#^tmXTodjd#}_C%07 zz~V1JbI)~bpsDwI)|YC~RteLWcChM6P}SY8Kbm)dDkFvx(CUl8Zt$`7;B)K)Uoe5&aiA--A?_-P z0VPDRPr;^jfZP)Zy14~Z6o9P*l~*9Q{pt1q^{vrt4a#Ufq5(T5A70m*z?zOfx&uM? zlK<%T0L_H|=!U0Y7wrpR3q3+EJ_N;*lY{m_NH~N*#lhj@qyef@Az=%u0>QnsiJ+m9 z<|8VgGz3kRY@k$`1U^MGgrP1HE&~$g26-_sp)>T$YiZE7C(t$KNTo~w^bk5wX#^fq z|IzIc0=iQ;2-K2;4S#@!Vn7vf=#S&zI0Fx;fyQt^Q3>XNhGsyC6x`wkDFY=UFbB1= zg7g=__giv6YFzMQ3zV$Q(d_}v+CNYv!C4z2`KCLRqwx@Euqg;K&<`4i=LmWMD!oDb z!WlvJ=Zkx0plk{{4YL{1VBvr_SU3V-`+)^WP6TxLPa`N* zfv4p`sRZmb(6l@#1i&27f%hEUP7dG}Jx6CFC^W#%=jiru0cSssPDu7c3lT{D2s-hp z)Aa@Dh%4VWy`c|+dR^~;?nj5#MlY^;gIt1CJGy=Vjd_5Mn*<#>y9%`O5^_{DsM@;$ zuJ&$#7U6(SfxcngGXXSSTAK$Jxnb=x^-gV4ukV#WkgvO4KOB6(3Z7+W1XYGX-L5yF z^G+Pykjfc+vfE}ikP~D;M)*v9p?v~W9r{dt(e3($+4TzOblQ;K7ogJjLuW|qi+6X3)8fp;v++^Ispp14$gckb$It zZtxZApfZgE+CKnQjxTy$A)(~^p&L0ox_!SegAVxyJ5T!{Xc>b`?~Crx56v}GUoe2q zfBXTC&mXS^yP=_0%k-M{C1`6TXq`kU`*By$v?~KBXh7%pa&(7Gy`wz^97x)r^^nj2 z=?r0Hfu5%XR?5*0iTh698?QOLLvMh~^c&z{zG3atdZ*UAmqZ_~b^-g4+4T>o%?XZu z2>bN{NNB(Kev27&=lY-9u1{{2g4SC=<0^(x;HC55|NjwfywDF|_kd1WWvY$rhQ(@g z4I>9btsru$fwbYF=>VFTx=Tg6eK2~D-RZ|L}W;tj)l!G}y26WgsC{KrUyF$1ZKzFZmfX7Qg0^PnG zkjfLJFqEU)DWuz%gV_SP$C@!D>Zr>xIELHlWn`J|12#3r|&|c7&-$B{fmj`@+8n_VVRtKdw(7mn*G06Bis@P`8 z>5=l_ACi`grr)At25O+uFigW}>1I77Zc zii%s*-T?kZ=KCuRm*VM6sSLcH|n!bOm!ELZw)|ZuF<6w4x63h*7 zf_c-;(+G+%a7U8A71W{u>4ZdFAn48@aEULq|(RMKcoreh3;lY@7p#WCxAt`w9fU(1JJ$DQ02j zxPD=F;Q}pydinFu|NqE24{BoQ2j&n)p3cw@FJu0I>Jd=E2r3d?v1ZoVT7p@sHWc9u zP@+Ie{~}zFHTn!C`jGP=1)Hl_m`jzwIRVrwh5L!4@gQh$EAWLw6DYWOUQc|P1#13) z0t%!M)R2QInG06JfjIONTpo#l;vBR!A2cum@^@ebIIcZPz-RV=&ns&_q5v6mVkl*L z?E<<9%oTKzAE>FO4L%JVJZ|s$g&8!-0y@z54RatQ#dv_`GC<2~!0AFT=tah6P$vz1 zP7Y+f3-tbj0&CtWx0nS=1)wbm=nb{6LH+)2rvhu%88BJU%qvWm51|@V=7MGtecyoY z;R*eKS+#-IN%Qwk0d*sNe>B(hzWEP1EgRHns+D0Vu?3xn!4peY~m5X%pTzI_~6b8^@ z7@O+u5GI~p7s3A^?V%!_E~i*tMuIkf)haNQxPdk?aCC=qFndLGyNYyjK$f?G8$uDF z&<^B)thfQUcp|z(ML;Lvflf*Togxj@(g98O2MN7pp)G|Sq8Rl5JRaHs6kOHz)~93>w5>XVh&_IXvrRU zG#Yc!^b2N?J3zw?(8X_f9I}U*f#EgZao0Pbr8CD}AAl&(U_cXiJnR8usT6px4rKM} zq#VcqmGOa>Euc1p>lfHC2l&=f@YvhIS1h2F#ERXnUjklC`v3|V7EtJdC7U0;2kioa z4ithfIdKfp2Hm#)0(8mZ3-Ef+FWp`t+8#39p>MzgYtW0SL2aQY;IyzUyt)MnA!*TF*J1FnI=I`zW&9#HlHJAai5mHV2 zKIxtclCl=*;P0&k8SeT8TFZgOK^2|r6XuXcp3bSDLu0x@8o&&f-WS?VJgo=#`?WyY ze4jMe^xpXonY-x*HISZk`%HZS?&hdM>;M-TPdcZ77Yl$50@>U-r5EJ**M8mL6J|i- z0X*6vy)U|5pIC>q-l$gZ_! zs#S%C1879V6(t|><MRv)`aa z6Y$mL(9D*_&1C?mt`r8CNzWoQ9W1vMDXkQ^@fCXCAKu+oW z11@x4xR`_bBoc@n7dt^o*!53$2k3}I(8`K8phA$p?02w zex#gJXXuq~*BhXnRhR#}-e{=34BBTCdP6((3aH2HdZyF$PPgx!z>FmzOF@^ngY=^8 zw&8^u=`(?))A!BmUdUi9PrwV#P*CB-(R!d1G@u1aF)tT`JPBTB{{=Gi2s+Gkq6#R8 z1i)MG-hhQ)^g*X*bL!^ z$6$|uMpNLUdf@Z`U9W&Y1vr_4ya%!nx;!`>d^rwye(Dcs6;!~B|H>dG0-fM-K86w# z&}0SZIw8K3%Z0#-?a zO$aJ!J|gkj6LhnCsU~_ z8G#D*<|8Z_Pe27I zpcGi5n#GX80g?x`R(}L$h=ACkJTQ;KLJZXsnDVD-*x9njgS zAgg>q&dNvtF>x$ue{I?g2@%jbQCKLR0ne#(bh_R_HU9-T^jW%H?;x@T@#W7UaLIub z^Ua__7`%4_oF5=XP>nn&eZY#KQu8c^j1rLh!6!TiWpsep;6$3y17e~FrVMx$=xc3A zVG{@{T|RVk1ZErnE$a^j4WENj4x~zK3i~E4u|?@1&9st&l(UDyMJDSf(leUmuf)DzYn0T3Sd8hR}p|WqJd%%TK~wr z4h3b|Qe9$#;S{*al6kEJTL0SZin@Rp9AW`4${?qsA)*}|Rv-dgK7p1QfSV-XHbiM; zukRUf2L`$&8``PB=<)c2vcBsD$bKBq*a4^_02d|`G1P)~ZoifQZyV$2_HgL*Jp*IA zfX0$Q+sS0QecyBkhFpBq%i`4Sdj{0efG9$hxB!y4&^y)R|Ns9%-C*lMu6+~q;=vP8 zf)F_F3hqpRIwDuV9TCvt52jjQu<-q!6xB+8) zfG{$)fQo=#(DsNx*m1=gSq#14Q%1qr1(stWB?(e95fn9G3{KA#;K=!dzkQ&j3vwDL zJwq!j4_Nyk;|Rzdp&jtD5p*^*yv#*3Uqd?xI|}R`$oh;wpt?a2bk(iv8wc=gB>05m z=l@;bG}Jx^wf|h-XuG}u&F%X>fZUuDlyL@>OTZZhy|`sAQOmfJ$1IS=3~F(`0%d)H z<^zx<_~L5;C~8Gsf;K}ys%+@aIFK@Edl}jYlG1^N1GI($Ev`mt34z<^FH96cssvvC z24(ut4?!6>usMvsbrZPj0jfST9^i6Z1k`cs!4rT#pc8;1pxvdQu@Mi@h%3}_wb~$S zks_%M!(~>GB-VPML^_Kh;|a)Fh*D(*xMR=rS}Kbn;{`|xsRD<}86N;|`hEkF1qXBn zM?N#?@Ncwg3tZA-lnCJXh3t3z16un83G6qZJRS&&8K^&|DuDcf)H(`;>`oQwb^`4z zKy)e)1pzcwYJgTtKs*g8&b`{no{8M3A7suoCUy3QNU|~plvqr z_%)tl2UHoObgJN$H^O1iWO5YLNCT~j1COXY0*$C3Rl3kzVtn8w=S4aY%8S-ybE zxG#v=rBIYxVL@vaj)Tu7h7Og0*`T5h%;@(00i7Umebe0w+NNdA(^P8-G9EI50u}>} z#fQG>cA3BfDu_d-e$Wo#;OTaK(;3qGq1*ROb4~9DhI*#gOs^LrH2S{j2A`U2Ez$v6 zU-Sby>=OE>n`L723&u{U^-xvd`;#3(BipVpm7vLj7vRaDC(JBeppqf2dk6r6rQF$Eo41}7tM$rbpgb1LXe z=I&My>Cg%8yhDy@2DQV}K_gXQsfN8EHn<%QQmGAA*a;aD0*~%M4rUL^PyyvLP*d>_ zaud9iyBl8yCuD_#oeCP6YS;^6gPaN;G}8tv?Cb@P41vdl!1I7l0x~S1 zP7p+Kfh%a{0$f}@=w=GYumQyeYV{?M#fYW)f|oom|AR77=#!uf7mx+u;s>dm=Wl%q zEl&AcLAk6KoSK4qTS1!;Kt&9;BGXF^RMdcqOlU@(4YI@cK{t5og0)~NAIR04Ni{W%h?}*2S`BbKo=5!feuW81{}avgYHjx07=@Nfh@1>K<#g+`#t^y zW`uy);I1mD&7Khf=E4gSNVksP6mw=WK@7vg2r)B0-+xg2#lpZ-M$Z+ zE&qeor9Nn`V)27JLi{NKt~Opv zfrre5vKT=N+rj0wFvwHLBVFL;3uL}X29f!o1JR|dFF%708FPhPaKPE^`vf%9>kAz- z23koZ1-{4v->Qr>*|ixwM+cfBv37k? z2f3T)MJIUaA}r!TGp(Q{SJu97YK1|{UEg#zfdpU*d^x(oEB&lPKhz0>rel0Rbb_bB zVG2NVOQ2P2)~;V_Ay$0p1W%nq6@V|O1qTuzXfA>y;Ke7%$xvuDF1Wtc0o|Gh8bcKT zuW|w{8Uju2fS3RCFqE>s1Z@uO^?efv32oR4q8IN~L0JQG`ob5`6i&$07tm>}TGp4R zLEXSw0R~V80Z-)xI&_Bqcn#V-4O-0+=mK4F09uF4(d{I2@j)+-M|bEC&}jY-#Hwi5 zJD{2cG<^3398z~+lU~uF>4MNZ)*-zwYW*Q=r9p$0Uk*NE1ziS+vQ`>Y&2zx3d5(Y= zQy>k9Zr>lEs_sX3=pW|L8=zUrL!GWaUUz{)uAcQJ2iOZd4E%lI+thuZfNymNd6gM5 zTL&ssIlDtacU*Rc@_;U8=I`4MYSOv>=ybgT9a-%LH9zmX7U~YY171IL2ecsww65y| zk`K~J^}!`@Pgkbf_X@}dS71K40;Fxk+0q*n#9elx1nh)_R zX!`97INSZ{ZQ%lCJJ2%Pz!%Bjvrz@^y25*P&<Q!4t0gwp{FG0cB?fT}fgTNhG&_-&=4TBQhzHcDwGw&n{+}R6iquiYfB0*ko zVgaR6@O;^AFnI^;*cUk)Ks!+1bUJdpHUcLvaO(;Z1rL6K+R!|&B|!#&#rfBRE}eeE z?8pH+y32{9+w~1-*Iq3b=w@)(#vSkxHeMXo9xQd>wyo!jCxZM^VgVi@2d(pOJ_%a!4ck)l2fD}MqyqY`HI*|Uw?Vfzp0r^Ukg;VHFtueA z*l)uq0IB-GBxw8`lAl1UxPQh@WpfpAJ%6ATMQ+@^$TdcyLksFGC`Hea?mm^ zPz48S7K7?GE^YA49k`1QTju1;(H+2|JrOiA)EW8(RA|+L=IcNm4$zVd5C^;p4Wu8k z&?}Uqo6))nJOwBKs*51Y379~|Ib_WiND7=0VatU=Il3KLptFL42rW)5ovwdgL-auG z2Oam-yaU8$s4E7!r7jn&92AqFbq3(&${>+OP}8duv^|}p8@yPu8#HJAp*Mu%KiHvQ z=|BZgJ=O$bA9sMBcJT+Y=DHg!+UcPIno-~ge9;FUF$FDdXx;^KKG^y%40XA1(~dhr z&g2OF0iG-7=7OVfNbpo%Q~un*kHT5Jyg0wzd+VjK;7KwqycR* zfELL$AK?I1hIJ936i^og@+H`3h{Hf2Ysew~?Q{Z-%|IM++!5lr&_Ae7(||5>+z4*5 zfhMUK`1>Y-IJI9G`1?RR8NuEIhi)hbGkA#$NMr)o@t_S$P;YjF`>(w|O#k8j>GS}v ziv?#ZaMXZe4diHO)Tn^iU=MUVsdW2(L5ms<&=>#JsC(!EJ{wRWi!tjzsF@84 zJ;Y|@DJ-D&pFk)0evsz9pqoV)O7t^KK)OMzky)VbMV$2pE?%I!u|NkDfOg;e{^^|x zx+}%{6zI}l(AE*~7%pV@B-m(3)eDXRaCu??I}aB$#)^F{UD9z^PzxM1b?kcq+}OAP zP9xwl$M=G@2TQFjLIAXu?gF^o2wO|q{OBJj$w7)1(Bj_8O1xlU;73ko`9%Okj+!ogtU|S){7o?*z^a{)>*DC># zkvxu|7a*zTBcT35^A3>5!B#zBsEdR--}edFx!`_56G~YJ+A{%~<^R#^Bk;cy?jdlD zgA{hU-hgZ<0ZmYF1iSz(eQ7?z1NKQ7D01owz|jkG0=O6f+20xZq1*Qk=!`}1ie*qY zpc}QI0aY))54uBtAgyVJHUO`H!v}1)?+ug?&%o*1Bn;FUc+ubjTKCA( z3*NfH0Xq_=3oOd*w8y57lRHn`Oqz39mrD0 z1zJ=K>d=GsR(t?=>ED2t(S86`giahaJl(z@8Y@91S3PLhhzG3X1!#%)hi=fY=ZkLF zH=s@})9WUfJ`QUqo;q$252WA0pYZo9f+YpIUB769s(tW1kr%WBS-@wke(3fP>GTDiHOyEd+FW~vsl>mz z_6#$BOB3ig)rX)y8>mkWE+0U}!5?sO@B_NE9HTh+11=8WdjS@L^n)q_uzn}dNemzb zp+CA=CUpC7$TXj11gAZ)G-wI;AJ8ad>5p!aO`SeWGOts>sRJwv8lwcu`u;#HSpR-Q z`hWvCMS|6U8&Bv{QdtQoZ!Ie zO`_YC2ikH@5V#xr0(|ZY3qzekcPP(oCyqP5FS=cMZWXZHjs4N>%X8QD#~nw3yRjc$ z3*BV}-Qs;W7IvUf?1%19fxE6h?n-sLirjVma2IVg26R6Q*tgJ;us@)J2b2!}fcwUv zJ?%{Vy|+Q(>G}uUVc~#xSblWFj!wD*a_0@ua@R_TJAZ)P3F^Uv-T4A^{*~(susa_h z-1!3H%e%3lJlbrRkEG0d2DbFA4tw9}Sj(RDZ1p zO0+UEKy@DIxJ1aQmlHuJJArn;hkk+8fzayir4Xo*;LFjx6MT+XNd#!npd<*KIzS@e z>KReRLg&(350vO<%mCRze7y=@;{$5{H`}U!5BQYJ;(=7X;P%5}kYG12h&&Ej)Wpy& z3StL!yCQlBko|Nowu5hj0G&@ruiKAOE=mnP{s51dNga9@r2(I~K;rp?nEO7M?(%<~X1+pKe16(@8T8N-g zaL~9KsEF+b34&^;PH@r%7a#(izCW^LpesR;P8)??sr}}-BXr9V_}oz^5zu^Xs6c0+ z1hl#Vl{hHd7(sj9kGq1_zcCzl1+D1-w>D0ITN|MLhM>IYdjhtbF(16a?Tod{)GxKk zkje)%nT4^N@dRjzJZK#~e1Q)~;ESi=J8Wc_K?~W=fQNdnFo&K2FKq+OmUN3Wg12jd z*qtJcFUvq_47|DUNvG=xQ2CAQDu^2rNOeOZNp5)Ejqq23XqyW4$zKImM%maI`jg#biM!%GjQwK3p6MKs_4KCUy}}@u zgo0fQYBD3-;tH?!-*kswunuJ5@7)IW4#?HeMZlmvxt*bVKwD@(FuOhhZGQysJ?(Ve z11f1<--n-q-?Nya>9T2-F}A zebWu9fx$h7(huD{8#`IJFoOeh6>tcL2q?%v4GOSo*AJiuh3kP%7eR@aMxaRK1^XR6 zc{bNRV5%)c#2{?vDQHFpG#~T9TBNZy5WE+f1vGgX`lj2b3)IE}rK{2hpdD)^+j+WK z7@1wfSh{^bfM;7DfRbCtG#+LbE>KXRh;_Pf@w}e#5;Q{G?fM2~zfT}^!wjhW`vY!q zflsyy{bMayD-CK@TnS*7EjQaKjzLP(6Zh)0T~BCO#$Bq`05!@Qy{bflq6sdo(Lagg>+J3?J1FN z4)F0+U!1^g@Gqd1$?yNWerc$E4_cWL`b9hR189yAv_1uN5Kv&o8BpyWiZNLSnvm`G zRX7eBgJvPct^phN{;$7RwTDud9+5tMNS zSzji)KF}tx*IeD9GTp8c-5i}L?t;x>uEj0YfvpoN~G zopzvGH8_G^Fv9JDF2!&LJI)ZINhUDk2}~1cAQGzS4CICHFHYp!lrnQmW+Zoy9I zncbjt0mGp7PF4j{GpEz_4`?tAbb2m$SYZ|f5^UM!HhU>(g!q=bcCbR_04NB(6Sb2Gh`AEcs&hE zr|TQg(Jv*D;KG6j)M^QR(Of0LP^Z-G`l8#zBCs2@M(9NWv%ta-(1^?dhk*a00U*{9 z0q}7p&^2;C&|Ks-P~3r9@V~l$odJ;Z z>Nr3fuMH2Mc7)5lAQK@bnM=gP^)W@!~7e3ED&R0CW@+XbJ;m zkvcg4B%tOWhyyzVL9-Oc9UMTN1@J*-(6gQYKzo5v5#6qTjyr&oI_M7L$a~wu?Lpwkb9A6TkBP>Ak&5+asTG7Q3_yW{OYd#{<*OxbwK&SWh`ie zq9acy(`%6PY{3^@g>p0>vH;aI{{ujI2BgQ41*EBp1-$4>0(AFAs7SXXPp12W=Rw2Mw3_{yF%N3FcjJ1F+K-w(twQD&WU!Ay79P zG?o0L8@3Lt+x3UFt4MtmWE~w3w5;oP<;gx^(e2CeKZFqy@}QG4K=~x}O}Fcp<1CGu6$?JH8B1!{e{N_6{NVA1v!054hs9emboGl8MRvlqN&26U)C$a#H6X&==f1^!2>C6gTU<<(28e9(D+vkIHsJJ1-ZrAt>qi8!(dD1(E1$pE|Y29i!-Bsl$p?!N)e(q*5tU!`bPxdbhl5_|gGWjQI$gm-gA(8)nIMjn01Y`p94FE3A<)SMy8j2%ZUl#? z#Bo>9^#!1Np_?lt7)m)n?I%Z$*QveW0tDXroCqqrz!lV+*P{bTJik*Ag)w69AL)HL;J0)_eOU7)}MxdSDBZNRDf4QO++?}zSCiB8bn zlQNyIKM*Z#-#_4fDs(t(3n;6G{%Nk6`UbR}{^4=g7Z#xM$MsLQPwN}d$VccC&>d5c zyM13+F_!8z)IMe?k?#(D(&fb1;ra+9>d06s-t78>soC`fQ$y_|hSD>zB{m$88|*{x zbi3Z^biL7BdxHVAGK>eZTn6L;pVluRDx|5PQxL=e@j>?>@^o{;MmNMjG43+;3%IV} z>Fxnf+I4cggmm4m*nnIc`ls7v>Ko8WGrku_8i!?kP#LRX~^AiC%QvVbcP;jt~~;Btt$`YR3oq}CKiD6AE?Ux(g`}` zwVQYczt#gAF%`662xI_gjW7qi(gMwnH6P(Yv_`=R-DT>RW($T|UXb5IdcQ!L!Y?iV zVczBlEsq5ttA|1PO$1zag6b3zaM>yFKZFrdSA!?LL8I_rx~qOF?71Pr$`CcyV2AZZD{D>iYy-xPgwu16RJ2;92hhXlCODJjmgB4}55C zi7sf-Bq%(-fZB_J7T{s8Czc_tKWYV#MLI)Tf4tuQx&=JC3O*z}^hc*)bFBbF2}if9 z0O$}<@a!(6er`Sh>Zf2h26Q%rBWUS*bCm!?i4Z7Xdw{s0N|(v_z-zv4UmnQVDY!%j zRlQ*IIKbvX+TRnQ9snIu=>%Q~Q2{o~m!mrn#O?Ot>Er;L70LlgIdHQ;Wd_(h9UL;H?;Fly|yz1A6O0TDM8?S%Se$(6bQS6L z6=C+3sf_Cm6=4pQ`F^VtG!-kM4Q?q}x<07m>GqY-_7wrwa1THk+EoNJPYYT(2Du{@ z-00y5dT|eY5G?3AMP}Cr5QD9KCF)pT>VYdnkm=z4KN8HYGT=?tG7O*vw{NU{CF(gr zjpaj(ouO}D3wFD{uyz%x;q3Mm0nZq}fE=3%>K}oc7NA7H5%8h_VjIZwbrSHD2421R z1iB*nwHUa^^#jyI0X2z1;-G{FY9@w)(wpla@N!DfkPc{0vISHSg1Q*puAo%L3?8cy z05?8){)ccuT65s^21+G&z^MeXlvAeL^-5=e1(q1@1s{0$hZ%fhCAL%ysXsu+2!qUU z;(3_{>ia`7960}rG`|3qcLL1^83Vh)S%4!Tqot5pAmd6Qv%m|FRM5P$1gJOz&9^kZ z0o_glI)V;V>45hQfEPR_m+~BM-2=Ozn+w7Q1qNgSA2gDMyjBoick;Jrfo7*ci}O2s zw}8g~r-DeQ&Z!$foK_GAbiMO>@J?h9uVF8U4O%h-R;dkE*f|w6liA%0B0F1mfV6^= z4Kz1ES0;9YB?2;@fZ8A6b>&Da;lVe>z5&UA+!B}}Py|}_0?*x$kv&Mq?&T*?f&=>< zG(pzw@gp!prHEOecj|$E|Nq0+VG4l8vU+<#Vu9ULL16=$q;>s+IJjA)`4DKQqCoQt z(1pgJ{v=P(3wQ9AE16DL@J)sMt>7svaL|H>(EoH#0UveQIdusr=k5iOpu6Zox{=fz zZvm?T-Qv@{7i2R-sWh?^ptk|d5dh6YzLxCn1*rkgQUAHi%D~7haCZ*)$`E8T;r1>7 z+Y2I@O1PW%f*8ytTCbB4ijj=#F8$Np!luH=zyQ4-&tcHN=vx&b`6 zZ~x9<#V-xqak-JnAXXLP$x zuy%b?#|B#X?mGe8#hBCWdZN>HLAURTPTwV9krklT0o}f!^Uu!&b-RKlY$pVEht3G< zcI^r1_MH;g9eO0F+w}m%H=rY6n~&(c30b^FX)9Gvg8p^LkDz51?VK}-p~y};Mjwn#}2=Z z;0;Q00+r{1pmVBf)iMgIahy}dVFpV7A}_yp5-z7pMmEY<-UFuky8Pw<*wu>CyNjw&#{;Ncl$ zlfecHb|V`XAOq^rBRS291LQU#@KPhNovsqyUJ9L{DLxL!>SU0YK(0`!6#^}AfZOe; z0y***^*YcGvDAyf-BIs=jSnM2A`@O@q!-JvR=))f zr!Qzogt0^re36B5bL}7IlF*l+Bm*9#;s7ng1WhD&hsuBkfxyds1+>9y@VZ@9It5;r zfKBJUBm*J~f}m>NenT(eB4K({Y=;WVQ*cnyEIuL?*j zc)>H5Hh6DGcc=o$Rt-?_31~yt25NK)Ao3u%JeLUr`4c>f<@*I(K7x)ovksNv@6QKi zBv%R0RV;{2Y2BeutV0#}`+Y&PNVPf){4JpMYLIdiv?&X;v;}stwQtyz3Kiv*HVUW}dNx13bj~=QUe*C{JhTAJ80Xx9baSSI`N+ z0o}fDw0%K4c0g;OAXO@OBpj9?K)IL$(#HcIqB9ZH$pRPPu+{vaAN6YtZe<(&@v* z0gg8bLZJ}?R}uBbI3stprx^(rQ^sOM>qmstO5_hs&t2nScl4#x^}xtSi35KE=@p=ED2C- zhKfKV3$!g=rny#w3Di;7U}a!n0BuUsU2k1S?)wF_rUEp{_XBb=?2p$| zp+mX|t5I^iM154Z>lbTR0nnHV2_xl_&+5T+rp^UqA^!t|+A$cs#T54LB2k&c}QKZT}s21ua`(IPMDC%)xNn6?A|C z!*N&e{LgV$@NKHcT|xB|!*N$o+0Ag=6}0w|;kYa4sz`?8uAu9s8IHSxP8wi1?h3jt z1JT|EH*_;RDnKpO7POY?i=Y=$-$AVx3E1EZ>&t9r1_sdFYwgiD@{$7Os1R1IV9jAguCOlPvCzQK=cR+5iYu*dm zrq56#1z|AOaYGpFB}}05bwMZS@Opr=6i9;xH( z4n5Kd-gOTd0^bt|u4=#{LET`J1G>TH26n@ashJVb4PJixBIw0F@Zh&jbL|2K{=QD| z@jnLwdVNm>Lhhir5dg6%5aNiSZt(81Qh=IxgA6xFC=tGXxeHXCOa)gbSHRsHP}7wGwDq{OtlM=;Ko$pRoyv;UzBKoQUz+7bjV577HQR}k$kSO*?l zA4oLU^01b2f#v}?I(>h<2F;hiPV@s^Gzl8b{sF2CU;GsUb;)5@RDfDs;2jsB0kOar z48kBu4$xHL3sBF36(k(+f)gSP>e-cOg4V5qwiAOUajac`l!}2SDL^f7(6tJkj?k-f zGhXk>l7Jq@6bM?<3LcW+VTDZpxC(SSiGbFwegPd*4VpFh0vh-SHLAXV2EmTu2mW=3f^u4YGQK0?kZM>h=Vp` zmehm0;(tJMEv4WILh$ZQYw$G^wXu+#4%f&9(bygOr@4xQwG@0$6zIAl=rwwvY2xN1 zETDnbKi!~vo1o&51@$c8`Cv#d6udO)Wh!E96XYk{4pjygM~rODbO^?4^ZzCJyCrCFJS)B30mC#0WwU6bC|Y-^<^Kp z2KWH)c!NeR;j1^1&RAo8nF8u&)C#chw?=^)?x2<%^kghh@L-Mv@V9^(2*+JtTmS_F zD4aOJ+uELh)=56@4t-(8RSKKMc74+2!Pw#Z2qfx-XBPWF^Ns(IV_rLb!Lur*a-hL& z=!_X`K-l-gaYyh5r`N16*TLKho`3E30IfO1?ba(-U~c8<4873pdI99t^WC9WAZ`WE zVY^-cyY(DM6yjFwbJ!5Ko&XOjLFTY=xfQ%+>NV?2CPoGZ&;fSfl`0-AouCEC5H?Sz z7iiBo_{4kAdH5xIpo?unp?kXOGTD!s^sqjZP941eZy48`VzFL1$16V z6$=A@D`?Ykw<}L`1rGy%D|n{Hmj|}}trB#@H*~{VE@(a4i;p~@VuJ-VbP2x93zV0G zUi=1&g3CwHngRHBJZ4^yYVh7^(4_T`&d?7aQ^3^+NN3;+Mu-ZK-yvxfJUjP#J9zh% z2veyzXrDB=&%+AR5bz=ZY!%OI2~hbCN~`cafo2dHP=&|?ohuG}!MGDt6oFSkLdrG} z2@4;N?her1@8E_eWSbv&Cm<-Dd;o_Y4>*E(x}5|-dntWE>*_#T2suIPKR{cz-hgI% zT|Zbmanyp&iUN&{f$qEf)9w2OG#thWl7`OH{{dZ(5GYU!(F@v#1Cj*o0c7a}bwB=q zE#v?vX$YIA(~AeDMxfJ6Ad8_FdyT6#()-coYXT1J1vXsr5jKShw#V{%xSstq{gC zy}sTJvzF<#++EiXcVt1^=OCw7Fumph@16T_SIYRnYmF?1j0YflU3mgBo`4v>9PsI7 z;e!r=AsppoIQaA?mHG(pbaIs-f?n(+r@6lh5+qzZ+tUI&dGGIhGnX|A2a z%-;^0SLpVg^IxU6rHxS_iy?!h7F1VpKqrwWKW&OL$B)s&|Wt*U-7&S>UNd5>mUK$j3)uo=(_;E0w0_d7Jyn? z@D(CZ=e(B8V#rVcxdpN88Y-2=kf8yRz;q;dz?CO3!vJIrQSQrP$S?t!g*_0R1OhT_ zKxQF18RXYctWGvQ@bVQ414DPHK;t7u28M=8RtT<&<-oEQp1MYX3#P(*A{RU*#r{x zVl0(vc5Pv5cI{wlsBHo*^8)t)K{Fe#xuwCiBv_!k7u2il1b5_`_kud445h-*J>$@+ zrI$t^XMoRKD*(9!bRfJ)H|R8XaDNhVEF0*!x_nTJ5!_d`Vk~uQ*bCw_lo&!4I5Bp# z<{?x#GL|YggS(MT&0w>c8uo&u8A{hdE~1Az^-}Y#|D97oo%wF?NimQ!ZlL!FfSn4e zqhL;L2dy;+Uo&*2+ZF6c&^$bN2o;=0!NaJNARS79)&r&d$6arL8g`%_wde5R>5OILR=E-ZQ*CsJCFuddjc@4A?U8I|( ztFzSywAHE=beL`f$ZNeI7U*macaX!uvQ`411OeiMyarJa$k;K}4WS|coFG72nVP|R zm>Twiq`_Wu09`x*8s6lFtWxX+33N{dk)2a*z=Js;lA+YG7kqFqQgrb^&K?A1Z*c5S zM8rNvcj$%A&=)YTfp!2e*U7t(Tx0%B31bsepCp6J({`9s<_BFAyT&Wx}0I zkn*VXMt7~m=cUF6Ap6RU8W;rv8W;ug8yE!^H=rC>1e%|0egnFCyt@O`1Uww@g`pI>ampRk zGK9{X{>VNl(jEGx+bN*ihXd3o{E>Z0q}%mNw?{yCh#*fl6J+-g=)`xhkw@=WZ%@E zfEV$}pm+oIrUGAF_5-mμ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ก~A}mbc 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%0DiF{9IPL&C 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¼UsYe7lTN^;- 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 z zWj{!(X9}_;IORZEyI>c9`3SS1ebaal4Q*k86z8SpfTIc|42fGP7j#aIV@W<}(lj1C zD^{GET!LDH`6MQ#BK4TS+%(i012k=xlwW~xhEINZY7v49N`kK7%m-rm3HAN#NyH-$gwD36H@a^ z(Hs2G7O4}mgP~$bPR=h&g`Bd4JRTRMk6|(+m$i+BB1it1W9>Rx|s30do z_|8bBDO3bhJR&K87mpBWP_cxN1t$Xp7p3HYsD~C82sMygh~R^hIgE>(egbh*ArmeTK5Wht5z(OOD#&ycysktD!J-pY1Qd0s#=#>Rp%B&w zKoSAX*`ex#_RCQP!M*u_qSRv0v^3aJ(CRo4H1!2Z)bMgBC^027A3ZMxC1w^Q)gzFh zaJU;m1FN7q4xF?Q#Vm?2a={83{40Sr@gY?zdKQEZbU~a3@(f5IzbF+{TOha8K*B|t z$%yIl_~68}R8a8;(gdDEL&PPd)<{Y$f+k^j>PAwMTH;tx0E>>`)DqA%3gj3-P-OvW zbAXLbEpY~&KL;6Nj7J)TgR?=y$l&5PIJLyR2vU&*gXVQWg>hmIidoq6aHz4+yddllTvU&W*$lv16q}kTml+A0XHi^brv-GKupNUNk~2- zPkF9qE1hBQoJB1NEa zHBi9-js}n#un5R`fZSLBY9gekf_sY$A=w4aIf{-j{)XG zmU}@ALaK-hKm{*!9T;B8q{JdD+TfWGn_Nj^UP@w73TRRRRT|V)EG+`BV*>Y`Ar6F! z!i@xrg2#a%4ny!kCZdahO9zA!6jLCB4$#8706MyWFaRn5G8JS15*Mo)xRap@;Woqh zpn3hIM9{EV0W=Db41x@0fGoohM3@9ogz5>1Sa@Pl9;6dk02;dhFBAg1x+t+6K28BI zjlgO^cEKGD3I)WHvjR|07oi%&1Lt^M26g9f%7mO+o6xY|yYh#CmW)x*#YOa=ID(W-l>(z`6;Q6c`4w9ARwoJD#XOh zJdn$vc?Dj-fW(|2`6nb5bbxtMY6_&xF9EEys|Gf4~)kh0U=8O8#wk4Y^msf6(%CL^Uy@N8lcM3^B0eLOzG zIlrJ1yu=R73dl*!OJ#_FL>HuT1SNIwpaE1A>>5zJ4ax^Q1zgy<=TsJCKvnFM9R`~oUPK&O^QfEb`f1q^UjF@%X2s*C`Q zU4j*Z7_gC5uqc`$IJcMqBwYe)Wk7bT}c7LJ0Ne?<%t;Bp33et?4m&I4&IN==1% z4BoOTjofHRaa0eX{nOac-3Sp1}P(cM7H;ZsjErC}(APzMAKwXu*f>OvrCY9(Z{Is(Ll z)%y{kbpV-Zl@MbXA|OpiaOXY(nrYx`q(B1TwVhB22DkvIS(TU05CQ7adw>>hGDP^~ z=VzBfR&_B%_`+wdBYe@j$Y2qe^`Ko9kiJ6%xc3M4F+&8Xqn4NqStZU80ltO+EK>~S zzhSQGqN4?g(HA;7|u?ej{uH zM?N_BK~f$l-9aW}5NRGFgGjs~u(mjOz%Vl}5j52s5t;{TQNz*&1C$R>Psk1Gi15Us z0=NvshtNa;S`P%8t%nFQMC2wxl0U=^4Dk`5Iu@Mw-AeP414@dD89?XSg6e!wN`j1) zFqA+xNkJ9@m4H_rgKH~@Da8yW@P&lnNl6G7rW)K)NKFGT0Yj1w0&UCyEek^u3&~GU z&q?)9OT!e)g9?Rb=0Q4~NXMcM2s0Tn;maUk0J$qKK~zZ~KvYTKg9!4yd<+Z|M3n>< zh@y%iI~dfv0`XyVUOwn#Z3YGlJrf3~9iS`v7;@4W7<5aZNd?rjU|?W?snty?O-oA! zEgNNEC@o3TwP0Xi&`r%t&IiwmfX*=nZ%i@-+e5iIMwFTZxmQO)r6fB(2XgO@KGdsv zCCNDq3_gZ>0#E^17(i}zV_;w?$+ohB4h4fNAkfAtg;db_&sGYm#S9Dz`QR}F1^dLJ zbOjLB)6=t8VqhpQ%FjzzPzDJVTPYN0;f zMo4U9B(@1dVijn!9|MFogwjS(+89ckFfb&gW~Qft;y$yu5ahokFm1>Hp^c!lF_bo8 zNXh{%T4eyydC3{6DGG@>x%qi144_eI5Z@8PWq^bhNL^{FLRn^hPHG8Q3=|F^IgtNB zG|1l|8suM4u!cdDG9(q{m*;`p1)>cZAbcYzZ49MB?k_FMsVvXWPXVcgu|eu#Y>*xp z8>A1$Hep~$PE1KHfyS#dhz)W80|Nt`ZHUA+LSh>uu|ei!Bo>tvrIr?_GB6~=*@j4L zBP6yl65E6!IRms}F%g`8;A}&XIZ$yUB(^aU8)R>OQDP1QsLU-&%mL{E@j>cAG)OIo zhN#O+%K=R+K|Jf6Uj*etJe-_glvkXYlMPDiFg7TjU~Eua!Pubqg0VqymRy+#iY5jS z4c1ecm3oiMQ?&~{yj-T6hy8JQ^%b`j_<7^s?J zaAJmt7pEq|OaR*rzBB;h10+7!r6~N=N{IfF(xSrB{7g`q0Lw%3fJ z{-7XqhiF3O8-mp$3{V)D*D3U`W(L*r|z7pFzSY7|I8wUyxs6d{8<@=7Z8RG9Q$#!FV=zcPNFExGa6U91;e2R3LiylG1DO|sNLpb3z{<>&)YJlng3LTnMh3Hs zvnwGfmVv<~HMJlBA_ZrI{R_d<_P&Pxz=3E` zfPv^#NYMz^17;gCAlODoY-1$02?GNxoIy0Gy#u1bb`>R78X7?44Gj#y>I^|?Tob6drl7blN~|=6nrjL**A!~5Db!q3sJW(4 zb4{V&$HP;Mkt{K!^GpM;{P;JTuZ3AmQZsoq2^kG%>`f8 z#{h0PC{(8Af&=cQJrq?Uu~LKqvAUtnxd+J><~=@G^TrJ;=c z5?FJG!6Ux}+`NI(AR}O6AR}OGkP$F8$Os0|a^A!|1#m9_bir6+9;n60zyN0(BC(B- z*v3d~69$INviu@Y-vmq>Lit8e+89ckFfc&7EfCre$~S`2#!%XXfgvZc46-|t0l@~f zhCp}m`9S5Ia==&fF`)1b8BqB~XnbQdKG?4EJXlM{C$T&aT%LjKP0h{EQ%KIpOiKe@ zp2pw<;yc5+D11fIOATzyM(%7(j3mNgxLXUAVb8V9X^m>L1V-U#qdraR36@dhVnrzcc_bD=0Q4!pgIne zhLP2Q>Hs9MlGM~3G`)yA#s_3Sq>0M_XM^GrCJu^67#kFaFt!N;M7=XO=%8$H&>`3` zb3mO(E{d}tiO`Or9m^PzDBjT*4o5H`pw5W69KkXMlTAg>_vL0)0V$;^e1y7*+~rozjS z%skK)$PBPy8Ym661Ih-Q4`qYRhO)ut<|Y>9g9;!BZO8zjji9tKlr~|=O-;!x%~e1i zHie0Sh8SUN=;#jvj9*Y%Q~(~6hw4WZ0t|39kW3CX1tA8y`Y#cB@a}b!3sxT zC?9MfC=N37N)(cdQWJ9-7<@DHz}LFwg2jtVDiwVgUS{EoD?6>ZI+Os%oNayM+Wein+uqUU>h6fM}2%AlihXATcLZ0a3j}`H=bmEQge%zkGX23#I$4xA4)3(kj{he+WN^Wc1_d2l||JUAa}9-ME& zz)+A_kXV@rN|yx;0bq7`MrHv6LqTd{a)v@dX<8ZsLjZ^!0A?cCAiH4VAbVhJkR32K z$o$lzQc${sw2l}UKr|?kgJ@9V2GO8I4WdDbxge($lm!_;G+13uX)ah@PH8S!T~28( zSY3X33TzxN0L+HuYFMEQp$!=zv=NjxhSDYspoV!-Y6{2-5F2C#hz3~!qCr+L6y+CJ zDnKWUg7S+iL3fXXCMDo(Lk0#o+X#tmjKnr!U?|G3OoX-2f}u>g3`uN+JpgV_?ZFLWP;Klt6*Xvt6*%9RWLTlDhA|=7s7_Lv|((} z=rN-9VPJr>4UyPJNNi&ywh5FCX=*|Ag4i&A&&4>Fpe7}V^8RxI!)9>@-m zI4I46`~_o!`~_o!`~_p1Fff2_RxU}*1G}LFGMxt!1KU{wna*P<$;d1Qtz>}G5Va67 zuv?+x5Iqoaup3MAa}!JQ85kh6A(S?P(#BBQgaN78N3abU5NsnPwlNahgnqZW|(6F zS;w>lr0(@uhAmL~2w40-!xJ_RmWngC$LmY zi-E^fPvF0U1A~aEp1?b6YX%upJ%O{v#tbT^dIH_b$_zTDdII-$v@=+M)Lov<-~v*2 zbRt6lNZqPhh8U2#;!uVRQ$2zBc?%dypmc+&p1_Q+{~3Br^#uB!zGIkSswYr&^en>? zQ$2y;wr++Erl9a-VAuntPnd$jlY!xiDJVP{7#^5{!jpmFjj5i%rA#@7A0YedRTx;z z^aS3ODKZF{=?R=olVy-G(-Y`+6=u*d(-Zh#AHZM$qKm>9EI{hA0vH@X>Y`m4JV5H~ z^ce!o^aN6-zGX;&(gh&(KkhKpKGyE~r6Ii)&B?E`Ko&ZA% z1A~Y;gs)((C$M*WHiM42ofavaShA-w2cd=OL3H;y5&mdxQH5^)N8p0nzmg3@_S^kuP_fh#*ktvN z!N5{aV3yHY1{+H~fefW?1`m*WP&?KV5-u^8kZ{Sd)Dt-P{~$w+rJlf+cUu^GEcFCt zpPkJx$5KxqvpbVvjU^=9_E3G}{u$MD8dPoVPbS%yEBdICY+ z-3&Zd5Op$EdIAjRE;8s?LBiF-N>AXw$Ycf=kof-p3?Wc{0+i0N(i38AhD}Z4FRQ((%y#_>YddIK_M9(_Qa0WzYbTizs(i6zc%w%{0rN2PwKTw** zT2DZ3!hZ$_m{{uxNR*sqaIn@B5b*0}@Uhkt*rcSy5Miw+@ZZ3I zA;nrx;GK>RLxHuPz*#jlh8k-@&h7OSYuMZ3}p!5=JJprX|C5A0f`hc~bz@0mH z7|vMh3HP!T|0Dy$ACUQL85me>^aQ#~85nqM^aO4#RbY^? z(G&Q8P?bT&Mo-|~79|D)8$E%uvt=1^#r)MxEKm-^#sz=(ikdiA?c;TR!<;1JDZ`yR!<-=FOOk@t)4(ZK>@=ITRnl| z;$nscwt51krKJojZ1n^xDk>N@*y;&XRaG(Uu+r2ex_w?d|OhFKqP$y1Kd;KG^CB^z`&F{IJy%=PETOr!i5YDc6tJf7cXY;u+tM*wrm+gfSsPeiWMsuBJA`8RPhjiTtqdJ@dICFk>|mH+rzfy$*Di(` zc6tJP_wHp_V5cXrfB$}l6?S?8hYlTL*kGq8aOB7lh8=c#0>_UZXE8Vu-6k<`(K}70+c@kM85;wy{jj{ zaF&5#1&H6xz_082;sD8KJ`Rw4 z7UBTOXE6?te3s$>$!9qZkbG9+0Lf=H4v>7-;sD8KJr0n3HpKyw&*nHl^4SsxNIqNR z0Lf=t93c5@j{_v19dUr!1~B%e)jgyge1j*xt|#1WFu);L1)*%n7gKHK96 z$!A9#A^Gf#BP5?)afIZvJC2Zi_QVmA&)zsf^4S+hNIv`H2+3zGPLO=Y;{?fPB2JKe zCgTLjXDUvRe5T_B$!8``kbGw21j%PEPLO=&;{?fPAx@Bd7UKlTXDLpQe3s(`$!8@_ zkbG9-1j%PDPLO=o;{?fPQ=B0AY>pEopDl5Mi6IBXkBMQZfYL1>^;uaA6F};d zlNsiK#6v?FR)E!8F>C?J|Np?S2TC6SseAW;;S5OK*@FyMKW&pN`~j(J^J8Ff(Gz&~>=%Q8i=M#$4__G+ptJ#$c5u-Xc=zBb zLx78(z}bUG84_GT{i8O90vA1jnm-H-HBh<(r2f}gh8a+L1(e(H zfb@43FuZWl6IgrW8N(MBJ%JAm4GavfdIAsr|7YNF)f0Gkw~0Z<6%_uL7))IC1TJ5` z%;4avCotjN1O^`{Kf+Z{;QzLR3@IRbK@~%ZtDbdmRZn2Uk$VhJK>GeaVEEz+aR-B&p1}V1{~37P^aM8Df5#xbcQ-?Y8^j+S zZh8X$-*hv~0P*iMF|2UY6F9rCfMJK5of%3-~f_eP{rT_rDH(qrWP^efYdc6G1P$6 zg*!3yxI@Bejyoir*0}2lYz>>@F7|yus3G{9|%W%hCPavVXo8gT+Bpm;^ zL&A~A147GqK*CYSLr>t;!~YC69(n?MF1=&$@z4`kwDl}QjE9~;UUfG^jt8h7dB9Ks zr8_+I1m3;7$S}i0PvGp?EetC>^aQ%Qs~C28=m{8|HDWjdr7w8s3HBVw0ydiq8G1bR1gbOM zF)RS7`!$PUi>ID|$Hg-YCp`58j*GT3+<}_&0VL0Gmf;W793C${fd^^-8DzZl1TMzE zW6<%^6W9`TmchnLPoT=Yo59BmVo!{hp1|s+{|q@^dIIw+-!as9=?QdZoMq_o(i4bv z?`D|e1#!n3FNiz#cTf#Cs^egma{cKqst)_~NRGcfD`sZ(WOIO3xx zaI4@N!x@me=3fj~K|W{KYDUKR$W_Gk(ut;PBNGSpV)F zgM_c1!0m#`3>vIsB&hcJ{t z^|$!y3GDv=pJ9rxp1`_y?--W&>IqCcdzN8~ubx0!cQ?ZksQFiX^#uMmt!8)vvZr!B z!xvvYfwLK%3@mj`+2{b!ituP5M~_l{wOzn*|q{8@%A{(1uH4&4j~K>A#T87@HSJN|kCzZ!}d zo`CG>$z*r~vZpDD;S0!~f)Iv3Aay>L3@ib90$-LSFbF_tnE*Wjz3y-Z4Jd6ApeGRW ze?EglfS!QgyD1Dl0eS+?XB!wIpz6QkP-LZ~&yvU5(*H0H~aQ&2R-u-vQJA z8D0eF3Dg~U$M7XUPatR6Sq6qcJpr$RZU&w}J%OyKvkVe}dIALv6BtyWv;kDyCQwhH zIsZR{N1&cSRr))IkU%|w%*eA034wY7?l#>FIZ*W#fqDYR9{p!%3DgtVdHEf~gg`xk z`P7bqPNq$iNP<3B@8 zke)!yns*EtL3#rIQ_eD!1nCKwrF1hi1nCJ}+S0?&5(Fx5{26+JK;?@k!;~OU`C`v7 zCkRx&XfrGc(i6C`{|3Vvkh+Ke8FqlwU3$lG1f*{3S%wQBb=BPrcR=#V?hH?$^c#@6 z7$=4=Aa(wh41YlC%+wfIg7pL(9$a7$2-Xu|`1+qg21Gx7$DjeCkDg^P0nu&U3=YA1 z0`HpMF?a;)30zQ^zz_nZ6N2>w{@YDs$N|Y)^)OTf>j|7Ss$ggd))VMf3SyWLtS9jG z-e!gwAa&1oF)RS7yRnX81xVelX$%`c>gv)Mc7Wvn|7SP=QvdZU!x<=j11!$K@E{mc zE`NaXe}K#ZWy}yzJ~B84Q#wsHpWo=1brDgp@+kUhbWBgl#wR8trjfNo3IF}LFd{yCxUnLg7^gm;rT_`#RZ@R7z_*y zh%NjK3=sdifn^|UM2tfCkT?R_58;D0rGxehf=vf=Tr!J67dNDUISdR8py@;y8(|s) z1Dp+&^vp{HyA41TT*0|NteCqI;i zoN@#agQ)h%)e{h9U|@*I)e{h7U|>kd)f3=iU|=Z7)e~T1U|?v-)e`{Ssy!iBPk@nu zfniRro&Y}s1H+13JpmC028JEEdIF#gxhHb<1cVqE7_Q{%32-tnFg(cB6A)xzVE6!~ z|K#ck@G>wkaOCL;@G&qjNaX1WaD(d0JUszs1_lO;JUszn(AvB_Jpl;@28NhCJppkB z28N70JpmSwd-C)I*cliYYVttsI0lA}JUszc1_p)+d3pkDAa~{I32=ZS42p}vd6C74{1=w*53YoK*Y-9L2IqR?DABG(t<>=X`mC}K>Cu4@{5Zz5;Kb!KzpZBOF?vTQhZr_3iz7A zc!+8ShT^3740N&NRM5?W@dYJC3=HLoCCM2K3=9<|sYRegCK-u&DWFN^fC4>%u6hQB zm;yZkhI$5ulma~g#(D;ZoB}<8#(D;Zk^((}j(P@$iUK`>wt5DJh5|i-=6VK(o&r6A z)_MkpDFu20P4x^63kviETIv}XRut$7u+%d!Y$(tZV5(9( zsQNEZ^$dj&^&Eu|`vnU11UlQj#lU7TFff4C zf$W2t1TqJzgaM?fGPRgNH#0A@Br`DwoESl8Kolevfo}KI1)plbz_6r9Phd-tp1__W zNS=cnmB7HDq>!6gTntH!Wr;bZso*M0i9uP_z^DR-LFT1EuD49BC`rvLhIm#N6j&vd z1*ydhaQjm-i{NaKG$?#@(cHpPtS2B*tS6vStS4YltS8`5tS8`63~`q(CHCZ&=9FYY z){dgvnNzGM&`_)=&{M1@Fr!#cU`4T>z?Nb?fjv-r35AC~DEy&yD9B%ViMgqu1OZAX z6uB8KY!piL1WZcw1RP5A1bj;L1Y%0`1X4<98#Wy!dIEDw^aNIv=m~5o(GxgQq9<^n zL{H!b)Lu%$#xW;H0d)9vv4Vz{o|Yzq4g&*&H7Gqn(rIWQVIzNLhcF3Nlh$HRY(Tke4>!306EPqzo=42p(G{P#Xwb ze1aNYU%Jc+E z%Jc+k%Jc+U%7_aWP+Enx1EJYW0onotNii5ys1|_iF3FBh0blL`IbfycW60a-( zmG=t8C6F6}h*1-gjW}}8O2ILwC^a#qQX#RpI5RyDbOMJ$Ir#V~1|@JZ0o60$M8E(M z29+A1au?QY&PXgvRnSd_osbAS@ufHww8RNT5BNqe(8+FzpraHaZG2eABP}y8MFB3S z06o!#fdSG_K{^-`(N_U$fw+l*0eqDkq%jFOCNBlM!o7$CU_!iBII7(i`Ao=Qj?RH72nc2uZ@v{5xGA#G2SN=Vz%p%OHf`yVts zLu9;Vf(}z;aLz9+$^@Mqo0$u$mKZ!zbIMXdmwJKP#h@eZKpPpNAV+#BfD#MjSQhZH zb>PFWpmJ6U`FS~&3Q(Q`DEAdBBo?JAWabt?ZbJbF0YaY@xHv$P1*gr_+=7xyXc|-i zwVQH4C#=ETfn5)%`;=IsplGWQ5eac9vfHui0q2YO+{EH+kUm2Ogu9SDnVF_g9Sv%< zD1fexRVc{@od6bVYpbMGt5D6QfGny|4G~gMNYBYnO3YC}oYw?mmZcVf+5jMC0jP24 z1G+;E+@(}dC`tv_jS$lns%yc*CCNGQp!DVgIrB-OBpZAL6wDmZaZm_@6iTu|he0WX zc*pyAIt4ifMS?7X9v8)>pis+I%LOr>fg!Ody$rOkw{{_&)=~k^c+~NB=W09Q)6}aQr_5 z!-@Y43@86HFr50&z;OCM1H+mB3=C)gGccU{&%kj0KLf*s{|pQl|1&UL`p>{{`9A~0 zmH!M3SBY?E{eK1qk^c+~e)$Ty`9-M;pzE276_OM4K!=CHDwq^K1`W_<&ARz%X_^cS z8lIp6Mw3AUl5@dhDjEu!3~CGvU<|59L2Nx}p$N_$8X%Ju3gA~dYcen(iD!auHrHfe z2q~%rH6%*%6~N;Tpkb!OJcZP}lA=n`Mug-H)cOY8&PdG3VX$$`DT(*7W3cf~t%P1y zsS6c?$OU1_1=%rx<#fGMD?#V#7bEeZX4rw!BFIdzysn#}0Z0v!9S{))24Cpd2ITlk z&>p3{Qb<+f48GP8>>KF#59Cxu1_sEW8HASxI$@H5fx*QyIKam-5uS>;zOR(BKz%WUL?)bmcS1PpI;x@ZLVCw+J2A19iE=nKEFe&=EC9Mz8*z*_Vr0k$ zGOz`X22i9RWEdENorC;+e4HGE7#P6e2A6|0A8-y47AJ#jVqnlUWMBX-CNIs)EGY(^ zfrlnukeCjxXI0Zd`?ktbL2Jn&X%}KbQeqM8L_Ba_fVDA0vcVV8g1pC2p3A_H(5NS{ z;iEFBxyTS2>>6Zjr03$}!@vMJFW56VKM!=4E$EK%(xT*4*9wqE@FodkBZgoP(An9U zIgtAU85l~7Q;R@nA_S+F_#{@Q7Qt@uKssa;bOUjI0l3-%oh!(|fEd#$N`>5Tt`L$P z0#%}r3{IyA0l$1_7iau>z)GMR89?nl=#Y~_Nq&JY_+DaoJVR0pq+N(`M{#P20;FSr zDwda84i$F>k72;nSwqcJ$Vecpsqz}UQT9SHZ1Nl^Atcg?;>5> z3py*bG#7l(Y-Va+Nipb{$x_Jqm!Ni2BB(D_!oZM-xN4LkIR~T?WJgYZQEp-Z#M#9R z&{G*1;D=v=#uf9EON(>!Q&Mvn7{GTaf#yh3p%)*4*hQJ(avF5Q2&i)jO3{!qlmR@} znVD7zra?_tP}Yk+SWI$$9>iS?47rIF;PN;(GY?GXm!%dJ zWu|~Ker8c>GPoZF(+e8r1DRa_y_*=sE=n!VtOE50LFHR!RVqvk_$FfLypCy>*sCs5IIpn()f0HrsweQHRZoDWO;3QQO;13iO;13f4S5UzmK?w*p@L391-UmFl=JPA z^7C_26Z7mr`&;uE81mE77!czr#FbHya96O;&CK&F%}p&*$j!`iNzKd8Rme@OfQlqm zfJH#oFsP;|zz_o@y(#3C<|d^Uf!b2)C7{-njje(KtgmaYo0wCOk*Ht~8K$2bKnI;;3CftDav5s4LRwB@I%pz}0q#do8V3bVxNp3( zkEg3&NW8D3vxldjD`;O6c=$lU9^yODInwrUec&-#dj9OdSVW2WC$za*AAQxlMbb?Taltw^;Xz2+g1TqgL-Qh?}2(=J*E7(Ko07SaZOD%^57d)-Q0>NGZ z99)LbU^7wxmuR3o4VjYwg&oXXLVA=G5{tpjCve3A8B9r30COO=fX;6Px2sBvK?D4t zz=kvjK%01b1tNLM13VA!Qv>Iz>(gFsq>j1=R8qP>WCj+#*D=n}Go| zkC+G>UCcw+itJx-l82^ukORO4Et36&&ct&{*&P|KXW=py3MWx}IVM)f7E&F%G)a05(p77z02W zp8yY`AjTMAYC+RLMfo`j0f~93IWdj}1*wTephX8DhdP%Qf!75k0Hs))SaA8B#_;#t<18c1+e2_~4)-5a6f+9$x~vD=9y{ zv{*r@JR>tXLrDSLs)i(%c-W1%?#>`}MX8`0o^oYs5hQ z17VY?kT{eEagZ>m!c5Ff%1kfKFD-_e11fbu;-z_@Y0vb$%qq|V)pWag#o7Jx3!1^2C#VD2hP zEiBC}N-b6>DbEKjD9Fh#2MsyF%mR(4g4_XGX9N?2#J*|@G%N#a5v5mw|x+Oe;Xfin%yB zq4xnoGKdvOJe`37n>ff$OmQU!F89>D)FOmE;9@;7CkHkt46-;N$kW#`D3T%A)!EA%jK?V%Yp)j@~659xgZH&Y=L1LRCvCWX!<_s=Dj^U0@KAz zu0ad|o)KWz1o(S`C4yX?Lmd6w!HR=igZ)E;oL%F69sL|ZiWwLfg4~_rok4zx2WtcK zom_)K!vFywb3yV>KA|8zaK4MHn`5XCLG74=MnX4{~(@^MXTy zJpJ4m7{WY*LmhoQK}&lXU^OQ4I6}B@yoaY>2&~-37?%k5jrVl+_lx&)^aY0jj34Y7 z1>=LI!hPfYK#}7EH7?vY9;5`y1J~P8{{9Hdd_Dc*g999$L56@d!Z^N;5ill$tDg&; z9UL0q8Wijt5nf({OKg3BV z4^L-rKiA-322gl;yZVQQ#5)E%yMm(=NzBC+Cg>UB=;P@e4~u4ohR((X~HKo1ndT9|A5FKs762k5KmA*fYKK%pxqpOJ$)h} zJhxCE9|#MS9|GVug5uG~F&GwiAwiCQ!Qf#fH&D(1r6>l5gz0($8PoLyN~Y@xR7}?s zXqc`i&@o+4V9Inofd$j`1XfJf6WB6cPvF3GJ%KaR^#pEA*AsX$T~FY{bUlGT)Aa;6 zX6Ols%+M2%nV~13GDA;5XNI1D$qYRKhZ%YTAv5#@QfBB0l+4f*XqllWFlC0Gz>*ny z0$XP22^^TACvakhp1_qEdIEQ5=n1@-p(pTVhMoY&Og#aKnR)^mGxY=vX6gwz%+wPI zn5id_FjG$;XQrM&#Y{bcmYI426K3iOESRY$uwka2z@C|U0w-qb3EY{fC-7mWo&d`% zJpqYXdIB1=^aM<1=?OT@(i8BQr6&+FOHUwSmYzV)EIomeS$YBuv-AXdX6Xscn58GM zWR{-5hFOsM#U5PvmgMK!L)MiCLl>EcBqlNVWag!&r9#^N&N-=xpm~&_)RNMoJka@Z z;Ok`=AoFSQKKaSnpnV1LL8*lduEoiT1*xDr9&%Da7s>d7mLPAw_{&2goGu0UW2N`=s%IZ}|hZkc)D zF?wfEBQb{ov}OiWg)=x6r6z*zt^i#J7hhbS30egVx%M5#V_@(r&4qZLfq}t0ARZQc zAT}rnL9{DqB{9ez?|^tW&|D&j2CW|k(VzpVKs4wuD(`@JS5PAxsumn<1v!-fP)1j9$cDKQk0ln0%E(QCTHe?F5vMFhgIwa}9T0B-H4kJpNFB&( z5Dl^#M1!mb(V*kXL9`iEJ?J=a5Fd1WH;A?biGw`gX2ihYX3W6gX2QVWX3D_eX2!ta zX3oIiX2HPVX34jExwA3_;kK!Oa+i zO&EdHg=pY8zrjOK$qlKmUC8;S%IiR?J zOd^0*-7zqvHp)S^t#ok+zwiJ)V@89)gOl&C-n3Y3^Y2?>;l zKnVzxct8mUlxRR}vO#&aI5jsD#?DDC2HOGdRf6ZqQWHVz(vjDagL)i}p#3hOJFr0I z0w_;2Ffh1*_Nai$5C#SYPX-1CFHqiNU|;~n38=y3$H2hg4?4Gqfq@|q)Ybsik)XAs z3=9mRp!3#1{WQ>;G6n_)P<rv+oSB)N zS(IFw%TSt^l3G-p3|`$14r8!x28KkCd7!aO(48_23=E)x4s`rdI%p3FXzq@Ifgy{5 zfdLfQpoj$RDFB5JsBi)mJcXb&@1VIj(0y|Z3=E)6F=Y%444^~lL6ZfbLtCprb`&Kh zr$X%nU6%}UYbw;GV0V^e=A@*8?n+Dom1MA_!~jW4Dd18ToLE41m8631wg)+pAsO69 zP6k=SP??$sy6Y@EH4kJ114A)n(-T8VW@0L6-VhXt$@vA9P-_|Ti&D~3b2IZmm&B!) zf=2Fh^C6)Maz_a`v1U{jWPtjvu%0}qhRID#E&`pYoRSK<&4K}(26HnZ>8_+azZjG~ zK(#?hMp0@ioX5bB2)Z8+ltxRzX*)5!D6s&vR|Aq(LB0b`gEBBAr>11)Gy=H^MtDN zL{jI8q|UV@gTW7KzduxuKU9xDk{*AU8YI2YEd}7T;GdtA1G-=kRQ7~I%?X8?6N+R` zD3bn2sC-C9KB(Ei0NRjKRKUOhiYQQ6B|_yBk@P1*-I0i74(QrJP~uDk-D!suR;f^T zq(aR}MKUK9Nq;6(T_#i=G!KL0CKE|rYDoq|9@Ku&YyilO`A|LiNM`55)FA0i$t=qR zEei#OPd>B&DTUfw3N@n?$&6AYy_Hb;5@^3!7x5j_=G^kqM&M`;QXZgvecA(P~$5RYCe==$bp)l165lL)eGe^6hj%s zNcNOK#j2ocA#>LdP8D1ZVP_CTiop@;DQ76(8LHM5>KIoj-vvthLDl&|`Tocjfy#QQ zcqlY)g`&xaAi22+YE~lD4arb`GSrMzs2ftD{1hmi2UV8`<>#Z>QHsVdf~qTpx~T-o z4T*>#Veo*4y9ZJl@kCPK4t1v&l6(eKPX>}$W(ugth19Rh36RNHh zN~c2Ud?;O+2vJ{I3Z?TQbV(^_ZZ#)AFFiG-7(6`(5qE^@^Mul&P}&tr`$K7OM~HfF zPbeJW+6l_7^*fHsx}y^HUz3R1ZrjoR9y&ET?ka2A5@(mRGlAG zogY-4A5@(ORGkM@od;B%2UML0RGlwWoi9|KFI1f`RGlwWT_jXpBvd{UDjozC4}$6s zg31R$^#?)Kg+tZ(F))5_McCqqAP#YI&2Us1rjSbO` zroS>3)Xsyd1*?FvlRy$sc1dbRZemeVDflv0gc#f{B^jw1Fmtm~Q*&YLjKmDMnrsjU zsy7AHzlO3)G7@uO>We_0hKg4uX6C`fi$Qn(K*ftQKpfD1en>bMC#JydNI_zkAlY4o z#0D7)GdDd0%!BJMNh~Q(1+77Z+LeYB28D@;u+K(fgZqk@?w)#YM<`uzI942Ud^72dhWo z7iWMH7E)N2W|xAxP%yVbQ#9xt`l6)F#Ju>FtW*Zy#N^bJ{JhM>`1CALpUkG$I2B?x$S@c?Co2^$o`=LPDb4^Hh2(~8 zkTwRV%G8|vqSE4Gkln=@`9&qAaQ!J&sSJ6b1%~p8g0o zqNsBT2C0Ml#S_Udk)Cj~L59Kn;^XBC7xzPAhXi|oj6!mQH%J?*UxGdSgF-^#`dy-2 z8Q^ZLEJd&r84&EGR0O*O9P|i&3X)tV5<4{wp(Y&?#&CNw5)pElNcMokITIn5jifF$ z2O*xCi^R@Du=A13DnN2eC9*k12=%GO2zCjQ`cfows?gkChNP}IKMm4zMp9o1xgZ1X z*D7T78KB|_VP`6mzT%8zkSttZGMc>^iA5=pz%iOHa$570PSQEF;-ylX(Pr;ooMR1~7lH3X&# z!uRxt3&8b(#1I`(bae^cVmDL_$pDDiP;rQUxGY32KQ}cU=3=Ajt)JfW~Jb>ViGp;qDJ{1Q`Yqho%LDesH56BIk_64hRMr3=s#X5vaSs zX#>hmN(D6lA!^b=O%bSgN@`9?B9skHH*ou^ko16=P<164ARfdlQ2Ky{7o;}}5zk4? zO-ccm!4Q5fXb2aoA9BVKM7#nt6$TZDrYE@l1xRv58KALYh@Rri^jw&m(=ziCbBc2l zb8;Y}Ft?N>f-Honho&=xxfvjXA#%w`?1Ey1I5_=5-34z-F@T1eixN{ZlM{0oO7aVk zxeOWkMVVE}`FVM%$>7;;t_>Q#NGm}R zE6FbakIW(qCgqo4h(X;2p4tG7(I!F6g7abKzyx4s!1y3fLAt@orA0ZFAXkCgZD5PA zNI>laFZ2N|MFF)@p?0E(mE;$Iybc#b4uhop5}a}{_rf(o!UyaeWHGP+#C^!Z44`=y z(78~c(QMFMLtcIfj0w6|8Z_sEEX@FqDA3$PMru(i=wf*W28Oc4qRd372Q%~1K&O|0 z$Am$fLqQ2Wv7n$Rzald?u_TqDI5RghClR#x2h>|)V8~1Zoh6V7ngU?}9T1S2TFj7{ zl9~rPmH^}?SenYrOU@}xNlgJw@Iu+3CuO6 zT98--ItnNywJ5VJ5pE2gn=O^ zzZ`6Ia(+=>Y7xjj6fQ$4I2*xa!RkTIgA0Jqu*%F!2aWZB0t1}Sz?@|8jYuebV+Ke* zgvpzt@y*frmJHxL4H^RmyQ&1V@3;iS1?5XH4N91xnV-~L$n;Ta9+b{ChA=?$Te&81 zc1mV?W(ky6019&`yCfqMs*`~MbR-v4m?1Sc1w5IUng^jlP0!3UNT{dgBElFEuSQtpqeQz)(`24`zeJ!E-lIURr)> z5tIp<+bPbhfT&N)EK3D*ia~pric<5_7#Pwr)4>h{MM`2`dQK{+L;ww_f#&ug6Yk)J zZ=iGq4ns6Wpz#qjO1IS(&w>Y&dH4nxC<-wxFlvI!*pgFqC z^t{B9(jpkY1SXf62O3oc-x&&WCur!eq$m^Y61cn21XFWC0&r~%5I$(PAVeF;9MD){ zPAYh26YK)8|Ih_NcNM3mm4M<0LoK=>=>`EZL$3m8E1a6YIY0qrv^NX;uQ z0nN@cFr?-o+yOHKCRSVs69J_=kn7+km4e1~Av)n=VADaq2PeSPA_lOpVI0u>b53az z$ZxP>DHL2C#~lX6mFJZKpQj(O1ju$-Ly5{Q=E z(qd4#Tbz*yn#p5efbzl1b8{1OQj05dlk!3PVN;QL3=AcyIjIGp3)4aA8pZ}KSuIKd zWf2CD9B9t1AOkU@oSaw$j%-M>%gHZCBu8+WkOSJ$f+PkxuMSeK!SsT|1G1Stf~-{+Sw6qbTU?LcKZ zL>DY=l@>sBfXsuK0$RVFo>2njfZ`0wgp|KfJHhUR7{!p0npBip9-jybF;E;r`AMMp zNhmu#GdCABw%GH`Ri>T^?bVQN847#l2?SDFXogP1UOabj+2HmHn*nhSO+ zlnvHbkP5d0#DwVs%T*<&fSRx{F)$aZH@h?quCFMyI0L4pI3pA8juOz=s0Sq65sh93 z28I{2^#nj?<$Rf~CjdGx=f`Y40j~cH3@mf>1VCrz@XXN@0G*p7GDlAUbWV=U96bTh zxhWcR^aMozGcXv;(Gvijk7F?hbfyyngTov>0fqkz3_f%81QbE%;LOnz0G*8!Ge=JV zbUseX96bTh895nq^aMcX(JYyxCjdH+X2l#m0nj-+8|LT?4F-K1Tbl%Q^IeG%1 z^L9?m(Gy4oof9)hPay3-1H+9udIIVH85kbS(G$q{&%p3vj-CMM{GbnW^aMcX^8A>i zCy)&~KW46;K;3@^1|BFaGZ%92oW@)|frkGK3?_5+1UmmSFxbr16X^ZVz~C`gPhcYG z9H6;+0+aqTFhtDN6POG-18AkCv1or-CU?`cZC$Q>214F}HJ%QE#85la| z>Itm*&%iKaF6iDJ28Jbb^#s=aXJFVcS5IL5e+GsC4t0%A#bpFj;J%LT2 zb8hD932gq)z;I`-p1_v>3=B`^>IrQ9&%p3zuAacQ{|pRY=IRM-|IfhiXRe;W4p4l~ z(-YVU^3Oay0nphy0`v3)K%mba9&%hut4|MMt1B1*wJps^JJPPyl1VHEUsLaz7 z0G-LBF;7nbbS{t1JUxM9pm?9BCjdI1$7G(K0O*V!3n*6&?Z0vAEy3#D7;=?Q?&2I_#)J@fPgK<5NafYMXu=?Q?&44MI@=giX+ z0G%JS07@^JrzddjKLf)GD7|K$p1^fb{6Og~^YjF6{AXa;0j2lM(-XM)pMl{3ls+;~ zPv92l93v=wW}cqFZBTlI(pTo`3ETmtODKJ3o}R#6Q2K<@Pv+?f+ykXkDE(%hp1}S8 z3=AKj^p|;{dqfx*en9Cz^YjEjXIrt%*AsXIitqV)0-$rQBuUr*rqe+CAZ`Fa8`K>2pQo&e}ftdRM70lKF!w?c>SM&A!WXvz?=UJ z3_0`l1m1$u@q9gjcmEj}YUb++fHp?7%-0i8WME+EnXe}R+AlC;zMg z3=9lw=IaTlGB7Y~nXe}RIwR@8d_4hm(0x(!^#n8+7#MEM*AoC8BJ*Uvo`4qUJmUF! z0@@4=3_s@U34qR(WLTglpbI*ec!8b(=d7q769BE(Q&^xU z09v!BvOrG&v~Evhft~x!l0zCoH+RGyg^aMZ)#!oEJ696q*KeIqj05tw|VS%1N z80h@x1$qLYO?5XG=m~(<+22{9CjeS6_+Wva0BFtNlLdML(V%!(peGQ+z`*clfu2At z0|NukLOp>v(7DhH^#tM>7#LI*>Ioz;FfbS_)Dr;pl}#4v34j`A77O(Rk{K8nY!>PX zfI5*53-ts*?F^TNdIF%%vd2O_0nnN!pM`n?pgJ*Np`HM!f(u!wCjeSM7_m@K0MuBC zS*Rxf>PIIm)Dr+TmQxn$34kWUG8XCyfX0n-7U~Ir+K&Yb^#lq*ZLfuT0-$x(6$|wQ zKpl{pg?a*@&R)YpJps_TQOiO-0nmEGj)i&xp!wLIg?a*@b%zrc>Ir~4{Zkg|34qog z&RD1?Pz_4I3-ttQK=H6pPoNf*ei!Nq)G;tH99XC)uz-Pq;le^afrShV40jgl2`pk@ zV0f}nPhc@9+!pEyECGevLOp?{phnIjJ%MGQ@LQxOu$+N`L1dAhzzWcP6pQo(Rx&U! z=q%C`SOq#?dy$^NYS8-6MS22jK;{%C$J8b{ub#8tOxZ=7U>CW0Qq;3 zp1?-X`QMB51U7;4-y%JM&7kzONKar3$o-4-1h#_QzerDD8_4~O^aQpuFfbfhq$jWg zl>Zj#3G4*rzeRciyFl(=q$jYOfq~)6B0YgUAa^g;6W9yNcZ>A|_JQJkv7W$w(0SmC z^#l%p;(f86z(J6^7wZWe0H zSWnL}PfmaL+3_F(S3A_gRYl)t~8<4-2=n1?9 z`D+Q}{*nhv^aS2BFfhDXq9^bHTdF7U z739CAdIH}-@wQY?;5!2YgUM1ofgd3ME!7kF3G&}kJ%L{!|1H%M_zjA;rFsH?K>k{) zC-4`P-j?bK`~#)8rI3478kXt_EM#P0=vb;Ju!xa?VZu^9fyImr3^SJM2`pt~U|6tJ zPhc4%1H+1?dIBpM85lM!)e~67$iT2?sh+@UMh1o>OZ5cSFfuTlS*jf)Y-D6$c(GJZU=t$)!-u7M0-G5b7=A3(6W9tmtah26z&1t(299NV0^1oG z7zCE-3G8HKV31g*C$Ni=fk9=Np1^KK1_qsFdIEbG85m5K=?Uy*WMFVurYEqEk%7Tu znV!IYMh1qEWqJY!7#SF1mgxx`W@KPUS*9m&jFEvMXPKVB2}TBnl4W`Vrx+O+YL@8< zoMB{OXj!HwaGsHYp=X(%z(qy|hAGSR1THZ$Fw9w|CvcUKfnm)uJ%JmH3=CVA=?UBf z`E!|`z-^HKmgx!HV`N~su}n|k0my&L^aLJ*{I^U`;2Fq&%k%_Zfc&>iPv8~Ef6Mg* z-hlkKTu2IFflM(Sgt2< zl!<}i&T>70V@wPTFP7^GTxDWl__AD2;0EZh;1zlTcbOO%I9BKh++$*35Luxo@RW&x zL1BfSz%wQW2Avgp0$-UJ7%W!k3H)GUU~pNXC-9evfx%~mp1?mQ28M_gdIF1>85j~) z=m{)lW?;x!p(n7EnSr5Xg`U7NW(J0a6?y`zm>C#4R_F<=W@ccRvO-T_4KoA7oE3Tk zo0%CHR;hqFdSK-C$O8Df#J*wJ%K&U3=CIR=n3p) zW?;CnLQh~nGXuk&6?y^(m>C$Jtk4rU&dk8@W`&->8D<8CA1m|(&Vvp`Ua2Q=k(q&k zXQiINC1wT&k(GJ^mzfzD6jtg9++=28&{(M_aF>~Z!CIr;eW?(2-sVDH6nSr5ZrJle~ zW(J0qm3jhynHd;*R_Y1-1Nn2MomR_O_BW?^8+S*0hig@u8kWR;%4Ru%?^npJuN+gKPF zT2|=^Y-eF$=vk#Fu!DtxVah5!ft@T240BfL3G8BFU|6zBPhd9-1H+nCdIEb`7#Mb} z(i7Or!oYA~m7c&p76yhBtMml+voJ7RSfwX$0OZeAdIASo7#JR`(i1qu!ocuim7c(1 z76yh7tMmkpurM(ESfwX$6m&@SYCVBtEDQ`BtMvqqvoJ6Stkx4a!NR~Gv06{yBntzB z!fHK%Q!ES&8msjLPO~sD7_8P4IK#rgV6j?H;4BLRgTrb)fpaVj3?8fX1kSTCFa)gD z6S%;_z!0%oPv9a814F`UJ%LLs3=A2o^#m@nFfbIX))TnG!oX0mT2J6A3j;&LYCVB# zEDQ`CtMvq~voJ7BSgj{;gN1=%#%eu*o1l1HttW7cg@IwkYCVD5p!i&^CvXSk|J8Z| zcR~JNttW7gg@NJBYCVDbEDQ{HRzv!uFIMXbtYKwf__10~U^goR1J4>gf&Huu3@U5% z1P-z?Fqo{-6F9`mz~He)Pv9^s14GOjJ%J;v3=9Qp^aPHwGB9+k(Gxhv%D^yZjh?`9 zRtAO@YxD$8ure@gS)(U#l9hqs#2P(;Q>+XOSJvnWoMvTUc(6uK;0!AR!<#jF0%t+? zuF(@X$I8IKvQ|&vJSzi(z*;?l3#<$bGHdk&F0wK(Xsp!}xCC;?T0McwtPBheYxM-K zure?Ntkn~^3Ubd{J%MYi3=A1-^#rc7GBA{^)f2eE%D~XDR!`t2D+5E%T0MbVAos1+ z6L`SNz_4bmp1?y^28JDL^#mTVGB6xjt0(Z7m4V^HT0Ma$tPBiy*6Im7Wo2M^u~tvu z87l+Bm$iBV&q0TouhSEF0ScdWdIB$585k7S=?T1IWnj=*rzh~5m4U%#ou0rORt5&2 zb$SACLGD_oC-9Dyfgxv|p1^xn28Nn-dIBFn?pdcN@Db#mb$SAyK<-%wiHAMw^aK{N zF)*B1rzfz8je+6DIz55KYzz!f*69f>VPjzUuue~4Dd^Dj^?Cx!*ccdi*6Rr@XJcTH zSg$9rf{lSeWxbxjN;U=tgY|j>tJoMAY}V@utY%|i@L8`Xu!fC+A!favz&bVthJy8a z0_)ir7;4t*32b0vVCYz{C$N!?fnmyeJ%LSZ3=B)w>j`XTV_?{@UQb{P8w10h^?CwZ z*%%nktk)CR26ESWJ%Q~YcdgeG*a33adOd-iYzz#4*6RuEVq;+7*q|q{8|1DHdIEdc z7#K7*=n3otxo3l(zIqzAV_?wPs3&lVje)^p zqn^NJHU3EX01U|6wHPvABi1H+DudIERY7#NOh)DyVN#=vl8qn^M$kh?bO3EXF6VED07 zPv8L?0|Uz@J%NX83=9IB^aLKUF)+w%(i3dyYc}Z#yaTyw zlb*nPkh?bN34CB&3XdA*%%lyHtPxeVPjw@ z*{mnk0e^h0|s|frac040|@~2`pk~V7RbZPhc@S1H*&OdIC$> z85q87))QFD&cML2MNeQEI|GBt7CnLG>{Y-DF(Sg}Pu?5PhdC5{H=Nd2iX}Idba8b9Aal+ zn6Xt);4nJ_!;-Cf0!P>x7&dIx6FADwz;Ixzp1?7XeOvVej8vB0B>^#5O&FOCW!5(-XMD&cINxO;6w|$bH-N1g?SHw@pvrI>>$7 z^aO5z+_z0n;3mj@+w=q;g2H2)p1>n^28I*c^aLKWGca7)rYGP+1_qDq zdIE3R85lyg>j}JLXJAO!t|#yw&=Xk9!N6d$Lr-7{2Lpq{4n2XT91ILTJM;vWaWF8%?9dZf z&cVP?utQH^1qTB|%MLw(l^hHVGj`|+tm0r`ShGV_0&6%J7|!g_6Ijc^ zz;I`Wp1?W|28K5~^aR#(Ffg#})Dzgi!N4H1Q%_(c2Lpq_PCbE591ILDJM{!Mb1*O@ z?9>z3!ok2$vr|uCD+dF^gq?Z<+c+2)mh99M*bXv(r=Gwbkoi0H1om<;Fx=RwC$JA> z{!TrC{TvJoKX&Q~901v~OHbe+2Lpq^E{&W^aSp6FfeS`r6=&7gMs15EcIgTH28F{eJ%K+Q3=B_p z=?VPhU|{&LOHbe*2Lr<&kUmZZ2A17=0uMMD7({mK2|VOvU{KkuC-8`qfk9)pp1@;H z1_qtodIC>485j(9>j^yNWMDAattaq;lYzlvx1PXDP6h^>-FgDAI2jmxcIyee=44=q z*{vt=hLeFIXSbffTTTXsn%#N=?>HG4dUopxyys+Kn6q0?-~%TE!K$k zvPVx~ITr&%z#ct;6FO7`ms zya4%gzn;KLE(V4<`}G7~aWOEg*smw>8WjHf^#tC4{JURI;4K#e!-@TR0`EZauwPH$ z0~Z6sgZ+8}A3^c3Ur*o@$Q}Fj1U`ep|A3yr7cK?{fdhI1UqRt;Ku_Qs$UO)21ipjP z%K<%sA6yI!9tZRUesVD|gdETl_{GJ*ka0jy;5R7z59kT}0foZ>J%PWVa5$hR@DCIY z2lNE~b1^V%IiM%7n45v&zyUphW!wx5XAbBItl(x~xN$&FU?n#L!-E5Q0tdJm7+xIE z6F9`p!0_dOp1@&l28KTe^aPG@Gca%*)Dt+y&A=dXP*30#Hv@yjK|O&p+zbo~2lWKb zaWgPz9Mlsy&&|MKa8OU+GB*Q*#X&uRYupSBE(i4lZg4X&1RT^8xW&!D5OYvZ;0`wf zL&iZpfj`^~3?&Ek1Rn4(Fti-h6L`qOz%b#Up1>m>28IO(^#mUCFfeR5s3-7*hk;?w zK|O(|JPZsc4(bU!<6&U9aZpd-IS&KFlY@E!FL)RjJ{;5&c*(=S@aLeOz$+dG27yC* z0Ewke76ZpZy zz;NY|p1@BY28IWR^aOtKFfhD11gTd*LtP*YJ*NP2h5=~&3VbpF1NdwLkUVJ2+%czw z!O0MIpQIs!lM#$<#NcEMV;eI#nZVd43{Ivnwkd;eehO%6fx*|1fdP8P5=aa*&A{Mm z#K7PWzHX8MBxVe@(-_P)0kciOY|zvLgRdzAgA4e2KG1y+kju;hOA}LyKntZn`#th1 z84lcs+@lE6d*VLiE=Lgi!hOg+k0ADq`=IkpK!ZgL3=fdlPrz)@APfV;3lJNkgy9Vm z`wNH-QNr*8iOujpPk;f`Z)RX%U_oN@fY_kRoY#L4I*SV!I%*eI7vOl|X7jkk}CqAoDFC@dPAx$^$)t29O|VtP+V`0CF4j zo~sHd8|3{4C>!ME9w-~C9Zq?tRx-e@$N&ikVS>C zLsEQF!CUAV+(755d*(rC|I!kW*{&4@`Ji1PVVT95NtrpBC6x>eE|BBm8A9`N6AM7* zB^EFQrGi&;g7rA(=cQ$)LoPXTFG?%}X>tY~-;e`ZsmQ<(P?TSgS_Co)lx`vCy@Tum z-^mJ5!r+n$KEWBx^UW_UP7Tih@3n%P6O>vAx&jfT4{jf_82Hp&1_s~60=Q@p=*;z0 zI2WXqLFN%8{eqID0uo#25#(M`&=8x&BS_i@#fbwF+vgGF4pGp(V=<2)_lSb#)KVTn z?ivLp!<g4k;wLGC&Qu{S(|+`kH9?|B5dgB8R+@kkGR4=RX#;gOzz6xg>+40j&s z3CMui4h%0I!P0UA!p`B2c*55r@~oG6IR^B6KO3d&{@kM#r~XX6Pl=sbpxfSWiF_Y!@ixzzhrm6z(7lO8X!TQVGh|APfpW5C&-ig&zom z*r0h$aGru`1ZiU6U;rV=1ttQZU6!~g&P|JOW)lz$CRA!(=MDX83IV3_b!PvGBw$o*k{`6ZcYm448Z zZbA3?fcWl3iAgYaXkI#)2jholWagxT6eNMp<^b7!0BX+#s6BU{Lek`$r=T@0$o4qq zC8rjH*MLLp4a+PlDFrVChVVV}(m?0P6v6EB%Lm=y06JX?A`j=oHA2J#K<5jB*NLI< zgYv;=7(m2aQbA$km!AikMg=*WLE{-Dd@PMOojro9*|Pkvedj1D+TCXv#`S-L1#{a4yn`tZ@JD(QAh%9jt3pI z4h|yFS`S~)@yh{;B_*jvc~%NZi77dipbJ%sONvUt7eb??!Ad{}Zh~!9NXpCuUHPKPkeHIfkdm4MKEo{? zbc`jq21MNZ`{Sjaz@L|T0xYle1O#3|(h=k?4F%A}8=$2h3=lp81I(SppsF%2IaR?P z&H|ri50gg-qsl|hXoe&m1$&68#UQ^zHG(XIBp7J10S$4qWK#}Wgpa8Xe=OSAFfiEJ zF)-+sgO4p@&;_64z`&pjIbgRObn5~r2k1gB6J^j%&M(a?0iVwg+Fk^@>l9QhG3cg& z8a3cEV!?-T>1L-^f-h|Z-N})iT3K9~%b*LoO9sRTElLGl;sRn9fC?Z62Hhe^SqG*o zp!`Y(2HoP+ycBTUf!Rfwi8&0q;Iqa-{L&;y*n#fy$OIp{r&|tLxT_0wxh_j`MQ))O#zttVjdT2H{?wVr^-YdwL0*LngGuk{2{Uh4_uyw(#a zd95eV@LErxj}Jgttas2H6+cT-4hB*i6t4C#R`c9kh82oOT{5hRLD$GP=fXkK)1|>6oGmO3c2|y zpzBbJz~@wh?qezkmnEQGCkpv_snApdJMtC0jRky-5=0q1jpDis8njjmc9t+Cnm{M+ zLe9v|%U6KLBKTxixHRm%T2Q)x+Mkl2S`4}v1+?R@pagm@FX;G1sNeDub5r#*!TVy; zGE<>viG$9@hh}@w?Mz^QL6bbxSS5Jg0w)3FFaU*QN-B7>PG)`{=oI2a=z-NJMu6Oy zmk%+n7=D;J_y}HTS%ApDU^|KxauX}T7A2*E$}&*1JO#8yJVn7V*xAz)RQ!QXB}^?+ zFsM)kEgeF0qmqq{ogFr>F~CYlC6II;yvl&P19FcS==^j@W`nqzfdLx1sVSgyj!W|M zKrsZ0H&FP3-3&QcIKK!KUB#8TV0mzqfy~NIt%MqcFb5u$46v|)8v(Ui8I%Me${12B zN{SK@{w`KXOe;w(Qb++eNI>xb_W=XCAK@~vat5@P4&LY0h4q7Vq3K?i0kp;sgh6FI zXr0{$eufB9hBaCYVgU@=3m8Hj7#AO4aCKyCKE%N4%E)|*fwhE@YXyTy1j7q`h5%89 z1>oC&m6RA5Iyx8_u+tqKN=o=}Xy~d{_;7jo-Mjek|Nrcvp{$FvnA1cVA><)0W;a&G zCN5?+Rz@af<~CNwLtF@1h?+%O%>VzhuU^H(V523bCBnd9FRCY^1A*69gVyeW(((^^ zP+)|GGQ3{T@HL+C_kM=bSjOM`m`Y<=SMTErjb~rIp5ah>IoF=QW3bY3vo`nLUCdm z=z`{w)S`l-RPb?h(0ghiDHVRXF8E#nbq94&T1$kKO{qmi`9<*i-ypVt?}h`FJ>cvM zE*!vR3RD)9Wf=0no91A*_JZ$x0TmyRYhXb84>L=06AKhzSF<3F@dMc%k_|d!-3hD& zd|v~oActP!g0K$iXHYH#ov$A6mzbOCp9awdy1Y3xvn(}50aoZj9S1uj927Sp+3~@d zRV3?iD@sj;+5$S$A5>g`cQ`7bIUCfLL{eLnnoPh&@g>=y?8xArS^_bj@bU8CAOfui z2FDZV48o$sN^?`tdG?8wrUnq&2+B7!0`1)^ElLO9#E58v6@msHpdCao8&p{`Fff!S z7J+UyWC+QIoLvvLOacGd^*)J7;Qb_!>oge{oI!gWA!QvyP-04EK9v39v!1|*&w2ts zKI;jve9;pCkB+1=Fu*P;1H}*Qju3?}dIB0>^aM=4KFsW4t}WpPPrE+iz}5<$0nGcY*iKsM??%>(U> zg(-*L@r7&xPc?_B_85kgm7_*HFY4U<^5MzK`hyY=O26}aq^K%QJ z;fursjR(Vo;c=%6-KYhn7@SLsib0!qbzzAJDRf~%$f4^3y09oGH3eA=5(Y3CNGR*3 zrGxG}fXAyYlDWFji*=zCgB$do-D=-ph2X@zVuj$;qRg~f1<=}eWPM0R;7l_R+YxPj z$bD&`v!%gJfAHD4x*3`2895+6a;!2iz=e?_*aM~%Netp&)HDi@bGRX(qq~X_W;*BR zfWjGW9+VF;3vw%pTTvpUp8z+bBqK99I}dbZFI*@DF2n#g3rP&L-#{09Z5aatlwts1 z4GrqgWR(_!Mxa3D1dQng6@sVvg2WV1!?7SS1+?^@As{gYd=IZ~L1GGM4SGRh3TP=l zLL7R@2b5w6Lc6yF)*pg)ix`5T_gTWqDczF9>{Mv~48#PFKZDjVCuXO@*kC`EKr%0s zVt~gpNC3P^J_)=J7sL$%?U{#g8Iak!rJ#d@b3jMrG9WP-LJ`8?dxv5DGiW!B0g}@g zAZZ75y=_ivUV2Fe1BmGZVKRglB^JQgAoqg87&Lx);ESHXl`nb%FTUsreE9+ypMecW za(so9&7dV=0$=q6RKDs7SbWtJaQO;R2P&*Ujh6_hI?xz%!dE?kjIVkE1z+_9Dxm7X zYvDl_LNUnRhOc@8Jzw<%W_;BXSOQfCYTtsC?0}lb3tFoVWrM_F7&N{KVjqFZfz(}r zvO(f73{!UlD#s35qyJS;;LTS(fiGY61P<&n5CEwG?Xdy*1E!A;wATHro&e7`JpqYt zdIBonAp1~2dre?!Ks0DbSL2(WfXO#K0f%pT0zTg$;R0Iw4U%61t!F^Z>X2`G0x{q8 z1X8}~2^@sl3tEGYY%eIBbH3>bGKgTx?(Pzj}(ZfZWvtRsbbH@f-17PoUttoI9a0oor03KvlLfz*I7H)wCj4?TgHA9?~QKlB80 zen9*S+LHm2hhdPtB|r28YJTVmwEWN$==cHIR|48Q0#gH`LF#&b=m|{up(ilshn~QK zACUbcpgkfWc^C%WalZs)21x#gp1>Zcy*@AnP#To3j{MLQIP*hK;K~m@fjdxjp!x=+ zBmmI5Lr>tt4?TfDKlB7RenR#wp!*l3j_0SIfXGih0hynA0*7}QfahI6>Okhf zFi4%sPdx#XpLzl=KlKET>@ooFPXnn#4nGh(;HREI%uhXmjGuY}B|jnI2br^hna02X zGOyyNoIqE2l3qaJH|3|Ez=EH80&9Ni3GDa@+5ZFDKiaONxLubEK4k@TCw4BF37g}mPMZ&Lk7){&3B7m;rB5;1 zHXI&pL(oDIirR+Yv2jQP55$DE_590Hi(qU}I}uc$Qrdom-7%+IlvVg`bp#CtV zi8|=prl9u2jDLCpYyRm89QdavaONMReu1@1AN+&V?V$FjO*kogZ$ z2Wyua{D-ImwM#Aj>j^mg*Awvg4?0r;q7GZTG~&OWK+1nTfr9^f0yR+cVC~WgQ1d|T zuNhD_axDa^CqeueFz5?JFz5>$hq@2F{R%QKfk9s&he2PUgh5}R25KH?uP4Y( z8)&-)6mK02`T}zp^aVCB=nEWyssrUqko!&`wR3MU=nLFo&I-avng?s=o?wKy8|2>$jQRo(81)4{fW(*}?!(s36=BjB z&|uORuwl{{2w(z*Hv=^Sc5RAowkKZUtkZDzQ7SCeSs59`rv)m*xJKq znDhm%FzE~2VbT|Pz@!h}PmQfT{Detg;0=?$z!xTcfj?09p|^)YZeU^77Z73A7f@i< z7tmpbgdcbz49He#5LU@Pk=jfQ3b0K!63}Uu^Ab5f*&`85Vs36&8H~9Tt6@?P~)TeE}O5 zeE|;^eSr`beenKzV%ygs|AN8|h6hjk8Zs^g8*71&aX|-6q12EbHw8DUL1%V>u4Bkc zVW4jNIw`UFcvclw$AzpO*(67lRK_qI3%p z_&g9qKP)O3AY8~OH{>o#2%8#X&vb3uBaLGtF;T~`p@Y&;imb6|Q2YM}r@jCWm%e}k zm%e}w7o`4!wf`NsAayaQUFE^0FA&3}FHpdxFHi$j2W$UNfT{zv|7URN3oPK$7g)ii zFR%fs4qN+w2baFU5iWg!3tajFccAKE?f(x@^FZzTA5bkD*n>kCZb))!d74GCv#?f(_r`T`rc^#yit>kFKN zx(~hm4~mZi-1-7nxb+2IaO(^Fftm+v*Plmf*9-9I3yAQbh7BxS6rkducD)XdzJLjj zzJLvnzJLo4#C_P>^$|S!0x3ND0tGz!0yR)|*xL0Ic=QEk@aPLH;L#UY!GpV9zlKL& z;0TYtzzrUKfj3a|VC{MaUWmIv{^j7+7m(o97tr9<7qH-kxDQ*q-iKFTAc0q3poCXn zpo158yS|54UtkKazQ7!)9oX9Spr~HLt1qyHS6|=&ufD(;sJ);wgFtdH3>xRYz^gBC zhgVl*L?f)+z`}p()c=+@MB={iy2!R;{r9tURflpsRhfiO?f=^$-flnWN z&JHZzpvu7GzAk+F0s(yb0ug-r0ttNj;PZOW)q(mQDSY|@1$_DfHGKL47oh11Tfd`& zPhVgHpT58hK7D~Xe7O4^3;6T}R`BTyY~a%u*aE_!bAezEgVG>-ckt;89N^OzI03R3 z>RkC}O z)9;wWuP?BMUteGkzrMgFJpGOn{Q3e{`1J)I@aqe_fw~V{zvBbHzQ7-TeE|*ueSyon z3pDjJCy2E{m}^cTZ9`c9bhLkhWzENc_D{-Ei$?nv47k>{(7A5`-Z=#848r<= zx=0-jBqmCq1Jb`rO@Wk#p#2z-ofnk!K|pmjsQ#ZJrZ2EYOkd!Dn7+UnF-ZLn>xVoL zgVg_^cHj#!eStq>`T_#t`T{cI5OuJAh=Djn9jG5-A+9grAg(XqA+9eF09A*r9}*$1 zFOVXxFHj(^FHi$j2kVDSfSL#DU(A5ALGFcNP(2J{&wjEK#7FD zK!=3Bz#OP~uztvOq<+W-34MVr5|H>o50?W_aZo?xjD)_x6$yQTI}-W=PoU;u>xcZ1 z&=+8l)E5wt)EAJEg!ltnKg2*%U%*0AU%)|9U%*2WcR$2OQePlNQeU7#QeU74Y96c~ zvOp5zZczGLA*nC0LsDPhgrvT}4X8S7{g5{xJyQAtB2xMS8dA9XAv#j}0wz-W0ya_* zJ8<i7_NT99BF-lCDQr=Yd~&;nuo35ut!>7;Dofkz!j)@xcUtb zr1b?}Nb3uHkk%KtiKpN2Lt0;eLq=afLPlTU7M^~Cij2O1fsDR@jf}p4hYTcKu=N{! zWb_3>Wb_4MWb_4Y?=ryJF9d~4ij2NMfsDRDjf}oPhm1bFe*w#*AR44@hK#R~b^`RVDP#iZEmAVxojvc7_Nve%K8E-%K8EZ%K8EpSkyTv>kD`&>kEV^>kA|(>kDKk>kAYp>kCvs)ix;W3v?*! z3rtbg7g(UIFR(&cUtj}N4rUi}zZfQlOoQY>@e7)(Ll%dzLGqv-@h~-@G7wZw{lp3Mzw9K3w1}Hnfv;?vS8I@mL zl37pyN_H@HZ~>?~SaXZPK+k|d7i>CcuWMp)Mt)jaacT)Kd?HQY%VQ^GX;j4Hy`7!9HbR(1p24$ACc>$*!av=w1$} z7*rX90g^hHb)fP4q7vx*5_Ex%E=&^Smg161P=M){B&LJ*u0x`pfx%D@RLV0jh=9hX zR8jLGtj#z@RbK#gXX+JX&;o9LGl;S3=6{?9;@2i5(^@(pP60%-o9 zf+W90O&@$-Kgj(c|AX@33MBarYWm=F%|Y@o_iaIv2Z@2&v@rWY{@;Tne?(1R0MwQR z>0bbi{}V{^SJWWwL}dMUkmTQ}=?hE%onH<*`(0IE0ObD(w=D+*GKU4*D?rGSqQtyn(1Au!K18%QIWZ>{ zv?swp!9c+fMJll|CMRFCV!VG0#0IAK*FH0@SR{$}I)y9yVlUV>d6DPe0 zeE3VMLV9sxSt=L!-ZqdMAg-pOA3!JSBo-wjIo?2_I2Bx@B_|eutOVU}2|9=d?iQFE zK~)1t0lHh!;qJ?QphbWE&&}~l30|iqX1T;1By0;D$u@j zU2west>G1v7;u?~T;C(t@zDAfd1x3`CqsAZF~ImpD?319kPU?Jy;Mjh!1npU>r`Yp zSe*(r9j*q+bmV<-@H!M$CqnB#PpvlAPE13QlX!4*m zf~@}snmlN109l?#4-q~RdXV}OWHtzc%3}p2d5{>aJWkMs)W;fV@*p)J^K*3d1qhXw z(CB5jpsz2`0lJ?>L{-2*PhUVlLRG*)OjW=@N>yNitSY#?oFK0%P@teHa6nO2z(7$| zph1yd<)slRM}P3vn1i5afasg_5GuR0U|sSA!#^57LjE zPeAey(BzTxAt)cbK$C~%gBga9eDDEH9%Kh7A1pB>oDZPhXSiXc55C_>KuuNPhoQcJ zfu^cJg1V{zgSM)`2VF=$xS*#hut8r{puj*?;DC{;fPnGf&j*l11tu935NV6yLACx=iYMGW(@)S0eRGp)LjYHM8&o9Y<^o5HHK;=0BPTY@++vmUV0Qn!(|J;Kl zf5HS(pMvZMsRjA(43a!Z3|60m^n>ibgC>vOzkGuxkKDfmna^N~h#vt{ME?;KexSh^ z5hQs9Q+@EgUdZm#K$15wMfC3^py6+VByVF1S!V;%|H4=w)Rkp$K#~tIg{;>B$%Fg~ za$g9NJV*>yj(#zQ^dDo;4_!n2@0=pb)Jpupv%WU_uO} z%mSI=;HD~2;Dg|U#9)}R{##-m_=qTlywcpH)FOD}1a#I4-hN+Vi9$|lVsVKAN}nz@ zFNFbg*bbCmf z|9~$QhdQnpauyf3=u`lgo#2CZRQ13;Mkv9+04rnDGK;|HA?754DTX9a!38?I2hq;~ zDb-N`E7VZ{sRMU+pb9~LfZA1%nhdsz0jv~s&M=ypAcH{h0j`yxeNuSU1m%O}K>a&# z4_3iY!9W4pWP@}`4HS&c3=~j1e;_lVEhW@`GH6Xbv~LRQ_n~(b4beJ|MreGvdQh3q z#lQep59PzvL;2|aN_0MYKa)=NE_9?5)IS6tegowrDj;Zm3>Sd%p|u{gex|fuh1v>= zFL?hFDh9I{E)Ej_jj_VotWej0>tIlXg4zJEv0PC2Tpo` zxxyMzKY;9q)!!}FkotQInmp*i;>`kouj+2G#wr`WNJWQ2i@{B(GqDS^uga$%Fh4tA9cILH;vAlLy@^ z33DGv-UUq_y?%~BlSi(fLH;j5lLy@^2{Rw${}v?qDK?1u8{~hG{WFl{7uZ1BH!%I6 z`h5kG{1zM3_6^AVJxKCLY#{YNNdE+A{GULQ2ZaylybX{%hz-(z1xfyi4WxYlk_YJr z`R@giJV+0E{rv-3-WF2Ng4zcO){yoCi!CC4MQruK_hN$NL1uyMmq3ySiNV?rIo6Q& zg94g7XfG(peIT_U{W@s!AaRg<1vGt`Aj#XD@P@pQHP^KynPzPy0D0Hd{1oWv2G)z+!Fqo_=z%Wf!U;~H-IS907 zph;E0p`E_%2W)Kta2*J(59wV$rshLxDD-+OH6K*qa)I~jfX@2@&2GV}N>I_O0IwJ! zBe1&Qoi&hi`JwE5&?pJ0uLc?{(FGkroCiK~4sYY-l|IW`oYH1*rv{gsIx81^!V|171v}do6wRRis)Z9Gy+7DxAb`BK z10?T)B>!-i0r>uCkX{f5$p;|GKiXv=06wG&B*_3d4!}mfdFVt8B88D?oxpy|7@25_!TU0r-A!WcfKr@-Lz5Mv&!~Aj!YlWdJ?LAEttVVGWY}>ssm^{e;dywSc?lKU7l|>*mAo(Lm^6z#*&PxKxfiOt^1d{ywT?PWk>k9~#CstOV zle1Ivic5=9;|q#Y^OEB;i{o?h6H~xPWisUE=jA776y<{sNlPz+oCg6;>d-lSaN8Iv zfYeq;Xwy+(0JWLHN1T^f(psE-Utm~MPpOmU=tY@I$8W8LTVu0m9gsN&tW=T$}l>%g0G-z6g0cvJu zex6HWNvah@ECn>^3LffY0Fw|d1H=rc{8I2a^_J)v=v|is;aJeDWHwHsd**ETwDy0bW%_pUr>~q zm;v*eN@^MxgQ}`iYIohXPt zaCpOO6Sx?7CK1}h0>uNE59*Yceb|A;8s)iILX6B?8ai!*^aH*=g`n!RI8DLY4 z#TohKpkkkkivf~m^o&8_0wao3ON!EyAeqcD1+?cCytR`H-0xPh0w;BFJ_N@v=tSGp zypp0yu#-Sta|Y0Xu8`mZt6)$_%gjrGFd6h27#M;pbCdFO7#KW*{ay1w2e~VN_K=o< zRDj(HTF0wuU<8`_g18UL2A$aq3TM!H{0hO4~t;$@Ei?N@~s75RiKcPnx?=7 zN&^ZC@D>Zmcm@T9)Vvf0E(QgKT5t$}1VPKRY87(w^9vL}Tm}$dK|#Mlp(j4u1d?N7|f0jXqw z+Nq!bY1$O0CKe@UC{!2Z7eEbz=m8s5T$)r|QdF!^4blk_PXV21kHv1NX3)3^M4~I-dQoa(N^waM zs8j@555n+tsb8UBfNUNlK8s60$I62e9X_)`s_>Z&iYrqEV+CD9g`)hN9JDwCtry7v zHRnr{;9&?4aqy;gU&xvikTI~RVNg)e2l1oJ!AnOnKx8b!{c!zAp-_-n0Zl206sHe4 z&OyNtDg%mh=*V7XURi1pbgc^L7L?>fa3WJsfQK-$+dx4Kjuxoy23TGnlD$C+5G*5wOpue{<|`lfRxYlVG^)Jl$%%qwF#VSAtr$$Au}x%R4IXy4mciQhJfTiAqNU~ z0|gCD1^wXCB)80*R2PWb(=u~FcR?WK6NIaf%LGJj1jPl+Imjx&J}WJNTtuOtmYI`U zQdy9y04?bh6!c-5!07_wa!~$3F1id9Fw=`ZvI0XaaRS$ZY_NiYv5^8ejFLd@Tu@SB zP=GA_0<-l)vI8>mOY)&b2m`tGH7tU_%>dBi2WWi+6GsjqP@;ncG$=k`0fMXs6pA2q z_{v8^J<#F~WD>bK35p*?iA7I$8Gzk|Ok%nVR0xlj?bImSp=FpkxVd8iDVR|UtkLp^ znDR$Ir8GCU5_IAvsG6dr4574-qwkVhmYEE?+pv-$+EBqDmVto*Ma)3K5J@b^-HCxA z8dR4;F-Q(H<_YeX6c;2Wr-FJOpfVQPvQM>vKnr9puzR6)GB6E&fmI`|(}C+i>;r+X3j+1d85kI_-thn$ zBgjkxpYIC0YXo&o4`^@&bf+4m&kph*Y^@w@4>fGO88kKynm5XcK#Vhk)E7YS*#)sd z^EMS|@-0a6pmE*~B>4#u`rvV7*jOmY{255{ATwd}iXb+~{1s^Op!J@hc^8m8NdF!r z`6CgaGd&UeLO}bh&LGKOiGZw=1L*}}(3tcKB>689ptC>`>v}-*K7WwpSt1ehY6%gL zc}0#$)bN4LD|tjf=9L7{D)8V2WZr4P zBUOQb$EpGkUZ@Iuc&sYm@I+Oh;fboihUcmR3@=m#4%}50FnB(^K`Da!GnsRypJ^QpQr#{rIVkg02*vbPc142Z52oa z4M~AoYB`zNsR~NEdU_yZ!Q+vjB^D4pO5m|d_!bhVe$b$PNk*zdQDRy(ivbVxW+um!WP_#-LQ67p^pY9!N^|{7OA1O$Y;E&ObHh@L zN>ah&qPWy&+8Gcw%f>c0u>xW&DBkE{7Th0bc7yE4wPqHh-h$3!g3<|m9Vpt`Pp};1 zVn_y1J>U?JC?`GQ^#wo)6;@7x%CP_>`G|N#ISXCJ#~r zDo0J?^#wrY=OD?K#G}?j!VC-y6-e?Ry`aHhkbV%GP&o?qCPPAkz5u9xbP!Y%Xo%Mr za1c=wC=gN;Fc4D{5Rg<8Xk=hu_#mYw@IYEkV1bO9zyt*~0R=@h(DDnAH3Tta{T~Cv zi3ELt21PZ21Bz+_5HWK1bRmjMQp;9Q9!^w%_#9k%f^O$50o{5EaS_NfkomvT;#36& z1};@qRaH=#1}bS4G*pXqK!sfeXxaq(RxnVRSFBI~-+!Q>3z->LFaTwF22%s1o;w$K zrU^D(0~u$BOg?}tLEa>xi?mBZ7c@V@1)YomPtkC3f%d!_7%1TCHzQBOfEsOFumO9p zn~=6+z^9Zz60m#)3KNvJBGTR^BqqUo(U9*w!=*1Ab~js63Ip<;XSzx049I%W?*K+t zi+n#CI6s4Zm714dnw|mj3z+K);W~qM<3ZWrGg`ri3_$KNhcTT&=MLnhg6lq<_oqS2 z7AOTj8`nG;bQc-y5;0^SPriwd zjT975L4=S`Qez-|R~tkVBnrXxCg>bpQ2PftCPDYA7p0^YfyWvl>-#Cwm!Fna0=}3T zVvK)US_qg6I%^lqGBz+^fch~%52BO-sx}X-fPsO*AIdUAsD=6f<_Cy-J;Cic2pb%B z&;^iC3S=i}3qNEZJoL;gD23%twPeuT0qFiu@S(%SU~W)qI`j_8U^Koiq)~_xPY@wO z@dQ7q8Fbe*=#XBL%s@M@7bSk7_U9vF6g7Uqc@d(BBz@rg4$+6SdlEE1401m533Ax( ziG=$X)Ov;anIv=IQ9aehm$h8FVWku@1e#o}mH~>7Z2-;2VR` zxN!BEdC5hopyeE(wgW_wCz22Yx)3-#D^cyLgebyo7gRm6T~Iv)?E;n0p!U^_Bz=J; zN%{gClJo`kB3B1vE13sfGq)(CWu!k;940fuBm+YMwc z41?r(lJx}yaL9w&T{6k~0y@e10v5^o0xrq=;QPE_`a$mSNY)pKNY)ofN!AxANQU-9 zVG2Nfqhx)7hGcz#j%0m-3CWOkl`v`0xv^7{^#$f6>kBMN)))A*%RnFjXI*DM)fZTks*f>#upw1n;6SRrz?oEifg2!m zKpLSK)b75MsxR;)RbSvus=mONRDFRX&~p)blJo^Y=Ue?q)fZq$(-+`K(-#m((+A(f z2GtH;Cn%AoFQAd8FJO_TFYtGlfq)HC{D8v8BTZi*CQVcn2ZhgxG<|_PY5D>m()0!Xq(Rnw!}NpX8PfFyMAG#IG}842 zOwu9pF#VwTw@B9)@JZJfNJ!Tg$VrFv3t;*|@(t#!)fivm)0$0-Y1$IEgry&V4esd>XU*JW$zQC7sNFGW-@;}&p8TtYo8TtYO8TtYe z8TtaCehqT?$z%*ktGn{M%(9pn|5~CqrK#AwyrFBtu`IB?EGP1hW2)41Iwa z8TtY%GV}%h?=le3K-0e?Lto%bhQ7dq41IwQ8KApnV7eI?2=#kF9hZg}ME?b}Y6|_l zB2X7Pv6z7&F(suWF`a=SDJdV^Zw6f&53&i;Tc`lt30{_1T*&}BzX&W2YAdFf7Nvsr zzktr8C}v;)-{cLtr#U$zv8b4VAtf~@6|~i#Y1Nhzm(0Tiy11cbN9!L$Ox@2Gg z&1r)86=j*JpmmFtP`V{oU!W&fUtmhEzQCMZeSsyp`T}cm^#!)%>I)pm)fYICt1oaN zS6|>puD-y7Tz!ETx%vVha`gp%Tqb=_X0CO5GpIRkuV4Ja5vn~_23 z78H;$eHD(m`K5U!3Y8EV?mzp)r2Mi}qRa!Qa}+cEi!#$Q^AswfbVV>I<118xDM!*zEy`!eO)Sa=rTvtm#PpJU28NmX#+e)3>s61w2mSDFHpIVn3KZ*ojGJsQ)6JLsbOGEK}!G=OESw+ z6+p_Mg$gJeGgKHVR2nK&7%5a5p|GK41_NlmB^|V`42qRNQyU5l&~gWSRu-h-fhIdIW%>dYWe|VD@*n8zMi7QpB@7U8$Q*D% zPGV(#8ffkpY&e51sG?zDU|3V8FR-IbU*G_WSs-`jLQ*vY0|TTiP0KG*P-3u$7+P$v zkdj!Eh-x-RImA8opv|ff3!$UA_SoG5b%RB@zJLozNZ)Le!c z75V}TD)a?bROkzAsL&TUPyvZcNPNIbbOv}lLhS)3mHGlMl@L22Zd0(=tx%}2SFqQuRHy_|kl|Ye2n99=!eoG% z2lg|f>VSj+5+52C#Jd?Y9V^&Fs$`J$3}|6WnYqvc7G!XFW}Y!<91{7=_p;35%%sem z%#un5XxuR{q*Un(6jbR8)Ko#j4W_;Zp|}Pbmf$o2iAzx4DhD0e2X5n~C_q|Q3YjIv z3J84)puJD&sVPvqz)6cCGbJarB(XRf)JFOOwG(EhJzUbBp`bXmG$kK0_6^z#1`2mj zpDQJ^2!6E~=olx63I+zyI9z5jga=`RbV2qE%2Y%4;%Zbw_Jo^M>x1{LIaKR|&w}-- zhWI_A8glM3sI8Kmnv(-^V{%4jPD)WKxF40AlUNKE%g+H7fCXu#IiT&@3@NDvC7_9i z^wj*^)RH3bIu~fNV#rKkV8|@a1r@>IIw&_WFEKr}hyfg!3=9mAb?*!e1^J*!=pt|* z6v_sh17%l$I7O+2Fk?ae3D~e9Ls5Qy2}mP|2C0Me8$fL}P`?7=6NnhZr4TmUCn+ubL@gcG>Gs`lIOB2C{iyffv>K0$-~21^$52QH{O;PmR8SM2)_HN{zmNL5;qEO^v>QM~%Kf zK#jgYM2)^cLXEyaPK~}mMUB2dM~%L~lp1}3B{lj2TWa(Lj@0N2oTgYz0hU^Q0fAb50f}0D0fkz90gYOH0i9ZX0fSn70gGCF0hd~Rfq+_lfrwgt zfs|T(ft*@>fs$H%ftp%M@gzQSpOewa9*3HoVY9*+oEKSTQ2DRE0AlVEl+(8R%Km~>Z zGy)LS2ufQDA*`eTZ)_(*!R!B-s%~ME81uZM71dV4v>VC+H>Y$ha zdyavDVM>F(z=5Y~0t(L%<7l9EWhS&O4_2oDN&z5UkbW98%|P~+A;~GL8kkhTFsM(I z9q;b!mR|&(x>QI`%*jbjfush=fjnTdA?njV^9dmj(1Nj0jqN>%Fp#r%0e+U zFF#KgoDx85M8SqDGK6Hiq$ZW7gY_t+fwsgdq~;csRDuF2L!ksz94LUdEh3#^zM>J5 zuR!q*!U=!W1VXa?!6%%DfOLS}jLwe-Z~9F|5>`mgFU?5-jW>bQLUCnYeqLoR0|R)K zmIkOzoRnCc3b7uXI+RrPObv>aKz&Py8c2f+v?nC7G^Yf+nv~Quuq0B;8(|CsC{vV! zw;n6NO$TLH@SJ!$Bmk@wU@;16WJ3};C=I|wq2&um2%5H&^T9ibpq-qOd}zZ7wEHWy zphTf8Gf}}kwFD9ru$XcT@C2QSgh;+9eFcbrk7T>?s*rA5X0pfM3pVByO{xa1)A6JZA^ zSV23%Kz(4ar3#rT&_X06J06^$Ai~gm2W`4Rvk+JcGYk+>app@n=A=9pJGMXdVO$5XyuM3=FWNia_qm1GT_%7#Ki74jPjMi5ax&3)r;k z3%ImG@+qh5t1i9fCB;*QKg5ZPK45XzqAUOeaz6tySIbG-)bSTB(mY)ZX zW2|e^kqkj%Vp+=qSyKaX_3&Kl16~6FS@?pKYGCtG$SDNdS|7CVftmwe_yKL#Lxhl1 zGU{3oko_PGTZ=QG>vo_8Fth~)x@#seClh=+1$f;BbSx7(nZW>BKU9{Sn*ydm3Ss(m zk@h^mn6SIR;d>xpg%?t&!-SASJt#FX1ysf%i$U@fj=Tz8SOlfu>x+s@^RhubS!%2o zqGat4D6T;m>JH@W2OYadE#@7X>I0go6dSUxypji*TrpO3%cMFMY zia_feRKv`mo|L?AE-Le zxGrdo2}~WxA0ch}0vT=k0yS;=0u!L>Kx-O6>Xx)Y+6$m{6>Hk`1rD_73tVZ_7kB|x z2U`09QU@~+ME_~i7Z7OI7f@)|7cgjtxDWmQK9GM++Vur2+9BqH^nozUzb;U5(0-tR zc71_}c71__c71^isCmd|XMyyA+*i}CFVNAhFEFKDUtj@L9q8URkUR{7)NN_k7dX?d zFYusUU*HQ=9cb-1Obv(zspII-7m(=C7trX?7qIAn_yhS&Es#1;eE4+e3nX;t3zT%| z3v@u$C4eN6FesdRI`jn=bm$9g>ChKA096O-$08|X0GW5CLto%UhrYm{4t)WRPKdpr zF*J}mo=!-3fx=v%Q(r)#Q(wTKQ(wRWst!Ex1X2jaAaypK`T{iI&dQatO7!S_BT!G)E8LNsV}glQ(u5*w}AjC&Omp| zfb4>(VgTzg9F^aT>S^aV1y^aTo_>Of~dLX84bAoD7^ z^aXml^aU1l=?koZssruy0x8%7H4hXnN4oR{ZglAjyy?;x_yJW1+A{}I_XnyDlwKIR z^#w$_^#wG#^#x42A?^e1eFLfU=!Uot6n+8S`T`N%`T_}1F;JL*&ME`>1Edy&LF<(= zy7dJLy7dJry7dJbpyt8$k_AA^1CV(g-TDGky7dJXAelD>X-^->JdnCI-TDH1y7dLl zbn6T7LgNi|rw_WlH@fu&o^4#yES`ga-DhF~yNRPfiOpm@mN{_xkP7fsfW`GnSVURxxdh`Vvdh`V* z^ymxlLH&Vzb|pwTyaNj2AYqujFd^vPPo!1`14APCs9NL}1-5z?wS57v^N~zKVq)1J z0BIY7+!0Qz{!mhBNlAVlvNISUuGT{pOH77c3C@7G?F2Co(!XV3fSCp7JA*r`3=Fyu zbt(Dfd9Y>{Of8%rl$w*7n#KTGmz4t7Q(6F30d*&o#{h4qfoI}C>XF(6FebbW0Cf?R zVt~18v>%uP>Jx%Hel+a|LMGTjebL;+5^%o=OzT1yy+A1j&~OMS{e#=P8N+X%2-sgp z3&D|?49JVY!F_i~M-U}nLWEGuA>`ISB(Fls5qKXQq6sog0&VC*ghu1m^F^2)d z1)XY91mZG4)Fb$YAU%+gBP3VD_JAO}8k{dvp~F?sav#12gaKZkLCr!Qvw#Q@k)9w5 zsn~~wbWZ8kS1rkBD9LAF2+3!F?72efup%+3*mngjsw{?#@fS0I%q>kV2K8k@qbML6 z+DV30c%bz-&^!*MQ2VsyMTwwxK9phzhj1Z&A)~*WF-c#bW|F?Zgh~1Wb0$IBXP`Tv zL1p-cNsu-ms9n8dlD@!^N%{g8Cg}^@fvSV`i{C)if!c*%plpzS7>2daen90w>NqAt z%!a7}(J*y9P&rULU1GAnfW~Bf0h7u40uGZQ?nCbvgWTsbSzjPxvc5phWPO1OsJb5@ zLm3ztdZ6ZUf#&%p>kBNItS_)-vc3R6w4I53$0kS%sK2pivcABD$@&5hChH5lfSLz7 z6C5ND!yt7ZKxR+T7Z8}DFCZ}m;y%!wqcAlf8q~g3n4&MBGeuv(1f&*fFY?`&Aax-3 z*-X(FaG9bn;4?*EAOvb2w*Gz06n%k$Df$8}Q}hL9K-Ize_iLs=!WPtj*)m06;KUSt zfjd+51wKI4Ve8+sOw|{Vn5r+JF;!o{Vk*QR*!uT2Q}qQLrb5gIxfz6E@#X^+2lekG zrs@kMOw||2n5r*O05uO=|Gs6azQBa3`T}#N>IJ0mOw|{-GgV*U$y9xTH&F8wKphc~0w@NB%ZI7@0vyxy1!Sh_3m8m; z_!rxFfy*>~fskqX0x8q<1xldmu#FdVOw$*bGfiJ$!!&(?BT#kd;{_o1otUOCaAlgl zz=LV}0&k$|4A9&MO3xpr=?kz-*B6kOt}mc69pXN0;|dnj^#y#U>kA}I*B8ivs)LOy z6ikQ26Ug|I>G}dK)Aa?WOxG8f167A@Tw%dpg{+wK>6~_ zbbWz4)Aa>jOxG9q0#%1?T;a!beF2Uc`T`O&^aX^V@rG?&L1PBQtzZkF1T0+{K;=N= z3Jx>$1$<`c3xv$j7l@ew2^aKn1yH_BnV~O`GecjXWQM*#4OAVr@q(5a`T{d%=nJfw zp)YU%stz{(a0O~FDE#is&=+_!Lto&>41EEXnGky=KoU^5f+!G|W2U}<#7unwjhXra z7EpCEAPJBHC;}i`uAz=Xu=Z=~B0&`~S3v8IFFR%xy z4mM740ICj@o{!Ab7q~G~U*OG5eSsfPb+B;?o>>s{K;sW0v-AaIX6Xy4%+eRonFa9& zw($p(S^5GFv-Aagpn5@Zfo=RDVwS!@#w>k-idp&s!qE6dAAbO)`<7Yy0v)sT1$t)b z3rv983)%w(4H7T~a^I9$`T`4P=?koxr7y4pst(&Y#erG+0#|0~3p_z`-y5`X3Q)Q6 zWtP6cpIQ0>EVK0mM4;{qK-zl+vKUk!@yv#V5r_}NAU}iHB2YO{G-}M&7ciKuFJLiS zU%+8DB>d3FGeCM=X6p<1%+?nOnXNAn162pQD;p#S!yxx1%+?nun5{3+Fk4?h6zV>5 z$30+sx?p>$AZr^Sd$(YFv_Na2aqYtb?R5aT4bsE|%}9dR-hjvELE^A|R0)gq1u_=v z3luEY7pPgRFVM1BU!Y^LzQBaV`T{c+>kBMctS_))vA)2T#rgsV7DK`n*Io(GqJ7X^ z>)kF_f(HG!ZqAwt_L|;H=iN1i!5{Nk@`!OXouLOD)7i|9nr0)cp z?<>pCP6e&;O9ZcXMD{mm^Ez^S5axGKIJhj)7w}o4FA%asUm#(LzCgwjeSw@M`T`|O z^aUE0=nHf#(HEGoL|kJI8pd-!UYlFaR>=dxAn}>xlY@HZr6%Azl320wn zQE`bU_>wYv&?YJ{(;l=Iw3q?5NeQf90dgW1%Dx=%{ne;@c#zIU0x1RU?*i@I0X6Tz zYh*y_8M0`GAEo&Sv_2HU5g zTapi5`2)MgIURK0L241?URUtY2t)y7y%=aMPH{nIUQ&JqXbBT&zXIe^hRjsZHUS1z zRn-(d)fCm}v{(jJRTv9&Za-8Iv|bUc2BZSge@TQ~(F|S}582EE_9_D`zM=Mk!vo~M z)VvhvnGdl3Bgp^o^S7W&q`-2>=XAl(;{qRwl@43Gm62bRSp`~=ngd$Vm!Ff9nU@Y* zjHi%Vk(yiz+5wnUslWhQxWvV&k(mby5KxH%vKHFsK~>2BQ47v|@GUf;tz1Q^C8b56 z`zDequ^7U@zyL8HbwV4(Y;d4xg7@@+_CTfO7bSz%1Y%3?!H{@@uHC18dI#+vD+cdl z0+mCcd;1`19#j^9@*X&@pydK6al`kg4WfKt4|6O^UIGb%N^}MWdx!@?%k$xTdqAZT zXb>6XKS+FGO9aqVs|iZ`da5aDP&$=?Ar!ioGbOVav}Hx1AhEbOHASH$AG8DxvhvWi zs3^b4BQY-}2eeQdWDyjD>Tgh61k}y|wZRV9GcbVW6u=u+89<~00|TgY32KPJFu2nP zQVr4x!ysMgY>=rSF_0X{5U8bK3S=0V0U|(>P|Fwu!hPcdg8W1Lo&9}+L6RZa@qwkO zrKyk+Kv&R?Tm{H-%~Hg!Ht;A@Y6^5KE@Wpd0|Ntiv?(>k7ra3?peR2XsxvQN0igqQ z3{);y1zewfb#7uZ_ykaUD5Ds>3$)f=iJ>?Hw00A;A6N;r))165K^GR3q~;ZaaRA0a=!TL5qQbK}%1IK}!#He-!AR zc+ko$T~LLQ23}Igps_|@z+{cSfXy06-3KeZA?ukTcUC6n=M|TLmy~9v7K4%pc)bH; zxnnVCF({Z1E2}``X33@Cl$4nZS~Q(ml2fUWp9j9ao53X&tQeHeV6qC1#g%!q@c7^l%ET3*kqO@=42*=L>L$f zpz11+)RpF?q=Iichqj+*tc8RtNC#*SAt)Pz+DV}Nvjs^Gww@$6H6^n&mw_QEKOelu zHYYPZ1JoCUxi2L(HxpzQh=z%Q_#k`%YTgYf{Qye8fV%Sol>Pyw8P*}(Rs^b(L2VL{ zK@1EG0qY=P5V8)k&m{s$EzGTX;0s1U^;>Rca(-S)Y94r-I|DKsWLyo@tQIKU1EuGz zgPbP;Qlp!en46hX$)H=DS(VDbz@S^63ii2faZVy=LPi%UV0DoK^1?cOfg9`e1s<%^ z7kIHwU*N+!eStqvw}Q@L0f3z{5@GQk^F+*9*X%MuwFBG&5*q^#E$$bqVL&Mz$j9b5^eK{hb7tk)Ol zfy(D*f*KSI4Da`>eZOb3!m}BD&*sc!U|@JQXAOk?sAJOmJ!=`3tk)MjY0K2Zrbv=Y5U{m=EqIz8J_Iefy{@Rz`$^4y}rPc_4)!opk{z_M^a)5$omXc zi3MrM{LGSM1#~eGUja#x!UlZ-oelZ|HXHN>0yaRyX1%^Z$$EW(8SC{0&aBrL5ZItE zkN}lS%d7xZ{|w0)naPRi`3(8RiP@kqEY1XN@5=*i!C{!NL0@3T27Q4A8}tQMK=px+ z&H_2IATcMgBr`7`lonv&R-B)gu27Q6kXx)!oLZEb29hfVml|oAsVNGHMTtqEU}6C4 zEY1e!ixV641uksR7r3)QU*O3GeStR{^aXxw&==s@2=PM(QvAZg8DxH99>S86qQsO; z(7_CeIdDso5{p413>F*p1za}j3;1l*7l_%YFHitAHyN51U}mNz=B2~jkKtwoNNDBe z=OrfRGcXhsRVL=HtGu;*{CmY25NpW^j;&RC<5(6NeA&k z;rC&qzQB)-`T{JQApYF4L0>>(qrO1JMty-R8}$VQpyDuda!QjkQ$SlK^NJNp^D;sA zIWQz;mK2wOuFXf#7&wDoM3mn;`FK}U#zQB!5`T`F&=?lEsq%ZJglfJ+o zs2d^m8Mw^}ZaYEvpgJV4L;>5zA!t7hq!{GCyu{p8ZYVZ7@+bKbSV|+Jdjk-o@+?v zBi+QaC`(2c0_!vjWV9TLI>Q(=@1y3XLZQaM*z2NeRC7 z0KAh1Bm|a24mZ$TFk~MADCK}=zVU7Z068194S)eumVwFz^s*Yc90%6}pwbyj`45(3 zU|>Kl!+oLo5-P^vSeBSq;+|Lpx+fEv9hF#+=9~e#=?k)N6C2+pGcO%h4uj;8`F^S8 z&Z&7NrA3v&$r<_iIj}k(MLZ`7+zxQc&(8+6KzzWpA_Iz>Kysik0GW^M9$#o%0wfR8 zi|lq6Xgk6Q+U`LPFKqtyPs+(GEKOzbgtmWR;fBqv0Z3)JE~Lt3&}Cp?h*32#1{LtC z1}5O?0oYxA={c1J8O4ab-Ab^52KcTt2FRQrsO_ep1nozH_7S6=y#q=Vpj-%QAH((; zfyKc0PlIGY`)TtnEKDtRL2C-2`?x>}4%)iMxs8hf)FuI~e+HFEpaCw>DWG}f3=E*e zTnrlbDrW%S=UAS{z))Vyz)-MVU!Y{WzCguxeSwkD*j*B9v7t}ifQ zyS~7b?fL>Uw(ASb*$&Bz$oo2wC#R8Tr6Fq?Agg~c_E{vQGa#D*z26l)#|hrL2D$c? z0laYy%GQN$f(3Q&keCe4ppl5oJdiMCJ`}oG2ui`%48iu$L$~C@&o%|+XT&+A$i5lc zXPbikRgjnhnkOkpOaZ6kfW#C?7!@R@fEqdli7Anw{0J8(VvRW1+%m}4Xeh-H2H`T` zT9*yd1L{p**{(0}V7tD+o9+4nKej{qEFd{hAA@HHByEAl?2V ztL)GhFxa6lV6#JCKo>fW4mtx6WFAZ(i1yf_FA%arUm#(JzCg|nh`rzd0ZBqJsKPJU zp)XLeLtmg_hrWOw)I89;}Z+7YneA%fl@MovK0Lw0jf6?ciK_e zeStZ9ApVA}r-11Nh2w%f`T{HV=nHJvqc5-nst$DCAxsU32F-UK*rP9SVvoMSg+2NL zH=yc3>j6OWFia>MId(zZPOESXK{_)*H#aq}6f~9zp%{Fjv@SGop%g|K>q2*qLn+Yt zuBo6pPPeoeRNaBj7hwp6Fv089SL}uO2^Iz*8WtaGpmL!2*t1t(;LKiqfg5}E1)l81 z9Um|D>I;0>t1s{aq<0@g9eR9#;*DpYzJSO+eF2$$`T_>f^ba~O3pxFR;!S0rzJSg? zeF2kw`T{mk^U&iBWS+}DeF2|+`T`;Q^aTu|=E*?EYe0SiVUW6*efk0^`}74e_UQ{4 zLDhlQDX4+NzcU~b_B&BN`- zonE&<mZQR zH7Gy5IG``^;efut50JWp5dUJ!PaFsJ1q2T23rHN)7cky!AOIS#1eu9!9J?vX*X%VC|N;?xp71_npyiDs}f8NsK-C4sJ?2kQdONMJp0R_2JlfXWd_ znuLsjDAcp zs|2-U6cURS!0`ndCn^D*wgQPb$oV2*FENBH^a+~%a!)M*D`9}1W#I0tfN_pNdNOF% z9(slW^h5-AXV1LM66jQfyR$Rs%tFvK9RsY-2&z~?RVujO2<^Z70aNwxEz>%Z+0w<2@3!FKsFL2=~Bo1NwfQz8x0Wkdx$Mgj_j_C^s z9D}HXmBui6q*RBsYSU=qP|yfL#Ss1DgNJ%FoPGK7%G9%s}ck3zMsUR z^kORoq}f&m1_pF3pm>6mgZSlO$79-;XXd5kmxG3d8KC}wS`M230u3cY91n96viT4{ z!^#SK+IW47(mou^F5-y zq>xz*IZPbl6mS5+o#E#n0$TZDqhP=gnwOKAmyKw@fKT!&C`v8M1RbUhu?ZX}F!w-c zP`Ut}6~dqkN)Q#GGzCcsp!ftO3=j=UCouPeXs{;Gd=Mn5Fg!V{FYxB9zQB*O`T~E> z>I<-((-+`5r!OFKPG3OgoW6j{Ieh_xa}Ylx)jQw`to$@Y83w8&5}_wJff@tB@U<-v z_d||w%P)eK;S5STpnL<*w&1H2^%NKwkXGUpB!arJC8(zDDbrjSq)WNl*dYn2a9AQNo)MYUJAZr+)?t>g5 zmj_*g2)bvpqNFGhCYfIZYLjG^s23|FDwO0G=;nZ0E>LGNz}mCm(>Xz5fs|emIRiNj z!Y-X;fV8b3(F4-p1M`Q<19faJGC=wbf~(C!Lotxz7MtqZ)I=FM)(G=*lF8oc#O(JqFO(c*U7m^db5( z>T&8ipg1Z~0Oxy1;R;PdU=eUN2I^gc*MmV%H&lvK0;hF|IVq{2BfB#5QWYTD;YpF9 zx)$k95$IexY;Gnq57ZMy%*%onp@G5xM1%Sx<(ZH(Q)Mpc3#eSu7tpz+FJN*>U%=*) zzJSXmeF2|K`T`-BAY}t2jf3mUVo*f~;Y02TQLqOU7xu{0=FoG;LFX2N=YSb9a}(23 zVGG(oFnr}}mRsi*8a}zW3U_Jw@F9zSI0b0MBlnO3jQo!m!en6jB2dh_5 z0?#uKq&zNnC1sX?XW$N82F+t=2uwJwAu!>LhCsqu4S|Al8Uh>6BgQgN=JY^EJc7z| z(2_qeoew|5OxXYo7<6+Ji?dMvztImQd5{|9u~yKy zD8m(mevrHh(%31;d=4aekt>kgVNQ5lY%*<0rWMBZTw^OoGV1OUz3EDWV0M!GE zF9jurq|CfT(8>bclA^@CV$dq5d{CDgA)cC-oDW(61Ui2nnt9`)nLWNDJ|n+`fg!#U zLW8as0)=%>etveb0{DJoNPU*4ke^hX54vqfv%px zC(nRw-^_w*`T{GiLDCMSya1OU;D$H2A&F%S3RFI0tUpc4O)NlKe(IT1O@fq13=Iwk6c!{r5SS2f!C*td z2aXPp6B;WrUP#P{xM8uQ;s;BM%Mq0&DNjVEgj_M%Qu2kT$LEaBnw&Q>b7Jn;?5X*~ z)Z}zXX;IQ6p-DlPj5Za0;_C7`rL`*SmDH@LTUNWOezCQ=9aCGD_DpPA*fq0lW#9Pv z{LbmE%X=p`FYcb*zPf*mjgAKu7bZRwoEUh~aAV;|&Q8yhnkzG3O3sYDX}PoVCu^(g zQPriXPerGOUNzlX`jxlW_pI*P+_$oGWAEDTt^Lc~?0i^xaq?r~$-$S6Hy3~A?)E;d zy*m4~^z7){*1M~Jv$wk+S6`m~Tzq=?b@T1z-}(Ff&+D(xe=k2j{=WVG`v0YQurW>W zRndthsi2leNpW&fW&z}oSV-)HM(T>vVcRmyKn0Eh>|AUE1p@_853M90)WcCtQ2-sX zt`M!7q5zTsQ>rPk3e`4TpnJa!j6iKx(EPAntpYfHz!?&BM{Wv8Kg1-EJY@e%G3bIC z5Eqn;89*jNR45oC-BD|xV5k6Iep`~Spo=U4zR3eL_zTK}Ib00snQ06TH}wSqE^7!R z+}02%xU3;ia7RPn!5gG<7u@4vU`V-%l4e1b8v|^O3dk|AW}`xSW?5<;xSI^>f`G?M zQ1iFDr<+1XYGO)i5u`|fW_0iwwxAQ1Q!;ZQi@`ODH5F`Z6$}_aI>3PgayPhj$iM)} zke~tsR3d>#j}<_bNkLI+ZemGkQ7UMU4XDEf(Fn?~U`K(6R-t~%%ZG$H_!zU<({U44Nocl8Bc+|?KOa93a8$6b8^mV5dFJooekB<|@8$lQaJYXuqk z;C+5R_w)rm2x;^JxKCXK<)<_0>z+q z=L{ryheN3CT9E!FNb+kyVF1+&q6oDslX4RCKnpRkwQG{|3qZpz43HGT0J@`*p`f$` ze7-cu?4s0^Owd>^hz)MafiLbz2I~Q(dQe0c+}9VVxUVnJa9>}b=f1wcl>7PubMEU4 zEV!>Pu;jkJz?%E|0z2;O3!JzQi8Er`Pr6V?f%g7@(-DZTP+bc_3=9g@wXie>5dsN- z?u-J7gVciJ8bl+>f|S6`0}UW1mLSPO%q-3?ElN(+g%nTrx@aj|0hGK!cj|z)=_(-I zWd#x|$wwCfrDuf-$SpkZvniVpFp`EDj#YmSOMsKbg-j`K61>MI6CFiw3)pbAFeP%8h2zU%_~Yx&QH(FtV&IR6&;}b zsH4EZkYA(#x_hZKvnUlbkPMz50M`i_sR~L+4FOo+0#w+5?taCt9^zwUwV-Wrpd-^j zX-?#szJSa#NSZ?`e8B}T$WGkmBB=(I(nuD7n~|WtAK2x^Apew<=QA*r2}>p`<4pz0o841)WTp#D7AR!Etv!~iL~ ziy6Qf3sxu)>t1j}1-l;!xEFNu3wWmJ*eg0~j#OzyMD3knvRpeMYlyn%20Vffy1x>#jsUVVjDdli`(tz~ zi<67;b8?_38ZlG`gSoIH>_K~#@^f>faSfu0MC1U0mnm-`$l#k&6$JLf!gCD@AU;V-s=n4yw?{9cn|R}`aVpM+LZVD z0u}G|1v=jA3(SD31D&G?l7nH8KjysG7g+EfQm4SgVg6VH6$iERcf8jZIPhLy;KX}< zfeTRc(Dx;R-1p?YzQBj~`T~F6>kDvvfVdBR|0if1SLTDhfXWAb0i6%}0wz#(=;yD3 z%(M8QFA(rSUm)d!zCZ<39s0gbkh-1^`T}!4=nJg*pf9iost$cWDL6hp=nFjgpfB*_ zgT4UIM~M5-_rrkuFCX;7f6AsgYBO! z`3MPDki9h@^#vw;)E8LtQD0yKR9y@#z@aqAA6q`^3!M0JDI0 zC-7NcK;g5#fWc>d0T-w`P~Q{eCa8D7XPm*<$TY|=$b6*X90ue{2f4OEw2#tJ+d}yF z@xd!7&IlGsxBwtn1Luvqv@>su$S?)camw{s8$Ol&%+i*B4mxU0-0wcSJmc z6tE-ay4c>Ho)feF2sq`T_z!5cY!H z1F{#U55$-Gp)X+YLtnrJNgXI1gVY5;#X#mo{LmN3`Jpe+02Kqd4KyYJQr80&1C3R{ z%tod`YLWTiHa27#I|F=8JZOLzJT96CUSE_7VwV;{S}KquV;NA+ngt#A2^yQsD^4vc zVPMECNzH}LM}gV-2y^mM6N^%dOBg`sc7ohdoC<3rKnw;gbOMRP&SI?uZ5#mYnf$3Q zu;-_~z>%N&0%v~e3*7jrFYw~0zQBi{`T}2m>I?k&sV~6tOJ6|Xm%f0)FMR=xU-|+D zzw`x6e(4K1{L&Zj_@yrp@Cy?Dko`Uk49PjEiJN-+Z-F$QRF7iAj?$c+$j=$Vt?c!8XA3KIv7;-qC3VLhi6 zmpF8J2KZb}Fk1n9G9>8sY3QsA_&7lZh#br&&^#CF3=b$hKyM!hEh&bohfcQGE7*g_ zS>a1Gq3d3ui?Ec?7VM*&1)8`7`3)3T@Ut`(Dxu+o2oI1N*!&V`I0WKa=*g<^lVcI< z=fQqL3P%G4L-<*j$ZRVG*otnHRv*L@kUcAvrUsBRU6IBwAjt=`{5LrxzeoqPNJdA& zp+ct;yjDCB8d}gb*`W3#=xkZAn?Pe*R^a(8(6VZZ%t_5l!D=ZUcY@brqq_&x?n6C4 zwk)*>bZ#A?(_^6qfzFUc)lc;Kvv3n&u>cY%ODuwizlEL&WE_%#fg!Ody$sZ5O)N?W zpPC5bgYpij&ju1NNzRD}t?Dj-euPFyX(xz>NQp zvMD*SI5{yTl_5DJH8~r!Suj730oK0(9XXc|6)R3HNGwV$0S~He`L8dq=fA$diU0Zn z7yj!D+<}^vlwVQ;TI2!S00>$|1+o)%b~Sj5AovV$(8(hP0vrqm0s;&M0ul_MbrA*v z8Vm-YqLKkR7KGAPfQq5C0dy0SlT&k2Va`HruRxXtGC;RCB^9M6f`-x|>p@^11obh& zQ%j|Jpv^}}Oa^DrvKNRjd~Y1=K4#E51K1@zx*3@%skw6v*Dv%w>_3=EL71VHOy zAe~ltpA~5U3w+=cbgsbz>UU6hfiS2q0;;c(+j*e+KL$-5s4s%94%EIZKvM^5>!Yg! zwL2Qn)PedK=;}c8Bt2;AK=T~v>Ok(Ef~0N<1Ek*v>py_xK^Ww|6-eqpVxYbfx_O}X z&lUy)fddQ%0%sTu1a3ghgSESLpk{#ja}S_wkXaxMIyp!aV;{$OE*q*;(25C*L~M>h|ojt5O0sLcja2hsz>ApeRWsgr@)3z}O3saXQe zXP`8pf~3v>st(jI0I7pvaAtyW@X*Np0+2FLy4b;t>Mv~Rf@t$I^HM-Nfb)y;!E41q z<*aUgS{k^%XMog+y7{2Za;2c=CS?5k~$9-#Q6~*x4>f~F4JxgMbKK7*w02CIPpEF3{@fMKG; z5qg#p$lM!j2!DgjftiaO-$a{>RKvmU^oG?FAhSXF(10D)K5Y3ARBqTHsdHh6#0Pr0 zfy-SWyO8k%HUohQ76SoLI(orsAaH`&Kp=qKKmg{plGMba{IoO%P_QH=7BM_vHxPKi zZXoah>IP_CjpRG*_p>7R-XUiQV!6u>(wKo9>jfRlg$Uul%MR)Wl=cEdAF{2eV+Lq$ z03X{E4xcYVT)2wtG32omhVcr38{nOH5 z-hiov^L0xyOF-+Tp%g<1gv+1{+6)P@qp~0slutoN`GaU!egu^h92^D$G8_g11{?+g zHXH^5u<{e6&W8h1hJeOxLpTfsGB^wbYB&r8IzZ|f7#Lvn21qRkgUan54g-M&90meg zI1B_1a2N={+DRb!D^T-5_TJ$z5O~31An*kw#%Uk`YyW`M@o+-y1&x=9K-nO17>3y^ z0hI%((}1#JYCtqhoeoqEVeY#Dl>@a$pKuxo zyx}wu_`+!*@Q2et0F)nK>R|dn_6l$r2*_|52xxE_2$*mg2!Prw=;}cAjtiH8KnRzC zKmwP6K;j_-0nnH?NFB02Kx2RzTm}LKTm}LaTm}LSATy!fR2YIrlcVD3+Cj57cjt23SeM>kAbFw?oEOY zctY5S0Z;Ha4S4JbIyRaIxsM7|rh&o)M8o>u&@9eSng;zp<`+|$0lLn z3>kG}U`R|!f$X}54h4eNd4qx!x&(_M85I5sd8y?fiy;H2Ae%wOAZVL6G%ggt!4B79o#iLe{W@{0bYxfZQzx)dz|+nC4=8hD>n$ zLgYYtKrsp05ddRD;~K62tR3t;1_n^w0BTcV#6MJZNw$?0v~B@~0;v1V01I!&k`mA% z(V$hyh)t%@P57XIf-DjQ?e<7jNGwW)?lA?2YB6Xf4|@E8<0ln#R$?(IdoqB=v|;`S zt(Q$oOi=)v3r_G52Z9E4VRB$EDJX%{7-TIVIC|mkh1ur}idV32Aj4>|^9}OT6hNYm zDJlL%p5S=}J&0ML00Y&7*;ZB{1umrp@G-8W%)FG6#B}gDJ}g{7egk2UTS4tqSlg*2 z8>G9K0Y)b#<(Gjf)}+)N@F6Q{IiQvUhme850U-l{6G8?87laH1ZU{m0 z7A(AA?JQ7y!~FOIq(<04fJYdjmXt9v6=4Gb9bp3j6JY}Z8({+h7hwYdAE-Id_APQ# z6m*9{W?3q7ixkv8gHO#t*N#AXajCy<+IQ1g&mYuMV$5c43dH>7qibV3A5 zF+h*mWPptgB9A#Bdji?@koG9Ve3*N~;q7r^+SQN)4WL7T3{DU(#u>tp<~L@0o4~rR zqEzs%QwD~VOgNLl1&IwyPqb*0BS#c+I~z7e32mk`fDV!erANxz=a4vn#qo$dUmZH~ z1f>|jizY$i$7o|LaISwIgC}g*%O5&63_08mG*tyXXRne0cE3G5Uw{fL(0PH-^O8X& z6)65d=O}^3s*uljHz{CX0EvSPL_Xi$7$gooU>Qnbp0kWJ*p0-*KJHD0by(oOEA&8I zC1zHw^+S7Z44FoO-8wflRHW2s# zRRl9uWfp5fK9c84&{k6%mMe=YB z_1Qu4FbwK{-4Qbocp_#X@J0+0HlQ#;K1&Ct_KTQ-0E@VRfPlDxfQ&fA9~)qjP#Sb! zw}QBVfR4C>#ZXnrI>|c;N1qlNI4G9AQ0|^6xOlY{E z&*Om9Sx6WNct{usL`WD2WI@$|IswS$f!HY$1_A{V1_Ct_1_B*WdqL;OgWLzhAoF@8 z3QUOvSK&3UI zXDK1eLsq846(FtI03B}tTDt+GYZYLPe3=ANq zTYfU=C}f6^#OzcU8&tl5+i0M^cWMQAOaR^&05#T#ZM#8J8kAyy^td4Nzo0AwY99&6 z8wg0q8we=K8whB~L&{B1{SK0cVNf||Aa5XGA#WhyAa5Yx0ab@yZ-d%VKJo?v5%LBC zDe?va1yFUMauZ}$i#(*<0kw~Mplpyh41?-M5PJet4y0}YlnoMxVVJrlP&rV!xk27Q z;DEe=z!`Z1fg4bJLG37*9uN&`AKj5R5O^YQAn-=sKp+QNu7lR|0vkQxvMg$skC zfq;mjfq;ghfq;!7#C@Q-3XnVugW44iiUtBciUtB9iUtBPP<5a+IxsaL8f0FIqJcn; zqJcn(qJcn#B4peiy&VNoSEFbk(4uG{(4%M|FhLPApMljXNQ8W-(qG%wn z25K*;eFU-(hC%h`7DWSr1BwO$XA}(tZa~$6G6r(Ifz;hmG!S^AXdv)L(Lf*<8o!`+ z56mnO4N~_-(LjJj$v{9v$v_|vst#0dBbx{Ehk}xUfQFKRfPs>MfQ1qy{6KT+Aah`t z*!mcxZbLR=Oc;CpTU?x&o{AU?hYg)FFfiOvH4u2B3duu+>Sl;M#D$1eeGCk+6@nlc z4K)J+6E%o=1&Mj7DUic)8GO_X1Oz5)30#=0B>*`Wm4P8e%|M`Fp_agb1zG|QixGaH z&$tp5>P^TdOYo`J5GLqmHUPtBm}I3pj<2KyUo4wQn|PoR3FMa@89f|`NA z95n-h6>5-t2g;wIbh`(dWbb;7Igyw0dJbrj0|6Oz0|6Cv1A$U#`2i}=LGmDVAPh23N8Lcc zLft^XMcqIk0BRm`{R&bKQWv6bAdsMLAdsVOAW)%hAOI?RVdEJfvta6K)C~k$)C~lB z)C~m64ngLfLFGP39;OaNPf<4zSfXwqutnWK;0V-SZ2hnk>IMQA)C~k~s2d18fT{zf zZ;%-dY6b!zb3x_w8+8MLFX{#Yf7A^GSTrEvf~|h#(J&B@&@d2C(J&AwhlUGiY#(F} z$V?Ch`Bz87K)^!7K)^x6K)?fP9&)(~QV+7%N5eoMLc>5HMZ-WK2dWOepA9mvM8iO! zLBl|xN5ep1iiUvzsIEb-mq6x$?4F@vAh1NkKwyK0fxsT9dC21mAax+~4rmw%oX{{3 zxS(MmP;m${-wjH$AbF5EAR1JjgV=(HlDa2Qb)fbs zNFIg-85kH|AgTKRRR_zTIY{~V2a>v)L!fof3=E)tKC(ZEjX!MlbO5Nngluz1*+YU? z99qAk%ylEx?`iqaJ1|mG^GY()K+(?ts+U3iY)}}0*+}X^e9#13K~a7MNHM592C3Vj zYap;k*FfNiu7SV>T?2s|x&{JIbPWVP=o$zx=otub=ottI=t0sAq@4gigBQH}1Gavq zJTnD!=$1W{2FpRzgZKAh$brtS0=Ws=rw5;r200x)MIotD0eti*Gzh@{f=%VZwxU4w zAx{f4fX-8a9b6ANBL_5l%>Wh$`4u5n0=*4U0gD`HZw&NoI3x#w^h4YOnoWhC{RUcV zP?VSsIynfmw*{o8ASW?7m4SgFK;J+hLf=3jLEk_iLmxBzzyXAGeld7nmI1UE267n$ zD1IQbw;-{U)CvXr3WZAWJa%GEW{Lu)JSap#YBBXAooQc{T9gku{4O`YC>3=48uA(U z-~;ZJkoK*>&cp}#3pB3`DOym^y$2r{23~UpNslo9M;I6gBp4V7WEc?kJILkGCIGm- z0kW?kvmzC=MrDJ6fq=pWErEg!kancNMlFHdTn2_S1_lBKTeJicwrB}l*rFwHV5^n@ zBz_neo`B?bX$f4|3DM&Kr5PALfY&52FsL}Bfq|ui-OI^#FDGBK2m3F%C^auaTumY7qVs!#wrFD5Sqdudg0Ct~I9{kw7g2bYd zVo;_4DFTgO!7qCP-;Dx08jEQ2kb`i2qj)B469#sSA2BDH{ zXK<+>T#%ZqSCRob^clQk5tR1u$uTi7Fo4D=K>c0NTob6h3$A;hdoe*&FK3yQO$iTn=-OlBfnUe~-d$tHBgS~eXjGXsGJGXsGRGXsGMW{`AL06AKXVU3xAK*4VREilG z?wA<}JTWs6cw=TD@WsqP;E$Ps0EfAOfPlGyfP}e$fQmW9o%!JVFENrlbS?zcp9gJA zgtR9>N1TED1v-=!n%==_1awv!PC1YU=q*M{XeZSb6s4x5g62;kcMZYHa?n}xps0gb z0o|L5eD4xW0-wFQnRyJl(1{TR&|z;m3gCS|p#Ft|ZfZpV=+aT}nP=domkgjWZ%~^O zbgd|;YyjT{1ZvA5#=SvGK;z#aWuSY=GC^0~K-{8W4?T|*sVo4s89~?QLGCVs+|`+u zm|T)y1S;1Zi@?Xy1|%kf5-ccu5!ZaB<>%z&m#2aok&yT)M!V+^YAfhoK+HRP5|gtP z@TOOY?->}}&?>0mUQAooFTb1v(0lT&$x2 z%Ej<&CBf|wNLYhP3kKrvD}!cSSXzVkc_EGk?+FG4GB`a#6BYO_vr5R?8c?`{`oW-Z z*9D!>%)r1f#mYcnj+KGH5-S6NHC6@!TdWKO_E;GR9I!GFIALWVaKXwz;D(ifzym8t z9#*nafZS_>^PVnnCWPiy4X8KEGfOfQ@}ReW*@GG-smS+#DG`_VVe2+Q{s8#_mVc1i zSs*1k3KcpEkf?#E0M$33^riqlkqr{&NP6(L&A`D3t%X6JB1IqUHUN-5XmDe@zY3g( zVCzLu`(xm+1SKs7NY-OufS&owkeQyB4=SK1*cb@RurUx=U;~LCSlY-d2aSn<$9BQz zSHbkd$45YAR#9pWY>X8&1_~Q11hGM33@X1sY*1K(*-!<#6_B=-ZY6{UIS@3SumkD_ z5dVM;WZVLIJPsrd8pk+-r0xP#9cWArB)R4NIRY`_hRYrvbG~U~U7^uzsq5y@9|3BW-~IV{HL^?F3lcK*iobz`))> zz{1`@z`-684v<2j20ruyx=$8l2Sgm)_RRpbWkF&vMd)nE9go4F8%fb>da%u)UR){Y ziW1O9c_nL58&sh@7j%kfE~qlj%quQQ1z*w$X$ykxngjc=2-NIEzkv``Vki`)f(|_| zO9hz>I!6Y4x+GW+xJ`>956#37vk_`Q<+6fq1+-08l$ukapsHt*&Y+-Mi4d!ViGed4 zR2;$v-94uO%8(E)RBusg4ulVqW>A1;aF9kgySkPEtPhgeAr^r8NFcMIVj#`1vIBZn zB)HtbcJDAKE(C&g1r$Pc1wiS$;Df5bgpaC_A-_+m0t%lX>;~mI`1)m#IA~o9Y@s{Y1)#I3p_>WeuD}$7SqwJ|CV*@n)HPtYz|4lZ zL&tzY7s-6s*~l<4s4@lvBy}(=V0&vpSJOg+gFzR%Spc#uh=IXS&j5UebBrS-zk$L8 zgkf{K7LEo2pn2{LH2D`uXLf<)OVH#&YvEvJ45-iBf+oKPNk2$_4x0QIBzaJIwFXIk zk0Yd<1&v<^I6}t84q!wiU4J3JxSPj&E zkbaQ=UZBapfy#r_g5-ao$%D==1lbRg2l%s32!Ph+!rTYaUxFmx z;$$EIS_=oVAEY1TzYZjMko_yr?4N-q538#b91R3O`WK+de?Zf}22CDh2grRo(D>hi zB)`YWKmb%%gWLxSA5oBEJQ%c#Au%rj?092NJu+bJc;A9}6;HWLoV5cp> z;HE9W;H3@TgIM6JEpQ<~TRoCc269-Jp8IS&|GhBVo6bEg#z>% zcnFURq60#L@9M|_-IoX9LrCxqO$wk3=%9`O-B$(C@(_A7z=9?)8l(0a`LTu`$N6mGEjG1x|O z*giMt@(aY8inK_jU}3~(;w*Z>Cj$rMmNWN#W|!qp9QM>wb*1J_iNk(rzgn#4kw z69N}Pn1v(;UZ;|im;{=Tf>I1V5H5o*bgv4OVu0;Y0SzeQTC0Pc??6pf(Bc{BavJy= z8u)n$MX3d;i6tqiIfsYM_z14KQ7 z4|ZcwYH@x}X$k0*M00S^O#Gf;J~eJ~H8>OlRV7aj%zKRgTsI6MsmBs?MJf!cIXBf%7C zy_Ae6q}~7vKnYlXTLCHuQfB~VLzRFjm^u@v9B4ei!P7t>z|%k=#?wF`18Oh&{s+)J zRgR~DK!vA)K!c}&zyjzv38>8sYIA`NXMmi)*Wqa(Fu~J6V1}oGz(S}xwJ0y16(0vcYBa0c~FK=L+Tkgx^Chl`hifRC4fK!}%t zKnzqJC_RGI!7wO(6TA!rD!dE?db|t-7C_a3+VUVZTcGBF?A_yKAaKUZK;Vv-fxsK6 zx-B3@NEj3!4BiF;BHji98r}v1Hr^2Tf%-;B${0ZL;oxl`;Nfi`5a4Yfum~E?us#}0 zEy%nGZv%k@Zv%l0Zv%k>sCl3@iq|XfvN+w^Fi_o&~yq~ z_cg=YKwyElfxrrH1Az@tb)dFANF5A=;&+F)fxroG1A!~v1_BSD>Og%km>LibQuoB$ zK;VnFfdGq-fq;k)#J`|*-ynGy2E~VjkAZ-SkAZ-JkAZ* z*8@`kr9t6$#m7M4j*o%B6CVSCH&At;J|jqp2Q>UZ@%F{XK!Cy5K!C>=lGZ@|Mo@YN zg#}102!s9WYapQEYan3ZYarm^3ketWb%G#uKE4J50lo$TA-)Cz5m0rYz7)tD7zU-k z7+(W{9A5*03SR?(7N|N|$UK-D5Di;Lg*+w*?o$*)?(57%T6YB=iwQOmun0B~ za0xaL@Ch~$2naS1hzW*-C&*5NbVT0^HU^M$Ov@4GGtZ& zbl0t_o@z=O1A{7vPGw+#jQb@P7iXsDDS$6vE6q(U%1nl601Y5Qx-ZCeS3{_-KtmYH z_!x3?9(sNOa_vaCk3dde1KxIpbV}fD3+c)I&KN8@=?@co;^lJp96YAG{g-MYoJ2N#xo#u!26cqZE56?85VoIazW*M zRwNQ0bqZF$fpu{6jgF%T2BM+|wtm@b)ZRbutQ(>5eIF+eFq zdleLz&~tTbLJR~Zgct}c2{91Z5Mm$zTAL24KS1R#s2y`8#6aLih=IVH5Cef9P6 zNvMH9L#Tm34^$pzKBzvK5^5kYBNS4GgUm$6Ao(Ss1_CQ^$b-g1w}cu990@fLxDaX} za3>V9{vKuqs9t*zY9R0?)Ii`%sDZ$eL!h&k89+mNU?re^R)0bb1X#ih1bD&>1eP8$ z5CFC1VRbUde338%0gW&N0h=%b0go`qcp_LcbU(gNn1Mh_n1Mh=n1Mh~7-YT?S$;v7 zfxw0^1Azl!1_BpAX22vF7#Kk2KM6As_yMv%+(1Af95R20q=Z2w+(1Al+(5u2+(5u4 z9J1~mCJ$<-IfNSsc!V1W1cVz1M1(`uRfFUULJR~z@s|>AAdnMoAW#x+AW#D`10)H> zAb+-m8wgAZHxO75ZXmD*V5C(}Qe{ahXfYuvYL&oK3Mr{+nR%dPcc8EUU3vzx z2ztpo;x>5DrKF&FaoF7>pfmt+4Ff}dc^-pCyn%p0yn%p8yn%pCJfu8<%goAaEhx zK;RBJW`hDCv4jD7J}cOrFmn|W3aEPNX zXly6MH3GD?iNV?5H^4vC&m|rz5aJ#07!cs&>FgNd>F>wD5aJyl?&;^^AI`wQ;OyfW z;NkJ@9rQmHIf~F?i^t36x@h?OUxVNiE6+`6acYAit;t zUPOT03K4?ba0p7&u3#kyJ~#|8=T~SjrveE-_}L7Qbt(){3ce@U$b^AGcewViAP00J zCmGN>z|^7=LgN5vVFxt_c}5N*gxphQKjN=O$K^=B4C=(sXWOMJR~r3#Gwsgf2WrK7$UNwh?QvBSCsWd$_^k(2)=*1)q0< z_f;Xe2qmr{LWJT9J{t$COGq*UK3)T{3?;50Ldda$C5|DA$kmsYk2sQ(;5~Mb`5d@^ z!C4zxf0ASlysRX6=W0P>a%NsSDE^8OOom_x8!}f6l>ns~Bqmlh#-Kek5WOHKni_(0 zYe}H?SVVU^t*HU~mvpZ|YVQgD-%EH8(0CohR5dJm!6{B;FqjviC`%fxwqU0|AyK z0|AjF0|5(I=Mg%-A(3Ptpps-DV31@WV3TAZ@P~nc0j2~rKH-yOAP|vcAdr$|AW#66 zhxIQ(;|mo@1_CunkTw^{K4c7%??^Hb=)oZm>YvU?G7wmiWFW95$w1%$NFA*6%fP?@ z8ece)WFT-R$w1&rl7YaTBm)5%M#T67$gU?z1_D2l3h|Nj4Br zNXG6y(EOK9vVnj}vVnk2vVnk0vVnjKl73MCIwILXASKyApdi^mpax_Xl03-$6Os)C zW+WR3EJ!vGSdnZX;DIC$(!VCzK;THSfxwMq1A#Zm1_B~z@(d{k0s<)p0tzVx0tP7t z0uo5_AoE>P3@*w?ZQVawh zq!-h4SC)}#AW)HNAkdL&ATS}-KwtrqJjnbhAU&xD0vl2d1oosF2+Tl|2Qd$% z8VH<8H4wOxY9MeY)j+@mmiVCKI}cI~1YV>X2z*F25cra6Aix6B1hpSz{*P1x0fsaK z0gf~S0Ui*IBo7+D5lAx-kVrESP)IWn&;Y4Hk_UyKL7IVpOPYZ|M4Ev>N}7Q{4pR7l zg}2&{n0!@>tNezPIXK;TH4fxwM41A!-L1_A|)4B&Z2kP|`jFVYMI z{-hZQ2&5Yb$fQH$LFob{526*)4FpWm4Fo*W4Fp2c4FpP%><7tbq#Fp-q#FoKNH-9e z1C@u_4>Ds(x`DukbOV7M=>`G^(hUTBko*SKwwISfxw&$1A!$V_aUVZkXKh^7zk|0Fc8?0VIXiI!$80VBnWZ<0|R(H z?vV@wfioEf0#`B&1nz*`36+160de04kiD4(0s@%^0$UFm2q+-g4|1PErh$M#rh$M% zrh&k=Lk0pWNb-cn&tPRfXoC#MN#*%P;4K$O`&mFrbU^b}so*gShzii&8BjH%09p;M zpu_-D1k#Ug4rtD<;31?g0m+jyURRu&!vI^y16>dZZR0V(&)074i!pEF%JL zMv5039R(X(9R*uk9R)iO2FH$~Eo84B=)B{^qRis_JcaxM$n}BXo-U}(18N_@2bMr* zFQg`wrbEUElSNgz z0w`d0Kq0E50CtNG#ET#b)Qi(m0J#jZj~gkCf^rsOEEAmc(FQe>O4Gq(o2ezKAl;yH z1u|v_POi{%49YVyb3kW6AWk|3wU?n;4zz6$+-3*ul>>!6I8QP#Fj#}qG{{-t!CpuV zfySDx6&OHcn4rW8aykPn?ZWgaSTityy+fitu(`z8hj0o5+&x6-19gntQcIFE;KMFx zTb!W#&B42R85kJg%0Oc}Y57IviA53L}tG z_{Lp`I&kKJDFu(smn0@BB<5tM=YiHxD=0DOCPMZ)!_FB6?au+(rwfXEP#l3X76a(4 zDe$Iky4w8KIyHR;K_qMggo@0b~^D_+OAddj)%#PS8;&nFS^Gkh}^jl|dWC zLqR7VS}8CLHFH4+6M&9m1%(?l*g)kTc!H`VF&%Wh3gcHP;fAS^BB1Nf)*I) zjRbt@A~!!JGc6N5?ZE&s115slZ%-&~`68K7lnNPpf|v#3;jd@&@=G#6Cq;v(Lb}vXVa-M+&oDSG0AhH-V zAqIB~XbKIi2UG`uorzQtAcrBSR!vMUNd?_)-%<%_lRE_J2qXmS2si}kfSQ~P4eNCT z8iI8MO7hdwb5i}mcd~APss*JThY%fs2_PH_QGXy5t~M0c=5=c;j49+W2&`?d$RLD)N05cH&^-HZN2}w*>NXswHOHs(oOU^F>?YIK9H57_V zb8{1mDiuI2J7~7-%@8?fbOA^x|$vzLXV-RP!_%Ry?5OZd_rBY!6!IgII+l3{px9azM9zr-F7{ zrlf+3H+Wi2ECRbPpeR4t3YKsbK;+_pLz&!7=~I%@ImroF?hj9DflQqP%WSUN;Aa_n0gY^!77mwAxI_2A6V5QsRKtZ zNHH|Mg7TP8Vr715i3=#TfZUOj0`eW?n1#f=N<{K^Y#_C$VUOv{ylXpKx49z~Ka>{h4q=M_|KA9RY`< zIsyjAA!54V&LacjKEZ;-6wtyLka@84n!s$R;kuwx%RmN0$CY!C>?(n>LGuL(Ed~Oh zarGLg7)VP?3*@{QkUWSFlJ7v0pU?t1Ck7@D8h4(8BoER9k^{|WfY>1UIcV~rvw&do zgvO;IgG@L&Y@og!xRAs?HVGPz1-Sug28avo07DWIDA7X-S?u~j@_G3Rskuq1;M@-m zUWG(ZB?&q}79`DpJbntZ2Yg^;X%RG!!gi%VcXvQX`zW@zC>6Z&6lN!w3-ujzjT?%E z`0N8E7f|~OY8IFa@*F-rNcj~Mt|)_f$zaDo#z7KuA$=TB#{m+4kgx}h6qV#Flw_nT zC_%&_x|9@(OOv2E7SuV&FH%TUP=btfD1lbFmVz6ou=Du}it@`cK_xRNo?SCR_r8MF zgZuzGrj0>aH3f`8=bM5mO^`asscVS*1UgR<$v-fqh~wEnHD_uO*h3(-AisdKB-klR z3@{D2%m$q!>X#3#HX(<%fZF7)xk=!g6(Q9XsHSCLV1NlCwH?sXUuH3+=?-gUWn&{zxzgV><30hJ}|!|u?W;Z1I;Rd#6UFolu*$9kcma0W11LpIuT{& zhnG4646h*Nqrxj4feWv71V9xBC=RA{BKqvu)Ir8{q3O^bv?~mRAsG{2nuoRGA^M>_ zFb8xRm4ZD~1Y9ZNGY1q-pp=@b06rHRYy$YS))Yv1!NwgygNq>lz-X8_Qd$K`f$B<_ z6u7Pgg@XdrF(4B`nE@2u2#X+xFynJ$9`x=bsGigcXsHKsJ3f5{&;bgNyCHgEB9Ov~ zkbcmp7DQihY6+MD4qI?)BBZx852PDq9W^u*bilz|tfK((mJa9;Y49itXab}JoULJ6 z5#a|-9w0k?6N|Eu@*^mC14@c??UM3SD)m4-Jx~e`C@F&Uq8U)sBU+%~lZ!JFi!&gn z6GLx{26gH|W`F_=H1>@B`Hw{TG^zaIlyK<54+tSU+ zO)N^!%mdBc!PubnO}db>i9t8NEVT%99e8#sXq-I~9$$udG zKcLBj&O=1j{|8MTv|s>Po}(8venES~k>y3u>vb+MCJZP^qvb+YGJm|~?m^^5` zhY6ZIY`+p{Jq5vbCun2?S_Yt15qSGGpfkQf7&H`sD7g^x&ftQ~5KU#MH9Xypm#t+{8+Sq*Tx` zh$##V`FS~&3fZZZI-s%BlKea!h1`75fhIbjA`8?G%1KQuOVt4%^j(%&R8pFl19Cn? z5y@+%whuZ1h2zE?gDe5vv`E`fe+HnOHT#$LBV=q0&q7#lO%Mh1_ARxwK;5F8Ds*u zE(HsKcwj$~WFB~bILvKe4%{63#H9SPR3gF#Y<)54UXsLg1qcUb2*G$NN(CJd#=roh z!9lA7ZYO|E(oq0A3Pk0lrxt@73ox}v?Xbj@6deUnRzxgv$V2jFHjW9ElB&5P#wvh`?8-fQmbieb7ZV z;4OWS8USh>p|xJ%v*8ir5KyO}3`8K8k8pd47>K~Qfk`Hp7L}!z4QBB`o-MX^{It5rePX zgY0wxtt$g>c>&E>CZ!fBl!7*h*AyhCrxq)L*An3~1FVdJfdQ-ubUzcKi~*yAte*E&IEFFAm|Qz@JULbGn|T2D`D({ z;?&ZVe25xQe$7lqW`lHr??NicOinKXl^i8SrKu1V3=9+IBE}YH%ryX?Zw?*{fQp0K zDI1X3d!TGkfBM8+$hpU$Z2?!HY>?X@AhF*-)g$kl0I7i$F`)Dd3a<#*0Row+Mc^d{ zWtqjLi8)rFw5?wStcL8t9P^fKh7mNQs^CvWrf6p9mbVYjM*+zhEpL1*WKLoYY60PIo*EAWD# z+=9fC%%q%D1&B$-uye66)x**}bbGr3=ul(uSq2Ir+3{{gsj1+jA#=f-*zl?i04;JT zDnnL(e%E5qHZq0>#kv9y>~sYl*y;*26srg@Y*G_Yh*J>|h*1%E;GrSVutrVbK$5P& zf{iKy0ZA$X30+D82Y#vxG?eKIOqilB(6C)YV8e7>0ftyzfe(|_1srNs1wJI}3LHq* z6?m{#UBFH-HgstXuw0;yLMC;*wUUqc|lM_0h1LrK6vRz<*|SXW@dT{VFX zYt#i8YLx{NJaq*&43hpZj1V}3jBuFU>e7L71P#~cq zU?8O|u)tASz~PRPzy)y?0f%~J0f$6ofdmB=fdE$xfd>}40tzO&0w01k1UB4P5}4qq zEO6kal7K;*vcQAs>H-P-RRjudCvQxYgxq%Gi3rvw_xV@NR561cEIML@t% zSKtDpih#omWq|+*6@d+1$^r!)$^sw$C<{zrRuMSBpd#>Kju#jV34mYFd<)AK%hWbz`$KeU;{`Tlpx8(4mXtq4y;laXi!lWC{R!qP*7AB zc+jUQ@Zg`aK)^aZ1`Y?1wFx&NVFF8U z26HsQauaN{1wNRn2pCvv3rwg}7I;vnEN~!CS)idyNnpZsWdVguWr2nqWr2h$C4qpu zN&**dCccXjc|^Af+PkK~hD4K~hEFLYI=jheTz80BIG02a+lR3bHB!Fn2MyDG6LqRTkL5 zr7YmUuPjhtp(3zBO<7<#2wX5%5tz`bEU=+PS%9HMSwLaGl7PYiC4mJVN&*Hp+5!R~ zGwYQF3@$4PTsWm9;BZMvpaI0bs3h>=n38}4$jo*nfd|b>0s$5(0tITy0uGtV0tvaw z0t!|t0u2@_0tz|G0uEN%0tu?h0tYNq1Qs+X3p{927Eowb7PtU1-$F&;1BlL17GSVc z5jfDSEFfU1B2dt*EMQ=%BH&=DA`k%LgXD6R1sJN71R5+=1SWv|WT_&s0VHmzB5=V{ zMc@HQeU7rg1uJa{J9U*r^C?@Kq8x;H@OE z;fj_(K)Q;+fj6oG7t+)O4!lzpNcf;C5U@Z^KwyEIfWZPafd>oJ1STv{6F9IyO(5aD zssQY6j|Fd31rEGb6=0aGD-dvBUBF?2wm`!oH35NzY62HdX$b^e&=N4%t0llNL03TF zvbsRPZ)E|41Qme^aVi1|t?B{-9qIxPI@JXhEY=Wskf|ncKtNMKp<7#EL!++1f@WO- zhwUl?3e$821kzLl6p~d04B}M;KD4R}eCSXYDCklbVA!T1V9={AP|&I?aA2mcfWbp` z0S6Zqfep4Q0s^m;1Rlid3T(KoE^xs^MS#IWMZlp*Q((dgbpZ!^6#<5wDgq5p)C3#~ zbp;NHstas5rY@kMq#=;7NkhQlqL#pe3}u0a+v)-bOjHB}o~Q{hsA>pYuvQT;NL3MF z(9;lD5UCH;55s0#=b=?Vx;Qy2KKMMI!qqOL%}EM0+w zsps;Q4NO+ewTn!o`E6@h?VDgqOpstFjds0%nS zs|yH-s|#E>t}amEqav_DS3`hdkBUITGc|z+;_3nm*wqCT_|yd$j5P!jHfsqmtk)7a z;HV-{kf1B@;hmbmg6En78~&>aEcl})z#yO`5Fo51u;8;QxQqvt{|COQ3Ox9!DzM;} zs(`>BRe^$kssbAr)dVIms|h6R&=3%KuPU(My{Z61v!+18233KEHL3y+)~X6PY}OEH z*sLlrVUwyr!e&*04f|CEE_A62By_6_ENIddSTI9ZV1cTJzyUQ40RuA?frcVYfrKhe zfelmD1sFDH3ovZb7TB;=Tj0YcZ2^Wo+5!Q4wFN$a@E&b}hJD%s7xrljFznYBFxa6j zuwj?B0K;x=frQ=K0t-v;cHW zj6!iqDdg+|kbhwq)E)+57#|xAk_Tas9P+ub^$iC>LMS*X6|#2*G}a1|0MXFvZ5Wbs zG7FOO6Tur-Q&Njdit;NNz%vk_Gxj0JI5I$|Mj6tJ5|cps(~B}e(^l}kBH%$`owL6^}nfJcKt=R6>epJFJ8sQI4sGIPtM5CFNU-+LE=!p3%FyFUsMSe zOHVEFFG$S;U$qKa-Ofev;k&t+gpDlI7i zZFYg&_rbuB3|g%T6->=50a*h&vki2-3IptneJ~BZjW8#(xFjjRf+06GuN10{0ct7u ze()5?&=5mWVoGK{Q~|921nF0TPF!bTC@#p%1DOLGkA~d@4hl06u2>1FcP6ZZw1q(N z+yE8(uwG37#0TLHsMvwc2(c+pF@a?Wy$fJsI}qwtK*bE&RN&@qfQo%stPU630TpZ5 zj1W5j729B?0nV!+x14~A9SG5Y>%9OKd$1TGb^|K50Ld*6pkfAhwBUMQK*bh(M2LNW ziY3TugVlk;>IYQp!%l?X7*;{TZ^LBB-f58gc%WhqyAkRHpkfM#5n>WhF@|nPn*^j+ z11ff49YV|oD(29S5c7eGO+XThfr=GuN2tqzia8uZ*joY>3pkDttAUDrn4=62=LV>l zz(Gj7fx@5zD(0Ys&^rMtW`Lw_4pi)c6eKP|dY3@O41OZS)R4gD85$Ata83;@$N5m~C zjyP6B;(S3m!XE;w4FnpXXR(0PfUpEqUBXXwaF~MJhYjn(y59^846v>;xF?QwhdAtf zJ&+mD)y$yn5v8CpH{JBq{M=MXx#F3ZS(2HUqW}{En*}W|U~5moGl3=fpc!SbbYcNy zr99}&Fx}$HykrIjhS1_v1rRf%C_gX1v>0-P0BAi7tfOC?T2z)=#GnfqAz%mt4{?Bv zLvgt-*o6!Xp5R-SAr1kJ=a*+>CTDw}!Y0NOVi0KOb4Cr6k)dNfX;7NZy;c^-ar6!Mnyd7z^iK-UgIw&eJQ`uHe- zjL1s|+nJw~1qzOWqWomgxU_|yiJqYmxNa{1?XB?v?X+QFV6f0L0oCuI1y$g52N@HC zOtM1f%&cHLZa`BhNuWE_p^X>NW(=(AK?jvW0tURHL>IbFGqp&;R-qC+oC`f;p7!>@ z(f~BBL8tJ-BMGb9k=#u!ze4Q>Z9#%;{sEtSnv;xQc7gmN(Dn4m+0f#sC_fi8%;*f8ONAs7aPk2s2~f!ajYv>>!WSNpJ4qo1 zpe+l8Y+%dGgC+$AhLViTVg<;OfJ9Jh8@c=hr75W0#h~41oOThQ* z6a*xeWH2yTSrsRyrCM2qWP?g=1_n?dB|@+CF3AV^w5SARep01EZX(Du^2kOIs!|R#D zZjf5qU=Hv(;{gl|4WP086HE*Zpz;0(ObiXIpmhh#3=N>Q4hqZ+4SWm?3^Q068bB5H z23Cd!(0v*wSQ*f+k0`*#&;VMusKLh209w1?z{b!3TE7s% z#?Sz|r>=mFp#gLbSqB@$z6ERy4WRpVcCbP0y}-uM0IF+VutDr+U}tCm?eCCaXJ`;& zU|=v{XJ`P`Cm!q!4WRWL3G56Fpmh-y>#yc134HPBc7#cwNW&;O9gE9jH!wC+C1{DSdh6fxB4XO+b3_my+8q`2%vvM*ts53Ay zXmBz#fYw?%a56N25?TZ&LxUD*E{l_)L7Rbrp@Wm50W`n5fRmv?mw|y{2PZ=VD6L)K zWN6T5U|@K`$` z85%(Ip#j_s4WKg@GPoHUK=-^fa5FSGg3<#wLxU6O{B>@I24|4}xfvQjYds%uGc>q@ z{LjtM;0E$P4?}}H$p1VH4WN5*9C#QSJQ)}mB6t`Yyg>fvVQBCM`JacO0kjr$0S`li zFUbEq3=Mt^3=9`|7#jRR{^wz60G-v#z>AvhKiFG;z==VIVmJUP$`(;Dw~` z1PpbI3=C`x3>9eNAU8zFGc-)#WoSr|XJ}Z#%h1p!&(Lsym!V;aJVV0`UWSHs@(c|h zco`ZF$TKu>@G&$zlV@m9;A3duQ($PY;A3b|Q($Na;A3d8QDA7u;A3bAQebFk;A3dW zP+(}7!N<^0rohm!fsdh~Nr9o^1Rq1g3D%1Q{9@C^0l_5M*drrNq#1LXe?>O_`zLfgnS}2_=SxAA$@Gca#_!1cVqGJ}EIY zXb3Sh$SE^4I0!K`7$`F|LEA%G#CgoG^nUBG#AkWZn0!1ys4zsSKo}W7;tDv# z4RDA%;1CbMA)bIkya0zdxX{Mp&IvfwFTf$b0f+bj9O4&nh(Ev~{sD(L1E{jW;(h@f z;tDv#4RDA%;1CbMA)bIkya0zdxU$6J{s}nLFTf$b0f+bj9O4&nh(Ev~{sD(L1E`Y6 z;(h@f;tDv#4RDA%;1CbMA)bIkya0zdxRHXz{S$DgUw}h=0}k;6IK(gD5PyI}`~wbg z22i6Ai~9v|h%4X_H^3q8fI~b0hj;=G@d6y;;6^PL_fNo~egO{g4LHOP;1IunL;L{_ z@eeq}89KEV;-+)8> z01ojBIK&^|5dVNfoB`B{!{UAc9O4Q%#0_wWJKzuxz#*Q1L%aZoIJgsv#r+d-s9%6X zd;<>g131Jl;1GX+L;M2{aRyN58H@V`aEL455I4Xf?tnu)0Ec)24)FpU;^59d7WYrU zp?(1l@eMe{58x2LfJ6KN4)G5-#2G+?7FgUbfJ0mXhqwU_aR(gY0XW1HaEKS+5C;#s zU~&Hh9O@U~5Z{19`~VK|3pm6d;1K_SL!1FLScJv>0yxAKaEKe=5O=^K9)LqU0f%@2 z4sq~c7Z&$Vz@dHt4)F~*#1G&Qzkoyh0S@sGIK&x1gLGKjFMvZ_L7stugPETJbly5l zTLcR#e+4Tl{|6f?--82{KZ6sM|AGsZZ^47g@8Ct{-{3>#YY3q7D+E#bCxlS>5+bPl z3{h164lz_dhXg7=LK2m~LJF1tLmHLuA&bhNA&1I;A&<(pP(Zp7PO;mn{7Ak*-HY%S(7nL8Ohss}}kIMgHfXeqULgmjeM&-XSLFHSRq4GP- zQTaD4Q282GsQe0RRQ?GYRKA2ADnG*>mA}IQmCxaX%8zhH<*#r-<^OO+<$JiJ@@IIU z@?UtO@-4hk`5iu}{2RWgd<}n8enkK(|3n}vUm_TlpAmw}-w}$+=LkpTM?|3VS45)n ze?+13Jz`M#Gh$KsFXB-7773{Qjzm=cjU-gQMhYswA{CW?A`OlIpO3)-G>HQ(&?J8F zF}wgx?m+nrzxfz6K!b=-zQ!Lu2GD&JP%cBqUp@vaB=r+m`N4NQz~mpWq4EtlQ27m< zsQe3DsC)$;RDJ<3D*pfpOV2;W^V1ddPutMc0Sflbc*r4(m z>`?gu_Ne>?4ygPGuBiMEj;MSGXH@bTL=foySMaAn{^ z6Axilg;K<;^z{TLq;L6~~08$gg5YG_65W*0|z{cPVR^beGAu9uj z_GfTr@CK{*XK-V11DhGo;L8xo;LZS20SdifhF}I>24`?cg4pp4K@6@8VPIc@LX;Cp z&V#`bYzHrc3xg+vBZDtEc0gf{(9aAG^AH9$C=CkP2nHT7FO^kH);%0CG`wJ4L zKH%7MXK-ae6%S_c1^XT3dx-h~Xlz5w=U{MUh+uGL0J+eQ0i>Um!3}H|D8;ZdfMV1M zYC9l<8DJvJ;PCKc;9>A(@MLgd zZ~@zgYziwlc0$3qf{g(bT7KXZ;==&qLDCY)6)X$^3_c7Xb$kqg4519J48aT`44z=$ zBF7Ua19F;%_>v1n4CYT%l^{Dnv5C-)>`D%XAchbIkZ*k${K2ur!4M2iWj^2>0m_rS z48aUe42Zmp>?%R1oCj1MTMC2e2Zbagju0gWA5=fWb;zc3LuEr50>JSBD{o-7hT*Z5 zogtXP16qcGY-R(OC{YZa;5Y>FKsg$e_k$QfehvWVf=C8u22d=sfMWsVPBw-Ra4H0) zX;7{TLCTMO;PMgVHjoYIe&fd?3rfX743IKQ04|U0dt?5 zGjK43g5we7dUtSY1c`w17^pn)VF2Z9kO*ozW@QKmm%E^x%gPV|Ez>~jKw$O74JObE zn=po8hIn|X1WTQuuykVptyE!P*vs<%A85Xwg@J>Chk=O!MuXPTfXo7|lR~OyKtc>= z;Cs)48A=$67&0017}6Qs7%~}h7*ZKL8S)s?7(ja{gurSH7)%%p7%Uk;bP~8eGh<+9 zV1%o8VMt{tW=IB`Q@~KdkjaqG06L+7fgyw;n?V7bKS3*P7#OS=I2jlj{J|>I!L}wc zeSA(x?mA(0`Ep_0K5 zu7iQWks%pucNs$}1ISm23?&Sy3<_W!MGOTD`3yx2ATgNh^icc|#*oTT#88anb_)hQ zunP2GG)HOfdz9l?)0DMhpfF1`LJ_ z3JggMl?)0bx>bikfgzQlgh2spFDUZd7=#%Z83GuJ81flX7)rrDM-B@}xI=uP0FKKd z1_g$2aEPZc&)U)(4I}PNvi11*+?r859%*7(l5CG~&j{ARqwYfyUdI7!(wk7#JBC!J}==3`ZDFfY(m*F{m&| zFx+D30(-`pA%h{GA)lcbTu-_%WHJ;nq=M@bP+bW+42pxngCUh6hXK5>oq-9w9F~KD zjiHQz6I8zbZ(_jIrNE%Z0ISJC>wQ61H83UUU1_ply&^lm<5}3RMSe^+i?+k8bB!fc$qKW}-juu!Q z9}CDFHE1Y-ZUzM1#SAmciNT10hd}_UCWs-GA(0`4K>^%4%3%P7FT_-s`eLw|ykPZy z;2K|zp&Z<9$!5?4Lx_4vJa97fGZZoKGdO|6BoQJ7U9!y1Fpr^~L4=_JDV!M@A*C_oB3kinq*32KRgmO_A197qg#90SBhVDihc zG@RfnLt2`W5=c5pNex6HahMp=l#Gp)($bQYjg8dOP&o6L5{+G4jMdVFOG*K597o)Vqu(Y&fwKUPRv^1kMcP5aai&0{T3xkWZ8b~nB zC^0OJAuUk0lmWIM%V@gXC6a)oUqM#UvLgK7xRKf`u8H9~N zKoLY38=-KTAbxOG3~>Pk8aP~%6~jQL8!0e@!v!SA;^JZimt#vyGupiyCg;F_B$vRD zmS)7j0Fz^2U_t0(U|>r#Vpsr|b6`M{OJGPdVu9;pabaMA+sBs1z-F|j5vI?@#Q`Cg zmX^R~qyUK{kUL#mkmb_YjC}GD`jFfS_8$v_XlQ6?Xs{xP3^hXGEMyb}14S??1SSQc z98hnGodJ}GFzPr&ra@s*tBxz+V_>L|V_>MUV_>kWVPKH|!N9=(fq{Yj0R)5CATf{} zNDW9WNDs&{psI`#%>Uv4fA$Ce|1%%>|DUnp|NjQY|Njp#|NsAh{r~?D{16OcgTz2` zAT=PhAUzLHRg(tX@gJ?t{sTH1}_yd*l77h#y zG7bz3d_O-T%(b`B+>`Tzg@|NsB@ z|NsA=egFUe&GP^MAC&+9{{b`{f3W}me*lC*;miF0{}0Ch|Nk-m|NpM=oqFGP*DlDfA;_X|B?Uy{|Bhe#Qy(3D1SdQ{{J5&jtzs|%z$2gf+Bq2%1?-!7#QmR zK`^Ke$A@9+K{QE;5szX>&4;LiK=n923^NMk2F&yc+Ic@P;aUHmfx&^1fg%1c1495S z14H;%28Iw(28Ph93=E;63=E+lHb@L42T}u43(~{DzyQ(<^B1`^dN`8K2Zbnl`ULfi zK;g+SAoUS?S`_SHV33>v>2reGqOg7^sQn4TF!dmxkQhFsL00 z!l1S%2!q=EAPmz7asy`i1f2u{3eSP*AA!OM6mFnCx{VD3gM|zO1E_zFj6q@`IglEV zT96))Utr-vE)5DBPM&C*=%Gc!Hec)WX29sEdIiXbJ;^ z)(Qp&u?q|gTniW&{?vhFAvA~&5(mkH)PdB4^dUlqeAZ0k|NlKz{{L6x{QrNV@c;iO z)&Kuzb@>0Ex#9o+fBzvghz}A6$%E8^)PwXvT!@}NK_?F32~Qf&nSzYRh5vz9AVJ1L zu&E(G6cIZA)c^mF4I`&fZ1Ny6?BNMHTm$EL9mpdPjVL6w`kPD*3=C`sAZb!)0t16m z2Ll5r?SaA)WFd$K@j>Dsc~DvfsR!vpgbMkrANK$Me}Il7gT{|Llu`Tiuy6&5gXF>E z&7eLMXgmt!K#cqjIV=Nbc!Kp{64VM$WRpSdAW(YFsMz04TI!B7^D_t0>mBY`5kij#XyHAsBNUc!oYxx6Kp0sJ#0IGa`32-B zYG6>i2!{JV{{IicJ%<1PBV&*l2*cEYXpkE)+n3cH&U|?VXVbFndkRcrK z`V~sU6twb7zW)FJKKuXwkJV!Y2hGVH z{Qv*|N6`2Q$o1&?9kjv%H2yg-{dZ9M2Ztx<96ivPj0_Cm)tO8R3=E8*d5;aC1N0ae zFv61w)as@*H2?nxhbMHN^Z5V&{~v>bYX1NKKj#1c|A+to|9|}d|AXc_LHHjiJe#58 zpFeShC*<%5T=^Xo1K2P%>myKksN}-Hpq9eGpko5*!-L9A5C-+#L1G{|kQ$I$n0qJ> zO~{-(s4Scz3F&V(Hva$Lnqnfnp1UL2Qs1NDib1q!y$Hq!;7{%=!ql-~vzo2%-st1VtN$Ac+DX zn?bXy$QU%v!SI2BA;E%y;g10W!#@KChW{TJ80K$afE=O6PLCe|u2c1(l;9Ik11x^E>1)3qBn4M_?^j2x^3<-46x^ zMGgiAK>-E^P6Y-APIU$bPJIRj4s{5&uxDWSVZ*?1dI1B&2?Yj*S0LH}(hdOad!Zz4 zg7h8)t*2p!uCbB$|Nn!)|NkEtAoKwNP<;dGD+w_F|1SW_-|~?8PKA0%JV1g4Jv>2` zC<6m810&tX=RwULQ0oG8mM`eMU~qo^z`&sYgMk4wmM0Ec7xn|XmI+j5eqdl=0HsY( z!e#^IMo_4bj~_zQ=K)ao$p8O;0MteTg)uW^d=u2}d;nUz#15_N*+By&|NsBT+g<{l zj0_rcV8R-n-~*>25rINdBYlDm1g%#JU|?W+!N9<}g@J+R7XyQE4FiMzE(Qj{D+~3jA33*7H=nwn<|38@j|Np@F|NjHfIy(>z z3Rh72Wrwsw8TkK0){xl$|KCs#O1~f^>QNnl`*FkoN+oz0lQ z!@zKW4YEH7bZ|HfA7o=-NbX@^0F@IUz2NYmkN}Mn!Nx=$_y7NY{P_R>{g40um;3nt zzis9J|Mov2*zV{5|1yRD|2HuI{|_oBK-PlXfLR}bPU^-Jo;0lAK{32)H3P%dPzDAN zeSwvMVF5P-11=h-4n%|Wg8W1Y2BmPyFepUP(c4<=p<`<0cToErG>+u| ziGd;g83RM{IR=Kxd5HEBhz$}0$$`{>)PnSY+(SuNg7kvQM^JkRgozDTkXjH1=>@p~ zGkt<;0#F~1{`C>qJqZj93?O^}(s$==U|`?}VNk#Q0Rsd70VtmV(kBMhVW9RENG~W% zD8lpq|NqYq!O!F&efJ0UkZ}>vxCf~H^Z+zA3KFY_ETaY0VW76vb9jP6PoJO@_(9>x zfwexOb@~JaB^Wm_Fo1T1fG%$XUFebjkAVS1gZLovga$~kgVch;5`-xVOGq$6g46#0 ze?I&F|9R^F|K|XQ6Qnc&rCAUkBo312w}%Hm*lLg)Fw-aKCIj60o!0d`XtWR;2IXrI z#wG_61NjB)DGG?g|NsBThCz858Dmoe5(BvbGdw|~ba=uOq6vcpMwj3=)H>XQ0CP(g8-ux=zp>JgFF@7vfv={0_QV15`F)Utfm{P$fK(3cg`*Fff4T zE0Rw}I7XyQH8v_GqKPX5}?gIk@s2>3J7TFYNjva&>Vf`S`x=+y9JZQZ< zs9p#4Kf!w~|Nob;`2XLg7P^N9G&ch3&w~RLJ$>qcMRAVTfn_lXs^oW2`T2)|p&ko% zabaKx2|>jmF__xHTYiFW9s-Sr@M3K*(Yk&Ijc4+J`k6e?HA_qk43V=C7_`0#)P4tz zd4i5P1nuqtVGx__gbCFM8pi~UX@cr(d&jvauq=SKh5rhR87??m=;Q#*ui~s)%?Ee1;^^ZW~c%XU;gh6bO*aw{J zLqL`3z=S7qsSL``$Qaa?2VrC}5F1$!BvdFTLHQmTgYq^qMwSDyVKzeCf}TD>qq(5) z#NPg-Wqt<@U4iOpc2FPv0VIur_+Sj$X!L-Afv13hLB;?wmM2rdz`zgMcMOuF!h8qv zSRJUZ4$9M@u{$sZ&BOEm|NoHv|Nn#S|NkFuht%!J>ad3=XhM;JfolN9=RxiP6`vps zs$WhiVe9^ByvZAv~5Dl0%fKu@2bn*tdaxEZ*y)<+;6*f6{}#wJOQ7&t%~ z7#Klx8v_Fa=%PS128Q}?3=9mQAsZ0C4Jr>(LxuScSiS{U*dPA?{{zAW|Ns9p0Bw{5 zg%<+<7l4TWDS)U0>4A6?Jv>3DaDehVj{OLrObOA5LQ*X}L4zAuFsSSVVep+ySmZ&D zfrkgV4A7tk7K~hWg4kFGO%8*?8srM}@H7Pp4($GSP`e(_xJalg0|PRKjf;>QjOhA6 zV;iK7hk(?B0}i9V3AzCkPx^#t!XT-ZKA|Rq)-Jd(F)+Ze`#;FO4$$5X7_NWBz~G>S z!06#ZE+4rKFZkpCe*p#r7VP-{AA}h={{M$z`3_Lp1YwZl(bFgBCRIG)N$dO$auNdr zgPjEfgM1AGgM0-813whA7cek@FmnN*ql8Y@l=s z%HNEkU3*;y#(4^jI;j^x{-F^_QQhqyMp$>GK1Pdpff`p7#J9d zz@TVA4HYtY^^m=;$a`QxdtpI*Vlc=JnB&Qyn|%j9eL~y@AvpvX7$hVZ7(o4Y&|WVP z4dR2uAu1pw86ike%lG&H|35wsSq70P!hEDQ35i42fDinG&TorFM-6NN{}g-zoN^*NwL%{a&FKsTS`DL)~RfI(8Fy#zgvftb387UB61?K}ohxPihC z9fQO{7*lSBYiQ-FL$0Y3cy|L4a4{~H*g8 z4uoOqL3+V~LIE-V`Tzgt&;S4beE$Fc&-X*dk3nO}6F_S~q3b~>C_~4W?I7yj--qY{ z=>-QTMtC}cg$H6j4wN%Mt4~1~)CvY+&}sl=8YBl&CndqaAm_lqzzZrPKuG|6ei#LT z2|C)Z9EK6NnF% zz(K&1I}UlGg+Z5+urM$%aX{vWL318#4$w894UltJK=qP+0|Nu7We4hif~Gt`=7ao1 z5&i?oygxqv|NrCh|NlRZL*_id=@qo*6SQswiW}r1Wi6<=1lpDWuIoXLz^IQv6A26q zYy;GP2Zap?Cvh+^BndDuBq=a3BsnlJBsDNFBr`BDB>zCH`vj>2jgx{f$SV|uCDQs& zj?e%9b3Fe4pX2!d{~Z1Q|8vOy|IcCn|33#a0)v*_f?B+&7~~4{^yv-~WZ)d2@MHkB zJ=qu-1l$-HINTT*Slk#GnA{i`7(vl|jDbNObkHJH4M;60EI}CLXiCEqGzSF2=LP=% zKQ8e9|6_sw|33=+|Nlea|NlP%|Nn#bAi*$59cozOs^2|8P8+!S4lHFSsLTYN_X#=^ z5Og*mXnYhT268B-Z;F5(`0%`Uuqafnm^E zMcxDk25!*)E(XZj22i^QGzZTI+Lr(tzdryG2RR4SjDz`$TpG0B=u!Xw{~!!%FTwDa z`2YWr+fguaP(1|_2d#quVURm8($^fs8YQ%1sC6|Nj+O{{Me55hM=s z0eW~sZo3=k^a&n^$CE%oX%mD&K7e6z!x2Ltfdq=2HbHEdeuz8J!_yBeJP_dtYNx|6 zXzhH01Ovkf9tMUMb_Ry#b_i}{XJ9zU!@!UTnx6yRmjGSc1kwld7r8WOjS>ul)*>>1 z_q2o39Tv52C>VhtZyg+^>i$JVDJFh(1)3TIDBbejVN(0$D}?gVcibfLudv zIKuROX#f8o)FuL9P`(G{e|#9E2Ba2@+d*Ltas_(&1Ya}6U}ImAo1;*cT2!2wpJ%IN zsAr(0keZjApOTrEZmSd;;-+h%q)=Rvn3s~6lb@Grt5lgTT%4MllvAlt zk(-lOY^zjSlxJ0(oRONFSgf0ynOu}#oS#;ro1C9(l~|msS7xZBkeis7nU-2y5{7IW zvQeHXsd*)tC6&BfoNyOe=$Ysl=ou*Sa&ZwTG91jlzGf)T+69xsPNjaIx z-l>%#`Pr#?wn}EEmZnK&CWa;^$;oMkDQO^6a}x8?OB2&mZI!fOL81@y8H!)vq7eV; z!~AB)%f$8^u*z_r;bOy;h6fCf8eTBGXZYCgz2RR& zCL=y0C8I*44x{--n~W|QeK2A&Rx{2p&NFT>o@ad3_>1vhV0%cgftQ_PypCYUWZ+irHm?3vkrGf{I> zb0>2@^9b__^H%eT=CjTBo1Za%WzJ|JYN2jnWMOR)Vv%5xWzlT0)#8A~DGNWVMpFGPJU_a<@vbDz=($wbbg2m6WxHwUM=pb-8t;^)~A>);FwQ zS%0_Ywb8cmu!*y&v6*JG(q^B{O&czI&>^{?aX3XYRWnU9T{A;7Q?ojAPK)VQv#sV^ zEw);2wc2W@)om*e>q_fI)|;)5SUGcIWIE3K$sPFfcG= z8$cnHiEXgwyw6-wjH($Y#-ac zwEb(#X~%DuV3%dL!%os(&fda4*#4^h1AEZe$q5Dq24w?%12co=1``ZV89p@RHBvKL zWwgQQiqQw7662G`AB_JS2bhGK^qZ_Oxnsg$Dq*T*YG>+V8e&>$y2bQ{=_^xZGg~tu zb7^x0b7ONi^A7W==EuzAE!r#&SzNQYZSmCNy9K+YvZblz4$B9YELI{`idI@yCRW~7 zORNrAUAMYpC1f3Eon~ENJ==Pz^)72B8+IEJ8%LWEn^>DPn^v0zw%cqE* zhD!}^8HyUk8`T@FGx}sCYTRP{#aP8;gUNFfZBtj%IMZg+nWo1~@0g028JmTgWtr8O z%`{tNcFRo3{GWNUMU%xOi}@D&EUsF-w_vrDwsf$JvMjb-X1T}mnWd{$lvRb*0;|tf zf30|}<*bdZp#{EHY_$AHas>GHflD`HiRfo+@ZCfj|s(so96^>$P37TT@0J8t*K&fLDyexdyZkRKN?Fzf)G zwP#>tu+V_XaGs%_QG(Gtqn$>VjlLW48Jik=8#fp)H(qCa!T7214`X2yB@-Q!WRqnk zwWg0u8O;REy|$(1+2uZbgkN~`m7dMSJ}wh zY1sAKEwYQWkF(FWpJ%_t{($`{`zIiGZ(v|xVFdLx4Gc03nhg34HW_#uCK`4at~A_h zc+~Kj;b%h*BW)uyBL|~GqfVn0Mq7-|7+p1DHBK?EGM;a|-FUb0e&fT&cZ?qzbD9{L zn48Qo*=KUv?_se!4jX|QRt=_1p8rWZ}`nSM6?YpP&oZx&)!VRp+*(A>>D(!AZg z$K2S$!ot&{)?%{7e2bM9r!5#Pc`ThRPg~Ym?X!Ap^~UO#6^pgDb&hqP^?d6W)*q~Y zSS#CD+PK-o*<{-^*i5%sX|u=XfXxw`6Et&m4TWMQoJK1)w?P}ZY zw%=@%?8@xs*&VmLY4_OfkDY*hhy4QkHTIY7@7sef(_v&_a5eBYIACzY;EBOk12#iL zLtDc%!*au=hMNud8lE@2Z^&jOYouosYSdvg&FFy9b0aBZ4P$@f65~4K4&zD2bBskz z6il>Cs!ZBU)|ebHxoGmogwIsbOwY{T%+)N^tkP_`*;cbXX2;AF%(cxe%uCE$%)89z zn(s0{VSd$I!a~y`!(yGqNeg~USxa?GGfNjsKg$TqbC%C6zgu!xRaDB4tu%(qhtOGROl?h5P4i3_nyxZEZ~DYk z2JF{nvtwpg%x;^#H2Yw--aO4>kHtR=UQ2aLQ_J&~S1sRLezD}SGPZKD^0f-HnrgMs zYPHp6tIt*`)-SE!Su5H2+l1N_*!0-^vWc{fvz=wTz*g5T-tK_iPrHA10rp|`ZT9o* zPuice2kn^wEeZ2C2sM~)aM<9s0k@%wVZEW0QMb`yqh#Ys<5uGd#&e8U8NV|AXv}9~ zXyRlNVNzpq#^kw)iD{JSB2y+aH?!Gh*UhBO>&;i2zc%N$D7W}%!C@I;8Eutj)n|3w z>a5jWtG8BM))Ln0))v+-)&bUO)+N^c)(fn6TeI3I*ksvM*fiPn*vzt7VzbxgoXss8 zPFp!!BU?w?0NYI4THD#STWw$4irZ=1S=hPS_1i7BJ7;HMzsCL&sBHfLxgtl}AjzP{ z;HtqJ12#i7Lp#F|!)U`ZMlX!M7zrAy8rK=$G3GT9GSN5jH%T$6G-)tdVY1(Z$8?_Q zZqvi2w@sg!{x#(^voy0aTVZzE?5!EExvTjl^B3k5EFM_MS?O9?Sh-t8SxvK&vR1TS zX?@uGoQ;!RwA~(1zGq+rRWA%S2G)l4hFgqw8ND=0G;T2dYs_O}W#VEIZjxwHVp3-^ z-(;!Dev=C(_f0;SFqytGjWD}lmSle3{JFV?MT$k1-ukG+8XNs#>ljNoi%WpLKuj=^h#Zw5|= zVTKik>_);yRz~(lTH4y!y3%@%^&#s^*7vQMZTM|eZGvpNY;M|ow~4Z? zuzh4JZnx6zn%#FhMf)!M|Mm6Hc&FKHt;nF zHHb54Fqmkt+F*~tbA#^&(uPTfd4`>a(+pP_o-ur9_}kFV$lEB^sL^P)k*Kl1aguSm z@f_nt#yKV}CKF6HnY=amX2NMY!*rhMWz!p`)6M3XT`;?D#%}Ip?qS|)zQuf>`9<@` z=9esbEl*iqwtQy!({j7jGpip~HP*~F^0pH4m8Ko0yG;+7J~dS{ z(>0rAw!kdGJjR;KM%qTz#?;2mCcq}zCflanW{FLSZJlk0?QL5-yE6M0`x*8O0gRv~ zHA9NwbHg-~M)qZ0>EIY+i2O zW!`VT%6z~13-iSmdn`CCg)EaS(=AIa7g?^h+-P~&^0nnhOAaelD=jO3t1PQFtEE;4 zt?pWVvl6j3vTm~Ou%2&y-TImJd+T4;tTw_n+BU8>5#W|xugw&j#Ws6vENy*lGi;yR z2H8c}-L`vZ_tx&aos_+$eSrO9`)Brl?HLLfLB%lxyMdiSvO%3ekHKt%;|BK)-WjkM ziWsUHY8x6D9yL5`_{lKIsKn@*(Jv!*<2d6d#_x;+Oqxwrn5;F~YO>4ZkjZhA^Cnlo zA@$7Ujmbxo?Za+Y)!-0%Z}!#9%Y26UCi83NAI$%li&`jJm{>Sj_*>*zR9j53 zSYWZm;*iBTi$@k>mWGxgmPwWcmhF~PEazCRv^-|{&Qj1y&dS8f(<;Jhxz$FityVj& z_FCClCtJ@1_qdd7HEg|Yvu(H9a@z6P8QAT&J8AdXZn6Dp`y=)Y4U7zXK_$$JxVQw`Hd(`3_P(?)Pj=xOF>_S;O!{F(Vj^FQY7 z7CaVa7B&`67Je2X7Eu<}7P405R{d5-txj9zSQlEavfgfe#QL1|HS0UpAFTgcGuiOl zh}y{7DBGCZxY&5wgxPGj*=uvt=84S*8&g{k+i=@h+f3Ug+nKiWZTH!pwY_Zn)Yi$) z!)~hGD!W&9AMBXzdF+MkJwfSr0wco`&^=d%a}3uSZZDBozZ(Q>1; zMu&{f8htd1H7+;qF`jL_-uSff6Jvf89TR_(k0wl}{HFG%^`_fQZ<*?wNtnBs$C!&- zth88fp>Ek=*=D)Wa<8SN)l#d|;CfQPI@Efm^+xNP*7i0NYT|-(0IP_dgGtQ%qF5H zh9=o2y(a5TE|{>H3Ycy-J#6~Vl+R4WOv}vOEY>X7tjMgxY=PNUv!iCG%^sNjG~+jy zHwU$}1I*LRYt8qWzcl}BE@~lf;cgLVQD)I#vEAaZ#Tg4hOGV3I%VNt0%RbB5mYXf_ zS^lL&yo^eW8jQM(ZW`S;>NlQme8Tvm z@k8UE#{Z1@O)^a?O-`6xGI?U6WNKu}YbIr;Z{}fk-t4}aj=7n+hk1&*q=mIbj76Qr zB8xQ^XDqH-e6sjsA!(^>*>5@D@|xv$OCzgER{O17twXKrttVN3u>NVyY!hTtY~x}p zWv6DRZ#Ttmo!t(**LH07g7(t(ruJ6$MfO|m_uId>XE?wJ?sxMWEHc<-aL$0$P|DER zFv_smaH-*O!z+dl4I7N68@U?C8kZSAF_tpXFmW{THi0Y_h{-ugPhX zCnkSPgiK{j4NMbEvrOwvCz@_IJ!^W+^tI_fQw1|KGY7K}vvjj=v(;u>%}$x!G4nPr zHLo*2Z2rXjow=fgn?-;{y+x53aZ7W{ddrEH3oTQvbFGW5YplDir&`al zUSNIOTGGbJrqpJY&2yXYHnO&wwnnz0wu!dcwli#(*sim^YWvXkwXMCKzugqO4R(?C znf7z-*VN{L>p!sE;l@Dc-Qca;a5X#qp3z8jF^oD zj1`RajV+Cr8OxjKo1~c(m^7O#Fu7*(!zA7`-*ma@5z{ua$!3epR+~LB`(VamE^na^ z?!~oPEVnpmp>Jt#S!vm9In8prdto*Ixt-GwJSZ}o6Wql3Y+ZMN3 zZ?oS<$kx!d%a+Yf+0M!CzTJB}GkXX7Ap3Irnf4417{UGPeuMc2rwpzbd^GrFAZF-f z=x!Kp_}K8Xp_-A7QM^%!(IumMMlXy6jAe|~jQxzGj8lwf8ZRy8V zGKn%-V6wsFy~%$QGgD{NAk!GrHq%L_b4+)c?l(PeYGUSK=4qB=R$ZS6o7H}+6ISxpIo9Sjwl>FY&f3J;R@qLmU2VJ7_KfW<+sC%wY&pSW7qjdZ z*uArpvk$jlZok%kxBV^q2cWdizyv;XZ>bTRF}taysl923X`iW}nVOlgS)N&iS)18x zGfs0Ab3^d>;wkeh=8w$3oBuIaweYZ9Zn?(N)F#k2!gibOG21J)_ibO;ezN^(TWPn_ zZol0{yXSU4?Vf?!lLAZ(7Z?~A1PxRTstk4*Tr+rR@WtSV!5;$#Ll#30!|BF*j1^7% zO+rm}nrN81n|qu4n+Ka;viNMFWNBrYV_9g~Z8^hoo#j!>3zk}Pos(UFU8!9MsQstF1aALH8Dtsc8!#LC7@ju#XxMJ_(CE1llQD;}tubg!F3q^r zc(3tOV`UR#lRA@LlgTE_O+-!IO$E&2%(j{BH?uN#G`F!hYH`xytcA6uqvcb}HL{+O4oFwXd|V zwQsabrA7`GZv zGG19(C{yUX^It)gAL zU8-H1-5k43b|>ua+I15OCrn61wn=Uq8Zo1lZ zz3FDtcc!Uk`DWA2?wCC_`)i)@P$ zi&~3C7OO3^t*WiKtyQh7t)*=gZFFs{Y&>lIY~pN^ZHjHC+RV1uYjfDAzhM6c6s8GG3=yC^EDXdAN({RUrx>0! zlsB?8N;IBfJkR*1@qJ@WlW3Dflf5R2re&tvO`n_oGwm}wV0O$*$=uvL&+?JgB%A3r zGPWtU+ij27{;`#`v$AgnnOndF-fNO&&}?90=wKLTxYy{iQJ`^(aigh~g@Z+sWxeGm zOLePQs}w6?Ygg-d>jO3)Y?^IX+A`RwgTlRm30(HBGAK7%V7$usl<@~+2@?~OaFYy^ z9Fqc*5|av(8j}W-7LyK>9+L?sQ%q)<%rRMDvczPC$r_UlCR#q5b0 zo4K8NllesRP3Bw{eim^S2P__1e6ZlMrU&<)(tjNwhG`L=R(`_w)bp3>>}(=*m2uC*+Yw8rS5@iF7;;1L9A6BUzKlR}e~ zCUZ=mn;Mx_o4q%iY5vq)(n1wn2bNmYTkN#ZwcKF&(u%`c%{ttAn)L%~9h-AD=Ju}k zA@+&(@9n?ZGb~_YxWT}{;BSy@fZYG8H)u9!H|RF#H<)ZN-C(xCe1pXX%MDf=tT)(f zu-#y{!G43o2FDFf8{9JhIZ{;=h+6SPyaGqAgF_rmU%9gDq~y@I`^eTjXGeV_dT z`%Ct(LB3*O*uca98rOF=h%!hqC^u*~m|(Ee;I_d-gG|GG!%c?g3||;B80i?P7;iP+ zZCqnA!DOn*e3PRlhNf1gE~b&DC8j$~51F1Z6*7}BOE7zC_R37j+|%68e2V#8^X2CI z%rz|ZEEZX;uu!tpune<|w%l*|(bCCkl~up>OzSJwrZy98*lc-hwQQ4YJ8k=Hx7ePs zy=VK__J{3XTOm7fI~_YiJ2yLTy9B#byDGbSyD4@v?bg|CwmV^W*6y*LpuM)etNlLv zhoHQ3fQexZ0|SGqfwqB*xuAKx`3Z9t3lR%{i)xD*7P~A?SwveV zS{7RNSkAV*X!+1m#LC#p*=nlQTC1a0x2^75J+^vo_1fya)n_Y3YXfU%>qP5f>vn5K z8)4fd+r_r~ZQJZN+TFGjvX`@;Y`?&s;Q|vw2Ll5`fx&WvcLvdhsfG&;R~z0iyUTVr?Y`Tw zfkv7c7#=V&fR=HsHaKDM%z)WY(a_E?#<0?Gy5Ty*SB3&cQbsyPpN$xdMU7L9)l7m- zB28*d=9`=`xn%OwMA%ft)YUZFwAi%8^rZPW^FQVa7ETuV7Nr(*ELbdctSqfoS?#mF zY0YCJV`FVoX47gj)n<#$dz*hYe73r_8MfuN?Y7HopWA-5{cX!=x5#e2osK=j2POv4 z_2-NRyasXxS_TY84~_mCEi*Z1^3sIM)YCN6w9a&b={nObrdLhhnEo>rG_x`DH+yL& zXI^C9XP#xDU}wsN+5w!XFnwtcp9ZP(hKv3+VQVSfyio*0-JG8h;b<{L&CZ!ys{)i(_> zjWX>vU1qw~^sMPq)4!&fW))_=W^>Hmo3WS+n+IEFTGm^(SoK+E;iU$=h(njsZnW>~<$z+h-#ZBS;=U@*yG zj=?^II|lCzcnrl2RSc~RqYTpx3k{nLj~iYz3^Ix_nqV~3Xr<9+BX(m!V<%%D;|s>O zj2TS0Omt1mO@d6KO;SyknQS%L1D+kNHjOqbHJfa<*6g&|BQpteJ97{7DDz9^_szeW zyISnAK52c$`inKA4Uf%Kn?l=C+e+J7+eX_~+fLhF+ljWnK;fXk4DPer8$=m!8Y>uw z8y6e57*91`V!YG%p7CpA1`{I_8_4c#u84Q>i zau^sG@(f!I_ZZ$Vd};X0kkd%V$kNE!D8y)*(JZ5RMvIJ=8Lcu}XSB&^n~|}JrHQWT zZ__1ahs^Go@tB*K+nEQN7n?VjPcuJn{@Hw*#Ze1a%XVuCn3;_@~{W1_XJZq?L zw8==qSk*Y!xYD@Ac%re6iG_)?Nq~u)X)w57_SWpD8H>4~d8T=p`EGF8GtFYX#a4@b zmMT_;R?OCg*3Yb$+8nhxZ}ZiL)t1jz+&0v<%XY0Thn>6KUweiGX7GF;vw@s}se!A3 zpFxB{p@F7hfMK`cR6_+LEu#RVC~!}Ht047SGj+2yX1eB<=HBK@&2N~0GZ(fnu<*5TvOHjU z-jc^k%u2yZ)5^#y%c{g`h1DjjW!CC8CN}OiF*eyY)i!-Li)}XB{IX%O^|y_*HL|m| z%dso7TWq(|?kFfM3z!)|>j`EUJTqW1lr{7=EHcBXkcal?bb>*SZWw;^v)>O__Fa!V-J%VW^5L=mWwQRTN+xevwCRt z&Pv33iuGda4b}^7*4f;#eQ9fAcg*g--F=X~6POu5SLBErA2ohz{2tt6wlHxrX)xJp za>K;Tw9j;oxsipVMV&>r#Z-%h7OO2DTfDJQu+*~rX~|?|W#wWOW|d&|$4bx|G?$@o zJ>7bfwT+F3O@_@=8!p>YyMuNo>;&w^?bqAyvA=Eq!k%FPGlK^s0|SeJpnxX19QVX@H?a2`Kwbl&KO(K{msV@_jX z;{fAY<4wln2n~5pG}ZWm`$=xx=pstahqp0-)%H){cOu@=h&{a z-EaHD*3z!TuG?<5-EzClc6;qU*)iH1*+<&9*-y5gYroQdtNlLvbN09GU)q1NXV}0D z9-Ct_;4yG8xM%R(V3Of{!>xvo4Br?E8z~r>86_Fz7(D}zhk#1P zx!UrWqkmdsWHR;pH?t^R=P*GTI$>uT$@*4wNZC~5|v}LoCw)3?MvzuZEnz7$ucgXI%-BY_? zcI@^t_9pg8_O-gGvqcDFcdYEGL$z|G1N5FGc-1|Fti1a*7z6(8ipB08zva0 z8fF>h8&(=lFkEi9$#A>j9>ar%#|%#!UNF3Bc+2p<;S&v3PgpIM!Gm-#~TwdS|XADW9= z$XM*K*kf_P;(H%YQ7wW+kJwQ00zwdu6!wV7x$ z)#k3vTbtiD?6!)wp|+{E#kTdfGi~qMzP0^r%WkJ=7iyPkS8P{rH`9*c12e-E1_p+H zgS`f#hLwhE4WAoE80|GWXCz^)WL$3CV!YCLvvIabgUMc#Lnfz9*i73@Czx(GJ#Bi$ z^scGAnUn)F3ezg2+ z$!Yb@O3gafTF=JL#@8m+Cda16X12`=8&BJ%wzhU%cGK-1*@JGy0L|@L8k{n`ZYW|b zYa9j6=ci2GnTVU3nyxY3W@>2WXqIHwY}RA8&}_BYUNb#&3-fK}$IPFb|1oE?khCzg zu(t5E2)8J)=(X5yanjfB3R@GMZR&T8SS#ep5S^u$Sv|+cg zv)O37&32D%pk0_6R_8^x3`b6PqS~apJ>0_e!Kl) z`xEw;?4R3%F66BN-P39C*wD`?(Wt;^qR|PXPe#9u_>A|P%raYHw%_cU*(Wmr^H}q( z=10sQnLjuGVJ>OmV-aqVW^vx)zJ;NcomH?^kyWFWvbDaoowbMcChNP_7i@HGV{LP7 zi)_nn8*R7Pez8@xbFyo&n_wqspI~2OKN~c>uhKE7GMH+x&S0;>1B1^73Wh$0 z@rEl6cN(5F;xv{pwlj`5UTJ*5_>A#2V<8hIlOU4{(}|{2%@&#MFuQK{+-$qKvxTZv zl+`_}z1C-~zgsKVaM+65#@puGF1Oucd&-v6?xfvKyDa-w`zfG&?7+g%!T_3A{b;~w zSZCN{INNZkA&-%VQK(UtQM1t`qa-#qEZTM|PY*lRIY_n_|ZP(de zvgNc>wl}svW`D*0vHe?nh5$%{9vy4_6 zJvI7b6k&YCSi>aQWQECj69?0`rh#TXW*5zVm}Q!uG{0y5$o!f4EAw~epUl6R|1$q) z&Sb%6!DYc`A!H$DA!Q+Fp=6Tx#1qeZ|1+vH(GA9d|~<3ve#<0)po0+R+p@vT79tkV)e`FpA`#u zgjdK~!dk{!$y&`?$J)T!%-YJ@!P>>z%euS8RGRde zTsL`bVq)rPdeZc)=|$74rZ-LRnm#mTHRCr^Fq>oc!0ewnzlDN@p~WRDL2J-@sS2AK zn+BT}(Av}qEa36|IAeR0c$2v%YfM1vC%2j&HGOaT&otlcwK;=@sD-gbI(Tezmc??5 zLl);P{#dYCidwo@W?J@H23sXr6ZX;9wYIgTb&7SZb-(o@>#f#n?H}1Q zEMQ>(m*a-Z4WAea8l5!KGHx(FYJAW5i}62W36m)%i%s{M>YCY@MVZB$6`1`tb24`~ zk23ExpJYDA{HZy!g@T2nMWDqK3mHot%K*zz%T&ugOA#vuCTL)VwSvOd>T2He+ZhgV}iS;{cAsa;-51TfdwKjWf9@uEuTG-m! zhS+A>HrP(Eoo2hv_K58r+c&nKY`N?d>@4j3?TYNm?KW^&Qwp~*Xwzb5Ra%BJq7 zWu|jXH<~7yrJGfl%{5zVcEL>C+|WG3yxe@M`7HC*=9kSMo3mPYSd?3ISzNGqZNX=$ zZs}%OYT0Bt!*aXjM@s=K6RT9KHml86w$@(O@z%B0Q?0jK-?Zkmv9t-cNw6ujX}8&K z^TI~b*3-7icD1d9UA^5RyIppt?4H|wvE#CLvaht?2&(lM7%s3d@Gvqka2Ti=xEf3` zSZr{?;JbmFVW?q`;W5K_qavefqgJC8M&FItjE#*;jISDlX8Tr}>@c}!;$-S=8fw~Z zy1;aU=_T;^PMBG~S-sgpv&UvB=C$U%=IhNrnwwepTf|w^TO6>Ex74u=wCu2)ZfR=e zYL#wv%j&U}jdhT9oOQGH1nZsF$E+)CW`Re-F56tUxovab=CRFlo7Xn)Z9dz4xA|@J z--g+i-Im*y-&WXG+*aCF-d5RG-B#OH-`3dH+}7IG-qzXH-PYUI-!|Ab+&0=a-Zt4b z-8S1c-?rGc+_u`b-nQAc-L~7d-*%tvUEAljzinCVMD2|1+UzFU%>u15d%yyoCzLes zGz>C~Hq13FGpsk9VYuJ;sPQ}FAI6#{`X-A^R+wm+R-67ZEj7DkR%6~|zRLWOxu%7S zMWMx3i`^D?EIwIqSjt%%TY7_MXy;mPvOHpW((qfH1CB|LGe~m>= zj+;!eTxhx7Qq;=R%GWB;D%2{{D%L8|D%C2}D%Yyes?@3yJWtnZ)oImhHPPylRhmtK zO@ob}ZH#TUZK-Xm?J8RzyJ)*qyE3~sb^`Vl_FeXq?dL$oWf@q(b3wZe1P#v{T`~G( z^v&p((LW<5V>V+hV?JXcV=-eXV>x3bV>M$fV?ARdV>4qb;{s!06BW}c(?-)-rYYtb z<~imC<|XD8<~8OG<}KzN7R45`Ep}L(wfJHoV5tM%B~f8H$#R_~hn1pL5IBE7u=-;q zXKibpWn)_9xo0pst+3?`f=w@n_J@R+)phMGPyePJqQCT*5!HplFzS(Uk{ zMWDrHi<=g|EQ~A@EUPT1TE4W@u`;p>w#u}svzlzR(&`Yn4WVEiZCzr$%6hZ)G3)o% zpdRKuo3A#)wtcq8Y_HmWw*6ttX{T!!X_sPGY&XeH+uqdP!#>fz(0;!?g90nV8SuDb zsX?p3GJ`J$d4_$4^9;8e9yfexs9|Jb6lv6HG{CpMZ)s)aZWU|QV#Q;vW-V@`XX9eyVdG;HU=v~!VH0DMV3T5#VUuH1 zU{hiPtNA)?dTb`xOtG0^^T6hfjkv9@t)!i_y^8%8P#7DqGQ@z_>e zi%g47i++o_7RxPmTl}`rw=}jix3spjw=A*jw_IVVWaVSE-0G&4sI`IhF>6K}NgD=_|VYM$k8axs0G{}>o=Zbyx;hY@onQL#!M!HCR!%?CJrVOP3D-aF*$28(e#Gt z3sX+BP_r_#PP0X38_h18ahZ3TpEAE?{@dK$BHW_ZqTOP;#UYF17B|3c9AC>a%Qnk3 zma1DjX1~p0o8va8 zZO+?Zt9!QC9zMAowiZT;5T-6q_o-lorHwaq!3Alq`=9@|y6>ufjK zZnNEGyU!MRc7x5X#IDk=&u+i{dHWln7CQsO0aoxljF-Va171T9!*uL z)-E;yHtTG*+lbmK+Sc2?vHfZ*Vz<)H&i;)3Rr}BOpi6*3=_=gGR$FMV6Zm`HacZ|*?6t#3sXC@ zAhTI!OUyQz?KV4N&SA08g2j^4QryzdGTbuFvcPh#tV6(txr_BMIJ2qc!cx?r3MQtT*Wo;F018sY3m)Rb% zwY7`2OS3Dm>$f{-$7b(kUunO>{+2z%2UhUB3YUSDfu@16!6bv72D=Pz8oC%I8a*}& zFuq{SXcA~L&t$)etf`%8zv(Jd4KqEnVzYT>OTe>|w&nrmiRMM-Q_Po`Z!te^&SxQF zVQS%J5pPjq(PgpNLcsE}C5P1>tBY3utoW?8ttVR_us&t|9K6O!!^Y1h!Y1Els?B_x zZ8n!}?%I5@k+yZV&9|+w?Y5n2d&Tyq?GIZqJ88QlyL7uoyEeNN`)2!{_J`~*+k;LD z1I=$Z8x(>^d;b`S8A=`(m2hyz<7f3EaP3qM~q(@ ze>N5}kpa)?d6@*8#F)%AaWrK&Q#LuOmjREABrv{)^?oLJ? zM(swuMxTw?j3tfTjN^=F8?QA!V0_*9y|IFcnu(W5ipgyAXXfq}^%i?9Os&3KiCBAD zS6Me$Pqtoa{l}WgX0Pob+w-;>cKUWj_BHm??H7RS&?ELI?9bR=u)ku@V8F&;!U)+P zC}bdMpkSbGpl4ueU}NBH;AIeG5M~f%5ND8NkYv6Z>iA*)MP_pIJp z{j}n+7PL0C4!2ITzHR-$`UAMX>uNK>W~$9nn`<@?Z9dva*%sJtx4mNf#FpJo-!8^3 z$8N6ODZBG_5A4|OL+n%RJHUDVD`>SK1A_w_cprnHfs}!+fuVt^fu+G_gS`fC47rU& zjI4}YjAD$^jH-;BB8$LOIEt8uzxUh7_)&ES=$p0<9rNw$-0x7i-Gy=m)i zchT;J9kYD|sGU&220l{8+Q8p1)Ue2~)#Q@ZEs&oY*cd=JnClyq89lT}w_0KK!|J2; zc3V}u6Lw7YCid?@t>_7C;5D5V26hIA3{Dtm8yXrOGkk3L(vZQ3%gDjV)o8cTZKHQa ze~pri=Nd0FUT^%^_=WLD8-E3w;d_syPR0mMHH21*7x22Ty%8#ozy8g?4?8csBvYBl&M{tYyvF#qF@uS?iJFOviKj`F$rO`iCfiJ| znSgfmt}(l0#%nHaZff3dKE-^V`E&Dl3tP*2%QcoiErqPKtz4|GSn*r?Sw~r?SkJaz zZGGCB%SOyb-p1P|+NRE?&t{#?TbrLYOtxOOQML`X%WU`AO4u3OIoT!JEwEc-x6SUI zort}^eT)5k`}OwcL2@d_ZGBvU{ zx?{v)ENg6F%w;ZbZe*TrUT8kqe6{&q^XnGhEdE>YT0XWEv+}X3w3=+S-pa^2!@AV^ zgEhO2h>erIzkRWNqkXUaBG5YG18m^6Hp~Vb20{kr2C)Wt2JHq*4R#rvG`M7N$Ka#E zH}IUilA(d&PQx6deMW`GhmFfjj+#`M?lGNaHrs5e*>AH5^Ct6?=9kSsnsZttS}e3M zvMjLtY{_J$V5MqhW|ePMXEonylhtD@QELtBeCtx{JJ#`bEp}aYTkWoZcZP`CH-Y?q z0g@-#41^6d4ZIB^4Dt*<82mDLYxviY-N@9)$tc3;hS5Ev*G7!S!p1VjhQ`*$8;m~~ ze>LVXF*I>D2{MT>nP76xQ(4pLrVC9so9#8bXZFHO)m+a!-aONMgZVCV zAB!-Hb_-@pUQ1)E^H#5|epoSEt64i*7g$fRo@KqpdXx26>)+PAHp1YY*VAp**=(^n zW^=~I!FC#Weeo9CjdmC8KHL4buS~v} zu$Y3@Na>i`nmU`hoBEoDnI@TLn--f^nAVxLoA!dsk;UM>lV?pYo8B>XGCyE`#QX&K zM2L^($yVuB$g@w);8oK7R+FuePit6jwb^RB)o!c(R)?*QTb;H#Z*|$~I!cS^v(u1{zUZeNH_O~sIov59(or;~NoxYuwowJ>{ zU8r5WU4~tS-3q&{c8Bbq+kLY8ZpUdaW-o7VVee?4WZ!DP(*6vjJ^O);VGkn%gOGu? zfxSV5L5)F|!5o8)21g8T8oV)JFcddbH#9KxF)T8iYPi$zjv-wuIXaaHKv=uGpol;LGf_g^r7hw(=4+BvnsO|v)N_~ z%vPAKGuv)<*6g9#2eY4M|IH-LRm_deeas`wbIr@m>&?5&Cz#JMKVg2s{HpnF^M~fo z&EJ}TGv~7qw~)0^voNu+wQ#oZu?VuLv1qdBuvliX$zlh1RmC}rYZgx}UR(UKV6X(O z^OUwUwY0ZPwQRBMwCuN>YB}3-q2+SRjh4GDuUg)@YO4>@%N&`F>lWJ9M z)ne6UHNk4S73d_8tya6O4p<$tI%oCE>c5qYwVJh`b(nRfb)$8=^?d6U)*G!)TeH}3 z+JM#v%G;>g=-PzZl-ew}d1L$2md{SgPRUNg&eYD?F2=6LZj0Sca1Ld$&$2JJud!cb zzuJC_{eAnF_TNGIm4O{RZ_Qx9Y4F9s%5bXTX2au#mkeJTelq-H$Y(UyXphk;qt`|s zjQ$yk8|xdJ7&{q988;Yr8P7GAGHEbbXmZHpuZg0mfvKgbvuP|ix8679Ftas3WPZl{ zllgCRH46g^I|~mBYfD$lHq=b~o&#?G^0Z?7i({?3aVwE5Ht3HzH{uXAo|XW-#4gnZap;3*hr% zcnrf0*BkyYR5sEvvNF1B^w{XH5wEefv4OFJ@h;=1#>^(dCgvvoCNU;8CKF8Nn(Q;V zVe;BU$rRKUC^lVWy2bRM={?hTre91|%*@Q3%o5Cs%zDh0nq4q^VfNLG-CWRI!Q8<- z#5~PB-@M*@s`(=DF4nW=Z_ODkge_z&bS%6rxGkkEEi6+kGcAiPn=HF6pIg4M{AOut z?P?9$f0JrcYO~wsfXzvp9@{y#(RSH(>+E*fov^!T_rUIz9jCp6eU$xl`}H7yDzJmw zHcSR`26_fz2IU6Z4fYtEFt}}?Y-nKUYPiwxfZnE@p0Q?r!d59%`O%UTNNIzQuf}`6=_K=6}tZEQBodEYdBe zTimsHWbwv=*>aNQBFiJ?FG?;F<+%VQC*JzQ^ za-$7KCyXu`Jv4f4^w)^ZSkzeFxWsst@qOb@#@~&(P54cOO~g&4P2^3KP1H@aP4rES zO=?Xpny{MMnfjW>n5LQ5nyxb4VtUE+w&^!hAG29z^UYS8{WfDT=QQ^<4>C_P?=zol zKF8d^BG97HqSxZ2#U+cI7LP2RTYRwiWf5bUY}sMiYdPI=s?{v3#a5-(Rn{%mhpdlT zpRzt@eaZTxjg4)G?F`#8Fc5s{5#h}ih z&tSU2a)ZYPzYMqxg$`S>q6@~>lW*|)+?>gTfes!uu-s8vDL8E zu{E$Y0rjB**unFoHx2I_iW*6SSLNgwbs60;k~G#gb~NTPi7{ib;Iw#danwr4y3P8W zwSvtJn>#iSY@XP>uz6!sWLsm~WINGzk?jiGv$mV;9yu}xWw>-;ddiV<7ne|#&#wGrt+p*W@ctFW}W71%+H(OHdnT=wFtK;v-oAf zX$fi(s#%&^dRP`&R#^V9RJ2mJ`fDX+y~O%}wYN=yO{vWc8-81TTMJt!+dNxqyJ))< zyG*-cyZLtf_7e7r_Qv)$_OA9N_6zKn+MlpzC}0P#C$u++H^?w3GB7m^HH{o2_?RGc>R>fUcJAH0U>QF!42EFcq@7V0+DWncW&Y zh6#{3Gcas0+inJ0J6merYre!hz@pHi+G3f-5sMoZ4=r9>Fk1>*T39++)>^K#+-#X; zwc3i?TEJS;I?UR^#?7YLhSxUEHqUl~?OEGvwjXSn?AYxD?d0uD?Skw&>?YbRw!3Ke z#_q43g#7~hb@oT??|?>h85kBo@^Y^M=uCoN2LBBN3{4CZ46_ZZ3{8xjjaC`$G7>YM zX8gj~&cwqc!lc2Z-=x^I*)+*)lG!e^Q)aKsewjI&`mi0%P_0CR%@-UTX9*7TkBf;TE|*yGM4<>|WWuv-@QC&F+`oKRYISHhV66KKmxfKJ^Xk;Q3|H zSbelXm%%Ip1w&OsQ^O|1Uc)(tB1XzaVMbX-3yhW+tuR_+^wH?Ik(+U_ajtQ>ahLHX zV=WUm_`VY!Q!&#B(^S)X@ZJ+$GiS3!X3NZ0nXNN>YnExg-Taifi^WX~VM{m5TFc#* zPb_~}vRY|a*;<8L&9b^?_0vk%I@)HZt+8E*9m4^3@SYtVgX0E24ZIDT4A&XnF>Es4 zVSL>9lQE~sI+Ob*2Bxv5U8Y-2ubB&2h*~IH=vwTtd}#UIlGjSv%E~Ips?e&lR8fF_-7)~;rW4Oui3OGe`7)cow7&RG91=qNO#`4DT#y!T&CYB~1 zCLX5yO+ov^BF*B=O3b>=*MRHSOXhFQ8!UP))>vG(_+cSoX=LeO8DN=iS!mg2xz=)@ z<#EefmI_v`R&iD(R+FseSgp0XWcAfb$=cOA&^jJGn%Qr?%zB^o8SA^&zpPnoglr^j zlx*y5{A`MBnr)WbY_oY{!(ppvYh&wYn`T=EE;Y{EKDYg6D`Y2Q=LBAfRAtv=H{WiZ z-EO;Mb`R~o+6map*c;lr*yq`Ifp@-cx4#6MP5!_R-gComAYq_o;As$SkYiA4Fx6m# z!7lLL()R|;hQfxjhDL_ghT(?ghOLIP4L2K}HhgUO+fdlZ5PVKhuu-Z}mQk_MW~0MK zJjQaymc~BDmBy2dj~M?lW;PKs$uVg*nPu|S^tCC6S-e@h*&MS)W{1qQ%=OLd%$J&< zG5>5{WUKG(j?zR!N1{dW7~pt^v813cy_Y@lq=X)wcJx4~Tl z2g3lvM}{8_J&b~kN{s4_`i)i??J)Xm#AIw>>|q>doMfD4oMoJ6Tx48kTxDEm++^Hl z+-2NnJjr;P@hs!J#{Z1@Or%Y0Ou|g^Oir6{ntGUanI1P~HH$Z!X12oYp4m$CaElm= zZx(WvD=pVs{DZe!v8aMHZo!J1l*yimfuNtF0TYr&!Ol z_OL0inPGFl=A8|XZL94&+af#A2_o&Faa9ElaDBmGpa33Moo1kE7-;ywNW-|#c%kts z<1NN7jNcmnHC|=1*Tl;7u<1$Dr=~wl|Cu(JwVFLL<1#lgk22qA{?7cbxw%DvMYe^F zRhrcrtBqENtR7fBvtqJVv{tt+v7TuC#Co31Vw(dtqPD8G{OP!|CoB2xtXsv-)DZ^DR*F{ERsmK?R_RuSRx_g*QTowvJT_Zqam%7FvC=k2>eyWup$!-kg(KNx;BWHZt-3N=bK+H53g>~EZA zywG@yv7X6alVzqGOy8P*GgUDQHrs6W#Eio{&HR!1S92AM2#e*GQ>|uOO|+hF{nGlq zHII$DjjfHV?K#^Awx4Z9?ey$i?CR{8>^bZU?aM&vG=KwKH|iK4HwK;8cg*s%Wv5lY z)gJ3Z)(i<8;Bnbo1}uhLhW3W8hWUnj4G$TX8_zIaXuR5(+a$yUv_d`8wAi%Ibe`z} z@CtNyvjDSXvpr^)&0d++n6EP5X@1@Oj`>@2J_}n5UyCIc5|-hX?Uu7F`K%nQlC92K z*;)r!XISsF*>A&8zyUs^$JWrk&sj6;l5jaPuzROFe| znJhB7Z}P%~$yCHt(p1^h(A3>D&a}jI6?iqgyji;0H?tP=DdwllZ-RG6^IGUx1X{#c zWLvDZ*li(f*=Bjj@{*;Z)hzHVyoR->b+7eY>m$|~HbpiwY&O~)wE1PT()NL^uAQr0 zoL!sUWxMBgukGI3eYX2<_uKBj9kV^VJ-5A&{Sx~v_IvG*fpS&@2Y9@N%Rtyb)*#oQ z&7j|4hQTGn*M{E>8I5d>CK(x<=$Lw#&NY=b*ER1opKHF`{DApI^N;2t;B~U$7Cjbo zES6bZwRmU2WhrTCVd-v}Z@JiVv*ljP*Op>dnO5Ca%dNIsU9fs!#bFJaa}BqyvtDJL zX_ISHXj5wQ-S)3-tX-1bKD)zq3==rOSZa4gF7;iMeXqC}*qc29W#!1GK zCcY-yO}1OH+Hl*P0M&5|IKXY!27^|El?G1@7!0Ki%?v%kE5r{NavBL3c^E|)#TsQA zRTwoI?J(M7bin9{(Fvn7MsnuL=DrrO7S$FF785O=TCiHmSz1|oTIN|Ev%G5g*HY6e z$a=bUq+Ow1yIrr{QoHSTd+aXTy|m-8pJsm;a{j>v4shSi#$bbiqM@~6kYT)Gj$w!4 zCc|fjZw>v7x{R(E-7vai^uXwe(F>y-VO~Xx3m|ifwYWmpph3Pxf zKc*aJGG?}Bf#4q6GSJ+T**UWxX3FMT=H2F#%rBW=Grt90KUrW=XK};A&$7jGujOM) z8><|v$>8(O_E;UW`emhJt!tfUU1!~8J=1!T^(XKNDRMR%HYqllHsv<8Hr+N8ZRXo7 zvDsv^13Y?k%jUk#TksePyRE3Ll&zDkkL?dzFS}s77`t}6Gj=!a-r6x7fRsfd29gG9 z237`p3=SHcGk9b$&+vueN5kLX{;8Q!iBYXlyOE`_mvM#hGGh&sRVI>FYF0K@B~}$y zHC7E)Emj>?JysK}rdZ9enq#%VYKheft2I^|thQL~u-apF!0L$AO)EL;Mr%$RY49%S zDK=Ma9@)IN`D4Rwt6^(wn`hf)JJWWN?IznjwvTOj>>}-x?c401+JCVBV*dlO-sJ)Z z1L%A<1_KrY4g($o0Rs^O2?H4e1p^fW4Feqm0|OHS3j-Si2k;Iy3Bv`3TMVm>>W!L> z+Ksx6`i&+VO*fitwAyH^(RrgMM&FEn8?hRv8oQdrn$(!|nJh3lZF0ec#mvOaz{1ob z-=fH>*J_j1Eh~E)SDP4{9Gfniew+C=w`^Y9{I=1uO|h-E1@$U9?Ii4M?27CK@320Ql+hn52Qr#{{0bTd8igB8GhS}I+IYS3W@FeHjK_`J zOi!BDm|Zh_WcJbQw^_Y;xA`pd#peIbcU#=Icxl0BDPd`A>28^0S!Oxga;fE6OINGC zR+iSwtk+xbwDz;fv#qe5Xgkezf$c}zZ?^w!Iqi1YG23(6=h>Io@37xz&mh1F-ZyDr zU}`YKV4gvwVVPl#;bgxGSQ%M8w|Zm6XnouI75H=-O&d!a z51SyHPc}BTPPVzWwYF1jH`prLS=&vrduaFDPR3r*-q1eD{xPWTRNw@U#i$yX7#uXX zY#?K(V;FCkXE?|3g5e88Mk5g;2_qRJ1*1Tt-$sna+l>z!pEW*ga>eAHiK3~Isf}rb zd7Sw^a}f(Yi5#EazFSu-t8V!Sa^nTT6B;K`Rw27b`!j1gj#e z8t@5*d#%n}-L(2?#cVBRtzm6w9cGuc5ztiM?^+Nj%_*xK6` z+cwyC+dj4ZWc$~)&aT^T8mPr#zzHtzw;Jp;*lTdm;Hbe#gR=$~4Xzrf8|oO&H{4@* z$nc(_l#znbE+Z3TE90Za*Nu5h1WneNm|D!Xm~XMzV!6d?i^CQtEZnVptU#x>f@b9p zSRb|au?ezaw&k=vX*=6)hut;1&vt_LdiFl{nfC4W^FS>_1_lRCaJz!RfXhI};IY96 z16IROLop*~BTu7Tqkf}3Mu&`E8YvpHm>Qazn?{4jbvBq@GhJdHYEfv>ZZX^9h{Y|7 zcNWT)HkKZi5#Uu{TPzP)Ua-7p$!v4M=DMw>-A+3_du#hP`_uN%>=^<$!F!<74Q3da z8wMCA8JZgh7$+HjHs&+YG;udsW3u1mlF3t(T(c8qSIwT8v6zdQo0!|1`bXrWZ zIAw9g;+e$<3pPt}%UH`?%YMsKmiH{Btdy)T+&9u8oAPn{B9V zv2BHIr|nwXo3>AEKifLmZMOSr$6~K*f6e{@XpdV0C%A14TFV}6P-?Kl;IzRLgD(b> zhSr9&43`*gGdy5;$?&$}M?(f9WupY63Zp)wN$@?cca7c{F&I}FpEUk%++niaMA$6U ztjBDY**dd3X8h27;~y>fExj$%EP1RXt+cGnt?aC?TT9r)*c`S=vTw3)w_jwx5j>W{ z30~JIZK!A%XV_%8*l>s8X~Rc`Uk#m%0*z9Pt{Htc;xYbYB5i7I`peYCEYK|0EX$11 zT-$u9IcTQkpShBSzeR*awneRFrzMM(y_J_$h*g2rORH~I=GKnZ!Pc?X`PLQIldb1j zudp_-xogv8+i!c__KEF3TTVM+J7c>9yIi}ec1P^Q?3L}U?cMAH?2AFWH5xd<>%>_N z6b-ZuYz^WJvJILI`V3|m>@v7xkZIUp*lRf3aE0Mc!^4Kx48I$)7|9r^8yOg77)>-< zVYJiesnI7R4r5JYGh;vFNaG~q4&$}PA|{|SBFs!2z%xmCCgmobCX-FJm>h)eA#ybh zGfgvHZo1u+%goKJ*=((ujk$;U67%)uyUY)pzc>E^K6OOS!py?QBETZVBEllZqTHgy za*E|F%dM6tEI(L%v&ynwZ@t$##b&F`SsQy>SKH}!TkMY8MceNNoj^H(6WkB^V&H8U zU?^jxWOU8wj!}Yfnejy9E5?tF8BN$s#7zQCdQG;O>^C`S^4#Q&$!`-I({R%&)5)fb zP2b+*ucc!q{C#c36GhPnZ236S&rEPv%O}{=1a`^Ez&HyEoOsVDQ~&la=YabOBbtL zs})wSZ2s8D+j`i>*|yrwuw89?%J#hNH(NeCHM<_WiFPOKp4)u`p8*kLpKae}f64w8 z$c-B~89;l%c?<*%j11xo&KO)Y&@-H4xX|#OA!ui!gV95yKSqqk9>#l&4;mYp^qMf3 z8kxqJg66Vsn?;(-Sj@3lXwh$}V8vr2Xk%oPXcJ?bXxn7F#&)aiep@TMNV_h(n|7S` zI`--I3|H9KW?-;BYW z*IeD)$lS&}*?fZeT=V_rpmUw}Tb#DIV)54UrzN))=)8qQs|i+*tlnD*TFY3gT7y=e z#akCzH-b-?-fn%~`i}KKYfc*>o5ePgwsUNc+1|4)1)oN7$o{PTb$f;jkovsLpxI!i z!8U`#27e8>49yH34ZRFKjJ6t`GXkwelrlCl_Ao9mo@hMJ_<-?g<15BiCebDtCSBlD zK{U-m&90cSnhSyVV0N3&Fu!a*-6Gmj-s*7M32Cp_ciU^_D%Bt1J&%UbMVtnPXLB)oHaHd@{yutDjZ^)(Y0T z))C?#^1h;eh43-!iHn<61 zL$73LWN2rYWmsj{Zn)HNkKq}^n}#e#B1Vcv4n|={X-36HD~@oVGn#$qPACblM?CUquLOq|U;&2E~#HSf2WZ*kG$fkmEGu~ofQ zr`0~Ii&o#PIIUH!^}uK29k9M^{o9()#>~dkCeNnPW|_@Sn|n4NZH#U0Y~5|UZCBYI zuzh5E(Vl^U3*5)#FnDC3ZWwCVU^v}S#^|t-m~n>j6=M;TS`#VL3#NBX|Clws|y~d*R!*;yJF8Ezy&VTN(__@T@7mt z=NVo#6f+7pnrd{}NX%H**u}WixW{;w@p|LS#`lb$8+)3BnUtG!nJhKgV6w~Pp-F}5 za?>rQ=S**!J~rhw6F0Ln^EOKb&&qB#J79Lj?7rDcGd1umRgig%d9!)1`7-lO=DW?; zSj1XZSvp!(T6I~?wqmfBwhp&0vYuo8&N|&@o6QTGTHAix`?gGWFYHd(p9RIU0vCe^ z0|P^+A&*gu@d@KVlW>zsCNoTOOp8n-%;Lo%WlCfLrijkHU*V{qUC*SQ7;&Ia!cK<5FJ8on`PHu5nF zGRiY5F`8*K&*-etWupq?X5)RvM~puk|1=IWNi@kZX)@_F={H$y0-EnW3GV&Im?oKS zFx_f;()7HkuUW8Jwpo!`h1nUiOJ;w}7|o;2GtBeMcbgwHe`Nl`T+>3|qRFDyLc&tc zGTbuO@_?nj)duT6+bwqc?Y`Mvw`T}|xa+dPF9UzWY{Oc^<%W9=RgI#Is*QS$tc|^m zGmR%0Pcyz|eA}4Ggxy5iM9DlQC9j#*x}%(rT^I&F2!>WS5Bt1niG)|uA%)|J)`)?L;+tp8a* zwS8-=ZD$Hz)y2TTkif+N8lJEPk39$(%NQ#g>l-VX_?YIHR+vUxG+Ojpa9IjiMp*~h zB-k|B@Y+e++1fSQ9kRP;&rrYx9@_$qC3_f7HJWW?WjxKA-Np+vKGFb@GcvF;=(V0~ zZDwO*v(j8AgkZ)*00k9P={sPIFLC>$iohrK+W~rMG3XWiPmVJY{*;vcjs)3Vc7u1}^Y; zZ@a-ngV_d44cH7#4VM~zHe@n+VP;@%ZgJF-(<u=!u(@D! z*XF+sm#v6xmMv)Cc&F_q+b6cxb{=+FcBOXpc3k!{puBMal72W1#0>NdEDf9tG7K6F zjv3rCcxLdyz|t_!ki&@ANXSUeXp+%dBPC;J<6z@!#-EINO{7eW!RK`em*Tmzh_Y*O{L;|8EYOPtUa|viN2pV!7Ayu;o3=Czh|RoUGlf zy{!GLMQqJ&18wc>X4;*xe+8Oly8sDmSpzMDFoR?RU&DUz&fndJ)<&g92aTQ^sTms> z#~7b9jxk9yaWLI%ddBp=>3dVq>1Xj~rDiM5c7yx2JIrsHGl5qmHdtJ>xNouC>W)>Q zZJjNHy_&rNc!lXb&?z7c3=g=#>n1b}oDGf{Trdzd)HghDc+2pyp{r4lQ2}^o+2A~WrngKVo2r@_nYoz-nnjx(GrMe-WnN;Y-iamwfku2Z0~0uZhy=EIpiFQ4_x4WAg_U#fuezy!6idcqZFe;qkf}V zMvIN^fX|lxX8hkc+N8^5xycigk0!#Va;6%l<)#Zw*MUdg9+7b}^)Blp)*`mHw)<>P+rG5@V*Ahbn;o;gwms+^(Oml}_MjbX+zc%Y3=DG& zHXB?txM#p-C}=2cSYY(m$i_IrZHsMyU4osOy{$d?tRDexaCyvRu-0&&;UU9ghNleA8M2y$ns%77fm>+KX8mS! z%=Vd`G`no3X>J5QU#Y+x(MHpx3>=)RtwBKz1(*B+OSI{V& z0yp?ABE)g7xBR$r}7TR*V=V$EqI z2RNFfcF}8Q2>H8N?eD z8-PwCUSP1%V2{CBgPR7gz;|B=8P*zg7|k?VYP7@Xu+bHx2Sy)_{uuEZOB!1nyBkLs zrxd<47$zdyzv9$H^!BwZKiWfSDGF$J!|^d^n)pj8NZpbnZB8`nV(sbS)Q4Q zxuSWNdAWJ7`5E)u=C93vnVVSHTLfFgTNGH-Tl8DZvrx7)uynI5u&lA{vz%qQ+H$+) zNz1F2&n!P#vRDaNSy(w+6b7~y1=^DdYbio>rK{Yt#4XC zxBhOOZ8ObgkEzw4))XS83MS$`?V?zo*GOtJZo5HwAHB1cmjCmAZTBx znu&o)m`S`znn}J%g-MgiER!WBdrXd*+%tJ$^23DD)Xdb?G{iL7G|TjZ=`T}RGj%g3 zGjFp{vuS2?&A7}3&3i1SS?scSVDZgjvgI7hWtRIaPgp*%d}aB|lG#eqO4drzO4Ul! zO4rKJYAg8Up2t=K)+*K(*3s7a*3H(-thZaAu)b)`Vr@-zxI$}j?*iZ~Hms@yQTZ)9ogU<{et zoNv6?c)9U3lldkqOg5T4H~C<~W~yTvU@B|oWfp7}ZPw}EGtUYmb2=eAI`Ftpfex!+RH%H1l?D$lCis=?}%)jcZ)YkTVy>s;${ z>vrpf)*G!4Tc5RlWvyt_ZZpy5t<4YH`F0xiI`#(kCiWKgHugdGTR~~IfEzqs3!1%I zWN-xB=Zi5+GW=+$V`OC1YBb4cw$T=&eMTpYZW%o_dSwI};bu4HF_tj4G`2HtH|{as zZoJ3%jqz&}cGFI?KC{JUE6rY*Nt?HruQuOee%kz>IjF=sXK~p=+|u4M$FkRQlI3j6 z)s`D9cY$|x30cX5dwX71k=AkGvzb3x+kjUbPq$fMqiJhzn_$~+yWjSt?QPrXc1!Kn z*=@I*26A@;Brhu)S{gbTdK+Fgylcp1Bw}>f=&aE%BNpRz#s`f-`)~dko0;UAOf{Kj za?Ip{Nw?_)(_f}LEbdr5v`DqIw_0g+#OkFLqqV5Dl(m+%g|&xuqV+TD@74?q3=_D) zXW^6?)EL~gcy1wQscvatX<=n&)db#GaLeYgjhd~At)=Zm+gG;Yb~bj8!24MfxSVXL9{`tLB2tyL9;=x!E}Qq2HOpu8L%4i8|oVd8m1cN8TJ{@ zFHqhjprM$Gk#{w zYocLdXku@YYEo)aW72Fg(`32H29vWUmrZV%JTm!c^52BRR2qCEf{m%aX{2eoX})Qb z=`_>*rgu%>fKRb8FtarCG7B(^G%GV}G;1@PV7A(9gV|QI{bpCqZkxR}6E)W`*E2UU zw=#DycQf}f4>AXh=BAiunHQLsnS=ItcbKm=-)Vl{{H6I1a~2B$3rP!k3snmviw_px zEdE$9S#ntNS&CRHS!!7tTUuLsSO!?eSteWNT2@-tS$0}ZwOnYq&T@<8Zp$NuCQwviEQxDSs(+JZ9(+txB(+blD(+<-K zrZY?zn65D0V7kNf0C-OChUo*-7p5Off0#0uahM61Nth{^X_y(9S(rJPd6)&5MVKX+ zWtbJ1RhTuHb(l>sn*m3hTcf%yyb59UA287w#~ z1S}*h6f86>3@j`x94tI60xTjd5-c(-3M?ut8Z0_2CRog{SYWZjVuQsFivt!XEG}5w zuy|nc!s3I)4+{oM4od+`2}=b_4N!iubO6V8gk^$dhGl_eg=K?fhvfvz8I}tyS6FVa z++lgZ@`U9D%Nv#tEMHiDu>4`kV8vl2U?pLtV5I>*UE9IR!z#ck!YaWk!>Yil!m7cl z!)k)n466lJE37tH?XWsvb;9a`)eWl$RxhkRSpBeKu;#E9u$Hh^u-33Pu(q&vu=cPH zu#T`!u+Fe9u&%IfuXB`hoQe@as$6+U6Ct;^xr(tJcXJO}H=V2FM7h#uRmtj|6S7Fy+ z*I_roZid|gyA^gD>~`24usdOQ!S06L1G^V?AMAeEG1zn13)oB8E7)t;8`xXeJJ@^J z2iQm0C)j7$7uZ+WH`sUBPq3e1zrcQl{RaCT_6O`w*k7=}VgJDXh5ZLmjhDc~pur5v z9~=e(2B6%bVPIfjVc=lkVGv*tVUS>uVNhUDVbEaEVKBj9hQR`Z6$Tp&b{HHmIAL(X z;D*5igBJ!L41O3e7;+d27)lr_7-|?A7+M%Q7MhZq6Mg~R}Mh-?EMgc|L{Mh!+CMiY!?7%ebbVYI<$htUC}6Gj(|ZWui+mW4~$5`~7{?eV7^fH?F+O2@#`uEq z72_MmcZ_q8&NF{t^2FqY$s3aoCSOc`nADgyn6{X9nD&@WFq>jF!)%V(0y7`W5X%_L z6w4gT5=#aKh6Wz+m`8&_i$RKEhM|F(iJ66&jhTa)iW$S0t1nhRto~RrShHAjSo2s5Sc`y9%u=vcvDN^enPp;aVQm9GHOs@=$2!0| z#5%${#yY_|#X7?}#~S%w(+=w%>j~CVtY=uyv0h-k#CnDG8tV<#Tda3j@3B5$eZ=~N z^%?66)>lC7g#$bc9-wkXy%0~vH?E?Xm(e}Y;KVc;F6F~FX zJPdyr7#KkJORq54VsOCV4EQ$R4+eh>I1EJ$6%2I@Eeu@@0}NvfGYm@%8w`64XBaLq z1fBnV!tjdW1H(6lKMYxnGK@=%8;pC5XBaOr-eA1P_=NEl@EGS0V-^zu6B!c?6BF>c z?GYv^CIu!nCLJbIOct1|G1*~q#AJ@?64N!NTTEHZc+5o1WX$%M9Rbf0-7$M&_Qvds z8K}?OV%}pu#r%%>6Z1FbU(ElQvw-`t5>_%+3RWssAFRKi+)FKBBVr?ABV(grqhh0B zqhn)WV`5`rV`Jlha>5tG2Ob6mMh1oq!yLl`Lje;J6A2R;6B`o;6Bp=BG{`s39I-rM zdB*aB1Az16D zz#4Ry`wVz12hy^+0rwHi7Zz~0=Ri*+1D!%P2Y!z;WDnd28y;H$TM=6cTN7IgTN_&k z+Zfvf+Z5Xj+X~wj+YZ|v+X=R7Y&Y0$vE2bbRStHNoQj=>osOM>osV6BU5H(T9RmX| z_#V#~lLV6#lMIsz_>DZEn1kHI1G{_YgUKHg2~!nQ2U8!@0MiiD2-6bN3R6%UcaG@- z(!SsRY8`BS_Urc|PikL~5$(Sja8Nl1L5#W|=1HA3J#cYS!9#$wK4&SNfMu3)ZXZeVU=Zebo`9$_A1o&Y^@Z;AN|^EKuh%+Hu#Fu!7c z13WhL$DF}J#zMhD#X`fv#lizTPLyL&U{PXGVKK#GhQ%C<1>jS!k64_rxM2Y~xtPaN zz!KDAHnFs@w6S!sjIm6xOtH+cY_aUH?6I6+xyEvXch8TkcgA{`d zg9?KdgARipg9!!;4AvNIFxXHn!Oa)9uz$b3mm^zpSn8uhUn5IB_ zG^P_w*O+cF-D0}K^or>X(>taQO#hfNn6a2~n5md)nCX}qzy zuy?Wduurkiu+OnCuy3&Mv7cZ+#eRnU7W*Ccd+ZO`-?4uHy6s(om!SuICjw*@Ic(*4 zh(Uw_D9&pPK)tgLgCzzl!0~;?-~u?lVfWC<7%CX57;1paP!B^Na7hD-^$x=+hBFN3 z816AV0FL!1hA#}?7=AG1F%kf;xdrvZKrtR;lmL$N7NZVuoUbw30FLt?Mt_VLj9H9# z81Di1Ganc~fyN|@35N-f38)PNi&Gtw0@D(3UhFXKF`WV)r396@8%#lWlct!rm@hFu zV*UhtLoADhjD?DYfrX1jj75q?i^UR)BNk6AK3M#*V6haiRIzli3;_2~3oKhKCs@w0 zTw-~|@`B|P%RiPZRw`CDRxVaCRw-5mRyE*pJj8l_M1K)f8s*p)*qYdd*p=8#v0Grb z#qNsT7dsJq6Z;VR1p5;E9{VZwYwST|S5NF;*uMd<>i+{8dpF=^aA5?EVL{gPgTfD# zYyKF@7-<;U7{wUX7)>#nW3&Z4TJ*-~gV7fwP&mPIgb27-eg`}j^u`#J@)=B6;9&(y z{Vk?*OqZA*F@0kC!Ss(QigV_-?Q0>HGu3~Or zZe#9Z9$=ngUSM8h-U6P%USht%{D?WIwt|JH4S1XtROZxJG+4A)^jJ)Qmp*GOHdugq z!8zcO%o^(!@L1*)aNpO(HpVu^w#9ad?Gf82wjXT&*s|Ek*s0hV*tyun*rnLD*e$U; zV)w-EgWVrH7JC7E6?+4F7yAJF82c3a7W)bIbL^McAF;n+f5-lb{RdDOI`D$`Xt5Z` z7^oPy7{nN)7!(-PfJgg4Wz`;o0|rM7V5t~XYP~V|U;vuU{9?plEMlx+Y+~$S9AcaR zuJ5N9FEHL>d;nb6e=%k-5iwB!*YhDJ2__{b4d6O{i^&1dVQT@r;CXUT`3qWknqZM) zVPhF%S!3B@ImdF3kj{J+G0gZ&Y(@Bi2{B=9oSfb+6|feLuMv&5jn0Fr}2 zCH54983uEp`M1HS1)SeNr`NMsa#+e(Dp;ymYQSrQ8p{T7Z7|1jf#nj*6_$G}4_Ja) z2zM+WSUv&!g~5u&3gjP9`vl}CNDCpxD#0qnDg(X?2DbYJvg-xpPsn%*Y#c?#8Zv$Y z8#f7okC=d34WN_)8zF&>jNGw)VEx4Uh4mk61{)R|4tOgF*7}LDft+hv0zJ!nj?Ds_ zB{nPI?FiU@`ad=dwk)~7fIv3p?m#O?*W)cs?}P{0cwX9Cq*kX#8Wy};vNrW3$r(i~IB$khq6GiDde zM9h861Hg6p1&b>dH!SX0Jh1Sw46qEbgzOz+KppqDonyPec8To@c-v-=?E%{(wkK@Q zfJeKCIXzdw4%YrLv9qwVv2(C$&F`EHGGNu)*+v;TCY&3u){0!2Phm z6cm8rJ6x$hKm&05OI^UPU4tAn1 z%pEay33e%V8FnppkQji4IxM9B*g;0~B-p4+`KEyu4zQn%5zQ(@6evbVD z`z7`(?2p(#fR?A=dqF1fg6A?}JEIK1`=MM6JislP9D@Rb25?ITlrKPigB=E-(%}NQ zE%U?xbi*o-p#ZptU|?thZqLLRCV<;BEruQ7Ucw5)HHK#lUw~UOe+(JGJ4rwzjj)lu z4e;^28`e*(8EklLG~g|DSURn+X|aKvx(f=`EjBxBAi4a34J?Ji&X53wZHR4zZH6r< zbZcxIz+nqY6`+*x0Df{Zh0N-0oF z0?~4SgcBqr984CN!+IK9%y*dYfuD%QVJw^MnOFr_!OD6_i8TSf!x1)a4lCnf zVDA88?Y0)L48}y@;U~z_wNEPc<&vo4GnS?D1MRWXC4^a zn0SCsO`2n}!eo!h9TQNW)5X%m5>nelSms#5;sG)Tfmus{`pU2}ItSdEePH*+j=^5U zUcuhP-T{1G=M89o0@j`dm%k5q!E1X#b1MpFDrTV5+(G?s6Oh|K@G=B2GBCIpdl>r| z2N)+9=NK0lml#(VcNk9rkFeY@eqs#Cr=Zq8XzT)(I${0w7LyL}7z=7o9h6&HOgT(p zXC_n9Ux&>*!RDG)n1MoX4@Q3-y|)hPb1$*jVR6Lb0r;LE4sdT<2Hd)Gv5WxswR0>R zEF<7~D95S*$L`@HR*=~!&>R$G-buz9RM)M6_Z`4t&A`Xt!^pq@>%W0^{@NI(81@)$ zF}!2QVkBUsV-#W(VFXGm1x7VSON`DK-7xxMBxCFX4gCt^Gsd8Ct0g8IOwO3xF!^F4 zW9nksVfqFFk3PUgX*;uXrCBT_BPmq zYB)&mc!B*HP#;2o4}A9Q1MpsUP+bD4N04VhVQn^0&ym3r)Pj}(x1V(^4d6K|!?Fb2 zhui^fIfKU5U?XdwG88njhdi#9VFgM9pwYDnc*fUYWdv+=4Hn*zIYeAzYp`?wQAgHL z!~2EJ8=DV!N?i0%huzr#YQ-@yFevabG=TCmbY>M+7JdR&4#qLY72uJZ9^(n%Sy)iJ6Ee5_06cO7>hFX4uArJ4G;$MS5@7)#E8XM#n{C-#kjz@#<<0J4tTu%i18ic zC&nx$Dkd(_@%0uHP&u{7h8-xKgL+Ldb`^Fl;L~FveM9tK3UVJM z0~$Ms9?A}T*csQ5aUXEm9l!_fw{yVHZ~&Fwp!PIq#1+(@hV|ZIBN(tg$_sce1r(N` z)--6;71WjnjkZCI8dm^~GK2C{iDiW)C_hcHoM8zXR{)JLgT@s= z`3W?x0Ge|EPv1GGI9jR#rkr zM18;`p^%X`1_p)%K86xT1_nroLq@bgy*kj^E>OP%R4Rbn4jLiH=6;ad@wpr3W>{%} z-Ng*>wIt|nhP9PpJxbUbkt^0WtU)6ouz4X^n;A9_1iRq{cC!nth6VL6_t+eO_c6cN zfL6^gfM--dBO$PMHmIKonpuJMG+{k?(7Xz$H-82`Rt>qU2iE6=3h=p=klCjjmM@@XD~lCF10Q$~G3Y*I&{|eVyALv_25OM7Fq06>|Bt>6Itw4>|MZPh)eAEfa?4S zeBeD69VVcaxuCZ48j~$1J4`_H0wSgg;8nRH;QM?VOsAMGFx_Ih#qx(Oi=BX-j2)9!U%+}8h!t$GQmn!lHfscGdrUE& zVT`;Q4Ac(U16>man@s|Zt;2dHpz(Fk%o3=50_&kb=9oY&6pE)??wI!z7=L`%r-#VBL~cm zm_f!#ubAC{_qN`ceK7lC_QULt8G|`&rc}gS!d%8&!Cb{$13qVpXvGA;=TB42(Qhy7 zFz+#+U_QlshWQ+GT;m%LuVeZZ@}b8Jh%Yrd!0&H=CZ-eY?Nyx#kX?HllFZyq}l z@LF%sC>LlH88lZ@U{_+-V%K8_ZqsbwV*p(-0h!5yoJv6;3L&Li26(g(GO{(n SV2T05C>RZa(GVCSApigtrR7%u literal 0 HcmV?d00001 diff --git a/thirdparty/python25/DLLs/unicodedata.pyd b/thirdparty/python25/DLLs/unicodedata.pyd new file mode 100644 index 0000000000000000000000000000000000000000..35173d6febe627c4bcad83c90e6141f624b1fd2f GIT binary patch literal 475136 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

    ugZAm;uT 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

    &0Y!zT|V46LZS}Pz-RwOyGPGhA@GT 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 literal 0 HcmV?d00001 diff --git a/thirdparty/python25/DLLs/_hashlib.pyd b/thirdparty/python25/DLLs/_hashlib.pyd new file mode 100644 index 0000000000000000000000000000000000000000..3d9506400b75ceb635abb206c4b2d46bc1f1e622 GIT binary patch literal 323584 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 `h+{(6$DX<1U~R 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ŸztbAY!07qvRZhg5qKZ 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

  2. y`)RQiHWN_TAt4S)}P2YdRt`+!C({f>J2 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

    Dy3o5_sfZzeOkznRSF4^sa7&Ey~bZ?5|65Owz1 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%0DhJLeM)cFrf9?3_=y*g2nYvvWS-Vds3p%g*_P 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 b7!85Z5Eu=C(GVC7fzc2c4S~@RARGb!Ka0Ap literal 0 HcmV?d00001 diff --git a/thirdparty/python25/DLLs/winsound.pyd b/thirdparty/python25/DLLs/winsound.pyd new file mode 100644 index 0000000000000000000000000000000000000000..ba3858fe84d486431c7baf6db28c4c0eb689f43b GIT binary patch literal 6656 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 1: + raise TypeError, "pop expected at most 2 arguments, got "\ + + repr(1 + len(args)) + try: + value = self[key] + except KeyError: + if args: + return args[0] + raise + del self[key] + return value + def popitem(self): + try: + k, v = self.iteritems().next() + except StopIteration: + raise KeyError, 'container is empty' + del self[k] + return (k, v) + def update(self, other=None, **kwargs): + # Make progressively weaker assumptions about "other" + if other is None: + pass + elif hasattr(other, 'iteritems'): # iteritems saves memory and lookups + for k, v in other.iteritems(): + self[k] = v + elif hasattr(other, 'keys'): + for k in other.keys(): + self[k] = other[k] + else: + for k, v in other: + self[k] = v + if kwargs: + self.update(kwargs) + def get(self, key, default=None): + try: + return self[key] + except KeyError: + return default + def __repr__(self): + return repr(dict(self.iteritems())) + def __cmp__(self, other): + if other is None: + return 1 + if isinstance(other, DictMixin): + other = dict(other.iteritems()) + return cmp(dict(self.iteritems()), other) + def __len__(self): + return len(self.keys()) diff --git a/thirdparty/python25/Lib/__future__.py b/thirdparty/python25/Lib/__future__.py new file mode 100644 index 000000000..09b404d56 --- /dev/null +++ b/thirdparty/python25/Lib/__future__.py @@ -0,0 +1,116 @@ +"""Record of phased-in incompatible language changes. + +Each line is of the form: + + FeatureName = "_Feature(" OptionalRelease "," MandatoryRelease "," + CompilerFlag ")" + +where, normally, OptionalRelease < MandatoryRelease, and both are 5-tuples +of the same form as sys.version_info: + + (PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int + PY_MINOR_VERSION, # the 1; an int + PY_MICRO_VERSION, # the 0; an int + PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string + PY_RELEASE_SERIAL # the 3; an int + ) + +OptionalRelease records the first release in which + + from __future__ import FeatureName + +was accepted. + +In the case of MandatoryReleases that have not yet occurred, +MandatoryRelease predicts the release in which the feature will become part +of the language. + +Else MandatoryRelease records when the feature became part of the language; +in releases at or after that, modules no longer need + + from __future__ import FeatureName + +to use the feature in question, but may continue to use such imports. + +MandatoryRelease may also be None, meaning that a planned feature got +dropped. + +Instances of class _Feature have two corresponding methods, +.getOptionalRelease() and .getMandatoryRelease(). + +CompilerFlag is the (bitfield) flag that should be passed in the fourth +argument to the builtin function compile() to enable the feature in +dynamically compiled code. This flag is stored in the .compiler_flag +attribute on _Future instances. These values must match the appropriate +#defines of CO_xxx flags in Include/compile.h. + +No feature line is ever to be deleted from this file. +""" + +all_feature_names = [ + "nested_scopes", + "generators", + "division", + "absolute_import", + "with_statement", +] + +__all__ = ["all_feature_names"] + all_feature_names + +# The CO_xxx symbols are defined here under the same names used by +# compile.h, so that an editor search will find them here. However, +# they're not exported in __all__, because they don't really belong to +# this module. +CO_NESTED = 0x0010 # nested_scopes +CO_GENERATOR_ALLOWED = 0 # generators (obsolete, was 0x1000) +CO_FUTURE_DIVISION = 0x2000 # division +CO_FUTURE_ABSOLUTE_IMPORT = 0x4000 # perform absolute imports by default +CO_FUTURE_WITH_STATEMENT = 0x8000 # with statement + +class _Feature: + def __init__(self, optionalRelease, mandatoryRelease, compiler_flag): + self.optional = optionalRelease + self.mandatory = mandatoryRelease + self.compiler_flag = compiler_flag + + def getOptionalRelease(self): + """Return first release in which this feature was recognized. + + This is a 5-tuple, of the same form as sys.version_info. + """ + + return self.optional + + def getMandatoryRelease(self): + """Return release in which this feature will become mandatory. + + This is a 5-tuple, of the same form as sys.version_info, or, if + the feature was dropped, is None. + """ + + return self.mandatory + + def __repr__(self): + return "_Feature" + repr((self.optional, + self.mandatory, + self.compiler_flag)) + +nested_scopes = _Feature((2, 1, 0, "beta", 1), + (2, 2, 0, "alpha", 0), + CO_NESTED) + +generators = _Feature((2, 2, 0, "alpha", 1), + (2, 3, 0, "final", 0), + CO_GENERATOR_ALLOWED) + +division = _Feature((2, 2, 0, "alpha", 2), + (3, 0, 0, "alpha", 0), + CO_FUTURE_DIVISION) + +absolute_import = _Feature((2, 5, 0, "alpha", 1), + (2, 7, 0, "alpha", 0), + CO_FUTURE_ABSOLUTE_IMPORT) + +with_statement = _Feature((2, 5, 0, "alpha", 1), + (2, 6, 0, "alpha", 0), + CO_FUTURE_WITH_STATEMENT) diff --git a/thirdparty/python25/Lib/atexit.py b/thirdparty/python25/Lib/atexit.py new file mode 100644 index 000000000..dfac47f3a --- /dev/null +++ b/thirdparty/python25/Lib/atexit.py @@ -0,0 +1,62 @@ +""" +atexit.py - allow programmer to define multiple exit functions to be executed +upon normal program termination. + +One public function, register, is defined. +""" + +__all__ = ["register"] + +import sys + +_exithandlers = [] +def _run_exitfuncs(): + """run any registered exit functions + + _exithandlers is traversed in reverse order so functions are executed + last in, first out. + """ + + exc_info = None + while _exithandlers: + func, targs, kargs = _exithandlers.pop() + try: + func(*targs, **kargs) + except SystemExit: + exc_info = sys.exc_info() + except: + import traceback + print >> sys.stderr, "Error in atexit._run_exitfuncs:" + traceback.print_exc() + exc_info = sys.exc_info() + + if exc_info is not None: + raise exc_info[0], exc_info[1], exc_info[2] + + +def register(func, *targs, **kargs): + """register a function to be executed upon normal program termination + + func - function to be called at exit + targs - optional arguments to pass to func + kargs - optional keyword arguments to pass to func + """ + _exithandlers.append((func, targs, kargs)) + +if hasattr(sys, "exitfunc"): + # Assume it's another registered exit function - append it to our list + register(sys.exitfunc) +sys.exitfunc = _run_exitfuncs + +if __name__ == "__main__": + def x1(): + print "running x1" + def x2(n): + print "running x2(%r)" % (n,) + def x3(n, kwd=None): + print "running x3(%r, kwd=%r)" % (n, kwd) + + register(x1) + register(x2, 12) + register(x3, 5, "bar") + register(x3, "no kwd args") diff --git a/thirdparty/python25/Lib/base64.py b/thirdparty/python25/Lib/base64.py new file mode 100644 index 000000000..d3d02469a --- /dev/null +++ b/thirdparty/python25/Lib/base64.py @@ -0,0 +1,359 @@ +#! /usr/bin/env python + +"""RFC 3548: Base16, Base32, Base64 Data Encodings""" + +# Modified 04-Oct-1995 by Jack Jansen to use binascii module +# Modified 30-Dec-2003 by Barry Warsaw to add full RFC 3548 support + +import re +import struct +import binascii + + +__all__ = [ + # Legacy interface exports traditional RFC 1521 Base64 encodings + 'encode', 'decode', 'encodestring', 'decodestring', + # Generalized interface for other encodings + 'b64encode', 'b64decode', 'b32encode', 'b32decode', + 'b16encode', 'b16decode', + # Standard Base64 encoding + 'standard_b64encode', 'standard_b64decode', + # Some common Base64 alternatives. As referenced by RFC 3458, see thread + # starting at: + # + # http://zgp.org/pipermail/p2p-hackers/2001-September/000316.html + 'urlsafe_b64encode', 'urlsafe_b64decode', + ] + +_translation = [chr(_x) for _x in range(256)] +EMPTYSTRING = '' + + +def _translate(s, altchars): + translation = _translation[:] + for k, v in altchars.items(): + translation[ord(k)] = v + return s.translate(''.join(translation)) + + + +# Base64 encoding/decoding uses binascii + +def b64encode(s, altchars=None): + """Encode a string using Base64. + + s is the string to encode. Optional altchars must be a string of at least + length 2 (additional characters are ignored) which specifies an + alternative alphabet for the '+' and '/' characters. This allows an + application to e.g. generate url or filesystem safe Base64 strings. + + The encoded string is returned. + """ + # Strip off the trailing newline + encoded = binascii.b2a_base64(s)[:-1] + if altchars is not None: + return _translate(encoded, {'+': altchars[0], '/': altchars[1]}) + return encoded + + +def b64decode(s, altchars=None): + """Decode a Base64 encoded string. + + s is the string to decode. Optional altchars must be a string of at least + length 2 (additional characters are ignored) which specifies the + alternative alphabet used instead of the '+' and '/' characters. + + The decoded string is returned. A TypeError is raised if s were + incorrectly padded or if there are non-alphabet characters present in the + string. + """ + if altchars is not None: + s = _translate(s, {altchars[0]: '+', altchars[1]: '/'}) + try: + return binascii.a2b_base64(s) + except binascii.Error, msg: + # Transform this exception for consistency + raise TypeError(msg) + + +def standard_b64encode(s): + """Encode a string using the standard Base64 alphabet. + + s is the string to encode. The encoded string is returned. + """ + return b64encode(s) + +def standard_b64decode(s): + """Decode a string encoded with the standard Base64 alphabet. + + s is the string to decode. The decoded string is returned. A TypeError + is raised if the string is incorrectly padded or if there are non-alphabet + characters present in the string. + """ + return b64decode(s) + +def urlsafe_b64encode(s): + """Encode a string using a url-safe Base64 alphabet. + + s is the string to encode. The encoded string is returned. The alphabet + uses '-' instead of '+' and '_' instead of '/'. + """ + return b64encode(s, '-_') + +def urlsafe_b64decode(s): + """Decode a string encoded with the standard Base64 alphabet. + + s is the string to decode. The decoded string is returned. A TypeError + is raised if the string is incorrectly padded or if there are non-alphabet + characters present in the string. + + The alphabet uses '-' instead of '+' and '_' instead of '/'. + """ + return b64decode(s, '-_') + + + +# Base32 encoding/decoding must be done in Python +_b32alphabet = { + 0: 'A', 9: 'J', 18: 'S', 27: '3', + 1: 'B', 10: 'K', 19: 'T', 28: '4', + 2: 'C', 11: 'L', 20: 'U', 29: '5', + 3: 'D', 12: 'M', 21: 'V', 30: '6', + 4: 'E', 13: 'N', 22: 'W', 31: '7', + 5: 'F', 14: 'O', 23: 'X', + 6: 'G', 15: 'P', 24: 'Y', + 7: 'H', 16: 'Q', 25: 'Z', + 8: 'I', 17: 'R', 26: '2', + } + +_b32tab = _b32alphabet.items() +_b32tab.sort() +_b32tab = [v for k, v in _b32tab] +_b32rev = dict([(v, long(k)) for k, v in _b32alphabet.items()]) + + +def b32encode(s): + """Encode a string using Base32. + + s is the string to encode. The encoded string is returned. + """ + parts = [] + quanta, leftover = divmod(len(s), 5) + # Pad the last quantum with zero bits if necessary + if leftover: + s += ('\0' * (5 - leftover)) + quanta += 1 + for i in range(quanta): + # c1 and c2 are 16 bits wide, c3 is 8 bits wide. The intent of this + # code is to process the 40 bits in units of 5 bits. So we take the 1 + # leftover bit of c1 and tack it onto c2. Then we take the 2 leftover + # bits of c2 and tack them onto c3. The shifts and masks are intended + # to give us values of exactly 5 bits in width. + c1, c2, c3 = struct.unpack('!HHB', s[i*5:(i+1)*5]) + c2 += (c1 & 1) << 16 # 17 bits wide + c3 += (c2 & 3) << 8 # 10 bits wide + parts.extend([_b32tab[c1 >> 11], # bits 1 - 5 + _b32tab[(c1 >> 6) & 0x1f], # bits 6 - 10 + _b32tab[(c1 >> 1) & 0x1f], # bits 11 - 15 + _b32tab[c2 >> 12], # bits 16 - 20 (1 - 5) + _b32tab[(c2 >> 7) & 0x1f], # bits 21 - 25 (6 - 10) + _b32tab[(c2 >> 2) & 0x1f], # bits 26 - 30 (11 - 15) + _b32tab[c3 >> 5], # bits 31 - 35 (1 - 5) + _b32tab[c3 & 0x1f], # bits 36 - 40 (1 - 5) + ]) + encoded = EMPTYSTRING.join(parts) + # Adjust for any leftover partial quanta + if leftover == 1: + return encoded[:-6] + '======' + elif leftover == 2: + return encoded[:-4] + '====' + elif leftover == 3: + return encoded[:-3] + '===' + elif leftover == 4: + return encoded[:-1] + '=' + return encoded + + +def b32decode(s, casefold=False, map01=None): + """Decode a Base32 encoded string. + + s is the string to decode. Optional casefold is a flag specifying whether + a lowercase alphabet is acceptable as input. For security purposes, the + default is False. + + RFC 3548 allows for optional mapping of the digit 0 (zero) to the letter O + (oh), and for optional mapping of the digit 1 (one) to either the letter I + (eye) or letter L (el). The optional argument map01 when not None, + specifies which letter the digit 1 should be mapped to (when map01 is not + None, the digit 0 is always mapped to the letter O). For security + purposes the default is None, so that 0 and 1 are not allowed in the + input. + + The decoded string is returned. A TypeError is raised if s were + incorrectly padded or if there are non-alphabet characters present in the + string. + """ + quanta, leftover = divmod(len(s), 8) + if leftover: + raise TypeError('Incorrect padding') + # Handle section 2.4 zero and one mapping. The flag map01 will be either + # False, or the character to map the digit 1 (one) to. It should be + # either L (el) or I (eye). + if map01: + s = _translate(s, {'0': 'O', '1': map01}) + if casefold: + s = s.upper() + # Strip off pad characters from the right. We need to count the pad + # characters because this will tell us how many null bytes to remove from + # the end of the decoded string. + padchars = 0 + mo = re.search('(?P[=]*)$', s) + if mo: + padchars = len(mo.group('pad')) + if padchars > 0: + s = s[:-padchars] + # Now decode the full quanta + parts = [] + acc = 0 + shift = 35 + for c in s: + val = _b32rev.get(c) + if val is None: + raise TypeError('Non-base32 digit found') + acc += _b32rev[c] << shift + shift -= 5 + if shift < 0: + parts.append(binascii.unhexlify('%010x' % acc)) + acc = 0 + shift = 35 + # Process the last, partial quanta + last = binascii.unhexlify('%010x' % acc) + if padchars == 0: + last = '' # No characters + elif padchars == 1: + last = last[:-1] + elif padchars == 3: + last = last[:-2] + elif padchars == 4: + last = last[:-3] + elif padchars == 6: + last = last[:-4] + else: + raise TypeError('Incorrect padding') + parts.append(last) + return EMPTYSTRING.join(parts) + + + +# RFC 3548, Base 16 Alphabet specifies uppercase, but hexlify() returns +# lowercase. The RFC also recommends against accepting input case +# insensitively. +def b16encode(s): + """Encode a string using Base16. + + s is the string to encode. The encoded string is returned. + """ + return binascii.hexlify(s).upper() + + +def b16decode(s, casefold=False): + """Decode a Base16 encoded string. + + s is the string to decode. Optional casefold is a flag specifying whether + a lowercase alphabet is acceptable as input. For security purposes, the + default is False. + + The decoded string is returned. A TypeError is raised if s were + incorrectly padded or if there are non-alphabet characters present in the + string. + """ + if casefold: + s = s.upper() + if re.search('[^0-9A-F]', s): + raise TypeError('Non-base16 digit found') + return binascii.unhexlify(s) + + + +# Legacy interface. This code could be cleaned up since I don't believe +# binascii has any line length limitations. It just doesn't seem worth it +# though. + +MAXLINESIZE = 76 # Excluding the CRLF +MAXBINSIZE = (MAXLINESIZE//4)*3 + +def encode(input, output): + """Encode a file.""" + while True: + s = input.read(MAXBINSIZE) + if not s: + break + while len(s) < MAXBINSIZE: + ns = input.read(MAXBINSIZE-len(s)) + if not ns: + break + s += ns + line = binascii.b2a_base64(s) + output.write(line) + + +def decode(input, output): + """Decode a file.""" + while True: + line = input.readline() + if not line: + break + s = binascii.a2b_base64(line) + output.write(s) + + +def encodestring(s): + """Encode a string.""" + pieces = [] + for i in range(0, len(s), MAXBINSIZE): + chunk = s[i : i + MAXBINSIZE] + pieces.append(binascii.b2a_base64(chunk)) + return "".join(pieces) + + +def decodestring(s): + """Decode a string.""" + return binascii.a2b_base64(s) + + + +# Useable as a script... +def test(): + """Small test program""" + import sys, getopt + try: + opts, args = getopt.getopt(sys.argv[1:], 'deut') + except getopt.error, msg: + sys.stdout = sys.stderr + print msg + print """usage: %s [-d|-e|-u|-t] [file|-] + -d, -u: decode + -e: encode (default) + -t: encode and decode string 'Aladdin:open sesame'"""%sys.argv[0] + sys.exit(2) + func = encode + for o, a in opts: + if o == '-e': func = encode + if o == '-d': func = decode + if o == '-u': func = decode + if o == '-t': test1(); return + if args and args[0] != '-': + func(open(args[0], 'rb'), sys.stdout) + else: + func(sys.stdin, sys.stdout) + + +def test1(): + s0 = "Aladdin:open sesame" + s1 = encodestring(s0) + s2 = decodestring(s1) + print s0, repr(s1), s2 + + +if __name__ == '__main__': + test() diff --git a/thirdparty/python25/Lib/codecs.py b/thirdparty/python25/Lib/codecs.py new file mode 100644 index 000000000..2e24076a1 --- /dev/null +++ b/thirdparty/python25/Lib/codecs.py @@ -0,0 +1,1034 @@ +""" codecs -- Python Codec Registry, API and helpers. + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +"""#" + +import __builtin__, sys + +### Registry and builtin stateless codec functions + +try: + from _codecs import * +except ImportError, why: + raise SystemError('Failed to load the builtin codecs: %s' % why) + +__all__ = ["register", "lookup", "open", "EncodedFile", "BOM", "BOM_BE", + "BOM_LE", "BOM32_BE", "BOM32_LE", "BOM64_BE", "BOM64_LE", + "BOM_UTF8", "BOM_UTF16", "BOM_UTF16_LE", "BOM_UTF16_BE", + "BOM_UTF32", "BOM_UTF32_LE", "BOM_UTF32_BE", + "strict_errors", "ignore_errors", "replace_errors", + "xmlcharrefreplace_errors", + "register_error", "lookup_error"] + +### Constants + +# +# Byte Order Mark (BOM = ZERO WIDTH NO-BREAK SPACE = U+FEFF) +# and its possible byte string values +# for UTF8/UTF16/UTF32 output and little/big endian machines +# + +# UTF-8 +BOM_UTF8 = '\xef\xbb\xbf' + +# UTF-16, little endian +BOM_LE = BOM_UTF16_LE = '\xff\xfe' + +# UTF-16, big endian +BOM_BE = BOM_UTF16_BE = '\xfe\xff' + +# UTF-32, little endian +BOM_UTF32_LE = '\xff\xfe\x00\x00' + +# UTF-32, big endian +BOM_UTF32_BE = '\x00\x00\xfe\xff' + +if sys.byteorder == 'little': + + # UTF-16, native endianness + BOM = BOM_UTF16 = BOM_UTF16_LE + + # UTF-32, native endianness + BOM_UTF32 = BOM_UTF32_LE + +else: + + # UTF-16, native endianness + BOM = BOM_UTF16 = BOM_UTF16_BE + + # UTF-32, native endianness + BOM_UTF32 = BOM_UTF32_BE + +# Old broken names (don't use in new code) +BOM32_LE = BOM_UTF16_LE +BOM32_BE = BOM_UTF16_BE +BOM64_LE = BOM_UTF32_LE +BOM64_BE = BOM_UTF32_BE + + +### Codec base classes (defining the API) + +class CodecInfo(tuple): + + def __new__(cls, encode, decode, streamreader=None, streamwriter=None, + incrementalencoder=None, incrementaldecoder=None, name=None): + self = tuple.__new__(cls, (encode, decode, streamreader, streamwriter)) + self.name = name + self.encode = encode + self.decode = decode + self.incrementalencoder = incrementalencoder + self.incrementaldecoder = incrementaldecoder + self.streamwriter = streamwriter + self.streamreader = streamreader + return self + + def __repr__(self): + return "<%s.%s object for encoding %s at 0x%x>" % (self.__class__.__module__, self.__class__.__name__, self.name, id(self)) + +class Codec: + + """ Defines the interface for stateless encoders/decoders. + + The .encode()/.decode() methods may use different error + handling schemes by providing the errors argument. These + string values are predefined: + + 'strict' - raise a ValueError error (or a subclass) + 'ignore' - ignore the character and continue with the next + 'replace' - replace with a suitable replacement character; + Python will use the official U+FFFD REPLACEMENT + CHARACTER for the builtin Unicode codecs on + decoding and '?' on encoding. + 'xmlcharrefreplace' - Replace with the appropriate XML + character reference (only for encoding). + 'backslashreplace' - Replace with backslashed escape sequences + (only for encoding). + + The set of allowed values can be extended via register_error. + + """ + def encode(self, input, errors='strict'): + + """ Encodes the object input and returns a tuple (output + object, length consumed). + + errors defines the error handling to apply. It defaults to + 'strict' handling. + + The method may not store state in the Codec instance. Use + StreamCodec for codecs which have to keep state in order to + make encoding/decoding efficient. + + The encoder must be able to handle zero length input and + return an empty object of the output object type in this + situation. + + """ + raise NotImplementedError + + def decode(self, input, errors='strict'): + + """ Decodes the object input and returns a tuple (output + object, length consumed). + + input must be an object which provides the bf_getreadbuf + buffer slot. Python strings, buffer objects and memory + mapped files are examples of objects providing this slot. + + errors defines the error handling to apply. It defaults to + 'strict' handling. + + The method may not store state in the Codec instance. Use + StreamCodec for codecs which have to keep state in order to + make encoding/decoding efficient. + + The decoder must be able to handle zero length input and + return an empty object of the output object type in this + situation. + + """ + raise NotImplementedError + +class IncrementalEncoder(object): + """ + An IncrementalEncoder encodes an input in multiple steps. The input can be + passed piece by piece to the encode() method. The IncrementalEncoder remembers + the state of the Encoding process between calls to encode(). + """ + def __init__(self, errors='strict'): + """ + Creates an IncrementalEncoder instance. + + The IncrementalEncoder may use different error handling schemes by + providing the errors keyword argument. See the module docstring + for a list of possible values. + """ + self.errors = errors + self.buffer = "" + + def encode(self, input, final=False): + """ + Encodes input and returns the resulting object. + """ + raise NotImplementedError + + def reset(self): + """ + Resets the encoder to the initial state. + """ + +class BufferedIncrementalEncoder(IncrementalEncoder): + """ + This subclass of IncrementalEncoder can be used as the baseclass for an + incremental encoder if the encoder must keep some of the output in a + buffer between calls to encode(). + """ + def __init__(self, errors='strict'): + IncrementalEncoder.__init__(self, errors) + self.buffer = "" # unencoded input that is kept between calls to encode() + + def _buffer_encode(self, input, errors, final): + # Overwrite this method in subclasses: It must encode input + # and return an (output, length consumed) tuple + raise NotImplementedError + + def encode(self, input, final=False): + # encode input (taking the buffer into account) + data = self.buffer + input + (result, consumed) = self._buffer_encode(data, self.errors, final) + # keep unencoded input until the next call + self.buffer = data[consumed:] + return result + + def reset(self): + IncrementalEncoder.reset(self) + self.buffer = "" + +class IncrementalDecoder(object): + """ + An IncrementalDecoder decodes an input in multiple steps. The input can be + passed piece by piece to the decode() method. The IncrementalDecoder + remembers the state of the decoding process between calls to decode(). + """ + def __init__(self, errors='strict'): + """ + Creates a IncrementalDecoder instance. + + The IncrementalDecoder may use different error handling schemes by + providing the errors keyword argument. See the module docstring + for a list of possible values. + """ + self.errors = errors + + def decode(self, input, final=False): + """ + Decodes input and returns the resulting object. + """ + raise NotImplementedError + + def reset(self): + """ + Resets the decoder to the initial state. + """ + +class BufferedIncrementalDecoder(IncrementalDecoder): + """ + This subclass of IncrementalDecoder can be used as the baseclass for an + incremental decoder if the decoder must be able to handle incomplete byte + sequences. + """ + def __init__(self, errors='strict'): + IncrementalDecoder.__init__(self, errors) + self.buffer = "" # undecoded input that is kept between calls to decode() + + def _buffer_decode(self, input, errors, final): + # Overwrite this method in subclasses: It must decode input + # and return an (output, length consumed) tuple + raise NotImplementedError + + def decode(self, input, final=False): + # decode input (taking the buffer into account) + data = self.buffer + input + (result, consumed) = self._buffer_decode(data, self.errors, final) + # keep undecoded input until the next call + self.buffer = data[consumed:] + return result + + def reset(self): + IncrementalDecoder.reset(self) + self.buffer = "" + +# +# The StreamWriter and StreamReader class provide generic working +# interfaces which can be used to implement new encoding submodules +# very easily. See encodings/utf_8.py for an example on how this is +# done. +# + +class StreamWriter(Codec): + + def __init__(self, stream, errors='strict'): + + """ Creates a StreamWriter instance. + + stream must be a file-like object open for writing + (binary) data. + + The StreamWriter may use different error handling + schemes by providing the errors keyword argument. These + parameters are predefined: + + 'strict' - raise a ValueError (or a subclass) + 'ignore' - ignore the character and continue with the next + 'replace'- replace with a suitable replacement character + 'xmlcharrefreplace' - Replace with the appropriate XML + character reference. + 'backslashreplace' - Replace with backslashed escape + sequences (only for encoding). + + The set of allowed parameter values can be extended via + register_error. + """ + self.stream = stream + self.errors = errors + + def write(self, object): + + """ Writes the object's contents encoded to self.stream. + """ + data, consumed = self.encode(object, self.errors) + self.stream.write(data) + + def writelines(self, list): + + """ Writes the concatenated list of strings to the stream + using .write(). + """ + self.write(''.join(list)) + + def reset(self): + + """ Flushes and resets the codec buffers used for keeping state. + + Calling this method should ensure that the data on the + output is put into a clean state, that allows appending + of new fresh data without having to rescan the whole + stream to recover state. + + """ + pass + + def __getattr__(self, name, + getattr=getattr): + + """ Inherit all other methods from the underlying stream. + """ + return getattr(self.stream, name) + + def __enter__(self): + return self + + def __exit__(self, type, value, tb): + self.stream.close() + +### + +class StreamReader(Codec): + + def __init__(self, stream, errors='strict'): + + """ Creates a StreamReader instance. + + stream must be a file-like object open for reading + (binary) data. + + The StreamReader may use different error handling + schemes by providing the errors keyword argument. These + parameters are predefined: + + 'strict' - raise a ValueError (or a subclass) + 'ignore' - ignore the character and continue with the next + 'replace'- replace with a suitable replacement character; + + The set of allowed parameter values can be extended via + register_error. + """ + self.stream = stream + self.errors = errors + self.bytebuffer = "" + # For str->str decoding this will stay a str + # For str->unicode decoding the first read will promote it to unicode + self.charbuffer = "" + self.linebuffer = None + + def decode(self, input, errors='strict'): + raise NotImplementedError + + def read(self, size=-1, chars=-1, firstline=False): + + """ Decodes data from the stream self.stream and returns the + resulting object. + + chars indicates the number of characters to read from the + stream. read() will never return more than chars + characters, but it might return less, if there are not enough + characters available. + + size indicates the approximate maximum number of bytes to + read from the stream for decoding purposes. The decoder + can modify this setting as appropriate. The default value + -1 indicates to read and decode as much as possible. size + is intended to prevent having to decode huge files in one + step. + + If firstline is true, and a UnicodeDecodeError happens + after the first line terminator in the input only the first line + will be returned, the rest of the input will be kept until the + next call to read(). + + The method should use a greedy read strategy meaning that + it should read as much data as is allowed within the + definition of the encoding and the given size, e.g. if + optional encoding endings or state markers are available + on the stream, these should be read too. + """ + # If we have lines cached, first merge them back into characters + if self.linebuffer: + self.charbuffer = "".join(self.linebuffer) + self.linebuffer = None + + # read until we get the required number of characters (if available) + while True: + # can the request can be satisfied from the character buffer? + if chars < 0: + if size < 0: + if self.charbuffer: + break + elif len(self.charbuffer) >= size: + break + else: + if len(self.charbuffer) >= chars: + break + # we need more data + if size < 0: + newdata = self.stream.read() + else: + newdata = self.stream.read(size) + # decode bytes (those remaining from the last call included) + data = self.bytebuffer + newdata + try: + newchars, decodedbytes = self.decode(data, self.errors) + except UnicodeDecodeError, exc: + if firstline: + newchars, decodedbytes = self.decode(data[:exc.start], self.errors) + lines = newchars.splitlines(True) + if len(lines)<=1: + raise + else: + raise + # keep undecoded bytes until the next call + self.bytebuffer = data[decodedbytes:] + # put new characters in the character buffer + self.charbuffer += newchars + # there was no data available + if not newdata: + break + if chars < 0: + # Return everything we've got + result = self.charbuffer + self.charbuffer = "" + else: + # Return the first chars characters + result = self.charbuffer[:chars] + self.charbuffer = self.charbuffer[chars:] + return result + + def readline(self, size=None, keepends=True): + + """ Read one line from the input stream and return the + decoded data. + + size, if given, is passed as size argument to the + read() method. + + """ + # If we have lines cached from an earlier read, return + # them unconditionally + if self.linebuffer: + line = self.linebuffer[0] + del self.linebuffer[0] + if len(self.linebuffer) == 1: + # revert to charbuffer mode; we might need more data + # next time + self.charbuffer = self.linebuffer[0] + self.linebuffer = None + if not keepends: + line = line.splitlines(False)[0] + return line + + readsize = size or 72 + line = "" + # If size is given, we call read() only once + while True: + data = self.read(readsize, firstline=True) + if data: + # If we're at a "\r" read one extra character (which might + # be a "\n") to get a proper line ending. If the stream is + # temporarily exhausted we return the wrong line ending. + if data.endswith("\r"): + data += self.read(size=1, chars=1) + + line += data + lines = line.splitlines(True) + if lines: + if len(lines) > 1: + # More than one line result; the first line is a full line + # to return + line = lines[0] + del lines[0] + if len(lines) > 1: + # cache the remaining lines + lines[-1] += self.charbuffer + self.linebuffer = lines + self.charbuffer = None + else: + # only one remaining line, put it back into charbuffer + self.charbuffer = lines[0] + self.charbuffer + if not keepends: + line = line.splitlines(False)[0] + break + line0withend = lines[0] + line0withoutend = lines[0].splitlines(False)[0] + if line0withend != line0withoutend: # We really have a line end + # Put the rest back together and keep it until the next call + self.charbuffer = "".join(lines[1:]) + self.charbuffer + if keepends: + line = line0withend + else: + line = line0withoutend + break + # we didn't get anything or this was our only try + if not data or size is not None: + if line and not keepends: + line = line.splitlines(False)[0] + break + if readsize<8000: + readsize *= 2 + return line + + def readlines(self, sizehint=None, keepends=True): + + """ Read all lines available on the input stream + and return them as list of lines. + + Line breaks are implemented using the codec's decoder + method and are included in the list entries. + + sizehint, if given, is ignored since there is no efficient + way to finding the true end-of-line. + + """ + data = self.read() + return data.splitlines(keepends) + + def reset(self): + + """ Resets the codec buffers used for keeping state. + + Note that no stream repositioning should take place. + This method is primarily intended to be able to recover + from decoding errors. + + """ + self.bytebuffer = "" + self.charbuffer = u"" + self.linebuffer = None + + def seek(self, offset, whence=0): + """ Set the input stream's current position. + + Resets the codec buffers used for keeping state. + """ + self.reset() + self.stream.seek(offset, whence) + + def next(self): + + """ Return the next decoded line from the input stream.""" + line = self.readline() + if line: + return line + raise StopIteration + + def __iter__(self): + return self + + def __getattr__(self, name, + getattr=getattr): + + """ Inherit all other methods from the underlying stream. + """ + return getattr(self.stream, name) + + def __enter__(self): + return self + + def __exit__(self, type, value, tb): + self.stream.close() + +### + +class StreamReaderWriter: + + """ StreamReaderWriter instances allow wrapping streams which + work in both read and write modes. + + The design is such that one can use the factory functions + returned by the codec.lookup() function to construct the + instance. + + """ + # Optional attributes set by the file wrappers below + encoding = 'unknown' + + def __init__(self, stream, Reader, Writer, errors='strict'): + + """ Creates a StreamReaderWriter instance. + + stream must be a Stream-like object. + + Reader, Writer must be factory functions or classes + providing the StreamReader, StreamWriter interface resp. + + Error handling is done in the same way as defined for the + StreamWriter/Readers. + + """ + self.stream = stream + self.reader = Reader(stream, errors) + self.writer = Writer(stream, errors) + self.errors = errors + + def read(self, size=-1): + + return self.reader.read(size) + + def readline(self, size=None): + + return self.reader.readline(size) + + def readlines(self, sizehint=None): + + return self.reader.readlines(sizehint) + + def next(self): + + """ Return the next decoded line from the input stream.""" + return self.reader.next() + + def __iter__(self): + return self + + def write(self, data): + + return self.writer.write(data) + + def writelines(self, list): + + return self.writer.writelines(list) + + def reset(self): + + self.reader.reset() + self.writer.reset() + + def __getattr__(self, name, + getattr=getattr): + + """ Inherit all other methods from the underlying stream. + """ + return getattr(self.stream, name) + + # these are needed to make "with codecs.open(...)" work properly + + def __enter__(self): + return self + + def __exit__(self, type, value, tb): + self.stream.close() + +### + +class StreamRecoder: + + """ StreamRecoder instances provide a frontend - backend + view of encoding data. + + They use the complete set of APIs returned by the + codecs.lookup() function to implement their task. + + Data written to the stream is first decoded into an + intermediate format (which is dependent on the given codec + combination) and then written to the stream using an instance + of the provided Writer class. + + In the other direction, data is read from the stream using a + Reader instance and then return encoded data to the caller. + + """ + # Optional attributes set by the file wrappers below + data_encoding = 'unknown' + file_encoding = 'unknown' + + def __init__(self, stream, encode, decode, Reader, Writer, + errors='strict'): + + """ Creates a StreamRecoder instance which implements a two-way + conversion: encode and decode work on the frontend (the + input to .read() and output of .write()) while + Reader and Writer work on the backend (reading and + writing to the stream). + + You can use these objects to do transparent direct + recodings from e.g. latin-1 to utf-8 and back. + + stream must be a file-like object. + + encode, decode must adhere to the Codec interface, Reader, + Writer must be factory functions or classes providing the + StreamReader, StreamWriter interface resp. + + encode and decode are needed for the frontend translation, + Reader and Writer for the backend translation. Unicode is + used as intermediate encoding. + + Error handling is done in the same way as defined for the + StreamWriter/Readers. + + """ + self.stream = stream + self.encode = encode + self.decode = decode + self.reader = Reader(stream, errors) + self.writer = Writer(stream, errors) + self.errors = errors + + def read(self, size=-1): + + data = self.reader.read(size) + data, bytesencoded = self.encode(data, self.errors) + return data + + def readline(self, size=None): + + if size is None: + data = self.reader.readline() + else: + data = self.reader.readline(size) + data, bytesencoded = self.encode(data, self.errors) + return data + + def readlines(self, sizehint=None): + + data = self.reader.read() + data, bytesencoded = self.encode(data, self.errors) + return data.splitlines(1) + + def next(self): + + """ Return the next decoded line from the input stream.""" + data = self.reader.next() + data, bytesencoded = self.encode(data, self.errors) + return data + + def __iter__(self): + return self + + def write(self, data): + + data, bytesdecoded = self.decode(data, self.errors) + return self.writer.write(data) + + def writelines(self, list): + + data = ''.join(list) + data, bytesdecoded = self.decode(data, self.errors) + return self.writer.write(data) + + def reset(self): + + self.reader.reset() + self.writer.reset() + + def __getattr__(self, name, + getattr=getattr): + + """ Inherit all other methods from the underlying stream. + """ + return getattr(self.stream, name) + + def __enter__(self): + return self + + def __exit__(self, type, value, tb): + self.stream.close() + +### Shortcuts + +def open(filename, mode='rb', encoding=None, errors='strict', buffering=1): + + """ Open an encoded file using the given mode and return + a wrapped version providing transparent encoding/decoding. + + Note: The wrapped version will only accept the object format + defined by the codecs, i.e. Unicode objects for most builtin + codecs. Output is also codec dependent and will usually be + Unicode as well. + + Files are always opened in binary mode, even if no binary mode + was specified. This is done to avoid data loss due to encodings + using 8-bit values. The default file mode is 'rb' meaning to + open the file in binary read mode. + + encoding specifies the encoding which is to be used for the + file. + + errors may be given to define the error handling. It defaults + to 'strict' which causes ValueErrors to be raised in case an + encoding error occurs. + + buffering has the same meaning as for the builtin open() API. + It defaults to line buffered. + + The returned wrapped file object provides an extra attribute + .encoding which allows querying the used encoding. This + attribute is only available if an encoding was specified as + parameter. + + """ + if encoding is not None and \ + 'b' not in mode: + # Force opening of the file in binary mode + mode = mode + 'b' + file = __builtin__.open(filename, mode, buffering) + if encoding is None: + return file + info = lookup(encoding) + srw = StreamReaderWriter(file, info.streamreader, info.streamwriter, errors) + # Add attributes to simplify introspection + srw.encoding = encoding + return srw + +def EncodedFile(file, data_encoding, file_encoding=None, errors='strict'): + + """ Return a wrapped version of file which provides transparent + encoding translation. + + Strings written to the wrapped file are interpreted according + to the given data_encoding and then written to the original + file as string using file_encoding. The intermediate encoding + will usually be Unicode but depends on the specified codecs. + + Strings are read from the file using file_encoding and then + passed back to the caller as string using data_encoding. + + If file_encoding is not given, it defaults to data_encoding. + + errors may be given to define the error handling. It defaults + to 'strict' which causes ValueErrors to be raised in case an + encoding error occurs. + + The returned wrapped file object provides two extra attributes + .data_encoding and .file_encoding which reflect the given + parameters of the same name. The attributes can be used for + introspection by Python programs. + + """ + if file_encoding is None: + file_encoding = data_encoding + data_info = lookup(data_encoding) + file_info = lookup(file_encoding) + sr = StreamRecoder(file, data_info.encode, data_info.decode, + file_info.streamreader, file_info.streamwriter, errors) + # Add attributes to simplify introspection + sr.data_encoding = data_encoding + sr.file_encoding = file_encoding + return sr + +### Helpers for codec lookup + +def getencoder(encoding): + + """ Lookup up the codec for the given encoding and return + its encoder function. + + Raises a LookupError in case the encoding cannot be found. + + """ + return lookup(encoding).encode + +def getdecoder(encoding): + + """ Lookup up the codec for the given encoding and return + its decoder function. + + Raises a LookupError in case the encoding cannot be found. + + """ + return lookup(encoding).decode + +def getincrementalencoder(encoding): + + """ Lookup up the codec for the given encoding and return + its IncrementalEncoder class or factory function. + + Raises a LookupError in case the encoding cannot be found + or the codecs doesn't provide an incremental encoder. + + """ + encoder = lookup(encoding).incrementalencoder + if encoder is None: + raise LookupError(encoding) + return encoder + +def getincrementaldecoder(encoding): + + """ Lookup up the codec for the given encoding and return + its IncrementalDecoder class or factory function. + + Raises a LookupError in case the encoding cannot be found + or the codecs doesn't provide an incremental decoder. + + """ + decoder = lookup(encoding).incrementaldecoder + if decoder is None: + raise LookupError(encoding) + return decoder + +def getreader(encoding): + + """ Lookup up the codec for the given encoding and return + its StreamReader class or factory function. + + Raises a LookupError in case the encoding cannot be found. + + """ + return lookup(encoding).streamreader + +def getwriter(encoding): + + """ Lookup up the codec for the given encoding and return + its StreamWriter class or factory function. + + Raises a LookupError in case the encoding cannot be found. + + """ + return lookup(encoding).streamwriter + +def iterencode(iterator, encoding, errors='strict', **kwargs): + """ + Encoding iterator. + + Encodes the input strings from the iterator using a IncrementalEncoder. + + errors and kwargs are passed through to the IncrementalEncoder + constructor. + """ + encoder = getincrementalencoder(encoding)(errors, **kwargs) + for input in iterator: + output = encoder.encode(input) + if output: + yield output + output = encoder.encode("", True) + if output: + yield output + +def iterdecode(iterator, encoding, errors='strict', **kwargs): + """ + Decoding iterator. + + Decodes the input strings from the iterator using a IncrementalDecoder. + + errors and kwargs are passed through to the IncrementalDecoder + constructor. + """ + decoder = getincrementaldecoder(encoding)(errors, **kwargs) + for input in iterator: + output = decoder.decode(input) + if output: + yield output + output = decoder.decode("", True) + if output: + yield output + +### Helpers for charmap-based codecs + +def make_identity_dict(rng): + + """ make_identity_dict(rng) -> dict + + Return a dictionary where elements of the rng sequence are + mapped to themselves. + + """ + res = {} + for i in rng: + res[i]=i + return res + +def make_encoding_map(decoding_map): + + """ Creates an encoding map from a decoding map. + + If a target mapping in the decoding map occurs multiple + times, then that target is mapped to None (undefined mapping), + causing an exception when encountered by the charmap codec + during translation. + + One example where this happens is cp875.py which decodes + multiple character to \u001a. + + """ + m = {} + for k,v in decoding_map.items(): + if not v in m: + m[v] = k + else: + m[v] = None + return m + +### error handlers + +try: + strict_errors = lookup_error("strict") + ignore_errors = lookup_error("ignore") + replace_errors = lookup_error("replace") + xmlcharrefreplace_errors = lookup_error("xmlcharrefreplace") + backslashreplace_errors = lookup_error("backslashreplace") +except LookupError: + # In --disable-unicode builds, these error handler are missing + strict_errors = None + ignore_errors = None + replace_errors = None + xmlcharrefreplace_errors = None + backslashreplace_errors = None + +# Tell modulefinder that using codecs probably needs the encodings +# package +_false = 0 +if _false: + import encodings + +### Tests + +if __name__ == '__main__': + + # Make stdout translate Latin-1 output into UTF-8 output + sys.stdout = EncodedFile(sys.stdout, 'latin-1', 'utf-8') + + # Have stdin translate Latin-1 input into UTF-8 input + sys.stdin = EncodedFile(sys.stdin, 'utf-8', 'latin-1') diff --git a/thirdparty/python25/Lib/copy.py b/thirdparty/python25/Lib/copy.py new file mode 100644 index 000000000..7b60755ba --- /dev/null +++ b/thirdparty/python25/Lib/copy.py @@ -0,0 +1,414 @@ +"""Generic (shallow and deep) copying operations. + +Interface summary: + + import copy + + x = copy.copy(y) # make a shallow copy of y + x = copy.deepcopy(y) # make a deep copy of y + +For module specific errors, copy.Error is raised. + +The difference between shallow and deep copying is only relevant for +compound objects (objects that contain other objects, like lists or +class instances). + +- A shallow copy constructs a new compound object and then (to the + extent possible) inserts *the same objects* into it that the + original contains. + +- A deep copy constructs a new compound object and then, recursively, + inserts *copies* into it of the objects found in the original. + +Two problems often exist with deep copy operations that don't exist +with shallow copy operations: + + a) recursive objects (compound objects that, directly or indirectly, + contain a reference to themselves) may cause a recursive loop + + b) because deep copy copies *everything* it may copy too much, e.g. + administrative data structures that should be shared even between + copies + +Python's deep copy operation avoids these problems by: + + a) keeping a table of objects already copied during the current + copying pass + + b) letting user-defined classes override the copying operation or the + set of components copied + +This version does not copy types like module, class, function, method, +nor stack trace, stack frame, nor file, socket, window, nor array, nor +any similar types. + +Classes can use the same interfaces to control copying that they use +to control pickling: they can define methods called __getinitargs__(), +__getstate__() and __setstate__(). See the documentation for module +"pickle" for information on these methods. +""" + +import types +from copy_reg import dispatch_table + +class Error(Exception): + pass +error = Error # backward compatibility + +try: + from org.python.core import PyStringMap +except ImportError: + PyStringMap = None + +__all__ = ["Error", "copy", "deepcopy"] + +def copy(x): + """Shallow copy operation on arbitrary Python objects. + + See the module's __doc__ string for more info. + """ + + cls = type(x) + + copier = _copy_dispatch.get(cls) + if copier: + return copier(x) + + copier = getattr(cls, "__copy__", None) + if copier: + return copier(x) + + reductor = dispatch_table.get(cls) + if reductor: + rv = reductor(x) + else: + reductor = getattr(x, "__reduce_ex__", None) + if reductor: + rv = reductor(2) + else: + reductor = getattr(x, "__reduce__", None) + if reductor: + rv = reductor() + else: + raise Error("un(shallow)copyable object of type %s" % cls) + + return _reconstruct(x, rv, 0) + + +_copy_dispatch = d = {} + +def _copy_immutable(x): + return x +for t in (type(None), int, long, float, bool, str, tuple, + frozenset, type, xrange, types.ClassType, + types.BuiltinFunctionType, + types.FunctionType): + d[t] = _copy_immutable +for name in ("ComplexType", "UnicodeType", "CodeType"): + t = getattr(types, name, None) + if t is not None: + d[t] = _copy_immutable + +def _copy_with_constructor(x): + return type(x)(x) +for t in (list, dict, set): + d[t] = _copy_with_constructor + +def _copy_with_copy_method(x): + return x.copy() +if PyStringMap is not None: + d[PyStringMap] = _copy_with_copy_method + +def _copy_inst(x): + if hasattr(x, '__copy__'): + return x.__copy__() + if hasattr(x, '__getinitargs__'): + args = x.__getinitargs__() + y = x.__class__(*args) + else: + y = _EmptyClass() + y.__class__ = x.__class__ + if hasattr(x, '__getstate__'): + state = x.__getstate__() + else: + state = x.__dict__ + if hasattr(y, '__setstate__'): + y.__setstate__(state) + else: + y.__dict__.update(state) + return y +d[types.InstanceType] = _copy_inst + +del d + +def deepcopy(x, memo=None, _nil=[]): + """Deep copy operation on arbitrary Python objects. + + See the module's __doc__ string for more info. + """ + + if memo is None: + memo = {} + + d = id(x) + y = memo.get(d, _nil) + if y is not _nil: + return y + + cls = type(x) + + copier = _deepcopy_dispatch.get(cls) + if copier: + y = copier(x, memo) + else: + try: + issc = issubclass(cls, type) + except TypeError: # cls is not a class (old Boost; see SF #502085) + issc = 0 + if issc: + y = _deepcopy_atomic(x, memo) + else: + copier = getattr(x, "__deepcopy__", None) + if copier: + y = copier(memo) + else: + reductor = dispatch_table.get(cls) + if reductor: + rv = reductor(x) + else: + reductor = getattr(x, "__reduce_ex__", None) + if reductor: + rv = reductor(2) + else: + reductor = getattr(x, "__reduce__", None) + if reductor: + rv = reductor() + else: + raise Error( + "un(deep)copyable object of type %s" % cls) + y = _reconstruct(x, rv, 1, memo) + + memo[d] = y + _keep_alive(x, memo) # Make sure x lives at least as long as d + return y + +_deepcopy_dispatch = d = {} + +def _deepcopy_atomic(x, memo): + return x +d[type(None)] = _deepcopy_atomic +d[int] = _deepcopy_atomic +d[long] = _deepcopy_atomic +d[float] = _deepcopy_atomic +d[bool] = _deepcopy_atomic +try: + d[complex] = _deepcopy_atomic +except NameError: + pass +d[str] = _deepcopy_atomic +try: + d[unicode] = _deepcopy_atomic +except NameError: + pass +try: + d[types.CodeType] = _deepcopy_atomic +except AttributeError: + pass +d[type] = _deepcopy_atomic +d[xrange] = _deepcopy_atomic +d[types.ClassType] = _deepcopy_atomic +d[types.BuiltinFunctionType] = _deepcopy_atomic +d[types.FunctionType] = _deepcopy_atomic + +def _deepcopy_list(x, memo): + y = [] + memo[id(x)] = y + for a in x: + y.append(deepcopy(a, memo)) + return y +d[list] = _deepcopy_list + +def _deepcopy_tuple(x, memo): + y = [] + for a in x: + y.append(deepcopy(a, memo)) + d = id(x) + try: + return memo[d] + except KeyError: + pass + for i in range(len(x)): + if x[i] is not y[i]: + y = tuple(y) + break + else: + y = x + memo[d] = y + return y +d[tuple] = _deepcopy_tuple + +def _deepcopy_dict(x, memo): + y = {} + memo[id(x)] = y + for key, value in x.iteritems(): + y[deepcopy(key, memo)] = deepcopy(value, memo) + return y +d[dict] = _deepcopy_dict +if PyStringMap is not None: + d[PyStringMap] = _deepcopy_dict + +def _keep_alive(x, memo): + """Keeps a reference to the object x in the memo. + + Because we remember objects by their id, we have + to assure that possibly temporary objects are kept + alive by referencing them. + We store a reference at the id of the memo, which should + normally not be used unless someone tries to deepcopy + the memo itself... + """ + try: + memo[id(memo)].append(x) + except KeyError: + # aha, this is the first one :-) + memo[id(memo)]=[x] + +def _deepcopy_inst(x, memo): + if hasattr(x, '__deepcopy__'): + return x.__deepcopy__(memo) + if hasattr(x, '__getinitargs__'): + args = x.__getinitargs__() + args = deepcopy(args, memo) + y = x.__class__(*args) + else: + y = _EmptyClass() + y.__class__ = x.__class__ + memo[id(x)] = y + if hasattr(x, '__getstate__'): + state = x.__getstate__() + else: + state = x.__dict__ + state = deepcopy(state, memo) + if hasattr(y, '__setstate__'): + y.__setstate__(state) + else: + y.__dict__.update(state) + return y +d[types.InstanceType] = _deepcopy_inst + +def _reconstruct(x, info, deep, memo=None): + if isinstance(info, str): + return x + assert isinstance(info, tuple) + if memo is None: + memo = {} + n = len(info) + assert n in (2, 3, 4, 5) + callable, args = info[:2] + if n > 2: + state = info[2] + else: + state = {} + if n > 3: + listiter = info[3] + else: + listiter = None + if n > 4: + dictiter = info[4] + else: + dictiter = None + if deep: + args = deepcopy(args, memo) + y = callable(*args) + memo[id(x)] = y + if listiter is not None: + for item in listiter: + if deep: + item = deepcopy(item, memo) + y.append(item) + if dictiter is not None: + for key, value in dictiter: + if deep: + key = deepcopy(key, memo) + value = deepcopy(value, memo) + y[key] = value + if state: + if deep: + state = deepcopy(state, memo) + if hasattr(y, '__setstate__'): + y.__setstate__(state) + else: + if isinstance(state, tuple) and len(state) == 2: + state, slotstate = state + else: + slotstate = None + if state is not None: + y.__dict__.update(state) + if slotstate is not None: + for key, value in slotstate.iteritems(): + setattr(y, key, value) + return y + +del d + +del types + +# Helper for instance creation without calling __init__ +class _EmptyClass: + pass + +def _test(): + l = [None, 1, 2L, 3.14, 'xyzzy', (1, 2L), [3.14, 'abc'], + {'abc': 'ABC'}, (), [], {}] + l1 = copy(l) + print l1==l + l1 = map(copy, l) + print l1==l + l1 = deepcopy(l) + print l1==l + class C: + def __init__(self, arg=None): + self.a = 1 + self.arg = arg + if __name__ == '__main__': + import sys + file = sys.argv[0] + else: + file = __file__ + self.fp = open(file) + self.fp.close() + def __getstate__(self): + return {'a': self.a, 'arg': self.arg} + def __setstate__(self, state): + for key, value in state.iteritems(): + setattr(self, key, value) + def __deepcopy__(self, memo=None): + new = self.__class__(deepcopy(self.arg, memo)) + new.a = self.a + return new + c = C('argument sketch') + l.append(c) + l2 = copy(l) + print l == l2 + print l + print l2 + l2 = deepcopy(l) + print l == l2 + print l + print l2 + l.append({l[1]: l, 'xyz': l[2]}) + l3 = copy(l) + import repr + print map(repr.repr, l) + print map(repr.repr, l1) + print map(repr.repr, l2) + print map(repr.repr, l3) + l3 = deepcopy(l) + import repr + print map(repr.repr, l) + print map(repr.repr, l1) + print map(repr.repr, l2) + print map(repr.repr, l3) + +if __name__ == '__main__': + _test() diff --git a/thirdparty/python25/Lib/copy_reg.py b/thirdparty/python25/Lib/copy_reg.py new file mode 100644 index 000000000..3b6fc8715 --- /dev/null +++ b/thirdparty/python25/Lib/copy_reg.py @@ -0,0 +1,200 @@ +"""Helper to provide extensibility for pickle/cPickle. + +This is only useful to add pickle support for extension types defined in +C, not for instances of user-defined classes. +""" + +from types import ClassType as _ClassType + +__all__ = ["pickle", "constructor", + "add_extension", "remove_extension", "clear_extension_cache"] + +dispatch_table = {} + +def pickle(ob_type, pickle_function, constructor_ob=None): + if type(ob_type) is _ClassType: + raise TypeError("copy_reg is not intended for use with classes") + + if not callable(pickle_function): + raise TypeError("reduction functions must be callable") + dispatch_table[ob_type] = pickle_function + + # The constructor_ob function is a vestige of safe for unpickling. + # There is no reason for the caller to pass it anymore. + if constructor_ob is not None: + constructor(constructor_ob) + +def constructor(object): + if not callable(object): + raise TypeError("constructors must be callable") + +# Example: provide pickling support for complex numbers. + +try: + complex +except NameError: + pass +else: + + def pickle_complex(c): + return complex, (c.real, c.imag) + + pickle(complex, pickle_complex, complex) + +# Support for pickling new-style objects + +def _reconstructor(cls, base, state): + if base is object: + obj = object.__new__(cls) + else: + obj = base.__new__(cls, state) + base.__init__(obj, state) + return obj + +_HEAPTYPE = 1<<9 + +# Python code for object.__reduce_ex__ for protocols 0 and 1 + +def _reduce_ex(self, proto): + assert proto < 2 + for base in self.__class__.__mro__: + if hasattr(base, '__flags__') and not base.__flags__ & _HEAPTYPE: + break + else: + base = object # not really reachable + if base is object: + state = None + else: + if base is self.__class__: + raise TypeError, "can't pickle %s objects" % base.__name__ + state = base(self) + args = (self.__class__, base, state) + try: + getstate = self.__getstate__ + except AttributeError: + if getattr(self, "__slots__", None): + raise TypeError("a class that defines __slots__ without " + "defining __getstate__ cannot be pickled") + try: + dict = self.__dict__ + except AttributeError: + dict = None + else: + dict = getstate() + if dict: + return _reconstructor, args, dict + else: + return _reconstructor, args + +# Helper for __reduce_ex__ protocol 2 + +def __newobj__(cls, *args): + return cls.__new__(cls, *args) + +def _slotnames(cls): + """Return a list of slot names for a given class. + + This needs to find slots defined by the class and its bases, so we + can't simply return the __slots__ attribute. We must walk down + the Method Resolution Order and concatenate the __slots__ of each + class found there. (This assumes classes don't modify their + __slots__ attribute to misrepresent their slots after the class is + defined.) + """ + + # Get the value from a cache in the class if possible + names = cls.__dict__.get("__slotnames__") + if names is not None: + return names + + # Not cached -- calculate the value + names = [] + if not hasattr(cls, "__slots__"): + # This class has no slots + pass + else: + # Slots found -- gather slot names from all base classes + for c in cls.__mro__: + if "__slots__" in c.__dict__: + slots = c.__dict__['__slots__'] + # if class has a single slot, it can be given as a string + if isinstance(slots, basestring): + slots = (slots,) + for name in slots: + # special descriptors + if name in ("__dict__", "__weakref__"): + continue + # mangled names + elif name.startswith('__') and not name.endswith('__'): + names.append('_%s%s' % (c.__name__, name)) + else: + names.append(name) + + # Cache the outcome in the class if at all possible + try: + cls.__slotnames__ = names + except: + pass # But don't die if we can't + + return names + +# A registry of extension codes. This is an ad-hoc compression +# mechanism. Whenever a global reference to , is about +# to be pickled, the (, ) tuple is looked up here to see +# if it is a registered extension code for it. Extension codes are +# universal, so that the meaning of a pickle does not depend on +# context. (There are also some codes reserved for local use that +# don't have this restriction.) Codes are positive ints; 0 is +# reserved. + +_extension_registry = {} # key -> code +_inverted_registry = {} # code -> key +_extension_cache = {} # code -> object +# Don't ever rebind those names: cPickle grabs a reference to them when +# it's initialized, and won't see a rebinding. + +def add_extension(module, name, code): + """Register an extension code.""" + code = int(code) + if not 1 <= code <= 0x7fffffff: + raise ValueError, "code out of range" + key = (module, name) + if (_extension_registry.get(key) == code and + _inverted_registry.get(code) == key): + return # Redundant registrations are benign + if key in _extension_registry: + raise ValueError("key %s is already registered with code %s" % + (key, _extension_registry[key])) + if code in _inverted_registry: + raise ValueError("code %s is already in use for key %s" % + (code, _inverted_registry[code])) + _extension_registry[key] = code + _inverted_registry[code] = key + +def remove_extension(module, name, code): + """Unregister an extension code. For testing only.""" + key = (module, name) + if (_extension_registry.get(key) != code or + _inverted_registry.get(code) != key): + raise ValueError("key %s is not registered with code %s" % + (key, code)) + del _extension_registry[key] + del _inverted_registry[code] + if code in _extension_cache: + del _extension_cache[code] + +def clear_extension_cache(): + _extension_cache.clear() + +# Standard extension code assignments + +# Reserved ranges + +# First Last Count Purpose +# 1 127 127 Reserved for Python standard library +# 128 191 64 Reserved for Zope +# 192 239 48 Reserved for 3rd parties +# 240 255 16 Reserved for private use (will never be assigned) +# 256 Inf Inf Reserved for future assignment + +# Extension codes are assigned by the Python Software Foundation. diff --git a/thirdparty/python25/Lib/encodings/__init__.py b/thirdparty/python25/Lib/encodings/__init__.py new file mode 100644 index 000000000..e830965c0 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/__init__.py @@ -0,0 +1,154 @@ +""" Standard "encodings" Package + + Standard Python encoding modules are stored in this package + directory. + + Codec modules must have names corresponding to normalized encoding + names as defined in the normalize_encoding() function below, e.g. + 'utf-8' must be implemented by the module 'utf_8.py'. + + Each codec module must export the following interface: + + * getregentry() -> codecs.CodecInfo object + The getregentry() API must a CodecInfo object with encoder, decoder, + incrementalencoder, incrementaldecoder, streamwriter and streamreader + atttributes which adhere to the Python Codec Interface Standard. + + In addition, a module may optionally also define the following + APIs which are then used by the package's codec search function: + + * getaliases() -> sequence of encoding name strings to use as aliases + + Alias names returned by getaliases() must be normalized encoding + names as defined by normalize_encoding(). + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +"""#" + +import codecs, types +from encodings import aliases + +_cache = {} +_unknown = '--unknown--' +_import_tail = ['*'] +_norm_encoding_map = (' . ' + '0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ ' + ' abcdefghijklmnopqrstuvwxyz ' + ' ' + ' ' + ' ') +_aliases = aliases.aliases + +class CodecRegistryError(LookupError, SystemError): + pass + +def normalize_encoding(encoding): + + """ Normalize an encoding name. + + Normalization works as follows: all non-alphanumeric + characters except the dot used for Python package names are + collapsed and replaced with a single underscore, e.g. ' -;#' + becomes '_'. Leading and trailing underscores are removed. + + Note that encoding names should be ASCII only; if they do use + non-ASCII characters, these must be Latin-1 compatible. + + """ + # Make sure we have an 8-bit string, because .translate() works + # differently for Unicode strings. + if type(encoding) is types.UnicodeType: + # Note that .encode('latin-1') does *not* use the codec + # registry, so this call doesn't recurse. (See unicodeobject.c + # PyUnicode_AsEncodedString() for details) + encoding = encoding.encode('latin-1') + return '_'.join(encoding.translate(_norm_encoding_map).split()) + +def search_function(encoding): + + # Cache lookup + entry = _cache.get(encoding, _unknown) + if entry is not _unknown: + return entry + + # Import the module: + # + # First try to find an alias for the normalized encoding + # name and lookup the module using the aliased name, then try to + # lookup the module using the standard import scheme, i.e. first + # try in the encodings package, then at top-level. + # + norm_encoding = normalize_encoding(encoding) + aliased_encoding = _aliases.get(norm_encoding) or \ + _aliases.get(norm_encoding.replace('.', '_')) + if aliased_encoding is not None: + modnames = [aliased_encoding, + norm_encoding] + else: + modnames = [norm_encoding] + for modname in modnames: + if not modname or '.' in modname: + continue + try: + mod = __import__('encodings.' + modname, + globals(), locals(), _import_tail) + except ImportError: + pass + else: + break + else: + mod = None + + try: + getregentry = mod.getregentry + except AttributeError: + # Not a codec module + mod = None + + if mod is None: + # Cache misses + _cache[encoding] = None + return None + + # Now ask the module for the registry entry + entry = getregentry() + if not isinstance(entry, codecs.CodecInfo): + if not 4 <= len(entry) <= 7: + raise CodecRegistryError,\ + 'module "%s" (%s) failed to register' % \ + (mod.__name__, mod.__file__) + if not callable(entry[0]) or \ + not callable(entry[1]) or \ + (entry[2] is not None and not callable(entry[2])) or \ + (entry[3] is not None and not callable(entry[3])) or \ + (len(entry) > 4 and entry[4] is not None and not callable(entry[4])) or \ + (len(entry) > 5 and entry[5] is not None and not callable(entry[5])): + raise CodecRegistryError,\ + 'incompatible codecs in module "%s" (%s)' % \ + (mod.__name__, mod.__file__) + if len(entry)<7 or entry[6] is None: + entry += (None,)*(6-len(entry)) + (mod.__name__.split(".", 1)[1],) + entry = codecs.CodecInfo(*entry) + + # Cache the codec registry entry + _cache[encoding] = entry + + # Register its aliases (without overwriting previously registered + # aliases) + try: + codecaliases = mod.getaliases() + except AttributeError: + pass + else: + for alias in codecaliases: + if not _aliases.has_key(alias): + _aliases[alias] = modname + + # Return the registry entry + return entry + +# Register the search_function in the Python codec registry +codecs.register(search_function) diff --git a/thirdparty/python25/Lib/encodings/aliases.py b/thirdparty/python25/Lib/encodings/aliases.py new file mode 100644 index 000000000..58d9e2886 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/aliases.py @@ -0,0 +1,508 @@ +""" Encoding Aliases Support + + This module is used by the encodings package search function to + map encodings names to module names. + + Note that the search function normalizes the encoding names before + doing the lookup, so the mapping will have to map normalized + encoding names to module names. + + Contents: + + The following aliases dictionary contains mappings of all IANA + character set names for which the Python core library provides + codecs. In addition to these, a few Python specific codec + aliases have also been added. + +""" +aliases = { + + # Please keep this list sorted alphabetically by value ! + + # ascii codec + '646' : 'ascii', + 'ansi_x3.4_1968' : 'ascii', + 'ansi_x3_4_1968' : 'ascii', # some email headers use this non-standard name + 'ansi_x3.4_1986' : 'ascii', + 'cp367' : 'ascii', + 'csascii' : 'ascii', + 'ibm367' : 'ascii', + 'iso646_us' : 'ascii', + 'iso_646.irv_1991' : 'ascii', + 'iso_ir_6' : 'ascii', + 'us' : 'ascii', + 'us_ascii' : 'ascii', + + # base64_codec codec + 'base64' : 'base64_codec', + 'base_64' : 'base64_codec', + + # big5 codec + 'big5_tw' : 'big5', + 'csbig5' : 'big5', + + # big5hkscs codec + 'big5_hkscs' : 'big5hkscs', + 'hkscs' : 'big5hkscs', + + # bz2_codec codec + 'bz2' : 'bz2_codec', + + # cp037 codec + '037' : 'cp037', + 'csibm037' : 'cp037', + 'ebcdic_cp_ca' : 'cp037', + 'ebcdic_cp_nl' : 'cp037', + 'ebcdic_cp_us' : 'cp037', + 'ebcdic_cp_wt' : 'cp037', + 'ibm037' : 'cp037', + 'ibm039' : 'cp037', + + # cp1026 codec + '1026' : 'cp1026', + 'csibm1026' : 'cp1026', + 'ibm1026' : 'cp1026', + + # cp1140 codec + '1140' : 'cp1140', + 'ibm1140' : 'cp1140', + + # cp1250 codec + '1250' : 'cp1250', + 'windows_1250' : 'cp1250', + + # cp1251 codec + '1251' : 'cp1251', + 'windows_1251' : 'cp1251', + + # cp1252 codec + '1252' : 'cp1252', + 'windows_1252' : 'cp1252', + + # cp1253 codec + '1253' : 'cp1253', + 'windows_1253' : 'cp1253', + + # cp1254 codec + '1254' : 'cp1254', + 'windows_1254' : 'cp1254', + + # cp1255 codec + '1255' : 'cp1255', + 'windows_1255' : 'cp1255', + + # cp1256 codec + '1256' : 'cp1256', + 'windows_1256' : 'cp1256', + + # cp1257 codec + '1257' : 'cp1257', + 'windows_1257' : 'cp1257', + + # cp1258 codec + '1258' : 'cp1258', + 'windows_1258' : 'cp1258', + + # cp424 codec + '424' : 'cp424', + 'csibm424' : 'cp424', + 'ebcdic_cp_he' : 'cp424', + 'ibm424' : 'cp424', + + # cp437 codec + '437' : 'cp437', + 'cspc8codepage437' : 'cp437', + 'ibm437' : 'cp437', + + # cp500 codec + '500' : 'cp500', + 'csibm500' : 'cp500', + 'ebcdic_cp_be' : 'cp500', + 'ebcdic_cp_ch' : 'cp500', + 'ibm500' : 'cp500', + + # cp775 codec + '775' : 'cp775', + 'cspc775baltic' : 'cp775', + 'ibm775' : 'cp775', + + # cp850 codec + '850' : 'cp850', + 'cspc850multilingual' : 'cp850', + 'ibm850' : 'cp850', + + # cp852 codec + '852' : 'cp852', + 'cspcp852' : 'cp852', + 'ibm852' : 'cp852', + + # cp855 codec + '855' : 'cp855', + 'csibm855' : 'cp855', + 'ibm855' : 'cp855', + + # cp857 codec + '857' : 'cp857', + 'csibm857' : 'cp857', + 'ibm857' : 'cp857', + + # cp860 codec + '860' : 'cp860', + 'csibm860' : 'cp860', + 'ibm860' : 'cp860', + + # cp861 codec + '861' : 'cp861', + 'cp_is' : 'cp861', + 'csibm861' : 'cp861', + 'ibm861' : 'cp861', + + # cp862 codec + '862' : 'cp862', + 'cspc862latinhebrew' : 'cp862', + 'ibm862' : 'cp862', + + # cp863 codec + '863' : 'cp863', + 'csibm863' : 'cp863', + 'ibm863' : 'cp863', + + # cp864 codec + '864' : 'cp864', + 'csibm864' : 'cp864', + 'ibm864' : 'cp864', + + # cp865 codec + '865' : 'cp865', + 'csibm865' : 'cp865', + 'ibm865' : 'cp865', + + # cp866 codec + '866' : 'cp866', + 'csibm866' : 'cp866', + 'ibm866' : 'cp866', + + # cp869 codec + '869' : 'cp869', + 'cp_gr' : 'cp869', + 'csibm869' : 'cp869', + 'ibm869' : 'cp869', + + # cp932 codec + '932' : 'cp932', + 'ms932' : 'cp932', + 'mskanji' : 'cp932', + 'ms_kanji' : 'cp932', + + # cp949 codec + '949' : 'cp949', + 'ms949' : 'cp949', + 'uhc' : 'cp949', + + # cp950 codec + '950' : 'cp950', + 'ms950' : 'cp950', + + # euc_jis_2004 codec + 'jisx0213' : 'euc_jis_2004', + 'eucjis2004' : 'euc_jis_2004', + 'euc_jis2004' : 'euc_jis_2004', + + # euc_jisx0213 codec + 'eucjisx0213' : 'euc_jisx0213', + + # euc_jp codec + 'eucjp' : 'euc_jp', + 'ujis' : 'euc_jp', + 'u_jis' : 'euc_jp', + + # euc_kr codec + 'euckr' : 'euc_kr', + 'korean' : 'euc_kr', + 'ksc5601' : 'euc_kr', + 'ks_c_5601' : 'euc_kr', + 'ks_c_5601_1987' : 'euc_kr', + 'ksx1001' : 'euc_kr', + 'ks_x_1001' : 'euc_kr', + + # gb18030 codec + 'gb18030_2000' : 'gb18030', + + # gb2312 codec + 'chinese' : 'gb2312', + 'csiso58gb231280' : 'gb2312', + 'euc_cn' : 'gb2312', + 'euccn' : 'gb2312', + 'eucgb2312_cn' : 'gb2312', + 'gb2312_1980' : 'gb2312', + 'gb2312_80' : 'gb2312', + 'iso_ir_58' : 'gb2312', + + # gbk codec + '936' : 'gbk', + 'cp936' : 'gbk', + 'ms936' : 'gbk', + + # hex_codec codec + 'hex' : 'hex_codec', + + # hp_roman8 codec + 'roman8' : 'hp_roman8', + 'r8' : 'hp_roman8', + 'csHPRoman8' : 'hp_roman8', + + # hz codec + 'hzgb' : 'hz', + 'hz_gb' : 'hz', + 'hz_gb_2312' : 'hz', + + # iso2022_jp codec + 'csiso2022jp' : 'iso2022_jp', + 'iso2022jp' : 'iso2022_jp', + 'iso_2022_jp' : 'iso2022_jp', + + # iso2022_jp_1 codec + 'iso2022jp_1' : 'iso2022_jp_1', + 'iso_2022_jp_1' : 'iso2022_jp_1', + + # iso2022_jp_2 codec + 'iso2022jp_2' : 'iso2022_jp_2', + 'iso_2022_jp_2' : 'iso2022_jp_2', + + # iso2022_jp_2004 codec + 'iso_2022_jp_2004' : 'iso2022_jp_2004', + 'iso2022jp_2004' : 'iso2022_jp_2004', + + # iso2022_jp_3 codec + 'iso2022jp_3' : 'iso2022_jp_3', + 'iso_2022_jp_3' : 'iso2022_jp_3', + + # iso2022_jp_ext codec + 'iso2022jp_ext' : 'iso2022_jp_ext', + 'iso_2022_jp_ext' : 'iso2022_jp_ext', + + # iso2022_kr codec + 'csiso2022kr' : 'iso2022_kr', + 'iso2022kr' : 'iso2022_kr', + 'iso_2022_kr' : 'iso2022_kr', + + # iso8859_10 codec + 'csisolatin6' : 'iso8859_10', + 'iso_8859_10' : 'iso8859_10', + 'iso_8859_10_1992' : 'iso8859_10', + 'iso_ir_157' : 'iso8859_10', + 'l6' : 'iso8859_10', + 'latin6' : 'iso8859_10', + + # iso8859_11 codec + 'thai' : 'iso8859_11', + 'iso_8859_11' : 'iso8859_11', + 'iso_8859_11_2001' : 'iso8859_11', + + # iso8859_13 codec + 'iso_8859_13' : 'iso8859_13', + + # iso8859_14 codec + 'iso_8859_14' : 'iso8859_14', + 'iso_8859_14_1998' : 'iso8859_14', + 'iso_celtic' : 'iso8859_14', + 'iso_ir_199' : 'iso8859_14', + 'l8' : 'iso8859_14', + 'latin8' : 'iso8859_14', + + # iso8859_15 codec + 'iso_8859_15' : 'iso8859_15', + + # iso8859_16 codec + 'iso_8859_16' : 'iso8859_16', + 'iso_8859_16_2001' : 'iso8859_16', + 'iso_ir_226' : 'iso8859_16', + 'l10' : 'iso8859_16', + 'latin10' : 'iso8859_16', + + # iso8859_2 codec + 'csisolatin2' : 'iso8859_2', + 'iso_8859_2' : 'iso8859_2', + 'iso_8859_2_1987' : 'iso8859_2', + 'iso_ir_101' : 'iso8859_2', + 'l2' : 'iso8859_2', + 'latin2' : 'iso8859_2', + + # iso8859_3 codec + 'csisolatin3' : 'iso8859_3', + 'iso_8859_3' : 'iso8859_3', + 'iso_8859_3_1988' : 'iso8859_3', + 'iso_ir_109' : 'iso8859_3', + 'l3' : 'iso8859_3', + 'latin3' : 'iso8859_3', + + # iso8859_4 codec + 'csisolatin4' : 'iso8859_4', + 'iso_8859_4' : 'iso8859_4', + 'iso_8859_4_1988' : 'iso8859_4', + 'iso_ir_110' : 'iso8859_4', + 'l4' : 'iso8859_4', + 'latin4' : 'iso8859_4', + + # iso8859_5 codec + 'csisolatincyrillic' : 'iso8859_5', + 'cyrillic' : 'iso8859_5', + 'iso_8859_5' : 'iso8859_5', + 'iso_8859_5_1988' : 'iso8859_5', + 'iso_ir_144' : 'iso8859_5', + + # iso8859_6 codec + 'arabic' : 'iso8859_6', + 'asmo_708' : 'iso8859_6', + 'csisolatinarabic' : 'iso8859_6', + 'ecma_114' : 'iso8859_6', + 'iso_8859_6' : 'iso8859_6', + 'iso_8859_6_1987' : 'iso8859_6', + 'iso_ir_127' : 'iso8859_6', + + # iso8859_7 codec + 'csisolatingreek' : 'iso8859_7', + 'ecma_118' : 'iso8859_7', + 'elot_928' : 'iso8859_7', + 'greek' : 'iso8859_7', + 'greek8' : 'iso8859_7', + 'iso_8859_7' : 'iso8859_7', + 'iso_8859_7_1987' : 'iso8859_7', + 'iso_ir_126' : 'iso8859_7', + + # iso8859_8 codec + 'csisolatinhebrew' : 'iso8859_8', + 'hebrew' : 'iso8859_8', + 'iso_8859_8' : 'iso8859_8', + 'iso_8859_8_1988' : 'iso8859_8', + 'iso_ir_138' : 'iso8859_8', + + # iso8859_9 codec + 'csisolatin5' : 'iso8859_9', + 'iso_8859_9' : 'iso8859_9', + 'iso_8859_9_1989' : 'iso8859_9', + 'iso_ir_148' : 'iso8859_9', + 'l5' : 'iso8859_9', + 'latin5' : 'iso8859_9', + + # johab codec + 'cp1361' : 'johab', + 'ms1361' : 'johab', + + # koi8_r codec + 'cskoi8r' : 'koi8_r', + + # latin_1 codec + # + # Note that the latin_1 codec is implemented internally in C and a + # lot faster than the charmap codec iso8859_1 which uses the same + # encoding. This is why we discourage the use of the iso8859_1 + # codec and alias it to latin_1 instead. + # + '8859' : 'latin_1', + 'cp819' : 'latin_1', + 'csisolatin1' : 'latin_1', + 'ibm819' : 'latin_1', + 'iso8859' : 'latin_1', + 'iso8859_1' : 'latin_1', + 'iso_8859_1' : 'latin_1', + 'iso_8859_1_1987' : 'latin_1', + 'iso_ir_100' : 'latin_1', + 'l1' : 'latin_1', + 'latin' : 'latin_1', + 'latin1' : 'latin_1', + + # mac_cyrillic codec + 'maccyrillic' : 'mac_cyrillic', + + # mac_greek codec + 'macgreek' : 'mac_greek', + + # mac_iceland codec + 'maciceland' : 'mac_iceland', + + # mac_latin2 codec + 'maccentraleurope' : 'mac_latin2', + 'maclatin2' : 'mac_latin2', + + # mac_roman codec + 'macroman' : 'mac_roman', + + # mac_turkish codec + 'macturkish' : 'mac_turkish', + + # mbcs codec + 'dbcs' : 'mbcs', + + # ptcp154 codec + 'csptcp154' : 'ptcp154', + 'pt154' : 'ptcp154', + 'cp154' : 'ptcp154', + 'cyrillic-asian' : 'ptcp154', + + # quopri_codec codec + 'quopri' : 'quopri_codec', + 'quoted_printable' : 'quopri_codec', + 'quotedprintable' : 'quopri_codec', + + # rot_13 codec + 'rot13' : 'rot_13', + + # shift_jis codec + 'csshiftjis' : 'shift_jis', + 'shiftjis' : 'shift_jis', + 'sjis' : 'shift_jis', + 's_jis' : 'shift_jis', + + # shift_jis_2004 codec + 'shiftjis2004' : 'shift_jis_2004', + 'sjis_2004' : 'shift_jis_2004', + 's_jis_2004' : 'shift_jis_2004', + + # shift_jisx0213 codec + 'shiftjisx0213' : 'shift_jisx0213', + 'sjisx0213' : 'shift_jisx0213', + 's_jisx0213' : 'shift_jisx0213', + + # tactis codec + 'tis260' : 'tactis', + + # tis_620 codec + 'tis620' : 'tis_620', + 'tis_620_0' : 'tis_620', + 'tis_620_2529_0' : 'tis_620', + 'tis_620_2529_1' : 'tis_620', + 'iso_ir_166' : 'tis_620', + + # utf_16 codec + 'u16' : 'utf_16', + 'utf16' : 'utf_16', + + # utf_16_be codec + 'unicodebigunmarked' : 'utf_16_be', + 'utf_16be' : 'utf_16_be', + + # utf_16_le codec + 'unicodelittleunmarked' : 'utf_16_le', + 'utf_16le' : 'utf_16_le', + + # utf_7 codec + 'u7' : 'utf_7', + 'utf7' : 'utf_7', + 'unicode_1_1_utf_7' : 'utf_7', + + # utf_8 codec + 'u8' : 'utf_8', + 'utf' : 'utf_8', + 'utf8' : 'utf_8', + 'utf8_ucs2' : 'utf_8', + 'utf8_ucs4' : 'utf_8', + + # uu_codec codec + 'uu' : 'uu_codec', + + # zlib_codec codec + 'zip' : 'zlib_codec', + 'zlib' : 'zlib_codec', + +} diff --git a/thirdparty/python25/Lib/encodings/ascii.py b/thirdparty/python25/Lib/encodings/ascii.py new file mode 100644 index 000000000..df0d66d4a --- /dev/null +++ b/thirdparty/python25/Lib/encodings/ascii.py @@ -0,0 +1,50 @@ +""" Python 'ascii' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + # Note: Binding these as C functions will result in the class not + # converting them to methods. This is intended. + encode = codecs.ascii_encode + decode = codecs.ascii_decode + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.ascii_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.ascii_decode(input, self.errors)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +class StreamConverter(StreamWriter,StreamReader): + + encode = codecs.ascii_decode + decode = codecs.ascii_encode + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='ascii', + encode=Codec.encode, + decode=Codec.decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/thirdparty/python25/Lib/encodings/base64_codec.py b/thirdparty/python25/Lib/encodings/base64_codec.py new file mode 100644 index 000000000..209263796 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/base64_codec.py @@ -0,0 +1,79 @@ +""" Python 'base64_codec' Codec - base64 content transfer encoding + + Unlike most of the other codecs which target Unicode, this codec + will return Python string objects for both encode and decode. + + Written by Marc-Andre Lemburg (mal@lemburg.com). + +""" +import codecs, base64 + +### Codec APIs + +def base64_encode(input,errors='strict'): + + """ Encodes the object input and returns a tuple (output + object, length consumed). + + errors defines the error handling to apply. It defaults to + 'strict' handling which is the only currently supported + error handling for this codec. + + """ + assert errors == 'strict' + output = base64.encodestring(input) + return (output, len(input)) + +def base64_decode(input,errors='strict'): + + """ Decodes the object input and returns a tuple (output + object, length consumed). + + input must be an object which provides the bf_getreadbuf + buffer slot. Python strings, buffer objects and memory + mapped files are examples of objects providing this slot. + + errors defines the error handling to apply. It defaults to + 'strict' handling which is the only currently supported + error handling for this codec. + + """ + assert errors == 'strict' + output = base64.decodestring(input) + return (output, len(input)) + +class Codec(codecs.Codec): + + def encode(self, input,errors='strict'): + return base64_encode(input,errors) + def decode(self, input,errors='strict'): + return base64_decode(input,errors) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + assert self.errors == 'strict' + return base64.encodestring(input) + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + assert self.errors == 'strict' + return base64.decodestring(input) + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='base64', + encode=base64_encode, + decode=base64_decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/thirdparty/python25/Lib/encodings/big5.py b/thirdparty/python25/Lib/encodings/big5.py new file mode 100644 index 000000000..1be2c297d --- /dev/null +++ b/thirdparty/python25/Lib/encodings/big5.py @@ -0,0 +1,39 @@ +# +# big5.py: Python Unicode Codec for BIG5 +# +# Written by Hye-Shik Chang +# + +import _codecs_tw, codecs +import _multibytecodec as mbc + +codec = _codecs_tw.getcodec('big5') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='big5', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/big5hkscs.py b/thirdparty/python25/Lib/encodings/big5hkscs.py new file mode 100644 index 000000000..ddfcaa6b3 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/big5hkscs.py @@ -0,0 +1,39 @@ +# +# big5hkscs.py: Python Unicode Codec for BIG5HKSCS +# +# Written by Hye-Shik Chang +# + +import _codecs_hk, codecs +import _multibytecodec as mbc + +codec = _codecs_hk.getcodec('big5hkscs') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='big5hkscs', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/bz2_codec.py b/thirdparty/python25/Lib/encodings/bz2_codec.py new file mode 100644 index 000000000..04020db7e --- /dev/null +++ b/thirdparty/python25/Lib/encodings/bz2_codec.py @@ -0,0 +1,102 @@ +""" Python 'bz2_codec' Codec - bz2 compression encoding + + Unlike most of the other codecs which target Unicode, this codec + will return Python string objects for both encode and decode. + + Adapted by Raymond Hettinger from zlib_codec.py which was written + by Marc-Andre Lemburg (mal@lemburg.com). + +""" +import codecs +import bz2 # this codec needs the optional bz2 module ! + +### Codec APIs + +def bz2_encode(input,errors='strict'): + + """ Encodes the object input and returns a tuple (output + object, length consumed). + + errors defines the error handling to apply. It defaults to + 'strict' handling which is the only currently supported + error handling for this codec. + + """ + assert errors == 'strict' + output = bz2.compress(input) + return (output, len(input)) + +def bz2_decode(input,errors='strict'): + + """ Decodes the object input and returns a tuple (output + object, length consumed). + + input must be an object which provides the bf_getreadbuf + buffer slot. Python strings, buffer objects and memory + mapped files are examples of objects providing this slot. + + errors defines the error handling to apply. It defaults to + 'strict' handling which is the only currently supported + error handling for this codec. + + """ + assert errors == 'strict' + output = bz2.decompress(input) + return (output, len(input)) + +class Codec(codecs.Codec): + + def encode(self, input, errors='strict'): + return bz2_encode(input, errors) + def decode(self, input, errors='strict'): + return bz2_decode(input, errors) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def __init__(self, errors='strict'): + assert errors == 'strict' + self.errors = errors + self.compressobj = bz2.BZ2Compressor() + + def encode(self, input, final=False): + if final: + c = self.compressobj.compress(input) + return c + self.compressobj.flush() + else: + return self.compressobj.compress(input) + + def reset(self): + self.compressobj = bz2.BZ2Compressor() + +class IncrementalDecoder(codecs.IncrementalDecoder): + def __init__(self, errors='strict'): + assert errors == 'strict' + self.errors = errors + self.decompressobj = bz2.BZ2Decompressor() + + def decode(self, input, final=False): + try: + return self.decompressobj.decompress(input) + except EOFError: + return '' + + def reset(self): + self.decompressobj = bz2.BZ2Decompressor() + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name="bz2", + encode=bz2_encode, + decode=bz2_decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/thirdparty/python25/Lib/encodings/charmap.py b/thirdparty/python25/Lib/encodings/charmap.py new file mode 100644 index 000000000..96974938b --- /dev/null +++ b/thirdparty/python25/Lib/encodings/charmap.py @@ -0,0 +1,69 @@ +""" Generic Python Character Mapping Codec. + + Use this codec directly rather than through the automatic + conversion mechanisms supplied by unicode() and .encode(). + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + # Note: Binding these as C functions will result in the class not + # converting them to methods. This is intended. + encode = codecs.charmap_encode + decode = codecs.charmap_decode + +class IncrementalEncoder(codecs.IncrementalEncoder): + def __init__(self, errors='strict', mapping=None): + codecs.IncrementalEncoder.__init__(self, errors) + self.mapping = mapping + + def encode(self, input, final=False): + return codecs.charmap_encode(input, self.errors, self.mapping)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def __init__(self, errors='strict', mapping=None): + codecs.IncrementalDecoder.__init__(self, errors) + self.mapping = mapping + + def decode(self, input, final=False): + return codecs.charmap_decode(input, self.errors, self.mapping)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + + def __init__(self,stream,errors='strict',mapping=None): + codecs.StreamWriter.__init__(self,stream,errors) + self.mapping = mapping + + def encode(self,input,errors='strict'): + return Codec.encode(input,errors,self.mapping) + +class StreamReader(Codec,codecs.StreamReader): + + def __init__(self,stream,errors='strict',mapping=None): + codecs.StreamReader.__init__(self,stream,errors) + self.mapping = mapping + + def decode(self,input,errors='strict'): + return Codec.decode(input,errors,self.mapping) + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='charmap', + encode=Codec.encode, + decode=Codec.decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/thirdparty/python25/Lib/encodings/cp037.py b/thirdparty/python25/Lib/encodings/cp037.py new file mode 100644 index 000000000..c617a60ef --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp037.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp037 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP037.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp037', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x9c' # 0x04 -> CONTROL + u'\t' # 0x05 -> HORIZONTAL TABULATION + u'\x86' # 0x06 -> CONTROL + u'\x7f' # 0x07 -> DELETE + u'\x97' # 0x08 -> CONTROL + u'\x8d' # 0x09 -> CONTROL + u'\x8e' # 0x0A -> CONTROL + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x9d' # 0x14 -> CONTROL + u'\x85' # 0x15 -> CONTROL + u'\x08' # 0x16 -> BACKSPACE + u'\x87' # 0x17 -> CONTROL + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x92' # 0x1A -> CONTROL + u'\x8f' # 0x1B -> CONTROL + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u'\x80' # 0x20 -> CONTROL + u'\x81' # 0x21 -> CONTROL + u'\x82' # 0x22 -> CONTROL + u'\x83' # 0x23 -> CONTROL + u'\x84' # 0x24 -> CONTROL + u'\n' # 0x25 -> LINE FEED + u'\x17' # 0x26 -> END OF TRANSMISSION BLOCK + u'\x1b' # 0x27 -> ESCAPE + u'\x88' # 0x28 -> CONTROL + u'\x89' # 0x29 -> CONTROL + u'\x8a' # 0x2A -> CONTROL + u'\x8b' # 0x2B -> CONTROL + u'\x8c' # 0x2C -> CONTROL + u'\x05' # 0x2D -> ENQUIRY + u'\x06' # 0x2E -> ACKNOWLEDGE + u'\x07' # 0x2F -> BELL + u'\x90' # 0x30 -> CONTROL + u'\x91' # 0x31 -> CONTROL + u'\x16' # 0x32 -> SYNCHRONOUS IDLE + u'\x93' # 0x33 -> CONTROL + u'\x94' # 0x34 -> CONTROL + u'\x95' # 0x35 -> CONTROL + u'\x96' # 0x36 -> CONTROL + u'\x04' # 0x37 -> END OF TRANSMISSION + u'\x98' # 0x38 -> CONTROL + u'\x99' # 0x39 -> CONTROL + u'\x9a' # 0x3A -> CONTROL + u'\x9b' # 0x3B -> CONTROL + u'\x14' # 0x3C -> DEVICE CONTROL FOUR + u'\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE + u'\x9e' # 0x3E -> CONTROL + u'\x1a' # 0x3F -> SUBSTITUTE + u' ' # 0x40 -> SPACE + u'\xa0' # 0x41 -> NO-BREAK SPACE + u'\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x43 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE + u'\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe7' # 0x48 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE + u'\xa2' # 0x4A -> CENT SIGN + u'.' # 0x4B -> FULL STOP + u'<' # 0x4C -> LESS-THAN SIGN + u'(' # 0x4D -> LEFT PARENTHESIS + u'+' # 0x4E -> PLUS SIGN + u'|' # 0x4F -> VERTICAL LINE + u'&' # 0x50 -> AMPERSAND + u'\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE + u'\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE + u'\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE + u'\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE + u'\xdf' # 0x59 -> LATIN SMALL LETTER SHARP S (GERMAN) + u'!' # 0x5A -> EXCLAMATION MARK + u'$' # 0x5B -> DOLLAR SIGN + u'*' # 0x5C -> ASTERISK + u')' # 0x5D -> RIGHT PARENTHESIS + u';' # 0x5E -> SEMICOLON + u'\xac' # 0x5F -> NOT SIGN + u'-' # 0x60 -> HYPHEN-MINUS + u'/' # 0x61 -> SOLIDUS + u'\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xc4' # 0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE + u'\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc7' # 0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xa6' # 0x6A -> BROKEN BAR + u',' # 0x6B -> COMMA + u'%' # 0x6C -> PERCENT SIGN + u'_' # 0x6D -> LOW LINE + u'>' # 0x6E -> GREATER-THAN SIGN + u'?' # 0x6F -> QUESTION MARK + u'\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE + u'\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE + u'`' # 0x79 -> GRAVE ACCENT + u':' # 0x7A -> COLON + u'#' # 0x7B -> NUMBER SIGN + u'@' # 0x7C -> COMMERCIAL AT + u"'" # 0x7D -> APOSTROPHE + u'=' # 0x7E -> EQUALS SIGN + u'"' # 0x7F -> QUOTATION MARK + u'\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE + u'a' # 0x81 -> LATIN SMALL LETTER A + u'b' # 0x82 -> LATIN SMALL LETTER B + u'c' # 0x83 -> LATIN SMALL LETTER C + u'd' # 0x84 -> LATIN SMALL LETTER D + u'e' # 0x85 -> LATIN SMALL LETTER E + u'f' # 0x86 -> LATIN SMALL LETTER F + u'g' # 0x87 -> LATIN SMALL LETTER G + u'h' # 0x88 -> LATIN SMALL LETTER H + u'i' # 0x89 -> LATIN SMALL LETTER I + u'\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xf0' # 0x8C -> LATIN SMALL LETTER ETH (ICELANDIC) + u'\xfd' # 0x8D -> LATIN SMALL LETTER Y WITH ACUTE + u'\xfe' # 0x8E -> LATIN SMALL LETTER THORN (ICELANDIC) + u'\xb1' # 0x8F -> PLUS-MINUS SIGN + u'\xb0' # 0x90 -> DEGREE SIGN + u'j' # 0x91 -> LATIN SMALL LETTER J + u'k' # 0x92 -> LATIN SMALL LETTER K + u'l' # 0x93 -> LATIN SMALL LETTER L + u'm' # 0x94 -> LATIN SMALL LETTER M + u'n' # 0x95 -> LATIN SMALL LETTER N + u'o' # 0x96 -> LATIN SMALL LETTER O + u'p' # 0x97 -> LATIN SMALL LETTER P + u'q' # 0x98 -> LATIN SMALL LETTER Q + u'r' # 0x99 -> LATIN SMALL LETTER R + u'\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR + u'\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR + u'\xe6' # 0x9C -> LATIN SMALL LIGATURE AE + u'\xb8' # 0x9D -> CEDILLA + u'\xc6' # 0x9E -> LATIN CAPITAL LIGATURE AE + u'\xa4' # 0x9F -> CURRENCY SIGN + u'\xb5' # 0xA0 -> MICRO SIGN + u'~' # 0xA1 -> TILDE + u's' # 0xA2 -> LATIN SMALL LETTER S + u't' # 0xA3 -> LATIN SMALL LETTER T + u'u' # 0xA4 -> LATIN SMALL LETTER U + u'v' # 0xA5 -> LATIN SMALL LETTER V + u'w' # 0xA6 -> LATIN SMALL LETTER W + u'x' # 0xA7 -> LATIN SMALL LETTER X + u'y' # 0xA8 -> LATIN SMALL LETTER Y + u'z' # 0xA9 -> LATIN SMALL LETTER Z + u'\xa1' # 0xAA -> INVERTED EXCLAMATION MARK + u'\xbf' # 0xAB -> INVERTED QUESTION MARK + u'\xd0' # 0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC) + u'\xdd' # 0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE + u'\xde' # 0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC) + u'\xae' # 0xAF -> REGISTERED SIGN + u'^' # 0xB0 -> CIRCUMFLEX ACCENT + u'\xa3' # 0xB1 -> POUND SIGN + u'\xa5' # 0xB2 -> YEN SIGN + u'\xb7' # 0xB3 -> MIDDLE DOT + u'\xa9' # 0xB4 -> COPYRIGHT SIGN + u'\xa7' # 0xB5 -> SECTION SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER + u'\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF + u'\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS + u'[' # 0xBA -> LEFT SQUARE BRACKET + u']' # 0xBB -> RIGHT SQUARE BRACKET + u'\xaf' # 0xBC -> MACRON + u'\xa8' # 0xBD -> DIAERESIS + u'\xb4' # 0xBE -> ACUTE ACCENT + u'\xd7' # 0xBF -> MULTIPLICATION SIGN + u'{' # 0xC0 -> LEFT CURLY BRACKET + u'A' # 0xC1 -> LATIN CAPITAL LETTER A + u'B' # 0xC2 -> LATIN CAPITAL LETTER B + u'C' # 0xC3 -> LATIN CAPITAL LETTER C + u'D' # 0xC4 -> LATIN CAPITAL LETTER D + u'E' # 0xC5 -> LATIN CAPITAL LETTER E + u'F' # 0xC6 -> LATIN CAPITAL LETTER F + u'G' # 0xC7 -> LATIN CAPITAL LETTER G + u'H' # 0xC8 -> LATIN CAPITAL LETTER H + u'I' # 0xC9 -> LATIN CAPITAL LETTER I + u'\xad' # 0xCA -> SOFT HYPHEN + u'\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0xCC -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE + u'\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE + u'\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE + u'}' # 0xD0 -> RIGHT CURLY BRACKET + u'J' # 0xD1 -> LATIN CAPITAL LETTER J + u'K' # 0xD2 -> LATIN CAPITAL LETTER K + u'L' # 0xD3 -> LATIN CAPITAL LETTER L + u'M' # 0xD4 -> LATIN CAPITAL LETTER M + u'N' # 0xD5 -> LATIN CAPITAL LETTER N + u'O' # 0xD6 -> LATIN CAPITAL LETTER O + u'P' # 0xD7 -> LATIN CAPITAL LETTER P + u'Q' # 0xD8 -> LATIN CAPITAL LETTER Q + u'R' # 0xD9 -> LATIN CAPITAL LETTER R + u'\xb9' # 0xDA -> SUPERSCRIPT ONE + u'\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0xDC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE + u'\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE + u'\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS + u'\\' # 0xE0 -> REVERSE SOLIDUS + u'\xf7' # 0xE1 -> DIVISION SIGN + u'S' # 0xE2 -> LATIN CAPITAL LETTER S + u'T' # 0xE3 -> LATIN CAPITAL LETTER T + u'U' # 0xE4 -> LATIN CAPITAL LETTER U + u'V' # 0xE5 -> LATIN CAPITAL LETTER V + u'W' # 0xE6 -> LATIN CAPITAL LETTER W + u'X' # 0xE7 -> LATIN CAPITAL LETTER X + u'Y' # 0xE8 -> LATIN CAPITAL LETTER Y + u'Z' # 0xE9 -> LATIN CAPITAL LETTER Z + u'\xb2' # 0xEA -> SUPERSCRIPT TWO + u'\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\xd6' # 0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE + u'0' # 0xF0 -> DIGIT ZERO + u'1' # 0xF1 -> DIGIT ONE + u'2' # 0xF2 -> DIGIT TWO + u'3' # 0xF3 -> DIGIT THREE + u'4' # 0xF4 -> DIGIT FOUR + u'5' # 0xF5 -> DIGIT FIVE + u'6' # 0xF6 -> DIGIT SIX + u'7' # 0xF7 -> DIGIT SEVEN + u'8' # 0xF8 -> DIGIT EIGHT + u'9' # 0xF9 -> DIGIT NINE + u'\xb3' # 0xFA -> SUPERSCRIPT THREE + u'\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xdc' # 0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE + u'\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE + u'\x9f' # 0xFF -> CONTROL +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp1006.py b/thirdparty/python25/Lib/encodings/cp1006.py new file mode 100644 index 000000000..c649b7619 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp1006.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1006 generated from 'MAPPINGS/VENDORS/MISC/CP1006.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1006', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\x80' # 0x80 -> + u'\x81' # 0x81 -> + u'\x82' # 0x82 -> + u'\x83' # 0x83 -> + u'\x84' # 0x84 -> + u'\x85' # 0x85 -> + u'\x86' # 0x86 -> + u'\x87' # 0x87 -> + u'\x88' # 0x88 -> + u'\x89' # 0x89 -> + u'\x8a' # 0x8A -> + u'\x8b' # 0x8B -> + u'\x8c' # 0x8C -> + u'\x8d' # 0x8D -> + u'\x8e' # 0x8E -> + u'\x8f' # 0x8F -> + u'\x90' # 0x90 -> + u'\x91' # 0x91 -> + u'\x92' # 0x92 -> + u'\x93' # 0x93 -> + u'\x94' # 0x94 -> + u'\x95' # 0x95 -> + u'\x96' # 0x96 -> + u'\x97' # 0x97 -> + u'\x98' # 0x98 -> + u'\x99' # 0x99 -> + u'\x9a' # 0x9A -> + u'\x9b' # 0x9B -> + u'\x9c' # 0x9C -> + u'\x9d' # 0x9D -> + u'\x9e' # 0x9E -> + u'\x9f' # 0x9F -> + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\u06f0' # 0xA1 -> EXTENDED ARABIC-INDIC DIGIT ZERO + u'\u06f1' # 0xA2 -> EXTENDED ARABIC-INDIC DIGIT ONE + u'\u06f2' # 0xA3 -> EXTENDED ARABIC-INDIC DIGIT TWO + u'\u06f3' # 0xA4 -> EXTENDED ARABIC-INDIC DIGIT THREE + u'\u06f4' # 0xA5 -> EXTENDED ARABIC-INDIC DIGIT FOUR + u'\u06f5' # 0xA6 -> EXTENDED ARABIC-INDIC DIGIT FIVE + u'\u06f6' # 0xA7 -> EXTENDED ARABIC-INDIC DIGIT SIX + u'\u06f7' # 0xA8 -> EXTENDED ARABIC-INDIC DIGIT SEVEN + u'\u06f8' # 0xA9 -> EXTENDED ARABIC-INDIC DIGIT EIGHT + u'\u06f9' # 0xAA -> EXTENDED ARABIC-INDIC DIGIT NINE + u'\u060c' # 0xAB -> ARABIC COMMA + u'\u061b' # 0xAC -> ARABIC SEMICOLON + u'\xad' # 0xAD -> SOFT HYPHEN + u'\u061f' # 0xAE -> ARABIC QUESTION MARK + u'\ufe81' # 0xAF -> ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM + u'\ufe8d' # 0xB0 -> ARABIC LETTER ALEF ISOLATED FORM + u'\ufe8e' # 0xB1 -> ARABIC LETTER ALEF FINAL FORM + u'\ufe8e' # 0xB2 -> ARABIC LETTER ALEF FINAL FORM + u'\ufe8f' # 0xB3 -> ARABIC LETTER BEH ISOLATED FORM + u'\ufe91' # 0xB4 -> ARABIC LETTER BEH INITIAL FORM + u'\ufb56' # 0xB5 -> ARABIC LETTER PEH ISOLATED FORM + u'\ufb58' # 0xB6 -> ARABIC LETTER PEH INITIAL FORM + u'\ufe93' # 0xB7 -> ARABIC LETTER TEH MARBUTA ISOLATED FORM + u'\ufe95' # 0xB8 -> ARABIC LETTER TEH ISOLATED FORM + u'\ufe97' # 0xB9 -> ARABIC LETTER TEH INITIAL FORM + u'\ufb66' # 0xBA -> ARABIC LETTER TTEH ISOLATED FORM + u'\ufb68' # 0xBB -> ARABIC LETTER TTEH INITIAL FORM + u'\ufe99' # 0xBC -> ARABIC LETTER THEH ISOLATED FORM + u'\ufe9b' # 0xBD -> ARABIC LETTER THEH INITIAL FORM + u'\ufe9d' # 0xBE -> ARABIC LETTER JEEM ISOLATED FORM + u'\ufe9f' # 0xBF -> ARABIC LETTER JEEM INITIAL FORM + u'\ufb7a' # 0xC0 -> ARABIC LETTER TCHEH ISOLATED FORM + u'\ufb7c' # 0xC1 -> ARABIC LETTER TCHEH INITIAL FORM + u'\ufea1' # 0xC2 -> ARABIC LETTER HAH ISOLATED FORM + u'\ufea3' # 0xC3 -> ARABIC LETTER HAH INITIAL FORM + u'\ufea5' # 0xC4 -> ARABIC LETTER KHAH ISOLATED FORM + u'\ufea7' # 0xC5 -> ARABIC LETTER KHAH INITIAL FORM + u'\ufea9' # 0xC6 -> ARABIC LETTER DAL ISOLATED FORM + u'\ufb84' # 0xC7 -> ARABIC LETTER DAHAL ISOLATED FORMN + u'\ufeab' # 0xC8 -> ARABIC LETTER THAL ISOLATED FORM + u'\ufead' # 0xC9 -> ARABIC LETTER REH ISOLATED FORM + u'\ufb8c' # 0xCA -> ARABIC LETTER RREH ISOLATED FORM + u'\ufeaf' # 0xCB -> ARABIC LETTER ZAIN ISOLATED FORM + u'\ufb8a' # 0xCC -> ARABIC LETTER JEH ISOLATED FORM + u'\ufeb1' # 0xCD -> ARABIC LETTER SEEN ISOLATED FORM + u'\ufeb3' # 0xCE -> ARABIC LETTER SEEN INITIAL FORM + u'\ufeb5' # 0xCF -> ARABIC LETTER SHEEN ISOLATED FORM + u'\ufeb7' # 0xD0 -> ARABIC LETTER SHEEN INITIAL FORM + u'\ufeb9' # 0xD1 -> ARABIC LETTER SAD ISOLATED FORM + u'\ufebb' # 0xD2 -> ARABIC LETTER SAD INITIAL FORM + u'\ufebd' # 0xD3 -> ARABIC LETTER DAD ISOLATED FORM + u'\ufebf' # 0xD4 -> ARABIC LETTER DAD INITIAL FORM + u'\ufec1' # 0xD5 -> ARABIC LETTER TAH ISOLATED FORM + u'\ufec5' # 0xD6 -> ARABIC LETTER ZAH ISOLATED FORM + u'\ufec9' # 0xD7 -> ARABIC LETTER AIN ISOLATED FORM + u'\ufeca' # 0xD8 -> ARABIC LETTER AIN FINAL FORM + u'\ufecb' # 0xD9 -> ARABIC LETTER AIN INITIAL FORM + u'\ufecc' # 0xDA -> ARABIC LETTER AIN MEDIAL FORM + u'\ufecd' # 0xDB -> ARABIC LETTER GHAIN ISOLATED FORM + u'\ufece' # 0xDC -> ARABIC LETTER GHAIN FINAL FORM + u'\ufecf' # 0xDD -> ARABIC LETTER GHAIN INITIAL FORM + u'\ufed0' # 0xDE -> ARABIC LETTER GHAIN MEDIAL FORM + u'\ufed1' # 0xDF -> ARABIC LETTER FEH ISOLATED FORM + u'\ufed3' # 0xE0 -> ARABIC LETTER FEH INITIAL FORM + u'\ufed5' # 0xE1 -> ARABIC LETTER QAF ISOLATED FORM + u'\ufed7' # 0xE2 -> ARABIC LETTER QAF INITIAL FORM + u'\ufed9' # 0xE3 -> ARABIC LETTER KAF ISOLATED FORM + u'\ufedb' # 0xE4 -> ARABIC LETTER KAF INITIAL FORM + u'\ufb92' # 0xE5 -> ARABIC LETTER GAF ISOLATED FORM + u'\ufb94' # 0xE6 -> ARABIC LETTER GAF INITIAL FORM + u'\ufedd' # 0xE7 -> ARABIC LETTER LAM ISOLATED FORM + u'\ufedf' # 0xE8 -> ARABIC LETTER LAM INITIAL FORM + u'\ufee0' # 0xE9 -> ARABIC LETTER LAM MEDIAL FORM + u'\ufee1' # 0xEA -> ARABIC LETTER MEEM ISOLATED FORM + u'\ufee3' # 0xEB -> ARABIC LETTER MEEM INITIAL FORM + u'\ufb9e' # 0xEC -> ARABIC LETTER NOON GHUNNA ISOLATED FORM + u'\ufee5' # 0xED -> ARABIC LETTER NOON ISOLATED FORM + u'\ufee7' # 0xEE -> ARABIC LETTER NOON INITIAL FORM + u'\ufe85' # 0xEF -> ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM + u'\ufeed' # 0xF0 -> ARABIC LETTER WAW ISOLATED FORM + u'\ufba6' # 0xF1 -> ARABIC LETTER HEH GOAL ISOLATED FORM + u'\ufba8' # 0xF2 -> ARABIC LETTER HEH GOAL INITIAL FORM + u'\ufba9' # 0xF3 -> ARABIC LETTER HEH GOAL MEDIAL FORM + u'\ufbaa' # 0xF4 -> ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM + u'\ufe80' # 0xF5 -> ARABIC LETTER HAMZA ISOLATED FORM + u'\ufe89' # 0xF6 -> ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM + u'\ufe8a' # 0xF7 -> ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM + u'\ufe8b' # 0xF8 -> ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM + u'\ufef1' # 0xF9 -> ARABIC LETTER YEH ISOLATED FORM + u'\ufef2' # 0xFA -> ARABIC LETTER YEH FINAL FORM + u'\ufef3' # 0xFB -> ARABIC LETTER YEH INITIAL FORM + u'\ufbb0' # 0xFC -> ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM + u'\ufbae' # 0xFD -> ARABIC LETTER YEH BARREE ISOLATED FORM + u'\ufe7c' # 0xFE -> ARABIC SHADDA ISOLATED FORM + u'\ufe7d' # 0xFF -> ARABIC SHADDA MEDIAL FORM +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp1026.py b/thirdparty/python25/Lib/encodings/cp1026.py new file mode 100644 index 000000000..bc2a89097 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp1026.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1026 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP1026.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1026', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x9c' # 0x04 -> CONTROL + u'\t' # 0x05 -> HORIZONTAL TABULATION + u'\x86' # 0x06 -> CONTROL + u'\x7f' # 0x07 -> DELETE + u'\x97' # 0x08 -> CONTROL + u'\x8d' # 0x09 -> CONTROL + u'\x8e' # 0x0A -> CONTROL + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x9d' # 0x14 -> CONTROL + u'\x85' # 0x15 -> CONTROL + u'\x08' # 0x16 -> BACKSPACE + u'\x87' # 0x17 -> CONTROL + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x92' # 0x1A -> CONTROL + u'\x8f' # 0x1B -> CONTROL + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u'\x80' # 0x20 -> CONTROL + u'\x81' # 0x21 -> CONTROL + u'\x82' # 0x22 -> CONTROL + u'\x83' # 0x23 -> CONTROL + u'\x84' # 0x24 -> CONTROL + u'\n' # 0x25 -> LINE FEED + u'\x17' # 0x26 -> END OF TRANSMISSION BLOCK + u'\x1b' # 0x27 -> ESCAPE + u'\x88' # 0x28 -> CONTROL + u'\x89' # 0x29 -> CONTROL + u'\x8a' # 0x2A -> CONTROL + u'\x8b' # 0x2B -> CONTROL + u'\x8c' # 0x2C -> CONTROL + u'\x05' # 0x2D -> ENQUIRY + u'\x06' # 0x2E -> ACKNOWLEDGE + u'\x07' # 0x2F -> BELL + u'\x90' # 0x30 -> CONTROL + u'\x91' # 0x31 -> CONTROL + u'\x16' # 0x32 -> SYNCHRONOUS IDLE + u'\x93' # 0x33 -> CONTROL + u'\x94' # 0x34 -> CONTROL + u'\x95' # 0x35 -> CONTROL + u'\x96' # 0x36 -> CONTROL + u'\x04' # 0x37 -> END OF TRANSMISSION + u'\x98' # 0x38 -> CONTROL + u'\x99' # 0x39 -> CONTROL + u'\x9a' # 0x3A -> CONTROL + u'\x9b' # 0x3B -> CONTROL + u'\x14' # 0x3C -> DEVICE CONTROL FOUR + u'\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE + u'\x9e' # 0x3E -> CONTROL + u'\x1a' # 0x3F -> SUBSTITUTE + u' ' # 0x40 -> SPACE + u'\xa0' # 0x41 -> NO-BREAK SPACE + u'\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x43 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE + u'\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE + u'{' # 0x48 -> LEFT CURLY BRACKET + u'\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE + u'\xc7' # 0x4A -> LATIN CAPITAL LETTER C WITH CEDILLA + u'.' # 0x4B -> FULL STOP + u'<' # 0x4C -> LESS-THAN SIGN + u'(' # 0x4D -> LEFT PARENTHESIS + u'+' # 0x4E -> PLUS SIGN + u'!' # 0x4F -> EXCLAMATION MARK + u'&' # 0x50 -> AMPERSAND + u'\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE + u'\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE + u'\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE + u'\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE + u'\xdf' # 0x59 -> LATIN SMALL LETTER SHARP S (GERMAN) + u'\u011e' # 0x5A -> LATIN CAPITAL LETTER G WITH BREVE + u'\u0130' # 0x5B -> LATIN CAPITAL LETTER I WITH DOT ABOVE + u'*' # 0x5C -> ASTERISK + u')' # 0x5D -> RIGHT PARENTHESIS + u';' # 0x5E -> SEMICOLON + u'^' # 0x5F -> CIRCUMFLEX ACCENT + u'-' # 0x60 -> HYPHEN-MINUS + u'/' # 0x61 -> SOLIDUS + u'\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xc4' # 0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE + u'\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'[' # 0x68 -> LEFT SQUARE BRACKET + u'\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE + u'\u015f' # 0x6A -> LATIN SMALL LETTER S WITH CEDILLA + u',' # 0x6B -> COMMA + u'%' # 0x6C -> PERCENT SIGN + u'_' # 0x6D -> LOW LINE + u'>' # 0x6E -> GREATER-THAN SIGN + u'?' # 0x6F -> QUESTION MARK + u'\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE + u'\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE + u'\u0131' # 0x79 -> LATIN SMALL LETTER DOTLESS I + u':' # 0x7A -> COLON + u'\xd6' # 0x7B -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\u015e' # 0x7C -> LATIN CAPITAL LETTER S WITH CEDILLA + u"'" # 0x7D -> APOSTROPHE + u'=' # 0x7E -> EQUALS SIGN + u'\xdc' # 0x7F -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE + u'a' # 0x81 -> LATIN SMALL LETTER A + u'b' # 0x82 -> LATIN SMALL LETTER B + u'c' # 0x83 -> LATIN SMALL LETTER C + u'd' # 0x84 -> LATIN SMALL LETTER D + u'e' # 0x85 -> LATIN SMALL LETTER E + u'f' # 0x86 -> LATIN SMALL LETTER F + u'g' # 0x87 -> LATIN SMALL LETTER G + u'h' # 0x88 -> LATIN SMALL LETTER H + u'i' # 0x89 -> LATIN SMALL LETTER I + u'\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'}' # 0x8C -> RIGHT CURLY BRACKET + u'`' # 0x8D -> GRAVE ACCENT + u'\xa6' # 0x8E -> BROKEN BAR + u'\xb1' # 0x8F -> PLUS-MINUS SIGN + u'\xb0' # 0x90 -> DEGREE SIGN + u'j' # 0x91 -> LATIN SMALL LETTER J + u'k' # 0x92 -> LATIN SMALL LETTER K + u'l' # 0x93 -> LATIN SMALL LETTER L + u'm' # 0x94 -> LATIN SMALL LETTER M + u'n' # 0x95 -> LATIN SMALL LETTER N + u'o' # 0x96 -> LATIN SMALL LETTER O + u'p' # 0x97 -> LATIN SMALL LETTER P + u'q' # 0x98 -> LATIN SMALL LETTER Q + u'r' # 0x99 -> LATIN SMALL LETTER R + u'\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR + u'\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR + u'\xe6' # 0x9C -> LATIN SMALL LIGATURE AE + u'\xb8' # 0x9D -> CEDILLA + u'\xc6' # 0x9E -> LATIN CAPITAL LIGATURE AE + u'\xa4' # 0x9F -> CURRENCY SIGN + u'\xb5' # 0xA0 -> MICRO SIGN + u'\xf6' # 0xA1 -> LATIN SMALL LETTER O WITH DIAERESIS + u's' # 0xA2 -> LATIN SMALL LETTER S + u't' # 0xA3 -> LATIN SMALL LETTER T + u'u' # 0xA4 -> LATIN SMALL LETTER U + u'v' # 0xA5 -> LATIN SMALL LETTER V + u'w' # 0xA6 -> LATIN SMALL LETTER W + u'x' # 0xA7 -> LATIN SMALL LETTER X + u'y' # 0xA8 -> LATIN SMALL LETTER Y + u'z' # 0xA9 -> LATIN SMALL LETTER Z + u'\xa1' # 0xAA -> INVERTED EXCLAMATION MARK + u'\xbf' # 0xAB -> INVERTED QUESTION MARK + u']' # 0xAC -> RIGHT SQUARE BRACKET + u'$' # 0xAD -> DOLLAR SIGN + u'@' # 0xAE -> COMMERCIAL AT + u'\xae' # 0xAF -> REGISTERED SIGN + u'\xa2' # 0xB0 -> CENT SIGN + u'\xa3' # 0xB1 -> POUND SIGN + u'\xa5' # 0xB2 -> YEN SIGN + u'\xb7' # 0xB3 -> MIDDLE DOT + u'\xa9' # 0xB4 -> COPYRIGHT SIGN + u'\xa7' # 0xB5 -> SECTION SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER + u'\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF + u'\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS + u'\xac' # 0xBA -> NOT SIGN + u'|' # 0xBB -> VERTICAL LINE + u'\xaf' # 0xBC -> MACRON + u'\xa8' # 0xBD -> DIAERESIS + u'\xb4' # 0xBE -> ACUTE ACCENT + u'\xd7' # 0xBF -> MULTIPLICATION SIGN + u'\xe7' # 0xC0 -> LATIN SMALL LETTER C WITH CEDILLA + u'A' # 0xC1 -> LATIN CAPITAL LETTER A + u'B' # 0xC2 -> LATIN CAPITAL LETTER B + u'C' # 0xC3 -> LATIN CAPITAL LETTER C + u'D' # 0xC4 -> LATIN CAPITAL LETTER D + u'E' # 0xC5 -> LATIN CAPITAL LETTER E + u'F' # 0xC6 -> LATIN CAPITAL LETTER F + u'G' # 0xC7 -> LATIN CAPITAL LETTER G + u'H' # 0xC8 -> LATIN CAPITAL LETTER H + u'I' # 0xC9 -> LATIN CAPITAL LETTER I + u'\xad' # 0xCA -> SOFT HYPHEN + u'\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'~' # 0xCC -> TILDE + u'\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE + u'\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE + u'\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE + u'\u011f' # 0xD0 -> LATIN SMALL LETTER G WITH BREVE + u'J' # 0xD1 -> LATIN CAPITAL LETTER J + u'K' # 0xD2 -> LATIN CAPITAL LETTER K + u'L' # 0xD3 -> LATIN CAPITAL LETTER L + u'M' # 0xD4 -> LATIN CAPITAL LETTER M + u'N' # 0xD5 -> LATIN CAPITAL LETTER N + u'O' # 0xD6 -> LATIN CAPITAL LETTER O + u'P' # 0xD7 -> LATIN CAPITAL LETTER P + u'Q' # 0xD8 -> LATIN CAPITAL LETTER Q + u'R' # 0xD9 -> LATIN CAPITAL LETTER R + u'\xb9' # 0xDA -> SUPERSCRIPT ONE + u'\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\\' # 0xDC -> REVERSE SOLIDUS + u'\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE + u'\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE + u'\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS + u'\xfc' # 0xE0 -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xf7' # 0xE1 -> DIVISION SIGN + u'S' # 0xE2 -> LATIN CAPITAL LETTER S + u'T' # 0xE3 -> LATIN CAPITAL LETTER T + u'U' # 0xE4 -> LATIN CAPITAL LETTER U + u'V' # 0xE5 -> LATIN CAPITAL LETTER V + u'W' # 0xE6 -> LATIN CAPITAL LETTER W + u'X' # 0xE7 -> LATIN CAPITAL LETTER X + u'Y' # 0xE8 -> LATIN CAPITAL LETTER Y + u'Z' # 0xE9 -> LATIN CAPITAL LETTER Z + u'\xb2' # 0xEA -> SUPERSCRIPT TWO + u'\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'#' # 0xEC -> NUMBER SIGN + u'\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE + u'0' # 0xF0 -> DIGIT ZERO + u'1' # 0xF1 -> DIGIT ONE + u'2' # 0xF2 -> DIGIT TWO + u'3' # 0xF3 -> DIGIT THREE + u'4' # 0xF4 -> DIGIT FOUR + u'5' # 0xF5 -> DIGIT FIVE + u'6' # 0xF6 -> DIGIT SIX + u'7' # 0xF7 -> DIGIT SEVEN + u'8' # 0xF8 -> DIGIT EIGHT + u'9' # 0xF9 -> DIGIT NINE + u'\xb3' # 0xFA -> SUPERSCRIPT THREE + u'\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'"' # 0xFC -> QUOTATION MARK + u'\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE + u'\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE + u'\x9f' # 0xFF -> CONTROL +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp1140.py b/thirdparty/python25/Lib/encodings/cp1140.py new file mode 100644 index 000000000..0b918c675 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp1140.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1140 generated from 'python-mappings/CP1140.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1140', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x9c' # 0x04 -> CONTROL + u'\t' # 0x05 -> HORIZONTAL TABULATION + u'\x86' # 0x06 -> CONTROL + u'\x7f' # 0x07 -> DELETE + u'\x97' # 0x08 -> CONTROL + u'\x8d' # 0x09 -> CONTROL + u'\x8e' # 0x0A -> CONTROL + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x9d' # 0x14 -> CONTROL + u'\x85' # 0x15 -> CONTROL + u'\x08' # 0x16 -> BACKSPACE + u'\x87' # 0x17 -> CONTROL + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x92' # 0x1A -> CONTROL + u'\x8f' # 0x1B -> CONTROL + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u'\x80' # 0x20 -> CONTROL + u'\x81' # 0x21 -> CONTROL + u'\x82' # 0x22 -> CONTROL + u'\x83' # 0x23 -> CONTROL + u'\x84' # 0x24 -> CONTROL + u'\n' # 0x25 -> LINE FEED + u'\x17' # 0x26 -> END OF TRANSMISSION BLOCK + u'\x1b' # 0x27 -> ESCAPE + u'\x88' # 0x28 -> CONTROL + u'\x89' # 0x29 -> CONTROL + u'\x8a' # 0x2A -> CONTROL + u'\x8b' # 0x2B -> CONTROL + u'\x8c' # 0x2C -> CONTROL + u'\x05' # 0x2D -> ENQUIRY + u'\x06' # 0x2E -> ACKNOWLEDGE + u'\x07' # 0x2F -> BELL + u'\x90' # 0x30 -> CONTROL + u'\x91' # 0x31 -> CONTROL + u'\x16' # 0x32 -> SYNCHRONOUS IDLE + u'\x93' # 0x33 -> CONTROL + u'\x94' # 0x34 -> CONTROL + u'\x95' # 0x35 -> CONTROL + u'\x96' # 0x36 -> CONTROL + u'\x04' # 0x37 -> END OF TRANSMISSION + u'\x98' # 0x38 -> CONTROL + u'\x99' # 0x39 -> CONTROL + u'\x9a' # 0x3A -> CONTROL + u'\x9b' # 0x3B -> CONTROL + u'\x14' # 0x3C -> DEVICE CONTROL FOUR + u'\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE + u'\x9e' # 0x3E -> CONTROL + u'\x1a' # 0x3F -> SUBSTITUTE + u' ' # 0x40 -> SPACE + u'\xa0' # 0x41 -> NO-BREAK SPACE + u'\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x43 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE + u'\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe7' # 0x48 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE + u'\xa2' # 0x4A -> CENT SIGN + u'.' # 0x4B -> FULL STOP + u'<' # 0x4C -> LESS-THAN SIGN + u'(' # 0x4D -> LEFT PARENTHESIS + u'+' # 0x4E -> PLUS SIGN + u'|' # 0x4F -> VERTICAL LINE + u'&' # 0x50 -> AMPERSAND + u'\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE + u'\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE + u'\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE + u'\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE + u'\xdf' # 0x59 -> LATIN SMALL LETTER SHARP S (GERMAN) + u'!' # 0x5A -> EXCLAMATION MARK + u'$' # 0x5B -> DOLLAR SIGN + u'*' # 0x5C -> ASTERISK + u')' # 0x5D -> RIGHT PARENTHESIS + u';' # 0x5E -> SEMICOLON + u'\xac' # 0x5F -> NOT SIGN + u'-' # 0x60 -> HYPHEN-MINUS + u'/' # 0x61 -> SOLIDUS + u'\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xc4' # 0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE + u'\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc7' # 0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xa6' # 0x6A -> BROKEN BAR + u',' # 0x6B -> COMMA + u'%' # 0x6C -> PERCENT SIGN + u'_' # 0x6D -> LOW LINE + u'>' # 0x6E -> GREATER-THAN SIGN + u'?' # 0x6F -> QUESTION MARK + u'\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE + u'\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE + u'`' # 0x79 -> GRAVE ACCENT + u':' # 0x7A -> COLON + u'#' # 0x7B -> NUMBER SIGN + u'@' # 0x7C -> COMMERCIAL AT + u"'" # 0x7D -> APOSTROPHE + u'=' # 0x7E -> EQUALS SIGN + u'"' # 0x7F -> QUOTATION MARK + u'\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE + u'a' # 0x81 -> LATIN SMALL LETTER A + u'b' # 0x82 -> LATIN SMALL LETTER B + u'c' # 0x83 -> LATIN SMALL LETTER C + u'd' # 0x84 -> LATIN SMALL LETTER D + u'e' # 0x85 -> LATIN SMALL LETTER E + u'f' # 0x86 -> LATIN SMALL LETTER F + u'g' # 0x87 -> LATIN SMALL LETTER G + u'h' # 0x88 -> LATIN SMALL LETTER H + u'i' # 0x89 -> LATIN SMALL LETTER I + u'\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xf0' # 0x8C -> LATIN SMALL LETTER ETH (ICELANDIC) + u'\xfd' # 0x8D -> LATIN SMALL LETTER Y WITH ACUTE + u'\xfe' # 0x8E -> LATIN SMALL LETTER THORN (ICELANDIC) + u'\xb1' # 0x8F -> PLUS-MINUS SIGN + u'\xb0' # 0x90 -> DEGREE SIGN + u'j' # 0x91 -> LATIN SMALL LETTER J + u'k' # 0x92 -> LATIN SMALL LETTER K + u'l' # 0x93 -> LATIN SMALL LETTER L + u'm' # 0x94 -> LATIN SMALL LETTER M + u'n' # 0x95 -> LATIN SMALL LETTER N + u'o' # 0x96 -> LATIN SMALL LETTER O + u'p' # 0x97 -> LATIN SMALL LETTER P + u'q' # 0x98 -> LATIN SMALL LETTER Q + u'r' # 0x99 -> LATIN SMALL LETTER R + u'\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR + u'\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR + u'\xe6' # 0x9C -> LATIN SMALL LIGATURE AE + u'\xb8' # 0x9D -> CEDILLA + u'\xc6' # 0x9E -> LATIN CAPITAL LIGATURE AE + u'\u20ac' # 0x9F -> EURO SIGN + u'\xb5' # 0xA0 -> MICRO SIGN + u'~' # 0xA1 -> TILDE + u's' # 0xA2 -> LATIN SMALL LETTER S + u't' # 0xA3 -> LATIN SMALL LETTER T + u'u' # 0xA4 -> LATIN SMALL LETTER U + u'v' # 0xA5 -> LATIN SMALL LETTER V + u'w' # 0xA6 -> LATIN SMALL LETTER W + u'x' # 0xA7 -> LATIN SMALL LETTER X + u'y' # 0xA8 -> LATIN SMALL LETTER Y + u'z' # 0xA9 -> LATIN SMALL LETTER Z + u'\xa1' # 0xAA -> INVERTED EXCLAMATION MARK + u'\xbf' # 0xAB -> INVERTED QUESTION MARK + u'\xd0' # 0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC) + u'\xdd' # 0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE + u'\xde' # 0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC) + u'\xae' # 0xAF -> REGISTERED SIGN + u'^' # 0xB0 -> CIRCUMFLEX ACCENT + u'\xa3' # 0xB1 -> POUND SIGN + u'\xa5' # 0xB2 -> YEN SIGN + u'\xb7' # 0xB3 -> MIDDLE DOT + u'\xa9' # 0xB4 -> COPYRIGHT SIGN + u'\xa7' # 0xB5 -> SECTION SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER + u'\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF + u'\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS + u'[' # 0xBA -> LEFT SQUARE BRACKET + u']' # 0xBB -> RIGHT SQUARE BRACKET + u'\xaf' # 0xBC -> MACRON + u'\xa8' # 0xBD -> DIAERESIS + u'\xb4' # 0xBE -> ACUTE ACCENT + u'\xd7' # 0xBF -> MULTIPLICATION SIGN + u'{' # 0xC0 -> LEFT CURLY BRACKET + u'A' # 0xC1 -> LATIN CAPITAL LETTER A + u'B' # 0xC2 -> LATIN CAPITAL LETTER B + u'C' # 0xC3 -> LATIN CAPITAL LETTER C + u'D' # 0xC4 -> LATIN CAPITAL LETTER D + u'E' # 0xC5 -> LATIN CAPITAL LETTER E + u'F' # 0xC6 -> LATIN CAPITAL LETTER F + u'G' # 0xC7 -> LATIN CAPITAL LETTER G + u'H' # 0xC8 -> LATIN CAPITAL LETTER H + u'I' # 0xC9 -> LATIN CAPITAL LETTER I + u'\xad' # 0xCA -> SOFT HYPHEN + u'\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0xCC -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE + u'\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE + u'\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE + u'}' # 0xD0 -> RIGHT CURLY BRACKET + u'J' # 0xD1 -> LATIN CAPITAL LETTER J + u'K' # 0xD2 -> LATIN CAPITAL LETTER K + u'L' # 0xD3 -> LATIN CAPITAL LETTER L + u'M' # 0xD4 -> LATIN CAPITAL LETTER M + u'N' # 0xD5 -> LATIN CAPITAL LETTER N + u'O' # 0xD6 -> LATIN CAPITAL LETTER O + u'P' # 0xD7 -> LATIN CAPITAL LETTER P + u'Q' # 0xD8 -> LATIN CAPITAL LETTER Q + u'R' # 0xD9 -> LATIN CAPITAL LETTER R + u'\xb9' # 0xDA -> SUPERSCRIPT ONE + u'\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0xDC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE + u'\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE + u'\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS + u'\\' # 0xE0 -> REVERSE SOLIDUS + u'\xf7' # 0xE1 -> DIVISION SIGN + u'S' # 0xE2 -> LATIN CAPITAL LETTER S + u'T' # 0xE3 -> LATIN CAPITAL LETTER T + u'U' # 0xE4 -> LATIN CAPITAL LETTER U + u'V' # 0xE5 -> LATIN CAPITAL LETTER V + u'W' # 0xE6 -> LATIN CAPITAL LETTER W + u'X' # 0xE7 -> LATIN CAPITAL LETTER X + u'Y' # 0xE8 -> LATIN CAPITAL LETTER Y + u'Z' # 0xE9 -> LATIN CAPITAL LETTER Z + u'\xb2' # 0xEA -> SUPERSCRIPT TWO + u'\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\xd6' # 0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE + u'0' # 0xF0 -> DIGIT ZERO + u'1' # 0xF1 -> DIGIT ONE + u'2' # 0xF2 -> DIGIT TWO + u'3' # 0xF3 -> DIGIT THREE + u'4' # 0xF4 -> DIGIT FOUR + u'5' # 0xF5 -> DIGIT FIVE + u'6' # 0xF6 -> DIGIT SIX + u'7' # 0xF7 -> DIGIT SEVEN + u'8' # 0xF8 -> DIGIT EIGHT + u'9' # 0xF9 -> DIGIT NINE + u'\xb3' # 0xFA -> SUPERSCRIPT THREE + u'\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xdc' # 0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE + u'\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE + u'\x9f' # 0xFF -> CONTROL +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp1250.py b/thirdparty/python25/Lib/encodings/cp1250.py new file mode 100644 index 000000000..c6041e015 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp1250.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1250 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1250.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1250', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\u20ac' # 0x80 -> EURO SIGN + u'\ufffe' # 0x81 -> UNDEFINED + u'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + u'\ufffe' # 0x83 -> UNDEFINED + u'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + u'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + u'\u2020' # 0x86 -> DAGGER + u'\u2021' # 0x87 -> DOUBLE DAGGER + u'\ufffe' # 0x88 -> UNDEFINED + u'\u2030' # 0x89 -> PER MILLE SIGN + u'\u0160' # 0x8A -> LATIN CAPITAL LETTER S WITH CARON + u'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + u'\u015a' # 0x8C -> LATIN CAPITAL LETTER S WITH ACUTE + u'\u0164' # 0x8D -> LATIN CAPITAL LETTER T WITH CARON + u'\u017d' # 0x8E -> LATIN CAPITAL LETTER Z WITH CARON + u'\u0179' # 0x8F -> LATIN CAPITAL LETTER Z WITH ACUTE + u'\ufffe' # 0x90 -> UNDEFINED + u'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + u'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + u'\u2022' # 0x95 -> BULLET + u'\u2013' # 0x96 -> EN DASH + u'\u2014' # 0x97 -> EM DASH + u'\ufffe' # 0x98 -> UNDEFINED + u'\u2122' # 0x99 -> TRADE MARK SIGN + u'\u0161' # 0x9A -> LATIN SMALL LETTER S WITH CARON + u'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + u'\u015b' # 0x9C -> LATIN SMALL LETTER S WITH ACUTE + u'\u0165' # 0x9D -> LATIN SMALL LETTER T WITH CARON + u'\u017e' # 0x9E -> LATIN SMALL LETTER Z WITH CARON + u'\u017a' # 0x9F -> LATIN SMALL LETTER Z WITH ACUTE + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\u02c7' # 0xA1 -> CARON + u'\u02d8' # 0xA2 -> BREVE + u'\u0141' # 0xA3 -> LATIN CAPITAL LETTER L WITH STROKE + u'\xa4' # 0xA4 -> CURRENCY SIGN + u'\u0104' # 0xA5 -> LATIN CAPITAL LETTER A WITH OGONEK + u'\xa6' # 0xA6 -> BROKEN BAR + u'\xa7' # 0xA7 -> SECTION SIGN + u'\xa8' # 0xA8 -> DIAERESIS + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\u015e' # 0xAA -> LATIN CAPITAL LETTER S WITH CEDILLA + u'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xac' # 0xAC -> NOT SIGN + u'\xad' # 0xAD -> SOFT HYPHEN + u'\xae' # 0xAE -> REGISTERED SIGN + u'\u017b' # 0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\u02db' # 0xB2 -> OGONEK + u'\u0142' # 0xB3 -> LATIN SMALL LETTER L WITH STROKE + u'\xb4' # 0xB4 -> ACUTE ACCENT + u'\xb5' # 0xB5 -> MICRO SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\xb8' # 0xB8 -> CEDILLA + u'\u0105' # 0xB9 -> LATIN SMALL LETTER A WITH OGONEK + u'\u015f' # 0xBA -> LATIN SMALL LETTER S WITH CEDILLA + u'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u013d' # 0xBC -> LATIN CAPITAL LETTER L WITH CARON + u'\u02dd' # 0xBD -> DOUBLE ACUTE ACCENT + u'\u013e' # 0xBE -> LATIN SMALL LETTER L WITH CARON + u'\u017c' # 0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE + u'\u0154' # 0xC0 -> LATIN CAPITAL LETTER R WITH ACUTE + u'\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\u0102' # 0xC3 -> LATIN CAPITAL LETTER A WITH BREVE + u'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\u0139' # 0xC5 -> LATIN CAPITAL LETTER L WITH ACUTE + u'\u0106' # 0xC6 -> LATIN CAPITAL LETTER C WITH ACUTE + u'\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON + u'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\u0118' # 0xCA -> LATIN CAPITAL LETTER E WITH OGONEK + u'\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\u011a' # 0xCC -> LATIN CAPITAL LETTER E WITH CARON + u'\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\u010e' # 0xCF -> LATIN CAPITAL LETTER D WITH CARON + u'\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE + u'\u0143' # 0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE + u'\u0147' # 0xD2 -> LATIN CAPITAL LETTER N WITH CARON + u'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\u0150' # 0xD5 -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + u'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xd7' # 0xD7 -> MULTIPLICATION SIGN + u'\u0158' # 0xD8 -> LATIN CAPITAL LETTER R WITH CARON + u'\u016e' # 0xD9 -> LATIN CAPITAL LETTER U WITH RING ABOVE + u'\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + u'\u0170' # 0xDB -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + u'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE + u'\u0162' # 0xDE -> LATIN CAPITAL LETTER T WITH CEDILLA + u'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + u'\u0155' # 0xE0 -> LATIN SMALL LETTER R WITH ACUTE + u'\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\u0103' # 0xE3 -> LATIN SMALL LETTER A WITH BREVE + u'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\u013a' # 0xE5 -> LATIN SMALL LETTER L WITH ACUTE + u'\u0107' # 0xE6 -> LATIN SMALL LETTER C WITH ACUTE + u'\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + u'\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON + u'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + u'\u0119' # 0xEA -> LATIN SMALL LETTER E WITH OGONEK + u'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + u'\u011b' # 0xEC -> LATIN SMALL LETTER E WITH CARON + u'\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + u'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\u010f' # 0xEF -> LATIN SMALL LETTER D WITH CARON + u'\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE + u'\u0144' # 0xF1 -> LATIN SMALL LETTER N WITH ACUTE + u'\u0148' # 0xF2 -> LATIN SMALL LETTER N WITH CARON + u'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + u'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\u0151' # 0xF5 -> LATIN SMALL LETTER O WITH DOUBLE ACUTE + u'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf7' # 0xF7 -> DIVISION SIGN + u'\u0159' # 0xF8 -> LATIN SMALL LETTER R WITH CARON + u'\u016f' # 0xF9 -> LATIN SMALL LETTER U WITH RING ABOVE + u'\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + u'\u0171' # 0xFB -> LATIN SMALL LETTER U WITH DOUBLE ACUTE + u'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE + u'\u0163' # 0xFE -> LATIN SMALL LETTER T WITH CEDILLA + u'\u02d9' # 0xFF -> DOT ABOVE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp1251.py b/thirdparty/python25/Lib/encodings/cp1251.py new file mode 100644 index 000000000..be9fec59d --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp1251.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1251 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1251.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1251', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\u0402' # 0x80 -> CYRILLIC CAPITAL LETTER DJE + u'\u0403' # 0x81 -> CYRILLIC CAPITAL LETTER GJE + u'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + u'\u0453' # 0x83 -> CYRILLIC SMALL LETTER GJE + u'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + u'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + u'\u2020' # 0x86 -> DAGGER + u'\u2021' # 0x87 -> DOUBLE DAGGER + u'\u20ac' # 0x88 -> EURO SIGN + u'\u2030' # 0x89 -> PER MILLE SIGN + u'\u0409' # 0x8A -> CYRILLIC CAPITAL LETTER LJE + u'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + u'\u040a' # 0x8C -> CYRILLIC CAPITAL LETTER NJE + u'\u040c' # 0x8D -> CYRILLIC CAPITAL LETTER KJE + u'\u040b' # 0x8E -> CYRILLIC CAPITAL LETTER TSHE + u'\u040f' # 0x8F -> CYRILLIC CAPITAL LETTER DZHE + u'\u0452' # 0x90 -> CYRILLIC SMALL LETTER DJE + u'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + u'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + u'\u2022' # 0x95 -> BULLET + u'\u2013' # 0x96 -> EN DASH + u'\u2014' # 0x97 -> EM DASH + u'\ufffe' # 0x98 -> UNDEFINED + u'\u2122' # 0x99 -> TRADE MARK SIGN + u'\u0459' # 0x9A -> CYRILLIC SMALL LETTER LJE + u'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + u'\u045a' # 0x9C -> CYRILLIC SMALL LETTER NJE + u'\u045c' # 0x9D -> CYRILLIC SMALL LETTER KJE + u'\u045b' # 0x9E -> CYRILLIC SMALL LETTER TSHE + u'\u045f' # 0x9F -> CYRILLIC SMALL LETTER DZHE + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\u040e' # 0xA1 -> CYRILLIC CAPITAL LETTER SHORT U + u'\u045e' # 0xA2 -> CYRILLIC SMALL LETTER SHORT U + u'\u0408' # 0xA3 -> CYRILLIC CAPITAL LETTER JE + u'\xa4' # 0xA4 -> CURRENCY SIGN + u'\u0490' # 0xA5 -> CYRILLIC CAPITAL LETTER GHE WITH UPTURN + u'\xa6' # 0xA6 -> BROKEN BAR + u'\xa7' # 0xA7 -> SECTION SIGN + u'\u0401' # 0xA8 -> CYRILLIC CAPITAL LETTER IO + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\u0404' # 0xAA -> CYRILLIC CAPITAL LETTER UKRAINIAN IE + u'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xac' # 0xAC -> NOT SIGN + u'\xad' # 0xAD -> SOFT HYPHEN + u'\xae' # 0xAE -> REGISTERED SIGN + u'\u0407' # 0xAF -> CYRILLIC CAPITAL LETTER YI + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\u0406' # 0xB2 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + u'\u0456' # 0xB3 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + u'\u0491' # 0xB4 -> CYRILLIC SMALL LETTER GHE WITH UPTURN + u'\xb5' # 0xB5 -> MICRO SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\u0451' # 0xB8 -> CYRILLIC SMALL LETTER IO + u'\u2116' # 0xB9 -> NUMERO SIGN + u'\u0454' # 0xBA -> CYRILLIC SMALL LETTER UKRAINIAN IE + u'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u0458' # 0xBC -> CYRILLIC SMALL LETTER JE + u'\u0405' # 0xBD -> CYRILLIC CAPITAL LETTER DZE + u'\u0455' # 0xBE -> CYRILLIC SMALL LETTER DZE + u'\u0457' # 0xBF -> CYRILLIC SMALL LETTER YI + u'\u0410' # 0xC0 -> CYRILLIC CAPITAL LETTER A + u'\u0411' # 0xC1 -> CYRILLIC CAPITAL LETTER BE + u'\u0412' # 0xC2 -> CYRILLIC CAPITAL LETTER VE + u'\u0413' # 0xC3 -> CYRILLIC CAPITAL LETTER GHE + u'\u0414' # 0xC4 -> CYRILLIC CAPITAL LETTER DE + u'\u0415' # 0xC5 -> CYRILLIC CAPITAL LETTER IE + u'\u0416' # 0xC6 -> CYRILLIC CAPITAL LETTER ZHE + u'\u0417' # 0xC7 -> CYRILLIC CAPITAL LETTER ZE + u'\u0418' # 0xC8 -> CYRILLIC CAPITAL LETTER I + u'\u0419' # 0xC9 -> CYRILLIC CAPITAL LETTER SHORT I + u'\u041a' # 0xCA -> CYRILLIC CAPITAL LETTER KA + u'\u041b' # 0xCB -> CYRILLIC CAPITAL LETTER EL + u'\u041c' # 0xCC -> CYRILLIC CAPITAL LETTER EM + u'\u041d' # 0xCD -> CYRILLIC CAPITAL LETTER EN + u'\u041e' # 0xCE -> CYRILLIC CAPITAL LETTER O + u'\u041f' # 0xCF -> CYRILLIC CAPITAL LETTER PE + u'\u0420' # 0xD0 -> CYRILLIC CAPITAL LETTER ER + u'\u0421' # 0xD1 -> CYRILLIC CAPITAL LETTER ES + u'\u0422' # 0xD2 -> CYRILLIC CAPITAL LETTER TE + u'\u0423' # 0xD3 -> CYRILLIC CAPITAL LETTER U + u'\u0424' # 0xD4 -> CYRILLIC CAPITAL LETTER EF + u'\u0425' # 0xD5 -> CYRILLIC CAPITAL LETTER HA + u'\u0426' # 0xD6 -> CYRILLIC CAPITAL LETTER TSE + u'\u0427' # 0xD7 -> CYRILLIC CAPITAL LETTER CHE + u'\u0428' # 0xD8 -> CYRILLIC CAPITAL LETTER SHA + u'\u0429' # 0xD9 -> CYRILLIC CAPITAL LETTER SHCHA + u'\u042a' # 0xDA -> CYRILLIC CAPITAL LETTER HARD SIGN + u'\u042b' # 0xDB -> CYRILLIC CAPITAL LETTER YERU + u'\u042c' # 0xDC -> CYRILLIC CAPITAL LETTER SOFT SIGN + u'\u042d' # 0xDD -> CYRILLIC CAPITAL LETTER E + u'\u042e' # 0xDE -> CYRILLIC CAPITAL LETTER YU + u'\u042f' # 0xDF -> CYRILLIC CAPITAL LETTER YA + u'\u0430' # 0xE0 -> CYRILLIC SMALL LETTER A + u'\u0431' # 0xE1 -> CYRILLIC SMALL LETTER BE + u'\u0432' # 0xE2 -> CYRILLIC SMALL LETTER VE + u'\u0433' # 0xE3 -> CYRILLIC SMALL LETTER GHE + u'\u0434' # 0xE4 -> CYRILLIC SMALL LETTER DE + u'\u0435' # 0xE5 -> CYRILLIC SMALL LETTER IE + u'\u0436' # 0xE6 -> CYRILLIC SMALL LETTER ZHE + u'\u0437' # 0xE7 -> CYRILLIC SMALL LETTER ZE + u'\u0438' # 0xE8 -> CYRILLIC SMALL LETTER I + u'\u0439' # 0xE9 -> CYRILLIC SMALL LETTER SHORT I + u'\u043a' # 0xEA -> CYRILLIC SMALL LETTER KA + u'\u043b' # 0xEB -> CYRILLIC SMALL LETTER EL + u'\u043c' # 0xEC -> CYRILLIC SMALL LETTER EM + u'\u043d' # 0xED -> CYRILLIC SMALL LETTER EN + u'\u043e' # 0xEE -> CYRILLIC SMALL LETTER O + u'\u043f' # 0xEF -> CYRILLIC SMALL LETTER PE + u'\u0440' # 0xF0 -> CYRILLIC SMALL LETTER ER + u'\u0441' # 0xF1 -> CYRILLIC SMALL LETTER ES + u'\u0442' # 0xF2 -> CYRILLIC SMALL LETTER TE + u'\u0443' # 0xF3 -> CYRILLIC SMALL LETTER U + u'\u0444' # 0xF4 -> CYRILLIC SMALL LETTER EF + u'\u0445' # 0xF5 -> CYRILLIC SMALL LETTER HA + u'\u0446' # 0xF6 -> CYRILLIC SMALL LETTER TSE + u'\u0447' # 0xF7 -> CYRILLIC SMALL LETTER CHE + u'\u0448' # 0xF8 -> CYRILLIC SMALL LETTER SHA + u'\u0449' # 0xF9 -> CYRILLIC SMALL LETTER SHCHA + u'\u044a' # 0xFA -> CYRILLIC SMALL LETTER HARD SIGN + u'\u044b' # 0xFB -> CYRILLIC SMALL LETTER YERU + u'\u044c' # 0xFC -> CYRILLIC SMALL LETTER SOFT SIGN + u'\u044d' # 0xFD -> CYRILLIC SMALL LETTER E + u'\u044e' # 0xFE -> CYRILLIC SMALL LETTER YU + u'\u044f' # 0xFF -> CYRILLIC SMALL LETTER YA +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp1252.py b/thirdparty/python25/Lib/encodings/cp1252.py new file mode 100644 index 000000000..005a122c5 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp1252.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1252 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1252', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\u20ac' # 0x80 -> EURO SIGN + u'\ufffe' # 0x81 -> UNDEFINED + u'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + u'\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK + u'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + u'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + u'\u2020' # 0x86 -> DAGGER + u'\u2021' # 0x87 -> DOUBLE DAGGER + u'\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT + u'\u2030' # 0x89 -> PER MILLE SIGN + u'\u0160' # 0x8A -> LATIN CAPITAL LETTER S WITH CARON + u'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + u'\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE + u'\ufffe' # 0x8D -> UNDEFINED + u'\u017d' # 0x8E -> LATIN CAPITAL LETTER Z WITH CARON + u'\ufffe' # 0x8F -> UNDEFINED + u'\ufffe' # 0x90 -> UNDEFINED + u'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + u'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + u'\u2022' # 0x95 -> BULLET + u'\u2013' # 0x96 -> EN DASH + u'\u2014' # 0x97 -> EM DASH + u'\u02dc' # 0x98 -> SMALL TILDE + u'\u2122' # 0x99 -> TRADE MARK SIGN + u'\u0161' # 0x9A -> LATIN SMALL LETTER S WITH CARON + u'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + u'\u0153' # 0x9C -> LATIN SMALL LIGATURE OE + u'\ufffe' # 0x9D -> UNDEFINED + u'\u017e' # 0x9E -> LATIN SMALL LETTER Z WITH CARON + u'\u0178' # 0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK + u'\xa2' # 0xA2 -> CENT SIGN + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa4' # 0xA4 -> CURRENCY SIGN + u'\xa5' # 0xA5 -> YEN SIGN + u'\xa6' # 0xA6 -> BROKEN BAR + u'\xa7' # 0xA7 -> SECTION SIGN + u'\xa8' # 0xA8 -> DIAERESIS + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR + u'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xac' # 0xAC -> NOT SIGN + u'\xad' # 0xAD -> SOFT HYPHEN + u'\xae' # 0xAE -> REGISTERED SIGN + u'\xaf' # 0xAF -> MACRON + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\xb2' # 0xB2 -> SUPERSCRIPT TWO + u'\xb3' # 0xB3 -> SUPERSCRIPT THREE + u'\xb4' # 0xB4 -> ACUTE ACCENT + u'\xb5' # 0xB5 -> MICRO SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\xb8' # 0xB8 -> CEDILLA + u'\xb9' # 0xB9 -> SUPERSCRIPT ONE + u'\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR + u'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + u'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + u'\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + u'\xbf' # 0xBF -> INVERTED QUESTION MARK + u'\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE + u'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + u'\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE + u'\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\xd0' # 0xD0 -> LATIN CAPITAL LETTER ETH + u'\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + u'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xd7' # 0xD7 -> MULTIPLICATION SIGN + u'\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + u'\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + u'\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE + u'\xde' # 0xDE -> LATIN CAPITAL LETTER THORN + u'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + u'\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE + u'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe6' # 0xE6 -> LATIN SMALL LETTER AE + u'\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + u'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + u'\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE + u'\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + u'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xf0' # 0xF0 -> LATIN SMALL LETTER ETH + u'\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE + u'\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE + u'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + u'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + u'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf7' # 0xF7 -> DIVISION SIGN + u'\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + u'\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + u'\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + u'\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE + u'\xfe' # 0xFE -> LATIN SMALL LETTER THORN + u'\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp1253.py b/thirdparty/python25/Lib/encodings/cp1253.py new file mode 100644 index 000000000..ab3abdc8a --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp1253.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1253 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1253.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1253', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\u20ac' # 0x80 -> EURO SIGN + u'\ufffe' # 0x81 -> UNDEFINED + u'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + u'\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK + u'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + u'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + u'\u2020' # 0x86 -> DAGGER + u'\u2021' # 0x87 -> DOUBLE DAGGER + u'\ufffe' # 0x88 -> UNDEFINED + u'\u2030' # 0x89 -> PER MILLE SIGN + u'\ufffe' # 0x8A -> UNDEFINED + u'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + u'\ufffe' # 0x8C -> UNDEFINED + u'\ufffe' # 0x8D -> UNDEFINED + u'\ufffe' # 0x8E -> UNDEFINED + u'\ufffe' # 0x8F -> UNDEFINED + u'\ufffe' # 0x90 -> UNDEFINED + u'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + u'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + u'\u2022' # 0x95 -> BULLET + u'\u2013' # 0x96 -> EN DASH + u'\u2014' # 0x97 -> EM DASH + u'\ufffe' # 0x98 -> UNDEFINED + u'\u2122' # 0x99 -> TRADE MARK SIGN + u'\ufffe' # 0x9A -> UNDEFINED + u'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + u'\ufffe' # 0x9C -> UNDEFINED + u'\ufffe' # 0x9D -> UNDEFINED + u'\ufffe' # 0x9E -> UNDEFINED + u'\ufffe' # 0x9F -> UNDEFINED + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\u0385' # 0xA1 -> GREEK DIALYTIKA TONOS + u'\u0386' # 0xA2 -> GREEK CAPITAL LETTER ALPHA WITH TONOS + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa4' # 0xA4 -> CURRENCY SIGN + u'\xa5' # 0xA5 -> YEN SIGN + u'\xa6' # 0xA6 -> BROKEN BAR + u'\xa7' # 0xA7 -> SECTION SIGN + u'\xa8' # 0xA8 -> DIAERESIS + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\ufffe' # 0xAA -> UNDEFINED + u'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xac' # 0xAC -> NOT SIGN + u'\xad' # 0xAD -> SOFT HYPHEN + u'\xae' # 0xAE -> REGISTERED SIGN + u'\u2015' # 0xAF -> HORIZONTAL BAR + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\xb2' # 0xB2 -> SUPERSCRIPT TWO + u'\xb3' # 0xB3 -> SUPERSCRIPT THREE + u'\u0384' # 0xB4 -> GREEK TONOS + u'\xb5' # 0xB5 -> MICRO SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\u0388' # 0xB8 -> GREEK CAPITAL LETTER EPSILON WITH TONOS + u'\u0389' # 0xB9 -> GREEK CAPITAL LETTER ETA WITH TONOS + u'\u038a' # 0xBA -> GREEK CAPITAL LETTER IOTA WITH TONOS + u'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u038c' # 0xBC -> GREEK CAPITAL LETTER OMICRON WITH TONOS + u'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + u'\u038e' # 0xBE -> GREEK CAPITAL LETTER UPSILON WITH TONOS + u'\u038f' # 0xBF -> GREEK CAPITAL LETTER OMEGA WITH TONOS + u'\u0390' # 0xC0 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + u'\u0391' # 0xC1 -> GREEK CAPITAL LETTER ALPHA + u'\u0392' # 0xC2 -> GREEK CAPITAL LETTER BETA + u'\u0393' # 0xC3 -> GREEK CAPITAL LETTER GAMMA + u'\u0394' # 0xC4 -> GREEK CAPITAL LETTER DELTA + u'\u0395' # 0xC5 -> GREEK CAPITAL LETTER EPSILON + u'\u0396' # 0xC6 -> GREEK CAPITAL LETTER ZETA + u'\u0397' # 0xC7 -> GREEK CAPITAL LETTER ETA + u'\u0398' # 0xC8 -> GREEK CAPITAL LETTER THETA + u'\u0399' # 0xC9 -> GREEK CAPITAL LETTER IOTA + u'\u039a' # 0xCA -> GREEK CAPITAL LETTER KAPPA + u'\u039b' # 0xCB -> GREEK CAPITAL LETTER LAMDA + u'\u039c' # 0xCC -> GREEK CAPITAL LETTER MU + u'\u039d' # 0xCD -> GREEK CAPITAL LETTER NU + u'\u039e' # 0xCE -> GREEK CAPITAL LETTER XI + u'\u039f' # 0xCF -> GREEK CAPITAL LETTER OMICRON + u'\u03a0' # 0xD0 -> GREEK CAPITAL LETTER PI + u'\u03a1' # 0xD1 -> GREEK CAPITAL LETTER RHO + u'\ufffe' # 0xD2 -> UNDEFINED + u'\u03a3' # 0xD3 -> GREEK CAPITAL LETTER SIGMA + u'\u03a4' # 0xD4 -> GREEK CAPITAL LETTER TAU + u'\u03a5' # 0xD5 -> GREEK CAPITAL LETTER UPSILON + u'\u03a6' # 0xD6 -> GREEK CAPITAL LETTER PHI + u'\u03a7' # 0xD7 -> GREEK CAPITAL LETTER CHI + u'\u03a8' # 0xD8 -> GREEK CAPITAL LETTER PSI + u'\u03a9' # 0xD9 -> GREEK CAPITAL LETTER OMEGA + u'\u03aa' # 0xDA -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + u'\u03ab' # 0xDB -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + u'\u03ac' # 0xDC -> GREEK SMALL LETTER ALPHA WITH TONOS + u'\u03ad' # 0xDD -> GREEK SMALL LETTER EPSILON WITH TONOS + u'\u03ae' # 0xDE -> GREEK SMALL LETTER ETA WITH TONOS + u'\u03af' # 0xDF -> GREEK SMALL LETTER IOTA WITH TONOS + u'\u03b0' # 0xE0 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + u'\u03b1' # 0xE1 -> GREEK SMALL LETTER ALPHA + u'\u03b2' # 0xE2 -> GREEK SMALL LETTER BETA + u'\u03b3' # 0xE3 -> GREEK SMALL LETTER GAMMA + u'\u03b4' # 0xE4 -> GREEK SMALL LETTER DELTA + u'\u03b5' # 0xE5 -> GREEK SMALL LETTER EPSILON + u'\u03b6' # 0xE6 -> GREEK SMALL LETTER ZETA + u'\u03b7' # 0xE7 -> GREEK SMALL LETTER ETA + u'\u03b8' # 0xE8 -> GREEK SMALL LETTER THETA + u'\u03b9' # 0xE9 -> GREEK SMALL LETTER IOTA + u'\u03ba' # 0xEA -> GREEK SMALL LETTER KAPPA + u'\u03bb' # 0xEB -> GREEK SMALL LETTER LAMDA + u'\u03bc' # 0xEC -> GREEK SMALL LETTER MU + u'\u03bd' # 0xED -> GREEK SMALL LETTER NU + u'\u03be' # 0xEE -> GREEK SMALL LETTER XI + u'\u03bf' # 0xEF -> GREEK SMALL LETTER OMICRON + u'\u03c0' # 0xF0 -> GREEK SMALL LETTER PI + u'\u03c1' # 0xF1 -> GREEK SMALL LETTER RHO + u'\u03c2' # 0xF2 -> GREEK SMALL LETTER FINAL SIGMA + u'\u03c3' # 0xF3 -> GREEK SMALL LETTER SIGMA + u'\u03c4' # 0xF4 -> GREEK SMALL LETTER TAU + u'\u03c5' # 0xF5 -> GREEK SMALL LETTER UPSILON + u'\u03c6' # 0xF6 -> GREEK SMALL LETTER PHI + u'\u03c7' # 0xF7 -> GREEK SMALL LETTER CHI + u'\u03c8' # 0xF8 -> GREEK SMALL LETTER PSI + u'\u03c9' # 0xF9 -> GREEK SMALL LETTER OMEGA + u'\u03ca' # 0xFA -> GREEK SMALL LETTER IOTA WITH DIALYTIKA + u'\u03cb' # 0xFB -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA + u'\u03cc' # 0xFC -> GREEK SMALL LETTER OMICRON WITH TONOS + u'\u03cd' # 0xFD -> GREEK SMALL LETTER UPSILON WITH TONOS + u'\u03ce' # 0xFE -> GREEK SMALL LETTER OMEGA WITH TONOS + u'\ufffe' # 0xFF -> UNDEFINED +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp1254.py b/thirdparty/python25/Lib/encodings/cp1254.py new file mode 100644 index 000000000..ac691e6ab --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp1254.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1254 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1254.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1254', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\u20ac' # 0x80 -> EURO SIGN + u'\ufffe' # 0x81 -> UNDEFINED + u'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + u'\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK + u'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + u'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + u'\u2020' # 0x86 -> DAGGER + u'\u2021' # 0x87 -> DOUBLE DAGGER + u'\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT + u'\u2030' # 0x89 -> PER MILLE SIGN + u'\u0160' # 0x8A -> LATIN CAPITAL LETTER S WITH CARON + u'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + u'\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE + u'\ufffe' # 0x8D -> UNDEFINED + u'\ufffe' # 0x8E -> UNDEFINED + u'\ufffe' # 0x8F -> UNDEFINED + u'\ufffe' # 0x90 -> UNDEFINED + u'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + u'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + u'\u2022' # 0x95 -> BULLET + u'\u2013' # 0x96 -> EN DASH + u'\u2014' # 0x97 -> EM DASH + u'\u02dc' # 0x98 -> SMALL TILDE + u'\u2122' # 0x99 -> TRADE MARK SIGN + u'\u0161' # 0x9A -> LATIN SMALL LETTER S WITH CARON + u'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + u'\u0153' # 0x9C -> LATIN SMALL LIGATURE OE + u'\ufffe' # 0x9D -> UNDEFINED + u'\ufffe' # 0x9E -> UNDEFINED + u'\u0178' # 0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK + u'\xa2' # 0xA2 -> CENT SIGN + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa4' # 0xA4 -> CURRENCY SIGN + u'\xa5' # 0xA5 -> YEN SIGN + u'\xa6' # 0xA6 -> BROKEN BAR + u'\xa7' # 0xA7 -> SECTION SIGN + u'\xa8' # 0xA8 -> DIAERESIS + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR + u'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xac' # 0xAC -> NOT SIGN + u'\xad' # 0xAD -> SOFT HYPHEN + u'\xae' # 0xAE -> REGISTERED SIGN + u'\xaf' # 0xAF -> MACRON + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\xb2' # 0xB2 -> SUPERSCRIPT TWO + u'\xb3' # 0xB3 -> SUPERSCRIPT THREE + u'\xb4' # 0xB4 -> ACUTE ACCENT + u'\xb5' # 0xB5 -> MICRO SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\xb8' # 0xB8 -> CEDILLA + u'\xb9' # 0xB9 -> SUPERSCRIPT ONE + u'\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR + u'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + u'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + u'\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + u'\xbf' # 0xBF -> INVERTED QUESTION MARK + u'\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE + u'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + u'\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE + u'\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\u011e' # 0xD0 -> LATIN CAPITAL LETTER G WITH BREVE + u'\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + u'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xd7' # 0xD7 -> MULTIPLICATION SIGN + u'\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + u'\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + u'\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\u0130' # 0xDD -> LATIN CAPITAL LETTER I WITH DOT ABOVE + u'\u015e' # 0xDE -> LATIN CAPITAL LETTER S WITH CEDILLA + u'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + u'\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE + u'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe6' # 0xE6 -> LATIN SMALL LETTER AE + u'\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + u'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + u'\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE + u'\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + u'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + u'\u011f' # 0xF0 -> LATIN SMALL LETTER G WITH BREVE + u'\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE + u'\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE + u'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + u'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + u'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf7' # 0xF7 -> DIVISION SIGN + u'\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + u'\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + u'\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + u'\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\u0131' # 0xFD -> LATIN SMALL LETTER DOTLESS I + u'\u015f' # 0xFE -> LATIN SMALL LETTER S WITH CEDILLA + u'\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp1255.py b/thirdparty/python25/Lib/encodings/cp1255.py new file mode 100644 index 000000000..800234718 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp1255.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1255 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1255.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1255', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\u20ac' # 0x80 -> EURO SIGN + u'\ufffe' # 0x81 -> UNDEFINED + u'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + u'\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK + u'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + u'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + u'\u2020' # 0x86 -> DAGGER + u'\u2021' # 0x87 -> DOUBLE DAGGER + u'\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT + u'\u2030' # 0x89 -> PER MILLE SIGN + u'\ufffe' # 0x8A -> UNDEFINED + u'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + u'\ufffe' # 0x8C -> UNDEFINED + u'\ufffe' # 0x8D -> UNDEFINED + u'\ufffe' # 0x8E -> UNDEFINED + u'\ufffe' # 0x8F -> UNDEFINED + u'\ufffe' # 0x90 -> UNDEFINED + u'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + u'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + u'\u2022' # 0x95 -> BULLET + u'\u2013' # 0x96 -> EN DASH + u'\u2014' # 0x97 -> EM DASH + u'\u02dc' # 0x98 -> SMALL TILDE + u'\u2122' # 0x99 -> TRADE MARK SIGN + u'\ufffe' # 0x9A -> UNDEFINED + u'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + u'\ufffe' # 0x9C -> UNDEFINED + u'\ufffe' # 0x9D -> UNDEFINED + u'\ufffe' # 0x9E -> UNDEFINED + u'\ufffe' # 0x9F -> UNDEFINED + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK + u'\xa2' # 0xA2 -> CENT SIGN + u'\xa3' # 0xA3 -> POUND SIGN + u'\u20aa' # 0xA4 -> NEW SHEQEL SIGN + u'\xa5' # 0xA5 -> YEN SIGN + u'\xa6' # 0xA6 -> BROKEN BAR + u'\xa7' # 0xA7 -> SECTION SIGN + u'\xa8' # 0xA8 -> DIAERESIS + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\xd7' # 0xAA -> MULTIPLICATION SIGN + u'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xac' # 0xAC -> NOT SIGN + u'\xad' # 0xAD -> SOFT HYPHEN + u'\xae' # 0xAE -> REGISTERED SIGN + u'\xaf' # 0xAF -> MACRON + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\xb2' # 0xB2 -> SUPERSCRIPT TWO + u'\xb3' # 0xB3 -> SUPERSCRIPT THREE + u'\xb4' # 0xB4 -> ACUTE ACCENT + u'\xb5' # 0xB5 -> MICRO SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\xb8' # 0xB8 -> CEDILLA + u'\xb9' # 0xB9 -> SUPERSCRIPT ONE + u'\xf7' # 0xBA -> DIVISION SIGN + u'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + u'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + u'\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + u'\xbf' # 0xBF -> INVERTED QUESTION MARK + u'\u05b0' # 0xC0 -> HEBREW POINT SHEVA + u'\u05b1' # 0xC1 -> HEBREW POINT HATAF SEGOL + u'\u05b2' # 0xC2 -> HEBREW POINT HATAF PATAH + u'\u05b3' # 0xC3 -> HEBREW POINT HATAF QAMATS + u'\u05b4' # 0xC4 -> HEBREW POINT HIRIQ + u'\u05b5' # 0xC5 -> HEBREW POINT TSERE + u'\u05b6' # 0xC6 -> HEBREW POINT SEGOL + u'\u05b7' # 0xC7 -> HEBREW POINT PATAH + u'\u05b8' # 0xC8 -> HEBREW POINT QAMATS + u'\u05b9' # 0xC9 -> HEBREW POINT HOLAM + u'\ufffe' # 0xCA -> UNDEFINED + u'\u05bb' # 0xCB -> HEBREW POINT QUBUTS + u'\u05bc' # 0xCC -> HEBREW POINT DAGESH OR MAPIQ + u'\u05bd' # 0xCD -> HEBREW POINT METEG + u'\u05be' # 0xCE -> HEBREW PUNCTUATION MAQAF + u'\u05bf' # 0xCF -> HEBREW POINT RAFE + u'\u05c0' # 0xD0 -> HEBREW PUNCTUATION PASEQ + u'\u05c1' # 0xD1 -> HEBREW POINT SHIN DOT + u'\u05c2' # 0xD2 -> HEBREW POINT SIN DOT + u'\u05c3' # 0xD3 -> HEBREW PUNCTUATION SOF PASUQ + u'\u05f0' # 0xD4 -> HEBREW LIGATURE YIDDISH DOUBLE VAV + u'\u05f1' # 0xD5 -> HEBREW LIGATURE YIDDISH VAV YOD + u'\u05f2' # 0xD6 -> HEBREW LIGATURE YIDDISH DOUBLE YOD + u'\u05f3' # 0xD7 -> HEBREW PUNCTUATION GERESH + u'\u05f4' # 0xD8 -> HEBREW PUNCTUATION GERSHAYIM + u'\ufffe' # 0xD9 -> UNDEFINED + u'\ufffe' # 0xDA -> UNDEFINED + u'\ufffe' # 0xDB -> UNDEFINED + u'\ufffe' # 0xDC -> UNDEFINED + u'\ufffe' # 0xDD -> UNDEFINED + u'\ufffe' # 0xDE -> UNDEFINED + u'\ufffe' # 0xDF -> UNDEFINED + u'\u05d0' # 0xE0 -> HEBREW LETTER ALEF + u'\u05d1' # 0xE1 -> HEBREW LETTER BET + u'\u05d2' # 0xE2 -> HEBREW LETTER GIMEL + u'\u05d3' # 0xE3 -> HEBREW LETTER DALET + u'\u05d4' # 0xE4 -> HEBREW LETTER HE + u'\u05d5' # 0xE5 -> HEBREW LETTER VAV + u'\u05d6' # 0xE6 -> HEBREW LETTER ZAYIN + u'\u05d7' # 0xE7 -> HEBREW LETTER HET + u'\u05d8' # 0xE8 -> HEBREW LETTER TET + u'\u05d9' # 0xE9 -> HEBREW LETTER YOD + u'\u05da' # 0xEA -> HEBREW LETTER FINAL KAF + u'\u05db' # 0xEB -> HEBREW LETTER KAF + u'\u05dc' # 0xEC -> HEBREW LETTER LAMED + u'\u05dd' # 0xED -> HEBREW LETTER FINAL MEM + u'\u05de' # 0xEE -> HEBREW LETTER MEM + u'\u05df' # 0xEF -> HEBREW LETTER FINAL NUN + u'\u05e0' # 0xF0 -> HEBREW LETTER NUN + u'\u05e1' # 0xF1 -> HEBREW LETTER SAMEKH + u'\u05e2' # 0xF2 -> HEBREW LETTER AYIN + u'\u05e3' # 0xF3 -> HEBREW LETTER FINAL PE + u'\u05e4' # 0xF4 -> HEBREW LETTER PE + u'\u05e5' # 0xF5 -> HEBREW LETTER FINAL TSADI + u'\u05e6' # 0xF6 -> HEBREW LETTER TSADI + u'\u05e7' # 0xF7 -> HEBREW LETTER QOF + u'\u05e8' # 0xF8 -> HEBREW LETTER RESH + u'\u05e9' # 0xF9 -> HEBREW LETTER SHIN + u'\u05ea' # 0xFA -> HEBREW LETTER TAV + u'\ufffe' # 0xFB -> UNDEFINED + u'\ufffe' # 0xFC -> UNDEFINED + u'\u200e' # 0xFD -> LEFT-TO-RIGHT MARK + u'\u200f' # 0xFE -> RIGHT-TO-LEFT MARK + u'\ufffe' # 0xFF -> UNDEFINED +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp1256.py b/thirdparty/python25/Lib/encodings/cp1256.py new file mode 100644 index 000000000..d8a67a403 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp1256.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1256 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1256.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1256', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\u20ac' # 0x80 -> EURO SIGN + u'\u067e' # 0x81 -> ARABIC LETTER PEH + u'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + u'\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK + u'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + u'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + u'\u2020' # 0x86 -> DAGGER + u'\u2021' # 0x87 -> DOUBLE DAGGER + u'\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT + u'\u2030' # 0x89 -> PER MILLE SIGN + u'\u0679' # 0x8A -> ARABIC LETTER TTEH + u'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + u'\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE + u'\u0686' # 0x8D -> ARABIC LETTER TCHEH + u'\u0698' # 0x8E -> ARABIC LETTER JEH + u'\u0688' # 0x8F -> ARABIC LETTER DDAL + u'\u06af' # 0x90 -> ARABIC LETTER GAF + u'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + u'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + u'\u2022' # 0x95 -> BULLET + u'\u2013' # 0x96 -> EN DASH + u'\u2014' # 0x97 -> EM DASH + u'\u06a9' # 0x98 -> ARABIC LETTER KEHEH + u'\u2122' # 0x99 -> TRADE MARK SIGN + u'\u0691' # 0x9A -> ARABIC LETTER RREH + u'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + u'\u0153' # 0x9C -> LATIN SMALL LIGATURE OE + u'\u200c' # 0x9D -> ZERO WIDTH NON-JOINER + u'\u200d' # 0x9E -> ZERO WIDTH JOINER + u'\u06ba' # 0x9F -> ARABIC LETTER NOON GHUNNA + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\u060c' # 0xA1 -> ARABIC COMMA + u'\xa2' # 0xA2 -> CENT SIGN + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa4' # 0xA4 -> CURRENCY SIGN + u'\xa5' # 0xA5 -> YEN SIGN + u'\xa6' # 0xA6 -> BROKEN BAR + u'\xa7' # 0xA7 -> SECTION SIGN + u'\xa8' # 0xA8 -> DIAERESIS + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\u06be' # 0xAA -> ARABIC LETTER HEH DOACHASHMEE + u'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xac' # 0xAC -> NOT SIGN + u'\xad' # 0xAD -> SOFT HYPHEN + u'\xae' # 0xAE -> REGISTERED SIGN + u'\xaf' # 0xAF -> MACRON + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\xb2' # 0xB2 -> SUPERSCRIPT TWO + u'\xb3' # 0xB3 -> SUPERSCRIPT THREE + u'\xb4' # 0xB4 -> ACUTE ACCENT + u'\xb5' # 0xB5 -> MICRO SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\xb8' # 0xB8 -> CEDILLA + u'\xb9' # 0xB9 -> SUPERSCRIPT ONE + u'\u061b' # 0xBA -> ARABIC SEMICOLON + u'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + u'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + u'\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + u'\u061f' # 0xBF -> ARABIC QUESTION MARK + u'\u06c1' # 0xC0 -> ARABIC LETTER HEH GOAL + u'\u0621' # 0xC1 -> ARABIC LETTER HAMZA + u'\u0622' # 0xC2 -> ARABIC LETTER ALEF WITH MADDA ABOVE + u'\u0623' # 0xC3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE + u'\u0624' # 0xC4 -> ARABIC LETTER WAW WITH HAMZA ABOVE + u'\u0625' # 0xC5 -> ARABIC LETTER ALEF WITH HAMZA BELOW + u'\u0626' # 0xC6 -> ARABIC LETTER YEH WITH HAMZA ABOVE + u'\u0627' # 0xC7 -> ARABIC LETTER ALEF + u'\u0628' # 0xC8 -> ARABIC LETTER BEH + u'\u0629' # 0xC9 -> ARABIC LETTER TEH MARBUTA + u'\u062a' # 0xCA -> ARABIC LETTER TEH + u'\u062b' # 0xCB -> ARABIC LETTER THEH + u'\u062c' # 0xCC -> ARABIC LETTER JEEM + u'\u062d' # 0xCD -> ARABIC LETTER HAH + u'\u062e' # 0xCE -> ARABIC LETTER KHAH + u'\u062f' # 0xCF -> ARABIC LETTER DAL + u'\u0630' # 0xD0 -> ARABIC LETTER THAL + u'\u0631' # 0xD1 -> ARABIC LETTER REH + u'\u0632' # 0xD2 -> ARABIC LETTER ZAIN + u'\u0633' # 0xD3 -> ARABIC LETTER SEEN + u'\u0634' # 0xD4 -> ARABIC LETTER SHEEN + u'\u0635' # 0xD5 -> ARABIC LETTER SAD + u'\u0636' # 0xD6 -> ARABIC LETTER DAD + u'\xd7' # 0xD7 -> MULTIPLICATION SIGN + u'\u0637' # 0xD8 -> ARABIC LETTER TAH + u'\u0638' # 0xD9 -> ARABIC LETTER ZAH + u'\u0639' # 0xDA -> ARABIC LETTER AIN + u'\u063a' # 0xDB -> ARABIC LETTER GHAIN + u'\u0640' # 0xDC -> ARABIC TATWEEL + u'\u0641' # 0xDD -> ARABIC LETTER FEH + u'\u0642' # 0xDE -> ARABIC LETTER QAF + u'\u0643' # 0xDF -> ARABIC LETTER KAF + u'\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + u'\u0644' # 0xE1 -> ARABIC LETTER LAM + u'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\u0645' # 0xE3 -> ARABIC LETTER MEEM + u'\u0646' # 0xE4 -> ARABIC LETTER NOON + u'\u0647' # 0xE5 -> ARABIC LETTER HEH + u'\u0648' # 0xE6 -> ARABIC LETTER WAW + u'\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + u'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + u'\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + u'\u0649' # 0xEC -> ARABIC LETTER ALEF MAKSURA + u'\u064a' # 0xED -> ARABIC LETTER YEH + u'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + u'\u064b' # 0xF0 -> ARABIC FATHATAN + u'\u064c' # 0xF1 -> ARABIC DAMMATAN + u'\u064d' # 0xF2 -> ARABIC KASRATAN + u'\u064e' # 0xF3 -> ARABIC FATHA + u'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\u064f' # 0xF5 -> ARABIC DAMMA + u'\u0650' # 0xF6 -> ARABIC KASRA + u'\xf7' # 0xF7 -> DIVISION SIGN + u'\u0651' # 0xF8 -> ARABIC SHADDA + u'\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + u'\u0652' # 0xFA -> ARABIC SUKUN + u'\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\u200e' # 0xFD -> LEFT-TO-RIGHT MARK + u'\u200f' # 0xFE -> RIGHT-TO-LEFT MARK + u'\u06d2' # 0xFF -> ARABIC LETTER YEH BARREE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp1257.py b/thirdparty/python25/Lib/encodings/cp1257.py new file mode 100644 index 000000000..05917c739 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp1257.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1257 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1257.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1257', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\u20ac' # 0x80 -> EURO SIGN + u'\ufffe' # 0x81 -> UNDEFINED + u'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + u'\ufffe' # 0x83 -> UNDEFINED + u'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + u'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + u'\u2020' # 0x86 -> DAGGER + u'\u2021' # 0x87 -> DOUBLE DAGGER + u'\ufffe' # 0x88 -> UNDEFINED + u'\u2030' # 0x89 -> PER MILLE SIGN + u'\ufffe' # 0x8A -> UNDEFINED + u'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + u'\ufffe' # 0x8C -> UNDEFINED + u'\xa8' # 0x8D -> DIAERESIS + u'\u02c7' # 0x8E -> CARON + u'\xb8' # 0x8F -> CEDILLA + u'\ufffe' # 0x90 -> UNDEFINED + u'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + u'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + u'\u2022' # 0x95 -> BULLET + u'\u2013' # 0x96 -> EN DASH + u'\u2014' # 0x97 -> EM DASH + u'\ufffe' # 0x98 -> UNDEFINED + u'\u2122' # 0x99 -> TRADE MARK SIGN + u'\ufffe' # 0x9A -> UNDEFINED + u'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + u'\ufffe' # 0x9C -> UNDEFINED + u'\xaf' # 0x9D -> MACRON + u'\u02db' # 0x9E -> OGONEK + u'\ufffe' # 0x9F -> UNDEFINED + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\ufffe' # 0xA1 -> UNDEFINED + u'\xa2' # 0xA2 -> CENT SIGN + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa4' # 0xA4 -> CURRENCY SIGN + u'\ufffe' # 0xA5 -> UNDEFINED + u'\xa6' # 0xA6 -> BROKEN BAR + u'\xa7' # 0xA7 -> SECTION SIGN + u'\xd8' # 0xA8 -> LATIN CAPITAL LETTER O WITH STROKE + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\u0156' # 0xAA -> LATIN CAPITAL LETTER R WITH CEDILLA + u'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xac' # 0xAC -> NOT SIGN + u'\xad' # 0xAD -> SOFT HYPHEN + u'\xae' # 0xAE -> REGISTERED SIGN + u'\xc6' # 0xAF -> LATIN CAPITAL LETTER AE + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\xb2' # 0xB2 -> SUPERSCRIPT TWO + u'\xb3' # 0xB3 -> SUPERSCRIPT THREE + u'\xb4' # 0xB4 -> ACUTE ACCENT + u'\xb5' # 0xB5 -> MICRO SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\xf8' # 0xB8 -> LATIN SMALL LETTER O WITH STROKE + u'\xb9' # 0xB9 -> SUPERSCRIPT ONE + u'\u0157' # 0xBA -> LATIN SMALL LETTER R WITH CEDILLA + u'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + u'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + u'\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + u'\xe6' # 0xBF -> LATIN SMALL LETTER AE + u'\u0104' # 0xC0 -> LATIN CAPITAL LETTER A WITH OGONEK + u'\u012e' # 0xC1 -> LATIN CAPITAL LETTER I WITH OGONEK + u'\u0100' # 0xC2 -> LATIN CAPITAL LETTER A WITH MACRON + u'\u0106' # 0xC3 -> LATIN CAPITAL LETTER C WITH ACUTE + u'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\u0118' # 0xC6 -> LATIN CAPITAL LETTER E WITH OGONEK + u'\u0112' # 0xC7 -> LATIN CAPITAL LETTER E WITH MACRON + u'\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON + u'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\u0179' # 0xCA -> LATIN CAPITAL LETTER Z WITH ACUTE + u'\u0116' # 0xCB -> LATIN CAPITAL LETTER E WITH DOT ABOVE + u'\u0122' # 0xCC -> LATIN CAPITAL LETTER G WITH CEDILLA + u'\u0136' # 0xCD -> LATIN CAPITAL LETTER K WITH CEDILLA + u'\u012a' # 0xCE -> LATIN CAPITAL LETTER I WITH MACRON + u'\u013b' # 0xCF -> LATIN CAPITAL LETTER L WITH CEDILLA + u'\u0160' # 0xD0 -> LATIN CAPITAL LETTER S WITH CARON + u'\u0143' # 0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE + u'\u0145' # 0xD2 -> LATIN CAPITAL LETTER N WITH CEDILLA + u'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\u014c' # 0xD4 -> LATIN CAPITAL LETTER O WITH MACRON + u'\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + u'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xd7' # 0xD7 -> MULTIPLICATION SIGN + u'\u0172' # 0xD8 -> LATIN CAPITAL LETTER U WITH OGONEK + u'\u0141' # 0xD9 -> LATIN CAPITAL LETTER L WITH STROKE + u'\u015a' # 0xDA -> LATIN CAPITAL LETTER S WITH ACUTE + u'\u016a' # 0xDB -> LATIN CAPITAL LETTER U WITH MACRON + u'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\u017b' # 0xDD -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + u'\u017d' # 0xDE -> LATIN CAPITAL LETTER Z WITH CARON + u'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + u'\u0105' # 0xE0 -> LATIN SMALL LETTER A WITH OGONEK + u'\u012f' # 0xE1 -> LATIN SMALL LETTER I WITH OGONEK + u'\u0101' # 0xE2 -> LATIN SMALL LETTER A WITH MACRON + u'\u0107' # 0xE3 -> LATIN SMALL LETTER C WITH ACUTE + u'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\u0119' # 0xE6 -> LATIN SMALL LETTER E WITH OGONEK + u'\u0113' # 0xE7 -> LATIN SMALL LETTER E WITH MACRON + u'\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON + u'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + u'\u017a' # 0xEA -> LATIN SMALL LETTER Z WITH ACUTE + u'\u0117' # 0xEB -> LATIN SMALL LETTER E WITH DOT ABOVE + u'\u0123' # 0xEC -> LATIN SMALL LETTER G WITH CEDILLA + u'\u0137' # 0xED -> LATIN SMALL LETTER K WITH CEDILLA + u'\u012b' # 0xEE -> LATIN SMALL LETTER I WITH MACRON + u'\u013c' # 0xEF -> LATIN SMALL LETTER L WITH CEDILLA + u'\u0161' # 0xF0 -> LATIN SMALL LETTER S WITH CARON + u'\u0144' # 0xF1 -> LATIN SMALL LETTER N WITH ACUTE + u'\u0146' # 0xF2 -> LATIN SMALL LETTER N WITH CEDILLA + u'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + u'\u014d' # 0xF4 -> LATIN SMALL LETTER O WITH MACRON + u'\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + u'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf7' # 0xF7 -> DIVISION SIGN + u'\u0173' # 0xF8 -> LATIN SMALL LETTER U WITH OGONEK + u'\u0142' # 0xF9 -> LATIN SMALL LETTER L WITH STROKE + u'\u015b' # 0xFA -> LATIN SMALL LETTER S WITH ACUTE + u'\u016b' # 0xFB -> LATIN SMALL LETTER U WITH MACRON + u'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\u017c' # 0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE + u'\u017e' # 0xFE -> LATIN SMALL LETTER Z WITH CARON + u'\u02d9' # 0xFF -> DOT ABOVE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp1258.py b/thirdparty/python25/Lib/encodings/cp1258.py new file mode 100644 index 000000000..a6e8408d0 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp1258.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp1258 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1258.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp1258', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\u20ac' # 0x80 -> EURO SIGN + u'\ufffe' # 0x81 -> UNDEFINED + u'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK + u'\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK + u'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK + u'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + u'\u2020' # 0x86 -> DAGGER + u'\u2021' # 0x87 -> DOUBLE DAGGER + u'\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT + u'\u2030' # 0x89 -> PER MILLE SIGN + u'\ufffe' # 0x8A -> UNDEFINED + u'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + u'\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE + u'\ufffe' # 0x8D -> UNDEFINED + u'\ufffe' # 0x8E -> UNDEFINED + u'\ufffe' # 0x8F -> UNDEFINED + u'\ufffe' # 0x90 -> UNDEFINED + u'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + u'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + u'\u2022' # 0x95 -> BULLET + u'\u2013' # 0x96 -> EN DASH + u'\u2014' # 0x97 -> EM DASH + u'\u02dc' # 0x98 -> SMALL TILDE + u'\u2122' # 0x99 -> TRADE MARK SIGN + u'\ufffe' # 0x9A -> UNDEFINED + u'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + u'\u0153' # 0x9C -> LATIN SMALL LIGATURE OE + u'\ufffe' # 0x9D -> UNDEFINED + u'\ufffe' # 0x9E -> UNDEFINED + u'\u0178' # 0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK + u'\xa2' # 0xA2 -> CENT SIGN + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa4' # 0xA4 -> CURRENCY SIGN + u'\xa5' # 0xA5 -> YEN SIGN + u'\xa6' # 0xA6 -> BROKEN BAR + u'\xa7' # 0xA7 -> SECTION SIGN + u'\xa8' # 0xA8 -> DIAERESIS + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR + u'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xac' # 0xAC -> NOT SIGN + u'\xad' # 0xAD -> SOFT HYPHEN + u'\xae' # 0xAE -> REGISTERED SIGN + u'\xaf' # 0xAF -> MACRON + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\xb2' # 0xB2 -> SUPERSCRIPT TWO + u'\xb3' # 0xB3 -> SUPERSCRIPT THREE + u'\xb4' # 0xB4 -> ACUTE ACCENT + u'\xb5' # 0xB5 -> MICRO SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\xb8' # 0xB8 -> CEDILLA + u'\xb9' # 0xB9 -> SUPERSCRIPT ONE + u'\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR + u'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + u'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + u'\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + u'\xbf' # 0xBF -> INVERTED QUESTION MARK + u'\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\u0102' # 0xC3 -> LATIN CAPITAL LETTER A WITH BREVE + u'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + u'\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\u0300' # 0xCC -> COMBINING GRAVE ACCENT + u'\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE + u'\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE + u'\u0309' # 0xD2 -> COMBINING HOOK ABOVE + u'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\u01a0' # 0xD5 -> LATIN CAPITAL LETTER O WITH HORN + u'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xd7' # 0xD7 -> MULTIPLICATION SIGN + u'\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + u'\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + u'\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\u01af' # 0xDD -> LATIN CAPITAL LETTER U WITH HORN + u'\u0303' # 0xDE -> COMBINING TILDE + u'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + u'\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\u0103' # 0xE3 -> LATIN SMALL LETTER A WITH BREVE + u'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe6' # 0xE6 -> LATIN SMALL LETTER AE + u'\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + u'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + u'\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + u'\u0301' # 0xEC -> COMBINING ACUTE ACCENT + u'\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + u'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + u'\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE + u'\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE + u'\u0323' # 0xF2 -> COMBINING DOT BELOW + u'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + u'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\u01a1' # 0xF5 -> LATIN SMALL LETTER O WITH HORN + u'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf7' # 0xF7 -> DIVISION SIGN + u'\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + u'\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + u'\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + u'\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\u01b0' # 0xFD -> LATIN SMALL LETTER U WITH HORN + u'\u20ab' # 0xFE -> DONG SIGN + u'\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp424.py b/thirdparty/python25/Lib/encodings/cp424.py new file mode 100644 index 000000000..343d7d749 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp424.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp424 generated from 'MAPPINGS/VENDORS/MISC/CP424.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp424', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x9c' # 0x04 -> SELECT + u'\t' # 0x05 -> HORIZONTAL TABULATION + u'\x86' # 0x06 -> REQUIRED NEW LINE + u'\x7f' # 0x07 -> DELETE + u'\x97' # 0x08 -> GRAPHIC ESCAPE + u'\x8d' # 0x09 -> SUPERSCRIPT + u'\x8e' # 0x0A -> REPEAT + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x9d' # 0x14 -> RESTORE/ENABLE PRESENTATION + u'\x85' # 0x15 -> NEW LINE + u'\x08' # 0x16 -> BACKSPACE + u'\x87' # 0x17 -> PROGRAM OPERATOR COMMUNICATION + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x92' # 0x1A -> UNIT BACK SPACE + u'\x8f' # 0x1B -> CUSTOMER USE ONE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u'\x80' # 0x20 -> DIGIT SELECT + u'\x81' # 0x21 -> START OF SIGNIFICANCE + u'\x82' # 0x22 -> FIELD SEPARATOR + u'\x83' # 0x23 -> WORD UNDERSCORE + u'\x84' # 0x24 -> BYPASS OR INHIBIT PRESENTATION + u'\n' # 0x25 -> LINE FEED + u'\x17' # 0x26 -> END OF TRANSMISSION BLOCK + u'\x1b' # 0x27 -> ESCAPE + u'\x88' # 0x28 -> SET ATTRIBUTE + u'\x89' # 0x29 -> START FIELD EXTENDED + u'\x8a' # 0x2A -> SET MODE OR SWITCH + u'\x8b' # 0x2B -> CONTROL SEQUENCE PREFIX + u'\x8c' # 0x2C -> MODIFY FIELD ATTRIBUTE + u'\x05' # 0x2D -> ENQUIRY + u'\x06' # 0x2E -> ACKNOWLEDGE + u'\x07' # 0x2F -> BELL + u'\x90' # 0x30 -> + u'\x91' # 0x31 -> + u'\x16' # 0x32 -> SYNCHRONOUS IDLE + u'\x93' # 0x33 -> INDEX RETURN + u'\x94' # 0x34 -> PRESENTATION POSITION + u'\x95' # 0x35 -> TRANSPARENT + u'\x96' # 0x36 -> NUMERIC BACKSPACE + u'\x04' # 0x37 -> END OF TRANSMISSION + u'\x98' # 0x38 -> SUBSCRIPT + u'\x99' # 0x39 -> INDENT TABULATION + u'\x9a' # 0x3A -> REVERSE FORM FEED + u'\x9b' # 0x3B -> CUSTOMER USE THREE + u'\x14' # 0x3C -> DEVICE CONTROL FOUR + u'\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE + u'\x9e' # 0x3E -> + u'\x1a' # 0x3F -> SUBSTITUTE + u' ' # 0x40 -> SPACE + u'\u05d0' # 0x41 -> HEBREW LETTER ALEF + u'\u05d1' # 0x42 -> HEBREW LETTER BET + u'\u05d2' # 0x43 -> HEBREW LETTER GIMEL + u'\u05d3' # 0x44 -> HEBREW LETTER DALET + u'\u05d4' # 0x45 -> HEBREW LETTER HE + u'\u05d5' # 0x46 -> HEBREW LETTER VAV + u'\u05d6' # 0x47 -> HEBREW LETTER ZAYIN + u'\u05d7' # 0x48 -> HEBREW LETTER HET + u'\u05d8' # 0x49 -> HEBREW LETTER TET + u'\xa2' # 0x4A -> CENT SIGN + u'.' # 0x4B -> FULL STOP + u'<' # 0x4C -> LESS-THAN SIGN + u'(' # 0x4D -> LEFT PARENTHESIS + u'+' # 0x4E -> PLUS SIGN + u'|' # 0x4F -> VERTICAL LINE + u'&' # 0x50 -> AMPERSAND + u'\u05d9' # 0x51 -> HEBREW LETTER YOD + u'\u05da' # 0x52 -> HEBREW LETTER FINAL KAF + u'\u05db' # 0x53 -> HEBREW LETTER KAF + u'\u05dc' # 0x54 -> HEBREW LETTER LAMED + u'\u05dd' # 0x55 -> HEBREW LETTER FINAL MEM + u'\u05de' # 0x56 -> HEBREW LETTER MEM + u'\u05df' # 0x57 -> HEBREW LETTER FINAL NUN + u'\u05e0' # 0x58 -> HEBREW LETTER NUN + u'\u05e1' # 0x59 -> HEBREW LETTER SAMEKH + u'!' # 0x5A -> EXCLAMATION MARK + u'$' # 0x5B -> DOLLAR SIGN + u'*' # 0x5C -> ASTERISK + u')' # 0x5D -> RIGHT PARENTHESIS + u';' # 0x5E -> SEMICOLON + u'\xac' # 0x5F -> NOT SIGN + u'-' # 0x60 -> HYPHEN-MINUS + u'/' # 0x61 -> SOLIDUS + u'\u05e2' # 0x62 -> HEBREW LETTER AYIN + u'\u05e3' # 0x63 -> HEBREW LETTER FINAL PE + u'\u05e4' # 0x64 -> HEBREW LETTER PE + u'\u05e5' # 0x65 -> HEBREW LETTER FINAL TSADI + u'\u05e6' # 0x66 -> HEBREW LETTER TSADI + u'\u05e7' # 0x67 -> HEBREW LETTER QOF + u'\u05e8' # 0x68 -> HEBREW LETTER RESH + u'\u05e9' # 0x69 -> HEBREW LETTER SHIN + u'\xa6' # 0x6A -> BROKEN BAR + u',' # 0x6B -> COMMA + u'%' # 0x6C -> PERCENT SIGN + u'_' # 0x6D -> LOW LINE + u'>' # 0x6E -> GREATER-THAN SIGN + u'?' # 0x6F -> QUESTION MARK + u'\ufffe' # 0x70 -> UNDEFINED + u'\u05ea' # 0x71 -> HEBREW LETTER TAV + u'\ufffe' # 0x72 -> UNDEFINED + u'\ufffe' # 0x73 -> UNDEFINED + u'\xa0' # 0x74 -> NO-BREAK SPACE + u'\ufffe' # 0x75 -> UNDEFINED + u'\ufffe' # 0x76 -> UNDEFINED + u'\ufffe' # 0x77 -> UNDEFINED + u'\u2017' # 0x78 -> DOUBLE LOW LINE + u'`' # 0x79 -> GRAVE ACCENT + u':' # 0x7A -> COLON + u'#' # 0x7B -> NUMBER SIGN + u'@' # 0x7C -> COMMERCIAL AT + u"'" # 0x7D -> APOSTROPHE + u'=' # 0x7E -> EQUALS SIGN + u'"' # 0x7F -> QUOTATION MARK + u'\ufffe' # 0x80 -> UNDEFINED + u'a' # 0x81 -> LATIN SMALL LETTER A + u'b' # 0x82 -> LATIN SMALL LETTER B + u'c' # 0x83 -> LATIN SMALL LETTER C + u'd' # 0x84 -> LATIN SMALL LETTER D + u'e' # 0x85 -> LATIN SMALL LETTER E + u'f' # 0x86 -> LATIN SMALL LETTER F + u'g' # 0x87 -> LATIN SMALL LETTER G + u'h' # 0x88 -> LATIN SMALL LETTER H + u'i' # 0x89 -> LATIN SMALL LETTER I + u'\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\ufffe' # 0x8C -> UNDEFINED + u'\ufffe' # 0x8D -> UNDEFINED + u'\ufffe' # 0x8E -> UNDEFINED + u'\xb1' # 0x8F -> PLUS-MINUS SIGN + u'\xb0' # 0x90 -> DEGREE SIGN + u'j' # 0x91 -> LATIN SMALL LETTER J + u'k' # 0x92 -> LATIN SMALL LETTER K + u'l' # 0x93 -> LATIN SMALL LETTER L + u'm' # 0x94 -> LATIN SMALL LETTER M + u'n' # 0x95 -> LATIN SMALL LETTER N + u'o' # 0x96 -> LATIN SMALL LETTER O + u'p' # 0x97 -> LATIN SMALL LETTER P + u'q' # 0x98 -> LATIN SMALL LETTER Q + u'r' # 0x99 -> LATIN SMALL LETTER R + u'\ufffe' # 0x9A -> UNDEFINED + u'\ufffe' # 0x9B -> UNDEFINED + u'\ufffe' # 0x9C -> UNDEFINED + u'\xb8' # 0x9D -> CEDILLA + u'\ufffe' # 0x9E -> UNDEFINED + u'\xa4' # 0x9F -> CURRENCY SIGN + u'\xb5' # 0xA0 -> MICRO SIGN + u'~' # 0xA1 -> TILDE + u's' # 0xA2 -> LATIN SMALL LETTER S + u't' # 0xA3 -> LATIN SMALL LETTER T + u'u' # 0xA4 -> LATIN SMALL LETTER U + u'v' # 0xA5 -> LATIN SMALL LETTER V + u'w' # 0xA6 -> LATIN SMALL LETTER W + u'x' # 0xA7 -> LATIN SMALL LETTER X + u'y' # 0xA8 -> LATIN SMALL LETTER Y + u'z' # 0xA9 -> LATIN SMALL LETTER Z + u'\ufffe' # 0xAA -> UNDEFINED + u'\ufffe' # 0xAB -> UNDEFINED + u'\ufffe' # 0xAC -> UNDEFINED + u'\ufffe' # 0xAD -> UNDEFINED + u'\ufffe' # 0xAE -> UNDEFINED + u'\xae' # 0xAF -> REGISTERED SIGN + u'^' # 0xB0 -> CIRCUMFLEX ACCENT + u'\xa3' # 0xB1 -> POUND SIGN + u'\xa5' # 0xB2 -> YEN SIGN + u'\xb7' # 0xB3 -> MIDDLE DOT + u'\xa9' # 0xB4 -> COPYRIGHT SIGN + u'\xa7' # 0xB5 -> SECTION SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER + u'\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF + u'\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS + u'[' # 0xBA -> LEFT SQUARE BRACKET + u']' # 0xBB -> RIGHT SQUARE BRACKET + u'\xaf' # 0xBC -> MACRON + u'\xa8' # 0xBD -> DIAERESIS + u'\xb4' # 0xBE -> ACUTE ACCENT + u'\xd7' # 0xBF -> MULTIPLICATION SIGN + u'{' # 0xC0 -> LEFT CURLY BRACKET + u'A' # 0xC1 -> LATIN CAPITAL LETTER A + u'B' # 0xC2 -> LATIN CAPITAL LETTER B + u'C' # 0xC3 -> LATIN CAPITAL LETTER C + u'D' # 0xC4 -> LATIN CAPITAL LETTER D + u'E' # 0xC5 -> LATIN CAPITAL LETTER E + u'F' # 0xC6 -> LATIN CAPITAL LETTER F + u'G' # 0xC7 -> LATIN CAPITAL LETTER G + u'H' # 0xC8 -> LATIN CAPITAL LETTER H + u'I' # 0xC9 -> LATIN CAPITAL LETTER I + u'\xad' # 0xCA -> SOFT HYPHEN + u'\ufffe' # 0xCB -> UNDEFINED + u'\ufffe' # 0xCC -> UNDEFINED + u'\ufffe' # 0xCD -> UNDEFINED + u'\ufffe' # 0xCE -> UNDEFINED + u'\ufffe' # 0xCF -> UNDEFINED + u'}' # 0xD0 -> RIGHT CURLY BRACKET + u'J' # 0xD1 -> LATIN CAPITAL LETTER J + u'K' # 0xD2 -> LATIN CAPITAL LETTER K + u'L' # 0xD3 -> LATIN CAPITAL LETTER L + u'M' # 0xD4 -> LATIN CAPITAL LETTER M + u'N' # 0xD5 -> LATIN CAPITAL LETTER N + u'O' # 0xD6 -> LATIN CAPITAL LETTER O + u'P' # 0xD7 -> LATIN CAPITAL LETTER P + u'Q' # 0xD8 -> LATIN CAPITAL LETTER Q + u'R' # 0xD9 -> LATIN CAPITAL LETTER R + u'\xb9' # 0xDA -> SUPERSCRIPT ONE + u'\ufffe' # 0xDB -> UNDEFINED + u'\ufffe' # 0xDC -> UNDEFINED + u'\ufffe' # 0xDD -> UNDEFINED + u'\ufffe' # 0xDE -> UNDEFINED + u'\ufffe' # 0xDF -> UNDEFINED + u'\\' # 0xE0 -> REVERSE SOLIDUS + u'\xf7' # 0xE1 -> DIVISION SIGN + u'S' # 0xE2 -> LATIN CAPITAL LETTER S + u'T' # 0xE3 -> LATIN CAPITAL LETTER T + u'U' # 0xE4 -> LATIN CAPITAL LETTER U + u'V' # 0xE5 -> LATIN CAPITAL LETTER V + u'W' # 0xE6 -> LATIN CAPITAL LETTER W + u'X' # 0xE7 -> LATIN CAPITAL LETTER X + u'Y' # 0xE8 -> LATIN CAPITAL LETTER Y + u'Z' # 0xE9 -> LATIN CAPITAL LETTER Z + u'\xb2' # 0xEA -> SUPERSCRIPT TWO + u'\ufffe' # 0xEB -> UNDEFINED + u'\ufffe' # 0xEC -> UNDEFINED + u'\ufffe' # 0xED -> UNDEFINED + u'\ufffe' # 0xEE -> UNDEFINED + u'\ufffe' # 0xEF -> UNDEFINED + u'0' # 0xF0 -> DIGIT ZERO + u'1' # 0xF1 -> DIGIT ONE + u'2' # 0xF2 -> DIGIT TWO + u'3' # 0xF3 -> DIGIT THREE + u'4' # 0xF4 -> DIGIT FOUR + u'5' # 0xF5 -> DIGIT FIVE + u'6' # 0xF6 -> DIGIT SIX + u'7' # 0xF7 -> DIGIT SEVEN + u'8' # 0xF8 -> DIGIT EIGHT + u'9' # 0xF9 -> DIGIT NINE + u'\xb3' # 0xFA -> SUPERSCRIPT THREE + u'\ufffe' # 0xFB -> UNDEFINED + u'\ufffe' # 0xFC -> UNDEFINED + u'\ufffe' # 0xFD -> UNDEFINED + u'\ufffe' # 0xFE -> UNDEFINED + u'\x9f' # 0xFF -> EIGHT ONES +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp437.py b/thirdparty/python25/Lib/encodings/cp437.py new file mode 100644 index 000000000..800ae5021 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp437.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec cp437 generated from 'VENDORS/MICSFT/PC/CP437.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp437', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE + 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS + 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE + 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE + 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE + 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE + 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE + 0x0098: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x00a2, # CENT SIGN + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00a5, # YEN SIGN + 0x009e: 0x20a7, # PESETA SIGN + 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK + 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE + 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE + 0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR + 0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR + 0x00a8: 0x00bf, # INVERTED QUESTION MARK + 0x00a9: 0x2310, # REVERSED NOT SIGN + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA + 0x00e3: 0x03c0, # GREEK SMALL LETTER PI + 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA + 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU + 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI + 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA + 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA + 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA + 0x00ec: 0x221e, # INFINITY + 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI + 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON + 0x00ef: 0x2229, # INTERSECTION + 0x00f0: 0x2261, # IDENTICAL TO + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO + 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO + 0x00f4: 0x2320, # TOP HALF INTEGRAL + 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x2248, # ALMOST EQUAL TO + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x221a, # SQUARE ROOT + 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x0000 -> NULL + u'\x01' # 0x0001 -> START OF HEADING + u'\x02' # 0x0002 -> START OF TEXT + u'\x03' # 0x0003 -> END OF TEXT + u'\x04' # 0x0004 -> END OF TRANSMISSION + u'\x05' # 0x0005 -> ENQUIRY + u'\x06' # 0x0006 -> ACKNOWLEDGE + u'\x07' # 0x0007 -> BELL + u'\x08' # 0x0008 -> BACKSPACE + u'\t' # 0x0009 -> HORIZONTAL TABULATION + u'\n' # 0x000a -> LINE FEED + u'\x0b' # 0x000b -> VERTICAL TABULATION + u'\x0c' # 0x000c -> FORM FEED + u'\r' # 0x000d -> CARRIAGE RETURN + u'\x0e' # 0x000e -> SHIFT OUT + u'\x0f' # 0x000f -> SHIFT IN + u'\x10' # 0x0010 -> DATA LINK ESCAPE + u'\x11' # 0x0011 -> DEVICE CONTROL ONE + u'\x12' # 0x0012 -> DEVICE CONTROL TWO + u'\x13' # 0x0013 -> DEVICE CONTROL THREE + u'\x14' # 0x0014 -> DEVICE CONTROL FOUR + u'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x0016 -> SYNCHRONOUS IDLE + u'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x0018 -> CANCEL + u'\x19' # 0x0019 -> END OF MEDIUM + u'\x1a' # 0x001a -> SUBSTITUTE + u'\x1b' # 0x001b -> ESCAPE + u'\x1c' # 0x001c -> FILE SEPARATOR + u'\x1d' # 0x001d -> GROUP SEPARATOR + u'\x1e' # 0x001e -> RECORD SEPARATOR + u'\x1f' # 0x001f -> UNIT SEPARATOR + u' ' # 0x0020 -> SPACE + u'!' # 0x0021 -> EXCLAMATION MARK + u'"' # 0x0022 -> QUOTATION MARK + u'#' # 0x0023 -> NUMBER SIGN + u'$' # 0x0024 -> DOLLAR SIGN + u'%' # 0x0025 -> PERCENT SIGN + u'&' # 0x0026 -> AMPERSAND + u"'" # 0x0027 -> APOSTROPHE + u'(' # 0x0028 -> LEFT PARENTHESIS + u')' # 0x0029 -> RIGHT PARENTHESIS + u'*' # 0x002a -> ASTERISK + u'+' # 0x002b -> PLUS SIGN + u',' # 0x002c -> COMMA + u'-' # 0x002d -> HYPHEN-MINUS + u'.' # 0x002e -> FULL STOP + u'/' # 0x002f -> SOLIDUS + u'0' # 0x0030 -> DIGIT ZERO + u'1' # 0x0031 -> DIGIT ONE + u'2' # 0x0032 -> DIGIT TWO + u'3' # 0x0033 -> DIGIT THREE + u'4' # 0x0034 -> DIGIT FOUR + u'5' # 0x0035 -> DIGIT FIVE + u'6' # 0x0036 -> DIGIT SIX + u'7' # 0x0037 -> DIGIT SEVEN + u'8' # 0x0038 -> DIGIT EIGHT + u'9' # 0x0039 -> DIGIT NINE + u':' # 0x003a -> COLON + u';' # 0x003b -> SEMICOLON + u'<' # 0x003c -> LESS-THAN SIGN + u'=' # 0x003d -> EQUALS SIGN + u'>' # 0x003e -> GREATER-THAN SIGN + u'?' # 0x003f -> QUESTION MARK + u'@' # 0x0040 -> COMMERCIAL AT + u'A' # 0x0041 -> LATIN CAPITAL LETTER A + u'B' # 0x0042 -> LATIN CAPITAL LETTER B + u'C' # 0x0043 -> LATIN CAPITAL LETTER C + u'D' # 0x0044 -> LATIN CAPITAL LETTER D + u'E' # 0x0045 -> LATIN CAPITAL LETTER E + u'F' # 0x0046 -> LATIN CAPITAL LETTER F + u'G' # 0x0047 -> LATIN CAPITAL LETTER G + u'H' # 0x0048 -> LATIN CAPITAL LETTER H + u'I' # 0x0049 -> LATIN CAPITAL LETTER I + u'J' # 0x004a -> LATIN CAPITAL LETTER J + u'K' # 0x004b -> LATIN CAPITAL LETTER K + u'L' # 0x004c -> LATIN CAPITAL LETTER L + u'M' # 0x004d -> LATIN CAPITAL LETTER M + u'N' # 0x004e -> LATIN CAPITAL LETTER N + u'O' # 0x004f -> LATIN CAPITAL LETTER O + u'P' # 0x0050 -> LATIN CAPITAL LETTER P + u'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + u'R' # 0x0052 -> LATIN CAPITAL LETTER R + u'S' # 0x0053 -> LATIN CAPITAL LETTER S + u'T' # 0x0054 -> LATIN CAPITAL LETTER T + u'U' # 0x0055 -> LATIN CAPITAL LETTER U + u'V' # 0x0056 -> LATIN CAPITAL LETTER V + u'W' # 0x0057 -> LATIN CAPITAL LETTER W + u'X' # 0x0058 -> LATIN CAPITAL LETTER X + u'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + u'Z' # 0x005a -> LATIN CAPITAL LETTER Z + u'[' # 0x005b -> LEFT SQUARE BRACKET + u'\\' # 0x005c -> REVERSE SOLIDUS + u']' # 0x005d -> RIGHT SQUARE BRACKET + u'^' # 0x005e -> CIRCUMFLEX ACCENT + u'_' # 0x005f -> LOW LINE + u'`' # 0x0060 -> GRAVE ACCENT + u'a' # 0x0061 -> LATIN SMALL LETTER A + u'b' # 0x0062 -> LATIN SMALL LETTER B + u'c' # 0x0063 -> LATIN SMALL LETTER C + u'd' # 0x0064 -> LATIN SMALL LETTER D + u'e' # 0x0065 -> LATIN SMALL LETTER E + u'f' # 0x0066 -> LATIN SMALL LETTER F + u'g' # 0x0067 -> LATIN SMALL LETTER G + u'h' # 0x0068 -> LATIN SMALL LETTER H + u'i' # 0x0069 -> LATIN SMALL LETTER I + u'j' # 0x006a -> LATIN SMALL LETTER J + u'k' # 0x006b -> LATIN SMALL LETTER K + u'l' # 0x006c -> LATIN SMALL LETTER L + u'm' # 0x006d -> LATIN SMALL LETTER M + u'n' # 0x006e -> LATIN SMALL LETTER N + u'o' # 0x006f -> LATIN SMALL LETTER O + u'p' # 0x0070 -> LATIN SMALL LETTER P + u'q' # 0x0071 -> LATIN SMALL LETTER Q + u'r' # 0x0072 -> LATIN SMALL LETTER R + u's' # 0x0073 -> LATIN SMALL LETTER S + u't' # 0x0074 -> LATIN SMALL LETTER T + u'u' # 0x0075 -> LATIN SMALL LETTER U + u'v' # 0x0076 -> LATIN SMALL LETTER V + u'w' # 0x0077 -> LATIN SMALL LETTER W + u'x' # 0x0078 -> LATIN SMALL LETTER X + u'y' # 0x0079 -> LATIN SMALL LETTER Y + u'z' # 0x007a -> LATIN SMALL LETTER Z + u'{' # 0x007b -> LEFT CURLY BRACKET + u'|' # 0x007c -> VERTICAL LINE + u'}' # 0x007d -> RIGHT CURLY BRACKET + u'~' # 0x007e -> TILDE + u'\x7f' # 0x007f -> DELETE + u'\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + u'\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE + u'\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE + u'\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE + u'\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE + u'\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE + u'\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE + u'\xff' # 0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS + u'\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xa2' # 0x009b -> CENT SIGN + u'\xa3' # 0x009c -> POUND SIGN + u'\xa5' # 0x009d -> YEN SIGN + u'\u20a7' # 0x009e -> PESETA SIGN + u'\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK + u'\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE + u'\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE + u'\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + u'\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + u'\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE + u'\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR + u'\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR + u'\xbf' # 0x00a8 -> INVERTED QUESTION MARK + u'\u2310' # 0x00a9 -> REVERSED NOT SIGN + u'\xac' # 0x00aa -> NOT SIGN + u'\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + u'\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + u'\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK + u'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2591' # 0x00b0 -> LIGHT SHADE + u'\u2592' # 0x00b1 -> MEDIUM SHADE + u'\u2593' # 0x00b2 -> DARK SHADE + u'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + u'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + u'\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + u'\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + u'\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + u'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + u'\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + u'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + u'\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + u'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + u'\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + u'\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + u'\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + u'\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + u'\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + u'\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + u'\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + u'\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + u'\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + u'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2588' # 0x00db -> FULL BLOCK + u'\u2584' # 0x00dc -> LOWER HALF BLOCK + u'\u258c' # 0x00dd -> LEFT HALF BLOCK + u'\u2590' # 0x00de -> RIGHT HALF BLOCK + u'\u2580' # 0x00df -> UPPER HALF BLOCK + u'\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA + u'\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S + u'\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA + u'\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI + u'\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA + u'\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA + u'\xb5' # 0x00e6 -> MICRO SIGN + u'\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU + u'\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI + u'\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA + u'\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA + u'\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA + u'\u221e' # 0x00ec -> INFINITY + u'\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI + u'\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON + u'\u2229' # 0x00ef -> INTERSECTION + u'\u2261' # 0x00f0 -> IDENTICAL TO + u'\xb1' # 0x00f1 -> PLUS-MINUS SIGN + u'\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO + u'\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO + u'\u2320' # 0x00f4 -> TOP HALF INTEGRAL + u'\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL + u'\xf7' # 0x00f6 -> DIVISION SIGN + u'\u2248' # 0x00f7 -> ALMOST EQUAL TO + u'\xb0' # 0x00f8 -> DEGREE SIGN + u'\u2219' # 0x00f9 -> BULLET OPERATOR + u'\xb7' # 0x00fa -> MIDDLE DOT + u'\u221a' # 0x00fb -> SQUARE ROOT + u'\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N + u'\xb2' # 0x00fd -> SUPERSCRIPT TWO + u'\u25a0' # 0x00fe -> BLACK SQUARE + u'\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK + 0x00a2: 0x009b, # CENT SIGN + 0x00a3: 0x009c, # POUND SIGN + 0x00a5: 0x009d, # YEN SIGN + 0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00bf: 0x00a8, # INVERTED QUESTION MARK + 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE + 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE + 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S + 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE + 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE + 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE + 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE + 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE + 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE + 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS + 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE + 0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x00ff: 0x0098, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK + 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA + 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA + 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA + 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI + 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA + 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA + 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA + 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON + 0x03c0: 0x00e3, # GREEK SMALL LETTER PI + 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA + 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU + 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI + 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N + 0x20a7: 0x009e, # PESETA SIGN + 0x2219: 0x00f9, # BULLET OPERATOR + 0x221a: 0x00fb, # SQUARE ROOT + 0x221e: 0x00ec, # INFINITY + 0x2229: 0x00ef, # INTERSECTION + 0x2248: 0x00f7, # ALMOST EQUAL TO + 0x2261: 0x00f0, # IDENTICAL TO + 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO + 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO + 0x2310: 0x00a9, # REVERSED NOT SIGN + 0x2320: 0x00f4, # TOP HALF INTEGRAL + 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/thirdparty/python25/Lib/encodings/cp500.py b/thirdparty/python25/Lib/encodings/cp500.py new file mode 100644 index 000000000..5f609574c --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp500.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp500 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP500.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp500', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x9c' # 0x04 -> CONTROL + u'\t' # 0x05 -> HORIZONTAL TABULATION + u'\x86' # 0x06 -> CONTROL + u'\x7f' # 0x07 -> DELETE + u'\x97' # 0x08 -> CONTROL + u'\x8d' # 0x09 -> CONTROL + u'\x8e' # 0x0A -> CONTROL + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x9d' # 0x14 -> CONTROL + u'\x85' # 0x15 -> CONTROL + u'\x08' # 0x16 -> BACKSPACE + u'\x87' # 0x17 -> CONTROL + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x92' # 0x1A -> CONTROL + u'\x8f' # 0x1B -> CONTROL + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u'\x80' # 0x20 -> CONTROL + u'\x81' # 0x21 -> CONTROL + u'\x82' # 0x22 -> CONTROL + u'\x83' # 0x23 -> CONTROL + u'\x84' # 0x24 -> CONTROL + u'\n' # 0x25 -> LINE FEED + u'\x17' # 0x26 -> END OF TRANSMISSION BLOCK + u'\x1b' # 0x27 -> ESCAPE + u'\x88' # 0x28 -> CONTROL + u'\x89' # 0x29 -> CONTROL + u'\x8a' # 0x2A -> CONTROL + u'\x8b' # 0x2B -> CONTROL + u'\x8c' # 0x2C -> CONTROL + u'\x05' # 0x2D -> ENQUIRY + u'\x06' # 0x2E -> ACKNOWLEDGE + u'\x07' # 0x2F -> BELL + u'\x90' # 0x30 -> CONTROL + u'\x91' # 0x31 -> CONTROL + u'\x16' # 0x32 -> SYNCHRONOUS IDLE + u'\x93' # 0x33 -> CONTROL + u'\x94' # 0x34 -> CONTROL + u'\x95' # 0x35 -> CONTROL + u'\x96' # 0x36 -> CONTROL + u'\x04' # 0x37 -> END OF TRANSMISSION + u'\x98' # 0x38 -> CONTROL + u'\x99' # 0x39 -> CONTROL + u'\x9a' # 0x3A -> CONTROL + u'\x9b' # 0x3B -> CONTROL + u'\x14' # 0x3C -> DEVICE CONTROL FOUR + u'\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE + u'\x9e' # 0x3E -> CONTROL + u'\x1a' # 0x3F -> SUBSTITUTE + u' ' # 0x40 -> SPACE + u'\xa0' # 0x41 -> NO-BREAK SPACE + u'\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x43 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE + u'\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe7' # 0x48 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE + u'[' # 0x4A -> LEFT SQUARE BRACKET + u'.' # 0x4B -> FULL STOP + u'<' # 0x4C -> LESS-THAN SIGN + u'(' # 0x4D -> LEFT PARENTHESIS + u'+' # 0x4E -> PLUS SIGN + u'!' # 0x4F -> EXCLAMATION MARK + u'&' # 0x50 -> AMPERSAND + u'\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE + u'\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE + u'\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE + u'\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE + u'\xdf' # 0x59 -> LATIN SMALL LETTER SHARP S (GERMAN) + u']' # 0x5A -> RIGHT SQUARE BRACKET + u'$' # 0x5B -> DOLLAR SIGN + u'*' # 0x5C -> ASTERISK + u')' # 0x5D -> RIGHT PARENTHESIS + u';' # 0x5E -> SEMICOLON + u'^' # 0x5F -> CIRCUMFLEX ACCENT + u'-' # 0x60 -> HYPHEN-MINUS + u'/' # 0x61 -> SOLIDUS + u'\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xc4' # 0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE + u'\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc7' # 0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xa6' # 0x6A -> BROKEN BAR + u',' # 0x6B -> COMMA + u'%' # 0x6C -> PERCENT SIGN + u'_' # 0x6D -> LOW LINE + u'>' # 0x6E -> GREATER-THAN SIGN + u'?' # 0x6F -> QUESTION MARK + u'\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE + u'\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE + u'`' # 0x79 -> GRAVE ACCENT + u':' # 0x7A -> COLON + u'#' # 0x7B -> NUMBER SIGN + u'@' # 0x7C -> COMMERCIAL AT + u"'" # 0x7D -> APOSTROPHE + u'=' # 0x7E -> EQUALS SIGN + u'"' # 0x7F -> QUOTATION MARK + u'\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE + u'a' # 0x81 -> LATIN SMALL LETTER A + u'b' # 0x82 -> LATIN SMALL LETTER B + u'c' # 0x83 -> LATIN SMALL LETTER C + u'd' # 0x84 -> LATIN SMALL LETTER D + u'e' # 0x85 -> LATIN SMALL LETTER E + u'f' # 0x86 -> LATIN SMALL LETTER F + u'g' # 0x87 -> LATIN SMALL LETTER G + u'h' # 0x88 -> LATIN SMALL LETTER H + u'i' # 0x89 -> LATIN SMALL LETTER I + u'\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xf0' # 0x8C -> LATIN SMALL LETTER ETH (ICELANDIC) + u'\xfd' # 0x8D -> LATIN SMALL LETTER Y WITH ACUTE + u'\xfe' # 0x8E -> LATIN SMALL LETTER THORN (ICELANDIC) + u'\xb1' # 0x8F -> PLUS-MINUS SIGN + u'\xb0' # 0x90 -> DEGREE SIGN + u'j' # 0x91 -> LATIN SMALL LETTER J + u'k' # 0x92 -> LATIN SMALL LETTER K + u'l' # 0x93 -> LATIN SMALL LETTER L + u'm' # 0x94 -> LATIN SMALL LETTER M + u'n' # 0x95 -> LATIN SMALL LETTER N + u'o' # 0x96 -> LATIN SMALL LETTER O + u'p' # 0x97 -> LATIN SMALL LETTER P + u'q' # 0x98 -> LATIN SMALL LETTER Q + u'r' # 0x99 -> LATIN SMALL LETTER R + u'\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR + u'\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR + u'\xe6' # 0x9C -> LATIN SMALL LIGATURE AE + u'\xb8' # 0x9D -> CEDILLA + u'\xc6' # 0x9E -> LATIN CAPITAL LIGATURE AE + u'\xa4' # 0x9F -> CURRENCY SIGN + u'\xb5' # 0xA0 -> MICRO SIGN + u'~' # 0xA1 -> TILDE + u's' # 0xA2 -> LATIN SMALL LETTER S + u't' # 0xA3 -> LATIN SMALL LETTER T + u'u' # 0xA4 -> LATIN SMALL LETTER U + u'v' # 0xA5 -> LATIN SMALL LETTER V + u'w' # 0xA6 -> LATIN SMALL LETTER W + u'x' # 0xA7 -> LATIN SMALL LETTER X + u'y' # 0xA8 -> LATIN SMALL LETTER Y + u'z' # 0xA9 -> LATIN SMALL LETTER Z + u'\xa1' # 0xAA -> INVERTED EXCLAMATION MARK + u'\xbf' # 0xAB -> INVERTED QUESTION MARK + u'\xd0' # 0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC) + u'\xdd' # 0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE + u'\xde' # 0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC) + u'\xae' # 0xAF -> REGISTERED SIGN + u'\xa2' # 0xB0 -> CENT SIGN + u'\xa3' # 0xB1 -> POUND SIGN + u'\xa5' # 0xB2 -> YEN SIGN + u'\xb7' # 0xB3 -> MIDDLE DOT + u'\xa9' # 0xB4 -> COPYRIGHT SIGN + u'\xa7' # 0xB5 -> SECTION SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER + u'\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF + u'\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS + u'\xac' # 0xBA -> NOT SIGN + u'|' # 0xBB -> VERTICAL LINE + u'\xaf' # 0xBC -> MACRON + u'\xa8' # 0xBD -> DIAERESIS + u'\xb4' # 0xBE -> ACUTE ACCENT + u'\xd7' # 0xBF -> MULTIPLICATION SIGN + u'{' # 0xC0 -> LEFT CURLY BRACKET + u'A' # 0xC1 -> LATIN CAPITAL LETTER A + u'B' # 0xC2 -> LATIN CAPITAL LETTER B + u'C' # 0xC3 -> LATIN CAPITAL LETTER C + u'D' # 0xC4 -> LATIN CAPITAL LETTER D + u'E' # 0xC5 -> LATIN CAPITAL LETTER E + u'F' # 0xC6 -> LATIN CAPITAL LETTER F + u'G' # 0xC7 -> LATIN CAPITAL LETTER G + u'H' # 0xC8 -> LATIN CAPITAL LETTER H + u'I' # 0xC9 -> LATIN CAPITAL LETTER I + u'\xad' # 0xCA -> SOFT HYPHEN + u'\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0xCC -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE + u'\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE + u'\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE + u'}' # 0xD0 -> RIGHT CURLY BRACKET + u'J' # 0xD1 -> LATIN CAPITAL LETTER J + u'K' # 0xD2 -> LATIN CAPITAL LETTER K + u'L' # 0xD3 -> LATIN CAPITAL LETTER L + u'M' # 0xD4 -> LATIN CAPITAL LETTER M + u'N' # 0xD5 -> LATIN CAPITAL LETTER N + u'O' # 0xD6 -> LATIN CAPITAL LETTER O + u'P' # 0xD7 -> LATIN CAPITAL LETTER P + u'Q' # 0xD8 -> LATIN CAPITAL LETTER Q + u'R' # 0xD9 -> LATIN CAPITAL LETTER R + u'\xb9' # 0xDA -> SUPERSCRIPT ONE + u'\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0xDC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE + u'\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE + u'\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS + u'\\' # 0xE0 -> REVERSE SOLIDUS + u'\xf7' # 0xE1 -> DIVISION SIGN + u'S' # 0xE2 -> LATIN CAPITAL LETTER S + u'T' # 0xE3 -> LATIN CAPITAL LETTER T + u'U' # 0xE4 -> LATIN CAPITAL LETTER U + u'V' # 0xE5 -> LATIN CAPITAL LETTER V + u'W' # 0xE6 -> LATIN CAPITAL LETTER W + u'X' # 0xE7 -> LATIN CAPITAL LETTER X + u'Y' # 0xE8 -> LATIN CAPITAL LETTER Y + u'Z' # 0xE9 -> LATIN CAPITAL LETTER Z + u'\xb2' # 0xEA -> SUPERSCRIPT TWO + u'\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\xd6' # 0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE + u'0' # 0xF0 -> DIGIT ZERO + u'1' # 0xF1 -> DIGIT ONE + u'2' # 0xF2 -> DIGIT TWO + u'3' # 0xF3 -> DIGIT THREE + u'4' # 0xF4 -> DIGIT FOUR + u'5' # 0xF5 -> DIGIT FIVE + u'6' # 0xF6 -> DIGIT SIX + u'7' # 0xF7 -> DIGIT SEVEN + u'8' # 0xF8 -> DIGIT EIGHT + u'9' # 0xF9 -> DIGIT NINE + u'\xb3' # 0xFA -> SUPERSCRIPT THREE + u'\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xdc' # 0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE + u'\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE + u'\x9f' # 0xFF -> CONTROL +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp737.py b/thirdparty/python25/Lib/encodings/cp737.py new file mode 100644 index 000000000..2c080e544 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp737.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec cp737 generated from 'VENDORS/MICSFT/PC/CP737.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp737', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x0391, # GREEK CAPITAL LETTER ALPHA + 0x0081: 0x0392, # GREEK CAPITAL LETTER BETA + 0x0082: 0x0393, # GREEK CAPITAL LETTER GAMMA + 0x0083: 0x0394, # GREEK CAPITAL LETTER DELTA + 0x0084: 0x0395, # GREEK CAPITAL LETTER EPSILON + 0x0085: 0x0396, # GREEK CAPITAL LETTER ZETA + 0x0086: 0x0397, # GREEK CAPITAL LETTER ETA + 0x0087: 0x0398, # GREEK CAPITAL LETTER THETA + 0x0088: 0x0399, # GREEK CAPITAL LETTER IOTA + 0x0089: 0x039a, # GREEK CAPITAL LETTER KAPPA + 0x008a: 0x039b, # GREEK CAPITAL LETTER LAMDA + 0x008b: 0x039c, # GREEK CAPITAL LETTER MU + 0x008c: 0x039d, # GREEK CAPITAL LETTER NU + 0x008d: 0x039e, # GREEK CAPITAL LETTER XI + 0x008e: 0x039f, # GREEK CAPITAL LETTER OMICRON + 0x008f: 0x03a0, # GREEK CAPITAL LETTER PI + 0x0090: 0x03a1, # GREEK CAPITAL LETTER RHO + 0x0091: 0x03a3, # GREEK CAPITAL LETTER SIGMA + 0x0092: 0x03a4, # GREEK CAPITAL LETTER TAU + 0x0093: 0x03a5, # GREEK CAPITAL LETTER UPSILON + 0x0094: 0x03a6, # GREEK CAPITAL LETTER PHI + 0x0095: 0x03a7, # GREEK CAPITAL LETTER CHI + 0x0096: 0x03a8, # GREEK CAPITAL LETTER PSI + 0x0097: 0x03a9, # GREEK CAPITAL LETTER OMEGA + 0x0098: 0x03b1, # GREEK SMALL LETTER ALPHA + 0x0099: 0x03b2, # GREEK SMALL LETTER BETA + 0x009a: 0x03b3, # GREEK SMALL LETTER GAMMA + 0x009b: 0x03b4, # GREEK SMALL LETTER DELTA + 0x009c: 0x03b5, # GREEK SMALL LETTER EPSILON + 0x009d: 0x03b6, # GREEK SMALL LETTER ZETA + 0x009e: 0x03b7, # GREEK SMALL LETTER ETA + 0x009f: 0x03b8, # GREEK SMALL LETTER THETA + 0x00a0: 0x03b9, # GREEK SMALL LETTER IOTA + 0x00a1: 0x03ba, # GREEK SMALL LETTER KAPPA + 0x00a2: 0x03bb, # GREEK SMALL LETTER LAMDA + 0x00a3: 0x03bc, # GREEK SMALL LETTER MU + 0x00a4: 0x03bd, # GREEK SMALL LETTER NU + 0x00a5: 0x03be, # GREEK SMALL LETTER XI + 0x00a6: 0x03bf, # GREEK SMALL LETTER OMICRON + 0x00a7: 0x03c0, # GREEK SMALL LETTER PI + 0x00a8: 0x03c1, # GREEK SMALL LETTER RHO + 0x00a9: 0x03c3, # GREEK SMALL LETTER SIGMA + 0x00aa: 0x03c2, # GREEK SMALL LETTER FINAL SIGMA + 0x00ab: 0x03c4, # GREEK SMALL LETTER TAU + 0x00ac: 0x03c5, # GREEK SMALL LETTER UPSILON + 0x00ad: 0x03c6, # GREEK SMALL LETTER PHI + 0x00ae: 0x03c7, # GREEK SMALL LETTER CHI + 0x00af: 0x03c8, # GREEK SMALL LETTER PSI + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x03c9, # GREEK SMALL LETTER OMEGA + 0x00e1: 0x03ac, # GREEK SMALL LETTER ALPHA WITH TONOS + 0x00e2: 0x03ad, # GREEK SMALL LETTER EPSILON WITH TONOS + 0x00e3: 0x03ae, # GREEK SMALL LETTER ETA WITH TONOS + 0x00e4: 0x03ca, # GREEK SMALL LETTER IOTA WITH DIALYTIKA + 0x00e5: 0x03af, # GREEK SMALL LETTER IOTA WITH TONOS + 0x00e6: 0x03cc, # GREEK SMALL LETTER OMICRON WITH TONOS + 0x00e7: 0x03cd, # GREEK SMALL LETTER UPSILON WITH TONOS + 0x00e8: 0x03cb, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA + 0x00e9: 0x03ce, # GREEK SMALL LETTER OMEGA WITH TONOS + 0x00ea: 0x0386, # GREEK CAPITAL LETTER ALPHA WITH TONOS + 0x00eb: 0x0388, # GREEK CAPITAL LETTER EPSILON WITH TONOS + 0x00ec: 0x0389, # GREEK CAPITAL LETTER ETA WITH TONOS + 0x00ed: 0x038a, # GREEK CAPITAL LETTER IOTA WITH TONOS + 0x00ee: 0x038c, # GREEK CAPITAL LETTER OMICRON WITH TONOS + 0x00ef: 0x038e, # GREEK CAPITAL LETTER UPSILON WITH TONOS + 0x00f0: 0x038f, # GREEK CAPITAL LETTER OMEGA WITH TONOS + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO + 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO + 0x00f4: 0x03aa, # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + 0x00f5: 0x03ab, # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x2248, # ALMOST EQUAL TO + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x221a, # SQUARE ROOT + 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x0000 -> NULL + u'\x01' # 0x0001 -> START OF HEADING + u'\x02' # 0x0002 -> START OF TEXT + u'\x03' # 0x0003 -> END OF TEXT + u'\x04' # 0x0004 -> END OF TRANSMISSION + u'\x05' # 0x0005 -> ENQUIRY + u'\x06' # 0x0006 -> ACKNOWLEDGE + u'\x07' # 0x0007 -> BELL + u'\x08' # 0x0008 -> BACKSPACE + u'\t' # 0x0009 -> HORIZONTAL TABULATION + u'\n' # 0x000a -> LINE FEED + u'\x0b' # 0x000b -> VERTICAL TABULATION + u'\x0c' # 0x000c -> FORM FEED + u'\r' # 0x000d -> CARRIAGE RETURN + u'\x0e' # 0x000e -> SHIFT OUT + u'\x0f' # 0x000f -> SHIFT IN + u'\x10' # 0x0010 -> DATA LINK ESCAPE + u'\x11' # 0x0011 -> DEVICE CONTROL ONE + u'\x12' # 0x0012 -> DEVICE CONTROL TWO + u'\x13' # 0x0013 -> DEVICE CONTROL THREE + u'\x14' # 0x0014 -> DEVICE CONTROL FOUR + u'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x0016 -> SYNCHRONOUS IDLE + u'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x0018 -> CANCEL + u'\x19' # 0x0019 -> END OF MEDIUM + u'\x1a' # 0x001a -> SUBSTITUTE + u'\x1b' # 0x001b -> ESCAPE + u'\x1c' # 0x001c -> FILE SEPARATOR + u'\x1d' # 0x001d -> GROUP SEPARATOR + u'\x1e' # 0x001e -> RECORD SEPARATOR + u'\x1f' # 0x001f -> UNIT SEPARATOR + u' ' # 0x0020 -> SPACE + u'!' # 0x0021 -> EXCLAMATION MARK + u'"' # 0x0022 -> QUOTATION MARK + u'#' # 0x0023 -> NUMBER SIGN + u'$' # 0x0024 -> DOLLAR SIGN + u'%' # 0x0025 -> PERCENT SIGN + u'&' # 0x0026 -> AMPERSAND + u"'" # 0x0027 -> APOSTROPHE + u'(' # 0x0028 -> LEFT PARENTHESIS + u')' # 0x0029 -> RIGHT PARENTHESIS + u'*' # 0x002a -> ASTERISK + u'+' # 0x002b -> PLUS SIGN + u',' # 0x002c -> COMMA + u'-' # 0x002d -> HYPHEN-MINUS + u'.' # 0x002e -> FULL STOP + u'/' # 0x002f -> SOLIDUS + u'0' # 0x0030 -> DIGIT ZERO + u'1' # 0x0031 -> DIGIT ONE + u'2' # 0x0032 -> DIGIT TWO + u'3' # 0x0033 -> DIGIT THREE + u'4' # 0x0034 -> DIGIT FOUR + u'5' # 0x0035 -> DIGIT FIVE + u'6' # 0x0036 -> DIGIT SIX + u'7' # 0x0037 -> DIGIT SEVEN + u'8' # 0x0038 -> DIGIT EIGHT + u'9' # 0x0039 -> DIGIT NINE + u':' # 0x003a -> COLON + u';' # 0x003b -> SEMICOLON + u'<' # 0x003c -> LESS-THAN SIGN + u'=' # 0x003d -> EQUALS SIGN + u'>' # 0x003e -> GREATER-THAN SIGN + u'?' # 0x003f -> QUESTION MARK + u'@' # 0x0040 -> COMMERCIAL AT + u'A' # 0x0041 -> LATIN CAPITAL LETTER A + u'B' # 0x0042 -> LATIN CAPITAL LETTER B + u'C' # 0x0043 -> LATIN CAPITAL LETTER C + u'D' # 0x0044 -> LATIN CAPITAL LETTER D + u'E' # 0x0045 -> LATIN CAPITAL LETTER E + u'F' # 0x0046 -> LATIN CAPITAL LETTER F + u'G' # 0x0047 -> LATIN CAPITAL LETTER G + u'H' # 0x0048 -> LATIN CAPITAL LETTER H + u'I' # 0x0049 -> LATIN CAPITAL LETTER I + u'J' # 0x004a -> LATIN CAPITAL LETTER J + u'K' # 0x004b -> LATIN CAPITAL LETTER K + u'L' # 0x004c -> LATIN CAPITAL LETTER L + u'M' # 0x004d -> LATIN CAPITAL LETTER M + u'N' # 0x004e -> LATIN CAPITAL LETTER N + u'O' # 0x004f -> LATIN CAPITAL LETTER O + u'P' # 0x0050 -> LATIN CAPITAL LETTER P + u'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + u'R' # 0x0052 -> LATIN CAPITAL LETTER R + u'S' # 0x0053 -> LATIN CAPITAL LETTER S + u'T' # 0x0054 -> LATIN CAPITAL LETTER T + u'U' # 0x0055 -> LATIN CAPITAL LETTER U + u'V' # 0x0056 -> LATIN CAPITAL LETTER V + u'W' # 0x0057 -> LATIN CAPITAL LETTER W + u'X' # 0x0058 -> LATIN CAPITAL LETTER X + u'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + u'Z' # 0x005a -> LATIN CAPITAL LETTER Z + u'[' # 0x005b -> LEFT SQUARE BRACKET + u'\\' # 0x005c -> REVERSE SOLIDUS + u']' # 0x005d -> RIGHT SQUARE BRACKET + u'^' # 0x005e -> CIRCUMFLEX ACCENT + u'_' # 0x005f -> LOW LINE + u'`' # 0x0060 -> GRAVE ACCENT + u'a' # 0x0061 -> LATIN SMALL LETTER A + u'b' # 0x0062 -> LATIN SMALL LETTER B + u'c' # 0x0063 -> LATIN SMALL LETTER C + u'd' # 0x0064 -> LATIN SMALL LETTER D + u'e' # 0x0065 -> LATIN SMALL LETTER E + u'f' # 0x0066 -> LATIN SMALL LETTER F + u'g' # 0x0067 -> LATIN SMALL LETTER G + u'h' # 0x0068 -> LATIN SMALL LETTER H + u'i' # 0x0069 -> LATIN SMALL LETTER I + u'j' # 0x006a -> LATIN SMALL LETTER J + u'k' # 0x006b -> LATIN SMALL LETTER K + u'l' # 0x006c -> LATIN SMALL LETTER L + u'm' # 0x006d -> LATIN SMALL LETTER M + u'n' # 0x006e -> LATIN SMALL LETTER N + u'o' # 0x006f -> LATIN SMALL LETTER O + u'p' # 0x0070 -> LATIN SMALL LETTER P + u'q' # 0x0071 -> LATIN SMALL LETTER Q + u'r' # 0x0072 -> LATIN SMALL LETTER R + u's' # 0x0073 -> LATIN SMALL LETTER S + u't' # 0x0074 -> LATIN SMALL LETTER T + u'u' # 0x0075 -> LATIN SMALL LETTER U + u'v' # 0x0076 -> LATIN SMALL LETTER V + u'w' # 0x0077 -> LATIN SMALL LETTER W + u'x' # 0x0078 -> LATIN SMALL LETTER X + u'y' # 0x0079 -> LATIN SMALL LETTER Y + u'z' # 0x007a -> LATIN SMALL LETTER Z + u'{' # 0x007b -> LEFT CURLY BRACKET + u'|' # 0x007c -> VERTICAL LINE + u'}' # 0x007d -> RIGHT CURLY BRACKET + u'~' # 0x007e -> TILDE + u'\x7f' # 0x007f -> DELETE + u'\u0391' # 0x0080 -> GREEK CAPITAL LETTER ALPHA + u'\u0392' # 0x0081 -> GREEK CAPITAL LETTER BETA + u'\u0393' # 0x0082 -> GREEK CAPITAL LETTER GAMMA + u'\u0394' # 0x0083 -> GREEK CAPITAL LETTER DELTA + u'\u0395' # 0x0084 -> GREEK CAPITAL LETTER EPSILON + u'\u0396' # 0x0085 -> GREEK CAPITAL LETTER ZETA + u'\u0397' # 0x0086 -> GREEK CAPITAL LETTER ETA + u'\u0398' # 0x0087 -> GREEK CAPITAL LETTER THETA + u'\u0399' # 0x0088 -> GREEK CAPITAL LETTER IOTA + u'\u039a' # 0x0089 -> GREEK CAPITAL LETTER KAPPA + u'\u039b' # 0x008a -> GREEK CAPITAL LETTER LAMDA + u'\u039c' # 0x008b -> GREEK CAPITAL LETTER MU + u'\u039d' # 0x008c -> GREEK CAPITAL LETTER NU + u'\u039e' # 0x008d -> GREEK CAPITAL LETTER XI + u'\u039f' # 0x008e -> GREEK CAPITAL LETTER OMICRON + u'\u03a0' # 0x008f -> GREEK CAPITAL LETTER PI + u'\u03a1' # 0x0090 -> GREEK CAPITAL LETTER RHO + u'\u03a3' # 0x0091 -> GREEK CAPITAL LETTER SIGMA + u'\u03a4' # 0x0092 -> GREEK CAPITAL LETTER TAU + u'\u03a5' # 0x0093 -> GREEK CAPITAL LETTER UPSILON + u'\u03a6' # 0x0094 -> GREEK CAPITAL LETTER PHI + u'\u03a7' # 0x0095 -> GREEK CAPITAL LETTER CHI + u'\u03a8' # 0x0096 -> GREEK CAPITAL LETTER PSI + u'\u03a9' # 0x0097 -> GREEK CAPITAL LETTER OMEGA + u'\u03b1' # 0x0098 -> GREEK SMALL LETTER ALPHA + u'\u03b2' # 0x0099 -> GREEK SMALL LETTER BETA + u'\u03b3' # 0x009a -> GREEK SMALL LETTER GAMMA + u'\u03b4' # 0x009b -> GREEK SMALL LETTER DELTA + u'\u03b5' # 0x009c -> GREEK SMALL LETTER EPSILON + u'\u03b6' # 0x009d -> GREEK SMALL LETTER ZETA + u'\u03b7' # 0x009e -> GREEK SMALL LETTER ETA + u'\u03b8' # 0x009f -> GREEK SMALL LETTER THETA + u'\u03b9' # 0x00a0 -> GREEK SMALL LETTER IOTA + u'\u03ba' # 0x00a1 -> GREEK SMALL LETTER KAPPA + u'\u03bb' # 0x00a2 -> GREEK SMALL LETTER LAMDA + u'\u03bc' # 0x00a3 -> GREEK SMALL LETTER MU + u'\u03bd' # 0x00a4 -> GREEK SMALL LETTER NU + u'\u03be' # 0x00a5 -> GREEK SMALL LETTER XI + u'\u03bf' # 0x00a6 -> GREEK SMALL LETTER OMICRON + u'\u03c0' # 0x00a7 -> GREEK SMALL LETTER PI + u'\u03c1' # 0x00a8 -> GREEK SMALL LETTER RHO + u'\u03c3' # 0x00a9 -> GREEK SMALL LETTER SIGMA + u'\u03c2' # 0x00aa -> GREEK SMALL LETTER FINAL SIGMA + u'\u03c4' # 0x00ab -> GREEK SMALL LETTER TAU + u'\u03c5' # 0x00ac -> GREEK SMALL LETTER UPSILON + u'\u03c6' # 0x00ad -> GREEK SMALL LETTER PHI + u'\u03c7' # 0x00ae -> GREEK SMALL LETTER CHI + u'\u03c8' # 0x00af -> GREEK SMALL LETTER PSI + u'\u2591' # 0x00b0 -> LIGHT SHADE + u'\u2592' # 0x00b1 -> MEDIUM SHADE + u'\u2593' # 0x00b2 -> DARK SHADE + u'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + u'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + u'\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + u'\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + u'\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + u'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + u'\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + u'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + u'\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + u'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + u'\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + u'\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + u'\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + u'\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + u'\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + u'\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + u'\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + u'\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + u'\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + u'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2588' # 0x00db -> FULL BLOCK + u'\u2584' # 0x00dc -> LOWER HALF BLOCK + u'\u258c' # 0x00dd -> LEFT HALF BLOCK + u'\u2590' # 0x00de -> RIGHT HALF BLOCK + u'\u2580' # 0x00df -> UPPER HALF BLOCK + u'\u03c9' # 0x00e0 -> GREEK SMALL LETTER OMEGA + u'\u03ac' # 0x00e1 -> GREEK SMALL LETTER ALPHA WITH TONOS + u'\u03ad' # 0x00e2 -> GREEK SMALL LETTER EPSILON WITH TONOS + u'\u03ae' # 0x00e3 -> GREEK SMALL LETTER ETA WITH TONOS + u'\u03ca' # 0x00e4 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA + u'\u03af' # 0x00e5 -> GREEK SMALL LETTER IOTA WITH TONOS + u'\u03cc' # 0x00e6 -> GREEK SMALL LETTER OMICRON WITH TONOS + u'\u03cd' # 0x00e7 -> GREEK SMALL LETTER UPSILON WITH TONOS + u'\u03cb' # 0x00e8 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA + u'\u03ce' # 0x00e9 -> GREEK SMALL LETTER OMEGA WITH TONOS + u'\u0386' # 0x00ea -> GREEK CAPITAL LETTER ALPHA WITH TONOS + u'\u0388' # 0x00eb -> GREEK CAPITAL LETTER EPSILON WITH TONOS + u'\u0389' # 0x00ec -> GREEK CAPITAL LETTER ETA WITH TONOS + u'\u038a' # 0x00ed -> GREEK CAPITAL LETTER IOTA WITH TONOS + u'\u038c' # 0x00ee -> GREEK CAPITAL LETTER OMICRON WITH TONOS + u'\u038e' # 0x00ef -> GREEK CAPITAL LETTER UPSILON WITH TONOS + u'\u038f' # 0x00f0 -> GREEK CAPITAL LETTER OMEGA WITH TONOS + u'\xb1' # 0x00f1 -> PLUS-MINUS SIGN + u'\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO + u'\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO + u'\u03aa' # 0x00f4 -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + u'\u03ab' # 0x00f5 -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + u'\xf7' # 0x00f6 -> DIVISION SIGN + u'\u2248' # 0x00f7 -> ALMOST EQUAL TO + u'\xb0' # 0x00f8 -> DEGREE SIGN + u'\u2219' # 0x00f9 -> BULLET OPERATOR + u'\xb7' # 0x00fa -> MIDDLE DOT + u'\u221a' # 0x00fb -> SQUARE ROOT + u'\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N + u'\xb2' # 0x00fd -> SUPERSCRIPT TWO + u'\u25a0' # 0x00fe -> BLACK SQUARE + u'\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00f7: 0x00f6, # DIVISION SIGN + 0x0386: 0x00ea, # GREEK CAPITAL LETTER ALPHA WITH TONOS + 0x0388: 0x00eb, # GREEK CAPITAL LETTER EPSILON WITH TONOS + 0x0389: 0x00ec, # GREEK CAPITAL LETTER ETA WITH TONOS + 0x038a: 0x00ed, # GREEK CAPITAL LETTER IOTA WITH TONOS + 0x038c: 0x00ee, # GREEK CAPITAL LETTER OMICRON WITH TONOS + 0x038e: 0x00ef, # GREEK CAPITAL LETTER UPSILON WITH TONOS + 0x038f: 0x00f0, # GREEK CAPITAL LETTER OMEGA WITH TONOS + 0x0391: 0x0080, # GREEK CAPITAL LETTER ALPHA + 0x0392: 0x0081, # GREEK CAPITAL LETTER BETA + 0x0393: 0x0082, # GREEK CAPITAL LETTER GAMMA + 0x0394: 0x0083, # GREEK CAPITAL LETTER DELTA + 0x0395: 0x0084, # GREEK CAPITAL LETTER EPSILON + 0x0396: 0x0085, # GREEK CAPITAL LETTER ZETA + 0x0397: 0x0086, # GREEK CAPITAL LETTER ETA + 0x0398: 0x0087, # GREEK CAPITAL LETTER THETA + 0x0399: 0x0088, # GREEK CAPITAL LETTER IOTA + 0x039a: 0x0089, # GREEK CAPITAL LETTER KAPPA + 0x039b: 0x008a, # GREEK CAPITAL LETTER LAMDA + 0x039c: 0x008b, # GREEK CAPITAL LETTER MU + 0x039d: 0x008c, # GREEK CAPITAL LETTER NU + 0x039e: 0x008d, # GREEK CAPITAL LETTER XI + 0x039f: 0x008e, # GREEK CAPITAL LETTER OMICRON + 0x03a0: 0x008f, # GREEK CAPITAL LETTER PI + 0x03a1: 0x0090, # GREEK CAPITAL LETTER RHO + 0x03a3: 0x0091, # GREEK CAPITAL LETTER SIGMA + 0x03a4: 0x0092, # GREEK CAPITAL LETTER TAU + 0x03a5: 0x0093, # GREEK CAPITAL LETTER UPSILON + 0x03a6: 0x0094, # GREEK CAPITAL LETTER PHI + 0x03a7: 0x0095, # GREEK CAPITAL LETTER CHI + 0x03a8: 0x0096, # GREEK CAPITAL LETTER PSI + 0x03a9: 0x0097, # GREEK CAPITAL LETTER OMEGA + 0x03aa: 0x00f4, # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + 0x03ab: 0x00f5, # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + 0x03ac: 0x00e1, # GREEK SMALL LETTER ALPHA WITH TONOS + 0x03ad: 0x00e2, # GREEK SMALL LETTER EPSILON WITH TONOS + 0x03ae: 0x00e3, # GREEK SMALL LETTER ETA WITH TONOS + 0x03af: 0x00e5, # GREEK SMALL LETTER IOTA WITH TONOS + 0x03b1: 0x0098, # GREEK SMALL LETTER ALPHA + 0x03b2: 0x0099, # GREEK SMALL LETTER BETA + 0x03b3: 0x009a, # GREEK SMALL LETTER GAMMA + 0x03b4: 0x009b, # GREEK SMALL LETTER DELTA + 0x03b5: 0x009c, # GREEK SMALL LETTER EPSILON + 0x03b6: 0x009d, # GREEK SMALL LETTER ZETA + 0x03b7: 0x009e, # GREEK SMALL LETTER ETA + 0x03b8: 0x009f, # GREEK SMALL LETTER THETA + 0x03b9: 0x00a0, # GREEK SMALL LETTER IOTA + 0x03ba: 0x00a1, # GREEK SMALL LETTER KAPPA + 0x03bb: 0x00a2, # GREEK SMALL LETTER LAMDA + 0x03bc: 0x00a3, # GREEK SMALL LETTER MU + 0x03bd: 0x00a4, # GREEK SMALL LETTER NU + 0x03be: 0x00a5, # GREEK SMALL LETTER XI + 0x03bf: 0x00a6, # GREEK SMALL LETTER OMICRON + 0x03c0: 0x00a7, # GREEK SMALL LETTER PI + 0x03c1: 0x00a8, # GREEK SMALL LETTER RHO + 0x03c2: 0x00aa, # GREEK SMALL LETTER FINAL SIGMA + 0x03c3: 0x00a9, # GREEK SMALL LETTER SIGMA + 0x03c4: 0x00ab, # GREEK SMALL LETTER TAU + 0x03c5: 0x00ac, # GREEK SMALL LETTER UPSILON + 0x03c6: 0x00ad, # GREEK SMALL LETTER PHI + 0x03c7: 0x00ae, # GREEK SMALL LETTER CHI + 0x03c8: 0x00af, # GREEK SMALL LETTER PSI + 0x03c9: 0x00e0, # GREEK SMALL LETTER OMEGA + 0x03ca: 0x00e4, # GREEK SMALL LETTER IOTA WITH DIALYTIKA + 0x03cb: 0x00e8, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA + 0x03cc: 0x00e6, # GREEK SMALL LETTER OMICRON WITH TONOS + 0x03cd: 0x00e7, # GREEK SMALL LETTER UPSILON WITH TONOS + 0x03ce: 0x00e9, # GREEK SMALL LETTER OMEGA WITH TONOS + 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N + 0x2219: 0x00f9, # BULLET OPERATOR + 0x221a: 0x00fb, # SQUARE ROOT + 0x2248: 0x00f7, # ALMOST EQUAL TO + 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO + 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/thirdparty/python25/Lib/encodings/cp775.py b/thirdparty/python25/Lib/encodings/cp775.py new file mode 100644 index 000000000..eadb989e1 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp775.py @@ -0,0 +1,697 @@ +""" Python Character Mapping Codec cp775 generated from 'VENDORS/MICSFT/PC/CP775.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp775', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x0106, # LATIN CAPITAL LETTER C WITH ACUTE + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x0101, # LATIN SMALL LETTER A WITH MACRON + 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x0085: 0x0123, # LATIN SMALL LETTER G WITH CEDILLA + 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE + 0x0087: 0x0107, # LATIN SMALL LETTER C WITH ACUTE + 0x0088: 0x0142, # LATIN SMALL LETTER L WITH STROKE + 0x0089: 0x0113, # LATIN SMALL LETTER E WITH MACRON + 0x008a: 0x0156, # LATIN CAPITAL LETTER R WITH CEDILLA + 0x008b: 0x0157, # LATIN SMALL LETTER R WITH CEDILLA + 0x008c: 0x012b, # LATIN SMALL LETTER I WITH MACRON + 0x008d: 0x0179, # LATIN CAPITAL LETTER Z WITH ACUTE + 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE + 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE + 0x0093: 0x014d, # LATIN SMALL LETTER O WITH MACRON + 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x0095: 0x0122, # LATIN CAPITAL LETTER G WITH CEDILLA + 0x0096: 0x00a2, # CENT SIGN + 0x0097: 0x015a, # LATIN CAPITAL LETTER S WITH ACUTE + 0x0098: 0x015b, # LATIN SMALL LETTER S WITH ACUTE + 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE + 0x009e: 0x00d7, # MULTIPLICATION SIGN + 0x009f: 0x00a4, # CURRENCY SIGN + 0x00a0: 0x0100, # LATIN CAPITAL LETTER A WITH MACRON + 0x00a1: 0x012a, # LATIN CAPITAL LETTER I WITH MACRON + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x017b, # LATIN CAPITAL LETTER Z WITH DOT ABOVE + 0x00a4: 0x017c, # LATIN SMALL LETTER Z WITH DOT ABOVE + 0x00a5: 0x017a, # LATIN SMALL LETTER Z WITH ACUTE + 0x00a6: 0x201d, # RIGHT DOUBLE QUOTATION MARK + 0x00a7: 0x00a6, # BROKEN BAR + 0x00a8: 0x00a9, # COPYRIGHT SIGN + 0x00a9: 0x00ae, # REGISTERED SIGN + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x0141, # LATIN CAPITAL LETTER L WITH STROKE + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x0104, # LATIN CAPITAL LETTER A WITH OGONEK + 0x00b6: 0x010c, # LATIN CAPITAL LETTER C WITH CARON + 0x00b7: 0x0118, # LATIN CAPITAL LETTER E WITH OGONEK + 0x00b8: 0x0116, # LATIN CAPITAL LETTER E WITH DOT ABOVE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x012e, # LATIN CAPITAL LETTER I WITH OGONEK + 0x00be: 0x0160, # LATIN CAPITAL LETTER S WITH CARON + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x0172, # LATIN CAPITAL LETTER U WITH OGONEK + 0x00c7: 0x016a, # LATIN CAPITAL LETTER U WITH MACRON + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x017d, # LATIN CAPITAL LETTER Z WITH CARON + 0x00d0: 0x0105, # LATIN SMALL LETTER A WITH OGONEK + 0x00d1: 0x010d, # LATIN SMALL LETTER C WITH CARON + 0x00d2: 0x0119, # LATIN SMALL LETTER E WITH OGONEK + 0x00d3: 0x0117, # LATIN SMALL LETTER E WITH DOT ABOVE + 0x00d4: 0x012f, # LATIN SMALL LETTER I WITH OGONEK + 0x00d5: 0x0161, # LATIN SMALL LETTER S WITH CARON + 0x00d6: 0x0173, # LATIN SMALL LETTER U WITH OGONEK + 0x00d7: 0x016b, # LATIN SMALL LETTER U WITH MACRON + 0x00d8: 0x017e, # LATIN SMALL LETTER Z WITH CARON + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S (GERMAN) + 0x00e2: 0x014c, # LATIN CAPITAL LETTER O WITH MACRON + 0x00e3: 0x0143, # LATIN CAPITAL LETTER N WITH ACUTE + 0x00e4: 0x00f5, # LATIN SMALL LETTER O WITH TILDE + 0x00e5: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: 0x0144, # LATIN SMALL LETTER N WITH ACUTE + 0x00e8: 0x0136, # LATIN CAPITAL LETTER K WITH CEDILLA + 0x00e9: 0x0137, # LATIN SMALL LETTER K WITH CEDILLA + 0x00ea: 0x013b, # LATIN CAPITAL LETTER L WITH CEDILLA + 0x00eb: 0x013c, # LATIN SMALL LETTER L WITH CEDILLA + 0x00ec: 0x0146, # LATIN SMALL LETTER N WITH CEDILLA + 0x00ed: 0x0112, # LATIN CAPITAL LETTER E WITH MACRON + 0x00ee: 0x0145, # LATIN CAPITAL LETTER N WITH CEDILLA + 0x00ef: 0x2019, # RIGHT SINGLE QUOTATION MARK + 0x00f0: 0x00ad, # SOFT HYPHEN + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x201c, # LEFT DOUBLE QUOTATION MARK + 0x00f3: 0x00be, # VULGAR FRACTION THREE QUARTERS + 0x00f4: 0x00b6, # PILCROW SIGN + 0x00f5: 0x00a7, # SECTION SIGN + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x201e, # DOUBLE LOW-9 QUOTATION MARK + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x00b9, # SUPERSCRIPT ONE + 0x00fc: 0x00b3, # SUPERSCRIPT THREE + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x0000 -> NULL + u'\x01' # 0x0001 -> START OF HEADING + u'\x02' # 0x0002 -> START OF TEXT + u'\x03' # 0x0003 -> END OF TEXT + u'\x04' # 0x0004 -> END OF TRANSMISSION + u'\x05' # 0x0005 -> ENQUIRY + u'\x06' # 0x0006 -> ACKNOWLEDGE + u'\x07' # 0x0007 -> BELL + u'\x08' # 0x0008 -> BACKSPACE + u'\t' # 0x0009 -> HORIZONTAL TABULATION + u'\n' # 0x000a -> LINE FEED + u'\x0b' # 0x000b -> VERTICAL TABULATION + u'\x0c' # 0x000c -> FORM FEED + u'\r' # 0x000d -> CARRIAGE RETURN + u'\x0e' # 0x000e -> SHIFT OUT + u'\x0f' # 0x000f -> SHIFT IN + u'\x10' # 0x0010 -> DATA LINK ESCAPE + u'\x11' # 0x0011 -> DEVICE CONTROL ONE + u'\x12' # 0x0012 -> DEVICE CONTROL TWO + u'\x13' # 0x0013 -> DEVICE CONTROL THREE + u'\x14' # 0x0014 -> DEVICE CONTROL FOUR + u'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x0016 -> SYNCHRONOUS IDLE + u'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x0018 -> CANCEL + u'\x19' # 0x0019 -> END OF MEDIUM + u'\x1a' # 0x001a -> SUBSTITUTE + u'\x1b' # 0x001b -> ESCAPE + u'\x1c' # 0x001c -> FILE SEPARATOR + u'\x1d' # 0x001d -> GROUP SEPARATOR + u'\x1e' # 0x001e -> RECORD SEPARATOR + u'\x1f' # 0x001f -> UNIT SEPARATOR + u' ' # 0x0020 -> SPACE + u'!' # 0x0021 -> EXCLAMATION MARK + u'"' # 0x0022 -> QUOTATION MARK + u'#' # 0x0023 -> NUMBER SIGN + u'$' # 0x0024 -> DOLLAR SIGN + u'%' # 0x0025 -> PERCENT SIGN + u'&' # 0x0026 -> AMPERSAND + u"'" # 0x0027 -> APOSTROPHE + u'(' # 0x0028 -> LEFT PARENTHESIS + u')' # 0x0029 -> RIGHT PARENTHESIS + u'*' # 0x002a -> ASTERISK + u'+' # 0x002b -> PLUS SIGN + u',' # 0x002c -> COMMA + u'-' # 0x002d -> HYPHEN-MINUS + u'.' # 0x002e -> FULL STOP + u'/' # 0x002f -> SOLIDUS + u'0' # 0x0030 -> DIGIT ZERO + u'1' # 0x0031 -> DIGIT ONE + u'2' # 0x0032 -> DIGIT TWO + u'3' # 0x0033 -> DIGIT THREE + u'4' # 0x0034 -> DIGIT FOUR + u'5' # 0x0035 -> DIGIT FIVE + u'6' # 0x0036 -> DIGIT SIX + u'7' # 0x0037 -> DIGIT SEVEN + u'8' # 0x0038 -> DIGIT EIGHT + u'9' # 0x0039 -> DIGIT NINE + u':' # 0x003a -> COLON + u';' # 0x003b -> SEMICOLON + u'<' # 0x003c -> LESS-THAN SIGN + u'=' # 0x003d -> EQUALS SIGN + u'>' # 0x003e -> GREATER-THAN SIGN + u'?' # 0x003f -> QUESTION MARK + u'@' # 0x0040 -> COMMERCIAL AT + u'A' # 0x0041 -> LATIN CAPITAL LETTER A + u'B' # 0x0042 -> LATIN CAPITAL LETTER B + u'C' # 0x0043 -> LATIN CAPITAL LETTER C + u'D' # 0x0044 -> LATIN CAPITAL LETTER D + u'E' # 0x0045 -> LATIN CAPITAL LETTER E + u'F' # 0x0046 -> LATIN CAPITAL LETTER F + u'G' # 0x0047 -> LATIN CAPITAL LETTER G + u'H' # 0x0048 -> LATIN CAPITAL LETTER H + u'I' # 0x0049 -> LATIN CAPITAL LETTER I + u'J' # 0x004a -> LATIN CAPITAL LETTER J + u'K' # 0x004b -> LATIN CAPITAL LETTER K + u'L' # 0x004c -> LATIN CAPITAL LETTER L + u'M' # 0x004d -> LATIN CAPITAL LETTER M + u'N' # 0x004e -> LATIN CAPITAL LETTER N + u'O' # 0x004f -> LATIN CAPITAL LETTER O + u'P' # 0x0050 -> LATIN CAPITAL LETTER P + u'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + u'R' # 0x0052 -> LATIN CAPITAL LETTER R + u'S' # 0x0053 -> LATIN CAPITAL LETTER S + u'T' # 0x0054 -> LATIN CAPITAL LETTER T + u'U' # 0x0055 -> LATIN CAPITAL LETTER U + u'V' # 0x0056 -> LATIN CAPITAL LETTER V + u'W' # 0x0057 -> LATIN CAPITAL LETTER W + u'X' # 0x0058 -> LATIN CAPITAL LETTER X + u'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + u'Z' # 0x005a -> LATIN CAPITAL LETTER Z + u'[' # 0x005b -> LEFT SQUARE BRACKET + u'\\' # 0x005c -> REVERSE SOLIDUS + u']' # 0x005d -> RIGHT SQUARE BRACKET + u'^' # 0x005e -> CIRCUMFLEX ACCENT + u'_' # 0x005f -> LOW LINE + u'`' # 0x0060 -> GRAVE ACCENT + u'a' # 0x0061 -> LATIN SMALL LETTER A + u'b' # 0x0062 -> LATIN SMALL LETTER B + u'c' # 0x0063 -> LATIN SMALL LETTER C + u'd' # 0x0064 -> LATIN SMALL LETTER D + u'e' # 0x0065 -> LATIN SMALL LETTER E + u'f' # 0x0066 -> LATIN SMALL LETTER F + u'g' # 0x0067 -> LATIN SMALL LETTER G + u'h' # 0x0068 -> LATIN SMALL LETTER H + u'i' # 0x0069 -> LATIN SMALL LETTER I + u'j' # 0x006a -> LATIN SMALL LETTER J + u'k' # 0x006b -> LATIN SMALL LETTER K + u'l' # 0x006c -> LATIN SMALL LETTER L + u'm' # 0x006d -> LATIN SMALL LETTER M + u'n' # 0x006e -> LATIN SMALL LETTER N + u'o' # 0x006f -> LATIN SMALL LETTER O + u'p' # 0x0070 -> LATIN SMALL LETTER P + u'q' # 0x0071 -> LATIN SMALL LETTER Q + u'r' # 0x0072 -> LATIN SMALL LETTER R + u's' # 0x0073 -> LATIN SMALL LETTER S + u't' # 0x0074 -> LATIN SMALL LETTER T + u'u' # 0x0075 -> LATIN SMALL LETTER U + u'v' # 0x0076 -> LATIN SMALL LETTER V + u'w' # 0x0077 -> LATIN SMALL LETTER W + u'x' # 0x0078 -> LATIN SMALL LETTER X + u'y' # 0x0079 -> LATIN SMALL LETTER Y + u'z' # 0x007a -> LATIN SMALL LETTER Z + u'{' # 0x007b -> LEFT CURLY BRACKET + u'|' # 0x007c -> VERTICAL LINE + u'}' # 0x007d -> RIGHT CURLY BRACKET + u'~' # 0x007e -> TILDE + u'\x7f' # 0x007f -> DELETE + u'\u0106' # 0x0080 -> LATIN CAPITAL LETTER C WITH ACUTE + u'\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + u'\u0101' # 0x0083 -> LATIN SMALL LETTER A WITH MACRON + u'\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\u0123' # 0x0085 -> LATIN SMALL LETTER G WITH CEDILLA + u'\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\u0107' # 0x0087 -> LATIN SMALL LETTER C WITH ACUTE + u'\u0142' # 0x0088 -> LATIN SMALL LETTER L WITH STROKE + u'\u0113' # 0x0089 -> LATIN SMALL LETTER E WITH MACRON + u'\u0156' # 0x008a -> LATIN CAPITAL LETTER R WITH CEDILLA + u'\u0157' # 0x008b -> LATIN SMALL LETTER R WITH CEDILLA + u'\u012b' # 0x008c -> LATIN SMALL LETTER I WITH MACRON + u'\u0179' # 0x008d -> LATIN CAPITAL LETTER Z WITH ACUTE + u'\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE + u'\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE + u'\u014d' # 0x0093 -> LATIN SMALL LETTER O WITH MACRON + u'\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\u0122' # 0x0095 -> LATIN CAPITAL LETTER G WITH CEDILLA + u'\xa2' # 0x0096 -> CENT SIGN + u'\u015a' # 0x0097 -> LATIN CAPITAL LETTER S WITH ACUTE + u'\u015b' # 0x0098 -> LATIN SMALL LETTER S WITH ACUTE + u'\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE + u'\xa3' # 0x009c -> POUND SIGN + u'\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE + u'\xd7' # 0x009e -> MULTIPLICATION SIGN + u'\xa4' # 0x009f -> CURRENCY SIGN + u'\u0100' # 0x00a0 -> LATIN CAPITAL LETTER A WITH MACRON + u'\u012a' # 0x00a1 -> LATIN CAPITAL LETTER I WITH MACRON + u'\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + u'\u017b' # 0x00a3 -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + u'\u017c' # 0x00a4 -> LATIN SMALL LETTER Z WITH DOT ABOVE + u'\u017a' # 0x00a5 -> LATIN SMALL LETTER Z WITH ACUTE + u'\u201d' # 0x00a6 -> RIGHT DOUBLE QUOTATION MARK + u'\xa6' # 0x00a7 -> BROKEN BAR + u'\xa9' # 0x00a8 -> COPYRIGHT SIGN + u'\xae' # 0x00a9 -> REGISTERED SIGN + u'\xac' # 0x00aa -> NOT SIGN + u'\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + u'\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + u'\u0141' # 0x00ad -> LATIN CAPITAL LETTER L WITH STROKE + u'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2591' # 0x00b0 -> LIGHT SHADE + u'\u2592' # 0x00b1 -> MEDIUM SHADE + u'\u2593' # 0x00b2 -> DARK SHADE + u'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + u'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\u0104' # 0x00b5 -> LATIN CAPITAL LETTER A WITH OGONEK + u'\u010c' # 0x00b6 -> LATIN CAPITAL LETTER C WITH CARON + u'\u0118' # 0x00b7 -> LATIN CAPITAL LETTER E WITH OGONEK + u'\u0116' # 0x00b8 -> LATIN CAPITAL LETTER E WITH DOT ABOVE + u'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\u012e' # 0x00bd -> LATIN CAPITAL LETTER I WITH OGONEK + u'\u0160' # 0x00be -> LATIN CAPITAL LETTER S WITH CARON + u'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\u0172' # 0x00c6 -> LATIN CAPITAL LETTER U WITH OGONEK + u'\u016a' # 0x00c7 -> LATIN CAPITAL LETTER U WITH MACRON + u'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\u017d' # 0x00cf -> LATIN CAPITAL LETTER Z WITH CARON + u'\u0105' # 0x00d0 -> LATIN SMALL LETTER A WITH OGONEK + u'\u010d' # 0x00d1 -> LATIN SMALL LETTER C WITH CARON + u'\u0119' # 0x00d2 -> LATIN SMALL LETTER E WITH OGONEK + u'\u0117' # 0x00d3 -> LATIN SMALL LETTER E WITH DOT ABOVE + u'\u012f' # 0x00d4 -> LATIN SMALL LETTER I WITH OGONEK + u'\u0161' # 0x00d5 -> LATIN SMALL LETTER S WITH CARON + u'\u0173' # 0x00d6 -> LATIN SMALL LETTER U WITH OGONEK + u'\u016b' # 0x00d7 -> LATIN SMALL LETTER U WITH MACRON + u'\u017e' # 0x00d8 -> LATIN SMALL LETTER Z WITH CARON + u'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2588' # 0x00db -> FULL BLOCK + u'\u2584' # 0x00dc -> LOWER HALF BLOCK + u'\u258c' # 0x00dd -> LEFT HALF BLOCK + u'\u2590' # 0x00de -> RIGHT HALF BLOCK + u'\u2580' # 0x00df -> UPPER HALF BLOCK + u'\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S (GERMAN) + u'\u014c' # 0x00e2 -> LATIN CAPITAL LETTER O WITH MACRON + u'\u0143' # 0x00e3 -> LATIN CAPITAL LETTER N WITH ACUTE + u'\xf5' # 0x00e4 -> LATIN SMALL LETTER O WITH TILDE + u'\xd5' # 0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE + u'\xb5' # 0x00e6 -> MICRO SIGN + u'\u0144' # 0x00e7 -> LATIN SMALL LETTER N WITH ACUTE + u'\u0136' # 0x00e8 -> LATIN CAPITAL LETTER K WITH CEDILLA + u'\u0137' # 0x00e9 -> LATIN SMALL LETTER K WITH CEDILLA + u'\u013b' # 0x00ea -> LATIN CAPITAL LETTER L WITH CEDILLA + u'\u013c' # 0x00eb -> LATIN SMALL LETTER L WITH CEDILLA + u'\u0146' # 0x00ec -> LATIN SMALL LETTER N WITH CEDILLA + u'\u0112' # 0x00ed -> LATIN CAPITAL LETTER E WITH MACRON + u'\u0145' # 0x00ee -> LATIN CAPITAL LETTER N WITH CEDILLA + u'\u2019' # 0x00ef -> RIGHT SINGLE QUOTATION MARK + u'\xad' # 0x00f0 -> SOFT HYPHEN + u'\xb1' # 0x00f1 -> PLUS-MINUS SIGN + u'\u201c' # 0x00f2 -> LEFT DOUBLE QUOTATION MARK + u'\xbe' # 0x00f3 -> VULGAR FRACTION THREE QUARTERS + u'\xb6' # 0x00f4 -> PILCROW SIGN + u'\xa7' # 0x00f5 -> SECTION SIGN + u'\xf7' # 0x00f6 -> DIVISION SIGN + u'\u201e' # 0x00f7 -> DOUBLE LOW-9 QUOTATION MARK + u'\xb0' # 0x00f8 -> DEGREE SIGN + u'\u2219' # 0x00f9 -> BULLET OPERATOR + u'\xb7' # 0x00fa -> MIDDLE DOT + u'\xb9' # 0x00fb -> SUPERSCRIPT ONE + u'\xb3' # 0x00fc -> SUPERSCRIPT THREE + u'\xb2' # 0x00fd -> SUPERSCRIPT TWO + u'\u25a0' # 0x00fe -> BLACK SQUARE + u'\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a2: 0x0096, # CENT SIGN + 0x00a3: 0x009c, # POUND SIGN + 0x00a4: 0x009f, # CURRENCY SIGN + 0x00a6: 0x00a7, # BROKEN BAR + 0x00a7: 0x00f5, # SECTION SIGN + 0x00a9: 0x00a8, # COPYRIGHT SIGN + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00ad: 0x00f0, # SOFT HYPHEN + 0x00ae: 0x00a9, # REGISTERED SIGN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b3: 0x00fc, # SUPERSCRIPT THREE + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b6: 0x00f4, # PILCROW SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00b9: 0x00fb, # SUPERSCRIPT ONE + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00be: 0x00f3, # VULGAR FRACTION THREE QUARTERS + 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00d5: 0x00e5, # LATIN CAPITAL LETTER O WITH TILDE + 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00d7: 0x009e, # MULTIPLICATION SIGN + 0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S (GERMAN) + 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE + 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f5: 0x00e4, # LATIN SMALL LETTER O WITH TILDE + 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0100: 0x00a0, # LATIN CAPITAL LETTER A WITH MACRON + 0x0101: 0x0083, # LATIN SMALL LETTER A WITH MACRON + 0x0104: 0x00b5, # LATIN CAPITAL LETTER A WITH OGONEK + 0x0105: 0x00d0, # LATIN SMALL LETTER A WITH OGONEK + 0x0106: 0x0080, # LATIN CAPITAL LETTER C WITH ACUTE + 0x0107: 0x0087, # LATIN SMALL LETTER C WITH ACUTE + 0x010c: 0x00b6, # LATIN CAPITAL LETTER C WITH CARON + 0x010d: 0x00d1, # LATIN SMALL LETTER C WITH CARON + 0x0112: 0x00ed, # LATIN CAPITAL LETTER E WITH MACRON + 0x0113: 0x0089, # LATIN SMALL LETTER E WITH MACRON + 0x0116: 0x00b8, # LATIN CAPITAL LETTER E WITH DOT ABOVE + 0x0117: 0x00d3, # LATIN SMALL LETTER E WITH DOT ABOVE + 0x0118: 0x00b7, # LATIN CAPITAL LETTER E WITH OGONEK + 0x0119: 0x00d2, # LATIN SMALL LETTER E WITH OGONEK + 0x0122: 0x0095, # LATIN CAPITAL LETTER G WITH CEDILLA + 0x0123: 0x0085, # LATIN SMALL LETTER G WITH CEDILLA + 0x012a: 0x00a1, # LATIN CAPITAL LETTER I WITH MACRON + 0x012b: 0x008c, # LATIN SMALL LETTER I WITH MACRON + 0x012e: 0x00bd, # LATIN CAPITAL LETTER I WITH OGONEK + 0x012f: 0x00d4, # LATIN SMALL LETTER I WITH OGONEK + 0x0136: 0x00e8, # LATIN CAPITAL LETTER K WITH CEDILLA + 0x0137: 0x00e9, # LATIN SMALL LETTER K WITH CEDILLA + 0x013b: 0x00ea, # LATIN CAPITAL LETTER L WITH CEDILLA + 0x013c: 0x00eb, # LATIN SMALL LETTER L WITH CEDILLA + 0x0141: 0x00ad, # LATIN CAPITAL LETTER L WITH STROKE + 0x0142: 0x0088, # LATIN SMALL LETTER L WITH STROKE + 0x0143: 0x00e3, # LATIN CAPITAL LETTER N WITH ACUTE + 0x0144: 0x00e7, # LATIN SMALL LETTER N WITH ACUTE + 0x0145: 0x00ee, # LATIN CAPITAL LETTER N WITH CEDILLA + 0x0146: 0x00ec, # LATIN SMALL LETTER N WITH CEDILLA + 0x014c: 0x00e2, # LATIN CAPITAL LETTER O WITH MACRON + 0x014d: 0x0093, # LATIN SMALL LETTER O WITH MACRON + 0x0156: 0x008a, # LATIN CAPITAL LETTER R WITH CEDILLA + 0x0157: 0x008b, # LATIN SMALL LETTER R WITH CEDILLA + 0x015a: 0x0097, # LATIN CAPITAL LETTER S WITH ACUTE + 0x015b: 0x0098, # LATIN SMALL LETTER S WITH ACUTE + 0x0160: 0x00be, # LATIN CAPITAL LETTER S WITH CARON + 0x0161: 0x00d5, # LATIN SMALL LETTER S WITH CARON + 0x016a: 0x00c7, # LATIN CAPITAL LETTER U WITH MACRON + 0x016b: 0x00d7, # LATIN SMALL LETTER U WITH MACRON + 0x0172: 0x00c6, # LATIN CAPITAL LETTER U WITH OGONEK + 0x0173: 0x00d6, # LATIN SMALL LETTER U WITH OGONEK + 0x0179: 0x008d, # LATIN CAPITAL LETTER Z WITH ACUTE + 0x017a: 0x00a5, # LATIN SMALL LETTER Z WITH ACUTE + 0x017b: 0x00a3, # LATIN CAPITAL LETTER Z WITH DOT ABOVE + 0x017c: 0x00a4, # LATIN SMALL LETTER Z WITH DOT ABOVE + 0x017d: 0x00cf, # LATIN CAPITAL LETTER Z WITH CARON + 0x017e: 0x00d8, # LATIN SMALL LETTER Z WITH CARON + 0x2019: 0x00ef, # RIGHT SINGLE QUOTATION MARK + 0x201c: 0x00f2, # LEFT DOUBLE QUOTATION MARK + 0x201d: 0x00a6, # RIGHT DOUBLE QUOTATION MARK + 0x201e: 0x00f7, # DOUBLE LOW-9 QUOTATION MARK + 0x2219: 0x00f9, # BULLET OPERATOR + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/thirdparty/python25/Lib/encodings/cp850.py b/thirdparty/python25/Lib/encodings/cp850.py new file mode 100644 index 000000000..b110f4ece --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp850.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP850.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp850', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE + 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS + 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE + 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE + 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE + 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE + 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE + 0x0098: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE + 0x009e: 0x00d7, # MULTIPLICATION SIGN + 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK + 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE + 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE + 0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR + 0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR + 0x00a8: 0x00bf, # INVERTED QUESTION MARK + 0x00a9: 0x00ae, # REGISTERED SIGN + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00b6: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00b7: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE + 0x00b8: 0x00a9, # COPYRIGHT SIGN + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x00a2, # CENT SIGN + 0x00be: 0x00a5, # YEN SIGN + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x00e3, # LATIN SMALL LETTER A WITH TILDE + 0x00c7: 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x00a4, # CURRENCY SIGN + 0x00d0: 0x00f0, # LATIN SMALL LETTER ETH + 0x00d1: 0x00d0, # LATIN CAPITAL LETTER ETH + 0x00d2: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00d3: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00d4: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE + 0x00d5: 0x0131, # LATIN SMALL LETTER DOTLESS I + 0x00d6: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00d7: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00d8: 0x00cf, # LATIN CAPITAL LETTER I WITH DIAERESIS + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x00a6, # BROKEN BAR + 0x00de: 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00e2: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00e3: 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE + 0x00e4: 0x00f5, # LATIN SMALL LETTER O WITH TILDE + 0x00e5: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: 0x00fe, # LATIN SMALL LETTER THORN + 0x00e8: 0x00de, # LATIN CAPITAL LETTER THORN + 0x00e9: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00ea: 0x00db, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00eb: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE + 0x00ec: 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE + 0x00ed: 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE + 0x00ee: 0x00af, # MACRON + 0x00ef: 0x00b4, # ACUTE ACCENT + 0x00f0: 0x00ad, # SOFT HYPHEN + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x2017, # DOUBLE LOW LINE + 0x00f3: 0x00be, # VULGAR FRACTION THREE QUARTERS + 0x00f4: 0x00b6, # PILCROW SIGN + 0x00f5: 0x00a7, # SECTION SIGN + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x00b8, # CEDILLA + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x00a8, # DIAERESIS + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x00b9, # SUPERSCRIPT ONE + 0x00fc: 0x00b3, # SUPERSCRIPT THREE + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x0000 -> NULL + u'\x01' # 0x0001 -> START OF HEADING + u'\x02' # 0x0002 -> START OF TEXT + u'\x03' # 0x0003 -> END OF TEXT + u'\x04' # 0x0004 -> END OF TRANSMISSION + u'\x05' # 0x0005 -> ENQUIRY + u'\x06' # 0x0006 -> ACKNOWLEDGE + u'\x07' # 0x0007 -> BELL + u'\x08' # 0x0008 -> BACKSPACE + u'\t' # 0x0009 -> HORIZONTAL TABULATION + u'\n' # 0x000a -> LINE FEED + u'\x0b' # 0x000b -> VERTICAL TABULATION + u'\x0c' # 0x000c -> FORM FEED + u'\r' # 0x000d -> CARRIAGE RETURN + u'\x0e' # 0x000e -> SHIFT OUT + u'\x0f' # 0x000f -> SHIFT IN + u'\x10' # 0x0010 -> DATA LINK ESCAPE + u'\x11' # 0x0011 -> DEVICE CONTROL ONE + u'\x12' # 0x0012 -> DEVICE CONTROL TWO + u'\x13' # 0x0013 -> DEVICE CONTROL THREE + u'\x14' # 0x0014 -> DEVICE CONTROL FOUR + u'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x0016 -> SYNCHRONOUS IDLE + u'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x0018 -> CANCEL + u'\x19' # 0x0019 -> END OF MEDIUM + u'\x1a' # 0x001a -> SUBSTITUTE + u'\x1b' # 0x001b -> ESCAPE + u'\x1c' # 0x001c -> FILE SEPARATOR + u'\x1d' # 0x001d -> GROUP SEPARATOR + u'\x1e' # 0x001e -> RECORD SEPARATOR + u'\x1f' # 0x001f -> UNIT SEPARATOR + u' ' # 0x0020 -> SPACE + u'!' # 0x0021 -> EXCLAMATION MARK + u'"' # 0x0022 -> QUOTATION MARK + u'#' # 0x0023 -> NUMBER SIGN + u'$' # 0x0024 -> DOLLAR SIGN + u'%' # 0x0025 -> PERCENT SIGN + u'&' # 0x0026 -> AMPERSAND + u"'" # 0x0027 -> APOSTROPHE + u'(' # 0x0028 -> LEFT PARENTHESIS + u')' # 0x0029 -> RIGHT PARENTHESIS + u'*' # 0x002a -> ASTERISK + u'+' # 0x002b -> PLUS SIGN + u',' # 0x002c -> COMMA + u'-' # 0x002d -> HYPHEN-MINUS + u'.' # 0x002e -> FULL STOP + u'/' # 0x002f -> SOLIDUS + u'0' # 0x0030 -> DIGIT ZERO + u'1' # 0x0031 -> DIGIT ONE + u'2' # 0x0032 -> DIGIT TWO + u'3' # 0x0033 -> DIGIT THREE + u'4' # 0x0034 -> DIGIT FOUR + u'5' # 0x0035 -> DIGIT FIVE + u'6' # 0x0036 -> DIGIT SIX + u'7' # 0x0037 -> DIGIT SEVEN + u'8' # 0x0038 -> DIGIT EIGHT + u'9' # 0x0039 -> DIGIT NINE + u':' # 0x003a -> COLON + u';' # 0x003b -> SEMICOLON + u'<' # 0x003c -> LESS-THAN SIGN + u'=' # 0x003d -> EQUALS SIGN + u'>' # 0x003e -> GREATER-THAN SIGN + u'?' # 0x003f -> QUESTION MARK + u'@' # 0x0040 -> COMMERCIAL AT + u'A' # 0x0041 -> LATIN CAPITAL LETTER A + u'B' # 0x0042 -> LATIN CAPITAL LETTER B + u'C' # 0x0043 -> LATIN CAPITAL LETTER C + u'D' # 0x0044 -> LATIN CAPITAL LETTER D + u'E' # 0x0045 -> LATIN CAPITAL LETTER E + u'F' # 0x0046 -> LATIN CAPITAL LETTER F + u'G' # 0x0047 -> LATIN CAPITAL LETTER G + u'H' # 0x0048 -> LATIN CAPITAL LETTER H + u'I' # 0x0049 -> LATIN CAPITAL LETTER I + u'J' # 0x004a -> LATIN CAPITAL LETTER J + u'K' # 0x004b -> LATIN CAPITAL LETTER K + u'L' # 0x004c -> LATIN CAPITAL LETTER L + u'M' # 0x004d -> LATIN CAPITAL LETTER M + u'N' # 0x004e -> LATIN CAPITAL LETTER N + u'O' # 0x004f -> LATIN CAPITAL LETTER O + u'P' # 0x0050 -> LATIN CAPITAL LETTER P + u'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + u'R' # 0x0052 -> LATIN CAPITAL LETTER R + u'S' # 0x0053 -> LATIN CAPITAL LETTER S + u'T' # 0x0054 -> LATIN CAPITAL LETTER T + u'U' # 0x0055 -> LATIN CAPITAL LETTER U + u'V' # 0x0056 -> LATIN CAPITAL LETTER V + u'W' # 0x0057 -> LATIN CAPITAL LETTER W + u'X' # 0x0058 -> LATIN CAPITAL LETTER X + u'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + u'Z' # 0x005a -> LATIN CAPITAL LETTER Z + u'[' # 0x005b -> LEFT SQUARE BRACKET + u'\\' # 0x005c -> REVERSE SOLIDUS + u']' # 0x005d -> RIGHT SQUARE BRACKET + u'^' # 0x005e -> CIRCUMFLEX ACCENT + u'_' # 0x005f -> LOW LINE + u'`' # 0x0060 -> GRAVE ACCENT + u'a' # 0x0061 -> LATIN SMALL LETTER A + u'b' # 0x0062 -> LATIN SMALL LETTER B + u'c' # 0x0063 -> LATIN SMALL LETTER C + u'd' # 0x0064 -> LATIN SMALL LETTER D + u'e' # 0x0065 -> LATIN SMALL LETTER E + u'f' # 0x0066 -> LATIN SMALL LETTER F + u'g' # 0x0067 -> LATIN SMALL LETTER G + u'h' # 0x0068 -> LATIN SMALL LETTER H + u'i' # 0x0069 -> LATIN SMALL LETTER I + u'j' # 0x006a -> LATIN SMALL LETTER J + u'k' # 0x006b -> LATIN SMALL LETTER K + u'l' # 0x006c -> LATIN SMALL LETTER L + u'm' # 0x006d -> LATIN SMALL LETTER M + u'n' # 0x006e -> LATIN SMALL LETTER N + u'o' # 0x006f -> LATIN SMALL LETTER O + u'p' # 0x0070 -> LATIN SMALL LETTER P + u'q' # 0x0071 -> LATIN SMALL LETTER Q + u'r' # 0x0072 -> LATIN SMALL LETTER R + u's' # 0x0073 -> LATIN SMALL LETTER S + u't' # 0x0074 -> LATIN SMALL LETTER T + u'u' # 0x0075 -> LATIN SMALL LETTER U + u'v' # 0x0076 -> LATIN SMALL LETTER V + u'w' # 0x0077 -> LATIN SMALL LETTER W + u'x' # 0x0078 -> LATIN SMALL LETTER X + u'y' # 0x0079 -> LATIN SMALL LETTER Y + u'z' # 0x007a -> LATIN SMALL LETTER Z + u'{' # 0x007b -> LEFT CURLY BRACKET + u'|' # 0x007c -> VERTICAL LINE + u'}' # 0x007d -> RIGHT CURLY BRACKET + u'~' # 0x007e -> TILDE + u'\x7f' # 0x007f -> DELETE + u'\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + u'\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE + u'\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE + u'\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE + u'\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE + u'\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE + u'\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE + u'\xff' # 0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS + u'\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE + u'\xa3' # 0x009c -> POUND SIGN + u'\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE + u'\xd7' # 0x009e -> MULTIPLICATION SIGN + u'\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK + u'\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE + u'\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE + u'\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + u'\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + u'\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE + u'\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR + u'\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR + u'\xbf' # 0x00a8 -> INVERTED QUESTION MARK + u'\xae' # 0x00a9 -> REGISTERED SIGN + u'\xac' # 0x00aa -> NOT SIGN + u'\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + u'\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + u'\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK + u'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2591' # 0x00b0 -> LIGHT SHADE + u'\u2592' # 0x00b1 -> MEDIUM SHADE + u'\u2593' # 0x00b2 -> DARK SHADE + u'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + u'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\xc1' # 0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc2' # 0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xc0' # 0x00b7 -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xa9' # 0x00b8 -> COPYRIGHT SIGN + u'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\xa2' # 0x00bd -> CENT SIGN + u'\xa5' # 0x00be -> YEN SIGN + u'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\xe3' # 0x00c6 -> LATIN SMALL LETTER A WITH TILDE + u'\xc3' # 0x00c7 -> LATIN CAPITAL LETTER A WITH TILDE + u'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\xa4' # 0x00cf -> CURRENCY SIGN + u'\xf0' # 0x00d0 -> LATIN SMALL LETTER ETH + u'\xd0' # 0x00d1 -> LATIN CAPITAL LETTER ETH + u'\xca' # 0x00d2 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xcb' # 0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xc8' # 0x00d4 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\u0131' # 0x00d5 -> LATIN SMALL LETTER DOTLESS I + u'\xcd' # 0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0x00d8 -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2588' # 0x00db -> FULL BLOCK + u'\u2584' # 0x00dc -> LOWER HALF BLOCK + u'\xa6' # 0x00dd -> BROKEN BAR + u'\xcc' # 0x00de -> LATIN CAPITAL LETTER I WITH GRAVE + u'\u2580' # 0x00df -> UPPER HALF BLOCK + u'\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S + u'\xd4' # 0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\xd2' # 0x00e3 -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xf5' # 0x00e4 -> LATIN SMALL LETTER O WITH TILDE + u'\xd5' # 0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE + u'\xb5' # 0x00e6 -> MICRO SIGN + u'\xfe' # 0x00e7 -> LATIN SMALL LETTER THORN + u'\xde' # 0x00e8 -> LATIN CAPITAL LETTER THORN + u'\xda' # 0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0x00ea -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xd9' # 0x00eb -> LATIN CAPITAL LETTER U WITH GRAVE + u'\xfd' # 0x00ec -> LATIN SMALL LETTER Y WITH ACUTE + u'\xdd' # 0x00ed -> LATIN CAPITAL LETTER Y WITH ACUTE + u'\xaf' # 0x00ee -> MACRON + u'\xb4' # 0x00ef -> ACUTE ACCENT + u'\xad' # 0x00f0 -> SOFT HYPHEN + u'\xb1' # 0x00f1 -> PLUS-MINUS SIGN + u'\u2017' # 0x00f2 -> DOUBLE LOW LINE + u'\xbe' # 0x00f3 -> VULGAR FRACTION THREE QUARTERS + u'\xb6' # 0x00f4 -> PILCROW SIGN + u'\xa7' # 0x00f5 -> SECTION SIGN + u'\xf7' # 0x00f6 -> DIVISION SIGN + u'\xb8' # 0x00f7 -> CEDILLA + u'\xb0' # 0x00f8 -> DEGREE SIGN + u'\xa8' # 0x00f9 -> DIAERESIS + u'\xb7' # 0x00fa -> MIDDLE DOT + u'\xb9' # 0x00fb -> SUPERSCRIPT ONE + u'\xb3' # 0x00fc -> SUPERSCRIPT THREE + u'\xb2' # 0x00fd -> SUPERSCRIPT TWO + u'\u25a0' # 0x00fe -> BLACK SQUARE + u'\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK + 0x00a2: 0x00bd, # CENT SIGN + 0x00a3: 0x009c, # POUND SIGN + 0x00a4: 0x00cf, # CURRENCY SIGN + 0x00a5: 0x00be, # YEN SIGN + 0x00a6: 0x00dd, # BROKEN BAR + 0x00a7: 0x00f5, # SECTION SIGN + 0x00a8: 0x00f9, # DIAERESIS + 0x00a9: 0x00b8, # COPYRIGHT SIGN + 0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00ad: 0x00f0, # SOFT HYPHEN + 0x00ae: 0x00a9, # REGISTERED SIGN + 0x00af: 0x00ee, # MACRON + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b3: 0x00fc, # SUPERSCRIPT THREE + 0x00b4: 0x00ef, # ACUTE ACCENT + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b6: 0x00f4, # PILCROW SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00b8: 0x00f7, # CEDILLA + 0x00b9: 0x00fb, # SUPERSCRIPT ONE + 0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00be: 0x00f3, # VULGAR FRACTION THREE QUARTERS + 0x00bf: 0x00a8, # INVERTED QUESTION MARK + 0x00c0: 0x00b7, # LATIN CAPITAL LETTER A WITH GRAVE + 0x00c1: 0x00b5, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00c2: 0x00b6, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00c3: 0x00c7, # LATIN CAPITAL LETTER A WITH TILDE + 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE + 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c8: 0x00d4, # LATIN CAPITAL LETTER E WITH GRAVE + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00ca: 0x00d2, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00cb: 0x00d3, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00cc: 0x00de, # LATIN CAPITAL LETTER I WITH GRAVE + 0x00cd: 0x00d6, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00ce: 0x00d7, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00cf: 0x00d8, # LATIN CAPITAL LETTER I WITH DIAERESIS + 0x00d0: 0x00d1, # LATIN CAPITAL LETTER ETH + 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE + 0x00d2: 0x00e3, # LATIN CAPITAL LETTER O WITH GRAVE + 0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00d4: 0x00e2, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00d5: 0x00e5, # LATIN CAPITAL LETTER O WITH TILDE + 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00d7: 0x009e, # MULTIPLICATION SIGN + 0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE + 0x00d9: 0x00eb, # LATIN CAPITAL LETTER U WITH GRAVE + 0x00da: 0x00e9, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00db: 0x00ea, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00dd: 0x00ed, # LATIN CAPITAL LETTER Y WITH ACUTE + 0x00de: 0x00e8, # LATIN CAPITAL LETTER THORN + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S + 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE + 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE + 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e3: 0x00c6, # LATIN SMALL LETTER A WITH TILDE + 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE + 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE + 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE + 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE + 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS + 0x00f0: 0x00d0, # LATIN SMALL LETTER ETH + 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE + 0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f5: 0x00e4, # LATIN SMALL LETTER O WITH TILDE + 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE + 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x00fd: 0x00ec, # LATIN SMALL LETTER Y WITH ACUTE + 0x00fe: 0x00e7, # LATIN SMALL LETTER THORN + 0x00ff: 0x0098, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x0131: 0x00d5, # LATIN SMALL LETTER DOTLESS I + 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK + 0x2017: 0x00f2, # DOUBLE LOW LINE + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/thirdparty/python25/Lib/encodings/cp852.py b/thirdparty/python25/Lib/encodings/cp852.py new file mode 100644 index 000000000..c004282d1 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp852.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP852.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp852', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x0085: 0x016f, # LATIN SMALL LETTER U WITH RING ABOVE + 0x0086: 0x0107, # LATIN SMALL LETTER C WITH ACUTE + 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x0088: 0x0142, # LATIN SMALL LETTER L WITH STROKE + 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x008a: 0x0150, # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + 0x008b: 0x0151, # LATIN SMALL LETTER O WITH DOUBLE ACUTE + 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x008d: 0x0179, # LATIN CAPITAL LETTER Z WITH ACUTE + 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x008f: 0x0106, # LATIN CAPITAL LETTER C WITH ACUTE + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x0139, # LATIN CAPITAL LETTER L WITH ACUTE + 0x0092: 0x013a, # LATIN SMALL LETTER L WITH ACUTE + 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x0095: 0x013d, # LATIN CAPITAL LETTER L WITH CARON + 0x0096: 0x013e, # LATIN SMALL LETTER L WITH CARON + 0x0097: 0x015a, # LATIN CAPITAL LETTER S WITH ACUTE + 0x0098: 0x015b, # LATIN SMALL LETTER S WITH ACUTE + 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x0164, # LATIN CAPITAL LETTER T WITH CARON + 0x009c: 0x0165, # LATIN SMALL LETTER T WITH CARON + 0x009d: 0x0141, # LATIN CAPITAL LETTER L WITH STROKE + 0x009e: 0x00d7, # MULTIPLICATION SIGN + 0x009f: 0x010d, # LATIN SMALL LETTER C WITH CARON + 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x0104, # LATIN CAPITAL LETTER A WITH OGONEK + 0x00a5: 0x0105, # LATIN SMALL LETTER A WITH OGONEK + 0x00a6: 0x017d, # LATIN CAPITAL LETTER Z WITH CARON + 0x00a7: 0x017e, # LATIN SMALL LETTER Z WITH CARON + 0x00a8: 0x0118, # LATIN CAPITAL LETTER E WITH OGONEK + 0x00a9: 0x0119, # LATIN SMALL LETTER E WITH OGONEK + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x017a, # LATIN SMALL LETTER Z WITH ACUTE + 0x00ac: 0x010c, # LATIN CAPITAL LETTER C WITH CARON + 0x00ad: 0x015f, # LATIN SMALL LETTER S WITH CEDILLA + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00b6: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00b7: 0x011a, # LATIN CAPITAL LETTER E WITH CARON + 0x00b8: 0x015e, # LATIN CAPITAL LETTER S WITH CEDILLA + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x017b, # LATIN CAPITAL LETTER Z WITH DOT ABOVE + 0x00be: 0x017c, # LATIN SMALL LETTER Z WITH DOT ABOVE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x0102, # LATIN CAPITAL LETTER A WITH BREVE + 0x00c7: 0x0103, # LATIN SMALL LETTER A WITH BREVE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x00a4, # CURRENCY SIGN + 0x00d0: 0x0111, # LATIN SMALL LETTER D WITH STROKE + 0x00d1: 0x0110, # LATIN CAPITAL LETTER D WITH STROKE + 0x00d2: 0x010e, # LATIN CAPITAL LETTER D WITH CARON + 0x00d3: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00d4: 0x010f, # LATIN SMALL LETTER D WITH CARON + 0x00d5: 0x0147, # LATIN CAPITAL LETTER N WITH CARON + 0x00d6: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00d7: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00d8: 0x011b, # LATIN SMALL LETTER E WITH CARON + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x0162, # LATIN CAPITAL LETTER T WITH CEDILLA + 0x00de: 0x016e, # LATIN CAPITAL LETTER U WITH RING ABOVE + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00e2: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00e3: 0x0143, # LATIN CAPITAL LETTER N WITH ACUTE + 0x00e4: 0x0144, # LATIN SMALL LETTER N WITH ACUTE + 0x00e5: 0x0148, # LATIN SMALL LETTER N WITH CARON + 0x00e6: 0x0160, # LATIN CAPITAL LETTER S WITH CARON + 0x00e7: 0x0161, # LATIN SMALL LETTER S WITH CARON + 0x00e8: 0x0154, # LATIN CAPITAL LETTER R WITH ACUTE + 0x00e9: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00ea: 0x0155, # LATIN SMALL LETTER R WITH ACUTE + 0x00eb: 0x0170, # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + 0x00ec: 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE + 0x00ed: 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE + 0x00ee: 0x0163, # LATIN SMALL LETTER T WITH CEDILLA + 0x00ef: 0x00b4, # ACUTE ACCENT + 0x00f0: 0x00ad, # SOFT HYPHEN + 0x00f1: 0x02dd, # DOUBLE ACUTE ACCENT + 0x00f2: 0x02db, # OGONEK + 0x00f3: 0x02c7, # CARON + 0x00f4: 0x02d8, # BREVE + 0x00f5: 0x00a7, # SECTION SIGN + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x00b8, # CEDILLA + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x00a8, # DIAERESIS + 0x00fa: 0x02d9, # DOT ABOVE + 0x00fb: 0x0171, # LATIN SMALL LETTER U WITH DOUBLE ACUTE + 0x00fc: 0x0158, # LATIN CAPITAL LETTER R WITH CARON + 0x00fd: 0x0159, # LATIN SMALL LETTER R WITH CARON + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x0000 -> NULL + u'\x01' # 0x0001 -> START OF HEADING + u'\x02' # 0x0002 -> START OF TEXT + u'\x03' # 0x0003 -> END OF TEXT + u'\x04' # 0x0004 -> END OF TRANSMISSION + u'\x05' # 0x0005 -> ENQUIRY + u'\x06' # 0x0006 -> ACKNOWLEDGE + u'\x07' # 0x0007 -> BELL + u'\x08' # 0x0008 -> BACKSPACE + u'\t' # 0x0009 -> HORIZONTAL TABULATION + u'\n' # 0x000a -> LINE FEED + u'\x0b' # 0x000b -> VERTICAL TABULATION + u'\x0c' # 0x000c -> FORM FEED + u'\r' # 0x000d -> CARRIAGE RETURN + u'\x0e' # 0x000e -> SHIFT OUT + u'\x0f' # 0x000f -> SHIFT IN + u'\x10' # 0x0010 -> DATA LINK ESCAPE + u'\x11' # 0x0011 -> DEVICE CONTROL ONE + u'\x12' # 0x0012 -> DEVICE CONTROL TWO + u'\x13' # 0x0013 -> DEVICE CONTROL THREE + u'\x14' # 0x0014 -> DEVICE CONTROL FOUR + u'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x0016 -> SYNCHRONOUS IDLE + u'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x0018 -> CANCEL + u'\x19' # 0x0019 -> END OF MEDIUM + u'\x1a' # 0x001a -> SUBSTITUTE + u'\x1b' # 0x001b -> ESCAPE + u'\x1c' # 0x001c -> FILE SEPARATOR + u'\x1d' # 0x001d -> GROUP SEPARATOR + u'\x1e' # 0x001e -> RECORD SEPARATOR + u'\x1f' # 0x001f -> UNIT SEPARATOR + u' ' # 0x0020 -> SPACE + u'!' # 0x0021 -> EXCLAMATION MARK + u'"' # 0x0022 -> QUOTATION MARK + u'#' # 0x0023 -> NUMBER SIGN + u'$' # 0x0024 -> DOLLAR SIGN + u'%' # 0x0025 -> PERCENT SIGN + u'&' # 0x0026 -> AMPERSAND + u"'" # 0x0027 -> APOSTROPHE + u'(' # 0x0028 -> LEFT PARENTHESIS + u')' # 0x0029 -> RIGHT PARENTHESIS + u'*' # 0x002a -> ASTERISK + u'+' # 0x002b -> PLUS SIGN + u',' # 0x002c -> COMMA + u'-' # 0x002d -> HYPHEN-MINUS + u'.' # 0x002e -> FULL STOP + u'/' # 0x002f -> SOLIDUS + u'0' # 0x0030 -> DIGIT ZERO + u'1' # 0x0031 -> DIGIT ONE + u'2' # 0x0032 -> DIGIT TWO + u'3' # 0x0033 -> DIGIT THREE + u'4' # 0x0034 -> DIGIT FOUR + u'5' # 0x0035 -> DIGIT FIVE + u'6' # 0x0036 -> DIGIT SIX + u'7' # 0x0037 -> DIGIT SEVEN + u'8' # 0x0038 -> DIGIT EIGHT + u'9' # 0x0039 -> DIGIT NINE + u':' # 0x003a -> COLON + u';' # 0x003b -> SEMICOLON + u'<' # 0x003c -> LESS-THAN SIGN + u'=' # 0x003d -> EQUALS SIGN + u'>' # 0x003e -> GREATER-THAN SIGN + u'?' # 0x003f -> QUESTION MARK + u'@' # 0x0040 -> COMMERCIAL AT + u'A' # 0x0041 -> LATIN CAPITAL LETTER A + u'B' # 0x0042 -> LATIN CAPITAL LETTER B + u'C' # 0x0043 -> LATIN CAPITAL LETTER C + u'D' # 0x0044 -> LATIN CAPITAL LETTER D + u'E' # 0x0045 -> LATIN CAPITAL LETTER E + u'F' # 0x0046 -> LATIN CAPITAL LETTER F + u'G' # 0x0047 -> LATIN CAPITAL LETTER G + u'H' # 0x0048 -> LATIN CAPITAL LETTER H + u'I' # 0x0049 -> LATIN CAPITAL LETTER I + u'J' # 0x004a -> LATIN CAPITAL LETTER J + u'K' # 0x004b -> LATIN CAPITAL LETTER K + u'L' # 0x004c -> LATIN CAPITAL LETTER L + u'M' # 0x004d -> LATIN CAPITAL LETTER M + u'N' # 0x004e -> LATIN CAPITAL LETTER N + u'O' # 0x004f -> LATIN CAPITAL LETTER O + u'P' # 0x0050 -> LATIN CAPITAL LETTER P + u'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + u'R' # 0x0052 -> LATIN CAPITAL LETTER R + u'S' # 0x0053 -> LATIN CAPITAL LETTER S + u'T' # 0x0054 -> LATIN CAPITAL LETTER T + u'U' # 0x0055 -> LATIN CAPITAL LETTER U + u'V' # 0x0056 -> LATIN CAPITAL LETTER V + u'W' # 0x0057 -> LATIN CAPITAL LETTER W + u'X' # 0x0058 -> LATIN CAPITAL LETTER X + u'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + u'Z' # 0x005a -> LATIN CAPITAL LETTER Z + u'[' # 0x005b -> LEFT SQUARE BRACKET + u'\\' # 0x005c -> REVERSE SOLIDUS + u']' # 0x005d -> RIGHT SQUARE BRACKET + u'^' # 0x005e -> CIRCUMFLEX ACCENT + u'_' # 0x005f -> LOW LINE + u'`' # 0x0060 -> GRAVE ACCENT + u'a' # 0x0061 -> LATIN SMALL LETTER A + u'b' # 0x0062 -> LATIN SMALL LETTER B + u'c' # 0x0063 -> LATIN SMALL LETTER C + u'd' # 0x0064 -> LATIN SMALL LETTER D + u'e' # 0x0065 -> LATIN SMALL LETTER E + u'f' # 0x0066 -> LATIN SMALL LETTER F + u'g' # 0x0067 -> LATIN SMALL LETTER G + u'h' # 0x0068 -> LATIN SMALL LETTER H + u'i' # 0x0069 -> LATIN SMALL LETTER I + u'j' # 0x006a -> LATIN SMALL LETTER J + u'k' # 0x006b -> LATIN SMALL LETTER K + u'l' # 0x006c -> LATIN SMALL LETTER L + u'm' # 0x006d -> LATIN SMALL LETTER M + u'n' # 0x006e -> LATIN SMALL LETTER N + u'o' # 0x006f -> LATIN SMALL LETTER O + u'p' # 0x0070 -> LATIN SMALL LETTER P + u'q' # 0x0071 -> LATIN SMALL LETTER Q + u'r' # 0x0072 -> LATIN SMALL LETTER R + u's' # 0x0073 -> LATIN SMALL LETTER S + u't' # 0x0074 -> LATIN SMALL LETTER T + u'u' # 0x0075 -> LATIN SMALL LETTER U + u'v' # 0x0076 -> LATIN SMALL LETTER V + u'w' # 0x0077 -> LATIN SMALL LETTER W + u'x' # 0x0078 -> LATIN SMALL LETTER X + u'y' # 0x0079 -> LATIN SMALL LETTER Y + u'z' # 0x007a -> LATIN SMALL LETTER Z + u'{' # 0x007b -> LEFT CURLY BRACKET + u'|' # 0x007c -> VERTICAL LINE + u'}' # 0x007d -> RIGHT CURLY BRACKET + u'~' # 0x007e -> TILDE + u'\x7f' # 0x007f -> DELETE + u'\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + u'\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\u016f' # 0x0085 -> LATIN SMALL LETTER U WITH RING ABOVE + u'\u0107' # 0x0086 -> LATIN SMALL LETTER C WITH ACUTE + u'\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA + u'\u0142' # 0x0088 -> LATIN SMALL LETTER L WITH STROKE + u'\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\u0150' # 0x008a -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + u'\u0151' # 0x008b -> LATIN SMALL LETTER O WITH DOUBLE ACUTE + u'\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\u0179' # 0x008d -> LATIN CAPITAL LETTER Z WITH ACUTE + u'\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\u0106' # 0x008f -> LATIN CAPITAL LETTER C WITH ACUTE + u'\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\u0139' # 0x0091 -> LATIN CAPITAL LETTER L WITH ACUTE + u'\u013a' # 0x0092 -> LATIN SMALL LETTER L WITH ACUTE + u'\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\u013d' # 0x0095 -> LATIN CAPITAL LETTER L WITH CARON + u'\u013e' # 0x0096 -> LATIN SMALL LETTER L WITH CARON + u'\u015a' # 0x0097 -> LATIN CAPITAL LETTER S WITH ACUTE + u'\u015b' # 0x0098 -> LATIN SMALL LETTER S WITH ACUTE + u'\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\u0164' # 0x009b -> LATIN CAPITAL LETTER T WITH CARON + u'\u0165' # 0x009c -> LATIN SMALL LETTER T WITH CARON + u'\u0141' # 0x009d -> LATIN CAPITAL LETTER L WITH STROKE + u'\xd7' # 0x009e -> MULTIPLICATION SIGN + u'\u010d' # 0x009f -> LATIN SMALL LETTER C WITH CARON + u'\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE + u'\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE + u'\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + u'\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + u'\u0104' # 0x00a4 -> LATIN CAPITAL LETTER A WITH OGONEK + u'\u0105' # 0x00a5 -> LATIN SMALL LETTER A WITH OGONEK + u'\u017d' # 0x00a6 -> LATIN CAPITAL LETTER Z WITH CARON + u'\u017e' # 0x00a7 -> LATIN SMALL LETTER Z WITH CARON + u'\u0118' # 0x00a8 -> LATIN CAPITAL LETTER E WITH OGONEK + u'\u0119' # 0x00a9 -> LATIN SMALL LETTER E WITH OGONEK + u'\xac' # 0x00aa -> NOT SIGN + u'\u017a' # 0x00ab -> LATIN SMALL LETTER Z WITH ACUTE + u'\u010c' # 0x00ac -> LATIN CAPITAL LETTER C WITH CARON + u'\u015f' # 0x00ad -> LATIN SMALL LETTER S WITH CEDILLA + u'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2591' # 0x00b0 -> LIGHT SHADE + u'\u2592' # 0x00b1 -> MEDIUM SHADE + u'\u2593' # 0x00b2 -> DARK SHADE + u'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + u'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\xc1' # 0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc2' # 0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\u011a' # 0x00b7 -> LATIN CAPITAL LETTER E WITH CARON + u'\u015e' # 0x00b8 -> LATIN CAPITAL LETTER S WITH CEDILLA + u'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\u017b' # 0x00bd -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + u'\u017c' # 0x00be -> LATIN SMALL LETTER Z WITH DOT ABOVE + u'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\u0102' # 0x00c6 -> LATIN CAPITAL LETTER A WITH BREVE + u'\u0103' # 0x00c7 -> LATIN SMALL LETTER A WITH BREVE + u'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\xa4' # 0x00cf -> CURRENCY SIGN + u'\u0111' # 0x00d0 -> LATIN SMALL LETTER D WITH STROKE + u'\u0110' # 0x00d1 -> LATIN CAPITAL LETTER D WITH STROKE + u'\u010e' # 0x00d2 -> LATIN CAPITAL LETTER D WITH CARON + u'\xcb' # 0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\u010f' # 0x00d4 -> LATIN SMALL LETTER D WITH CARON + u'\u0147' # 0x00d5 -> LATIN CAPITAL LETTER N WITH CARON + u'\xcd' # 0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\u011b' # 0x00d8 -> LATIN SMALL LETTER E WITH CARON + u'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2588' # 0x00db -> FULL BLOCK + u'\u2584' # 0x00dc -> LOWER HALF BLOCK + u'\u0162' # 0x00dd -> LATIN CAPITAL LETTER T WITH CEDILLA + u'\u016e' # 0x00de -> LATIN CAPITAL LETTER U WITH RING ABOVE + u'\u2580' # 0x00df -> UPPER HALF BLOCK + u'\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S + u'\xd4' # 0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\u0143' # 0x00e3 -> LATIN CAPITAL LETTER N WITH ACUTE + u'\u0144' # 0x00e4 -> LATIN SMALL LETTER N WITH ACUTE + u'\u0148' # 0x00e5 -> LATIN SMALL LETTER N WITH CARON + u'\u0160' # 0x00e6 -> LATIN CAPITAL LETTER S WITH CARON + u'\u0161' # 0x00e7 -> LATIN SMALL LETTER S WITH CARON + u'\u0154' # 0x00e8 -> LATIN CAPITAL LETTER R WITH ACUTE + u'\xda' # 0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE + u'\u0155' # 0x00ea -> LATIN SMALL LETTER R WITH ACUTE + u'\u0170' # 0x00eb -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + u'\xfd' # 0x00ec -> LATIN SMALL LETTER Y WITH ACUTE + u'\xdd' # 0x00ed -> LATIN CAPITAL LETTER Y WITH ACUTE + u'\u0163' # 0x00ee -> LATIN SMALL LETTER T WITH CEDILLA + u'\xb4' # 0x00ef -> ACUTE ACCENT + u'\xad' # 0x00f0 -> SOFT HYPHEN + u'\u02dd' # 0x00f1 -> DOUBLE ACUTE ACCENT + u'\u02db' # 0x00f2 -> OGONEK + u'\u02c7' # 0x00f3 -> CARON + u'\u02d8' # 0x00f4 -> BREVE + u'\xa7' # 0x00f5 -> SECTION SIGN + u'\xf7' # 0x00f6 -> DIVISION SIGN + u'\xb8' # 0x00f7 -> CEDILLA + u'\xb0' # 0x00f8 -> DEGREE SIGN + u'\xa8' # 0x00f9 -> DIAERESIS + u'\u02d9' # 0x00fa -> DOT ABOVE + u'\u0171' # 0x00fb -> LATIN SMALL LETTER U WITH DOUBLE ACUTE + u'\u0158' # 0x00fc -> LATIN CAPITAL LETTER R WITH CARON + u'\u0159' # 0x00fd -> LATIN SMALL LETTER R WITH CARON + u'\u25a0' # 0x00fe -> BLACK SQUARE + u'\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a4: 0x00cf, # CURRENCY SIGN + 0x00a7: 0x00f5, # SECTION SIGN + 0x00a8: 0x00f9, # DIAERESIS + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00ad: 0x00f0, # SOFT HYPHEN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b4: 0x00ef, # ACUTE ACCENT + 0x00b8: 0x00f7, # CEDILLA + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00c1: 0x00b5, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00c2: 0x00b6, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00cb: 0x00d3, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00cd: 0x00d6, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00ce: 0x00d7, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00d4: 0x00e2, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00d7: 0x009e, # MULTIPLICATION SIGN + 0x00da: 0x00e9, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00dd: 0x00ed, # LATIN CAPITAL LETTER Y WITH ACUTE + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S + 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE + 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE + 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x00fd: 0x00ec, # LATIN SMALL LETTER Y WITH ACUTE + 0x0102: 0x00c6, # LATIN CAPITAL LETTER A WITH BREVE + 0x0103: 0x00c7, # LATIN SMALL LETTER A WITH BREVE + 0x0104: 0x00a4, # LATIN CAPITAL LETTER A WITH OGONEK + 0x0105: 0x00a5, # LATIN SMALL LETTER A WITH OGONEK + 0x0106: 0x008f, # LATIN CAPITAL LETTER C WITH ACUTE + 0x0107: 0x0086, # LATIN SMALL LETTER C WITH ACUTE + 0x010c: 0x00ac, # LATIN CAPITAL LETTER C WITH CARON + 0x010d: 0x009f, # LATIN SMALL LETTER C WITH CARON + 0x010e: 0x00d2, # LATIN CAPITAL LETTER D WITH CARON + 0x010f: 0x00d4, # LATIN SMALL LETTER D WITH CARON + 0x0110: 0x00d1, # LATIN CAPITAL LETTER D WITH STROKE + 0x0111: 0x00d0, # LATIN SMALL LETTER D WITH STROKE + 0x0118: 0x00a8, # LATIN CAPITAL LETTER E WITH OGONEK + 0x0119: 0x00a9, # LATIN SMALL LETTER E WITH OGONEK + 0x011a: 0x00b7, # LATIN CAPITAL LETTER E WITH CARON + 0x011b: 0x00d8, # LATIN SMALL LETTER E WITH CARON + 0x0139: 0x0091, # LATIN CAPITAL LETTER L WITH ACUTE + 0x013a: 0x0092, # LATIN SMALL LETTER L WITH ACUTE + 0x013d: 0x0095, # LATIN CAPITAL LETTER L WITH CARON + 0x013e: 0x0096, # LATIN SMALL LETTER L WITH CARON + 0x0141: 0x009d, # LATIN CAPITAL LETTER L WITH STROKE + 0x0142: 0x0088, # LATIN SMALL LETTER L WITH STROKE + 0x0143: 0x00e3, # LATIN CAPITAL LETTER N WITH ACUTE + 0x0144: 0x00e4, # LATIN SMALL LETTER N WITH ACUTE + 0x0147: 0x00d5, # LATIN CAPITAL LETTER N WITH CARON + 0x0148: 0x00e5, # LATIN SMALL LETTER N WITH CARON + 0x0150: 0x008a, # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + 0x0151: 0x008b, # LATIN SMALL LETTER O WITH DOUBLE ACUTE + 0x0154: 0x00e8, # LATIN CAPITAL LETTER R WITH ACUTE + 0x0155: 0x00ea, # LATIN SMALL LETTER R WITH ACUTE + 0x0158: 0x00fc, # LATIN CAPITAL LETTER R WITH CARON + 0x0159: 0x00fd, # LATIN SMALL LETTER R WITH CARON + 0x015a: 0x0097, # LATIN CAPITAL LETTER S WITH ACUTE + 0x015b: 0x0098, # LATIN SMALL LETTER S WITH ACUTE + 0x015e: 0x00b8, # LATIN CAPITAL LETTER S WITH CEDILLA + 0x015f: 0x00ad, # LATIN SMALL LETTER S WITH CEDILLA + 0x0160: 0x00e6, # LATIN CAPITAL LETTER S WITH CARON + 0x0161: 0x00e7, # LATIN SMALL LETTER S WITH CARON + 0x0162: 0x00dd, # LATIN CAPITAL LETTER T WITH CEDILLA + 0x0163: 0x00ee, # LATIN SMALL LETTER T WITH CEDILLA + 0x0164: 0x009b, # LATIN CAPITAL LETTER T WITH CARON + 0x0165: 0x009c, # LATIN SMALL LETTER T WITH CARON + 0x016e: 0x00de, # LATIN CAPITAL LETTER U WITH RING ABOVE + 0x016f: 0x0085, # LATIN SMALL LETTER U WITH RING ABOVE + 0x0170: 0x00eb, # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + 0x0171: 0x00fb, # LATIN SMALL LETTER U WITH DOUBLE ACUTE + 0x0179: 0x008d, # LATIN CAPITAL LETTER Z WITH ACUTE + 0x017a: 0x00ab, # LATIN SMALL LETTER Z WITH ACUTE + 0x017b: 0x00bd, # LATIN CAPITAL LETTER Z WITH DOT ABOVE + 0x017c: 0x00be, # LATIN SMALL LETTER Z WITH DOT ABOVE + 0x017d: 0x00a6, # LATIN CAPITAL LETTER Z WITH CARON + 0x017e: 0x00a7, # LATIN SMALL LETTER Z WITH CARON + 0x02c7: 0x00f3, # CARON + 0x02d8: 0x00f4, # BREVE + 0x02d9: 0x00fa, # DOT ABOVE + 0x02db: 0x00f2, # OGONEK + 0x02dd: 0x00f1, # DOUBLE ACUTE ACCENT + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/thirdparty/python25/Lib/encodings/cp855.py b/thirdparty/python25/Lib/encodings/cp855.py new file mode 100644 index 000000000..f72e8cc5d --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp855.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP855.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp855', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x0452, # CYRILLIC SMALL LETTER DJE + 0x0081: 0x0402, # CYRILLIC CAPITAL LETTER DJE + 0x0082: 0x0453, # CYRILLIC SMALL LETTER GJE + 0x0083: 0x0403, # CYRILLIC CAPITAL LETTER GJE + 0x0084: 0x0451, # CYRILLIC SMALL LETTER IO + 0x0085: 0x0401, # CYRILLIC CAPITAL LETTER IO + 0x0086: 0x0454, # CYRILLIC SMALL LETTER UKRAINIAN IE + 0x0087: 0x0404, # CYRILLIC CAPITAL LETTER UKRAINIAN IE + 0x0088: 0x0455, # CYRILLIC SMALL LETTER DZE + 0x0089: 0x0405, # CYRILLIC CAPITAL LETTER DZE + 0x008a: 0x0456, # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + 0x008b: 0x0406, # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + 0x008c: 0x0457, # CYRILLIC SMALL LETTER YI + 0x008d: 0x0407, # CYRILLIC CAPITAL LETTER YI + 0x008e: 0x0458, # CYRILLIC SMALL LETTER JE + 0x008f: 0x0408, # CYRILLIC CAPITAL LETTER JE + 0x0090: 0x0459, # CYRILLIC SMALL LETTER LJE + 0x0091: 0x0409, # CYRILLIC CAPITAL LETTER LJE + 0x0092: 0x045a, # CYRILLIC SMALL LETTER NJE + 0x0093: 0x040a, # CYRILLIC CAPITAL LETTER NJE + 0x0094: 0x045b, # CYRILLIC SMALL LETTER TSHE + 0x0095: 0x040b, # CYRILLIC CAPITAL LETTER TSHE + 0x0096: 0x045c, # CYRILLIC SMALL LETTER KJE + 0x0097: 0x040c, # CYRILLIC CAPITAL LETTER KJE + 0x0098: 0x045e, # CYRILLIC SMALL LETTER SHORT U + 0x0099: 0x040e, # CYRILLIC CAPITAL LETTER SHORT U + 0x009a: 0x045f, # CYRILLIC SMALL LETTER DZHE + 0x009b: 0x040f, # CYRILLIC CAPITAL LETTER DZHE + 0x009c: 0x044e, # CYRILLIC SMALL LETTER YU + 0x009d: 0x042e, # CYRILLIC CAPITAL LETTER YU + 0x009e: 0x044a, # CYRILLIC SMALL LETTER HARD SIGN + 0x009f: 0x042a, # CYRILLIC CAPITAL LETTER HARD SIGN + 0x00a0: 0x0430, # CYRILLIC SMALL LETTER A + 0x00a1: 0x0410, # CYRILLIC CAPITAL LETTER A + 0x00a2: 0x0431, # CYRILLIC SMALL LETTER BE + 0x00a3: 0x0411, # CYRILLIC CAPITAL LETTER BE + 0x00a4: 0x0446, # CYRILLIC SMALL LETTER TSE + 0x00a5: 0x0426, # CYRILLIC CAPITAL LETTER TSE + 0x00a6: 0x0434, # CYRILLIC SMALL LETTER DE + 0x00a7: 0x0414, # CYRILLIC CAPITAL LETTER DE + 0x00a8: 0x0435, # CYRILLIC SMALL LETTER IE + 0x00a9: 0x0415, # CYRILLIC CAPITAL LETTER IE + 0x00aa: 0x0444, # CYRILLIC SMALL LETTER EF + 0x00ab: 0x0424, # CYRILLIC CAPITAL LETTER EF + 0x00ac: 0x0433, # CYRILLIC SMALL LETTER GHE + 0x00ad: 0x0413, # CYRILLIC CAPITAL LETTER GHE + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x0445, # CYRILLIC SMALL LETTER HA + 0x00b6: 0x0425, # CYRILLIC CAPITAL LETTER HA + 0x00b7: 0x0438, # CYRILLIC SMALL LETTER I + 0x00b8: 0x0418, # CYRILLIC CAPITAL LETTER I + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x0439, # CYRILLIC SMALL LETTER SHORT I + 0x00be: 0x0419, # CYRILLIC CAPITAL LETTER SHORT I + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x043a, # CYRILLIC SMALL LETTER KA + 0x00c7: 0x041a, # CYRILLIC CAPITAL LETTER KA + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x00a4, # CURRENCY SIGN + 0x00d0: 0x043b, # CYRILLIC SMALL LETTER EL + 0x00d1: 0x041b, # CYRILLIC CAPITAL LETTER EL + 0x00d2: 0x043c, # CYRILLIC SMALL LETTER EM + 0x00d3: 0x041c, # CYRILLIC CAPITAL LETTER EM + 0x00d4: 0x043d, # CYRILLIC SMALL LETTER EN + 0x00d5: 0x041d, # CYRILLIC CAPITAL LETTER EN + 0x00d6: 0x043e, # CYRILLIC SMALL LETTER O + 0x00d7: 0x041e, # CYRILLIC CAPITAL LETTER O + 0x00d8: 0x043f, # CYRILLIC SMALL LETTER PE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x041f, # CYRILLIC CAPITAL LETTER PE + 0x00de: 0x044f, # CYRILLIC SMALL LETTER YA + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x042f, # CYRILLIC CAPITAL LETTER YA + 0x00e1: 0x0440, # CYRILLIC SMALL LETTER ER + 0x00e2: 0x0420, # CYRILLIC CAPITAL LETTER ER + 0x00e3: 0x0441, # CYRILLIC SMALL LETTER ES + 0x00e4: 0x0421, # CYRILLIC CAPITAL LETTER ES + 0x00e5: 0x0442, # CYRILLIC SMALL LETTER TE + 0x00e6: 0x0422, # CYRILLIC CAPITAL LETTER TE + 0x00e7: 0x0443, # CYRILLIC SMALL LETTER U + 0x00e8: 0x0423, # CYRILLIC CAPITAL LETTER U + 0x00e9: 0x0436, # CYRILLIC SMALL LETTER ZHE + 0x00ea: 0x0416, # CYRILLIC CAPITAL LETTER ZHE + 0x00eb: 0x0432, # CYRILLIC SMALL LETTER VE + 0x00ec: 0x0412, # CYRILLIC CAPITAL LETTER VE + 0x00ed: 0x044c, # CYRILLIC SMALL LETTER SOFT SIGN + 0x00ee: 0x042c, # CYRILLIC CAPITAL LETTER SOFT SIGN + 0x00ef: 0x2116, # NUMERO SIGN + 0x00f0: 0x00ad, # SOFT HYPHEN + 0x00f1: 0x044b, # CYRILLIC SMALL LETTER YERU + 0x00f2: 0x042b, # CYRILLIC CAPITAL LETTER YERU + 0x00f3: 0x0437, # CYRILLIC SMALL LETTER ZE + 0x00f4: 0x0417, # CYRILLIC CAPITAL LETTER ZE + 0x00f5: 0x0448, # CYRILLIC SMALL LETTER SHA + 0x00f6: 0x0428, # CYRILLIC CAPITAL LETTER SHA + 0x00f7: 0x044d, # CYRILLIC SMALL LETTER E + 0x00f8: 0x042d, # CYRILLIC CAPITAL LETTER E + 0x00f9: 0x0449, # CYRILLIC SMALL LETTER SHCHA + 0x00fa: 0x0429, # CYRILLIC CAPITAL LETTER SHCHA + 0x00fb: 0x0447, # CYRILLIC SMALL LETTER CHE + 0x00fc: 0x0427, # CYRILLIC CAPITAL LETTER CHE + 0x00fd: 0x00a7, # SECTION SIGN + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x0000 -> NULL + u'\x01' # 0x0001 -> START OF HEADING + u'\x02' # 0x0002 -> START OF TEXT + u'\x03' # 0x0003 -> END OF TEXT + u'\x04' # 0x0004 -> END OF TRANSMISSION + u'\x05' # 0x0005 -> ENQUIRY + u'\x06' # 0x0006 -> ACKNOWLEDGE + u'\x07' # 0x0007 -> BELL + u'\x08' # 0x0008 -> BACKSPACE + u'\t' # 0x0009 -> HORIZONTAL TABULATION + u'\n' # 0x000a -> LINE FEED + u'\x0b' # 0x000b -> VERTICAL TABULATION + u'\x0c' # 0x000c -> FORM FEED + u'\r' # 0x000d -> CARRIAGE RETURN + u'\x0e' # 0x000e -> SHIFT OUT + u'\x0f' # 0x000f -> SHIFT IN + u'\x10' # 0x0010 -> DATA LINK ESCAPE + u'\x11' # 0x0011 -> DEVICE CONTROL ONE + u'\x12' # 0x0012 -> DEVICE CONTROL TWO + u'\x13' # 0x0013 -> DEVICE CONTROL THREE + u'\x14' # 0x0014 -> DEVICE CONTROL FOUR + u'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x0016 -> SYNCHRONOUS IDLE + u'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x0018 -> CANCEL + u'\x19' # 0x0019 -> END OF MEDIUM + u'\x1a' # 0x001a -> SUBSTITUTE + u'\x1b' # 0x001b -> ESCAPE + u'\x1c' # 0x001c -> FILE SEPARATOR + u'\x1d' # 0x001d -> GROUP SEPARATOR + u'\x1e' # 0x001e -> RECORD SEPARATOR + u'\x1f' # 0x001f -> UNIT SEPARATOR + u' ' # 0x0020 -> SPACE + u'!' # 0x0021 -> EXCLAMATION MARK + u'"' # 0x0022 -> QUOTATION MARK + u'#' # 0x0023 -> NUMBER SIGN + u'$' # 0x0024 -> DOLLAR SIGN + u'%' # 0x0025 -> PERCENT SIGN + u'&' # 0x0026 -> AMPERSAND + u"'" # 0x0027 -> APOSTROPHE + u'(' # 0x0028 -> LEFT PARENTHESIS + u')' # 0x0029 -> RIGHT PARENTHESIS + u'*' # 0x002a -> ASTERISK + u'+' # 0x002b -> PLUS SIGN + u',' # 0x002c -> COMMA + u'-' # 0x002d -> HYPHEN-MINUS + u'.' # 0x002e -> FULL STOP + u'/' # 0x002f -> SOLIDUS + u'0' # 0x0030 -> DIGIT ZERO + u'1' # 0x0031 -> DIGIT ONE + u'2' # 0x0032 -> DIGIT TWO + u'3' # 0x0033 -> DIGIT THREE + u'4' # 0x0034 -> DIGIT FOUR + u'5' # 0x0035 -> DIGIT FIVE + u'6' # 0x0036 -> DIGIT SIX + u'7' # 0x0037 -> DIGIT SEVEN + u'8' # 0x0038 -> DIGIT EIGHT + u'9' # 0x0039 -> DIGIT NINE + u':' # 0x003a -> COLON + u';' # 0x003b -> SEMICOLON + u'<' # 0x003c -> LESS-THAN SIGN + u'=' # 0x003d -> EQUALS SIGN + u'>' # 0x003e -> GREATER-THAN SIGN + u'?' # 0x003f -> QUESTION MARK + u'@' # 0x0040 -> COMMERCIAL AT + u'A' # 0x0041 -> LATIN CAPITAL LETTER A + u'B' # 0x0042 -> LATIN CAPITAL LETTER B + u'C' # 0x0043 -> LATIN CAPITAL LETTER C + u'D' # 0x0044 -> LATIN CAPITAL LETTER D + u'E' # 0x0045 -> LATIN CAPITAL LETTER E + u'F' # 0x0046 -> LATIN CAPITAL LETTER F + u'G' # 0x0047 -> LATIN CAPITAL LETTER G + u'H' # 0x0048 -> LATIN CAPITAL LETTER H + u'I' # 0x0049 -> LATIN CAPITAL LETTER I + u'J' # 0x004a -> LATIN CAPITAL LETTER J + u'K' # 0x004b -> LATIN CAPITAL LETTER K + u'L' # 0x004c -> LATIN CAPITAL LETTER L + u'M' # 0x004d -> LATIN CAPITAL LETTER M + u'N' # 0x004e -> LATIN CAPITAL LETTER N + u'O' # 0x004f -> LATIN CAPITAL LETTER O + u'P' # 0x0050 -> LATIN CAPITAL LETTER P + u'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + u'R' # 0x0052 -> LATIN CAPITAL LETTER R + u'S' # 0x0053 -> LATIN CAPITAL LETTER S + u'T' # 0x0054 -> LATIN CAPITAL LETTER T + u'U' # 0x0055 -> LATIN CAPITAL LETTER U + u'V' # 0x0056 -> LATIN CAPITAL LETTER V + u'W' # 0x0057 -> LATIN CAPITAL LETTER W + u'X' # 0x0058 -> LATIN CAPITAL LETTER X + u'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + u'Z' # 0x005a -> LATIN CAPITAL LETTER Z + u'[' # 0x005b -> LEFT SQUARE BRACKET + u'\\' # 0x005c -> REVERSE SOLIDUS + u']' # 0x005d -> RIGHT SQUARE BRACKET + u'^' # 0x005e -> CIRCUMFLEX ACCENT + u'_' # 0x005f -> LOW LINE + u'`' # 0x0060 -> GRAVE ACCENT + u'a' # 0x0061 -> LATIN SMALL LETTER A + u'b' # 0x0062 -> LATIN SMALL LETTER B + u'c' # 0x0063 -> LATIN SMALL LETTER C + u'd' # 0x0064 -> LATIN SMALL LETTER D + u'e' # 0x0065 -> LATIN SMALL LETTER E + u'f' # 0x0066 -> LATIN SMALL LETTER F + u'g' # 0x0067 -> LATIN SMALL LETTER G + u'h' # 0x0068 -> LATIN SMALL LETTER H + u'i' # 0x0069 -> LATIN SMALL LETTER I + u'j' # 0x006a -> LATIN SMALL LETTER J + u'k' # 0x006b -> LATIN SMALL LETTER K + u'l' # 0x006c -> LATIN SMALL LETTER L + u'm' # 0x006d -> LATIN SMALL LETTER M + u'n' # 0x006e -> LATIN SMALL LETTER N + u'o' # 0x006f -> LATIN SMALL LETTER O + u'p' # 0x0070 -> LATIN SMALL LETTER P + u'q' # 0x0071 -> LATIN SMALL LETTER Q + u'r' # 0x0072 -> LATIN SMALL LETTER R + u's' # 0x0073 -> LATIN SMALL LETTER S + u't' # 0x0074 -> LATIN SMALL LETTER T + u'u' # 0x0075 -> LATIN SMALL LETTER U + u'v' # 0x0076 -> LATIN SMALL LETTER V + u'w' # 0x0077 -> LATIN SMALL LETTER W + u'x' # 0x0078 -> LATIN SMALL LETTER X + u'y' # 0x0079 -> LATIN SMALL LETTER Y + u'z' # 0x007a -> LATIN SMALL LETTER Z + u'{' # 0x007b -> LEFT CURLY BRACKET + u'|' # 0x007c -> VERTICAL LINE + u'}' # 0x007d -> RIGHT CURLY BRACKET + u'~' # 0x007e -> TILDE + u'\x7f' # 0x007f -> DELETE + u'\u0452' # 0x0080 -> CYRILLIC SMALL LETTER DJE + u'\u0402' # 0x0081 -> CYRILLIC CAPITAL LETTER DJE + u'\u0453' # 0x0082 -> CYRILLIC SMALL LETTER GJE + u'\u0403' # 0x0083 -> CYRILLIC CAPITAL LETTER GJE + u'\u0451' # 0x0084 -> CYRILLIC SMALL LETTER IO + u'\u0401' # 0x0085 -> CYRILLIC CAPITAL LETTER IO + u'\u0454' # 0x0086 -> CYRILLIC SMALL LETTER UKRAINIAN IE + u'\u0404' # 0x0087 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE + u'\u0455' # 0x0088 -> CYRILLIC SMALL LETTER DZE + u'\u0405' # 0x0089 -> CYRILLIC CAPITAL LETTER DZE + u'\u0456' # 0x008a -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + u'\u0406' # 0x008b -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + u'\u0457' # 0x008c -> CYRILLIC SMALL LETTER YI + u'\u0407' # 0x008d -> CYRILLIC CAPITAL LETTER YI + u'\u0458' # 0x008e -> CYRILLIC SMALL LETTER JE + u'\u0408' # 0x008f -> CYRILLIC CAPITAL LETTER JE + u'\u0459' # 0x0090 -> CYRILLIC SMALL LETTER LJE + u'\u0409' # 0x0091 -> CYRILLIC CAPITAL LETTER LJE + u'\u045a' # 0x0092 -> CYRILLIC SMALL LETTER NJE + u'\u040a' # 0x0093 -> CYRILLIC CAPITAL LETTER NJE + u'\u045b' # 0x0094 -> CYRILLIC SMALL LETTER TSHE + u'\u040b' # 0x0095 -> CYRILLIC CAPITAL LETTER TSHE + u'\u045c' # 0x0096 -> CYRILLIC SMALL LETTER KJE + u'\u040c' # 0x0097 -> CYRILLIC CAPITAL LETTER KJE + u'\u045e' # 0x0098 -> CYRILLIC SMALL LETTER SHORT U + u'\u040e' # 0x0099 -> CYRILLIC CAPITAL LETTER SHORT U + u'\u045f' # 0x009a -> CYRILLIC SMALL LETTER DZHE + u'\u040f' # 0x009b -> CYRILLIC CAPITAL LETTER DZHE + u'\u044e' # 0x009c -> CYRILLIC SMALL LETTER YU + u'\u042e' # 0x009d -> CYRILLIC CAPITAL LETTER YU + u'\u044a' # 0x009e -> CYRILLIC SMALL LETTER HARD SIGN + u'\u042a' # 0x009f -> CYRILLIC CAPITAL LETTER HARD SIGN + u'\u0430' # 0x00a0 -> CYRILLIC SMALL LETTER A + u'\u0410' # 0x00a1 -> CYRILLIC CAPITAL LETTER A + u'\u0431' # 0x00a2 -> CYRILLIC SMALL LETTER BE + u'\u0411' # 0x00a3 -> CYRILLIC CAPITAL LETTER BE + u'\u0446' # 0x00a4 -> CYRILLIC SMALL LETTER TSE + u'\u0426' # 0x00a5 -> CYRILLIC CAPITAL LETTER TSE + u'\u0434' # 0x00a6 -> CYRILLIC SMALL LETTER DE + u'\u0414' # 0x00a7 -> CYRILLIC CAPITAL LETTER DE + u'\u0435' # 0x00a8 -> CYRILLIC SMALL LETTER IE + u'\u0415' # 0x00a9 -> CYRILLIC CAPITAL LETTER IE + u'\u0444' # 0x00aa -> CYRILLIC SMALL LETTER EF + u'\u0424' # 0x00ab -> CYRILLIC CAPITAL LETTER EF + u'\u0433' # 0x00ac -> CYRILLIC SMALL LETTER GHE + u'\u0413' # 0x00ad -> CYRILLIC CAPITAL LETTER GHE + u'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2591' # 0x00b0 -> LIGHT SHADE + u'\u2592' # 0x00b1 -> MEDIUM SHADE + u'\u2593' # 0x00b2 -> DARK SHADE + u'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + u'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\u0445' # 0x00b5 -> CYRILLIC SMALL LETTER HA + u'\u0425' # 0x00b6 -> CYRILLIC CAPITAL LETTER HA + u'\u0438' # 0x00b7 -> CYRILLIC SMALL LETTER I + u'\u0418' # 0x00b8 -> CYRILLIC CAPITAL LETTER I + u'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\u0439' # 0x00bd -> CYRILLIC SMALL LETTER SHORT I + u'\u0419' # 0x00be -> CYRILLIC CAPITAL LETTER SHORT I + u'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\u043a' # 0x00c6 -> CYRILLIC SMALL LETTER KA + u'\u041a' # 0x00c7 -> CYRILLIC CAPITAL LETTER KA + u'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\xa4' # 0x00cf -> CURRENCY SIGN + u'\u043b' # 0x00d0 -> CYRILLIC SMALL LETTER EL + u'\u041b' # 0x00d1 -> CYRILLIC CAPITAL LETTER EL + u'\u043c' # 0x00d2 -> CYRILLIC SMALL LETTER EM + u'\u041c' # 0x00d3 -> CYRILLIC CAPITAL LETTER EM + u'\u043d' # 0x00d4 -> CYRILLIC SMALL LETTER EN + u'\u041d' # 0x00d5 -> CYRILLIC CAPITAL LETTER EN + u'\u043e' # 0x00d6 -> CYRILLIC SMALL LETTER O + u'\u041e' # 0x00d7 -> CYRILLIC CAPITAL LETTER O + u'\u043f' # 0x00d8 -> CYRILLIC SMALL LETTER PE + u'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2588' # 0x00db -> FULL BLOCK + u'\u2584' # 0x00dc -> LOWER HALF BLOCK + u'\u041f' # 0x00dd -> CYRILLIC CAPITAL LETTER PE + u'\u044f' # 0x00de -> CYRILLIC SMALL LETTER YA + u'\u2580' # 0x00df -> UPPER HALF BLOCK + u'\u042f' # 0x00e0 -> CYRILLIC CAPITAL LETTER YA + u'\u0440' # 0x00e1 -> CYRILLIC SMALL LETTER ER + u'\u0420' # 0x00e2 -> CYRILLIC CAPITAL LETTER ER + u'\u0441' # 0x00e3 -> CYRILLIC SMALL LETTER ES + u'\u0421' # 0x00e4 -> CYRILLIC CAPITAL LETTER ES + u'\u0442' # 0x00e5 -> CYRILLIC SMALL LETTER TE + u'\u0422' # 0x00e6 -> CYRILLIC CAPITAL LETTER TE + u'\u0443' # 0x00e7 -> CYRILLIC SMALL LETTER U + u'\u0423' # 0x00e8 -> CYRILLIC CAPITAL LETTER U + u'\u0436' # 0x00e9 -> CYRILLIC SMALL LETTER ZHE + u'\u0416' # 0x00ea -> CYRILLIC CAPITAL LETTER ZHE + u'\u0432' # 0x00eb -> CYRILLIC SMALL LETTER VE + u'\u0412' # 0x00ec -> CYRILLIC CAPITAL LETTER VE + u'\u044c' # 0x00ed -> CYRILLIC SMALL LETTER SOFT SIGN + u'\u042c' # 0x00ee -> CYRILLIC CAPITAL LETTER SOFT SIGN + u'\u2116' # 0x00ef -> NUMERO SIGN + u'\xad' # 0x00f0 -> SOFT HYPHEN + u'\u044b' # 0x00f1 -> CYRILLIC SMALL LETTER YERU + u'\u042b' # 0x00f2 -> CYRILLIC CAPITAL LETTER YERU + u'\u0437' # 0x00f3 -> CYRILLIC SMALL LETTER ZE + u'\u0417' # 0x00f4 -> CYRILLIC CAPITAL LETTER ZE + u'\u0448' # 0x00f5 -> CYRILLIC SMALL LETTER SHA + u'\u0428' # 0x00f6 -> CYRILLIC CAPITAL LETTER SHA + u'\u044d' # 0x00f7 -> CYRILLIC SMALL LETTER E + u'\u042d' # 0x00f8 -> CYRILLIC CAPITAL LETTER E + u'\u0449' # 0x00f9 -> CYRILLIC SMALL LETTER SHCHA + u'\u0429' # 0x00fa -> CYRILLIC CAPITAL LETTER SHCHA + u'\u0447' # 0x00fb -> CYRILLIC SMALL LETTER CHE + u'\u0427' # 0x00fc -> CYRILLIC CAPITAL LETTER CHE + u'\xa7' # 0x00fd -> SECTION SIGN + u'\u25a0' # 0x00fe -> BLACK SQUARE + u'\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a4: 0x00cf, # CURRENCY SIGN + 0x00a7: 0x00fd, # SECTION SIGN + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ad: 0x00f0, # SOFT HYPHEN + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x0401: 0x0085, # CYRILLIC CAPITAL LETTER IO + 0x0402: 0x0081, # CYRILLIC CAPITAL LETTER DJE + 0x0403: 0x0083, # CYRILLIC CAPITAL LETTER GJE + 0x0404: 0x0087, # CYRILLIC CAPITAL LETTER UKRAINIAN IE + 0x0405: 0x0089, # CYRILLIC CAPITAL LETTER DZE + 0x0406: 0x008b, # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + 0x0407: 0x008d, # CYRILLIC CAPITAL LETTER YI + 0x0408: 0x008f, # CYRILLIC CAPITAL LETTER JE + 0x0409: 0x0091, # CYRILLIC CAPITAL LETTER LJE + 0x040a: 0x0093, # CYRILLIC CAPITAL LETTER NJE + 0x040b: 0x0095, # CYRILLIC CAPITAL LETTER TSHE + 0x040c: 0x0097, # CYRILLIC CAPITAL LETTER KJE + 0x040e: 0x0099, # CYRILLIC CAPITAL LETTER SHORT U + 0x040f: 0x009b, # CYRILLIC CAPITAL LETTER DZHE + 0x0410: 0x00a1, # CYRILLIC CAPITAL LETTER A + 0x0411: 0x00a3, # CYRILLIC CAPITAL LETTER BE + 0x0412: 0x00ec, # CYRILLIC CAPITAL LETTER VE + 0x0413: 0x00ad, # CYRILLIC CAPITAL LETTER GHE + 0x0414: 0x00a7, # CYRILLIC CAPITAL LETTER DE + 0x0415: 0x00a9, # CYRILLIC CAPITAL LETTER IE + 0x0416: 0x00ea, # CYRILLIC CAPITAL LETTER ZHE + 0x0417: 0x00f4, # CYRILLIC CAPITAL LETTER ZE + 0x0418: 0x00b8, # CYRILLIC CAPITAL LETTER I + 0x0419: 0x00be, # CYRILLIC CAPITAL LETTER SHORT I + 0x041a: 0x00c7, # CYRILLIC CAPITAL LETTER KA + 0x041b: 0x00d1, # CYRILLIC CAPITAL LETTER EL + 0x041c: 0x00d3, # CYRILLIC CAPITAL LETTER EM + 0x041d: 0x00d5, # CYRILLIC CAPITAL LETTER EN + 0x041e: 0x00d7, # CYRILLIC CAPITAL LETTER O + 0x041f: 0x00dd, # CYRILLIC CAPITAL LETTER PE + 0x0420: 0x00e2, # CYRILLIC CAPITAL LETTER ER + 0x0421: 0x00e4, # CYRILLIC CAPITAL LETTER ES + 0x0422: 0x00e6, # CYRILLIC CAPITAL LETTER TE + 0x0423: 0x00e8, # CYRILLIC CAPITAL LETTER U + 0x0424: 0x00ab, # CYRILLIC CAPITAL LETTER EF + 0x0425: 0x00b6, # CYRILLIC CAPITAL LETTER HA + 0x0426: 0x00a5, # CYRILLIC CAPITAL LETTER TSE + 0x0427: 0x00fc, # CYRILLIC CAPITAL LETTER CHE + 0x0428: 0x00f6, # CYRILLIC CAPITAL LETTER SHA + 0x0429: 0x00fa, # CYRILLIC CAPITAL LETTER SHCHA + 0x042a: 0x009f, # CYRILLIC CAPITAL LETTER HARD SIGN + 0x042b: 0x00f2, # CYRILLIC CAPITAL LETTER YERU + 0x042c: 0x00ee, # CYRILLIC CAPITAL LETTER SOFT SIGN + 0x042d: 0x00f8, # CYRILLIC CAPITAL LETTER E + 0x042e: 0x009d, # CYRILLIC CAPITAL LETTER YU + 0x042f: 0x00e0, # CYRILLIC CAPITAL LETTER YA + 0x0430: 0x00a0, # CYRILLIC SMALL LETTER A + 0x0431: 0x00a2, # CYRILLIC SMALL LETTER BE + 0x0432: 0x00eb, # CYRILLIC SMALL LETTER VE + 0x0433: 0x00ac, # CYRILLIC SMALL LETTER GHE + 0x0434: 0x00a6, # CYRILLIC SMALL LETTER DE + 0x0435: 0x00a8, # CYRILLIC SMALL LETTER IE + 0x0436: 0x00e9, # CYRILLIC SMALL LETTER ZHE + 0x0437: 0x00f3, # CYRILLIC SMALL LETTER ZE + 0x0438: 0x00b7, # CYRILLIC SMALL LETTER I + 0x0439: 0x00bd, # CYRILLIC SMALL LETTER SHORT I + 0x043a: 0x00c6, # CYRILLIC SMALL LETTER KA + 0x043b: 0x00d0, # CYRILLIC SMALL LETTER EL + 0x043c: 0x00d2, # CYRILLIC SMALL LETTER EM + 0x043d: 0x00d4, # CYRILLIC SMALL LETTER EN + 0x043e: 0x00d6, # CYRILLIC SMALL LETTER O + 0x043f: 0x00d8, # CYRILLIC SMALL LETTER PE + 0x0440: 0x00e1, # CYRILLIC SMALL LETTER ER + 0x0441: 0x00e3, # CYRILLIC SMALL LETTER ES + 0x0442: 0x00e5, # CYRILLIC SMALL LETTER TE + 0x0443: 0x00e7, # CYRILLIC SMALL LETTER U + 0x0444: 0x00aa, # CYRILLIC SMALL LETTER EF + 0x0445: 0x00b5, # CYRILLIC SMALL LETTER HA + 0x0446: 0x00a4, # CYRILLIC SMALL LETTER TSE + 0x0447: 0x00fb, # CYRILLIC SMALL LETTER CHE + 0x0448: 0x00f5, # CYRILLIC SMALL LETTER SHA + 0x0449: 0x00f9, # CYRILLIC SMALL LETTER SHCHA + 0x044a: 0x009e, # CYRILLIC SMALL LETTER HARD SIGN + 0x044b: 0x00f1, # CYRILLIC SMALL LETTER YERU + 0x044c: 0x00ed, # CYRILLIC SMALL LETTER SOFT SIGN + 0x044d: 0x00f7, # CYRILLIC SMALL LETTER E + 0x044e: 0x009c, # CYRILLIC SMALL LETTER YU + 0x044f: 0x00de, # CYRILLIC SMALL LETTER YA + 0x0451: 0x0084, # CYRILLIC SMALL LETTER IO + 0x0452: 0x0080, # CYRILLIC SMALL LETTER DJE + 0x0453: 0x0082, # CYRILLIC SMALL LETTER GJE + 0x0454: 0x0086, # CYRILLIC SMALL LETTER UKRAINIAN IE + 0x0455: 0x0088, # CYRILLIC SMALL LETTER DZE + 0x0456: 0x008a, # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + 0x0457: 0x008c, # CYRILLIC SMALL LETTER YI + 0x0458: 0x008e, # CYRILLIC SMALL LETTER JE + 0x0459: 0x0090, # CYRILLIC SMALL LETTER LJE + 0x045a: 0x0092, # CYRILLIC SMALL LETTER NJE + 0x045b: 0x0094, # CYRILLIC SMALL LETTER TSHE + 0x045c: 0x0096, # CYRILLIC SMALL LETTER KJE + 0x045e: 0x0098, # CYRILLIC SMALL LETTER SHORT U + 0x045f: 0x009a, # CYRILLIC SMALL LETTER DZHE + 0x2116: 0x00ef, # NUMERO SIGN + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/thirdparty/python25/Lib/encodings/cp856.py b/thirdparty/python25/Lib/encodings/cp856.py new file mode 100644 index 000000000..e26af0bbf --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp856.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp856 generated from 'MAPPINGS/VENDORS/MISC/CP856.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp856', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\u05d0' # 0x80 -> HEBREW LETTER ALEF + u'\u05d1' # 0x81 -> HEBREW LETTER BET + u'\u05d2' # 0x82 -> HEBREW LETTER GIMEL + u'\u05d3' # 0x83 -> HEBREW LETTER DALET + u'\u05d4' # 0x84 -> HEBREW LETTER HE + u'\u05d5' # 0x85 -> HEBREW LETTER VAV + u'\u05d6' # 0x86 -> HEBREW LETTER ZAYIN + u'\u05d7' # 0x87 -> HEBREW LETTER HET + u'\u05d8' # 0x88 -> HEBREW LETTER TET + u'\u05d9' # 0x89 -> HEBREW LETTER YOD + u'\u05da' # 0x8A -> HEBREW LETTER FINAL KAF + u'\u05db' # 0x8B -> HEBREW LETTER KAF + u'\u05dc' # 0x8C -> HEBREW LETTER LAMED + u'\u05dd' # 0x8D -> HEBREW LETTER FINAL MEM + u'\u05de' # 0x8E -> HEBREW LETTER MEM + u'\u05df' # 0x8F -> HEBREW LETTER FINAL NUN + u'\u05e0' # 0x90 -> HEBREW LETTER NUN + u'\u05e1' # 0x91 -> HEBREW LETTER SAMEKH + u'\u05e2' # 0x92 -> HEBREW LETTER AYIN + u'\u05e3' # 0x93 -> HEBREW LETTER FINAL PE + u'\u05e4' # 0x94 -> HEBREW LETTER PE + u'\u05e5' # 0x95 -> HEBREW LETTER FINAL TSADI + u'\u05e6' # 0x96 -> HEBREW LETTER TSADI + u'\u05e7' # 0x97 -> HEBREW LETTER QOF + u'\u05e8' # 0x98 -> HEBREW LETTER RESH + u'\u05e9' # 0x99 -> HEBREW LETTER SHIN + u'\u05ea' # 0x9A -> HEBREW LETTER TAV + u'\ufffe' # 0x9B -> UNDEFINED + u'\xa3' # 0x9C -> POUND SIGN + u'\ufffe' # 0x9D -> UNDEFINED + u'\xd7' # 0x9E -> MULTIPLICATION SIGN + u'\ufffe' # 0x9F -> UNDEFINED + u'\ufffe' # 0xA0 -> UNDEFINED + u'\ufffe' # 0xA1 -> UNDEFINED + u'\ufffe' # 0xA2 -> UNDEFINED + u'\ufffe' # 0xA3 -> UNDEFINED + u'\ufffe' # 0xA4 -> UNDEFINED + u'\ufffe' # 0xA5 -> UNDEFINED + u'\ufffe' # 0xA6 -> UNDEFINED + u'\ufffe' # 0xA7 -> UNDEFINED + u'\ufffe' # 0xA8 -> UNDEFINED + u'\xae' # 0xA9 -> REGISTERED SIGN + u'\xac' # 0xAA -> NOT SIGN + u'\xbd' # 0xAB -> VULGAR FRACTION ONE HALF + u'\xbc' # 0xAC -> VULGAR FRACTION ONE QUARTER + u'\ufffe' # 0xAD -> UNDEFINED + u'\xab' # 0xAE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0xAF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2591' # 0xB0 -> LIGHT SHADE + u'\u2592' # 0xB1 -> MEDIUM SHADE + u'\u2593' # 0xB2 -> DARK SHADE + u'\u2502' # 0xB3 -> BOX DRAWINGS LIGHT VERTICAL + u'\u2524' # 0xB4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\ufffe' # 0xB5 -> UNDEFINED + u'\ufffe' # 0xB6 -> UNDEFINED + u'\ufffe' # 0xB7 -> UNDEFINED + u'\xa9' # 0xB8 -> COPYRIGHT SIGN + u'\u2563' # 0xB9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u2551' # 0xBA -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2557' # 0xBB -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u255d' # 0xBC -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\xa2' # 0xBD -> CENT SIGN + u'\xa5' # 0xBE -> YEN SIGN + u'\u2510' # 0xBF -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0xC0 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2534' # 0xC1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u252c' # 0xC2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u251c' # 0xC3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2500' # 0xC4 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u253c' # 0xC5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\ufffe' # 0xC6 -> UNDEFINED + u'\ufffe' # 0xC7 -> UNDEFINED + u'\u255a' # 0xC8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u2554' # 0xC9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u2569' # 0xCA -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u2566' # 0xCB -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2560' # 0xCC -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2550' # 0xCD -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u256c' # 0xCE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\xa4' # 0xCF -> CURRENCY SIGN + u'\ufffe' # 0xD0 -> UNDEFINED + u'\ufffe' # 0xD1 -> UNDEFINED + u'\ufffe' # 0xD2 -> UNDEFINED + u'\ufffe' # 0xD3 -> UNDEFINEDS + u'\ufffe' # 0xD4 -> UNDEFINED + u'\ufffe' # 0xD5 -> UNDEFINED + u'\ufffe' # 0xD6 -> UNDEFINEDE + u'\ufffe' # 0xD7 -> UNDEFINED + u'\ufffe' # 0xD8 -> UNDEFINED + u'\u2518' # 0xD9 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u250c' # 0xDA -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2588' # 0xDB -> FULL BLOCK + u'\u2584' # 0xDC -> LOWER HALF BLOCK + u'\xa6' # 0xDD -> BROKEN BAR + u'\ufffe' # 0xDE -> UNDEFINED + u'\u2580' # 0xDF -> UPPER HALF BLOCK + u'\ufffe' # 0xE0 -> UNDEFINED + u'\ufffe' # 0xE1 -> UNDEFINED + u'\ufffe' # 0xE2 -> UNDEFINED + u'\ufffe' # 0xE3 -> UNDEFINED + u'\ufffe' # 0xE4 -> UNDEFINED + u'\ufffe' # 0xE5 -> UNDEFINED + u'\xb5' # 0xE6 -> MICRO SIGN + u'\ufffe' # 0xE7 -> UNDEFINED + u'\ufffe' # 0xE8 -> UNDEFINED + u'\ufffe' # 0xE9 -> UNDEFINED + u'\ufffe' # 0xEA -> UNDEFINED + u'\ufffe' # 0xEB -> UNDEFINED + u'\ufffe' # 0xEC -> UNDEFINED + u'\ufffe' # 0xED -> UNDEFINED + u'\xaf' # 0xEE -> MACRON + u'\xb4' # 0xEF -> ACUTE ACCENT + u'\xad' # 0xF0 -> SOFT HYPHEN + u'\xb1' # 0xF1 -> PLUS-MINUS SIGN + u'\u2017' # 0xF2 -> DOUBLE LOW LINE + u'\xbe' # 0xF3 -> VULGAR FRACTION THREE QUARTERS + u'\xb6' # 0xF4 -> PILCROW SIGN + u'\xa7' # 0xF5 -> SECTION SIGN + u'\xf7' # 0xF6 -> DIVISION SIGN + u'\xb8' # 0xF7 -> CEDILLA + u'\xb0' # 0xF8 -> DEGREE SIGN + u'\xa8' # 0xF9 -> DIAERESIS + u'\xb7' # 0xFA -> MIDDLE DOT + u'\xb9' # 0xFB -> SUPERSCRIPT ONE + u'\xb3' # 0xFC -> SUPERSCRIPT THREE + u'\xb2' # 0xFD -> SUPERSCRIPT TWO + u'\u25a0' # 0xFE -> BLACK SQUARE + u'\xa0' # 0xFF -> NO-BREAK SPACE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp857.py b/thirdparty/python25/Lib/encodings/cp857.py new file mode 100644 index 000000000..d337e5be1 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp857.py @@ -0,0 +1,694 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP857.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp857', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE + 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS + 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x008d: 0x0131, # LATIN SMALL LETTER DOTLESS I + 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE + 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE + 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE + 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE + 0x0098: 0x0130, # LATIN CAPITAL LETTER I WITH DOT ABOVE + 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE + 0x009e: 0x015e, # LATIN CAPITAL LETTER S WITH CEDILLA + 0x009f: 0x015f, # LATIN SMALL LETTER S WITH CEDILLA + 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE + 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE + 0x00a6: 0x011e, # LATIN CAPITAL LETTER G WITH BREVE + 0x00a7: 0x011f, # LATIN SMALL LETTER G WITH BREVE + 0x00a8: 0x00bf, # INVERTED QUESTION MARK + 0x00a9: 0x00ae, # REGISTERED SIGN + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00b6: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00b7: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE + 0x00b8: 0x00a9, # COPYRIGHT SIGN + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x00a2, # CENT SIGN + 0x00be: 0x00a5, # YEN SIGN + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x00e3, # LATIN SMALL LETTER A WITH TILDE + 0x00c7: 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x00a4, # CURRENCY SIGN + 0x00d0: 0x00ba, # MASCULINE ORDINAL INDICATOR + 0x00d1: 0x00aa, # FEMININE ORDINAL INDICATOR + 0x00d2: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00d3: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00d4: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE + 0x00d5: None, # UNDEFINED + 0x00d6: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00d7: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00d8: 0x00cf, # LATIN CAPITAL LETTER I WITH DIAERESIS + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x00a6, # BROKEN BAR + 0x00de: 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00e2: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00e3: 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE + 0x00e4: 0x00f5, # LATIN SMALL LETTER O WITH TILDE + 0x00e5: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: None, # UNDEFINED + 0x00e8: 0x00d7, # MULTIPLICATION SIGN + 0x00e9: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00ea: 0x00db, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00eb: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE + 0x00ed: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x00ee: 0x00af, # MACRON + 0x00ef: 0x00b4, # ACUTE ACCENT + 0x00f0: 0x00ad, # SOFT HYPHEN + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: None, # UNDEFINED + 0x00f3: 0x00be, # VULGAR FRACTION THREE QUARTERS + 0x00f4: 0x00b6, # PILCROW SIGN + 0x00f5: 0x00a7, # SECTION SIGN + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x00b8, # CEDILLA + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x00a8, # DIAERESIS + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x00b9, # SUPERSCRIPT ONE + 0x00fc: 0x00b3, # SUPERSCRIPT THREE + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x0000 -> NULL + u'\x01' # 0x0001 -> START OF HEADING + u'\x02' # 0x0002 -> START OF TEXT + u'\x03' # 0x0003 -> END OF TEXT + u'\x04' # 0x0004 -> END OF TRANSMISSION + u'\x05' # 0x0005 -> ENQUIRY + u'\x06' # 0x0006 -> ACKNOWLEDGE + u'\x07' # 0x0007 -> BELL + u'\x08' # 0x0008 -> BACKSPACE + u'\t' # 0x0009 -> HORIZONTAL TABULATION + u'\n' # 0x000a -> LINE FEED + u'\x0b' # 0x000b -> VERTICAL TABULATION + u'\x0c' # 0x000c -> FORM FEED + u'\r' # 0x000d -> CARRIAGE RETURN + u'\x0e' # 0x000e -> SHIFT OUT + u'\x0f' # 0x000f -> SHIFT IN + u'\x10' # 0x0010 -> DATA LINK ESCAPE + u'\x11' # 0x0011 -> DEVICE CONTROL ONE + u'\x12' # 0x0012 -> DEVICE CONTROL TWO + u'\x13' # 0x0013 -> DEVICE CONTROL THREE + u'\x14' # 0x0014 -> DEVICE CONTROL FOUR + u'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x0016 -> SYNCHRONOUS IDLE + u'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x0018 -> CANCEL + u'\x19' # 0x0019 -> END OF MEDIUM + u'\x1a' # 0x001a -> SUBSTITUTE + u'\x1b' # 0x001b -> ESCAPE + u'\x1c' # 0x001c -> FILE SEPARATOR + u'\x1d' # 0x001d -> GROUP SEPARATOR + u'\x1e' # 0x001e -> RECORD SEPARATOR + u'\x1f' # 0x001f -> UNIT SEPARATOR + u' ' # 0x0020 -> SPACE + u'!' # 0x0021 -> EXCLAMATION MARK + u'"' # 0x0022 -> QUOTATION MARK + u'#' # 0x0023 -> NUMBER SIGN + u'$' # 0x0024 -> DOLLAR SIGN + u'%' # 0x0025 -> PERCENT SIGN + u'&' # 0x0026 -> AMPERSAND + u"'" # 0x0027 -> APOSTROPHE + u'(' # 0x0028 -> LEFT PARENTHESIS + u')' # 0x0029 -> RIGHT PARENTHESIS + u'*' # 0x002a -> ASTERISK + u'+' # 0x002b -> PLUS SIGN + u',' # 0x002c -> COMMA + u'-' # 0x002d -> HYPHEN-MINUS + u'.' # 0x002e -> FULL STOP + u'/' # 0x002f -> SOLIDUS + u'0' # 0x0030 -> DIGIT ZERO + u'1' # 0x0031 -> DIGIT ONE + u'2' # 0x0032 -> DIGIT TWO + u'3' # 0x0033 -> DIGIT THREE + u'4' # 0x0034 -> DIGIT FOUR + u'5' # 0x0035 -> DIGIT FIVE + u'6' # 0x0036 -> DIGIT SIX + u'7' # 0x0037 -> DIGIT SEVEN + u'8' # 0x0038 -> DIGIT EIGHT + u'9' # 0x0039 -> DIGIT NINE + u':' # 0x003a -> COLON + u';' # 0x003b -> SEMICOLON + u'<' # 0x003c -> LESS-THAN SIGN + u'=' # 0x003d -> EQUALS SIGN + u'>' # 0x003e -> GREATER-THAN SIGN + u'?' # 0x003f -> QUESTION MARK + u'@' # 0x0040 -> COMMERCIAL AT + u'A' # 0x0041 -> LATIN CAPITAL LETTER A + u'B' # 0x0042 -> LATIN CAPITAL LETTER B + u'C' # 0x0043 -> LATIN CAPITAL LETTER C + u'D' # 0x0044 -> LATIN CAPITAL LETTER D + u'E' # 0x0045 -> LATIN CAPITAL LETTER E + u'F' # 0x0046 -> LATIN CAPITAL LETTER F + u'G' # 0x0047 -> LATIN CAPITAL LETTER G + u'H' # 0x0048 -> LATIN CAPITAL LETTER H + u'I' # 0x0049 -> LATIN CAPITAL LETTER I + u'J' # 0x004a -> LATIN CAPITAL LETTER J + u'K' # 0x004b -> LATIN CAPITAL LETTER K + u'L' # 0x004c -> LATIN CAPITAL LETTER L + u'M' # 0x004d -> LATIN CAPITAL LETTER M + u'N' # 0x004e -> LATIN CAPITAL LETTER N + u'O' # 0x004f -> LATIN CAPITAL LETTER O + u'P' # 0x0050 -> LATIN CAPITAL LETTER P + u'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + u'R' # 0x0052 -> LATIN CAPITAL LETTER R + u'S' # 0x0053 -> LATIN CAPITAL LETTER S + u'T' # 0x0054 -> LATIN CAPITAL LETTER T + u'U' # 0x0055 -> LATIN CAPITAL LETTER U + u'V' # 0x0056 -> LATIN CAPITAL LETTER V + u'W' # 0x0057 -> LATIN CAPITAL LETTER W + u'X' # 0x0058 -> LATIN CAPITAL LETTER X + u'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + u'Z' # 0x005a -> LATIN CAPITAL LETTER Z + u'[' # 0x005b -> LEFT SQUARE BRACKET + u'\\' # 0x005c -> REVERSE SOLIDUS + u']' # 0x005d -> RIGHT SQUARE BRACKET + u'^' # 0x005e -> CIRCUMFLEX ACCENT + u'_' # 0x005f -> LOW LINE + u'`' # 0x0060 -> GRAVE ACCENT + u'a' # 0x0061 -> LATIN SMALL LETTER A + u'b' # 0x0062 -> LATIN SMALL LETTER B + u'c' # 0x0063 -> LATIN SMALL LETTER C + u'd' # 0x0064 -> LATIN SMALL LETTER D + u'e' # 0x0065 -> LATIN SMALL LETTER E + u'f' # 0x0066 -> LATIN SMALL LETTER F + u'g' # 0x0067 -> LATIN SMALL LETTER G + u'h' # 0x0068 -> LATIN SMALL LETTER H + u'i' # 0x0069 -> LATIN SMALL LETTER I + u'j' # 0x006a -> LATIN SMALL LETTER J + u'k' # 0x006b -> LATIN SMALL LETTER K + u'l' # 0x006c -> LATIN SMALL LETTER L + u'm' # 0x006d -> LATIN SMALL LETTER M + u'n' # 0x006e -> LATIN SMALL LETTER N + u'o' # 0x006f -> LATIN SMALL LETTER O + u'p' # 0x0070 -> LATIN SMALL LETTER P + u'q' # 0x0071 -> LATIN SMALL LETTER Q + u'r' # 0x0072 -> LATIN SMALL LETTER R + u's' # 0x0073 -> LATIN SMALL LETTER S + u't' # 0x0074 -> LATIN SMALL LETTER T + u'u' # 0x0075 -> LATIN SMALL LETTER U + u'v' # 0x0076 -> LATIN SMALL LETTER V + u'w' # 0x0077 -> LATIN SMALL LETTER W + u'x' # 0x0078 -> LATIN SMALL LETTER X + u'y' # 0x0079 -> LATIN SMALL LETTER Y + u'z' # 0x007a -> LATIN SMALL LETTER Z + u'{' # 0x007b -> LEFT CURLY BRACKET + u'|' # 0x007c -> VERTICAL LINE + u'}' # 0x007d -> RIGHT CURLY BRACKET + u'~' # 0x007e -> TILDE + u'\x7f' # 0x007f -> DELETE + u'\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + u'\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE + u'\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\u0131' # 0x008d -> LATIN SMALL LETTER DOTLESS I + u'\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE + u'\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE + u'\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE + u'\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE + u'\u0130' # 0x0098 -> LATIN CAPITAL LETTER I WITH DOT ABOVE + u'\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE + u'\xa3' # 0x009c -> POUND SIGN + u'\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE + u'\u015e' # 0x009e -> LATIN CAPITAL LETTER S WITH CEDILLA + u'\u015f' # 0x009f -> LATIN SMALL LETTER S WITH CEDILLA + u'\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE + u'\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE + u'\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + u'\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + u'\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE + u'\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE + u'\u011e' # 0x00a6 -> LATIN CAPITAL LETTER G WITH BREVE + u'\u011f' # 0x00a7 -> LATIN SMALL LETTER G WITH BREVE + u'\xbf' # 0x00a8 -> INVERTED QUESTION MARK + u'\xae' # 0x00a9 -> REGISTERED SIGN + u'\xac' # 0x00aa -> NOT SIGN + u'\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + u'\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + u'\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK + u'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2591' # 0x00b0 -> LIGHT SHADE + u'\u2592' # 0x00b1 -> MEDIUM SHADE + u'\u2593' # 0x00b2 -> DARK SHADE + u'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + u'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\xc1' # 0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc2' # 0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xc0' # 0x00b7 -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xa9' # 0x00b8 -> COPYRIGHT SIGN + u'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\xa2' # 0x00bd -> CENT SIGN + u'\xa5' # 0x00be -> YEN SIGN + u'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\xe3' # 0x00c6 -> LATIN SMALL LETTER A WITH TILDE + u'\xc3' # 0x00c7 -> LATIN CAPITAL LETTER A WITH TILDE + u'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\xa4' # 0x00cf -> CURRENCY SIGN + u'\xba' # 0x00d0 -> MASCULINE ORDINAL INDICATOR + u'\xaa' # 0x00d1 -> FEMININE ORDINAL INDICATOR + u'\xca' # 0x00d2 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xcb' # 0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xc8' # 0x00d4 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\ufffe' # 0x00d5 -> UNDEFINED + u'\xcd' # 0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0x00d8 -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2588' # 0x00db -> FULL BLOCK + u'\u2584' # 0x00dc -> LOWER HALF BLOCK + u'\xa6' # 0x00dd -> BROKEN BAR + u'\xcc' # 0x00de -> LATIN CAPITAL LETTER I WITH GRAVE + u'\u2580' # 0x00df -> UPPER HALF BLOCK + u'\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S + u'\xd4' # 0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\xd2' # 0x00e3 -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xf5' # 0x00e4 -> LATIN SMALL LETTER O WITH TILDE + u'\xd5' # 0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE + u'\xb5' # 0x00e6 -> MICRO SIGN + u'\ufffe' # 0x00e7 -> UNDEFINED + u'\xd7' # 0x00e8 -> MULTIPLICATION SIGN + u'\xda' # 0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0x00ea -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xd9' # 0x00eb -> LATIN CAPITAL LETTER U WITH GRAVE + u'\xec' # 0x00ec -> LATIN SMALL LETTER I WITH GRAVE + u'\xff' # 0x00ed -> LATIN SMALL LETTER Y WITH DIAERESIS + u'\xaf' # 0x00ee -> MACRON + u'\xb4' # 0x00ef -> ACUTE ACCENT + u'\xad' # 0x00f0 -> SOFT HYPHEN + u'\xb1' # 0x00f1 -> PLUS-MINUS SIGN + u'\ufffe' # 0x00f2 -> UNDEFINED + u'\xbe' # 0x00f3 -> VULGAR FRACTION THREE QUARTERS + u'\xb6' # 0x00f4 -> PILCROW SIGN + u'\xa7' # 0x00f5 -> SECTION SIGN + u'\xf7' # 0x00f6 -> DIVISION SIGN + u'\xb8' # 0x00f7 -> CEDILLA + u'\xb0' # 0x00f8 -> DEGREE SIGN + u'\xa8' # 0x00f9 -> DIAERESIS + u'\xb7' # 0x00fa -> MIDDLE DOT + u'\xb9' # 0x00fb -> SUPERSCRIPT ONE + u'\xb3' # 0x00fc -> SUPERSCRIPT THREE + u'\xb2' # 0x00fd -> SUPERSCRIPT TWO + u'\u25a0' # 0x00fe -> BLACK SQUARE + u'\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK + 0x00a2: 0x00bd, # CENT SIGN + 0x00a3: 0x009c, # POUND SIGN + 0x00a4: 0x00cf, # CURRENCY SIGN + 0x00a5: 0x00be, # YEN SIGN + 0x00a6: 0x00dd, # BROKEN BAR + 0x00a7: 0x00f5, # SECTION SIGN + 0x00a8: 0x00f9, # DIAERESIS + 0x00a9: 0x00b8, # COPYRIGHT SIGN + 0x00aa: 0x00d1, # FEMININE ORDINAL INDICATOR + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00ad: 0x00f0, # SOFT HYPHEN + 0x00ae: 0x00a9, # REGISTERED SIGN + 0x00af: 0x00ee, # MACRON + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b3: 0x00fc, # SUPERSCRIPT THREE + 0x00b4: 0x00ef, # ACUTE ACCENT + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b6: 0x00f4, # PILCROW SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00b8: 0x00f7, # CEDILLA + 0x00b9: 0x00fb, # SUPERSCRIPT ONE + 0x00ba: 0x00d0, # MASCULINE ORDINAL INDICATOR + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00be: 0x00f3, # VULGAR FRACTION THREE QUARTERS + 0x00bf: 0x00a8, # INVERTED QUESTION MARK + 0x00c0: 0x00b7, # LATIN CAPITAL LETTER A WITH GRAVE + 0x00c1: 0x00b5, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00c2: 0x00b6, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00c3: 0x00c7, # LATIN CAPITAL LETTER A WITH TILDE + 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE + 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c8: 0x00d4, # LATIN CAPITAL LETTER E WITH GRAVE + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00ca: 0x00d2, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00cb: 0x00d3, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00cc: 0x00de, # LATIN CAPITAL LETTER I WITH GRAVE + 0x00cd: 0x00d6, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00ce: 0x00d7, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00cf: 0x00d8, # LATIN CAPITAL LETTER I WITH DIAERESIS + 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE + 0x00d2: 0x00e3, # LATIN CAPITAL LETTER O WITH GRAVE + 0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00d4: 0x00e2, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00d5: 0x00e5, # LATIN CAPITAL LETTER O WITH TILDE + 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00d7: 0x00e8, # MULTIPLICATION SIGN + 0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE + 0x00d9: 0x00eb, # LATIN CAPITAL LETTER U WITH GRAVE + 0x00da: 0x00e9, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00db: 0x00ea, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S + 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE + 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE + 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e3: 0x00c6, # LATIN SMALL LETTER A WITH TILDE + 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE + 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE + 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ec: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE + 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE + 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS + 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE + 0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f5: 0x00e4, # LATIN SMALL LETTER O WITH TILDE + 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE + 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x00ff: 0x00ed, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x011e: 0x00a6, # LATIN CAPITAL LETTER G WITH BREVE + 0x011f: 0x00a7, # LATIN SMALL LETTER G WITH BREVE + 0x0130: 0x0098, # LATIN CAPITAL LETTER I WITH DOT ABOVE + 0x0131: 0x008d, # LATIN SMALL LETTER DOTLESS I + 0x015e: 0x009e, # LATIN CAPITAL LETTER S WITH CEDILLA + 0x015f: 0x009f, # LATIN SMALL LETTER S WITH CEDILLA + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/thirdparty/python25/Lib/encodings/cp860.py b/thirdparty/python25/Lib/encodings/cp860.py new file mode 100644 index 000000000..ca96653ad --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp860.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP860.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp860', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0084: 0x00e3, # LATIN SMALL LETTER A WITH TILDE + 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x0086: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE + 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x0089: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x008b: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE + 0x008c: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE + 0x008e: 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE + 0x008f: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE + 0x0092: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE + 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x0094: 0x00f5, # LATIN SMALL LETTER O WITH TILDE + 0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE + 0x0096: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE + 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE + 0x0098: 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE + 0x0099: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x00a2, # CENT SIGN + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE + 0x009e: 0x20a7, # PESETA SIGN + 0x009f: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE + 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE + 0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR + 0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR + 0x00a8: 0x00bf, # INVERTED QUESTION MARK + 0x00a9: 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA + 0x00e3: 0x03c0, # GREEK SMALL LETTER PI + 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA + 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU + 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI + 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA + 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA + 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA + 0x00ec: 0x221e, # INFINITY + 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI + 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON + 0x00ef: 0x2229, # INTERSECTION + 0x00f0: 0x2261, # IDENTICAL TO + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO + 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO + 0x00f4: 0x2320, # TOP HALF INTEGRAL + 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x2248, # ALMOST EQUAL TO + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x221a, # SQUARE ROOT + 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x0000 -> NULL + u'\x01' # 0x0001 -> START OF HEADING + u'\x02' # 0x0002 -> START OF TEXT + u'\x03' # 0x0003 -> END OF TEXT + u'\x04' # 0x0004 -> END OF TRANSMISSION + u'\x05' # 0x0005 -> ENQUIRY + u'\x06' # 0x0006 -> ACKNOWLEDGE + u'\x07' # 0x0007 -> BELL + u'\x08' # 0x0008 -> BACKSPACE + u'\t' # 0x0009 -> HORIZONTAL TABULATION + u'\n' # 0x000a -> LINE FEED + u'\x0b' # 0x000b -> VERTICAL TABULATION + u'\x0c' # 0x000c -> FORM FEED + u'\r' # 0x000d -> CARRIAGE RETURN + u'\x0e' # 0x000e -> SHIFT OUT + u'\x0f' # 0x000f -> SHIFT IN + u'\x10' # 0x0010 -> DATA LINK ESCAPE + u'\x11' # 0x0011 -> DEVICE CONTROL ONE + u'\x12' # 0x0012 -> DEVICE CONTROL TWO + u'\x13' # 0x0013 -> DEVICE CONTROL THREE + u'\x14' # 0x0014 -> DEVICE CONTROL FOUR + u'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x0016 -> SYNCHRONOUS IDLE + u'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x0018 -> CANCEL + u'\x19' # 0x0019 -> END OF MEDIUM + u'\x1a' # 0x001a -> SUBSTITUTE + u'\x1b' # 0x001b -> ESCAPE + u'\x1c' # 0x001c -> FILE SEPARATOR + u'\x1d' # 0x001d -> GROUP SEPARATOR + u'\x1e' # 0x001e -> RECORD SEPARATOR + u'\x1f' # 0x001f -> UNIT SEPARATOR + u' ' # 0x0020 -> SPACE + u'!' # 0x0021 -> EXCLAMATION MARK + u'"' # 0x0022 -> QUOTATION MARK + u'#' # 0x0023 -> NUMBER SIGN + u'$' # 0x0024 -> DOLLAR SIGN + u'%' # 0x0025 -> PERCENT SIGN + u'&' # 0x0026 -> AMPERSAND + u"'" # 0x0027 -> APOSTROPHE + u'(' # 0x0028 -> LEFT PARENTHESIS + u')' # 0x0029 -> RIGHT PARENTHESIS + u'*' # 0x002a -> ASTERISK + u'+' # 0x002b -> PLUS SIGN + u',' # 0x002c -> COMMA + u'-' # 0x002d -> HYPHEN-MINUS + u'.' # 0x002e -> FULL STOP + u'/' # 0x002f -> SOLIDUS + u'0' # 0x0030 -> DIGIT ZERO + u'1' # 0x0031 -> DIGIT ONE + u'2' # 0x0032 -> DIGIT TWO + u'3' # 0x0033 -> DIGIT THREE + u'4' # 0x0034 -> DIGIT FOUR + u'5' # 0x0035 -> DIGIT FIVE + u'6' # 0x0036 -> DIGIT SIX + u'7' # 0x0037 -> DIGIT SEVEN + u'8' # 0x0038 -> DIGIT EIGHT + u'9' # 0x0039 -> DIGIT NINE + u':' # 0x003a -> COLON + u';' # 0x003b -> SEMICOLON + u'<' # 0x003c -> LESS-THAN SIGN + u'=' # 0x003d -> EQUALS SIGN + u'>' # 0x003e -> GREATER-THAN SIGN + u'?' # 0x003f -> QUESTION MARK + u'@' # 0x0040 -> COMMERCIAL AT + u'A' # 0x0041 -> LATIN CAPITAL LETTER A + u'B' # 0x0042 -> LATIN CAPITAL LETTER B + u'C' # 0x0043 -> LATIN CAPITAL LETTER C + u'D' # 0x0044 -> LATIN CAPITAL LETTER D + u'E' # 0x0045 -> LATIN CAPITAL LETTER E + u'F' # 0x0046 -> LATIN CAPITAL LETTER F + u'G' # 0x0047 -> LATIN CAPITAL LETTER G + u'H' # 0x0048 -> LATIN CAPITAL LETTER H + u'I' # 0x0049 -> LATIN CAPITAL LETTER I + u'J' # 0x004a -> LATIN CAPITAL LETTER J + u'K' # 0x004b -> LATIN CAPITAL LETTER K + u'L' # 0x004c -> LATIN CAPITAL LETTER L + u'M' # 0x004d -> LATIN CAPITAL LETTER M + u'N' # 0x004e -> LATIN CAPITAL LETTER N + u'O' # 0x004f -> LATIN CAPITAL LETTER O + u'P' # 0x0050 -> LATIN CAPITAL LETTER P + u'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + u'R' # 0x0052 -> LATIN CAPITAL LETTER R + u'S' # 0x0053 -> LATIN CAPITAL LETTER S + u'T' # 0x0054 -> LATIN CAPITAL LETTER T + u'U' # 0x0055 -> LATIN CAPITAL LETTER U + u'V' # 0x0056 -> LATIN CAPITAL LETTER V + u'W' # 0x0057 -> LATIN CAPITAL LETTER W + u'X' # 0x0058 -> LATIN CAPITAL LETTER X + u'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + u'Z' # 0x005a -> LATIN CAPITAL LETTER Z + u'[' # 0x005b -> LEFT SQUARE BRACKET + u'\\' # 0x005c -> REVERSE SOLIDUS + u']' # 0x005d -> RIGHT SQUARE BRACKET + u'^' # 0x005e -> CIRCUMFLEX ACCENT + u'_' # 0x005f -> LOW LINE + u'`' # 0x0060 -> GRAVE ACCENT + u'a' # 0x0061 -> LATIN SMALL LETTER A + u'b' # 0x0062 -> LATIN SMALL LETTER B + u'c' # 0x0063 -> LATIN SMALL LETTER C + u'd' # 0x0064 -> LATIN SMALL LETTER D + u'e' # 0x0065 -> LATIN SMALL LETTER E + u'f' # 0x0066 -> LATIN SMALL LETTER F + u'g' # 0x0067 -> LATIN SMALL LETTER G + u'h' # 0x0068 -> LATIN SMALL LETTER H + u'i' # 0x0069 -> LATIN SMALL LETTER I + u'j' # 0x006a -> LATIN SMALL LETTER J + u'k' # 0x006b -> LATIN SMALL LETTER K + u'l' # 0x006c -> LATIN SMALL LETTER L + u'm' # 0x006d -> LATIN SMALL LETTER M + u'n' # 0x006e -> LATIN SMALL LETTER N + u'o' # 0x006f -> LATIN SMALL LETTER O + u'p' # 0x0070 -> LATIN SMALL LETTER P + u'q' # 0x0071 -> LATIN SMALL LETTER Q + u'r' # 0x0072 -> LATIN SMALL LETTER R + u's' # 0x0073 -> LATIN SMALL LETTER S + u't' # 0x0074 -> LATIN SMALL LETTER T + u'u' # 0x0075 -> LATIN SMALL LETTER U + u'v' # 0x0076 -> LATIN SMALL LETTER V + u'w' # 0x0077 -> LATIN SMALL LETTER W + u'x' # 0x0078 -> LATIN SMALL LETTER X + u'y' # 0x0079 -> LATIN SMALL LETTER Y + u'z' # 0x007a -> LATIN SMALL LETTER Z + u'{' # 0x007b -> LEFT CURLY BRACKET + u'|' # 0x007c -> VERTICAL LINE + u'}' # 0x007d -> RIGHT CURLY BRACKET + u'~' # 0x007e -> TILDE + u'\x7f' # 0x007f -> DELETE + u'\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + u'\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe3' # 0x0084 -> LATIN SMALL LETTER A WITH TILDE + u'\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE + u'\xc1' # 0x0086 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xca' # 0x0089 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE + u'\xcd' # 0x008b -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xd4' # 0x008c -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE + u'\xc3' # 0x008e -> LATIN CAPITAL LETTER A WITH TILDE + u'\xc2' # 0x008f -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xc0' # 0x0091 -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc8' # 0x0092 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf5' # 0x0094 -> LATIN SMALL LETTER O WITH TILDE + u'\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE + u'\xda' # 0x0096 -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE + u'\xcc' # 0x0098 -> LATIN CAPITAL LETTER I WITH GRAVE + u'\xd5' # 0x0099 -> LATIN CAPITAL LETTER O WITH TILDE + u'\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xa2' # 0x009b -> CENT SIGN + u'\xa3' # 0x009c -> POUND SIGN + u'\xd9' # 0x009d -> LATIN CAPITAL LETTER U WITH GRAVE + u'\u20a7' # 0x009e -> PESETA SIGN + u'\xd3' # 0x009f -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE + u'\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE + u'\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + u'\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + u'\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE + u'\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR + u'\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR + u'\xbf' # 0x00a8 -> INVERTED QUESTION MARK + u'\xd2' # 0x00a9 -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xac' # 0x00aa -> NOT SIGN + u'\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + u'\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + u'\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK + u'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2591' # 0x00b0 -> LIGHT SHADE + u'\u2592' # 0x00b1 -> MEDIUM SHADE + u'\u2593' # 0x00b2 -> DARK SHADE + u'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + u'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + u'\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + u'\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + u'\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + u'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + u'\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + u'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + u'\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + u'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + u'\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + u'\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + u'\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + u'\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + u'\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + u'\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + u'\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + u'\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + u'\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + u'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2588' # 0x00db -> FULL BLOCK + u'\u2584' # 0x00dc -> LOWER HALF BLOCK + u'\u258c' # 0x00dd -> LEFT HALF BLOCK + u'\u2590' # 0x00de -> RIGHT HALF BLOCK + u'\u2580' # 0x00df -> UPPER HALF BLOCK + u'\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA + u'\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S + u'\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA + u'\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI + u'\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA + u'\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA + u'\xb5' # 0x00e6 -> MICRO SIGN + u'\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU + u'\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI + u'\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA + u'\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA + u'\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA + u'\u221e' # 0x00ec -> INFINITY + u'\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI + u'\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON + u'\u2229' # 0x00ef -> INTERSECTION + u'\u2261' # 0x00f0 -> IDENTICAL TO + u'\xb1' # 0x00f1 -> PLUS-MINUS SIGN + u'\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO + u'\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO + u'\u2320' # 0x00f4 -> TOP HALF INTEGRAL + u'\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL + u'\xf7' # 0x00f6 -> DIVISION SIGN + u'\u2248' # 0x00f7 -> ALMOST EQUAL TO + u'\xb0' # 0x00f8 -> DEGREE SIGN + u'\u2219' # 0x00f9 -> BULLET OPERATOR + u'\xb7' # 0x00fa -> MIDDLE DOT + u'\u221a' # 0x00fb -> SQUARE ROOT + u'\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N + u'\xb2' # 0x00fd -> SUPERSCRIPT TWO + u'\u25a0' # 0x00fe -> BLACK SQUARE + u'\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK + 0x00a2: 0x009b, # CENT SIGN + 0x00a3: 0x009c, # POUND SIGN + 0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00bf: 0x00a8, # INVERTED QUESTION MARK + 0x00c0: 0x0091, # LATIN CAPITAL LETTER A WITH GRAVE + 0x00c1: 0x0086, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00c2: 0x008f, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00c3: 0x008e, # LATIN CAPITAL LETTER A WITH TILDE + 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c8: 0x0092, # LATIN CAPITAL LETTER E WITH GRAVE + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00ca: 0x0089, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00cc: 0x0098, # LATIN CAPITAL LETTER I WITH GRAVE + 0x00cd: 0x008b, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE + 0x00d2: 0x00a9, # LATIN CAPITAL LETTER O WITH GRAVE + 0x00d3: 0x009f, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00d4: 0x008c, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00d5: 0x0099, # LATIN CAPITAL LETTER O WITH TILDE + 0x00d9: 0x009d, # LATIN CAPITAL LETTER U WITH GRAVE + 0x00da: 0x0096, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S + 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE + 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE + 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e3: 0x0084, # LATIN SMALL LETTER A WITH TILDE + 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE + 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE + 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE + 0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f5: 0x0094, # LATIN SMALL LETTER O WITH TILDE + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA + 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA + 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA + 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI + 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA + 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA + 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA + 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON + 0x03c0: 0x00e3, # GREEK SMALL LETTER PI + 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA + 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU + 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI + 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N + 0x20a7: 0x009e, # PESETA SIGN + 0x2219: 0x00f9, # BULLET OPERATOR + 0x221a: 0x00fb, # SQUARE ROOT + 0x221e: 0x00ec, # INFINITY + 0x2229: 0x00ef, # INTERSECTION + 0x2248: 0x00f7, # ALMOST EQUAL TO + 0x2261: 0x00f0, # IDENTICAL TO + 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO + 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO + 0x2320: 0x00f4, # TOP HALF INTEGRAL + 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/thirdparty/python25/Lib/encodings/cp861.py b/thirdparty/python25/Lib/encodings/cp861.py new file mode 100644 index 000000000..ce08f10f5 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp861.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP861.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp861', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE + 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x008b: 0x00d0, # LATIN CAPITAL LETTER ETH + 0x008c: 0x00f0, # LATIN SMALL LETTER ETH + 0x008d: 0x00de, # LATIN CAPITAL LETTER THORN + 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE + 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE + 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x0095: 0x00fe, # LATIN SMALL LETTER THORN + 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x0097: 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE + 0x0098: 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE + 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE + 0x009e: 0x20a7, # PESETA SIGN + 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK + 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00a5: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00a6: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00a7: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00a8: 0x00bf, # INVERTED QUESTION MARK + 0x00a9: 0x2310, # REVERSED NOT SIGN + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA + 0x00e3: 0x03c0, # GREEK SMALL LETTER PI + 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA + 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU + 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI + 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA + 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA + 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA + 0x00ec: 0x221e, # INFINITY + 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI + 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON + 0x00ef: 0x2229, # INTERSECTION + 0x00f0: 0x2261, # IDENTICAL TO + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO + 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO + 0x00f4: 0x2320, # TOP HALF INTEGRAL + 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x2248, # ALMOST EQUAL TO + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x221a, # SQUARE ROOT + 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x0000 -> NULL + u'\x01' # 0x0001 -> START OF HEADING + u'\x02' # 0x0002 -> START OF TEXT + u'\x03' # 0x0003 -> END OF TEXT + u'\x04' # 0x0004 -> END OF TRANSMISSION + u'\x05' # 0x0005 -> ENQUIRY + u'\x06' # 0x0006 -> ACKNOWLEDGE + u'\x07' # 0x0007 -> BELL + u'\x08' # 0x0008 -> BACKSPACE + u'\t' # 0x0009 -> HORIZONTAL TABULATION + u'\n' # 0x000a -> LINE FEED + u'\x0b' # 0x000b -> VERTICAL TABULATION + u'\x0c' # 0x000c -> FORM FEED + u'\r' # 0x000d -> CARRIAGE RETURN + u'\x0e' # 0x000e -> SHIFT OUT + u'\x0f' # 0x000f -> SHIFT IN + u'\x10' # 0x0010 -> DATA LINK ESCAPE + u'\x11' # 0x0011 -> DEVICE CONTROL ONE + u'\x12' # 0x0012 -> DEVICE CONTROL TWO + u'\x13' # 0x0013 -> DEVICE CONTROL THREE + u'\x14' # 0x0014 -> DEVICE CONTROL FOUR + u'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x0016 -> SYNCHRONOUS IDLE + u'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x0018 -> CANCEL + u'\x19' # 0x0019 -> END OF MEDIUM + u'\x1a' # 0x001a -> SUBSTITUTE + u'\x1b' # 0x001b -> ESCAPE + u'\x1c' # 0x001c -> FILE SEPARATOR + u'\x1d' # 0x001d -> GROUP SEPARATOR + u'\x1e' # 0x001e -> RECORD SEPARATOR + u'\x1f' # 0x001f -> UNIT SEPARATOR + u' ' # 0x0020 -> SPACE + u'!' # 0x0021 -> EXCLAMATION MARK + u'"' # 0x0022 -> QUOTATION MARK + u'#' # 0x0023 -> NUMBER SIGN + u'$' # 0x0024 -> DOLLAR SIGN + u'%' # 0x0025 -> PERCENT SIGN + u'&' # 0x0026 -> AMPERSAND + u"'" # 0x0027 -> APOSTROPHE + u'(' # 0x0028 -> LEFT PARENTHESIS + u')' # 0x0029 -> RIGHT PARENTHESIS + u'*' # 0x002a -> ASTERISK + u'+' # 0x002b -> PLUS SIGN + u',' # 0x002c -> COMMA + u'-' # 0x002d -> HYPHEN-MINUS + u'.' # 0x002e -> FULL STOP + u'/' # 0x002f -> SOLIDUS + u'0' # 0x0030 -> DIGIT ZERO + u'1' # 0x0031 -> DIGIT ONE + u'2' # 0x0032 -> DIGIT TWO + u'3' # 0x0033 -> DIGIT THREE + u'4' # 0x0034 -> DIGIT FOUR + u'5' # 0x0035 -> DIGIT FIVE + u'6' # 0x0036 -> DIGIT SIX + u'7' # 0x0037 -> DIGIT SEVEN + u'8' # 0x0038 -> DIGIT EIGHT + u'9' # 0x0039 -> DIGIT NINE + u':' # 0x003a -> COLON + u';' # 0x003b -> SEMICOLON + u'<' # 0x003c -> LESS-THAN SIGN + u'=' # 0x003d -> EQUALS SIGN + u'>' # 0x003e -> GREATER-THAN SIGN + u'?' # 0x003f -> QUESTION MARK + u'@' # 0x0040 -> COMMERCIAL AT + u'A' # 0x0041 -> LATIN CAPITAL LETTER A + u'B' # 0x0042 -> LATIN CAPITAL LETTER B + u'C' # 0x0043 -> LATIN CAPITAL LETTER C + u'D' # 0x0044 -> LATIN CAPITAL LETTER D + u'E' # 0x0045 -> LATIN CAPITAL LETTER E + u'F' # 0x0046 -> LATIN CAPITAL LETTER F + u'G' # 0x0047 -> LATIN CAPITAL LETTER G + u'H' # 0x0048 -> LATIN CAPITAL LETTER H + u'I' # 0x0049 -> LATIN CAPITAL LETTER I + u'J' # 0x004a -> LATIN CAPITAL LETTER J + u'K' # 0x004b -> LATIN CAPITAL LETTER K + u'L' # 0x004c -> LATIN CAPITAL LETTER L + u'M' # 0x004d -> LATIN CAPITAL LETTER M + u'N' # 0x004e -> LATIN CAPITAL LETTER N + u'O' # 0x004f -> LATIN CAPITAL LETTER O + u'P' # 0x0050 -> LATIN CAPITAL LETTER P + u'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + u'R' # 0x0052 -> LATIN CAPITAL LETTER R + u'S' # 0x0053 -> LATIN CAPITAL LETTER S + u'T' # 0x0054 -> LATIN CAPITAL LETTER T + u'U' # 0x0055 -> LATIN CAPITAL LETTER U + u'V' # 0x0056 -> LATIN CAPITAL LETTER V + u'W' # 0x0057 -> LATIN CAPITAL LETTER W + u'X' # 0x0058 -> LATIN CAPITAL LETTER X + u'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + u'Z' # 0x005a -> LATIN CAPITAL LETTER Z + u'[' # 0x005b -> LEFT SQUARE BRACKET + u'\\' # 0x005c -> REVERSE SOLIDUS + u']' # 0x005d -> RIGHT SQUARE BRACKET + u'^' # 0x005e -> CIRCUMFLEX ACCENT + u'_' # 0x005f -> LOW LINE + u'`' # 0x0060 -> GRAVE ACCENT + u'a' # 0x0061 -> LATIN SMALL LETTER A + u'b' # 0x0062 -> LATIN SMALL LETTER B + u'c' # 0x0063 -> LATIN SMALL LETTER C + u'd' # 0x0064 -> LATIN SMALL LETTER D + u'e' # 0x0065 -> LATIN SMALL LETTER E + u'f' # 0x0066 -> LATIN SMALL LETTER F + u'g' # 0x0067 -> LATIN SMALL LETTER G + u'h' # 0x0068 -> LATIN SMALL LETTER H + u'i' # 0x0069 -> LATIN SMALL LETTER I + u'j' # 0x006a -> LATIN SMALL LETTER J + u'k' # 0x006b -> LATIN SMALL LETTER K + u'l' # 0x006c -> LATIN SMALL LETTER L + u'm' # 0x006d -> LATIN SMALL LETTER M + u'n' # 0x006e -> LATIN SMALL LETTER N + u'o' # 0x006f -> LATIN SMALL LETTER O + u'p' # 0x0070 -> LATIN SMALL LETTER P + u'q' # 0x0071 -> LATIN SMALL LETTER Q + u'r' # 0x0072 -> LATIN SMALL LETTER R + u's' # 0x0073 -> LATIN SMALL LETTER S + u't' # 0x0074 -> LATIN SMALL LETTER T + u'u' # 0x0075 -> LATIN SMALL LETTER U + u'v' # 0x0076 -> LATIN SMALL LETTER V + u'w' # 0x0077 -> LATIN SMALL LETTER W + u'x' # 0x0078 -> LATIN SMALL LETTER X + u'y' # 0x0079 -> LATIN SMALL LETTER Y + u'z' # 0x007a -> LATIN SMALL LETTER Z + u'{' # 0x007b -> LEFT CURLY BRACKET + u'|' # 0x007c -> VERTICAL LINE + u'}' # 0x007d -> RIGHT CURLY BRACKET + u'~' # 0x007e -> TILDE + u'\x7f' # 0x007f -> DELETE + u'\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + u'\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE + u'\xd0' # 0x008b -> LATIN CAPITAL LETTER ETH + u'\xf0' # 0x008c -> LATIN SMALL LETTER ETH + u'\xde' # 0x008d -> LATIN CAPITAL LETTER THORN + u'\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE + u'\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE + u'\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xfe' # 0x0095 -> LATIN SMALL LETTER THORN + u'\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xdd' # 0x0097 -> LATIN CAPITAL LETTER Y WITH ACUTE + u'\xfd' # 0x0098 -> LATIN SMALL LETTER Y WITH ACUTE + u'\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE + u'\xa3' # 0x009c -> POUND SIGN + u'\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE + u'\u20a7' # 0x009e -> PESETA SIGN + u'\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK + u'\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE + u'\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE + u'\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + u'\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + u'\xc1' # 0x00a4 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xcd' # 0x00a5 -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xd3' # 0x00a6 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xda' # 0x00a7 -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xbf' # 0x00a8 -> INVERTED QUESTION MARK + u'\u2310' # 0x00a9 -> REVERSED NOT SIGN + u'\xac' # 0x00aa -> NOT SIGN + u'\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + u'\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + u'\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK + u'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2591' # 0x00b0 -> LIGHT SHADE + u'\u2592' # 0x00b1 -> MEDIUM SHADE + u'\u2593' # 0x00b2 -> DARK SHADE + u'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + u'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + u'\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + u'\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + u'\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + u'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + u'\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + u'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + u'\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + u'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + u'\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + u'\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + u'\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + u'\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + u'\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + u'\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + u'\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + u'\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + u'\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + u'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2588' # 0x00db -> FULL BLOCK + u'\u2584' # 0x00dc -> LOWER HALF BLOCK + u'\u258c' # 0x00dd -> LEFT HALF BLOCK + u'\u2590' # 0x00de -> RIGHT HALF BLOCK + u'\u2580' # 0x00df -> UPPER HALF BLOCK + u'\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA + u'\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S + u'\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA + u'\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI + u'\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA + u'\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA + u'\xb5' # 0x00e6 -> MICRO SIGN + u'\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU + u'\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI + u'\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA + u'\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA + u'\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA + u'\u221e' # 0x00ec -> INFINITY + u'\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI + u'\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON + u'\u2229' # 0x00ef -> INTERSECTION + u'\u2261' # 0x00f0 -> IDENTICAL TO + u'\xb1' # 0x00f1 -> PLUS-MINUS SIGN + u'\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO + u'\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO + u'\u2320' # 0x00f4 -> TOP HALF INTEGRAL + u'\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL + u'\xf7' # 0x00f6 -> DIVISION SIGN + u'\u2248' # 0x00f7 -> ALMOST EQUAL TO + u'\xb0' # 0x00f8 -> DEGREE SIGN + u'\u2219' # 0x00f9 -> BULLET OPERATOR + u'\xb7' # 0x00fa -> MIDDLE DOT + u'\u221a' # 0x00fb -> SQUARE ROOT + u'\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N + u'\xb2' # 0x00fd -> SUPERSCRIPT TWO + u'\u25a0' # 0x00fe -> BLACK SQUARE + u'\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK + 0x00a3: 0x009c, # POUND SIGN + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00bf: 0x00a8, # INVERTED QUESTION MARK + 0x00c1: 0x00a4, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE + 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00cd: 0x00a5, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00d0: 0x008b, # LATIN CAPITAL LETTER ETH + 0x00d3: 0x00a6, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE + 0x00da: 0x00a7, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00dd: 0x0097, # LATIN CAPITAL LETTER Y WITH ACUTE + 0x00de: 0x008d, # LATIN CAPITAL LETTER THORN + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S + 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE + 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE + 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE + 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE + 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE + 0x00f0: 0x008c, # LATIN SMALL LETTER ETH + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x00fd: 0x0098, # LATIN SMALL LETTER Y WITH ACUTE + 0x00fe: 0x0095, # LATIN SMALL LETTER THORN + 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK + 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA + 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA + 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA + 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI + 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA + 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA + 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA + 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON + 0x03c0: 0x00e3, # GREEK SMALL LETTER PI + 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA + 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU + 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI + 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N + 0x20a7: 0x009e, # PESETA SIGN + 0x2219: 0x00f9, # BULLET OPERATOR + 0x221a: 0x00fb, # SQUARE ROOT + 0x221e: 0x00ec, # INFINITY + 0x2229: 0x00ef, # INTERSECTION + 0x2248: 0x00f7, # ALMOST EQUAL TO + 0x2261: 0x00f0, # IDENTICAL TO + 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO + 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO + 0x2310: 0x00a9, # REVERSED NOT SIGN + 0x2320: 0x00f4, # TOP HALF INTEGRAL + 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/thirdparty/python25/Lib/encodings/cp862.py b/thirdparty/python25/Lib/encodings/cp862.py new file mode 100644 index 000000000..ac8134534 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp862.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP862.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp862', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x05d0, # HEBREW LETTER ALEF + 0x0081: 0x05d1, # HEBREW LETTER BET + 0x0082: 0x05d2, # HEBREW LETTER GIMEL + 0x0083: 0x05d3, # HEBREW LETTER DALET + 0x0084: 0x05d4, # HEBREW LETTER HE + 0x0085: 0x05d5, # HEBREW LETTER VAV + 0x0086: 0x05d6, # HEBREW LETTER ZAYIN + 0x0087: 0x05d7, # HEBREW LETTER HET + 0x0088: 0x05d8, # HEBREW LETTER TET + 0x0089: 0x05d9, # HEBREW LETTER YOD + 0x008a: 0x05da, # HEBREW LETTER FINAL KAF + 0x008b: 0x05db, # HEBREW LETTER KAF + 0x008c: 0x05dc, # HEBREW LETTER LAMED + 0x008d: 0x05dd, # HEBREW LETTER FINAL MEM + 0x008e: 0x05de, # HEBREW LETTER MEM + 0x008f: 0x05df, # HEBREW LETTER FINAL NUN + 0x0090: 0x05e0, # HEBREW LETTER NUN + 0x0091: 0x05e1, # HEBREW LETTER SAMEKH + 0x0092: 0x05e2, # HEBREW LETTER AYIN + 0x0093: 0x05e3, # HEBREW LETTER FINAL PE + 0x0094: 0x05e4, # HEBREW LETTER PE + 0x0095: 0x05e5, # HEBREW LETTER FINAL TSADI + 0x0096: 0x05e6, # HEBREW LETTER TSADI + 0x0097: 0x05e7, # HEBREW LETTER QOF + 0x0098: 0x05e8, # HEBREW LETTER RESH + 0x0099: 0x05e9, # HEBREW LETTER SHIN + 0x009a: 0x05ea, # HEBREW LETTER TAV + 0x009b: 0x00a2, # CENT SIGN + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00a5, # YEN SIGN + 0x009e: 0x20a7, # PESETA SIGN + 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK + 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE + 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE + 0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR + 0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR + 0x00a8: 0x00bf, # INVERTED QUESTION MARK + 0x00a9: 0x2310, # REVERSED NOT SIGN + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S (GERMAN) + 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA + 0x00e3: 0x03c0, # GREEK SMALL LETTER PI + 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA + 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU + 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI + 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA + 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA + 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA + 0x00ec: 0x221e, # INFINITY + 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI + 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON + 0x00ef: 0x2229, # INTERSECTION + 0x00f0: 0x2261, # IDENTICAL TO + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO + 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO + 0x00f4: 0x2320, # TOP HALF INTEGRAL + 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x2248, # ALMOST EQUAL TO + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x221a, # SQUARE ROOT + 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x0000 -> NULL + u'\x01' # 0x0001 -> START OF HEADING + u'\x02' # 0x0002 -> START OF TEXT + u'\x03' # 0x0003 -> END OF TEXT + u'\x04' # 0x0004 -> END OF TRANSMISSION + u'\x05' # 0x0005 -> ENQUIRY + u'\x06' # 0x0006 -> ACKNOWLEDGE + u'\x07' # 0x0007 -> BELL + u'\x08' # 0x0008 -> BACKSPACE + u'\t' # 0x0009 -> HORIZONTAL TABULATION + u'\n' # 0x000a -> LINE FEED + u'\x0b' # 0x000b -> VERTICAL TABULATION + u'\x0c' # 0x000c -> FORM FEED + u'\r' # 0x000d -> CARRIAGE RETURN + u'\x0e' # 0x000e -> SHIFT OUT + u'\x0f' # 0x000f -> SHIFT IN + u'\x10' # 0x0010 -> DATA LINK ESCAPE + u'\x11' # 0x0011 -> DEVICE CONTROL ONE + u'\x12' # 0x0012 -> DEVICE CONTROL TWO + u'\x13' # 0x0013 -> DEVICE CONTROL THREE + u'\x14' # 0x0014 -> DEVICE CONTROL FOUR + u'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x0016 -> SYNCHRONOUS IDLE + u'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x0018 -> CANCEL + u'\x19' # 0x0019 -> END OF MEDIUM + u'\x1a' # 0x001a -> SUBSTITUTE + u'\x1b' # 0x001b -> ESCAPE + u'\x1c' # 0x001c -> FILE SEPARATOR + u'\x1d' # 0x001d -> GROUP SEPARATOR + u'\x1e' # 0x001e -> RECORD SEPARATOR + u'\x1f' # 0x001f -> UNIT SEPARATOR + u' ' # 0x0020 -> SPACE + u'!' # 0x0021 -> EXCLAMATION MARK + u'"' # 0x0022 -> QUOTATION MARK + u'#' # 0x0023 -> NUMBER SIGN + u'$' # 0x0024 -> DOLLAR SIGN + u'%' # 0x0025 -> PERCENT SIGN + u'&' # 0x0026 -> AMPERSAND + u"'" # 0x0027 -> APOSTROPHE + u'(' # 0x0028 -> LEFT PARENTHESIS + u')' # 0x0029 -> RIGHT PARENTHESIS + u'*' # 0x002a -> ASTERISK + u'+' # 0x002b -> PLUS SIGN + u',' # 0x002c -> COMMA + u'-' # 0x002d -> HYPHEN-MINUS + u'.' # 0x002e -> FULL STOP + u'/' # 0x002f -> SOLIDUS + u'0' # 0x0030 -> DIGIT ZERO + u'1' # 0x0031 -> DIGIT ONE + u'2' # 0x0032 -> DIGIT TWO + u'3' # 0x0033 -> DIGIT THREE + u'4' # 0x0034 -> DIGIT FOUR + u'5' # 0x0035 -> DIGIT FIVE + u'6' # 0x0036 -> DIGIT SIX + u'7' # 0x0037 -> DIGIT SEVEN + u'8' # 0x0038 -> DIGIT EIGHT + u'9' # 0x0039 -> DIGIT NINE + u':' # 0x003a -> COLON + u';' # 0x003b -> SEMICOLON + u'<' # 0x003c -> LESS-THAN SIGN + u'=' # 0x003d -> EQUALS SIGN + u'>' # 0x003e -> GREATER-THAN SIGN + u'?' # 0x003f -> QUESTION MARK + u'@' # 0x0040 -> COMMERCIAL AT + u'A' # 0x0041 -> LATIN CAPITAL LETTER A + u'B' # 0x0042 -> LATIN CAPITAL LETTER B + u'C' # 0x0043 -> LATIN CAPITAL LETTER C + u'D' # 0x0044 -> LATIN CAPITAL LETTER D + u'E' # 0x0045 -> LATIN CAPITAL LETTER E + u'F' # 0x0046 -> LATIN CAPITAL LETTER F + u'G' # 0x0047 -> LATIN CAPITAL LETTER G + u'H' # 0x0048 -> LATIN CAPITAL LETTER H + u'I' # 0x0049 -> LATIN CAPITAL LETTER I + u'J' # 0x004a -> LATIN CAPITAL LETTER J + u'K' # 0x004b -> LATIN CAPITAL LETTER K + u'L' # 0x004c -> LATIN CAPITAL LETTER L + u'M' # 0x004d -> LATIN CAPITAL LETTER M + u'N' # 0x004e -> LATIN CAPITAL LETTER N + u'O' # 0x004f -> LATIN CAPITAL LETTER O + u'P' # 0x0050 -> LATIN CAPITAL LETTER P + u'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + u'R' # 0x0052 -> LATIN CAPITAL LETTER R + u'S' # 0x0053 -> LATIN CAPITAL LETTER S + u'T' # 0x0054 -> LATIN CAPITAL LETTER T + u'U' # 0x0055 -> LATIN CAPITAL LETTER U + u'V' # 0x0056 -> LATIN CAPITAL LETTER V + u'W' # 0x0057 -> LATIN CAPITAL LETTER W + u'X' # 0x0058 -> LATIN CAPITAL LETTER X + u'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + u'Z' # 0x005a -> LATIN CAPITAL LETTER Z + u'[' # 0x005b -> LEFT SQUARE BRACKET + u'\\' # 0x005c -> REVERSE SOLIDUS + u']' # 0x005d -> RIGHT SQUARE BRACKET + u'^' # 0x005e -> CIRCUMFLEX ACCENT + u'_' # 0x005f -> LOW LINE + u'`' # 0x0060 -> GRAVE ACCENT + u'a' # 0x0061 -> LATIN SMALL LETTER A + u'b' # 0x0062 -> LATIN SMALL LETTER B + u'c' # 0x0063 -> LATIN SMALL LETTER C + u'd' # 0x0064 -> LATIN SMALL LETTER D + u'e' # 0x0065 -> LATIN SMALL LETTER E + u'f' # 0x0066 -> LATIN SMALL LETTER F + u'g' # 0x0067 -> LATIN SMALL LETTER G + u'h' # 0x0068 -> LATIN SMALL LETTER H + u'i' # 0x0069 -> LATIN SMALL LETTER I + u'j' # 0x006a -> LATIN SMALL LETTER J + u'k' # 0x006b -> LATIN SMALL LETTER K + u'l' # 0x006c -> LATIN SMALL LETTER L + u'm' # 0x006d -> LATIN SMALL LETTER M + u'n' # 0x006e -> LATIN SMALL LETTER N + u'o' # 0x006f -> LATIN SMALL LETTER O + u'p' # 0x0070 -> LATIN SMALL LETTER P + u'q' # 0x0071 -> LATIN SMALL LETTER Q + u'r' # 0x0072 -> LATIN SMALL LETTER R + u's' # 0x0073 -> LATIN SMALL LETTER S + u't' # 0x0074 -> LATIN SMALL LETTER T + u'u' # 0x0075 -> LATIN SMALL LETTER U + u'v' # 0x0076 -> LATIN SMALL LETTER V + u'w' # 0x0077 -> LATIN SMALL LETTER W + u'x' # 0x0078 -> LATIN SMALL LETTER X + u'y' # 0x0079 -> LATIN SMALL LETTER Y + u'z' # 0x007a -> LATIN SMALL LETTER Z + u'{' # 0x007b -> LEFT CURLY BRACKET + u'|' # 0x007c -> VERTICAL LINE + u'}' # 0x007d -> RIGHT CURLY BRACKET + u'~' # 0x007e -> TILDE + u'\x7f' # 0x007f -> DELETE + u'\u05d0' # 0x0080 -> HEBREW LETTER ALEF + u'\u05d1' # 0x0081 -> HEBREW LETTER BET + u'\u05d2' # 0x0082 -> HEBREW LETTER GIMEL + u'\u05d3' # 0x0083 -> HEBREW LETTER DALET + u'\u05d4' # 0x0084 -> HEBREW LETTER HE + u'\u05d5' # 0x0085 -> HEBREW LETTER VAV + u'\u05d6' # 0x0086 -> HEBREW LETTER ZAYIN + u'\u05d7' # 0x0087 -> HEBREW LETTER HET + u'\u05d8' # 0x0088 -> HEBREW LETTER TET + u'\u05d9' # 0x0089 -> HEBREW LETTER YOD + u'\u05da' # 0x008a -> HEBREW LETTER FINAL KAF + u'\u05db' # 0x008b -> HEBREW LETTER KAF + u'\u05dc' # 0x008c -> HEBREW LETTER LAMED + u'\u05dd' # 0x008d -> HEBREW LETTER FINAL MEM + u'\u05de' # 0x008e -> HEBREW LETTER MEM + u'\u05df' # 0x008f -> HEBREW LETTER FINAL NUN + u'\u05e0' # 0x0090 -> HEBREW LETTER NUN + u'\u05e1' # 0x0091 -> HEBREW LETTER SAMEKH + u'\u05e2' # 0x0092 -> HEBREW LETTER AYIN + u'\u05e3' # 0x0093 -> HEBREW LETTER FINAL PE + u'\u05e4' # 0x0094 -> HEBREW LETTER PE + u'\u05e5' # 0x0095 -> HEBREW LETTER FINAL TSADI + u'\u05e6' # 0x0096 -> HEBREW LETTER TSADI + u'\u05e7' # 0x0097 -> HEBREW LETTER QOF + u'\u05e8' # 0x0098 -> HEBREW LETTER RESH + u'\u05e9' # 0x0099 -> HEBREW LETTER SHIN + u'\u05ea' # 0x009a -> HEBREW LETTER TAV + u'\xa2' # 0x009b -> CENT SIGN + u'\xa3' # 0x009c -> POUND SIGN + u'\xa5' # 0x009d -> YEN SIGN + u'\u20a7' # 0x009e -> PESETA SIGN + u'\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK + u'\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE + u'\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE + u'\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + u'\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + u'\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE + u'\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR + u'\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR + u'\xbf' # 0x00a8 -> INVERTED QUESTION MARK + u'\u2310' # 0x00a9 -> REVERSED NOT SIGN + u'\xac' # 0x00aa -> NOT SIGN + u'\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + u'\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + u'\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK + u'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2591' # 0x00b0 -> LIGHT SHADE + u'\u2592' # 0x00b1 -> MEDIUM SHADE + u'\u2593' # 0x00b2 -> DARK SHADE + u'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + u'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + u'\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + u'\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + u'\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + u'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + u'\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + u'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + u'\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + u'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + u'\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + u'\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + u'\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + u'\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + u'\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + u'\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + u'\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + u'\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + u'\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + u'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2588' # 0x00db -> FULL BLOCK + u'\u2584' # 0x00dc -> LOWER HALF BLOCK + u'\u258c' # 0x00dd -> LEFT HALF BLOCK + u'\u2590' # 0x00de -> RIGHT HALF BLOCK + u'\u2580' # 0x00df -> UPPER HALF BLOCK + u'\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA + u'\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S (GERMAN) + u'\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA + u'\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI + u'\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA + u'\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA + u'\xb5' # 0x00e6 -> MICRO SIGN + u'\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU + u'\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI + u'\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA + u'\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA + u'\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA + u'\u221e' # 0x00ec -> INFINITY + u'\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI + u'\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON + u'\u2229' # 0x00ef -> INTERSECTION + u'\u2261' # 0x00f0 -> IDENTICAL TO + u'\xb1' # 0x00f1 -> PLUS-MINUS SIGN + u'\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO + u'\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO + u'\u2320' # 0x00f4 -> TOP HALF INTEGRAL + u'\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL + u'\xf7' # 0x00f6 -> DIVISION SIGN + u'\u2248' # 0x00f7 -> ALMOST EQUAL TO + u'\xb0' # 0x00f8 -> DEGREE SIGN + u'\u2219' # 0x00f9 -> BULLET OPERATOR + u'\xb7' # 0x00fa -> MIDDLE DOT + u'\u221a' # 0x00fb -> SQUARE ROOT + u'\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N + u'\xb2' # 0x00fd -> SUPERSCRIPT TWO + u'\u25a0' # 0x00fe -> BLACK SQUARE + u'\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK + 0x00a2: 0x009b, # CENT SIGN + 0x00a3: 0x009c, # POUND SIGN + 0x00a5: 0x009d, # YEN SIGN + 0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00bf: 0x00a8, # INVERTED QUESTION MARK + 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S (GERMAN) + 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE + 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE + 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK + 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA + 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA + 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA + 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI + 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA + 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA + 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA + 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON + 0x03c0: 0x00e3, # GREEK SMALL LETTER PI + 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA + 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU + 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI + 0x05d0: 0x0080, # HEBREW LETTER ALEF + 0x05d1: 0x0081, # HEBREW LETTER BET + 0x05d2: 0x0082, # HEBREW LETTER GIMEL + 0x05d3: 0x0083, # HEBREW LETTER DALET + 0x05d4: 0x0084, # HEBREW LETTER HE + 0x05d5: 0x0085, # HEBREW LETTER VAV + 0x05d6: 0x0086, # HEBREW LETTER ZAYIN + 0x05d7: 0x0087, # HEBREW LETTER HET + 0x05d8: 0x0088, # HEBREW LETTER TET + 0x05d9: 0x0089, # HEBREW LETTER YOD + 0x05da: 0x008a, # HEBREW LETTER FINAL KAF + 0x05db: 0x008b, # HEBREW LETTER KAF + 0x05dc: 0x008c, # HEBREW LETTER LAMED + 0x05dd: 0x008d, # HEBREW LETTER FINAL MEM + 0x05de: 0x008e, # HEBREW LETTER MEM + 0x05df: 0x008f, # HEBREW LETTER FINAL NUN + 0x05e0: 0x0090, # HEBREW LETTER NUN + 0x05e1: 0x0091, # HEBREW LETTER SAMEKH + 0x05e2: 0x0092, # HEBREW LETTER AYIN + 0x05e3: 0x0093, # HEBREW LETTER FINAL PE + 0x05e4: 0x0094, # HEBREW LETTER PE + 0x05e5: 0x0095, # HEBREW LETTER FINAL TSADI + 0x05e6: 0x0096, # HEBREW LETTER TSADI + 0x05e7: 0x0097, # HEBREW LETTER QOF + 0x05e8: 0x0098, # HEBREW LETTER RESH + 0x05e9: 0x0099, # HEBREW LETTER SHIN + 0x05ea: 0x009a, # HEBREW LETTER TAV + 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N + 0x20a7: 0x009e, # PESETA SIGN + 0x2219: 0x00f9, # BULLET OPERATOR + 0x221a: 0x00fb, # SQUARE ROOT + 0x221e: 0x00ec, # INFINITY + 0x2229: 0x00ef, # INTERSECTION + 0x2248: 0x00f7, # ALMOST EQUAL TO + 0x2261: 0x00f0, # IDENTICAL TO + 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO + 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO + 0x2310: 0x00a9, # REVERSED NOT SIGN + 0x2320: 0x00f4, # TOP HALF INTEGRAL + 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/thirdparty/python25/Lib/encodings/cp863.py b/thirdparty/python25/Lib/encodings/cp863.py new file mode 100644 index 000000000..fc8dfa5fd --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp863.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP863.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp863', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0084: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x0086: 0x00b6, # PILCROW SIGN + 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS + 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x008d: 0x2017, # DOUBLE LOW LINE + 0x008e: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE + 0x008f: 0x00a7, # SECTION SIGN + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE + 0x0092: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x0094: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x0095: 0x00cf, # LATIN CAPITAL LETTER I WITH DIAERESIS + 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE + 0x0098: 0x00a4, # CURRENCY SIGN + 0x0099: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x00a2, # CENT SIGN + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE + 0x009e: 0x00db, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK + 0x00a0: 0x00a6, # BROKEN BAR + 0x00a1: 0x00b4, # ACUTE ACCENT + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x00a8, # DIAERESIS + 0x00a5: 0x00b8, # CEDILLA + 0x00a6: 0x00b3, # SUPERSCRIPT THREE + 0x00a7: 0x00af, # MACRON + 0x00a8: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00a9: 0x2310, # REVERSED NOT SIGN + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x00be, # VULGAR FRACTION THREE QUARTERS + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA + 0x00e3: 0x03c0, # GREEK SMALL LETTER PI + 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA + 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU + 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI + 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA + 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA + 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA + 0x00ec: 0x221e, # INFINITY + 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI + 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON + 0x00ef: 0x2229, # INTERSECTION + 0x00f0: 0x2261, # IDENTICAL TO + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO + 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO + 0x00f4: 0x2320, # TOP HALF INTEGRAL + 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x2248, # ALMOST EQUAL TO + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x221a, # SQUARE ROOT + 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x0000 -> NULL + u'\x01' # 0x0001 -> START OF HEADING + u'\x02' # 0x0002 -> START OF TEXT + u'\x03' # 0x0003 -> END OF TEXT + u'\x04' # 0x0004 -> END OF TRANSMISSION + u'\x05' # 0x0005 -> ENQUIRY + u'\x06' # 0x0006 -> ACKNOWLEDGE + u'\x07' # 0x0007 -> BELL + u'\x08' # 0x0008 -> BACKSPACE + u'\t' # 0x0009 -> HORIZONTAL TABULATION + u'\n' # 0x000a -> LINE FEED + u'\x0b' # 0x000b -> VERTICAL TABULATION + u'\x0c' # 0x000c -> FORM FEED + u'\r' # 0x000d -> CARRIAGE RETURN + u'\x0e' # 0x000e -> SHIFT OUT + u'\x0f' # 0x000f -> SHIFT IN + u'\x10' # 0x0010 -> DATA LINK ESCAPE + u'\x11' # 0x0011 -> DEVICE CONTROL ONE + u'\x12' # 0x0012 -> DEVICE CONTROL TWO + u'\x13' # 0x0013 -> DEVICE CONTROL THREE + u'\x14' # 0x0014 -> DEVICE CONTROL FOUR + u'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x0016 -> SYNCHRONOUS IDLE + u'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x0018 -> CANCEL + u'\x19' # 0x0019 -> END OF MEDIUM + u'\x1a' # 0x001a -> SUBSTITUTE + u'\x1b' # 0x001b -> ESCAPE + u'\x1c' # 0x001c -> FILE SEPARATOR + u'\x1d' # 0x001d -> GROUP SEPARATOR + u'\x1e' # 0x001e -> RECORD SEPARATOR + u'\x1f' # 0x001f -> UNIT SEPARATOR + u' ' # 0x0020 -> SPACE + u'!' # 0x0021 -> EXCLAMATION MARK + u'"' # 0x0022 -> QUOTATION MARK + u'#' # 0x0023 -> NUMBER SIGN + u'$' # 0x0024 -> DOLLAR SIGN + u'%' # 0x0025 -> PERCENT SIGN + u'&' # 0x0026 -> AMPERSAND + u"'" # 0x0027 -> APOSTROPHE + u'(' # 0x0028 -> LEFT PARENTHESIS + u')' # 0x0029 -> RIGHT PARENTHESIS + u'*' # 0x002a -> ASTERISK + u'+' # 0x002b -> PLUS SIGN + u',' # 0x002c -> COMMA + u'-' # 0x002d -> HYPHEN-MINUS + u'.' # 0x002e -> FULL STOP + u'/' # 0x002f -> SOLIDUS + u'0' # 0x0030 -> DIGIT ZERO + u'1' # 0x0031 -> DIGIT ONE + u'2' # 0x0032 -> DIGIT TWO + u'3' # 0x0033 -> DIGIT THREE + u'4' # 0x0034 -> DIGIT FOUR + u'5' # 0x0035 -> DIGIT FIVE + u'6' # 0x0036 -> DIGIT SIX + u'7' # 0x0037 -> DIGIT SEVEN + u'8' # 0x0038 -> DIGIT EIGHT + u'9' # 0x0039 -> DIGIT NINE + u':' # 0x003a -> COLON + u';' # 0x003b -> SEMICOLON + u'<' # 0x003c -> LESS-THAN SIGN + u'=' # 0x003d -> EQUALS SIGN + u'>' # 0x003e -> GREATER-THAN SIGN + u'?' # 0x003f -> QUESTION MARK + u'@' # 0x0040 -> COMMERCIAL AT + u'A' # 0x0041 -> LATIN CAPITAL LETTER A + u'B' # 0x0042 -> LATIN CAPITAL LETTER B + u'C' # 0x0043 -> LATIN CAPITAL LETTER C + u'D' # 0x0044 -> LATIN CAPITAL LETTER D + u'E' # 0x0045 -> LATIN CAPITAL LETTER E + u'F' # 0x0046 -> LATIN CAPITAL LETTER F + u'G' # 0x0047 -> LATIN CAPITAL LETTER G + u'H' # 0x0048 -> LATIN CAPITAL LETTER H + u'I' # 0x0049 -> LATIN CAPITAL LETTER I + u'J' # 0x004a -> LATIN CAPITAL LETTER J + u'K' # 0x004b -> LATIN CAPITAL LETTER K + u'L' # 0x004c -> LATIN CAPITAL LETTER L + u'M' # 0x004d -> LATIN CAPITAL LETTER M + u'N' # 0x004e -> LATIN CAPITAL LETTER N + u'O' # 0x004f -> LATIN CAPITAL LETTER O + u'P' # 0x0050 -> LATIN CAPITAL LETTER P + u'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + u'R' # 0x0052 -> LATIN CAPITAL LETTER R + u'S' # 0x0053 -> LATIN CAPITAL LETTER S + u'T' # 0x0054 -> LATIN CAPITAL LETTER T + u'U' # 0x0055 -> LATIN CAPITAL LETTER U + u'V' # 0x0056 -> LATIN CAPITAL LETTER V + u'W' # 0x0057 -> LATIN CAPITAL LETTER W + u'X' # 0x0058 -> LATIN CAPITAL LETTER X + u'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + u'Z' # 0x005a -> LATIN CAPITAL LETTER Z + u'[' # 0x005b -> LEFT SQUARE BRACKET + u'\\' # 0x005c -> REVERSE SOLIDUS + u']' # 0x005d -> RIGHT SQUARE BRACKET + u'^' # 0x005e -> CIRCUMFLEX ACCENT + u'_' # 0x005f -> LOW LINE + u'`' # 0x0060 -> GRAVE ACCENT + u'a' # 0x0061 -> LATIN SMALL LETTER A + u'b' # 0x0062 -> LATIN SMALL LETTER B + u'c' # 0x0063 -> LATIN SMALL LETTER C + u'd' # 0x0064 -> LATIN SMALL LETTER D + u'e' # 0x0065 -> LATIN SMALL LETTER E + u'f' # 0x0066 -> LATIN SMALL LETTER F + u'g' # 0x0067 -> LATIN SMALL LETTER G + u'h' # 0x0068 -> LATIN SMALL LETTER H + u'i' # 0x0069 -> LATIN SMALL LETTER I + u'j' # 0x006a -> LATIN SMALL LETTER J + u'k' # 0x006b -> LATIN SMALL LETTER K + u'l' # 0x006c -> LATIN SMALL LETTER L + u'm' # 0x006d -> LATIN SMALL LETTER M + u'n' # 0x006e -> LATIN SMALL LETTER N + u'o' # 0x006f -> LATIN SMALL LETTER O + u'p' # 0x0070 -> LATIN SMALL LETTER P + u'q' # 0x0071 -> LATIN SMALL LETTER Q + u'r' # 0x0072 -> LATIN SMALL LETTER R + u's' # 0x0073 -> LATIN SMALL LETTER S + u't' # 0x0074 -> LATIN SMALL LETTER T + u'u' # 0x0075 -> LATIN SMALL LETTER U + u'v' # 0x0076 -> LATIN SMALL LETTER V + u'w' # 0x0077 -> LATIN SMALL LETTER W + u'x' # 0x0078 -> LATIN SMALL LETTER X + u'y' # 0x0079 -> LATIN SMALL LETTER Y + u'z' # 0x007a -> LATIN SMALL LETTER Z + u'{' # 0x007b -> LEFT CURLY BRACKET + u'|' # 0x007c -> VERTICAL LINE + u'}' # 0x007d -> RIGHT CURLY BRACKET + u'~' # 0x007e -> TILDE + u'\x7f' # 0x007f -> DELETE + u'\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + u'\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xc2' # 0x0084 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE + u'\xb6' # 0x0086 -> PILCROW SIGN + u'\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE + u'\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\u2017' # 0x008d -> DOUBLE LOW LINE + u'\xc0' # 0x008e -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xa7' # 0x008f -> SECTION SIGN + u'\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xc8' # 0x0091 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xca' # 0x0092 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xcb' # 0x0094 -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xcf' # 0x0095 -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE + u'\xa4' # 0x0098 -> CURRENCY SIGN + u'\xd4' # 0x0099 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xa2' # 0x009b -> CENT SIGN + u'\xa3' # 0x009c -> POUND SIGN + u'\xd9' # 0x009d -> LATIN CAPITAL LETTER U WITH GRAVE + u'\xdb' # 0x009e -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK + u'\xa6' # 0x00a0 -> BROKEN BAR + u'\xb4' # 0x00a1 -> ACUTE ACCENT + u'\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + u'\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + u'\xa8' # 0x00a4 -> DIAERESIS + u'\xb8' # 0x00a5 -> CEDILLA + u'\xb3' # 0x00a6 -> SUPERSCRIPT THREE + u'\xaf' # 0x00a7 -> MACRON + u'\xce' # 0x00a8 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\u2310' # 0x00a9 -> REVERSED NOT SIGN + u'\xac' # 0x00aa -> NOT SIGN + u'\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + u'\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + u'\xbe' # 0x00ad -> VULGAR FRACTION THREE QUARTERS + u'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2591' # 0x00b0 -> LIGHT SHADE + u'\u2592' # 0x00b1 -> MEDIUM SHADE + u'\u2593' # 0x00b2 -> DARK SHADE + u'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + u'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + u'\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + u'\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + u'\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + u'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + u'\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + u'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + u'\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + u'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + u'\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + u'\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + u'\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + u'\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + u'\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + u'\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + u'\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + u'\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + u'\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + u'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2588' # 0x00db -> FULL BLOCK + u'\u2584' # 0x00dc -> LOWER HALF BLOCK + u'\u258c' # 0x00dd -> LEFT HALF BLOCK + u'\u2590' # 0x00de -> RIGHT HALF BLOCK + u'\u2580' # 0x00df -> UPPER HALF BLOCK + u'\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA + u'\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S + u'\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA + u'\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI + u'\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA + u'\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA + u'\xb5' # 0x00e6 -> MICRO SIGN + u'\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU + u'\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI + u'\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA + u'\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA + u'\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA + u'\u221e' # 0x00ec -> INFINITY + u'\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI + u'\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON + u'\u2229' # 0x00ef -> INTERSECTION + u'\u2261' # 0x00f0 -> IDENTICAL TO + u'\xb1' # 0x00f1 -> PLUS-MINUS SIGN + u'\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO + u'\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO + u'\u2320' # 0x00f4 -> TOP HALF INTEGRAL + u'\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL + u'\xf7' # 0x00f6 -> DIVISION SIGN + u'\u2248' # 0x00f7 -> ALMOST EQUAL TO + u'\xb0' # 0x00f8 -> DEGREE SIGN + u'\u2219' # 0x00f9 -> BULLET OPERATOR + u'\xb7' # 0x00fa -> MIDDLE DOT + u'\u221a' # 0x00fb -> SQUARE ROOT + u'\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N + u'\xb2' # 0x00fd -> SUPERSCRIPT TWO + u'\u25a0' # 0x00fe -> BLACK SQUARE + u'\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a2: 0x009b, # CENT SIGN + 0x00a3: 0x009c, # POUND SIGN + 0x00a4: 0x0098, # CURRENCY SIGN + 0x00a6: 0x00a0, # BROKEN BAR + 0x00a7: 0x008f, # SECTION SIGN + 0x00a8: 0x00a4, # DIAERESIS + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00af: 0x00a7, # MACRON + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b3: 0x00a6, # SUPERSCRIPT THREE + 0x00b4: 0x00a1, # ACUTE ACCENT + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b6: 0x0086, # PILCROW SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00b8: 0x00a5, # CEDILLA + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00be: 0x00ad, # VULGAR FRACTION THREE QUARTERS + 0x00c0: 0x008e, # LATIN CAPITAL LETTER A WITH GRAVE + 0x00c2: 0x0084, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c8: 0x0091, # LATIN CAPITAL LETTER E WITH GRAVE + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00ca: 0x0092, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00cb: 0x0094, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00ce: 0x00a8, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00cf: 0x0095, # LATIN CAPITAL LETTER I WITH DIAERESIS + 0x00d4: 0x0099, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00d9: 0x009d, # LATIN CAPITAL LETTER U WITH GRAVE + 0x00db: 0x009e, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S + 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE + 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK + 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA + 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA + 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA + 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI + 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA + 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA + 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA + 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON + 0x03c0: 0x00e3, # GREEK SMALL LETTER PI + 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA + 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU + 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI + 0x2017: 0x008d, # DOUBLE LOW LINE + 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N + 0x2219: 0x00f9, # BULLET OPERATOR + 0x221a: 0x00fb, # SQUARE ROOT + 0x221e: 0x00ec, # INFINITY + 0x2229: 0x00ef, # INTERSECTION + 0x2248: 0x00f7, # ALMOST EQUAL TO + 0x2261: 0x00f0, # IDENTICAL TO + 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO + 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO + 0x2310: 0x00a9, # REVERSED NOT SIGN + 0x2320: 0x00f4, # TOP HALF INTEGRAL + 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/thirdparty/python25/Lib/encodings/cp864.py b/thirdparty/python25/Lib/encodings/cp864.py new file mode 100644 index 000000000..9733ada1d --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp864.py @@ -0,0 +1,690 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP864.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp864', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0025: 0x066a, # ARABIC PERCENT SIGN + 0x0080: 0x00b0, # DEGREE SIGN + 0x0081: 0x00b7, # MIDDLE DOT + 0x0082: 0x2219, # BULLET OPERATOR + 0x0083: 0x221a, # SQUARE ROOT + 0x0084: 0x2592, # MEDIUM SHADE + 0x0085: 0x2500, # FORMS LIGHT HORIZONTAL + 0x0086: 0x2502, # FORMS LIGHT VERTICAL + 0x0087: 0x253c, # FORMS LIGHT VERTICAL AND HORIZONTAL + 0x0088: 0x2524, # FORMS LIGHT VERTICAL AND LEFT + 0x0089: 0x252c, # FORMS LIGHT DOWN AND HORIZONTAL + 0x008a: 0x251c, # FORMS LIGHT VERTICAL AND RIGHT + 0x008b: 0x2534, # FORMS LIGHT UP AND HORIZONTAL + 0x008c: 0x2510, # FORMS LIGHT DOWN AND LEFT + 0x008d: 0x250c, # FORMS LIGHT DOWN AND RIGHT + 0x008e: 0x2514, # FORMS LIGHT UP AND RIGHT + 0x008f: 0x2518, # FORMS LIGHT UP AND LEFT + 0x0090: 0x03b2, # GREEK SMALL BETA + 0x0091: 0x221e, # INFINITY + 0x0092: 0x03c6, # GREEK SMALL PHI + 0x0093: 0x00b1, # PLUS-OR-MINUS SIGN + 0x0094: 0x00bd, # FRACTION 1/2 + 0x0095: 0x00bc, # FRACTION 1/4 + 0x0096: 0x2248, # ALMOST EQUAL TO + 0x0097: 0x00ab, # LEFT POINTING GUILLEMET + 0x0098: 0x00bb, # RIGHT POINTING GUILLEMET + 0x0099: 0xfef7, # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM + 0x009a: 0xfef8, # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM + 0x009b: None, # UNDEFINED + 0x009c: None, # UNDEFINED + 0x009d: 0xfefb, # ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM + 0x009e: 0xfefc, # ARABIC LIGATURE LAM WITH ALEF FINAL FORM + 0x009f: None, # UNDEFINED + 0x00a1: 0x00ad, # SOFT HYPHEN + 0x00a2: 0xfe82, # ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM + 0x00a5: 0xfe84, # ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM + 0x00a6: None, # UNDEFINED + 0x00a7: None, # UNDEFINED + 0x00a8: 0xfe8e, # ARABIC LETTER ALEF FINAL FORM + 0x00a9: 0xfe8f, # ARABIC LETTER BEH ISOLATED FORM + 0x00aa: 0xfe95, # ARABIC LETTER TEH ISOLATED FORM + 0x00ab: 0xfe99, # ARABIC LETTER THEH ISOLATED FORM + 0x00ac: 0x060c, # ARABIC COMMA + 0x00ad: 0xfe9d, # ARABIC LETTER JEEM ISOLATED FORM + 0x00ae: 0xfea1, # ARABIC LETTER HAH ISOLATED FORM + 0x00af: 0xfea5, # ARABIC LETTER KHAH ISOLATED FORM + 0x00b0: 0x0660, # ARABIC-INDIC DIGIT ZERO + 0x00b1: 0x0661, # ARABIC-INDIC DIGIT ONE + 0x00b2: 0x0662, # ARABIC-INDIC DIGIT TWO + 0x00b3: 0x0663, # ARABIC-INDIC DIGIT THREE + 0x00b4: 0x0664, # ARABIC-INDIC DIGIT FOUR + 0x00b5: 0x0665, # ARABIC-INDIC DIGIT FIVE + 0x00b6: 0x0666, # ARABIC-INDIC DIGIT SIX + 0x00b7: 0x0667, # ARABIC-INDIC DIGIT SEVEN + 0x00b8: 0x0668, # ARABIC-INDIC DIGIT EIGHT + 0x00b9: 0x0669, # ARABIC-INDIC DIGIT NINE + 0x00ba: 0xfed1, # ARABIC LETTER FEH ISOLATED FORM + 0x00bb: 0x061b, # ARABIC SEMICOLON + 0x00bc: 0xfeb1, # ARABIC LETTER SEEN ISOLATED FORM + 0x00bd: 0xfeb5, # ARABIC LETTER SHEEN ISOLATED FORM + 0x00be: 0xfeb9, # ARABIC LETTER SAD ISOLATED FORM + 0x00bf: 0x061f, # ARABIC QUESTION MARK + 0x00c0: 0x00a2, # CENT SIGN + 0x00c1: 0xfe80, # ARABIC LETTER HAMZA ISOLATED FORM + 0x00c2: 0xfe81, # ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM + 0x00c3: 0xfe83, # ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM + 0x00c4: 0xfe85, # ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM + 0x00c5: 0xfeca, # ARABIC LETTER AIN FINAL FORM + 0x00c6: 0xfe8b, # ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM + 0x00c7: 0xfe8d, # ARABIC LETTER ALEF ISOLATED FORM + 0x00c8: 0xfe91, # ARABIC LETTER BEH INITIAL FORM + 0x00c9: 0xfe93, # ARABIC LETTER TEH MARBUTA ISOLATED FORM + 0x00ca: 0xfe97, # ARABIC LETTER TEH INITIAL FORM + 0x00cb: 0xfe9b, # ARABIC LETTER THEH INITIAL FORM + 0x00cc: 0xfe9f, # ARABIC LETTER JEEM INITIAL FORM + 0x00cd: 0xfea3, # ARABIC LETTER HAH INITIAL FORM + 0x00ce: 0xfea7, # ARABIC LETTER KHAH INITIAL FORM + 0x00cf: 0xfea9, # ARABIC LETTER DAL ISOLATED FORM + 0x00d0: 0xfeab, # ARABIC LETTER THAL ISOLATED FORM + 0x00d1: 0xfead, # ARABIC LETTER REH ISOLATED FORM + 0x00d2: 0xfeaf, # ARABIC LETTER ZAIN ISOLATED FORM + 0x00d3: 0xfeb3, # ARABIC LETTER SEEN INITIAL FORM + 0x00d4: 0xfeb7, # ARABIC LETTER SHEEN INITIAL FORM + 0x00d5: 0xfebb, # ARABIC LETTER SAD INITIAL FORM + 0x00d6: 0xfebf, # ARABIC LETTER DAD INITIAL FORM + 0x00d7: 0xfec1, # ARABIC LETTER TAH ISOLATED FORM + 0x00d8: 0xfec5, # ARABIC LETTER ZAH ISOLATED FORM + 0x00d9: 0xfecb, # ARABIC LETTER AIN INITIAL FORM + 0x00da: 0xfecf, # ARABIC LETTER GHAIN INITIAL FORM + 0x00db: 0x00a6, # BROKEN VERTICAL BAR + 0x00dc: 0x00ac, # NOT SIGN + 0x00dd: 0x00f7, # DIVISION SIGN + 0x00de: 0x00d7, # MULTIPLICATION SIGN + 0x00df: 0xfec9, # ARABIC LETTER AIN ISOLATED FORM + 0x00e0: 0x0640, # ARABIC TATWEEL + 0x00e1: 0xfed3, # ARABIC LETTER FEH INITIAL FORM + 0x00e2: 0xfed7, # ARABIC LETTER QAF INITIAL FORM + 0x00e3: 0xfedb, # ARABIC LETTER KAF INITIAL FORM + 0x00e4: 0xfedf, # ARABIC LETTER LAM INITIAL FORM + 0x00e5: 0xfee3, # ARABIC LETTER MEEM INITIAL FORM + 0x00e6: 0xfee7, # ARABIC LETTER NOON INITIAL FORM + 0x00e7: 0xfeeb, # ARABIC LETTER HEH INITIAL FORM + 0x00e8: 0xfeed, # ARABIC LETTER WAW ISOLATED FORM + 0x00e9: 0xfeef, # ARABIC LETTER ALEF MAKSURA ISOLATED FORM + 0x00ea: 0xfef3, # ARABIC LETTER YEH INITIAL FORM + 0x00eb: 0xfebd, # ARABIC LETTER DAD ISOLATED FORM + 0x00ec: 0xfecc, # ARABIC LETTER AIN MEDIAL FORM + 0x00ed: 0xfece, # ARABIC LETTER GHAIN FINAL FORM + 0x00ee: 0xfecd, # ARABIC LETTER GHAIN ISOLATED FORM + 0x00ef: 0xfee1, # ARABIC LETTER MEEM ISOLATED FORM + 0x00f0: 0xfe7d, # ARABIC SHADDA MEDIAL FORM + 0x00f1: 0x0651, # ARABIC SHADDAH + 0x00f2: 0xfee5, # ARABIC LETTER NOON ISOLATED FORM + 0x00f3: 0xfee9, # ARABIC LETTER HEH ISOLATED FORM + 0x00f4: 0xfeec, # ARABIC LETTER HEH MEDIAL FORM + 0x00f5: 0xfef0, # ARABIC LETTER ALEF MAKSURA FINAL FORM + 0x00f6: 0xfef2, # ARABIC LETTER YEH FINAL FORM + 0x00f7: 0xfed0, # ARABIC LETTER GHAIN MEDIAL FORM + 0x00f8: 0xfed5, # ARABIC LETTER QAF ISOLATED FORM + 0x00f9: 0xfef5, # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM + 0x00fa: 0xfef6, # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM + 0x00fb: 0xfedd, # ARABIC LETTER LAM ISOLATED FORM + 0x00fc: 0xfed9, # ARABIC LETTER KAF ISOLATED FORM + 0x00fd: 0xfef1, # ARABIC LETTER YEH ISOLATED FORM + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: None, # UNDEFINED +}) + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x0000 -> NULL + u'\x01' # 0x0001 -> START OF HEADING + u'\x02' # 0x0002 -> START OF TEXT + u'\x03' # 0x0003 -> END OF TEXT + u'\x04' # 0x0004 -> END OF TRANSMISSION + u'\x05' # 0x0005 -> ENQUIRY + u'\x06' # 0x0006 -> ACKNOWLEDGE + u'\x07' # 0x0007 -> BELL + u'\x08' # 0x0008 -> BACKSPACE + u'\t' # 0x0009 -> HORIZONTAL TABULATION + u'\n' # 0x000a -> LINE FEED + u'\x0b' # 0x000b -> VERTICAL TABULATION + u'\x0c' # 0x000c -> FORM FEED + u'\r' # 0x000d -> CARRIAGE RETURN + u'\x0e' # 0x000e -> SHIFT OUT + u'\x0f' # 0x000f -> SHIFT IN + u'\x10' # 0x0010 -> DATA LINK ESCAPE + u'\x11' # 0x0011 -> DEVICE CONTROL ONE + u'\x12' # 0x0012 -> DEVICE CONTROL TWO + u'\x13' # 0x0013 -> DEVICE CONTROL THREE + u'\x14' # 0x0014 -> DEVICE CONTROL FOUR + u'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x0016 -> SYNCHRONOUS IDLE + u'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x0018 -> CANCEL + u'\x19' # 0x0019 -> END OF MEDIUM + u'\x1a' # 0x001a -> SUBSTITUTE + u'\x1b' # 0x001b -> ESCAPE + u'\x1c' # 0x001c -> FILE SEPARATOR + u'\x1d' # 0x001d -> GROUP SEPARATOR + u'\x1e' # 0x001e -> RECORD SEPARATOR + u'\x1f' # 0x001f -> UNIT SEPARATOR + u' ' # 0x0020 -> SPACE + u'!' # 0x0021 -> EXCLAMATION MARK + u'"' # 0x0022 -> QUOTATION MARK + u'#' # 0x0023 -> NUMBER SIGN + u'$' # 0x0024 -> DOLLAR SIGN + u'\u066a' # 0x0025 -> ARABIC PERCENT SIGN + u'&' # 0x0026 -> AMPERSAND + u"'" # 0x0027 -> APOSTROPHE + u'(' # 0x0028 -> LEFT PARENTHESIS + u')' # 0x0029 -> RIGHT PARENTHESIS + u'*' # 0x002a -> ASTERISK + u'+' # 0x002b -> PLUS SIGN + u',' # 0x002c -> COMMA + u'-' # 0x002d -> HYPHEN-MINUS + u'.' # 0x002e -> FULL STOP + u'/' # 0x002f -> SOLIDUS + u'0' # 0x0030 -> DIGIT ZERO + u'1' # 0x0031 -> DIGIT ONE + u'2' # 0x0032 -> DIGIT TWO + u'3' # 0x0033 -> DIGIT THREE + u'4' # 0x0034 -> DIGIT FOUR + u'5' # 0x0035 -> DIGIT FIVE + u'6' # 0x0036 -> DIGIT SIX + u'7' # 0x0037 -> DIGIT SEVEN + u'8' # 0x0038 -> DIGIT EIGHT + u'9' # 0x0039 -> DIGIT NINE + u':' # 0x003a -> COLON + u';' # 0x003b -> SEMICOLON + u'<' # 0x003c -> LESS-THAN SIGN + u'=' # 0x003d -> EQUALS SIGN + u'>' # 0x003e -> GREATER-THAN SIGN + u'?' # 0x003f -> QUESTION MARK + u'@' # 0x0040 -> COMMERCIAL AT + u'A' # 0x0041 -> LATIN CAPITAL LETTER A + u'B' # 0x0042 -> LATIN CAPITAL LETTER B + u'C' # 0x0043 -> LATIN CAPITAL LETTER C + u'D' # 0x0044 -> LATIN CAPITAL LETTER D + u'E' # 0x0045 -> LATIN CAPITAL LETTER E + u'F' # 0x0046 -> LATIN CAPITAL LETTER F + u'G' # 0x0047 -> LATIN CAPITAL LETTER G + u'H' # 0x0048 -> LATIN CAPITAL LETTER H + u'I' # 0x0049 -> LATIN CAPITAL LETTER I + u'J' # 0x004a -> LATIN CAPITAL LETTER J + u'K' # 0x004b -> LATIN CAPITAL LETTER K + u'L' # 0x004c -> LATIN CAPITAL LETTER L + u'M' # 0x004d -> LATIN CAPITAL LETTER M + u'N' # 0x004e -> LATIN CAPITAL LETTER N + u'O' # 0x004f -> LATIN CAPITAL LETTER O + u'P' # 0x0050 -> LATIN CAPITAL LETTER P + u'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + u'R' # 0x0052 -> LATIN CAPITAL LETTER R + u'S' # 0x0053 -> LATIN CAPITAL LETTER S + u'T' # 0x0054 -> LATIN CAPITAL LETTER T + u'U' # 0x0055 -> LATIN CAPITAL LETTER U + u'V' # 0x0056 -> LATIN CAPITAL LETTER V + u'W' # 0x0057 -> LATIN CAPITAL LETTER W + u'X' # 0x0058 -> LATIN CAPITAL LETTER X + u'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + u'Z' # 0x005a -> LATIN CAPITAL LETTER Z + u'[' # 0x005b -> LEFT SQUARE BRACKET + u'\\' # 0x005c -> REVERSE SOLIDUS + u']' # 0x005d -> RIGHT SQUARE BRACKET + u'^' # 0x005e -> CIRCUMFLEX ACCENT + u'_' # 0x005f -> LOW LINE + u'`' # 0x0060 -> GRAVE ACCENT + u'a' # 0x0061 -> LATIN SMALL LETTER A + u'b' # 0x0062 -> LATIN SMALL LETTER B + u'c' # 0x0063 -> LATIN SMALL LETTER C + u'd' # 0x0064 -> LATIN SMALL LETTER D + u'e' # 0x0065 -> LATIN SMALL LETTER E + u'f' # 0x0066 -> LATIN SMALL LETTER F + u'g' # 0x0067 -> LATIN SMALL LETTER G + u'h' # 0x0068 -> LATIN SMALL LETTER H + u'i' # 0x0069 -> LATIN SMALL LETTER I + u'j' # 0x006a -> LATIN SMALL LETTER J + u'k' # 0x006b -> LATIN SMALL LETTER K + u'l' # 0x006c -> LATIN SMALL LETTER L + u'm' # 0x006d -> LATIN SMALL LETTER M + u'n' # 0x006e -> LATIN SMALL LETTER N + u'o' # 0x006f -> LATIN SMALL LETTER O + u'p' # 0x0070 -> LATIN SMALL LETTER P + u'q' # 0x0071 -> LATIN SMALL LETTER Q + u'r' # 0x0072 -> LATIN SMALL LETTER R + u's' # 0x0073 -> LATIN SMALL LETTER S + u't' # 0x0074 -> LATIN SMALL LETTER T + u'u' # 0x0075 -> LATIN SMALL LETTER U + u'v' # 0x0076 -> LATIN SMALL LETTER V + u'w' # 0x0077 -> LATIN SMALL LETTER W + u'x' # 0x0078 -> LATIN SMALL LETTER X + u'y' # 0x0079 -> LATIN SMALL LETTER Y + u'z' # 0x007a -> LATIN SMALL LETTER Z + u'{' # 0x007b -> LEFT CURLY BRACKET + u'|' # 0x007c -> VERTICAL LINE + u'}' # 0x007d -> RIGHT CURLY BRACKET + u'~' # 0x007e -> TILDE + u'\x7f' # 0x007f -> DELETE + u'\xb0' # 0x0080 -> DEGREE SIGN + u'\xb7' # 0x0081 -> MIDDLE DOT + u'\u2219' # 0x0082 -> BULLET OPERATOR + u'\u221a' # 0x0083 -> SQUARE ROOT + u'\u2592' # 0x0084 -> MEDIUM SHADE + u'\u2500' # 0x0085 -> FORMS LIGHT HORIZONTAL + u'\u2502' # 0x0086 -> FORMS LIGHT VERTICAL + u'\u253c' # 0x0087 -> FORMS LIGHT VERTICAL AND HORIZONTAL + u'\u2524' # 0x0088 -> FORMS LIGHT VERTICAL AND LEFT + u'\u252c' # 0x0089 -> FORMS LIGHT DOWN AND HORIZONTAL + u'\u251c' # 0x008a -> FORMS LIGHT VERTICAL AND RIGHT + u'\u2534' # 0x008b -> FORMS LIGHT UP AND HORIZONTAL + u'\u2510' # 0x008c -> FORMS LIGHT DOWN AND LEFT + u'\u250c' # 0x008d -> FORMS LIGHT DOWN AND RIGHT + u'\u2514' # 0x008e -> FORMS LIGHT UP AND RIGHT + u'\u2518' # 0x008f -> FORMS LIGHT UP AND LEFT + u'\u03b2' # 0x0090 -> GREEK SMALL BETA + u'\u221e' # 0x0091 -> INFINITY + u'\u03c6' # 0x0092 -> GREEK SMALL PHI + u'\xb1' # 0x0093 -> PLUS-OR-MINUS SIGN + u'\xbd' # 0x0094 -> FRACTION 1/2 + u'\xbc' # 0x0095 -> FRACTION 1/4 + u'\u2248' # 0x0096 -> ALMOST EQUAL TO + u'\xab' # 0x0097 -> LEFT POINTING GUILLEMET + u'\xbb' # 0x0098 -> RIGHT POINTING GUILLEMET + u'\ufef7' # 0x0099 -> ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM + u'\ufef8' # 0x009a -> ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM + u'\ufffe' # 0x009b -> UNDEFINED + u'\ufffe' # 0x009c -> UNDEFINED + u'\ufefb' # 0x009d -> ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM + u'\ufefc' # 0x009e -> ARABIC LIGATURE LAM WITH ALEF FINAL FORM + u'\ufffe' # 0x009f -> UNDEFINED + u'\xa0' # 0x00a0 -> NON-BREAKING SPACE + u'\xad' # 0x00a1 -> SOFT HYPHEN + u'\ufe82' # 0x00a2 -> ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM + u'\xa3' # 0x00a3 -> POUND SIGN + u'\xa4' # 0x00a4 -> CURRENCY SIGN + u'\ufe84' # 0x00a5 -> ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM + u'\ufffe' # 0x00a6 -> UNDEFINED + u'\ufffe' # 0x00a7 -> UNDEFINED + u'\ufe8e' # 0x00a8 -> ARABIC LETTER ALEF FINAL FORM + u'\ufe8f' # 0x00a9 -> ARABIC LETTER BEH ISOLATED FORM + u'\ufe95' # 0x00aa -> ARABIC LETTER TEH ISOLATED FORM + u'\ufe99' # 0x00ab -> ARABIC LETTER THEH ISOLATED FORM + u'\u060c' # 0x00ac -> ARABIC COMMA + u'\ufe9d' # 0x00ad -> ARABIC LETTER JEEM ISOLATED FORM + u'\ufea1' # 0x00ae -> ARABIC LETTER HAH ISOLATED FORM + u'\ufea5' # 0x00af -> ARABIC LETTER KHAH ISOLATED FORM + u'\u0660' # 0x00b0 -> ARABIC-INDIC DIGIT ZERO + u'\u0661' # 0x00b1 -> ARABIC-INDIC DIGIT ONE + u'\u0662' # 0x00b2 -> ARABIC-INDIC DIGIT TWO + u'\u0663' # 0x00b3 -> ARABIC-INDIC DIGIT THREE + u'\u0664' # 0x00b4 -> ARABIC-INDIC DIGIT FOUR + u'\u0665' # 0x00b5 -> ARABIC-INDIC DIGIT FIVE + u'\u0666' # 0x00b6 -> ARABIC-INDIC DIGIT SIX + u'\u0667' # 0x00b7 -> ARABIC-INDIC DIGIT SEVEN + u'\u0668' # 0x00b8 -> ARABIC-INDIC DIGIT EIGHT + u'\u0669' # 0x00b9 -> ARABIC-INDIC DIGIT NINE + u'\ufed1' # 0x00ba -> ARABIC LETTER FEH ISOLATED FORM + u'\u061b' # 0x00bb -> ARABIC SEMICOLON + u'\ufeb1' # 0x00bc -> ARABIC LETTER SEEN ISOLATED FORM + u'\ufeb5' # 0x00bd -> ARABIC LETTER SHEEN ISOLATED FORM + u'\ufeb9' # 0x00be -> ARABIC LETTER SAD ISOLATED FORM + u'\u061f' # 0x00bf -> ARABIC QUESTION MARK + u'\xa2' # 0x00c0 -> CENT SIGN + u'\ufe80' # 0x00c1 -> ARABIC LETTER HAMZA ISOLATED FORM + u'\ufe81' # 0x00c2 -> ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM + u'\ufe83' # 0x00c3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM + u'\ufe85' # 0x00c4 -> ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM + u'\ufeca' # 0x00c5 -> ARABIC LETTER AIN FINAL FORM + u'\ufe8b' # 0x00c6 -> ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM + u'\ufe8d' # 0x00c7 -> ARABIC LETTER ALEF ISOLATED FORM + u'\ufe91' # 0x00c8 -> ARABIC LETTER BEH INITIAL FORM + u'\ufe93' # 0x00c9 -> ARABIC LETTER TEH MARBUTA ISOLATED FORM + u'\ufe97' # 0x00ca -> ARABIC LETTER TEH INITIAL FORM + u'\ufe9b' # 0x00cb -> ARABIC LETTER THEH INITIAL FORM + u'\ufe9f' # 0x00cc -> ARABIC LETTER JEEM INITIAL FORM + u'\ufea3' # 0x00cd -> ARABIC LETTER HAH INITIAL FORM + u'\ufea7' # 0x00ce -> ARABIC LETTER KHAH INITIAL FORM + u'\ufea9' # 0x00cf -> ARABIC LETTER DAL ISOLATED FORM + u'\ufeab' # 0x00d0 -> ARABIC LETTER THAL ISOLATED FORM + u'\ufead' # 0x00d1 -> ARABIC LETTER REH ISOLATED FORM + u'\ufeaf' # 0x00d2 -> ARABIC LETTER ZAIN ISOLATED FORM + u'\ufeb3' # 0x00d3 -> ARABIC LETTER SEEN INITIAL FORM + u'\ufeb7' # 0x00d4 -> ARABIC LETTER SHEEN INITIAL FORM + u'\ufebb' # 0x00d5 -> ARABIC LETTER SAD INITIAL FORM + u'\ufebf' # 0x00d6 -> ARABIC LETTER DAD INITIAL FORM + u'\ufec1' # 0x00d7 -> ARABIC LETTER TAH ISOLATED FORM + u'\ufec5' # 0x00d8 -> ARABIC LETTER ZAH ISOLATED FORM + u'\ufecb' # 0x00d9 -> ARABIC LETTER AIN INITIAL FORM + u'\ufecf' # 0x00da -> ARABIC LETTER GHAIN INITIAL FORM + u'\xa6' # 0x00db -> BROKEN VERTICAL BAR + u'\xac' # 0x00dc -> NOT SIGN + u'\xf7' # 0x00dd -> DIVISION SIGN + u'\xd7' # 0x00de -> MULTIPLICATION SIGN + u'\ufec9' # 0x00df -> ARABIC LETTER AIN ISOLATED FORM + u'\u0640' # 0x00e0 -> ARABIC TATWEEL + u'\ufed3' # 0x00e1 -> ARABIC LETTER FEH INITIAL FORM + u'\ufed7' # 0x00e2 -> ARABIC LETTER QAF INITIAL FORM + u'\ufedb' # 0x00e3 -> ARABIC LETTER KAF INITIAL FORM + u'\ufedf' # 0x00e4 -> ARABIC LETTER LAM INITIAL FORM + u'\ufee3' # 0x00e5 -> ARABIC LETTER MEEM INITIAL FORM + u'\ufee7' # 0x00e6 -> ARABIC LETTER NOON INITIAL FORM + u'\ufeeb' # 0x00e7 -> ARABIC LETTER HEH INITIAL FORM + u'\ufeed' # 0x00e8 -> ARABIC LETTER WAW ISOLATED FORM + u'\ufeef' # 0x00e9 -> ARABIC LETTER ALEF MAKSURA ISOLATED FORM + u'\ufef3' # 0x00ea -> ARABIC LETTER YEH INITIAL FORM + u'\ufebd' # 0x00eb -> ARABIC LETTER DAD ISOLATED FORM + u'\ufecc' # 0x00ec -> ARABIC LETTER AIN MEDIAL FORM + u'\ufece' # 0x00ed -> ARABIC LETTER GHAIN FINAL FORM + u'\ufecd' # 0x00ee -> ARABIC LETTER GHAIN ISOLATED FORM + u'\ufee1' # 0x00ef -> ARABIC LETTER MEEM ISOLATED FORM + u'\ufe7d' # 0x00f0 -> ARABIC SHADDA MEDIAL FORM + u'\u0651' # 0x00f1 -> ARABIC SHADDAH + u'\ufee5' # 0x00f2 -> ARABIC LETTER NOON ISOLATED FORM + u'\ufee9' # 0x00f3 -> ARABIC LETTER HEH ISOLATED FORM + u'\ufeec' # 0x00f4 -> ARABIC LETTER HEH MEDIAL FORM + u'\ufef0' # 0x00f5 -> ARABIC LETTER ALEF MAKSURA FINAL FORM + u'\ufef2' # 0x00f6 -> ARABIC LETTER YEH FINAL FORM + u'\ufed0' # 0x00f7 -> ARABIC LETTER GHAIN MEDIAL FORM + u'\ufed5' # 0x00f8 -> ARABIC LETTER QAF ISOLATED FORM + u'\ufef5' # 0x00f9 -> ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM + u'\ufef6' # 0x00fa -> ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM + u'\ufedd' # 0x00fb -> ARABIC LETTER LAM ISOLATED FORM + u'\ufed9' # 0x00fc -> ARABIC LETTER KAF ISOLATED FORM + u'\ufef1' # 0x00fd -> ARABIC LETTER YEH ISOLATED FORM + u'\u25a0' # 0x00fe -> BLACK SQUARE + u'\ufffe' # 0x00ff -> UNDEFINED +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00a0, # NON-BREAKING SPACE + 0x00a2: 0x00c0, # CENT SIGN + 0x00a3: 0x00a3, # POUND SIGN + 0x00a4: 0x00a4, # CURRENCY SIGN + 0x00a6: 0x00db, # BROKEN VERTICAL BAR + 0x00ab: 0x0097, # LEFT POINTING GUILLEMET + 0x00ac: 0x00dc, # NOT SIGN + 0x00ad: 0x00a1, # SOFT HYPHEN + 0x00b0: 0x0080, # DEGREE SIGN + 0x00b1: 0x0093, # PLUS-OR-MINUS SIGN + 0x00b7: 0x0081, # MIDDLE DOT + 0x00bb: 0x0098, # RIGHT POINTING GUILLEMET + 0x00bc: 0x0095, # FRACTION 1/4 + 0x00bd: 0x0094, # FRACTION 1/2 + 0x00d7: 0x00de, # MULTIPLICATION SIGN + 0x00f7: 0x00dd, # DIVISION SIGN + 0x03b2: 0x0090, # GREEK SMALL BETA + 0x03c6: 0x0092, # GREEK SMALL PHI + 0x060c: 0x00ac, # ARABIC COMMA + 0x061b: 0x00bb, # ARABIC SEMICOLON + 0x061f: 0x00bf, # ARABIC QUESTION MARK + 0x0640: 0x00e0, # ARABIC TATWEEL + 0x0651: 0x00f1, # ARABIC SHADDAH + 0x0660: 0x00b0, # ARABIC-INDIC DIGIT ZERO + 0x0661: 0x00b1, # ARABIC-INDIC DIGIT ONE + 0x0662: 0x00b2, # ARABIC-INDIC DIGIT TWO + 0x0663: 0x00b3, # ARABIC-INDIC DIGIT THREE + 0x0664: 0x00b4, # ARABIC-INDIC DIGIT FOUR + 0x0665: 0x00b5, # ARABIC-INDIC DIGIT FIVE + 0x0666: 0x00b6, # ARABIC-INDIC DIGIT SIX + 0x0667: 0x00b7, # ARABIC-INDIC DIGIT SEVEN + 0x0668: 0x00b8, # ARABIC-INDIC DIGIT EIGHT + 0x0669: 0x00b9, # ARABIC-INDIC DIGIT NINE + 0x066a: 0x0025, # ARABIC PERCENT SIGN + 0x2219: 0x0082, # BULLET OPERATOR + 0x221a: 0x0083, # SQUARE ROOT + 0x221e: 0x0091, # INFINITY + 0x2248: 0x0096, # ALMOST EQUAL TO + 0x2500: 0x0085, # FORMS LIGHT HORIZONTAL + 0x2502: 0x0086, # FORMS LIGHT VERTICAL + 0x250c: 0x008d, # FORMS LIGHT DOWN AND RIGHT + 0x2510: 0x008c, # FORMS LIGHT DOWN AND LEFT + 0x2514: 0x008e, # FORMS LIGHT UP AND RIGHT + 0x2518: 0x008f, # FORMS LIGHT UP AND LEFT + 0x251c: 0x008a, # FORMS LIGHT VERTICAL AND RIGHT + 0x2524: 0x0088, # FORMS LIGHT VERTICAL AND LEFT + 0x252c: 0x0089, # FORMS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x008b, # FORMS LIGHT UP AND HORIZONTAL + 0x253c: 0x0087, # FORMS LIGHT VERTICAL AND HORIZONTAL + 0x2592: 0x0084, # MEDIUM SHADE + 0x25a0: 0x00fe, # BLACK SQUARE + 0xfe7d: 0x00f0, # ARABIC SHADDA MEDIAL FORM + 0xfe80: 0x00c1, # ARABIC LETTER HAMZA ISOLATED FORM + 0xfe81: 0x00c2, # ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM + 0xfe82: 0x00a2, # ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM + 0xfe83: 0x00c3, # ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM + 0xfe84: 0x00a5, # ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM + 0xfe85: 0x00c4, # ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM + 0xfe8b: 0x00c6, # ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM + 0xfe8d: 0x00c7, # ARABIC LETTER ALEF ISOLATED FORM + 0xfe8e: 0x00a8, # ARABIC LETTER ALEF FINAL FORM + 0xfe8f: 0x00a9, # ARABIC LETTER BEH ISOLATED FORM + 0xfe91: 0x00c8, # ARABIC LETTER BEH INITIAL FORM + 0xfe93: 0x00c9, # ARABIC LETTER TEH MARBUTA ISOLATED FORM + 0xfe95: 0x00aa, # ARABIC LETTER TEH ISOLATED FORM + 0xfe97: 0x00ca, # ARABIC LETTER TEH INITIAL FORM + 0xfe99: 0x00ab, # ARABIC LETTER THEH ISOLATED FORM + 0xfe9b: 0x00cb, # ARABIC LETTER THEH INITIAL FORM + 0xfe9d: 0x00ad, # ARABIC LETTER JEEM ISOLATED FORM + 0xfe9f: 0x00cc, # ARABIC LETTER JEEM INITIAL FORM + 0xfea1: 0x00ae, # ARABIC LETTER HAH ISOLATED FORM + 0xfea3: 0x00cd, # ARABIC LETTER HAH INITIAL FORM + 0xfea5: 0x00af, # ARABIC LETTER KHAH ISOLATED FORM + 0xfea7: 0x00ce, # ARABIC LETTER KHAH INITIAL FORM + 0xfea9: 0x00cf, # ARABIC LETTER DAL ISOLATED FORM + 0xfeab: 0x00d0, # ARABIC LETTER THAL ISOLATED FORM + 0xfead: 0x00d1, # ARABIC LETTER REH ISOLATED FORM + 0xfeaf: 0x00d2, # ARABIC LETTER ZAIN ISOLATED FORM + 0xfeb1: 0x00bc, # ARABIC LETTER SEEN ISOLATED FORM + 0xfeb3: 0x00d3, # ARABIC LETTER SEEN INITIAL FORM + 0xfeb5: 0x00bd, # ARABIC LETTER SHEEN ISOLATED FORM + 0xfeb7: 0x00d4, # ARABIC LETTER SHEEN INITIAL FORM + 0xfeb9: 0x00be, # ARABIC LETTER SAD ISOLATED FORM + 0xfebb: 0x00d5, # ARABIC LETTER SAD INITIAL FORM + 0xfebd: 0x00eb, # ARABIC LETTER DAD ISOLATED FORM + 0xfebf: 0x00d6, # ARABIC LETTER DAD INITIAL FORM + 0xfec1: 0x00d7, # ARABIC LETTER TAH ISOLATED FORM + 0xfec5: 0x00d8, # ARABIC LETTER ZAH ISOLATED FORM + 0xfec9: 0x00df, # ARABIC LETTER AIN ISOLATED FORM + 0xfeca: 0x00c5, # ARABIC LETTER AIN FINAL FORM + 0xfecb: 0x00d9, # ARABIC LETTER AIN INITIAL FORM + 0xfecc: 0x00ec, # ARABIC LETTER AIN MEDIAL FORM + 0xfecd: 0x00ee, # ARABIC LETTER GHAIN ISOLATED FORM + 0xfece: 0x00ed, # ARABIC LETTER GHAIN FINAL FORM + 0xfecf: 0x00da, # ARABIC LETTER GHAIN INITIAL FORM + 0xfed0: 0x00f7, # ARABIC LETTER GHAIN MEDIAL FORM + 0xfed1: 0x00ba, # ARABIC LETTER FEH ISOLATED FORM + 0xfed3: 0x00e1, # ARABIC LETTER FEH INITIAL FORM + 0xfed5: 0x00f8, # ARABIC LETTER QAF ISOLATED FORM + 0xfed7: 0x00e2, # ARABIC LETTER QAF INITIAL FORM + 0xfed9: 0x00fc, # ARABIC LETTER KAF ISOLATED FORM + 0xfedb: 0x00e3, # ARABIC LETTER KAF INITIAL FORM + 0xfedd: 0x00fb, # ARABIC LETTER LAM ISOLATED FORM + 0xfedf: 0x00e4, # ARABIC LETTER LAM INITIAL FORM + 0xfee1: 0x00ef, # ARABIC LETTER MEEM ISOLATED FORM + 0xfee3: 0x00e5, # ARABIC LETTER MEEM INITIAL FORM + 0xfee5: 0x00f2, # ARABIC LETTER NOON ISOLATED FORM + 0xfee7: 0x00e6, # ARABIC LETTER NOON INITIAL FORM + 0xfee9: 0x00f3, # ARABIC LETTER HEH ISOLATED FORM + 0xfeeb: 0x00e7, # ARABIC LETTER HEH INITIAL FORM + 0xfeec: 0x00f4, # ARABIC LETTER HEH MEDIAL FORM + 0xfeed: 0x00e8, # ARABIC LETTER WAW ISOLATED FORM + 0xfeef: 0x00e9, # ARABIC LETTER ALEF MAKSURA ISOLATED FORM + 0xfef0: 0x00f5, # ARABIC LETTER ALEF MAKSURA FINAL FORM + 0xfef1: 0x00fd, # ARABIC LETTER YEH ISOLATED FORM + 0xfef2: 0x00f6, # ARABIC LETTER YEH FINAL FORM + 0xfef3: 0x00ea, # ARABIC LETTER YEH INITIAL FORM + 0xfef5: 0x00f9, # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM + 0xfef6: 0x00fa, # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM + 0xfef7: 0x0099, # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM + 0xfef8: 0x009a, # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM + 0xfefb: 0x009d, # ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM + 0xfefc: 0x009e, # ARABIC LIGATURE LAM WITH ALEF FINAL FORM +} diff --git a/thirdparty/python25/Lib/encodings/cp865.py b/thirdparty/python25/Lib/encodings/cp865.py new file mode 100644 index 000000000..b246a491a --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp865.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP865.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp865', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE + 0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS + 0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE + 0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0091: 0x00e6, # LATIN SMALL LIGATURE AE + 0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE + 0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE + 0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE + 0x0098: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE + 0x009e: 0x20a7, # PESETA SIGN + 0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK + 0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE + 0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE + 0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR + 0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR + 0x00a8: 0x00bf, # INVERTED QUESTION MARK + 0x00a9: 0x2310, # REVERSED NOT SIGN + 0x00aa: 0x00ac, # NOT SIGN + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00a4, # CURRENCY SIGN + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA + 0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA + 0x00e3: 0x03c0, # GREEK SMALL LETTER PI + 0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA + 0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA + 0x00e6: 0x00b5, # MICRO SIGN + 0x00e7: 0x03c4, # GREEK SMALL LETTER TAU + 0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI + 0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA + 0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA + 0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA + 0x00ec: 0x221e, # INFINITY + 0x00ed: 0x03c6, # GREEK SMALL LETTER PHI + 0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON + 0x00ef: 0x2229, # INTERSECTION + 0x00f0: 0x2261, # IDENTICAL TO + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO + 0x00f3: 0x2264, # LESS-THAN OR EQUAL TO + 0x00f4: 0x2320, # TOP HALF INTEGRAL + 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL + 0x00f6: 0x00f7, # DIVISION SIGN + 0x00f7: 0x2248, # ALMOST EQUAL TO + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x221a, # SQUARE ROOT + 0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N + 0x00fd: 0x00b2, # SUPERSCRIPT TWO + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x0000 -> NULL + u'\x01' # 0x0001 -> START OF HEADING + u'\x02' # 0x0002 -> START OF TEXT + u'\x03' # 0x0003 -> END OF TEXT + u'\x04' # 0x0004 -> END OF TRANSMISSION + u'\x05' # 0x0005 -> ENQUIRY + u'\x06' # 0x0006 -> ACKNOWLEDGE + u'\x07' # 0x0007 -> BELL + u'\x08' # 0x0008 -> BACKSPACE + u'\t' # 0x0009 -> HORIZONTAL TABULATION + u'\n' # 0x000a -> LINE FEED + u'\x0b' # 0x000b -> VERTICAL TABULATION + u'\x0c' # 0x000c -> FORM FEED + u'\r' # 0x000d -> CARRIAGE RETURN + u'\x0e' # 0x000e -> SHIFT OUT + u'\x0f' # 0x000f -> SHIFT IN + u'\x10' # 0x0010 -> DATA LINK ESCAPE + u'\x11' # 0x0011 -> DEVICE CONTROL ONE + u'\x12' # 0x0012 -> DEVICE CONTROL TWO + u'\x13' # 0x0013 -> DEVICE CONTROL THREE + u'\x14' # 0x0014 -> DEVICE CONTROL FOUR + u'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x0016 -> SYNCHRONOUS IDLE + u'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x0018 -> CANCEL + u'\x19' # 0x0019 -> END OF MEDIUM + u'\x1a' # 0x001a -> SUBSTITUTE + u'\x1b' # 0x001b -> ESCAPE + u'\x1c' # 0x001c -> FILE SEPARATOR + u'\x1d' # 0x001d -> GROUP SEPARATOR + u'\x1e' # 0x001e -> RECORD SEPARATOR + u'\x1f' # 0x001f -> UNIT SEPARATOR + u' ' # 0x0020 -> SPACE + u'!' # 0x0021 -> EXCLAMATION MARK + u'"' # 0x0022 -> QUOTATION MARK + u'#' # 0x0023 -> NUMBER SIGN + u'$' # 0x0024 -> DOLLAR SIGN + u'%' # 0x0025 -> PERCENT SIGN + u'&' # 0x0026 -> AMPERSAND + u"'" # 0x0027 -> APOSTROPHE + u'(' # 0x0028 -> LEFT PARENTHESIS + u')' # 0x0029 -> RIGHT PARENTHESIS + u'*' # 0x002a -> ASTERISK + u'+' # 0x002b -> PLUS SIGN + u',' # 0x002c -> COMMA + u'-' # 0x002d -> HYPHEN-MINUS + u'.' # 0x002e -> FULL STOP + u'/' # 0x002f -> SOLIDUS + u'0' # 0x0030 -> DIGIT ZERO + u'1' # 0x0031 -> DIGIT ONE + u'2' # 0x0032 -> DIGIT TWO + u'3' # 0x0033 -> DIGIT THREE + u'4' # 0x0034 -> DIGIT FOUR + u'5' # 0x0035 -> DIGIT FIVE + u'6' # 0x0036 -> DIGIT SIX + u'7' # 0x0037 -> DIGIT SEVEN + u'8' # 0x0038 -> DIGIT EIGHT + u'9' # 0x0039 -> DIGIT NINE + u':' # 0x003a -> COLON + u';' # 0x003b -> SEMICOLON + u'<' # 0x003c -> LESS-THAN SIGN + u'=' # 0x003d -> EQUALS SIGN + u'>' # 0x003e -> GREATER-THAN SIGN + u'?' # 0x003f -> QUESTION MARK + u'@' # 0x0040 -> COMMERCIAL AT + u'A' # 0x0041 -> LATIN CAPITAL LETTER A + u'B' # 0x0042 -> LATIN CAPITAL LETTER B + u'C' # 0x0043 -> LATIN CAPITAL LETTER C + u'D' # 0x0044 -> LATIN CAPITAL LETTER D + u'E' # 0x0045 -> LATIN CAPITAL LETTER E + u'F' # 0x0046 -> LATIN CAPITAL LETTER F + u'G' # 0x0047 -> LATIN CAPITAL LETTER G + u'H' # 0x0048 -> LATIN CAPITAL LETTER H + u'I' # 0x0049 -> LATIN CAPITAL LETTER I + u'J' # 0x004a -> LATIN CAPITAL LETTER J + u'K' # 0x004b -> LATIN CAPITAL LETTER K + u'L' # 0x004c -> LATIN CAPITAL LETTER L + u'M' # 0x004d -> LATIN CAPITAL LETTER M + u'N' # 0x004e -> LATIN CAPITAL LETTER N + u'O' # 0x004f -> LATIN CAPITAL LETTER O + u'P' # 0x0050 -> LATIN CAPITAL LETTER P + u'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + u'R' # 0x0052 -> LATIN CAPITAL LETTER R + u'S' # 0x0053 -> LATIN CAPITAL LETTER S + u'T' # 0x0054 -> LATIN CAPITAL LETTER T + u'U' # 0x0055 -> LATIN CAPITAL LETTER U + u'V' # 0x0056 -> LATIN CAPITAL LETTER V + u'W' # 0x0057 -> LATIN CAPITAL LETTER W + u'X' # 0x0058 -> LATIN CAPITAL LETTER X + u'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + u'Z' # 0x005a -> LATIN CAPITAL LETTER Z + u'[' # 0x005b -> LEFT SQUARE BRACKET + u'\\' # 0x005c -> REVERSE SOLIDUS + u']' # 0x005d -> RIGHT SQUARE BRACKET + u'^' # 0x005e -> CIRCUMFLEX ACCENT + u'_' # 0x005f -> LOW LINE + u'`' # 0x0060 -> GRAVE ACCENT + u'a' # 0x0061 -> LATIN SMALL LETTER A + u'b' # 0x0062 -> LATIN SMALL LETTER B + u'c' # 0x0063 -> LATIN SMALL LETTER C + u'd' # 0x0064 -> LATIN SMALL LETTER D + u'e' # 0x0065 -> LATIN SMALL LETTER E + u'f' # 0x0066 -> LATIN SMALL LETTER F + u'g' # 0x0067 -> LATIN SMALL LETTER G + u'h' # 0x0068 -> LATIN SMALL LETTER H + u'i' # 0x0069 -> LATIN SMALL LETTER I + u'j' # 0x006a -> LATIN SMALL LETTER J + u'k' # 0x006b -> LATIN SMALL LETTER K + u'l' # 0x006c -> LATIN SMALL LETTER L + u'm' # 0x006d -> LATIN SMALL LETTER M + u'n' # 0x006e -> LATIN SMALL LETTER N + u'o' # 0x006f -> LATIN SMALL LETTER O + u'p' # 0x0070 -> LATIN SMALL LETTER P + u'q' # 0x0071 -> LATIN SMALL LETTER Q + u'r' # 0x0072 -> LATIN SMALL LETTER R + u's' # 0x0073 -> LATIN SMALL LETTER S + u't' # 0x0074 -> LATIN SMALL LETTER T + u'u' # 0x0075 -> LATIN SMALL LETTER U + u'v' # 0x0076 -> LATIN SMALL LETTER V + u'w' # 0x0077 -> LATIN SMALL LETTER W + u'x' # 0x0078 -> LATIN SMALL LETTER X + u'y' # 0x0079 -> LATIN SMALL LETTER Y + u'z' # 0x007a -> LATIN SMALL LETTER Z + u'{' # 0x007b -> LEFT CURLY BRACKET + u'|' # 0x007c -> VERTICAL LINE + u'}' # 0x007d -> RIGHT CURLY BRACKET + u'~' # 0x007e -> TILDE + u'\x7f' # 0x007f -> DELETE + u'\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE + u'\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE + u'\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE + u'\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE + u'\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE + u'\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE + u'\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE + u'\xff' # 0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS + u'\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE + u'\xa3' # 0x009c -> POUND SIGN + u'\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE + u'\u20a7' # 0x009e -> PESETA SIGN + u'\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK + u'\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE + u'\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE + u'\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE + u'\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE + u'\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE + u'\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR + u'\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR + u'\xbf' # 0x00a8 -> INVERTED QUESTION MARK + u'\u2310' # 0x00a9 -> REVERSED NOT SIGN + u'\xac' # 0x00aa -> NOT SIGN + u'\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + u'\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER + u'\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK + u'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xa4' # 0x00af -> CURRENCY SIGN + u'\u2591' # 0x00b0 -> LIGHT SHADE + u'\u2592' # 0x00b1 -> MEDIUM SHADE + u'\u2593' # 0x00b2 -> DARK SHADE + u'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + u'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + u'\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + u'\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + u'\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + u'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + u'\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + u'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + u'\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + u'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + u'\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + u'\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + u'\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + u'\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + u'\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + u'\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + u'\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + u'\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + u'\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + u'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2588' # 0x00db -> FULL BLOCK + u'\u2584' # 0x00dc -> LOWER HALF BLOCK + u'\u258c' # 0x00dd -> LEFT HALF BLOCK + u'\u2590' # 0x00de -> RIGHT HALF BLOCK + u'\u2580' # 0x00df -> UPPER HALF BLOCK + u'\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA + u'\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S + u'\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA + u'\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI + u'\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA + u'\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA + u'\xb5' # 0x00e6 -> MICRO SIGN + u'\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU + u'\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI + u'\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA + u'\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA + u'\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA + u'\u221e' # 0x00ec -> INFINITY + u'\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI + u'\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON + u'\u2229' # 0x00ef -> INTERSECTION + u'\u2261' # 0x00f0 -> IDENTICAL TO + u'\xb1' # 0x00f1 -> PLUS-MINUS SIGN + u'\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO + u'\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO + u'\u2320' # 0x00f4 -> TOP HALF INTEGRAL + u'\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL + u'\xf7' # 0x00f6 -> DIVISION SIGN + u'\u2248' # 0x00f7 -> ALMOST EQUAL TO + u'\xb0' # 0x00f8 -> DEGREE SIGN + u'\u2219' # 0x00f9 -> BULLET OPERATOR + u'\xb7' # 0x00fa -> MIDDLE DOT + u'\u221a' # 0x00fb -> SQUARE ROOT + u'\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N + u'\xb2' # 0x00fd -> SUPERSCRIPT TWO + u'\u25a0' # 0x00fe -> BLACK SQUARE + u'\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK + 0x00a3: 0x009c, # POUND SIGN + 0x00a4: 0x00af, # CURRENCY SIGN + 0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x00aa, # NOT SIGN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x00fd, # SUPERSCRIPT TWO + 0x00b5: 0x00e6, # MICRO SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR + 0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x00bf: 0x00a8, # INVERTED QUESTION MARK + 0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE + 0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE + 0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE + 0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S + 0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE + 0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE + 0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE + 0x00e6: 0x0091, # LATIN SMALL LIGATURE AE + 0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE + 0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE + 0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE + 0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE + 0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS + 0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE + 0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE + 0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00f7: 0x00f6, # DIVISION SIGN + 0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE + 0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE + 0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE + 0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS + 0x00ff: 0x0098, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK + 0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA + 0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA + 0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA + 0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI + 0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA + 0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA + 0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA + 0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON + 0x03c0: 0x00e3, # GREEK SMALL LETTER PI + 0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA + 0x03c4: 0x00e7, # GREEK SMALL LETTER TAU + 0x03c6: 0x00ed, # GREEK SMALL LETTER PHI + 0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N + 0x20a7: 0x009e, # PESETA SIGN + 0x2219: 0x00f9, # BULLET OPERATOR + 0x221a: 0x00fb, # SQUARE ROOT + 0x221e: 0x00ec, # INFINITY + 0x2229: 0x00ef, # INTERSECTION + 0x2248: 0x00f7, # ALMOST EQUAL TO + 0x2261: 0x00f0, # IDENTICAL TO + 0x2264: 0x00f3, # LESS-THAN OR EQUAL TO + 0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO + 0x2310: 0x00a9, # REVERSED NOT SIGN + 0x2320: 0x00f4, # TOP HALF INTEGRAL + 0x2321: 0x00f5, # BOTTOM HALF INTEGRAL + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/thirdparty/python25/Lib/encodings/cp866.py b/thirdparty/python25/Lib/encodings/cp866.py new file mode 100644 index 000000000..70e513983 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp866.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP866.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp866', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x0410, # CYRILLIC CAPITAL LETTER A + 0x0081: 0x0411, # CYRILLIC CAPITAL LETTER BE + 0x0082: 0x0412, # CYRILLIC CAPITAL LETTER VE + 0x0083: 0x0413, # CYRILLIC CAPITAL LETTER GHE + 0x0084: 0x0414, # CYRILLIC CAPITAL LETTER DE + 0x0085: 0x0415, # CYRILLIC CAPITAL LETTER IE + 0x0086: 0x0416, # CYRILLIC CAPITAL LETTER ZHE + 0x0087: 0x0417, # CYRILLIC CAPITAL LETTER ZE + 0x0088: 0x0418, # CYRILLIC CAPITAL LETTER I + 0x0089: 0x0419, # CYRILLIC CAPITAL LETTER SHORT I + 0x008a: 0x041a, # CYRILLIC CAPITAL LETTER KA + 0x008b: 0x041b, # CYRILLIC CAPITAL LETTER EL + 0x008c: 0x041c, # CYRILLIC CAPITAL LETTER EM + 0x008d: 0x041d, # CYRILLIC CAPITAL LETTER EN + 0x008e: 0x041e, # CYRILLIC CAPITAL LETTER O + 0x008f: 0x041f, # CYRILLIC CAPITAL LETTER PE + 0x0090: 0x0420, # CYRILLIC CAPITAL LETTER ER + 0x0091: 0x0421, # CYRILLIC CAPITAL LETTER ES + 0x0092: 0x0422, # CYRILLIC CAPITAL LETTER TE + 0x0093: 0x0423, # CYRILLIC CAPITAL LETTER U + 0x0094: 0x0424, # CYRILLIC CAPITAL LETTER EF + 0x0095: 0x0425, # CYRILLIC CAPITAL LETTER HA + 0x0096: 0x0426, # CYRILLIC CAPITAL LETTER TSE + 0x0097: 0x0427, # CYRILLIC CAPITAL LETTER CHE + 0x0098: 0x0428, # CYRILLIC CAPITAL LETTER SHA + 0x0099: 0x0429, # CYRILLIC CAPITAL LETTER SHCHA + 0x009a: 0x042a, # CYRILLIC CAPITAL LETTER HARD SIGN + 0x009b: 0x042b, # CYRILLIC CAPITAL LETTER YERU + 0x009c: 0x042c, # CYRILLIC CAPITAL LETTER SOFT SIGN + 0x009d: 0x042d, # CYRILLIC CAPITAL LETTER E + 0x009e: 0x042e, # CYRILLIC CAPITAL LETTER YU + 0x009f: 0x042f, # CYRILLIC CAPITAL LETTER YA + 0x00a0: 0x0430, # CYRILLIC SMALL LETTER A + 0x00a1: 0x0431, # CYRILLIC SMALL LETTER BE + 0x00a2: 0x0432, # CYRILLIC SMALL LETTER VE + 0x00a3: 0x0433, # CYRILLIC SMALL LETTER GHE + 0x00a4: 0x0434, # CYRILLIC SMALL LETTER DE + 0x00a5: 0x0435, # CYRILLIC SMALL LETTER IE + 0x00a6: 0x0436, # CYRILLIC SMALL LETTER ZHE + 0x00a7: 0x0437, # CYRILLIC SMALL LETTER ZE + 0x00a8: 0x0438, # CYRILLIC SMALL LETTER I + 0x00a9: 0x0439, # CYRILLIC SMALL LETTER SHORT I + 0x00aa: 0x043a, # CYRILLIC SMALL LETTER KA + 0x00ab: 0x043b, # CYRILLIC SMALL LETTER EL + 0x00ac: 0x043c, # CYRILLIC SMALL LETTER EM + 0x00ad: 0x043d, # CYRILLIC SMALL LETTER EN + 0x00ae: 0x043e, # CYRILLIC SMALL LETTER O + 0x00af: 0x043f, # CYRILLIC SMALL LETTER PE + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x258c, # LEFT HALF BLOCK + 0x00de: 0x2590, # RIGHT HALF BLOCK + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x0440, # CYRILLIC SMALL LETTER ER + 0x00e1: 0x0441, # CYRILLIC SMALL LETTER ES + 0x00e2: 0x0442, # CYRILLIC SMALL LETTER TE + 0x00e3: 0x0443, # CYRILLIC SMALL LETTER U + 0x00e4: 0x0444, # CYRILLIC SMALL LETTER EF + 0x00e5: 0x0445, # CYRILLIC SMALL LETTER HA + 0x00e6: 0x0446, # CYRILLIC SMALL LETTER TSE + 0x00e7: 0x0447, # CYRILLIC SMALL LETTER CHE + 0x00e8: 0x0448, # CYRILLIC SMALL LETTER SHA + 0x00e9: 0x0449, # CYRILLIC SMALL LETTER SHCHA + 0x00ea: 0x044a, # CYRILLIC SMALL LETTER HARD SIGN + 0x00eb: 0x044b, # CYRILLIC SMALL LETTER YERU + 0x00ec: 0x044c, # CYRILLIC SMALL LETTER SOFT SIGN + 0x00ed: 0x044d, # CYRILLIC SMALL LETTER E + 0x00ee: 0x044e, # CYRILLIC SMALL LETTER YU + 0x00ef: 0x044f, # CYRILLIC SMALL LETTER YA + 0x00f0: 0x0401, # CYRILLIC CAPITAL LETTER IO + 0x00f1: 0x0451, # CYRILLIC SMALL LETTER IO + 0x00f2: 0x0404, # CYRILLIC CAPITAL LETTER UKRAINIAN IE + 0x00f3: 0x0454, # CYRILLIC SMALL LETTER UKRAINIAN IE + 0x00f4: 0x0407, # CYRILLIC CAPITAL LETTER YI + 0x00f5: 0x0457, # CYRILLIC SMALL LETTER YI + 0x00f6: 0x040e, # CYRILLIC CAPITAL LETTER SHORT U + 0x00f7: 0x045e, # CYRILLIC SMALL LETTER SHORT U + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x2219, # BULLET OPERATOR + 0x00fa: 0x00b7, # MIDDLE DOT + 0x00fb: 0x221a, # SQUARE ROOT + 0x00fc: 0x2116, # NUMERO SIGN + 0x00fd: 0x00a4, # CURRENCY SIGN + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x0000 -> NULL + u'\x01' # 0x0001 -> START OF HEADING + u'\x02' # 0x0002 -> START OF TEXT + u'\x03' # 0x0003 -> END OF TEXT + u'\x04' # 0x0004 -> END OF TRANSMISSION + u'\x05' # 0x0005 -> ENQUIRY + u'\x06' # 0x0006 -> ACKNOWLEDGE + u'\x07' # 0x0007 -> BELL + u'\x08' # 0x0008 -> BACKSPACE + u'\t' # 0x0009 -> HORIZONTAL TABULATION + u'\n' # 0x000a -> LINE FEED + u'\x0b' # 0x000b -> VERTICAL TABULATION + u'\x0c' # 0x000c -> FORM FEED + u'\r' # 0x000d -> CARRIAGE RETURN + u'\x0e' # 0x000e -> SHIFT OUT + u'\x0f' # 0x000f -> SHIFT IN + u'\x10' # 0x0010 -> DATA LINK ESCAPE + u'\x11' # 0x0011 -> DEVICE CONTROL ONE + u'\x12' # 0x0012 -> DEVICE CONTROL TWO + u'\x13' # 0x0013 -> DEVICE CONTROL THREE + u'\x14' # 0x0014 -> DEVICE CONTROL FOUR + u'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x0016 -> SYNCHRONOUS IDLE + u'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x0018 -> CANCEL + u'\x19' # 0x0019 -> END OF MEDIUM + u'\x1a' # 0x001a -> SUBSTITUTE + u'\x1b' # 0x001b -> ESCAPE + u'\x1c' # 0x001c -> FILE SEPARATOR + u'\x1d' # 0x001d -> GROUP SEPARATOR + u'\x1e' # 0x001e -> RECORD SEPARATOR + u'\x1f' # 0x001f -> UNIT SEPARATOR + u' ' # 0x0020 -> SPACE + u'!' # 0x0021 -> EXCLAMATION MARK + u'"' # 0x0022 -> QUOTATION MARK + u'#' # 0x0023 -> NUMBER SIGN + u'$' # 0x0024 -> DOLLAR SIGN + u'%' # 0x0025 -> PERCENT SIGN + u'&' # 0x0026 -> AMPERSAND + u"'" # 0x0027 -> APOSTROPHE + u'(' # 0x0028 -> LEFT PARENTHESIS + u')' # 0x0029 -> RIGHT PARENTHESIS + u'*' # 0x002a -> ASTERISK + u'+' # 0x002b -> PLUS SIGN + u',' # 0x002c -> COMMA + u'-' # 0x002d -> HYPHEN-MINUS + u'.' # 0x002e -> FULL STOP + u'/' # 0x002f -> SOLIDUS + u'0' # 0x0030 -> DIGIT ZERO + u'1' # 0x0031 -> DIGIT ONE + u'2' # 0x0032 -> DIGIT TWO + u'3' # 0x0033 -> DIGIT THREE + u'4' # 0x0034 -> DIGIT FOUR + u'5' # 0x0035 -> DIGIT FIVE + u'6' # 0x0036 -> DIGIT SIX + u'7' # 0x0037 -> DIGIT SEVEN + u'8' # 0x0038 -> DIGIT EIGHT + u'9' # 0x0039 -> DIGIT NINE + u':' # 0x003a -> COLON + u';' # 0x003b -> SEMICOLON + u'<' # 0x003c -> LESS-THAN SIGN + u'=' # 0x003d -> EQUALS SIGN + u'>' # 0x003e -> GREATER-THAN SIGN + u'?' # 0x003f -> QUESTION MARK + u'@' # 0x0040 -> COMMERCIAL AT + u'A' # 0x0041 -> LATIN CAPITAL LETTER A + u'B' # 0x0042 -> LATIN CAPITAL LETTER B + u'C' # 0x0043 -> LATIN CAPITAL LETTER C + u'D' # 0x0044 -> LATIN CAPITAL LETTER D + u'E' # 0x0045 -> LATIN CAPITAL LETTER E + u'F' # 0x0046 -> LATIN CAPITAL LETTER F + u'G' # 0x0047 -> LATIN CAPITAL LETTER G + u'H' # 0x0048 -> LATIN CAPITAL LETTER H + u'I' # 0x0049 -> LATIN CAPITAL LETTER I + u'J' # 0x004a -> LATIN CAPITAL LETTER J + u'K' # 0x004b -> LATIN CAPITAL LETTER K + u'L' # 0x004c -> LATIN CAPITAL LETTER L + u'M' # 0x004d -> LATIN CAPITAL LETTER M + u'N' # 0x004e -> LATIN CAPITAL LETTER N + u'O' # 0x004f -> LATIN CAPITAL LETTER O + u'P' # 0x0050 -> LATIN CAPITAL LETTER P + u'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + u'R' # 0x0052 -> LATIN CAPITAL LETTER R + u'S' # 0x0053 -> LATIN CAPITAL LETTER S + u'T' # 0x0054 -> LATIN CAPITAL LETTER T + u'U' # 0x0055 -> LATIN CAPITAL LETTER U + u'V' # 0x0056 -> LATIN CAPITAL LETTER V + u'W' # 0x0057 -> LATIN CAPITAL LETTER W + u'X' # 0x0058 -> LATIN CAPITAL LETTER X + u'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + u'Z' # 0x005a -> LATIN CAPITAL LETTER Z + u'[' # 0x005b -> LEFT SQUARE BRACKET + u'\\' # 0x005c -> REVERSE SOLIDUS + u']' # 0x005d -> RIGHT SQUARE BRACKET + u'^' # 0x005e -> CIRCUMFLEX ACCENT + u'_' # 0x005f -> LOW LINE + u'`' # 0x0060 -> GRAVE ACCENT + u'a' # 0x0061 -> LATIN SMALL LETTER A + u'b' # 0x0062 -> LATIN SMALL LETTER B + u'c' # 0x0063 -> LATIN SMALL LETTER C + u'd' # 0x0064 -> LATIN SMALL LETTER D + u'e' # 0x0065 -> LATIN SMALL LETTER E + u'f' # 0x0066 -> LATIN SMALL LETTER F + u'g' # 0x0067 -> LATIN SMALL LETTER G + u'h' # 0x0068 -> LATIN SMALL LETTER H + u'i' # 0x0069 -> LATIN SMALL LETTER I + u'j' # 0x006a -> LATIN SMALL LETTER J + u'k' # 0x006b -> LATIN SMALL LETTER K + u'l' # 0x006c -> LATIN SMALL LETTER L + u'm' # 0x006d -> LATIN SMALL LETTER M + u'n' # 0x006e -> LATIN SMALL LETTER N + u'o' # 0x006f -> LATIN SMALL LETTER O + u'p' # 0x0070 -> LATIN SMALL LETTER P + u'q' # 0x0071 -> LATIN SMALL LETTER Q + u'r' # 0x0072 -> LATIN SMALL LETTER R + u's' # 0x0073 -> LATIN SMALL LETTER S + u't' # 0x0074 -> LATIN SMALL LETTER T + u'u' # 0x0075 -> LATIN SMALL LETTER U + u'v' # 0x0076 -> LATIN SMALL LETTER V + u'w' # 0x0077 -> LATIN SMALL LETTER W + u'x' # 0x0078 -> LATIN SMALL LETTER X + u'y' # 0x0079 -> LATIN SMALL LETTER Y + u'z' # 0x007a -> LATIN SMALL LETTER Z + u'{' # 0x007b -> LEFT CURLY BRACKET + u'|' # 0x007c -> VERTICAL LINE + u'}' # 0x007d -> RIGHT CURLY BRACKET + u'~' # 0x007e -> TILDE + u'\x7f' # 0x007f -> DELETE + u'\u0410' # 0x0080 -> CYRILLIC CAPITAL LETTER A + u'\u0411' # 0x0081 -> CYRILLIC CAPITAL LETTER BE + u'\u0412' # 0x0082 -> CYRILLIC CAPITAL LETTER VE + u'\u0413' # 0x0083 -> CYRILLIC CAPITAL LETTER GHE + u'\u0414' # 0x0084 -> CYRILLIC CAPITAL LETTER DE + u'\u0415' # 0x0085 -> CYRILLIC CAPITAL LETTER IE + u'\u0416' # 0x0086 -> CYRILLIC CAPITAL LETTER ZHE + u'\u0417' # 0x0087 -> CYRILLIC CAPITAL LETTER ZE + u'\u0418' # 0x0088 -> CYRILLIC CAPITAL LETTER I + u'\u0419' # 0x0089 -> CYRILLIC CAPITAL LETTER SHORT I + u'\u041a' # 0x008a -> CYRILLIC CAPITAL LETTER KA + u'\u041b' # 0x008b -> CYRILLIC CAPITAL LETTER EL + u'\u041c' # 0x008c -> CYRILLIC CAPITAL LETTER EM + u'\u041d' # 0x008d -> CYRILLIC CAPITAL LETTER EN + u'\u041e' # 0x008e -> CYRILLIC CAPITAL LETTER O + u'\u041f' # 0x008f -> CYRILLIC CAPITAL LETTER PE + u'\u0420' # 0x0090 -> CYRILLIC CAPITAL LETTER ER + u'\u0421' # 0x0091 -> CYRILLIC CAPITAL LETTER ES + u'\u0422' # 0x0092 -> CYRILLIC CAPITAL LETTER TE + u'\u0423' # 0x0093 -> CYRILLIC CAPITAL LETTER U + u'\u0424' # 0x0094 -> CYRILLIC CAPITAL LETTER EF + u'\u0425' # 0x0095 -> CYRILLIC CAPITAL LETTER HA + u'\u0426' # 0x0096 -> CYRILLIC CAPITAL LETTER TSE + u'\u0427' # 0x0097 -> CYRILLIC CAPITAL LETTER CHE + u'\u0428' # 0x0098 -> CYRILLIC CAPITAL LETTER SHA + u'\u0429' # 0x0099 -> CYRILLIC CAPITAL LETTER SHCHA + u'\u042a' # 0x009a -> CYRILLIC CAPITAL LETTER HARD SIGN + u'\u042b' # 0x009b -> CYRILLIC CAPITAL LETTER YERU + u'\u042c' # 0x009c -> CYRILLIC CAPITAL LETTER SOFT SIGN + u'\u042d' # 0x009d -> CYRILLIC CAPITAL LETTER E + u'\u042e' # 0x009e -> CYRILLIC CAPITAL LETTER YU + u'\u042f' # 0x009f -> CYRILLIC CAPITAL LETTER YA + u'\u0430' # 0x00a0 -> CYRILLIC SMALL LETTER A + u'\u0431' # 0x00a1 -> CYRILLIC SMALL LETTER BE + u'\u0432' # 0x00a2 -> CYRILLIC SMALL LETTER VE + u'\u0433' # 0x00a3 -> CYRILLIC SMALL LETTER GHE + u'\u0434' # 0x00a4 -> CYRILLIC SMALL LETTER DE + u'\u0435' # 0x00a5 -> CYRILLIC SMALL LETTER IE + u'\u0436' # 0x00a6 -> CYRILLIC SMALL LETTER ZHE + u'\u0437' # 0x00a7 -> CYRILLIC SMALL LETTER ZE + u'\u0438' # 0x00a8 -> CYRILLIC SMALL LETTER I + u'\u0439' # 0x00a9 -> CYRILLIC SMALL LETTER SHORT I + u'\u043a' # 0x00aa -> CYRILLIC SMALL LETTER KA + u'\u043b' # 0x00ab -> CYRILLIC SMALL LETTER EL + u'\u043c' # 0x00ac -> CYRILLIC SMALL LETTER EM + u'\u043d' # 0x00ad -> CYRILLIC SMALL LETTER EN + u'\u043e' # 0x00ae -> CYRILLIC SMALL LETTER O + u'\u043f' # 0x00af -> CYRILLIC SMALL LETTER PE + u'\u2591' # 0x00b0 -> LIGHT SHADE + u'\u2592' # 0x00b1 -> MEDIUM SHADE + u'\u2593' # 0x00b2 -> DARK SHADE + u'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + u'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + u'\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + u'\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + u'\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + u'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + u'\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + u'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + u'\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + u'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + u'\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + u'\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + u'\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + u'\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + u'\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + u'\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + u'\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + u'\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + u'\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + u'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2588' # 0x00db -> FULL BLOCK + u'\u2584' # 0x00dc -> LOWER HALF BLOCK + u'\u258c' # 0x00dd -> LEFT HALF BLOCK + u'\u2590' # 0x00de -> RIGHT HALF BLOCK + u'\u2580' # 0x00df -> UPPER HALF BLOCK + u'\u0440' # 0x00e0 -> CYRILLIC SMALL LETTER ER + u'\u0441' # 0x00e1 -> CYRILLIC SMALL LETTER ES + u'\u0442' # 0x00e2 -> CYRILLIC SMALL LETTER TE + u'\u0443' # 0x00e3 -> CYRILLIC SMALL LETTER U + u'\u0444' # 0x00e4 -> CYRILLIC SMALL LETTER EF + u'\u0445' # 0x00e5 -> CYRILLIC SMALL LETTER HA + u'\u0446' # 0x00e6 -> CYRILLIC SMALL LETTER TSE + u'\u0447' # 0x00e7 -> CYRILLIC SMALL LETTER CHE + u'\u0448' # 0x00e8 -> CYRILLIC SMALL LETTER SHA + u'\u0449' # 0x00e9 -> CYRILLIC SMALL LETTER SHCHA + u'\u044a' # 0x00ea -> CYRILLIC SMALL LETTER HARD SIGN + u'\u044b' # 0x00eb -> CYRILLIC SMALL LETTER YERU + u'\u044c' # 0x00ec -> CYRILLIC SMALL LETTER SOFT SIGN + u'\u044d' # 0x00ed -> CYRILLIC SMALL LETTER E + u'\u044e' # 0x00ee -> CYRILLIC SMALL LETTER YU + u'\u044f' # 0x00ef -> CYRILLIC SMALL LETTER YA + u'\u0401' # 0x00f0 -> CYRILLIC CAPITAL LETTER IO + u'\u0451' # 0x00f1 -> CYRILLIC SMALL LETTER IO + u'\u0404' # 0x00f2 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE + u'\u0454' # 0x00f3 -> CYRILLIC SMALL LETTER UKRAINIAN IE + u'\u0407' # 0x00f4 -> CYRILLIC CAPITAL LETTER YI + u'\u0457' # 0x00f5 -> CYRILLIC SMALL LETTER YI + u'\u040e' # 0x00f6 -> CYRILLIC CAPITAL LETTER SHORT U + u'\u045e' # 0x00f7 -> CYRILLIC SMALL LETTER SHORT U + u'\xb0' # 0x00f8 -> DEGREE SIGN + u'\u2219' # 0x00f9 -> BULLET OPERATOR + u'\xb7' # 0x00fa -> MIDDLE DOT + u'\u221a' # 0x00fb -> SQUARE ROOT + u'\u2116' # 0x00fc -> NUMERO SIGN + u'\xa4' # 0x00fd -> CURRENCY SIGN + u'\u25a0' # 0x00fe -> BLACK SQUARE + u'\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a4: 0x00fd, # CURRENCY SIGN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b7: 0x00fa, # MIDDLE DOT + 0x0401: 0x00f0, # CYRILLIC CAPITAL LETTER IO + 0x0404: 0x00f2, # CYRILLIC CAPITAL LETTER UKRAINIAN IE + 0x0407: 0x00f4, # CYRILLIC CAPITAL LETTER YI + 0x040e: 0x00f6, # CYRILLIC CAPITAL LETTER SHORT U + 0x0410: 0x0080, # CYRILLIC CAPITAL LETTER A + 0x0411: 0x0081, # CYRILLIC CAPITAL LETTER BE + 0x0412: 0x0082, # CYRILLIC CAPITAL LETTER VE + 0x0413: 0x0083, # CYRILLIC CAPITAL LETTER GHE + 0x0414: 0x0084, # CYRILLIC CAPITAL LETTER DE + 0x0415: 0x0085, # CYRILLIC CAPITAL LETTER IE + 0x0416: 0x0086, # CYRILLIC CAPITAL LETTER ZHE + 0x0417: 0x0087, # CYRILLIC CAPITAL LETTER ZE + 0x0418: 0x0088, # CYRILLIC CAPITAL LETTER I + 0x0419: 0x0089, # CYRILLIC CAPITAL LETTER SHORT I + 0x041a: 0x008a, # CYRILLIC CAPITAL LETTER KA + 0x041b: 0x008b, # CYRILLIC CAPITAL LETTER EL + 0x041c: 0x008c, # CYRILLIC CAPITAL LETTER EM + 0x041d: 0x008d, # CYRILLIC CAPITAL LETTER EN + 0x041e: 0x008e, # CYRILLIC CAPITAL LETTER O + 0x041f: 0x008f, # CYRILLIC CAPITAL LETTER PE + 0x0420: 0x0090, # CYRILLIC CAPITAL LETTER ER + 0x0421: 0x0091, # CYRILLIC CAPITAL LETTER ES + 0x0422: 0x0092, # CYRILLIC CAPITAL LETTER TE + 0x0423: 0x0093, # CYRILLIC CAPITAL LETTER U + 0x0424: 0x0094, # CYRILLIC CAPITAL LETTER EF + 0x0425: 0x0095, # CYRILLIC CAPITAL LETTER HA + 0x0426: 0x0096, # CYRILLIC CAPITAL LETTER TSE + 0x0427: 0x0097, # CYRILLIC CAPITAL LETTER CHE + 0x0428: 0x0098, # CYRILLIC CAPITAL LETTER SHA + 0x0429: 0x0099, # CYRILLIC CAPITAL LETTER SHCHA + 0x042a: 0x009a, # CYRILLIC CAPITAL LETTER HARD SIGN + 0x042b: 0x009b, # CYRILLIC CAPITAL LETTER YERU + 0x042c: 0x009c, # CYRILLIC CAPITAL LETTER SOFT SIGN + 0x042d: 0x009d, # CYRILLIC CAPITAL LETTER E + 0x042e: 0x009e, # CYRILLIC CAPITAL LETTER YU + 0x042f: 0x009f, # CYRILLIC CAPITAL LETTER YA + 0x0430: 0x00a0, # CYRILLIC SMALL LETTER A + 0x0431: 0x00a1, # CYRILLIC SMALL LETTER BE + 0x0432: 0x00a2, # CYRILLIC SMALL LETTER VE + 0x0433: 0x00a3, # CYRILLIC SMALL LETTER GHE + 0x0434: 0x00a4, # CYRILLIC SMALL LETTER DE + 0x0435: 0x00a5, # CYRILLIC SMALL LETTER IE + 0x0436: 0x00a6, # CYRILLIC SMALL LETTER ZHE + 0x0437: 0x00a7, # CYRILLIC SMALL LETTER ZE + 0x0438: 0x00a8, # CYRILLIC SMALL LETTER I + 0x0439: 0x00a9, # CYRILLIC SMALL LETTER SHORT I + 0x043a: 0x00aa, # CYRILLIC SMALL LETTER KA + 0x043b: 0x00ab, # CYRILLIC SMALL LETTER EL + 0x043c: 0x00ac, # CYRILLIC SMALL LETTER EM + 0x043d: 0x00ad, # CYRILLIC SMALL LETTER EN + 0x043e: 0x00ae, # CYRILLIC SMALL LETTER O + 0x043f: 0x00af, # CYRILLIC SMALL LETTER PE + 0x0440: 0x00e0, # CYRILLIC SMALL LETTER ER + 0x0441: 0x00e1, # CYRILLIC SMALL LETTER ES + 0x0442: 0x00e2, # CYRILLIC SMALL LETTER TE + 0x0443: 0x00e3, # CYRILLIC SMALL LETTER U + 0x0444: 0x00e4, # CYRILLIC SMALL LETTER EF + 0x0445: 0x00e5, # CYRILLIC SMALL LETTER HA + 0x0446: 0x00e6, # CYRILLIC SMALL LETTER TSE + 0x0447: 0x00e7, # CYRILLIC SMALL LETTER CHE + 0x0448: 0x00e8, # CYRILLIC SMALL LETTER SHA + 0x0449: 0x00e9, # CYRILLIC SMALL LETTER SHCHA + 0x044a: 0x00ea, # CYRILLIC SMALL LETTER HARD SIGN + 0x044b: 0x00eb, # CYRILLIC SMALL LETTER YERU + 0x044c: 0x00ec, # CYRILLIC SMALL LETTER SOFT SIGN + 0x044d: 0x00ed, # CYRILLIC SMALL LETTER E + 0x044e: 0x00ee, # CYRILLIC SMALL LETTER YU + 0x044f: 0x00ef, # CYRILLIC SMALL LETTER YA + 0x0451: 0x00f1, # CYRILLIC SMALL LETTER IO + 0x0454: 0x00f3, # CYRILLIC SMALL LETTER UKRAINIAN IE + 0x0457: 0x00f5, # CYRILLIC SMALL LETTER YI + 0x045e: 0x00f7, # CYRILLIC SMALL LETTER SHORT U + 0x2116: 0x00fc, # NUMERO SIGN + 0x2219: 0x00f9, # BULLET OPERATOR + 0x221a: 0x00fb, # SQUARE ROOT + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + 0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + 0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + 0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + 0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + 0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + 0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + 0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + 0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + 0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x258c: 0x00dd, # LEFT HALF BLOCK + 0x2590: 0x00de, # RIGHT HALF BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/thirdparty/python25/Lib/encodings/cp869.py b/thirdparty/python25/Lib/encodings/cp869.py new file mode 100644 index 000000000..59e33186e --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp869.py @@ -0,0 +1,689 @@ +""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP869.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp869', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: None, # UNDEFINED + 0x0081: None, # UNDEFINED + 0x0082: None, # UNDEFINED + 0x0083: None, # UNDEFINED + 0x0084: None, # UNDEFINED + 0x0085: None, # UNDEFINED + 0x0086: 0x0386, # GREEK CAPITAL LETTER ALPHA WITH TONOS + 0x0087: None, # UNDEFINED + 0x0088: 0x00b7, # MIDDLE DOT + 0x0089: 0x00ac, # NOT SIGN + 0x008a: 0x00a6, # BROKEN BAR + 0x008b: 0x2018, # LEFT SINGLE QUOTATION MARK + 0x008c: 0x2019, # RIGHT SINGLE QUOTATION MARK + 0x008d: 0x0388, # GREEK CAPITAL LETTER EPSILON WITH TONOS + 0x008e: 0x2015, # HORIZONTAL BAR + 0x008f: 0x0389, # GREEK CAPITAL LETTER ETA WITH TONOS + 0x0090: 0x038a, # GREEK CAPITAL LETTER IOTA WITH TONOS + 0x0091: 0x03aa, # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + 0x0092: 0x038c, # GREEK CAPITAL LETTER OMICRON WITH TONOS + 0x0093: None, # UNDEFINED + 0x0094: None, # UNDEFINED + 0x0095: 0x038e, # GREEK CAPITAL LETTER UPSILON WITH TONOS + 0x0096: 0x03ab, # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + 0x0097: 0x00a9, # COPYRIGHT SIGN + 0x0098: 0x038f, # GREEK CAPITAL LETTER OMEGA WITH TONOS + 0x0099: 0x00b2, # SUPERSCRIPT TWO + 0x009a: 0x00b3, # SUPERSCRIPT THREE + 0x009b: 0x03ac, # GREEK SMALL LETTER ALPHA WITH TONOS + 0x009c: 0x00a3, # POUND SIGN + 0x009d: 0x03ad, # GREEK SMALL LETTER EPSILON WITH TONOS + 0x009e: 0x03ae, # GREEK SMALL LETTER ETA WITH TONOS + 0x009f: 0x03af, # GREEK SMALL LETTER IOTA WITH TONOS + 0x00a0: 0x03ca, # GREEK SMALL LETTER IOTA WITH DIALYTIKA + 0x00a1: 0x0390, # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + 0x00a2: 0x03cc, # GREEK SMALL LETTER OMICRON WITH TONOS + 0x00a3: 0x03cd, # GREEK SMALL LETTER UPSILON WITH TONOS + 0x00a4: 0x0391, # GREEK CAPITAL LETTER ALPHA + 0x00a5: 0x0392, # GREEK CAPITAL LETTER BETA + 0x00a6: 0x0393, # GREEK CAPITAL LETTER GAMMA + 0x00a7: 0x0394, # GREEK CAPITAL LETTER DELTA + 0x00a8: 0x0395, # GREEK CAPITAL LETTER EPSILON + 0x00a9: 0x0396, # GREEK CAPITAL LETTER ZETA + 0x00aa: 0x0397, # GREEK CAPITAL LETTER ETA + 0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00ac: 0x0398, # GREEK CAPITAL LETTER THETA + 0x00ad: 0x0399, # GREEK CAPITAL LETTER IOTA + 0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00b0: 0x2591, # LIGHT SHADE + 0x00b1: 0x2592, # MEDIUM SHADE + 0x00b2: 0x2593, # DARK SHADE + 0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL + 0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x00b5: 0x039a, # GREEK CAPITAL LETTER KAPPA + 0x00b6: 0x039b, # GREEK CAPITAL LETTER LAMDA + 0x00b7: 0x039c, # GREEK CAPITAL LETTER MU + 0x00b8: 0x039d, # GREEK CAPITAL LETTER NU + 0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL + 0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x00bd: 0x039e, # GREEK CAPITAL LETTER XI + 0x00be: 0x039f, # GREEK CAPITAL LETTER OMICRON + 0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL + 0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x00c6: 0x03a0, # GREEK CAPITAL LETTER PI + 0x00c7: 0x03a1, # GREEK CAPITAL LETTER RHO + 0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x00cf: 0x03a3, # GREEK CAPITAL LETTER SIGMA + 0x00d0: 0x03a4, # GREEK CAPITAL LETTER TAU + 0x00d1: 0x03a5, # GREEK CAPITAL LETTER UPSILON + 0x00d2: 0x03a6, # GREEK CAPITAL LETTER PHI + 0x00d3: 0x03a7, # GREEK CAPITAL LETTER CHI + 0x00d4: 0x03a8, # GREEK CAPITAL LETTER PSI + 0x00d5: 0x03a9, # GREEK CAPITAL LETTER OMEGA + 0x00d6: 0x03b1, # GREEK SMALL LETTER ALPHA + 0x00d7: 0x03b2, # GREEK SMALL LETTER BETA + 0x00d8: 0x03b3, # GREEK SMALL LETTER GAMMA + 0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT + 0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x00db: 0x2588, # FULL BLOCK + 0x00dc: 0x2584, # LOWER HALF BLOCK + 0x00dd: 0x03b4, # GREEK SMALL LETTER DELTA + 0x00de: 0x03b5, # GREEK SMALL LETTER EPSILON + 0x00df: 0x2580, # UPPER HALF BLOCK + 0x00e0: 0x03b6, # GREEK SMALL LETTER ZETA + 0x00e1: 0x03b7, # GREEK SMALL LETTER ETA + 0x00e2: 0x03b8, # GREEK SMALL LETTER THETA + 0x00e3: 0x03b9, # GREEK SMALL LETTER IOTA + 0x00e4: 0x03ba, # GREEK SMALL LETTER KAPPA + 0x00e5: 0x03bb, # GREEK SMALL LETTER LAMDA + 0x00e6: 0x03bc, # GREEK SMALL LETTER MU + 0x00e7: 0x03bd, # GREEK SMALL LETTER NU + 0x00e8: 0x03be, # GREEK SMALL LETTER XI + 0x00e9: 0x03bf, # GREEK SMALL LETTER OMICRON + 0x00ea: 0x03c0, # GREEK SMALL LETTER PI + 0x00eb: 0x03c1, # GREEK SMALL LETTER RHO + 0x00ec: 0x03c3, # GREEK SMALL LETTER SIGMA + 0x00ed: 0x03c2, # GREEK SMALL LETTER FINAL SIGMA + 0x00ee: 0x03c4, # GREEK SMALL LETTER TAU + 0x00ef: 0x0384, # GREEK TONOS + 0x00f0: 0x00ad, # SOFT HYPHEN + 0x00f1: 0x00b1, # PLUS-MINUS SIGN + 0x00f2: 0x03c5, # GREEK SMALL LETTER UPSILON + 0x00f3: 0x03c6, # GREEK SMALL LETTER PHI + 0x00f4: 0x03c7, # GREEK SMALL LETTER CHI + 0x00f5: 0x00a7, # SECTION SIGN + 0x00f6: 0x03c8, # GREEK SMALL LETTER PSI + 0x00f7: 0x0385, # GREEK DIALYTIKA TONOS + 0x00f8: 0x00b0, # DEGREE SIGN + 0x00f9: 0x00a8, # DIAERESIS + 0x00fa: 0x03c9, # GREEK SMALL LETTER OMEGA + 0x00fb: 0x03cb, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA + 0x00fc: 0x03b0, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + 0x00fd: 0x03ce, # GREEK SMALL LETTER OMEGA WITH TONOS + 0x00fe: 0x25a0, # BLACK SQUARE + 0x00ff: 0x00a0, # NO-BREAK SPACE +}) + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x0000 -> NULL + u'\x01' # 0x0001 -> START OF HEADING + u'\x02' # 0x0002 -> START OF TEXT + u'\x03' # 0x0003 -> END OF TEXT + u'\x04' # 0x0004 -> END OF TRANSMISSION + u'\x05' # 0x0005 -> ENQUIRY + u'\x06' # 0x0006 -> ACKNOWLEDGE + u'\x07' # 0x0007 -> BELL + u'\x08' # 0x0008 -> BACKSPACE + u'\t' # 0x0009 -> HORIZONTAL TABULATION + u'\n' # 0x000a -> LINE FEED + u'\x0b' # 0x000b -> VERTICAL TABULATION + u'\x0c' # 0x000c -> FORM FEED + u'\r' # 0x000d -> CARRIAGE RETURN + u'\x0e' # 0x000e -> SHIFT OUT + u'\x0f' # 0x000f -> SHIFT IN + u'\x10' # 0x0010 -> DATA LINK ESCAPE + u'\x11' # 0x0011 -> DEVICE CONTROL ONE + u'\x12' # 0x0012 -> DEVICE CONTROL TWO + u'\x13' # 0x0013 -> DEVICE CONTROL THREE + u'\x14' # 0x0014 -> DEVICE CONTROL FOUR + u'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x0016 -> SYNCHRONOUS IDLE + u'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x0018 -> CANCEL + u'\x19' # 0x0019 -> END OF MEDIUM + u'\x1a' # 0x001a -> SUBSTITUTE + u'\x1b' # 0x001b -> ESCAPE + u'\x1c' # 0x001c -> FILE SEPARATOR + u'\x1d' # 0x001d -> GROUP SEPARATOR + u'\x1e' # 0x001e -> RECORD SEPARATOR + u'\x1f' # 0x001f -> UNIT SEPARATOR + u' ' # 0x0020 -> SPACE + u'!' # 0x0021 -> EXCLAMATION MARK + u'"' # 0x0022 -> QUOTATION MARK + u'#' # 0x0023 -> NUMBER SIGN + u'$' # 0x0024 -> DOLLAR SIGN + u'%' # 0x0025 -> PERCENT SIGN + u'&' # 0x0026 -> AMPERSAND + u"'" # 0x0027 -> APOSTROPHE + u'(' # 0x0028 -> LEFT PARENTHESIS + u')' # 0x0029 -> RIGHT PARENTHESIS + u'*' # 0x002a -> ASTERISK + u'+' # 0x002b -> PLUS SIGN + u',' # 0x002c -> COMMA + u'-' # 0x002d -> HYPHEN-MINUS + u'.' # 0x002e -> FULL STOP + u'/' # 0x002f -> SOLIDUS + u'0' # 0x0030 -> DIGIT ZERO + u'1' # 0x0031 -> DIGIT ONE + u'2' # 0x0032 -> DIGIT TWO + u'3' # 0x0033 -> DIGIT THREE + u'4' # 0x0034 -> DIGIT FOUR + u'5' # 0x0035 -> DIGIT FIVE + u'6' # 0x0036 -> DIGIT SIX + u'7' # 0x0037 -> DIGIT SEVEN + u'8' # 0x0038 -> DIGIT EIGHT + u'9' # 0x0039 -> DIGIT NINE + u':' # 0x003a -> COLON + u';' # 0x003b -> SEMICOLON + u'<' # 0x003c -> LESS-THAN SIGN + u'=' # 0x003d -> EQUALS SIGN + u'>' # 0x003e -> GREATER-THAN SIGN + u'?' # 0x003f -> QUESTION MARK + u'@' # 0x0040 -> COMMERCIAL AT + u'A' # 0x0041 -> LATIN CAPITAL LETTER A + u'B' # 0x0042 -> LATIN CAPITAL LETTER B + u'C' # 0x0043 -> LATIN CAPITAL LETTER C + u'D' # 0x0044 -> LATIN CAPITAL LETTER D + u'E' # 0x0045 -> LATIN CAPITAL LETTER E + u'F' # 0x0046 -> LATIN CAPITAL LETTER F + u'G' # 0x0047 -> LATIN CAPITAL LETTER G + u'H' # 0x0048 -> LATIN CAPITAL LETTER H + u'I' # 0x0049 -> LATIN CAPITAL LETTER I + u'J' # 0x004a -> LATIN CAPITAL LETTER J + u'K' # 0x004b -> LATIN CAPITAL LETTER K + u'L' # 0x004c -> LATIN CAPITAL LETTER L + u'M' # 0x004d -> LATIN CAPITAL LETTER M + u'N' # 0x004e -> LATIN CAPITAL LETTER N + u'O' # 0x004f -> LATIN CAPITAL LETTER O + u'P' # 0x0050 -> LATIN CAPITAL LETTER P + u'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + u'R' # 0x0052 -> LATIN CAPITAL LETTER R + u'S' # 0x0053 -> LATIN CAPITAL LETTER S + u'T' # 0x0054 -> LATIN CAPITAL LETTER T + u'U' # 0x0055 -> LATIN CAPITAL LETTER U + u'V' # 0x0056 -> LATIN CAPITAL LETTER V + u'W' # 0x0057 -> LATIN CAPITAL LETTER W + u'X' # 0x0058 -> LATIN CAPITAL LETTER X + u'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + u'Z' # 0x005a -> LATIN CAPITAL LETTER Z + u'[' # 0x005b -> LEFT SQUARE BRACKET + u'\\' # 0x005c -> REVERSE SOLIDUS + u']' # 0x005d -> RIGHT SQUARE BRACKET + u'^' # 0x005e -> CIRCUMFLEX ACCENT + u'_' # 0x005f -> LOW LINE + u'`' # 0x0060 -> GRAVE ACCENT + u'a' # 0x0061 -> LATIN SMALL LETTER A + u'b' # 0x0062 -> LATIN SMALL LETTER B + u'c' # 0x0063 -> LATIN SMALL LETTER C + u'd' # 0x0064 -> LATIN SMALL LETTER D + u'e' # 0x0065 -> LATIN SMALL LETTER E + u'f' # 0x0066 -> LATIN SMALL LETTER F + u'g' # 0x0067 -> LATIN SMALL LETTER G + u'h' # 0x0068 -> LATIN SMALL LETTER H + u'i' # 0x0069 -> LATIN SMALL LETTER I + u'j' # 0x006a -> LATIN SMALL LETTER J + u'k' # 0x006b -> LATIN SMALL LETTER K + u'l' # 0x006c -> LATIN SMALL LETTER L + u'm' # 0x006d -> LATIN SMALL LETTER M + u'n' # 0x006e -> LATIN SMALL LETTER N + u'o' # 0x006f -> LATIN SMALL LETTER O + u'p' # 0x0070 -> LATIN SMALL LETTER P + u'q' # 0x0071 -> LATIN SMALL LETTER Q + u'r' # 0x0072 -> LATIN SMALL LETTER R + u's' # 0x0073 -> LATIN SMALL LETTER S + u't' # 0x0074 -> LATIN SMALL LETTER T + u'u' # 0x0075 -> LATIN SMALL LETTER U + u'v' # 0x0076 -> LATIN SMALL LETTER V + u'w' # 0x0077 -> LATIN SMALL LETTER W + u'x' # 0x0078 -> LATIN SMALL LETTER X + u'y' # 0x0079 -> LATIN SMALL LETTER Y + u'z' # 0x007a -> LATIN SMALL LETTER Z + u'{' # 0x007b -> LEFT CURLY BRACKET + u'|' # 0x007c -> VERTICAL LINE + u'}' # 0x007d -> RIGHT CURLY BRACKET + u'~' # 0x007e -> TILDE + u'\x7f' # 0x007f -> DELETE + u'\ufffe' # 0x0080 -> UNDEFINED + u'\ufffe' # 0x0081 -> UNDEFINED + u'\ufffe' # 0x0082 -> UNDEFINED + u'\ufffe' # 0x0083 -> UNDEFINED + u'\ufffe' # 0x0084 -> UNDEFINED + u'\ufffe' # 0x0085 -> UNDEFINED + u'\u0386' # 0x0086 -> GREEK CAPITAL LETTER ALPHA WITH TONOS + u'\ufffe' # 0x0087 -> UNDEFINED + u'\xb7' # 0x0088 -> MIDDLE DOT + u'\xac' # 0x0089 -> NOT SIGN + u'\xa6' # 0x008a -> BROKEN BAR + u'\u2018' # 0x008b -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0x008c -> RIGHT SINGLE QUOTATION MARK + u'\u0388' # 0x008d -> GREEK CAPITAL LETTER EPSILON WITH TONOS + u'\u2015' # 0x008e -> HORIZONTAL BAR + u'\u0389' # 0x008f -> GREEK CAPITAL LETTER ETA WITH TONOS + u'\u038a' # 0x0090 -> GREEK CAPITAL LETTER IOTA WITH TONOS + u'\u03aa' # 0x0091 -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + u'\u038c' # 0x0092 -> GREEK CAPITAL LETTER OMICRON WITH TONOS + u'\ufffe' # 0x0093 -> UNDEFINED + u'\ufffe' # 0x0094 -> UNDEFINED + u'\u038e' # 0x0095 -> GREEK CAPITAL LETTER UPSILON WITH TONOS + u'\u03ab' # 0x0096 -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + u'\xa9' # 0x0097 -> COPYRIGHT SIGN + u'\u038f' # 0x0098 -> GREEK CAPITAL LETTER OMEGA WITH TONOS + u'\xb2' # 0x0099 -> SUPERSCRIPT TWO + u'\xb3' # 0x009a -> SUPERSCRIPT THREE + u'\u03ac' # 0x009b -> GREEK SMALL LETTER ALPHA WITH TONOS + u'\xa3' # 0x009c -> POUND SIGN + u'\u03ad' # 0x009d -> GREEK SMALL LETTER EPSILON WITH TONOS + u'\u03ae' # 0x009e -> GREEK SMALL LETTER ETA WITH TONOS + u'\u03af' # 0x009f -> GREEK SMALL LETTER IOTA WITH TONOS + u'\u03ca' # 0x00a0 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA + u'\u0390' # 0x00a1 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + u'\u03cc' # 0x00a2 -> GREEK SMALL LETTER OMICRON WITH TONOS + u'\u03cd' # 0x00a3 -> GREEK SMALL LETTER UPSILON WITH TONOS + u'\u0391' # 0x00a4 -> GREEK CAPITAL LETTER ALPHA + u'\u0392' # 0x00a5 -> GREEK CAPITAL LETTER BETA + u'\u0393' # 0x00a6 -> GREEK CAPITAL LETTER GAMMA + u'\u0394' # 0x00a7 -> GREEK CAPITAL LETTER DELTA + u'\u0395' # 0x00a8 -> GREEK CAPITAL LETTER EPSILON + u'\u0396' # 0x00a9 -> GREEK CAPITAL LETTER ZETA + u'\u0397' # 0x00aa -> GREEK CAPITAL LETTER ETA + u'\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF + u'\u0398' # 0x00ac -> GREEK CAPITAL LETTER THETA + u'\u0399' # 0x00ad -> GREEK CAPITAL LETTER IOTA + u'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2591' # 0x00b0 -> LIGHT SHADE + u'\u2592' # 0x00b1 -> MEDIUM SHADE + u'\u2593' # 0x00b2 -> DARK SHADE + u'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL + u'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\u039a' # 0x00b5 -> GREEK CAPITAL LETTER KAPPA + u'\u039b' # 0x00b6 -> GREEK CAPITAL LETTER LAMDA + u'\u039c' # 0x00b7 -> GREEK CAPITAL LETTER MU + u'\u039d' # 0x00b8 -> GREEK CAPITAL LETTER NU + u'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\u039e' # 0x00bd -> GREEK CAPITAL LETTER XI + u'\u039f' # 0x00be -> GREEK CAPITAL LETTER OMICRON + u'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\u03a0' # 0x00c6 -> GREEK CAPITAL LETTER PI + u'\u03a1' # 0x00c7 -> GREEK CAPITAL LETTER RHO + u'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\u03a3' # 0x00cf -> GREEK CAPITAL LETTER SIGMA + u'\u03a4' # 0x00d0 -> GREEK CAPITAL LETTER TAU + u'\u03a5' # 0x00d1 -> GREEK CAPITAL LETTER UPSILON + u'\u03a6' # 0x00d2 -> GREEK CAPITAL LETTER PHI + u'\u03a7' # 0x00d3 -> GREEK CAPITAL LETTER CHI + u'\u03a8' # 0x00d4 -> GREEK CAPITAL LETTER PSI + u'\u03a9' # 0x00d5 -> GREEK CAPITAL LETTER OMEGA + u'\u03b1' # 0x00d6 -> GREEK SMALL LETTER ALPHA + u'\u03b2' # 0x00d7 -> GREEK SMALL LETTER BETA + u'\u03b3' # 0x00d8 -> GREEK SMALL LETTER GAMMA + u'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2588' # 0x00db -> FULL BLOCK + u'\u2584' # 0x00dc -> LOWER HALF BLOCK + u'\u03b4' # 0x00dd -> GREEK SMALL LETTER DELTA + u'\u03b5' # 0x00de -> GREEK SMALL LETTER EPSILON + u'\u2580' # 0x00df -> UPPER HALF BLOCK + u'\u03b6' # 0x00e0 -> GREEK SMALL LETTER ZETA + u'\u03b7' # 0x00e1 -> GREEK SMALL LETTER ETA + u'\u03b8' # 0x00e2 -> GREEK SMALL LETTER THETA + u'\u03b9' # 0x00e3 -> GREEK SMALL LETTER IOTA + u'\u03ba' # 0x00e4 -> GREEK SMALL LETTER KAPPA + u'\u03bb' # 0x00e5 -> GREEK SMALL LETTER LAMDA + u'\u03bc' # 0x00e6 -> GREEK SMALL LETTER MU + u'\u03bd' # 0x00e7 -> GREEK SMALL LETTER NU + u'\u03be' # 0x00e8 -> GREEK SMALL LETTER XI + u'\u03bf' # 0x00e9 -> GREEK SMALL LETTER OMICRON + u'\u03c0' # 0x00ea -> GREEK SMALL LETTER PI + u'\u03c1' # 0x00eb -> GREEK SMALL LETTER RHO + u'\u03c3' # 0x00ec -> GREEK SMALL LETTER SIGMA + u'\u03c2' # 0x00ed -> GREEK SMALL LETTER FINAL SIGMA + u'\u03c4' # 0x00ee -> GREEK SMALL LETTER TAU + u'\u0384' # 0x00ef -> GREEK TONOS + u'\xad' # 0x00f0 -> SOFT HYPHEN + u'\xb1' # 0x00f1 -> PLUS-MINUS SIGN + u'\u03c5' # 0x00f2 -> GREEK SMALL LETTER UPSILON + u'\u03c6' # 0x00f3 -> GREEK SMALL LETTER PHI + u'\u03c7' # 0x00f4 -> GREEK SMALL LETTER CHI + u'\xa7' # 0x00f5 -> SECTION SIGN + u'\u03c8' # 0x00f6 -> GREEK SMALL LETTER PSI + u'\u0385' # 0x00f7 -> GREEK DIALYTIKA TONOS + u'\xb0' # 0x00f8 -> DEGREE SIGN + u'\xa8' # 0x00f9 -> DIAERESIS + u'\u03c9' # 0x00fa -> GREEK SMALL LETTER OMEGA + u'\u03cb' # 0x00fb -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA + u'\u03b0' # 0x00fc -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + u'\u03ce' # 0x00fd -> GREEK SMALL LETTER OMEGA WITH TONOS + u'\u25a0' # 0x00fe -> BLACK SQUARE + u'\xa0' # 0x00ff -> NO-BREAK SPACE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # NULL + 0x0001: 0x0001, # START OF HEADING + 0x0002: 0x0002, # START OF TEXT + 0x0003: 0x0003, # END OF TEXT + 0x0004: 0x0004, # END OF TRANSMISSION + 0x0005: 0x0005, # ENQUIRY + 0x0006: 0x0006, # ACKNOWLEDGE + 0x0007: 0x0007, # BELL + 0x0008: 0x0008, # BACKSPACE + 0x0009: 0x0009, # HORIZONTAL TABULATION + 0x000a: 0x000a, # LINE FEED + 0x000b: 0x000b, # VERTICAL TABULATION + 0x000c: 0x000c, # FORM FEED + 0x000d: 0x000d, # CARRIAGE RETURN + 0x000e: 0x000e, # SHIFT OUT + 0x000f: 0x000f, # SHIFT IN + 0x0010: 0x0010, # DATA LINK ESCAPE + 0x0011: 0x0011, # DEVICE CONTROL ONE + 0x0012: 0x0012, # DEVICE CONTROL TWO + 0x0013: 0x0013, # DEVICE CONTROL THREE + 0x0014: 0x0014, # DEVICE CONTROL FOUR + 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE + 0x0016: 0x0016, # SYNCHRONOUS IDLE + 0x0017: 0x0017, # END OF TRANSMISSION BLOCK + 0x0018: 0x0018, # CANCEL + 0x0019: 0x0019, # END OF MEDIUM + 0x001a: 0x001a, # SUBSTITUTE + 0x001b: 0x001b, # ESCAPE + 0x001c: 0x001c, # FILE SEPARATOR + 0x001d: 0x001d, # GROUP SEPARATOR + 0x001e: 0x001e, # RECORD SEPARATOR + 0x001f: 0x001f, # UNIT SEPARATOR + 0x0020: 0x0020, # SPACE + 0x0021: 0x0021, # EXCLAMATION MARK + 0x0022: 0x0022, # QUOTATION MARK + 0x0023: 0x0023, # NUMBER SIGN + 0x0024: 0x0024, # DOLLAR SIGN + 0x0025: 0x0025, # PERCENT SIGN + 0x0026: 0x0026, # AMPERSAND + 0x0027: 0x0027, # APOSTROPHE + 0x0028: 0x0028, # LEFT PARENTHESIS + 0x0029: 0x0029, # RIGHT PARENTHESIS + 0x002a: 0x002a, # ASTERISK + 0x002b: 0x002b, # PLUS SIGN + 0x002c: 0x002c, # COMMA + 0x002d: 0x002d, # HYPHEN-MINUS + 0x002e: 0x002e, # FULL STOP + 0x002f: 0x002f, # SOLIDUS + 0x0030: 0x0030, # DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE + 0x003a: 0x003a, # COLON + 0x003b: 0x003b, # SEMICOLON + 0x003c: 0x003c, # LESS-THAN SIGN + 0x003d: 0x003d, # EQUALS SIGN + 0x003e: 0x003e, # GREATER-THAN SIGN + 0x003f: 0x003f, # QUESTION MARK + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET + 0x005c: 0x005c, # REVERSE SOLIDUS + 0x005d: 0x005d, # RIGHT SQUARE BRACKET + 0x005e: 0x005e, # CIRCUMFLEX ACCENT + 0x005f: 0x005f, # LOW LINE + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET + 0x007c: 0x007c, # VERTICAL LINE + 0x007d: 0x007d, # RIGHT CURLY BRACKET + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # DELETE + 0x00a0: 0x00ff, # NO-BREAK SPACE + 0x00a3: 0x009c, # POUND SIGN + 0x00a6: 0x008a, # BROKEN BAR + 0x00a7: 0x00f5, # SECTION SIGN + 0x00a8: 0x00f9, # DIAERESIS + 0x00a9: 0x0097, # COPYRIGHT SIGN + 0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00ac: 0x0089, # NOT SIGN + 0x00ad: 0x00f0, # SOFT HYPHEN + 0x00b0: 0x00f8, # DEGREE SIGN + 0x00b1: 0x00f1, # PLUS-MINUS SIGN + 0x00b2: 0x0099, # SUPERSCRIPT TWO + 0x00b3: 0x009a, # SUPERSCRIPT THREE + 0x00b7: 0x0088, # MIDDLE DOT + 0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF + 0x0384: 0x00ef, # GREEK TONOS + 0x0385: 0x00f7, # GREEK DIALYTIKA TONOS + 0x0386: 0x0086, # GREEK CAPITAL LETTER ALPHA WITH TONOS + 0x0388: 0x008d, # GREEK CAPITAL LETTER EPSILON WITH TONOS + 0x0389: 0x008f, # GREEK CAPITAL LETTER ETA WITH TONOS + 0x038a: 0x0090, # GREEK CAPITAL LETTER IOTA WITH TONOS + 0x038c: 0x0092, # GREEK CAPITAL LETTER OMICRON WITH TONOS + 0x038e: 0x0095, # GREEK CAPITAL LETTER UPSILON WITH TONOS + 0x038f: 0x0098, # GREEK CAPITAL LETTER OMEGA WITH TONOS + 0x0390: 0x00a1, # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + 0x0391: 0x00a4, # GREEK CAPITAL LETTER ALPHA + 0x0392: 0x00a5, # GREEK CAPITAL LETTER BETA + 0x0393: 0x00a6, # GREEK CAPITAL LETTER GAMMA + 0x0394: 0x00a7, # GREEK CAPITAL LETTER DELTA + 0x0395: 0x00a8, # GREEK CAPITAL LETTER EPSILON + 0x0396: 0x00a9, # GREEK CAPITAL LETTER ZETA + 0x0397: 0x00aa, # GREEK CAPITAL LETTER ETA + 0x0398: 0x00ac, # GREEK CAPITAL LETTER THETA + 0x0399: 0x00ad, # GREEK CAPITAL LETTER IOTA + 0x039a: 0x00b5, # GREEK CAPITAL LETTER KAPPA + 0x039b: 0x00b6, # GREEK CAPITAL LETTER LAMDA + 0x039c: 0x00b7, # GREEK CAPITAL LETTER MU + 0x039d: 0x00b8, # GREEK CAPITAL LETTER NU + 0x039e: 0x00bd, # GREEK CAPITAL LETTER XI + 0x039f: 0x00be, # GREEK CAPITAL LETTER OMICRON + 0x03a0: 0x00c6, # GREEK CAPITAL LETTER PI + 0x03a1: 0x00c7, # GREEK CAPITAL LETTER RHO + 0x03a3: 0x00cf, # GREEK CAPITAL LETTER SIGMA + 0x03a4: 0x00d0, # GREEK CAPITAL LETTER TAU + 0x03a5: 0x00d1, # GREEK CAPITAL LETTER UPSILON + 0x03a6: 0x00d2, # GREEK CAPITAL LETTER PHI + 0x03a7: 0x00d3, # GREEK CAPITAL LETTER CHI + 0x03a8: 0x00d4, # GREEK CAPITAL LETTER PSI + 0x03a9: 0x00d5, # GREEK CAPITAL LETTER OMEGA + 0x03aa: 0x0091, # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + 0x03ab: 0x0096, # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + 0x03ac: 0x009b, # GREEK SMALL LETTER ALPHA WITH TONOS + 0x03ad: 0x009d, # GREEK SMALL LETTER EPSILON WITH TONOS + 0x03ae: 0x009e, # GREEK SMALL LETTER ETA WITH TONOS + 0x03af: 0x009f, # GREEK SMALL LETTER IOTA WITH TONOS + 0x03b0: 0x00fc, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + 0x03b1: 0x00d6, # GREEK SMALL LETTER ALPHA + 0x03b2: 0x00d7, # GREEK SMALL LETTER BETA + 0x03b3: 0x00d8, # GREEK SMALL LETTER GAMMA + 0x03b4: 0x00dd, # GREEK SMALL LETTER DELTA + 0x03b5: 0x00de, # GREEK SMALL LETTER EPSILON + 0x03b6: 0x00e0, # GREEK SMALL LETTER ZETA + 0x03b7: 0x00e1, # GREEK SMALL LETTER ETA + 0x03b8: 0x00e2, # GREEK SMALL LETTER THETA + 0x03b9: 0x00e3, # GREEK SMALL LETTER IOTA + 0x03ba: 0x00e4, # GREEK SMALL LETTER KAPPA + 0x03bb: 0x00e5, # GREEK SMALL LETTER LAMDA + 0x03bc: 0x00e6, # GREEK SMALL LETTER MU + 0x03bd: 0x00e7, # GREEK SMALL LETTER NU + 0x03be: 0x00e8, # GREEK SMALL LETTER XI + 0x03bf: 0x00e9, # GREEK SMALL LETTER OMICRON + 0x03c0: 0x00ea, # GREEK SMALL LETTER PI + 0x03c1: 0x00eb, # GREEK SMALL LETTER RHO + 0x03c2: 0x00ed, # GREEK SMALL LETTER FINAL SIGMA + 0x03c3: 0x00ec, # GREEK SMALL LETTER SIGMA + 0x03c4: 0x00ee, # GREEK SMALL LETTER TAU + 0x03c5: 0x00f2, # GREEK SMALL LETTER UPSILON + 0x03c6: 0x00f3, # GREEK SMALL LETTER PHI + 0x03c7: 0x00f4, # GREEK SMALL LETTER CHI + 0x03c8: 0x00f6, # GREEK SMALL LETTER PSI + 0x03c9: 0x00fa, # GREEK SMALL LETTER OMEGA + 0x03ca: 0x00a0, # GREEK SMALL LETTER IOTA WITH DIALYTIKA + 0x03cb: 0x00fb, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA + 0x03cc: 0x00a2, # GREEK SMALL LETTER OMICRON WITH TONOS + 0x03cd: 0x00a3, # GREEK SMALL LETTER UPSILON WITH TONOS + 0x03ce: 0x00fd, # GREEK SMALL LETTER OMEGA WITH TONOS + 0x2015: 0x008e, # HORIZONTAL BAR + 0x2018: 0x008b, # LEFT SINGLE QUOTATION MARK + 0x2019: 0x008c, # RIGHT SINGLE QUOTATION MARK + 0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL + 0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL + 0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT + 0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT + 0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL + 0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL + 0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT + 0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT + 0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT + 0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT + 0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + 0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT + 0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + 0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL + 0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + 0x2580: 0x00df, # UPPER HALF BLOCK + 0x2584: 0x00dc, # LOWER HALF BLOCK + 0x2588: 0x00db, # FULL BLOCK + 0x2591: 0x00b0, # LIGHT SHADE + 0x2592: 0x00b1, # MEDIUM SHADE + 0x2593: 0x00b2, # DARK SHADE + 0x25a0: 0x00fe, # BLACK SQUARE +} diff --git a/thirdparty/python25/Lib/encodings/cp874.py b/thirdparty/python25/Lib/encodings/cp874.py new file mode 100644 index 000000000..66f112fb3 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp874.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp874 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP874.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp874', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\u20ac' # 0x80 -> EURO SIGN + u'\ufffe' # 0x81 -> UNDEFINED + u'\ufffe' # 0x82 -> UNDEFINED + u'\ufffe' # 0x83 -> UNDEFINED + u'\ufffe' # 0x84 -> UNDEFINED + u'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS + u'\ufffe' # 0x86 -> UNDEFINED + u'\ufffe' # 0x87 -> UNDEFINED + u'\ufffe' # 0x88 -> UNDEFINED + u'\ufffe' # 0x89 -> UNDEFINED + u'\ufffe' # 0x8A -> UNDEFINED + u'\ufffe' # 0x8B -> UNDEFINED + u'\ufffe' # 0x8C -> UNDEFINED + u'\ufffe' # 0x8D -> UNDEFINED + u'\ufffe' # 0x8E -> UNDEFINED + u'\ufffe' # 0x8F -> UNDEFINED + u'\ufffe' # 0x90 -> UNDEFINED + u'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK + u'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK + u'\u2022' # 0x95 -> BULLET + u'\u2013' # 0x96 -> EN DASH + u'\u2014' # 0x97 -> EM DASH + u'\ufffe' # 0x98 -> UNDEFINED + u'\ufffe' # 0x99 -> UNDEFINED + u'\ufffe' # 0x9A -> UNDEFINED + u'\ufffe' # 0x9B -> UNDEFINED + u'\ufffe' # 0x9C -> UNDEFINED + u'\ufffe' # 0x9D -> UNDEFINED + u'\ufffe' # 0x9E -> UNDEFINED + u'\ufffe' # 0x9F -> UNDEFINED + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\u0e01' # 0xA1 -> THAI CHARACTER KO KAI + u'\u0e02' # 0xA2 -> THAI CHARACTER KHO KHAI + u'\u0e03' # 0xA3 -> THAI CHARACTER KHO KHUAT + u'\u0e04' # 0xA4 -> THAI CHARACTER KHO KHWAI + u'\u0e05' # 0xA5 -> THAI CHARACTER KHO KHON + u'\u0e06' # 0xA6 -> THAI CHARACTER KHO RAKHANG + u'\u0e07' # 0xA7 -> THAI CHARACTER NGO NGU + u'\u0e08' # 0xA8 -> THAI CHARACTER CHO CHAN + u'\u0e09' # 0xA9 -> THAI CHARACTER CHO CHING + u'\u0e0a' # 0xAA -> THAI CHARACTER CHO CHANG + u'\u0e0b' # 0xAB -> THAI CHARACTER SO SO + u'\u0e0c' # 0xAC -> THAI CHARACTER CHO CHOE + u'\u0e0d' # 0xAD -> THAI CHARACTER YO YING + u'\u0e0e' # 0xAE -> THAI CHARACTER DO CHADA + u'\u0e0f' # 0xAF -> THAI CHARACTER TO PATAK + u'\u0e10' # 0xB0 -> THAI CHARACTER THO THAN + u'\u0e11' # 0xB1 -> THAI CHARACTER THO NANGMONTHO + u'\u0e12' # 0xB2 -> THAI CHARACTER THO PHUTHAO + u'\u0e13' # 0xB3 -> THAI CHARACTER NO NEN + u'\u0e14' # 0xB4 -> THAI CHARACTER DO DEK + u'\u0e15' # 0xB5 -> THAI CHARACTER TO TAO + u'\u0e16' # 0xB6 -> THAI CHARACTER THO THUNG + u'\u0e17' # 0xB7 -> THAI CHARACTER THO THAHAN + u'\u0e18' # 0xB8 -> THAI CHARACTER THO THONG + u'\u0e19' # 0xB9 -> THAI CHARACTER NO NU + u'\u0e1a' # 0xBA -> THAI CHARACTER BO BAIMAI + u'\u0e1b' # 0xBB -> THAI CHARACTER PO PLA + u'\u0e1c' # 0xBC -> THAI CHARACTER PHO PHUNG + u'\u0e1d' # 0xBD -> THAI CHARACTER FO FA + u'\u0e1e' # 0xBE -> THAI CHARACTER PHO PHAN + u'\u0e1f' # 0xBF -> THAI CHARACTER FO FAN + u'\u0e20' # 0xC0 -> THAI CHARACTER PHO SAMPHAO + u'\u0e21' # 0xC1 -> THAI CHARACTER MO MA + u'\u0e22' # 0xC2 -> THAI CHARACTER YO YAK + u'\u0e23' # 0xC3 -> THAI CHARACTER RO RUA + u'\u0e24' # 0xC4 -> THAI CHARACTER RU + u'\u0e25' # 0xC5 -> THAI CHARACTER LO LING + u'\u0e26' # 0xC6 -> THAI CHARACTER LU + u'\u0e27' # 0xC7 -> THAI CHARACTER WO WAEN + u'\u0e28' # 0xC8 -> THAI CHARACTER SO SALA + u'\u0e29' # 0xC9 -> THAI CHARACTER SO RUSI + u'\u0e2a' # 0xCA -> THAI CHARACTER SO SUA + u'\u0e2b' # 0xCB -> THAI CHARACTER HO HIP + u'\u0e2c' # 0xCC -> THAI CHARACTER LO CHULA + u'\u0e2d' # 0xCD -> THAI CHARACTER O ANG + u'\u0e2e' # 0xCE -> THAI CHARACTER HO NOKHUK + u'\u0e2f' # 0xCF -> THAI CHARACTER PAIYANNOI + u'\u0e30' # 0xD0 -> THAI CHARACTER SARA A + u'\u0e31' # 0xD1 -> THAI CHARACTER MAI HAN-AKAT + u'\u0e32' # 0xD2 -> THAI CHARACTER SARA AA + u'\u0e33' # 0xD3 -> THAI CHARACTER SARA AM + u'\u0e34' # 0xD4 -> THAI CHARACTER SARA I + u'\u0e35' # 0xD5 -> THAI CHARACTER SARA II + u'\u0e36' # 0xD6 -> THAI CHARACTER SARA UE + u'\u0e37' # 0xD7 -> THAI CHARACTER SARA UEE + u'\u0e38' # 0xD8 -> THAI CHARACTER SARA U + u'\u0e39' # 0xD9 -> THAI CHARACTER SARA UU + u'\u0e3a' # 0xDA -> THAI CHARACTER PHINTHU + u'\ufffe' # 0xDB -> UNDEFINED + u'\ufffe' # 0xDC -> UNDEFINED + u'\ufffe' # 0xDD -> UNDEFINED + u'\ufffe' # 0xDE -> UNDEFINED + u'\u0e3f' # 0xDF -> THAI CURRENCY SYMBOL BAHT + u'\u0e40' # 0xE0 -> THAI CHARACTER SARA E + u'\u0e41' # 0xE1 -> THAI CHARACTER SARA AE + u'\u0e42' # 0xE2 -> THAI CHARACTER SARA O + u'\u0e43' # 0xE3 -> THAI CHARACTER SARA AI MAIMUAN + u'\u0e44' # 0xE4 -> THAI CHARACTER SARA AI MAIMALAI + u'\u0e45' # 0xE5 -> THAI CHARACTER LAKKHANGYAO + u'\u0e46' # 0xE6 -> THAI CHARACTER MAIYAMOK + u'\u0e47' # 0xE7 -> THAI CHARACTER MAITAIKHU + u'\u0e48' # 0xE8 -> THAI CHARACTER MAI EK + u'\u0e49' # 0xE9 -> THAI CHARACTER MAI THO + u'\u0e4a' # 0xEA -> THAI CHARACTER MAI TRI + u'\u0e4b' # 0xEB -> THAI CHARACTER MAI CHATTAWA + u'\u0e4c' # 0xEC -> THAI CHARACTER THANTHAKHAT + u'\u0e4d' # 0xED -> THAI CHARACTER NIKHAHIT + u'\u0e4e' # 0xEE -> THAI CHARACTER YAMAKKAN + u'\u0e4f' # 0xEF -> THAI CHARACTER FONGMAN + u'\u0e50' # 0xF0 -> THAI DIGIT ZERO + u'\u0e51' # 0xF1 -> THAI DIGIT ONE + u'\u0e52' # 0xF2 -> THAI DIGIT TWO + u'\u0e53' # 0xF3 -> THAI DIGIT THREE + u'\u0e54' # 0xF4 -> THAI DIGIT FOUR + u'\u0e55' # 0xF5 -> THAI DIGIT FIVE + u'\u0e56' # 0xF6 -> THAI DIGIT SIX + u'\u0e57' # 0xF7 -> THAI DIGIT SEVEN + u'\u0e58' # 0xF8 -> THAI DIGIT EIGHT + u'\u0e59' # 0xF9 -> THAI DIGIT NINE + u'\u0e5a' # 0xFA -> THAI CHARACTER ANGKHANKHU + u'\u0e5b' # 0xFB -> THAI CHARACTER KHOMUT + u'\ufffe' # 0xFC -> UNDEFINED + u'\ufffe' # 0xFD -> UNDEFINED + u'\ufffe' # 0xFE -> UNDEFINED + u'\ufffe' # 0xFF -> UNDEFINED +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp875.py b/thirdparty/python25/Lib/encodings/cp875.py new file mode 100644 index 000000000..50bbef32b --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp875.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec cp875 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP875.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp875', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x9c' # 0x04 -> CONTROL + u'\t' # 0x05 -> HORIZONTAL TABULATION + u'\x86' # 0x06 -> CONTROL + u'\x7f' # 0x07 -> DELETE + u'\x97' # 0x08 -> CONTROL + u'\x8d' # 0x09 -> CONTROL + u'\x8e' # 0x0A -> CONTROL + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x9d' # 0x14 -> CONTROL + u'\x85' # 0x15 -> CONTROL + u'\x08' # 0x16 -> BACKSPACE + u'\x87' # 0x17 -> CONTROL + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x92' # 0x1A -> CONTROL + u'\x8f' # 0x1B -> CONTROL + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u'\x80' # 0x20 -> CONTROL + u'\x81' # 0x21 -> CONTROL + u'\x82' # 0x22 -> CONTROL + u'\x83' # 0x23 -> CONTROL + u'\x84' # 0x24 -> CONTROL + u'\n' # 0x25 -> LINE FEED + u'\x17' # 0x26 -> END OF TRANSMISSION BLOCK + u'\x1b' # 0x27 -> ESCAPE + u'\x88' # 0x28 -> CONTROL + u'\x89' # 0x29 -> CONTROL + u'\x8a' # 0x2A -> CONTROL + u'\x8b' # 0x2B -> CONTROL + u'\x8c' # 0x2C -> CONTROL + u'\x05' # 0x2D -> ENQUIRY + u'\x06' # 0x2E -> ACKNOWLEDGE + u'\x07' # 0x2F -> BELL + u'\x90' # 0x30 -> CONTROL + u'\x91' # 0x31 -> CONTROL + u'\x16' # 0x32 -> SYNCHRONOUS IDLE + u'\x93' # 0x33 -> CONTROL + u'\x94' # 0x34 -> CONTROL + u'\x95' # 0x35 -> CONTROL + u'\x96' # 0x36 -> CONTROL + u'\x04' # 0x37 -> END OF TRANSMISSION + u'\x98' # 0x38 -> CONTROL + u'\x99' # 0x39 -> CONTROL + u'\x9a' # 0x3A -> CONTROL + u'\x9b' # 0x3B -> CONTROL + u'\x14' # 0x3C -> DEVICE CONTROL FOUR + u'\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE + u'\x9e' # 0x3E -> CONTROL + u'\x1a' # 0x3F -> SUBSTITUTE + u' ' # 0x40 -> SPACE + u'\u0391' # 0x41 -> GREEK CAPITAL LETTER ALPHA + u'\u0392' # 0x42 -> GREEK CAPITAL LETTER BETA + u'\u0393' # 0x43 -> GREEK CAPITAL LETTER GAMMA + u'\u0394' # 0x44 -> GREEK CAPITAL LETTER DELTA + u'\u0395' # 0x45 -> GREEK CAPITAL LETTER EPSILON + u'\u0396' # 0x46 -> GREEK CAPITAL LETTER ZETA + u'\u0397' # 0x47 -> GREEK CAPITAL LETTER ETA + u'\u0398' # 0x48 -> GREEK CAPITAL LETTER THETA + u'\u0399' # 0x49 -> GREEK CAPITAL LETTER IOTA + u'[' # 0x4A -> LEFT SQUARE BRACKET + u'.' # 0x4B -> FULL STOP + u'<' # 0x4C -> LESS-THAN SIGN + u'(' # 0x4D -> LEFT PARENTHESIS + u'+' # 0x4E -> PLUS SIGN + u'!' # 0x4F -> EXCLAMATION MARK + u'&' # 0x50 -> AMPERSAND + u'\u039a' # 0x51 -> GREEK CAPITAL LETTER KAPPA + u'\u039b' # 0x52 -> GREEK CAPITAL LETTER LAMDA + u'\u039c' # 0x53 -> GREEK CAPITAL LETTER MU + u'\u039d' # 0x54 -> GREEK CAPITAL LETTER NU + u'\u039e' # 0x55 -> GREEK CAPITAL LETTER XI + u'\u039f' # 0x56 -> GREEK CAPITAL LETTER OMICRON + u'\u03a0' # 0x57 -> GREEK CAPITAL LETTER PI + u'\u03a1' # 0x58 -> GREEK CAPITAL LETTER RHO + u'\u03a3' # 0x59 -> GREEK CAPITAL LETTER SIGMA + u']' # 0x5A -> RIGHT SQUARE BRACKET + u'$' # 0x5B -> DOLLAR SIGN + u'*' # 0x5C -> ASTERISK + u')' # 0x5D -> RIGHT PARENTHESIS + u';' # 0x5E -> SEMICOLON + u'^' # 0x5F -> CIRCUMFLEX ACCENT + u'-' # 0x60 -> HYPHEN-MINUS + u'/' # 0x61 -> SOLIDUS + u'\u03a4' # 0x62 -> GREEK CAPITAL LETTER TAU + u'\u03a5' # 0x63 -> GREEK CAPITAL LETTER UPSILON + u'\u03a6' # 0x64 -> GREEK CAPITAL LETTER PHI + u'\u03a7' # 0x65 -> GREEK CAPITAL LETTER CHI + u'\u03a8' # 0x66 -> GREEK CAPITAL LETTER PSI + u'\u03a9' # 0x67 -> GREEK CAPITAL LETTER OMEGA + u'\u03aa' # 0x68 -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + u'\u03ab' # 0x69 -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + u'|' # 0x6A -> VERTICAL LINE + u',' # 0x6B -> COMMA + u'%' # 0x6C -> PERCENT SIGN + u'_' # 0x6D -> LOW LINE + u'>' # 0x6E -> GREATER-THAN SIGN + u'?' # 0x6F -> QUESTION MARK + u'\xa8' # 0x70 -> DIAERESIS + u'\u0386' # 0x71 -> GREEK CAPITAL LETTER ALPHA WITH TONOS + u'\u0388' # 0x72 -> GREEK CAPITAL LETTER EPSILON WITH TONOS + u'\u0389' # 0x73 -> GREEK CAPITAL LETTER ETA WITH TONOS + u'\xa0' # 0x74 -> NO-BREAK SPACE + u'\u038a' # 0x75 -> GREEK CAPITAL LETTER IOTA WITH TONOS + u'\u038c' # 0x76 -> GREEK CAPITAL LETTER OMICRON WITH TONOS + u'\u038e' # 0x77 -> GREEK CAPITAL LETTER UPSILON WITH TONOS + u'\u038f' # 0x78 -> GREEK CAPITAL LETTER OMEGA WITH TONOS + u'`' # 0x79 -> GRAVE ACCENT + u':' # 0x7A -> COLON + u'#' # 0x7B -> NUMBER SIGN + u'@' # 0x7C -> COMMERCIAL AT + u"'" # 0x7D -> APOSTROPHE + u'=' # 0x7E -> EQUALS SIGN + u'"' # 0x7F -> QUOTATION MARK + u'\u0385' # 0x80 -> GREEK DIALYTIKA TONOS + u'a' # 0x81 -> LATIN SMALL LETTER A + u'b' # 0x82 -> LATIN SMALL LETTER B + u'c' # 0x83 -> LATIN SMALL LETTER C + u'd' # 0x84 -> LATIN SMALL LETTER D + u'e' # 0x85 -> LATIN SMALL LETTER E + u'f' # 0x86 -> LATIN SMALL LETTER F + u'g' # 0x87 -> LATIN SMALL LETTER G + u'h' # 0x88 -> LATIN SMALL LETTER H + u'i' # 0x89 -> LATIN SMALL LETTER I + u'\u03b1' # 0x8A -> GREEK SMALL LETTER ALPHA + u'\u03b2' # 0x8B -> GREEK SMALL LETTER BETA + u'\u03b3' # 0x8C -> GREEK SMALL LETTER GAMMA + u'\u03b4' # 0x8D -> GREEK SMALL LETTER DELTA + u'\u03b5' # 0x8E -> GREEK SMALL LETTER EPSILON + u'\u03b6' # 0x8F -> GREEK SMALL LETTER ZETA + u'\xb0' # 0x90 -> DEGREE SIGN + u'j' # 0x91 -> LATIN SMALL LETTER J + u'k' # 0x92 -> LATIN SMALL LETTER K + u'l' # 0x93 -> LATIN SMALL LETTER L + u'm' # 0x94 -> LATIN SMALL LETTER M + u'n' # 0x95 -> LATIN SMALL LETTER N + u'o' # 0x96 -> LATIN SMALL LETTER O + u'p' # 0x97 -> LATIN SMALL LETTER P + u'q' # 0x98 -> LATIN SMALL LETTER Q + u'r' # 0x99 -> LATIN SMALL LETTER R + u'\u03b7' # 0x9A -> GREEK SMALL LETTER ETA + u'\u03b8' # 0x9B -> GREEK SMALL LETTER THETA + u'\u03b9' # 0x9C -> GREEK SMALL LETTER IOTA + u'\u03ba' # 0x9D -> GREEK SMALL LETTER KAPPA + u'\u03bb' # 0x9E -> GREEK SMALL LETTER LAMDA + u'\u03bc' # 0x9F -> GREEK SMALL LETTER MU + u'\xb4' # 0xA0 -> ACUTE ACCENT + u'~' # 0xA1 -> TILDE + u's' # 0xA2 -> LATIN SMALL LETTER S + u't' # 0xA3 -> LATIN SMALL LETTER T + u'u' # 0xA4 -> LATIN SMALL LETTER U + u'v' # 0xA5 -> LATIN SMALL LETTER V + u'w' # 0xA6 -> LATIN SMALL LETTER W + u'x' # 0xA7 -> LATIN SMALL LETTER X + u'y' # 0xA8 -> LATIN SMALL LETTER Y + u'z' # 0xA9 -> LATIN SMALL LETTER Z + u'\u03bd' # 0xAA -> GREEK SMALL LETTER NU + u'\u03be' # 0xAB -> GREEK SMALL LETTER XI + u'\u03bf' # 0xAC -> GREEK SMALL LETTER OMICRON + u'\u03c0' # 0xAD -> GREEK SMALL LETTER PI + u'\u03c1' # 0xAE -> GREEK SMALL LETTER RHO + u'\u03c3' # 0xAF -> GREEK SMALL LETTER SIGMA + u'\xa3' # 0xB0 -> POUND SIGN + u'\u03ac' # 0xB1 -> GREEK SMALL LETTER ALPHA WITH TONOS + u'\u03ad' # 0xB2 -> GREEK SMALL LETTER EPSILON WITH TONOS + u'\u03ae' # 0xB3 -> GREEK SMALL LETTER ETA WITH TONOS + u'\u03ca' # 0xB4 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA + u'\u03af' # 0xB5 -> GREEK SMALL LETTER IOTA WITH TONOS + u'\u03cc' # 0xB6 -> GREEK SMALL LETTER OMICRON WITH TONOS + u'\u03cd' # 0xB7 -> GREEK SMALL LETTER UPSILON WITH TONOS + u'\u03cb' # 0xB8 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA + u'\u03ce' # 0xB9 -> GREEK SMALL LETTER OMEGA WITH TONOS + u'\u03c2' # 0xBA -> GREEK SMALL LETTER FINAL SIGMA + u'\u03c4' # 0xBB -> GREEK SMALL LETTER TAU + u'\u03c5' # 0xBC -> GREEK SMALL LETTER UPSILON + u'\u03c6' # 0xBD -> GREEK SMALL LETTER PHI + u'\u03c7' # 0xBE -> GREEK SMALL LETTER CHI + u'\u03c8' # 0xBF -> GREEK SMALL LETTER PSI + u'{' # 0xC0 -> LEFT CURLY BRACKET + u'A' # 0xC1 -> LATIN CAPITAL LETTER A + u'B' # 0xC2 -> LATIN CAPITAL LETTER B + u'C' # 0xC3 -> LATIN CAPITAL LETTER C + u'D' # 0xC4 -> LATIN CAPITAL LETTER D + u'E' # 0xC5 -> LATIN CAPITAL LETTER E + u'F' # 0xC6 -> LATIN CAPITAL LETTER F + u'G' # 0xC7 -> LATIN CAPITAL LETTER G + u'H' # 0xC8 -> LATIN CAPITAL LETTER H + u'I' # 0xC9 -> LATIN CAPITAL LETTER I + u'\xad' # 0xCA -> SOFT HYPHEN + u'\u03c9' # 0xCB -> GREEK SMALL LETTER OMEGA + u'\u0390' # 0xCC -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + u'\u03b0' # 0xCD -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + u'\u2018' # 0xCE -> LEFT SINGLE QUOTATION MARK + u'\u2015' # 0xCF -> HORIZONTAL BAR + u'}' # 0xD0 -> RIGHT CURLY BRACKET + u'J' # 0xD1 -> LATIN CAPITAL LETTER J + u'K' # 0xD2 -> LATIN CAPITAL LETTER K + u'L' # 0xD3 -> LATIN CAPITAL LETTER L + u'M' # 0xD4 -> LATIN CAPITAL LETTER M + u'N' # 0xD5 -> LATIN CAPITAL LETTER N + u'O' # 0xD6 -> LATIN CAPITAL LETTER O + u'P' # 0xD7 -> LATIN CAPITAL LETTER P + u'Q' # 0xD8 -> LATIN CAPITAL LETTER Q + u'R' # 0xD9 -> LATIN CAPITAL LETTER R + u'\xb1' # 0xDA -> PLUS-MINUS SIGN + u'\xbd' # 0xDB -> VULGAR FRACTION ONE HALF + u'\x1a' # 0xDC -> SUBSTITUTE + u'\u0387' # 0xDD -> GREEK ANO TELEIA + u'\u2019' # 0xDE -> RIGHT SINGLE QUOTATION MARK + u'\xa6' # 0xDF -> BROKEN BAR + u'\\' # 0xE0 -> REVERSE SOLIDUS + u'\x1a' # 0xE1 -> SUBSTITUTE + u'S' # 0xE2 -> LATIN CAPITAL LETTER S + u'T' # 0xE3 -> LATIN CAPITAL LETTER T + u'U' # 0xE4 -> LATIN CAPITAL LETTER U + u'V' # 0xE5 -> LATIN CAPITAL LETTER V + u'W' # 0xE6 -> LATIN CAPITAL LETTER W + u'X' # 0xE7 -> LATIN CAPITAL LETTER X + u'Y' # 0xE8 -> LATIN CAPITAL LETTER Y + u'Z' # 0xE9 -> LATIN CAPITAL LETTER Z + u'\xb2' # 0xEA -> SUPERSCRIPT TWO + u'\xa7' # 0xEB -> SECTION SIGN + u'\x1a' # 0xEC -> SUBSTITUTE + u'\x1a' # 0xED -> SUBSTITUTE + u'\xab' # 0xEE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xac' # 0xEF -> NOT SIGN + u'0' # 0xF0 -> DIGIT ZERO + u'1' # 0xF1 -> DIGIT ONE + u'2' # 0xF2 -> DIGIT TWO + u'3' # 0xF3 -> DIGIT THREE + u'4' # 0xF4 -> DIGIT FOUR + u'5' # 0xF5 -> DIGIT FIVE + u'6' # 0xF6 -> DIGIT SIX + u'7' # 0xF7 -> DIGIT SEVEN + u'8' # 0xF8 -> DIGIT EIGHT + u'9' # 0xF9 -> DIGIT NINE + u'\xb3' # 0xFA -> SUPERSCRIPT THREE + u'\xa9' # 0xFB -> COPYRIGHT SIGN + u'\x1a' # 0xFC -> SUBSTITUTE + u'\x1a' # 0xFD -> SUBSTITUTE + u'\xbb' # 0xFE -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\x9f' # 0xFF -> CONTROL +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/cp932.py b/thirdparty/python25/Lib/encodings/cp932.py new file mode 100644 index 000000000..6321c2043 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp932.py @@ -0,0 +1,39 @@ +# +# cp932.py: Python Unicode Codec for CP932 +# +# Written by Hye-Shik Chang +# + +import _codecs_jp, codecs +import _multibytecodec as mbc + +codec = _codecs_jp.getcodec('cp932') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='cp932', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/cp949.py b/thirdparty/python25/Lib/encodings/cp949.py new file mode 100644 index 000000000..1d9725dec --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp949.py @@ -0,0 +1,39 @@ +# +# cp949.py: Python Unicode Codec for CP949 +# +# Written by Hye-Shik Chang +# + +import _codecs_kr, codecs +import _multibytecodec as mbc + +codec = _codecs_kr.getcodec('cp949') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='cp949', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/cp950.py b/thirdparty/python25/Lib/encodings/cp950.py new file mode 100644 index 000000000..e7772b159 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/cp950.py @@ -0,0 +1,39 @@ +# +# cp950.py: Python Unicode Codec for CP950 +# +# Written by Hye-Shik Chang +# + +import _codecs_tw, codecs +import _multibytecodec as mbc + +codec = _codecs_tw.getcodec('cp950') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='cp950', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/euc_jis_2004.py b/thirdparty/python25/Lib/encodings/euc_jis_2004.py new file mode 100644 index 000000000..bb3552006 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/euc_jis_2004.py @@ -0,0 +1,39 @@ +# +# euc_jis_2004.py: Python Unicode Codec for EUC_JIS_2004 +# +# Written by Hye-Shik Chang +# + +import _codecs_jp, codecs +import _multibytecodec as mbc + +codec = _codecs_jp.getcodec('euc_jis_2004') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='euc_jis_2004', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/euc_jisx0213.py b/thirdparty/python25/Lib/encodings/euc_jisx0213.py new file mode 100644 index 000000000..9914c4feb --- /dev/null +++ b/thirdparty/python25/Lib/encodings/euc_jisx0213.py @@ -0,0 +1,39 @@ +# +# euc_jisx0213.py: Python Unicode Codec for EUC_JISX0213 +# +# Written by Hye-Shik Chang +# + +import _codecs_jp, codecs +import _multibytecodec as mbc + +codec = _codecs_jp.getcodec('euc_jisx0213') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='euc_jisx0213', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/euc_jp.py b/thirdparty/python25/Lib/encodings/euc_jp.py new file mode 100644 index 000000000..29406b6e2 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/euc_jp.py @@ -0,0 +1,39 @@ +# +# euc_jp.py: Python Unicode Codec for EUC_JP +# +# Written by Hye-Shik Chang +# + +import _codecs_jp, codecs +import _multibytecodec as mbc + +codec = _codecs_jp.getcodec('euc_jp') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='euc_jp', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/euc_kr.py b/thirdparty/python25/Lib/encodings/euc_kr.py new file mode 100644 index 000000000..7d5eca4e2 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/euc_kr.py @@ -0,0 +1,39 @@ +# +# euc_kr.py: Python Unicode Codec for EUC_KR +# +# Written by Hye-Shik Chang +# + +import _codecs_kr, codecs +import _multibytecodec as mbc + +codec = _codecs_kr.getcodec('euc_kr') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='euc_kr', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/gb18030.py b/thirdparty/python25/Lib/encodings/gb18030.py new file mode 100644 index 000000000..99059ffdc --- /dev/null +++ b/thirdparty/python25/Lib/encodings/gb18030.py @@ -0,0 +1,39 @@ +# +# gb18030.py: Python Unicode Codec for GB18030 +# +# Written by Hye-Shik Chang +# + +import _codecs_cn, codecs +import _multibytecodec as mbc + +codec = _codecs_cn.getcodec('gb18030') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='gb18030', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/gb2312.py b/thirdparty/python25/Lib/encodings/gb2312.py new file mode 100644 index 000000000..4e396fa7f --- /dev/null +++ b/thirdparty/python25/Lib/encodings/gb2312.py @@ -0,0 +1,39 @@ +# +# gb2312.py: Python Unicode Codec for GB2312 +# +# Written by Hye-Shik Chang +# + +import _codecs_cn, codecs +import _multibytecodec as mbc + +codec = _codecs_cn.getcodec('gb2312') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='gb2312', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/gbk.py b/thirdparty/python25/Lib/encodings/gbk.py new file mode 100644 index 000000000..0fd27341e --- /dev/null +++ b/thirdparty/python25/Lib/encodings/gbk.py @@ -0,0 +1,39 @@ +# +# gbk.py: Python Unicode Codec for GBK +# +# Written by Hye-Shik Chang +# + +import _codecs_cn, codecs +import _multibytecodec as mbc + +codec = _codecs_cn.getcodec('gbk') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='gbk', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/hex_codec.py b/thirdparty/python25/Lib/encodings/hex_codec.py new file mode 100644 index 000000000..5262bffd1 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/hex_codec.py @@ -0,0 +1,79 @@ +""" Python 'hex_codec' Codec - 2-digit hex content transfer encoding + + Unlike most of the other codecs which target Unicode, this codec + will return Python string objects for both encode and decode. + + Written by Marc-Andre Lemburg (mal@lemburg.com). + +""" +import codecs, binascii + +### Codec APIs + +def hex_encode(input,errors='strict'): + + """ Encodes the object input and returns a tuple (output + object, length consumed). + + errors defines the error handling to apply. It defaults to + 'strict' handling which is the only currently supported + error handling for this codec. + + """ + assert errors == 'strict' + output = binascii.b2a_hex(input) + return (output, len(input)) + +def hex_decode(input,errors='strict'): + + """ Decodes the object input and returns a tuple (output + object, length consumed). + + input must be an object which provides the bf_getreadbuf + buffer slot. Python strings, buffer objects and memory + mapped files are examples of objects providing this slot. + + errors defines the error handling to apply. It defaults to + 'strict' handling which is the only currently supported + error handling for this codec. + + """ + assert errors == 'strict' + output = binascii.a2b_hex(input) + return (output, len(input)) + +class Codec(codecs.Codec): + + def encode(self, input,errors='strict'): + return hex_encode(input,errors) + def decode(self, input,errors='strict'): + return hex_decode(input,errors) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + assert self.errors == 'strict' + return binascii.b2a_hex(input) + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + assert self.errors == 'strict' + return binascii.a2b_hex(input) + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='hex', + encode=hex_encode, + decode=hex_decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/thirdparty/python25/Lib/encodings/hp_roman8.py b/thirdparty/python25/Lib/encodings/hp_roman8.py new file mode 100644 index 000000000..70c1ccc54 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/hp_roman8.py @@ -0,0 +1,152 @@ +""" Python Character Mapping Codec generated from 'hp_roman8.txt' with gencodec.py. + + Based on data from ftp://dkuug.dk/i18n/charmaps/HP-ROMAN8 (Keld Simonsen) + + Original source: LaserJet IIP Printer User's Manual HP part no + 33471-90901, Hewlet-Packard, June 1989. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_map) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_map)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='hp-roman8', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x00a1: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE + 0x00a2: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x00a3: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE + 0x00a4: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x00a5: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x00a6: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x00a7: 0x00cf, # LATIN CAPITAL LETTER I WITH DIAERESIS + 0x00a8: 0x00b4, # ACUTE ACCENT + 0x00a9: 0x02cb, # MODIFIER LETTER GRAVE ACCENT (Mandarin Chinese fourth tone) + 0x00aa: 0x02c6, # MODIFIER LETTER CIRCUMFLEX ACCENT + 0x00ab: 0x00a8, # DIAERESIS + 0x00ac: 0x02dc, # SMALL TILDE + 0x00ad: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE + 0x00ae: 0x00db, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x00af: 0x20a4, # LIRA SIGN + 0x00b0: 0x00af, # MACRON + 0x00b1: 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE + 0x00b2: 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE + 0x00b3: 0x00b0, # DEGREE SIGN + 0x00b4: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00b5: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x00b6: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE + 0x00b7: 0x00f1, # LATIN SMALL LETTER N WITH TILDE + 0x00b8: 0x00a1, # INVERTED EXCLAMATION MARK + 0x00b9: 0x00bf, # INVERTED QUESTION MARK + 0x00ba: 0x00a4, # CURRENCY SIGN + 0x00bb: 0x00a3, # POUND SIGN + 0x00bc: 0x00a5, # YEN SIGN + 0x00bd: 0x00a7, # SECTION SIGN + 0x00be: 0x0192, # LATIN SMALL LETTER F WITH HOOK + 0x00bf: 0x00a2, # CENT SIGN + 0x00c0: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00c1: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00c2: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00c3: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00c4: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x00c5: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x00c6: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x00c7: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x00c8: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x00c9: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x00ca: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE + 0x00cb: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE + 0x00cc: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00cd: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ce: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00cf: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x00d0: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE + 0x00d1: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00d2: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE + 0x00d3: 0x00c6, # LATIN CAPITAL LETTER AE + 0x00d4: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE + 0x00d5: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x00d6: 0x00f8, # LATIN SMALL LETTER O WITH STROKE + 0x00d7: 0x00e6, # LATIN SMALL LETTER AE + 0x00d8: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00d9: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE + 0x00da: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00db: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00dc: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00dd: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS + 0x00de: 0x00df, # LATIN SMALL LETTER SHARP S (German) + 0x00df: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00e0: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00e1: 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE + 0x00e2: 0x00e3, # LATIN SMALL LETTER A WITH TILDE + 0x00e3: 0x00d0, # LATIN CAPITAL LETTER ETH (Icelandic) + 0x00e4: 0x00f0, # LATIN SMALL LETTER ETH (Icelandic) + 0x00e5: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00e6: 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE + 0x00e7: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00e8: 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE + 0x00e9: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE + 0x00ea: 0x00f5, # LATIN SMALL LETTER O WITH TILDE + 0x00eb: 0x0160, # LATIN CAPITAL LETTER S WITH CARON + 0x00ec: 0x0161, # LATIN SMALL LETTER S WITH CARON + 0x00ed: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00ee: 0x0178, # LATIN CAPITAL LETTER Y WITH DIAERESIS + 0x00ef: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS + 0x00f0: 0x00de, # LATIN CAPITAL LETTER THORN (Icelandic) + 0x00f1: 0x00fe, # LATIN SMALL LETTER THORN (Icelandic) + 0x00f2: 0x00b7, # MIDDLE DOT + 0x00f3: 0x00b5, # MICRO SIGN + 0x00f4: 0x00b6, # PILCROW SIGN + 0x00f5: 0x00be, # VULGAR FRACTION THREE QUARTERS + 0x00f6: 0x2014, # EM DASH + 0x00f7: 0x00bc, # VULGAR FRACTION ONE QUARTER + 0x00f8: 0x00bd, # VULGAR FRACTION ONE HALF + 0x00f9: 0x00aa, # FEMININE ORDINAL INDICATOR + 0x00fa: 0x00ba, # MASCULINE ORDINAL INDICATOR + 0x00fb: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00fc: 0x25a0, # BLACK SQUARE + 0x00fd: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00fe: 0x00b1, # PLUS-MINUS SIGN + 0x00ff: None, +}) + +### Encoding Map + +encoding_map = codecs.make_encoding_map(decoding_map) diff --git a/thirdparty/python25/Lib/encodings/hz.py b/thirdparty/python25/Lib/encodings/hz.py new file mode 100644 index 000000000..027c4fb50 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/hz.py @@ -0,0 +1,39 @@ +# +# hz.py: Python Unicode Codec for HZ +# +# Written by Hye-Shik Chang +# + +import _codecs_cn, codecs +import _multibytecodec as mbc + +codec = _codecs_cn.getcodec('hz') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='hz', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/idna.py b/thirdparty/python25/Lib/encodings/idna.py new file mode 100644 index 000000000..ecbf2bed3 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/idna.py @@ -0,0 +1,288 @@ +# This module implements the RFCs 3490 (IDNA) and 3491 (Nameprep) + +import stringprep, re, codecs +from unicodedata import ucd_3_2_0 as unicodedata + +# IDNA section 3.1 +dots = re.compile(u"[\u002E\u3002\uFF0E\uFF61]") + +# IDNA section 5 +ace_prefix = "xn--" +uace_prefix = unicode(ace_prefix, "ascii") + +# This assumes query strings, so AllowUnassigned is true +def nameprep(label): + # Map + newlabel = [] + for c in label: + if stringprep.in_table_b1(c): + # Map to nothing + continue + newlabel.append(stringprep.map_table_b2(c)) + label = u"".join(newlabel) + + # Normalize + label = unicodedata.normalize("NFKC", label) + + # Prohibit + for c in label: + if stringprep.in_table_c12(c) or \ + stringprep.in_table_c22(c) or \ + stringprep.in_table_c3(c) or \ + stringprep.in_table_c4(c) or \ + stringprep.in_table_c5(c) or \ + stringprep.in_table_c6(c) or \ + stringprep.in_table_c7(c) or \ + stringprep.in_table_c8(c) or \ + stringprep.in_table_c9(c): + raise UnicodeError("Invalid character %r" % c) + + # Check bidi + RandAL = map(stringprep.in_table_d1, label) + for c in RandAL: + if c: + # There is a RandAL char in the string. Must perform further + # tests: + # 1) The characters in section 5.8 MUST be prohibited. + # This is table C.8, which was already checked + # 2) If a string contains any RandALCat character, the string + # MUST NOT contain any LCat character. + if filter(stringprep.in_table_d2, label): + raise UnicodeError("Violation of BIDI requirement 2") + + # 3) If a string contains any RandALCat character, a + # RandALCat character MUST be the first character of the + # string, and a RandALCat character MUST be the last + # character of the string. + if not RandAL[0] or not RandAL[-1]: + raise UnicodeError("Violation of BIDI requirement 3") + + return label + +def ToASCII(label): + try: + # Step 1: try ASCII + label = label.encode("ascii") + except UnicodeError: + pass + else: + # Skip to step 3: UseSTD3ASCIIRules is false, so + # Skip to step 8. + if 0 < len(label) < 64: + return label + raise UnicodeError("label empty or too long") + + # Step 2: nameprep + label = nameprep(label) + + # Step 3: UseSTD3ASCIIRules is false + # Step 4: try ASCII + try: + label = label.encode("ascii") + except UnicodeError: + pass + else: + # Skip to step 8. + if 0 < len(label) < 64: + return label + raise UnicodeError("label empty or too long") + + # Step 5: Check ACE prefix + if label.startswith(uace_prefix): + raise UnicodeError("Label starts with ACE prefix") + + # Step 6: Encode with PUNYCODE + label = label.encode("punycode") + + # Step 7: Prepend ACE prefix + label = ace_prefix + label + + # Step 8: Check size + if 0 < len(label) < 64: + return label + raise UnicodeError("label empty or too long") + +def ToUnicode(label): + # Step 1: Check for ASCII + if isinstance(label, str): + pure_ascii = True + else: + try: + label = label.encode("ascii") + pure_ascii = True + except UnicodeError: + pure_ascii = False + if not pure_ascii: + # Step 2: Perform nameprep + label = nameprep(label) + # It doesn't say this, but apparently, it should be ASCII now + try: + label = label.encode("ascii") + except UnicodeError: + raise UnicodeError("Invalid character in IDN label") + # Step 3: Check for ACE prefix + if not label.startswith(ace_prefix): + return unicode(label, "ascii") + + # Step 4: Remove ACE prefix + label1 = label[len(ace_prefix):] + + # Step 5: Decode using PUNYCODE + result = label1.decode("punycode") + + # Step 6: Apply ToASCII + label2 = ToASCII(result) + + # Step 7: Compare the result of step 6 with the one of step 3 + # label2 will already be in lower case. + if label.lower() != label2: + raise UnicodeError("IDNA does not round-trip", label, label2) + + # Step 8: return the result of step 5 + return result + +### Codec APIs + +class Codec(codecs.Codec): + def encode(self,input,errors='strict'): + + if errors != 'strict': + # IDNA is quite clear that implementations must be strict + raise UnicodeError("unsupported error handling "+errors) + + if not input: + return "", 0 + + result = [] + labels = dots.split(input) + if labels and len(labels[-1])==0: + trailing_dot = '.' + del labels[-1] + else: + trailing_dot = '' + for label in labels: + result.append(ToASCII(label)) + # Join with U+002E + return ".".join(result)+trailing_dot, len(input) + + def decode(self,input,errors='strict'): + + if errors != 'strict': + raise UnicodeError("Unsupported error handling "+errors) + + if not input: + return u"", 0 + + # IDNA allows decoding to operate on Unicode strings, too. + if isinstance(input, unicode): + labels = dots.split(input) + else: + # Must be ASCII string + input = str(input) + unicode(input, "ascii") + labels = input.split(".") + + if labels and len(labels[-1]) == 0: + trailing_dot = u'.' + del labels[-1] + else: + trailing_dot = u'' + + result = [] + for label in labels: + result.append(ToUnicode(label)) + + return u".".join(result)+trailing_dot, len(input) + +class IncrementalEncoder(codecs.BufferedIncrementalEncoder): + def _buffer_encode(self, input, errors, final): + if errors != 'strict': + # IDNA is quite clear that implementations must be strict + raise UnicodeError("unsupported error handling "+errors) + + if not input: + return ("", 0) + + labels = dots.split(input) + trailing_dot = u'' + if labels: + if not labels[-1]: + trailing_dot = '.' + del labels[-1] + elif not final: + # Keep potentially unfinished label until the next call + del labels[-1] + if labels: + trailing_dot = '.' + + result = [] + size = 0 + for label in labels: + result.append(ToASCII(label)) + if size: + size += 1 + size += len(label) + + # Join with U+002E + result = ".".join(result) + trailing_dot + size += len(trailing_dot) + return (result, size) + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + def _buffer_decode(self, input, errors, final): + if errors != 'strict': + raise UnicodeError("Unsupported error handling "+errors) + + if not input: + return (u"", 0) + + # IDNA allows decoding to operate on Unicode strings, too. + if isinstance(input, unicode): + labels = dots.split(input) + else: + # Must be ASCII string + input = str(input) + unicode(input, "ascii") + labels = input.split(".") + + trailing_dot = u'' + if labels: + if not labels[-1]: + trailing_dot = u'.' + del labels[-1] + elif not final: + # Keep potentially unfinished label until the next call + del labels[-1] + if labels: + trailing_dot = u'.' + + result = [] + size = 0 + for label in labels: + result.append(ToUnicode(label)) + if size: + size += 1 + size += len(label) + + result = u".".join(result) + trailing_dot + size += len(trailing_dot) + return (result, size) + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='idna', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/thirdparty/python25/Lib/encodings/iso2022_jp.py b/thirdparty/python25/Lib/encodings/iso2022_jp.py new file mode 100644 index 000000000..34719998c --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso2022_jp.py @@ -0,0 +1,39 @@ +# +# iso2022_jp.py: Python Unicode Codec for ISO2022_JP +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('iso2022_jp') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='iso2022_jp', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/iso2022_jp_1.py b/thirdparty/python25/Lib/encodings/iso2022_jp_1.py new file mode 100644 index 000000000..8b04b847d --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso2022_jp_1.py @@ -0,0 +1,39 @@ +# +# iso2022_jp_1.py: Python Unicode Codec for ISO2022_JP_1 +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('iso2022_jp_1') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='iso2022_jp_1', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/iso2022_jp_2.py b/thirdparty/python25/Lib/encodings/iso2022_jp_2.py new file mode 100644 index 000000000..df926736c --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso2022_jp_2.py @@ -0,0 +1,39 @@ +# +# iso2022_jp_2.py: Python Unicode Codec for ISO2022_JP_2 +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('iso2022_jp_2') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='iso2022_jp_2', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/iso2022_jp_2004.py b/thirdparty/python25/Lib/encodings/iso2022_jp_2004.py new file mode 100644 index 000000000..138e62863 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso2022_jp_2004.py @@ -0,0 +1,39 @@ +# +# iso2022_jp_2004.py: Python Unicode Codec for ISO2022_JP_2004 +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('iso2022_jp_2004') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='iso2022_jp_2004', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/iso2022_jp_3.py b/thirdparty/python25/Lib/encodings/iso2022_jp_3.py new file mode 100644 index 000000000..5fd582565 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso2022_jp_3.py @@ -0,0 +1,39 @@ +# +# iso2022_jp_3.py: Python Unicode Codec for ISO2022_JP_3 +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('iso2022_jp_3') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='iso2022_jp_3', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/iso2022_jp_ext.py b/thirdparty/python25/Lib/encodings/iso2022_jp_ext.py new file mode 100644 index 000000000..4ac8a0c50 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso2022_jp_ext.py @@ -0,0 +1,39 @@ +# +# iso2022_jp_ext.py: Python Unicode Codec for ISO2022_JP_EXT +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('iso2022_jp_ext') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='iso2022_jp_ext', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/iso2022_kr.py b/thirdparty/python25/Lib/encodings/iso2022_kr.py new file mode 100644 index 000000000..3dfe986c3 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso2022_kr.py @@ -0,0 +1,39 @@ +# +# iso2022_kr.py: Python Unicode Codec for ISO2022_KR +# +# Written by Hye-Shik Chang +# + +import _codecs_iso2022, codecs +import _multibytecodec as mbc + +codec = _codecs_iso2022.getcodec('iso2022_kr') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='iso2022_kr', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/iso8859_1.py b/thirdparty/python25/Lib/encodings/iso8859_1.py new file mode 100644 index 000000000..7f6be30c8 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso8859_1.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_1 generated from 'MAPPINGS/ISO8859/8859-1.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-1', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\x80' # 0x80 -> + u'\x81' # 0x81 -> + u'\x82' # 0x82 -> + u'\x83' # 0x83 -> + u'\x84' # 0x84 -> + u'\x85' # 0x85 -> + u'\x86' # 0x86 -> + u'\x87' # 0x87 -> + u'\x88' # 0x88 -> + u'\x89' # 0x89 -> + u'\x8a' # 0x8A -> + u'\x8b' # 0x8B -> + u'\x8c' # 0x8C -> + u'\x8d' # 0x8D -> + u'\x8e' # 0x8E -> + u'\x8f' # 0x8F -> + u'\x90' # 0x90 -> + u'\x91' # 0x91 -> + u'\x92' # 0x92 -> + u'\x93' # 0x93 -> + u'\x94' # 0x94 -> + u'\x95' # 0x95 -> + u'\x96' # 0x96 -> + u'\x97' # 0x97 -> + u'\x98' # 0x98 -> + u'\x99' # 0x99 -> + u'\x9a' # 0x9A -> + u'\x9b' # 0x9B -> + u'\x9c' # 0x9C -> + u'\x9d' # 0x9D -> + u'\x9e' # 0x9E -> + u'\x9f' # 0x9F -> + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK + u'\xa2' # 0xA2 -> CENT SIGN + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa4' # 0xA4 -> CURRENCY SIGN + u'\xa5' # 0xA5 -> YEN SIGN + u'\xa6' # 0xA6 -> BROKEN BAR + u'\xa7' # 0xA7 -> SECTION SIGN + u'\xa8' # 0xA8 -> DIAERESIS + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR + u'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xac' # 0xAC -> NOT SIGN + u'\xad' # 0xAD -> SOFT HYPHEN + u'\xae' # 0xAE -> REGISTERED SIGN + u'\xaf' # 0xAF -> MACRON + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\xb2' # 0xB2 -> SUPERSCRIPT TWO + u'\xb3' # 0xB3 -> SUPERSCRIPT THREE + u'\xb4' # 0xB4 -> ACUTE ACCENT + u'\xb5' # 0xB5 -> MICRO SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\xb8' # 0xB8 -> CEDILLA + u'\xb9' # 0xB9 -> SUPERSCRIPT ONE + u'\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR + u'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + u'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + u'\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + u'\xbf' # 0xBF -> INVERTED QUESTION MARK + u'\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE + u'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + u'\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE + u'\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\xd0' # 0xD0 -> LATIN CAPITAL LETTER ETH (Icelandic) + u'\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + u'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xd7' # 0xD7 -> MULTIPLICATION SIGN + u'\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + u'\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + u'\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE + u'\xde' # 0xDE -> LATIN CAPITAL LETTER THORN (Icelandic) + u'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S (German) + u'\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE + u'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe6' # 0xE6 -> LATIN SMALL LETTER AE + u'\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + u'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + u'\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE + u'\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + u'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xf0' # 0xF0 -> LATIN SMALL LETTER ETH (Icelandic) + u'\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE + u'\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE + u'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + u'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + u'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf7' # 0xF7 -> DIVISION SIGN + u'\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + u'\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + u'\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + u'\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE + u'\xfe' # 0xFE -> LATIN SMALL LETTER THORN (Icelandic) + u'\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/iso8859_10.py b/thirdparty/python25/Lib/encodings/iso8859_10.py new file mode 100644 index 000000000..d2a7a512d --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso8859_10.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_10 generated from 'MAPPINGS/ISO8859/8859-10.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-10', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\x80' # 0x80 -> + u'\x81' # 0x81 -> + u'\x82' # 0x82 -> + u'\x83' # 0x83 -> + u'\x84' # 0x84 -> + u'\x85' # 0x85 -> + u'\x86' # 0x86 -> + u'\x87' # 0x87 -> + u'\x88' # 0x88 -> + u'\x89' # 0x89 -> + u'\x8a' # 0x8A -> + u'\x8b' # 0x8B -> + u'\x8c' # 0x8C -> + u'\x8d' # 0x8D -> + u'\x8e' # 0x8E -> + u'\x8f' # 0x8F -> + u'\x90' # 0x90 -> + u'\x91' # 0x91 -> + u'\x92' # 0x92 -> + u'\x93' # 0x93 -> + u'\x94' # 0x94 -> + u'\x95' # 0x95 -> + u'\x96' # 0x96 -> + u'\x97' # 0x97 -> + u'\x98' # 0x98 -> + u'\x99' # 0x99 -> + u'\x9a' # 0x9A -> + u'\x9b' # 0x9B -> + u'\x9c' # 0x9C -> + u'\x9d' # 0x9D -> + u'\x9e' # 0x9E -> + u'\x9f' # 0x9F -> + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\u0104' # 0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK + u'\u0112' # 0xA2 -> LATIN CAPITAL LETTER E WITH MACRON + u'\u0122' # 0xA3 -> LATIN CAPITAL LETTER G WITH CEDILLA + u'\u012a' # 0xA4 -> LATIN CAPITAL LETTER I WITH MACRON + u'\u0128' # 0xA5 -> LATIN CAPITAL LETTER I WITH TILDE + u'\u0136' # 0xA6 -> LATIN CAPITAL LETTER K WITH CEDILLA + u'\xa7' # 0xA7 -> SECTION SIGN + u'\u013b' # 0xA8 -> LATIN CAPITAL LETTER L WITH CEDILLA + u'\u0110' # 0xA9 -> LATIN CAPITAL LETTER D WITH STROKE + u'\u0160' # 0xAA -> LATIN CAPITAL LETTER S WITH CARON + u'\u0166' # 0xAB -> LATIN CAPITAL LETTER T WITH STROKE + u'\u017d' # 0xAC -> LATIN CAPITAL LETTER Z WITH CARON + u'\xad' # 0xAD -> SOFT HYPHEN + u'\u016a' # 0xAE -> LATIN CAPITAL LETTER U WITH MACRON + u'\u014a' # 0xAF -> LATIN CAPITAL LETTER ENG + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\u0105' # 0xB1 -> LATIN SMALL LETTER A WITH OGONEK + u'\u0113' # 0xB2 -> LATIN SMALL LETTER E WITH MACRON + u'\u0123' # 0xB3 -> LATIN SMALL LETTER G WITH CEDILLA + u'\u012b' # 0xB4 -> LATIN SMALL LETTER I WITH MACRON + u'\u0129' # 0xB5 -> LATIN SMALL LETTER I WITH TILDE + u'\u0137' # 0xB6 -> LATIN SMALL LETTER K WITH CEDILLA + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\u013c' # 0xB8 -> LATIN SMALL LETTER L WITH CEDILLA + u'\u0111' # 0xB9 -> LATIN SMALL LETTER D WITH STROKE + u'\u0161' # 0xBA -> LATIN SMALL LETTER S WITH CARON + u'\u0167' # 0xBB -> LATIN SMALL LETTER T WITH STROKE + u'\u017e' # 0xBC -> LATIN SMALL LETTER Z WITH CARON + u'\u2015' # 0xBD -> HORIZONTAL BAR + u'\u016b' # 0xBE -> LATIN SMALL LETTER U WITH MACRON + u'\u014b' # 0xBF -> LATIN SMALL LETTER ENG + u'\u0100' # 0xC0 -> LATIN CAPITAL LETTER A WITH MACRON + u'\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE + u'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + u'\u012e' # 0xC7 -> LATIN CAPITAL LETTER I WITH OGONEK + u'\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON + u'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\u0118' # 0xCA -> LATIN CAPITAL LETTER E WITH OGONEK + u'\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\u0116' # 0xCC -> LATIN CAPITAL LETTER E WITH DOT ABOVE + u'\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\xd0' # 0xD0 -> LATIN CAPITAL LETTER ETH (Icelandic) + u'\u0145' # 0xD1 -> LATIN CAPITAL LETTER N WITH CEDILLA + u'\u014c' # 0xD2 -> LATIN CAPITAL LETTER O WITH MACRON + u'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + u'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\u0168' # 0xD7 -> LATIN CAPITAL LETTER U WITH TILDE + u'\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + u'\u0172' # 0xD9 -> LATIN CAPITAL LETTER U WITH OGONEK + u'\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE + u'\xde' # 0xDE -> LATIN CAPITAL LETTER THORN (Icelandic) + u'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S (German) + u'\u0101' # 0xE0 -> LATIN SMALL LETTER A WITH MACRON + u'\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE + u'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe6' # 0xE6 -> LATIN SMALL LETTER AE + u'\u012f' # 0xE7 -> LATIN SMALL LETTER I WITH OGONEK + u'\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON + u'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + u'\u0119' # 0xEA -> LATIN SMALL LETTER E WITH OGONEK + u'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + u'\u0117' # 0xEC -> LATIN SMALL LETTER E WITH DOT ABOVE + u'\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + u'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xf0' # 0xF0 -> LATIN SMALL LETTER ETH (Icelandic) + u'\u0146' # 0xF1 -> LATIN SMALL LETTER N WITH CEDILLA + u'\u014d' # 0xF2 -> LATIN SMALL LETTER O WITH MACRON + u'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + u'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + u'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\u0169' # 0xF7 -> LATIN SMALL LETTER U WITH TILDE + u'\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + u'\u0173' # 0xF9 -> LATIN SMALL LETTER U WITH OGONEK + u'\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + u'\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE + u'\xfe' # 0xFE -> LATIN SMALL LETTER THORN (Icelandic) + u'\u0138' # 0xFF -> LATIN SMALL LETTER KRA +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/iso8859_11.py b/thirdparty/python25/Lib/encodings/iso8859_11.py new file mode 100644 index 000000000..2f6252a82 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso8859_11.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_11 generated from 'MAPPINGS/ISO8859/8859-11.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-11', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\x80' # 0x80 -> + u'\x81' # 0x81 -> + u'\x82' # 0x82 -> + u'\x83' # 0x83 -> + u'\x84' # 0x84 -> + u'\x85' # 0x85 -> + u'\x86' # 0x86 -> + u'\x87' # 0x87 -> + u'\x88' # 0x88 -> + u'\x89' # 0x89 -> + u'\x8a' # 0x8A -> + u'\x8b' # 0x8B -> + u'\x8c' # 0x8C -> + u'\x8d' # 0x8D -> + u'\x8e' # 0x8E -> + u'\x8f' # 0x8F -> + u'\x90' # 0x90 -> + u'\x91' # 0x91 -> + u'\x92' # 0x92 -> + u'\x93' # 0x93 -> + u'\x94' # 0x94 -> + u'\x95' # 0x95 -> + u'\x96' # 0x96 -> + u'\x97' # 0x97 -> + u'\x98' # 0x98 -> + u'\x99' # 0x99 -> + u'\x9a' # 0x9A -> + u'\x9b' # 0x9B -> + u'\x9c' # 0x9C -> + u'\x9d' # 0x9D -> + u'\x9e' # 0x9E -> + u'\x9f' # 0x9F -> + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\u0e01' # 0xA1 -> THAI CHARACTER KO KAI + u'\u0e02' # 0xA2 -> THAI CHARACTER KHO KHAI + u'\u0e03' # 0xA3 -> THAI CHARACTER KHO KHUAT + u'\u0e04' # 0xA4 -> THAI CHARACTER KHO KHWAI + u'\u0e05' # 0xA5 -> THAI CHARACTER KHO KHON + u'\u0e06' # 0xA6 -> THAI CHARACTER KHO RAKHANG + u'\u0e07' # 0xA7 -> THAI CHARACTER NGO NGU + u'\u0e08' # 0xA8 -> THAI CHARACTER CHO CHAN + u'\u0e09' # 0xA9 -> THAI CHARACTER CHO CHING + u'\u0e0a' # 0xAA -> THAI CHARACTER CHO CHANG + u'\u0e0b' # 0xAB -> THAI CHARACTER SO SO + u'\u0e0c' # 0xAC -> THAI CHARACTER CHO CHOE + u'\u0e0d' # 0xAD -> THAI CHARACTER YO YING + u'\u0e0e' # 0xAE -> THAI CHARACTER DO CHADA + u'\u0e0f' # 0xAF -> THAI CHARACTER TO PATAK + u'\u0e10' # 0xB0 -> THAI CHARACTER THO THAN + u'\u0e11' # 0xB1 -> THAI CHARACTER THO NANGMONTHO + u'\u0e12' # 0xB2 -> THAI CHARACTER THO PHUTHAO + u'\u0e13' # 0xB3 -> THAI CHARACTER NO NEN + u'\u0e14' # 0xB4 -> THAI CHARACTER DO DEK + u'\u0e15' # 0xB5 -> THAI CHARACTER TO TAO + u'\u0e16' # 0xB6 -> THAI CHARACTER THO THUNG + u'\u0e17' # 0xB7 -> THAI CHARACTER THO THAHAN + u'\u0e18' # 0xB8 -> THAI CHARACTER THO THONG + u'\u0e19' # 0xB9 -> THAI CHARACTER NO NU + u'\u0e1a' # 0xBA -> THAI CHARACTER BO BAIMAI + u'\u0e1b' # 0xBB -> THAI CHARACTER PO PLA + u'\u0e1c' # 0xBC -> THAI CHARACTER PHO PHUNG + u'\u0e1d' # 0xBD -> THAI CHARACTER FO FA + u'\u0e1e' # 0xBE -> THAI CHARACTER PHO PHAN + u'\u0e1f' # 0xBF -> THAI CHARACTER FO FAN + u'\u0e20' # 0xC0 -> THAI CHARACTER PHO SAMPHAO + u'\u0e21' # 0xC1 -> THAI CHARACTER MO MA + u'\u0e22' # 0xC2 -> THAI CHARACTER YO YAK + u'\u0e23' # 0xC3 -> THAI CHARACTER RO RUA + u'\u0e24' # 0xC4 -> THAI CHARACTER RU + u'\u0e25' # 0xC5 -> THAI CHARACTER LO LING + u'\u0e26' # 0xC6 -> THAI CHARACTER LU + u'\u0e27' # 0xC7 -> THAI CHARACTER WO WAEN + u'\u0e28' # 0xC8 -> THAI CHARACTER SO SALA + u'\u0e29' # 0xC9 -> THAI CHARACTER SO RUSI + u'\u0e2a' # 0xCA -> THAI CHARACTER SO SUA + u'\u0e2b' # 0xCB -> THAI CHARACTER HO HIP + u'\u0e2c' # 0xCC -> THAI CHARACTER LO CHULA + u'\u0e2d' # 0xCD -> THAI CHARACTER O ANG + u'\u0e2e' # 0xCE -> THAI CHARACTER HO NOKHUK + u'\u0e2f' # 0xCF -> THAI CHARACTER PAIYANNOI + u'\u0e30' # 0xD0 -> THAI CHARACTER SARA A + u'\u0e31' # 0xD1 -> THAI CHARACTER MAI HAN-AKAT + u'\u0e32' # 0xD2 -> THAI CHARACTER SARA AA + u'\u0e33' # 0xD3 -> THAI CHARACTER SARA AM + u'\u0e34' # 0xD4 -> THAI CHARACTER SARA I + u'\u0e35' # 0xD5 -> THAI CHARACTER SARA II + u'\u0e36' # 0xD6 -> THAI CHARACTER SARA UE + u'\u0e37' # 0xD7 -> THAI CHARACTER SARA UEE + u'\u0e38' # 0xD8 -> THAI CHARACTER SARA U + u'\u0e39' # 0xD9 -> THAI CHARACTER SARA UU + u'\u0e3a' # 0xDA -> THAI CHARACTER PHINTHU + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\u0e3f' # 0xDF -> THAI CURRENCY SYMBOL BAHT + u'\u0e40' # 0xE0 -> THAI CHARACTER SARA E + u'\u0e41' # 0xE1 -> THAI CHARACTER SARA AE + u'\u0e42' # 0xE2 -> THAI CHARACTER SARA O + u'\u0e43' # 0xE3 -> THAI CHARACTER SARA AI MAIMUAN + u'\u0e44' # 0xE4 -> THAI CHARACTER SARA AI MAIMALAI + u'\u0e45' # 0xE5 -> THAI CHARACTER LAKKHANGYAO + u'\u0e46' # 0xE6 -> THAI CHARACTER MAIYAMOK + u'\u0e47' # 0xE7 -> THAI CHARACTER MAITAIKHU + u'\u0e48' # 0xE8 -> THAI CHARACTER MAI EK + u'\u0e49' # 0xE9 -> THAI CHARACTER MAI THO + u'\u0e4a' # 0xEA -> THAI CHARACTER MAI TRI + u'\u0e4b' # 0xEB -> THAI CHARACTER MAI CHATTAWA + u'\u0e4c' # 0xEC -> THAI CHARACTER THANTHAKHAT + u'\u0e4d' # 0xED -> THAI CHARACTER NIKHAHIT + u'\u0e4e' # 0xEE -> THAI CHARACTER YAMAKKAN + u'\u0e4f' # 0xEF -> THAI CHARACTER FONGMAN + u'\u0e50' # 0xF0 -> THAI DIGIT ZERO + u'\u0e51' # 0xF1 -> THAI DIGIT ONE + u'\u0e52' # 0xF2 -> THAI DIGIT TWO + u'\u0e53' # 0xF3 -> THAI DIGIT THREE + u'\u0e54' # 0xF4 -> THAI DIGIT FOUR + u'\u0e55' # 0xF5 -> THAI DIGIT FIVE + u'\u0e56' # 0xF6 -> THAI DIGIT SIX + u'\u0e57' # 0xF7 -> THAI DIGIT SEVEN + u'\u0e58' # 0xF8 -> THAI DIGIT EIGHT + u'\u0e59' # 0xF9 -> THAI DIGIT NINE + u'\u0e5a' # 0xFA -> THAI CHARACTER ANGKHANKHU + u'\u0e5b' # 0xFB -> THAI CHARACTER KHOMUT + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/iso8859_13.py b/thirdparty/python25/Lib/encodings/iso8859_13.py new file mode 100644 index 000000000..0523133af --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso8859_13.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_13 generated from 'MAPPINGS/ISO8859/8859-13.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-13', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\x80' # 0x80 -> + u'\x81' # 0x81 -> + u'\x82' # 0x82 -> + u'\x83' # 0x83 -> + u'\x84' # 0x84 -> + u'\x85' # 0x85 -> + u'\x86' # 0x86 -> + u'\x87' # 0x87 -> + u'\x88' # 0x88 -> + u'\x89' # 0x89 -> + u'\x8a' # 0x8A -> + u'\x8b' # 0x8B -> + u'\x8c' # 0x8C -> + u'\x8d' # 0x8D -> + u'\x8e' # 0x8E -> + u'\x8f' # 0x8F -> + u'\x90' # 0x90 -> + u'\x91' # 0x91 -> + u'\x92' # 0x92 -> + u'\x93' # 0x93 -> + u'\x94' # 0x94 -> + u'\x95' # 0x95 -> + u'\x96' # 0x96 -> + u'\x97' # 0x97 -> + u'\x98' # 0x98 -> + u'\x99' # 0x99 -> + u'\x9a' # 0x9A -> + u'\x9b' # 0x9B -> + u'\x9c' # 0x9C -> + u'\x9d' # 0x9D -> + u'\x9e' # 0x9E -> + u'\x9f' # 0x9F -> + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\u201d' # 0xA1 -> RIGHT DOUBLE QUOTATION MARK + u'\xa2' # 0xA2 -> CENT SIGN + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa4' # 0xA4 -> CURRENCY SIGN + u'\u201e' # 0xA5 -> DOUBLE LOW-9 QUOTATION MARK + u'\xa6' # 0xA6 -> BROKEN BAR + u'\xa7' # 0xA7 -> SECTION SIGN + u'\xd8' # 0xA8 -> LATIN CAPITAL LETTER O WITH STROKE + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\u0156' # 0xAA -> LATIN CAPITAL LETTER R WITH CEDILLA + u'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xac' # 0xAC -> NOT SIGN + u'\xad' # 0xAD -> SOFT HYPHEN + u'\xae' # 0xAE -> REGISTERED SIGN + u'\xc6' # 0xAF -> LATIN CAPITAL LETTER AE + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\xb2' # 0xB2 -> SUPERSCRIPT TWO + u'\xb3' # 0xB3 -> SUPERSCRIPT THREE + u'\u201c' # 0xB4 -> LEFT DOUBLE QUOTATION MARK + u'\xb5' # 0xB5 -> MICRO SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\xf8' # 0xB8 -> LATIN SMALL LETTER O WITH STROKE + u'\xb9' # 0xB9 -> SUPERSCRIPT ONE + u'\u0157' # 0xBA -> LATIN SMALL LETTER R WITH CEDILLA + u'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + u'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + u'\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + u'\xe6' # 0xBF -> LATIN SMALL LETTER AE + u'\u0104' # 0xC0 -> LATIN CAPITAL LETTER A WITH OGONEK + u'\u012e' # 0xC1 -> LATIN CAPITAL LETTER I WITH OGONEK + u'\u0100' # 0xC2 -> LATIN CAPITAL LETTER A WITH MACRON + u'\u0106' # 0xC3 -> LATIN CAPITAL LETTER C WITH ACUTE + u'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\u0118' # 0xC6 -> LATIN CAPITAL LETTER E WITH OGONEK + u'\u0112' # 0xC7 -> LATIN CAPITAL LETTER E WITH MACRON + u'\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON + u'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\u0179' # 0xCA -> LATIN CAPITAL LETTER Z WITH ACUTE + u'\u0116' # 0xCB -> LATIN CAPITAL LETTER E WITH DOT ABOVE + u'\u0122' # 0xCC -> LATIN CAPITAL LETTER G WITH CEDILLA + u'\u0136' # 0xCD -> LATIN CAPITAL LETTER K WITH CEDILLA + u'\u012a' # 0xCE -> LATIN CAPITAL LETTER I WITH MACRON + u'\u013b' # 0xCF -> LATIN CAPITAL LETTER L WITH CEDILLA + u'\u0160' # 0xD0 -> LATIN CAPITAL LETTER S WITH CARON + u'\u0143' # 0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE + u'\u0145' # 0xD2 -> LATIN CAPITAL LETTER N WITH CEDILLA + u'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\u014c' # 0xD4 -> LATIN CAPITAL LETTER O WITH MACRON + u'\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + u'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xd7' # 0xD7 -> MULTIPLICATION SIGN + u'\u0172' # 0xD8 -> LATIN CAPITAL LETTER U WITH OGONEK + u'\u0141' # 0xD9 -> LATIN CAPITAL LETTER L WITH STROKE + u'\u015a' # 0xDA -> LATIN CAPITAL LETTER S WITH ACUTE + u'\u016a' # 0xDB -> LATIN CAPITAL LETTER U WITH MACRON + u'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\u017b' # 0xDD -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + u'\u017d' # 0xDE -> LATIN CAPITAL LETTER Z WITH CARON + u'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S (German) + u'\u0105' # 0xE0 -> LATIN SMALL LETTER A WITH OGONEK + u'\u012f' # 0xE1 -> LATIN SMALL LETTER I WITH OGONEK + u'\u0101' # 0xE2 -> LATIN SMALL LETTER A WITH MACRON + u'\u0107' # 0xE3 -> LATIN SMALL LETTER C WITH ACUTE + u'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\u0119' # 0xE6 -> LATIN SMALL LETTER E WITH OGONEK + u'\u0113' # 0xE7 -> LATIN SMALL LETTER E WITH MACRON + u'\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON + u'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + u'\u017a' # 0xEA -> LATIN SMALL LETTER Z WITH ACUTE + u'\u0117' # 0xEB -> LATIN SMALL LETTER E WITH DOT ABOVE + u'\u0123' # 0xEC -> LATIN SMALL LETTER G WITH CEDILLA + u'\u0137' # 0xED -> LATIN SMALL LETTER K WITH CEDILLA + u'\u012b' # 0xEE -> LATIN SMALL LETTER I WITH MACRON + u'\u013c' # 0xEF -> LATIN SMALL LETTER L WITH CEDILLA + u'\u0161' # 0xF0 -> LATIN SMALL LETTER S WITH CARON + u'\u0144' # 0xF1 -> LATIN SMALL LETTER N WITH ACUTE + u'\u0146' # 0xF2 -> LATIN SMALL LETTER N WITH CEDILLA + u'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + u'\u014d' # 0xF4 -> LATIN SMALL LETTER O WITH MACRON + u'\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + u'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf7' # 0xF7 -> DIVISION SIGN + u'\u0173' # 0xF8 -> LATIN SMALL LETTER U WITH OGONEK + u'\u0142' # 0xF9 -> LATIN SMALL LETTER L WITH STROKE + u'\u015b' # 0xFA -> LATIN SMALL LETTER S WITH ACUTE + u'\u016b' # 0xFB -> LATIN SMALL LETTER U WITH MACRON + u'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\u017c' # 0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE + u'\u017e' # 0xFE -> LATIN SMALL LETTER Z WITH CARON + u'\u2019' # 0xFF -> RIGHT SINGLE QUOTATION MARK +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/iso8859_14.py b/thirdparty/python25/Lib/encodings/iso8859_14.py new file mode 100644 index 000000000..f0ed8fa5b --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso8859_14.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_14 generated from 'MAPPINGS/ISO8859/8859-14.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-14', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\x80' # 0x80 -> + u'\x81' # 0x81 -> + u'\x82' # 0x82 -> + u'\x83' # 0x83 -> + u'\x84' # 0x84 -> + u'\x85' # 0x85 -> + u'\x86' # 0x86 -> + u'\x87' # 0x87 -> + u'\x88' # 0x88 -> + u'\x89' # 0x89 -> + u'\x8a' # 0x8A -> + u'\x8b' # 0x8B -> + u'\x8c' # 0x8C -> + u'\x8d' # 0x8D -> + u'\x8e' # 0x8E -> + u'\x8f' # 0x8F -> + u'\x90' # 0x90 -> + u'\x91' # 0x91 -> + u'\x92' # 0x92 -> + u'\x93' # 0x93 -> + u'\x94' # 0x94 -> + u'\x95' # 0x95 -> + u'\x96' # 0x96 -> + u'\x97' # 0x97 -> + u'\x98' # 0x98 -> + u'\x99' # 0x99 -> + u'\x9a' # 0x9A -> + u'\x9b' # 0x9B -> + u'\x9c' # 0x9C -> + u'\x9d' # 0x9D -> + u'\x9e' # 0x9E -> + u'\x9f' # 0x9F -> + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\u1e02' # 0xA1 -> LATIN CAPITAL LETTER B WITH DOT ABOVE + u'\u1e03' # 0xA2 -> LATIN SMALL LETTER B WITH DOT ABOVE + u'\xa3' # 0xA3 -> POUND SIGN + u'\u010a' # 0xA4 -> LATIN CAPITAL LETTER C WITH DOT ABOVE + u'\u010b' # 0xA5 -> LATIN SMALL LETTER C WITH DOT ABOVE + u'\u1e0a' # 0xA6 -> LATIN CAPITAL LETTER D WITH DOT ABOVE + u'\xa7' # 0xA7 -> SECTION SIGN + u'\u1e80' # 0xA8 -> LATIN CAPITAL LETTER W WITH GRAVE + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\u1e82' # 0xAA -> LATIN CAPITAL LETTER W WITH ACUTE + u'\u1e0b' # 0xAB -> LATIN SMALL LETTER D WITH DOT ABOVE + u'\u1ef2' # 0xAC -> LATIN CAPITAL LETTER Y WITH GRAVE + u'\xad' # 0xAD -> SOFT HYPHEN + u'\xae' # 0xAE -> REGISTERED SIGN + u'\u0178' # 0xAF -> LATIN CAPITAL LETTER Y WITH DIAERESIS + u'\u1e1e' # 0xB0 -> LATIN CAPITAL LETTER F WITH DOT ABOVE + u'\u1e1f' # 0xB1 -> LATIN SMALL LETTER F WITH DOT ABOVE + u'\u0120' # 0xB2 -> LATIN CAPITAL LETTER G WITH DOT ABOVE + u'\u0121' # 0xB3 -> LATIN SMALL LETTER G WITH DOT ABOVE + u'\u1e40' # 0xB4 -> LATIN CAPITAL LETTER M WITH DOT ABOVE + u'\u1e41' # 0xB5 -> LATIN SMALL LETTER M WITH DOT ABOVE + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\u1e56' # 0xB7 -> LATIN CAPITAL LETTER P WITH DOT ABOVE + u'\u1e81' # 0xB8 -> LATIN SMALL LETTER W WITH GRAVE + u'\u1e57' # 0xB9 -> LATIN SMALL LETTER P WITH DOT ABOVE + u'\u1e83' # 0xBA -> LATIN SMALL LETTER W WITH ACUTE + u'\u1e60' # 0xBB -> LATIN CAPITAL LETTER S WITH DOT ABOVE + u'\u1ef3' # 0xBC -> LATIN SMALL LETTER Y WITH GRAVE + u'\u1e84' # 0xBD -> LATIN CAPITAL LETTER W WITH DIAERESIS + u'\u1e85' # 0xBE -> LATIN SMALL LETTER W WITH DIAERESIS + u'\u1e61' # 0xBF -> LATIN SMALL LETTER S WITH DOT ABOVE + u'\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE + u'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + u'\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE + u'\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\u0174' # 0xD0 -> LATIN CAPITAL LETTER W WITH CIRCUMFLEX + u'\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + u'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\u1e6a' # 0xD7 -> LATIN CAPITAL LETTER T WITH DOT ABOVE + u'\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + u'\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + u'\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE + u'\u0176' # 0xDE -> LATIN CAPITAL LETTER Y WITH CIRCUMFLEX + u'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + u'\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE + u'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe6' # 0xE6 -> LATIN SMALL LETTER AE + u'\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + u'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + u'\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE + u'\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + u'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + u'\u0175' # 0xF0 -> LATIN SMALL LETTER W WITH CIRCUMFLEX + u'\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE + u'\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE + u'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + u'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + u'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\u1e6b' # 0xF7 -> LATIN SMALL LETTER T WITH DOT ABOVE + u'\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + u'\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + u'\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + u'\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE + u'\u0177' # 0xFE -> LATIN SMALL LETTER Y WITH CIRCUMFLEX + u'\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/iso8859_15.py b/thirdparty/python25/Lib/encodings/iso8859_15.py new file mode 100644 index 000000000..4c322bee3 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso8859_15.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_15 generated from 'MAPPINGS/ISO8859/8859-15.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-15', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\x80' # 0x80 -> + u'\x81' # 0x81 -> + u'\x82' # 0x82 -> + u'\x83' # 0x83 -> + u'\x84' # 0x84 -> + u'\x85' # 0x85 -> + u'\x86' # 0x86 -> + u'\x87' # 0x87 -> + u'\x88' # 0x88 -> + u'\x89' # 0x89 -> + u'\x8a' # 0x8A -> + u'\x8b' # 0x8B -> + u'\x8c' # 0x8C -> + u'\x8d' # 0x8D -> + u'\x8e' # 0x8E -> + u'\x8f' # 0x8F -> + u'\x90' # 0x90 -> + u'\x91' # 0x91 -> + u'\x92' # 0x92 -> + u'\x93' # 0x93 -> + u'\x94' # 0x94 -> + u'\x95' # 0x95 -> + u'\x96' # 0x96 -> + u'\x97' # 0x97 -> + u'\x98' # 0x98 -> + u'\x99' # 0x99 -> + u'\x9a' # 0x9A -> + u'\x9b' # 0x9B -> + u'\x9c' # 0x9C -> + u'\x9d' # 0x9D -> + u'\x9e' # 0x9E -> + u'\x9f' # 0x9F -> + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK + u'\xa2' # 0xA2 -> CENT SIGN + u'\xa3' # 0xA3 -> POUND SIGN + u'\u20ac' # 0xA4 -> EURO SIGN + u'\xa5' # 0xA5 -> YEN SIGN + u'\u0160' # 0xA6 -> LATIN CAPITAL LETTER S WITH CARON + u'\xa7' # 0xA7 -> SECTION SIGN + u'\u0161' # 0xA8 -> LATIN SMALL LETTER S WITH CARON + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR + u'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xac' # 0xAC -> NOT SIGN + u'\xad' # 0xAD -> SOFT HYPHEN + u'\xae' # 0xAE -> REGISTERED SIGN + u'\xaf' # 0xAF -> MACRON + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\xb2' # 0xB2 -> SUPERSCRIPT TWO + u'\xb3' # 0xB3 -> SUPERSCRIPT THREE + u'\u017d' # 0xB4 -> LATIN CAPITAL LETTER Z WITH CARON + u'\xb5' # 0xB5 -> MICRO SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\u017e' # 0xB8 -> LATIN SMALL LETTER Z WITH CARON + u'\xb9' # 0xB9 -> SUPERSCRIPT ONE + u'\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR + u'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u0152' # 0xBC -> LATIN CAPITAL LIGATURE OE + u'\u0153' # 0xBD -> LATIN SMALL LIGATURE OE + u'\u0178' # 0xBE -> LATIN CAPITAL LETTER Y WITH DIAERESIS + u'\xbf' # 0xBF -> INVERTED QUESTION MARK + u'\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE + u'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + u'\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE + u'\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\xd0' # 0xD0 -> LATIN CAPITAL LETTER ETH + u'\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + u'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xd7' # 0xD7 -> MULTIPLICATION SIGN + u'\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + u'\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + u'\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE + u'\xde' # 0xDE -> LATIN CAPITAL LETTER THORN + u'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + u'\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE + u'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe6' # 0xE6 -> LATIN SMALL LETTER AE + u'\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + u'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + u'\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE + u'\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + u'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xf0' # 0xF0 -> LATIN SMALL LETTER ETH + u'\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE + u'\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE + u'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + u'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + u'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf7' # 0xF7 -> DIVISION SIGN + u'\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + u'\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + u'\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + u'\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE + u'\xfe' # 0xFE -> LATIN SMALL LETTER THORN + u'\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/iso8859_16.py b/thirdparty/python25/Lib/encodings/iso8859_16.py new file mode 100644 index 000000000..e1bce0a13 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso8859_16.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_16 generated from 'MAPPINGS/ISO8859/8859-16.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-16', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\x80' # 0x80 -> + u'\x81' # 0x81 -> + u'\x82' # 0x82 -> + u'\x83' # 0x83 -> + u'\x84' # 0x84 -> + u'\x85' # 0x85 -> + u'\x86' # 0x86 -> + u'\x87' # 0x87 -> + u'\x88' # 0x88 -> + u'\x89' # 0x89 -> + u'\x8a' # 0x8A -> + u'\x8b' # 0x8B -> + u'\x8c' # 0x8C -> + u'\x8d' # 0x8D -> + u'\x8e' # 0x8E -> + u'\x8f' # 0x8F -> + u'\x90' # 0x90 -> + u'\x91' # 0x91 -> + u'\x92' # 0x92 -> + u'\x93' # 0x93 -> + u'\x94' # 0x94 -> + u'\x95' # 0x95 -> + u'\x96' # 0x96 -> + u'\x97' # 0x97 -> + u'\x98' # 0x98 -> + u'\x99' # 0x99 -> + u'\x9a' # 0x9A -> + u'\x9b' # 0x9B -> + u'\x9c' # 0x9C -> + u'\x9d' # 0x9D -> + u'\x9e' # 0x9E -> + u'\x9f' # 0x9F -> + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\u0104' # 0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK + u'\u0105' # 0xA2 -> LATIN SMALL LETTER A WITH OGONEK + u'\u0141' # 0xA3 -> LATIN CAPITAL LETTER L WITH STROKE + u'\u20ac' # 0xA4 -> EURO SIGN + u'\u201e' # 0xA5 -> DOUBLE LOW-9 QUOTATION MARK + u'\u0160' # 0xA6 -> LATIN CAPITAL LETTER S WITH CARON + u'\xa7' # 0xA7 -> SECTION SIGN + u'\u0161' # 0xA8 -> LATIN SMALL LETTER S WITH CARON + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\u0218' # 0xAA -> LATIN CAPITAL LETTER S WITH COMMA BELOW + u'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u0179' # 0xAC -> LATIN CAPITAL LETTER Z WITH ACUTE + u'\xad' # 0xAD -> SOFT HYPHEN + u'\u017a' # 0xAE -> LATIN SMALL LETTER Z WITH ACUTE + u'\u017b' # 0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\u010c' # 0xB2 -> LATIN CAPITAL LETTER C WITH CARON + u'\u0142' # 0xB3 -> LATIN SMALL LETTER L WITH STROKE + u'\u017d' # 0xB4 -> LATIN CAPITAL LETTER Z WITH CARON + u'\u201d' # 0xB5 -> RIGHT DOUBLE QUOTATION MARK + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\u017e' # 0xB8 -> LATIN SMALL LETTER Z WITH CARON + u'\u010d' # 0xB9 -> LATIN SMALL LETTER C WITH CARON + u'\u0219' # 0xBA -> LATIN SMALL LETTER S WITH COMMA BELOW + u'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u0152' # 0xBC -> LATIN CAPITAL LIGATURE OE + u'\u0153' # 0xBD -> LATIN SMALL LIGATURE OE + u'\u0178' # 0xBE -> LATIN CAPITAL LETTER Y WITH DIAERESIS + u'\u017c' # 0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE + u'\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\u0102' # 0xC3 -> LATIN CAPITAL LETTER A WITH BREVE + u'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\u0106' # 0xC5 -> LATIN CAPITAL LETTER C WITH ACUTE + u'\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + u'\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE + u'\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE + u'\u0143' # 0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE + u'\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\u0150' # 0xD5 -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + u'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\u015a' # 0xD7 -> LATIN CAPITAL LETTER S WITH ACUTE + u'\u0170' # 0xD8 -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + u'\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + u'\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\u0118' # 0xDD -> LATIN CAPITAL LETTER E WITH OGONEK + u'\u021a' # 0xDE -> LATIN CAPITAL LETTER T WITH COMMA BELOW + u'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + u'\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\u0103' # 0xE3 -> LATIN SMALL LETTER A WITH BREVE + u'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\u0107' # 0xE5 -> LATIN SMALL LETTER C WITH ACUTE + u'\xe6' # 0xE6 -> LATIN SMALL LETTER AE + u'\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + u'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + u'\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE + u'\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + u'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + u'\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE + u'\u0144' # 0xF1 -> LATIN SMALL LETTER N WITH ACUTE + u'\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE + u'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + u'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\u0151' # 0xF5 -> LATIN SMALL LETTER O WITH DOUBLE ACUTE + u'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\u015b' # 0xF7 -> LATIN SMALL LETTER S WITH ACUTE + u'\u0171' # 0xF8 -> LATIN SMALL LETTER U WITH DOUBLE ACUTE + u'\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + u'\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + u'\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\u0119' # 0xFD -> LATIN SMALL LETTER E WITH OGONEK + u'\u021b' # 0xFE -> LATIN SMALL LETTER T WITH COMMA BELOW + u'\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/iso8859_2.py b/thirdparty/python25/Lib/encodings/iso8859_2.py new file mode 100644 index 000000000..fb3606feb --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso8859_2.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_2 generated from 'MAPPINGS/ISO8859/8859-2.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-2', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\x80' # 0x80 -> + u'\x81' # 0x81 -> + u'\x82' # 0x82 -> + u'\x83' # 0x83 -> + u'\x84' # 0x84 -> + u'\x85' # 0x85 -> + u'\x86' # 0x86 -> + u'\x87' # 0x87 -> + u'\x88' # 0x88 -> + u'\x89' # 0x89 -> + u'\x8a' # 0x8A -> + u'\x8b' # 0x8B -> + u'\x8c' # 0x8C -> + u'\x8d' # 0x8D -> + u'\x8e' # 0x8E -> + u'\x8f' # 0x8F -> + u'\x90' # 0x90 -> + u'\x91' # 0x91 -> + u'\x92' # 0x92 -> + u'\x93' # 0x93 -> + u'\x94' # 0x94 -> + u'\x95' # 0x95 -> + u'\x96' # 0x96 -> + u'\x97' # 0x97 -> + u'\x98' # 0x98 -> + u'\x99' # 0x99 -> + u'\x9a' # 0x9A -> + u'\x9b' # 0x9B -> + u'\x9c' # 0x9C -> + u'\x9d' # 0x9D -> + u'\x9e' # 0x9E -> + u'\x9f' # 0x9F -> + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\u0104' # 0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK + u'\u02d8' # 0xA2 -> BREVE + u'\u0141' # 0xA3 -> LATIN CAPITAL LETTER L WITH STROKE + u'\xa4' # 0xA4 -> CURRENCY SIGN + u'\u013d' # 0xA5 -> LATIN CAPITAL LETTER L WITH CARON + u'\u015a' # 0xA6 -> LATIN CAPITAL LETTER S WITH ACUTE + u'\xa7' # 0xA7 -> SECTION SIGN + u'\xa8' # 0xA8 -> DIAERESIS + u'\u0160' # 0xA9 -> LATIN CAPITAL LETTER S WITH CARON + u'\u015e' # 0xAA -> LATIN CAPITAL LETTER S WITH CEDILLA + u'\u0164' # 0xAB -> LATIN CAPITAL LETTER T WITH CARON + u'\u0179' # 0xAC -> LATIN CAPITAL LETTER Z WITH ACUTE + u'\xad' # 0xAD -> SOFT HYPHEN + u'\u017d' # 0xAE -> LATIN CAPITAL LETTER Z WITH CARON + u'\u017b' # 0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\u0105' # 0xB1 -> LATIN SMALL LETTER A WITH OGONEK + u'\u02db' # 0xB2 -> OGONEK + u'\u0142' # 0xB3 -> LATIN SMALL LETTER L WITH STROKE + u'\xb4' # 0xB4 -> ACUTE ACCENT + u'\u013e' # 0xB5 -> LATIN SMALL LETTER L WITH CARON + u'\u015b' # 0xB6 -> LATIN SMALL LETTER S WITH ACUTE + u'\u02c7' # 0xB7 -> CARON + u'\xb8' # 0xB8 -> CEDILLA + u'\u0161' # 0xB9 -> LATIN SMALL LETTER S WITH CARON + u'\u015f' # 0xBA -> LATIN SMALL LETTER S WITH CEDILLA + u'\u0165' # 0xBB -> LATIN SMALL LETTER T WITH CARON + u'\u017a' # 0xBC -> LATIN SMALL LETTER Z WITH ACUTE + u'\u02dd' # 0xBD -> DOUBLE ACUTE ACCENT + u'\u017e' # 0xBE -> LATIN SMALL LETTER Z WITH CARON + u'\u017c' # 0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE + u'\u0154' # 0xC0 -> LATIN CAPITAL LETTER R WITH ACUTE + u'\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\u0102' # 0xC3 -> LATIN CAPITAL LETTER A WITH BREVE + u'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\u0139' # 0xC5 -> LATIN CAPITAL LETTER L WITH ACUTE + u'\u0106' # 0xC6 -> LATIN CAPITAL LETTER C WITH ACUTE + u'\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON + u'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\u0118' # 0xCA -> LATIN CAPITAL LETTER E WITH OGONEK + u'\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\u011a' # 0xCC -> LATIN CAPITAL LETTER E WITH CARON + u'\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\u010e' # 0xCF -> LATIN CAPITAL LETTER D WITH CARON + u'\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE + u'\u0143' # 0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE + u'\u0147' # 0xD2 -> LATIN CAPITAL LETTER N WITH CARON + u'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\u0150' # 0xD5 -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + u'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xd7' # 0xD7 -> MULTIPLICATION SIGN + u'\u0158' # 0xD8 -> LATIN CAPITAL LETTER R WITH CARON + u'\u016e' # 0xD9 -> LATIN CAPITAL LETTER U WITH RING ABOVE + u'\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + u'\u0170' # 0xDB -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + u'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE + u'\u0162' # 0xDE -> LATIN CAPITAL LETTER T WITH CEDILLA + u'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + u'\u0155' # 0xE0 -> LATIN SMALL LETTER R WITH ACUTE + u'\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\u0103' # 0xE3 -> LATIN SMALL LETTER A WITH BREVE + u'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\u013a' # 0xE5 -> LATIN SMALL LETTER L WITH ACUTE + u'\u0107' # 0xE6 -> LATIN SMALL LETTER C WITH ACUTE + u'\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + u'\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON + u'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + u'\u0119' # 0xEA -> LATIN SMALL LETTER E WITH OGONEK + u'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + u'\u011b' # 0xEC -> LATIN SMALL LETTER E WITH CARON + u'\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + u'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\u010f' # 0xEF -> LATIN SMALL LETTER D WITH CARON + u'\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE + u'\u0144' # 0xF1 -> LATIN SMALL LETTER N WITH ACUTE + u'\u0148' # 0xF2 -> LATIN SMALL LETTER N WITH CARON + u'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + u'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\u0151' # 0xF5 -> LATIN SMALL LETTER O WITH DOUBLE ACUTE + u'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf7' # 0xF7 -> DIVISION SIGN + u'\u0159' # 0xF8 -> LATIN SMALL LETTER R WITH CARON + u'\u016f' # 0xF9 -> LATIN SMALL LETTER U WITH RING ABOVE + u'\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + u'\u0171' # 0xFB -> LATIN SMALL LETTER U WITH DOUBLE ACUTE + u'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE + u'\u0163' # 0xFE -> LATIN SMALL LETTER T WITH CEDILLA + u'\u02d9' # 0xFF -> DOT ABOVE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/iso8859_3.py b/thirdparty/python25/Lib/encodings/iso8859_3.py new file mode 100644 index 000000000..aaa2f5218 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso8859_3.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_3 generated from 'MAPPINGS/ISO8859/8859-3.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-3', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\x80' # 0x80 -> + u'\x81' # 0x81 -> + u'\x82' # 0x82 -> + u'\x83' # 0x83 -> + u'\x84' # 0x84 -> + u'\x85' # 0x85 -> + u'\x86' # 0x86 -> + u'\x87' # 0x87 -> + u'\x88' # 0x88 -> + u'\x89' # 0x89 -> + u'\x8a' # 0x8A -> + u'\x8b' # 0x8B -> + u'\x8c' # 0x8C -> + u'\x8d' # 0x8D -> + u'\x8e' # 0x8E -> + u'\x8f' # 0x8F -> + u'\x90' # 0x90 -> + u'\x91' # 0x91 -> + u'\x92' # 0x92 -> + u'\x93' # 0x93 -> + u'\x94' # 0x94 -> + u'\x95' # 0x95 -> + u'\x96' # 0x96 -> + u'\x97' # 0x97 -> + u'\x98' # 0x98 -> + u'\x99' # 0x99 -> + u'\x9a' # 0x9A -> + u'\x9b' # 0x9B -> + u'\x9c' # 0x9C -> + u'\x9d' # 0x9D -> + u'\x9e' # 0x9E -> + u'\x9f' # 0x9F -> + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\u0126' # 0xA1 -> LATIN CAPITAL LETTER H WITH STROKE + u'\u02d8' # 0xA2 -> BREVE + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa4' # 0xA4 -> CURRENCY SIGN + u'\ufffe' + u'\u0124' # 0xA6 -> LATIN CAPITAL LETTER H WITH CIRCUMFLEX + u'\xa7' # 0xA7 -> SECTION SIGN + u'\xa8' # 0xA8 -> DIAERESIS + u'\u0130' # 0xA9 -> LATIN CAPITAL LETTER I WITH DOT ABOVE + u'\u015e' # 0xAA -> LATIN CAPITAL LETTER S WITH CEDILLA + u'\u011e' # 0xAB -> LATIN CAPITAL LETTER G WITH BREVE + u'\u0134' # 0xAC -> LATIN CAPITAL LETTER J WITH CIRCUMFLEX + u'\xad' # 0xAD -> SOFT HYPHEN + u'\ufffe' + u'\u017b' # 0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\u0127' # 0xB1 -> LATIN SMALL LETTER H WITH STROKE + u'\xb2' # 0xB2 -> SUPERSCRIPT TWO + u'\xb3' # 0xB3 -> SUPERSCRIPT THREE + u'\xb4' # 0xB4 -> ACUTE ACCENT + u'\xb5' # 0xB5 -> MICRO SIGN + u'\u0125' # 0xB6 -> LATIN SMALL LETTER H WITH CIRCUMFLEX + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\xb8' # 0xB8 -> CEDILLA + u'\u0131' # 0xB9 -> LATIN SMALL LETTER DOTLESS I + u'\u015f' # 0xBA -> LATIN SMALL LETTER S WITH CEDILLA + u'\u011f' # 0xBB -> LATIN SMALL LETTER G WITH BREVE + u'\u0135' # 0xBC -> LATIN SMALL LETTER J WITH CIRCUMFLEX + u'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + u'\ufffe' + u'\u017c' # 0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE + u'\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\ufffe' + u'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\u010a' # 0xC5 -> LATIN CAPITAL LETTER C WITH DOT ABOVE + u'\u0108' # 0xC6 -> LATIN CAPITAL LETTER C WITH CIRCUMFLEX + u'\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE + u'\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\ufffe' + u'\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\u0120' # 0xD5 -> LATIN CAPITAL LETTER G WITH DOT ABOVE + u'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xd7' # 0xD7 -> MULTIPLICATION SIGN + u'\u011c' # 0xD8 -> LATIN CAPITAL LETTER G WITH CIRCUMFLEX + u'\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + u'\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\u016c' # 0xDD -> LATIN CAPITAL LETTER U WITH BREVE + u'\u015c' # 0xDE -> LATIN CAPITAL LETTER S WITH CIRCUMFLEX + u'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + u'\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\ufffe' + u'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\u010b' # 0xE5 -> LATIN SMALL LETTER C WITH DOT ABOVE + u'\u0109' # 0xE6 -> LATIN SMALL LETTER C WITH CIRCUMFLEX + u'\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + u'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + u'\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE + u'\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + u'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + u'\ufffe' + u'\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE + u'\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE + u'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + u'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\u0121' # 0xF5 -> LATIN SMALL LETTER G WITH DOT ABOVE + u'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf7' # 0xF7 -> DIVISION SIGN + u'\u011d' # 0xF8 -> LATIN SMALL LETTER G WITH CIRCUMFLEX + u'\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + u'\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + u'\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\u016d' # 0xFD -> LATIN SMALL LETTER U WITH BREVE + u'\u015d' # 0xFE -> LATIN SMALL LETTER S WITH CIRCUMFLEX + u'\u02d9' # 0xFF -> DOT ABOVE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/iso8859_4.py b/thirdparty/python25/Lib/encodings/iso8859_4.py new file mode 100644 index 000000000..6e86ed1cb --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso8859_4.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_4 generated from 'MAPPINGS/ISO8859/8859-4.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-4', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\x80' # 0x80 -> + u'\x81' # 0x81 -> + u'\x82' # 0x82 -> + u'\x83' # 0x83 -> + u'\x84' # 0x84 -> + u'\x85' # 0x85 -> + u'\x86' # 0x86 -> + u'\x87' # 0x87 -> + u'\x88' # 0x88 -> + u'\x89' # 0x89 -> + u'\x8a' # 0x8A -> + u'\x8b' # 0x8B -> + u'\x8c' # 0x8C -> + u'\x8d' # 0x8D -> + u'\x8e' # 0x8E -> + u'\x8f' # 0x8F -> + u'\x90' # 0x90 -> + u'\x91' # 0x91 -> + u'\x92' # 0x92 -> + u'\x93' # 0x93 -> + u'\x94' # 0x94 -> + u'\x95' # 0x95 -> + u'\x96' # 0x96 -> + u'\x97' # 0x97 -> + u'\x98' # 0x98 -> + u'\x99' # 0x99 -> + u'\x9a' # 0x9A -> + u'\x9b' # 0x9B -> + u'\x9c' # 0x9C -> + u'\x9d' # 0x9D -> + u'\x9e' # 0x9E -> + u'\x9f' # 0x9F -> + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\u0104' # 0xA1 -> LATIN CAPITAL LETTER A WITH OGONEK + u'\u0138' # 0xA2 -> LATIN SMALL LETTER KRA + u'\u0156' # 0xA3 -> LATIN CAPITAL LETTER R WITH CEDILLA + u'\xa4' # 0xA4 -> CURRENCY SIGN + u'\u0128' # 0xA5 -> LATIN CAPITAL LETTER I WITH TILDE + u'\u013b' # 0xA6 -> LATIN CAPITAL LETTER L WITH CEDILLA + u'\xa7' # 0xA7 -> SECTION SIGN + u'\xa8' # 0xA8 -> DIAERESIS + u'\u0160' # 0xA9 -> LATIN CAPITAL LETTER S WITH CARON + u'\u0112' # 0xAA -> LATIN CAPITAL LETTER E WITH MACRON + u'\u0122' # 0xAB -> LATIN CAPITAL LETTER G WITH CEDILLA + u'\u0166' # 0xAC -> LATIN CAPITAL LETTER T WITH STROKE + u'\xad' # 0xAD -> SOFT HYPHEN + u'\u017d' # 0xAE -> LATIN CAPITAL LETTER Z WITH CARON + u'\xaf' # 0xAF -> MACRON + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\u0105' # 0xB1 -> LATIN SMALL LETTER A WITH OGONEK + u'\u02db' # 0xB2 -> OGONEK + u'\u0157' # 0xB3 -> LATIN SMALL LETTER R WITH CEDILLA + u'\xb4' # 0xB4 -> ACUTE ACCENT + u'\u0129' # 0xB5 -> LATIN SMALL LETTER I WITH TILDE + u'\u013c' # 0xB6 -> LATIN SMALL LETTER L WITH CEDILLA + u'\u02c7' # 0xB7 -> CARON + u'\xb8' # 0xB8 -> CEDILLA + u'\u0161' # 0xB9 -> LATIN SMALL LETTER S WITH CARON + u'\u0113' # 0xBA -> LATIN SMALL LETTER E WITH MACRON + u'\u0123' # 0xBB -> LATIN SMALL LETTER G WITH CEDILLA + u'\u0167' # 0xBC -> LATIN SMALL LETTER T WITH STROKE + u'\u014a' # 0xBD -> LATIN CAPITAL LETTER ENG + u'\u017e' # 0xBE -> LATIN SMALL LETTER Z WITH CARON + u'\u014b' # 0xBF -> LATIN SMALL LETTER ENG + u'\u0100' # 0xC0 -> LATIN CAPITAL LETTER A WITH MACRON + u'\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE + u'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + u'\u012e' # 0xC7 -> LATIN CAPITAL LETTER I WITH OGONEK + u'\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON + u'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\u0118' # 0xCA -> LATIN CAPITAL LETTER E WITH OGONEK + u'\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\u0116' # 0xCC -> LATIN CAPITAL LETTER E WITH DOT ABOVE + u'\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\u012a' # 0xCF -> LATIN CAPITAL LETTER I WITH MACRON + u'\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE + u'\u0145' # 0xD1 -> LATIN CAPITAL LETTER N WITH CEDILLA + u'\u014c' # 0xD2 -> LATIN CAPITAL LETTER O WITH MACRON + u'\u0136' # 0xD3 -> LATIN CAPITAL LETTER K WITH CEDILLA + u'\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + u'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xd7' # 0xD7 -> MULTIPLICATION SIGN + u'\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + u'\u0172' # 0xD9 -> LATIN CAPITAL LETTER U WITH OGONEK + u'\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\u0168' # 0xDD -> LATIN CAPITAL LETTER U WITH TILDE + u'\u016a' # 0xDE -> LATIN CAPITAL LETTER U WITH MACRON + u'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + u'\u0101' # 0xE0 -> LATIN SMALL LETTER A WITH MACRON + u'\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE + u'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe6' # 0xE6 -> LATIN SMALL LETTER AE + u'\u012f' # 0xE7 -> LATIN SMALL LETTER I WITH OGONEK + u'\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON + u'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + u'\u0119' # 0xEA -> LATIN SMALL LETTER E WITH OGONEK + u'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + u'\u0117' # 0xEC -> LATIN SMALL LETTER E WITH DOT ABOVE + u'\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + u'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\u012b' # 0xEF -> LATIN SMALL LETTER I WITH MACRON + u'\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE + u'\u0146' # 0xF1 -> LATIN SMALL LETTER N WITH CEDILLA + u'\u014d' # 0xF2 -> LATIN SMALL LETTER O WITH MACRON + u'\u0137' # 0xF3 -> LATIN SMALL LETTER K WITH CEDILLA + u'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + u'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf7' # 0xF7 -> DIVISION SIGN + u'\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + u'\u0173' # 0xF9 -> LATIN SMALL LETTER U WITH OGONEK + u'\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + u'\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\u0169' # 0xFD -> LATIN SMALL LETTER U WITH TILDE + u'\u016b' # 0xFE -> LATIN SMALL LETTER U WITH MACRON + u'\u02d9' # 0xFF -> DOT ABOVE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/iso8859_5.py b/thirdparty/python25/Lib/encodings/iso8859_5.py new file mode 100644 index 000000000..c93283e61 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso8859_5.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_5 generated from 'MAPPINGS/ISO8859/8859-5.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-5', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\x80' # 0x80 -> + u'\x81' # 0x81 -> + u'\x82' # 0x82 -> + u'\x83' # 0x83 -> + u'\x84' # 0x84 -> + u'\x85' # 0x85 -> + u'\x86' # 0x86 -> + u'\x87' # 0x87 -> + u'\x88' # 0x88 -> + u'\x89' # 0x89 -> + u'\x8a' # 0x8A -> + u'\x8b' # 0x8B -> + u'\x8c' # 0x8C -> + u'\x8d' # 0x8D -> + u'\x8e' # 0x8E -> + u'\x8f' # 0x8F -> + u'\x90' # 0x90 -> + u'\x91' # 0x91 -> + u'\x92' # 0x92 -> + u'\x93' # 0x93 -> + u'\x94' # 0x94 -> + u'\x95' # 0x95 -> + u'\x96' # 0x96 -> + u'\x97' # 0x97 -> + u'\x98' # 0x98 -> + u'\x99' # 0x99 -> + u'\x9a' # 0x9A -> + u'\x9b' # 0x9B -> + u'\x9c' # 0x9C -> + u'\x9d' # 0x9D -> + u'\x9e' # 0x9E -> + u'\x9f' # 0x9F -> + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\u0401' # 0xA1 -> CYRILLIC CAPITAL LETTER IO + u'\u0402' # 0xA2 -> CYRILLIC CAPITAL LETTER DJE + u'\u0403' # 0xA3 -> CYRILLIC CAPITAL LETTER GJE + u'\u0404' # 0xA4 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE + u'\u0405' # 0xA5 -> CYRILLIC CAPITAL LETTER DZE + u'\u0406' # 0xA6 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + u'\u0407' # 0xA7 -> CYRILLIC CAPITAL LETTER YI + u'\u0408' # 0xA8 -> CYRILLIC CAPITAL LETTER JE + u'\u0409' # 0xA9 -> CYRILLIC CAPITAL LETTER LJE + u'\u040a' # 0xAA -> CYRILLIC CAPITAL LETTER NJE + u'\u040b' # 0xAB -> CYRILLIC CAPITAL LETTER TSHE + u'\u040c' # 0xAC -> CYRILLIC CAPITAL LETTER KJE + u'\xad' # 0xAD -> SOFT HYPHEN + u'\u040e' # 0xAE -> CYRILLIC CAPITAL LETTER SHORT U + u'\u040f' # 0xAF -> CYRILLIC CAPITAL LETTER DZHE + u'\u0410' # 0xB0 -> CYRILLIC CAPITAL LETTER A + u'\u0411' # 0xB1 -> CYRILLIC CAPITAL LETTER BE + u'\u0412' # 0xB2 -> CYRILLIC CAPITAL LETTER VE + u'\u0413' # 0xB3 -> CYRILLIC CAPITAL LETTER GHE + u'\u0414' # 0xB4 -> CYRILLIC CAPITAL LETTER DE + u'\u0415' # 0xB5 -> CYRILLIC CAPITAL LETTER IE + u'\u0416' # 0xB6 -> CYRILLIC CAPITAL LETTER ZHE + u'\u0417' # 0xB7 -> CYRILLIC CAPITAL LETTER ZE + u'\u0418' # 0xB8 -> CYRILLIC CAPITAL LETTER I + u'\u0419' # 0xB9 -> CYRILLIC CAPITAL LETTER SHORT I + u'\u041a' # 0xBA -> CYRILLIC CAPITAL LETTER KA + u'\u041b' # 0xBB -> CYRILLIC CAPITAL LETTER EL + u'\u041c' # 0xBC -> CYRILLIC CAPITAL LETTER EM + u'\u041d' # 0xBD -> CYRILLIC CAPITAL LETTER EN + u'\u041e' # 0xBE -> CYRILLIC CAPITAL LETTER O + u'\u041f' # 0xBF -> CYRILLIC CAPITAL LETTER PE + u'\u0420' # 0xC0 -> CYRILLIC CAPITAL LETTER ER + u'\u0421' # 0xC1 -> CYRILLIC CAPITAL LETTER ES + u'\u0422' # 0xC2 -> CYRILLIC CAPITAL LETTER TE + u'\u0423' # 0xC3 -> CYRILLIC CAPITAL LETTER U + u'\u0424' # 0xC4 -> CYRILLIC CAPITAL LETTER EF + u'\u0425' # 0xC5 -> CYRILLIC CAPITAL LETTER HA + u'\u0426' # 0xC6 -> CYRILLIC CAPITAL LETTER TSE + u'\u0427' # 0xC7 -> CYRILLIC CAPITAL LETTER CHE + u'\u0428' # 0xC8 -> CYRILLIC CAPITAL LETTER SHA + u'\u0429' # 0xC9 -> CYRILLIC CAPITAL LETTER SHCHA + u'\u042a' # 0xCA -> CYRILLIC CAPITAL LETTER HARD SIGN + u'\u042b' # 0xCB -> CYRILLIC CAPITAL LETTER YERU + u'\u042c' # 0xCC -> CYRILLIC CAPITAL LETTER SOFT SIGN + u'\u042d' # 0xCD -> CYRILLIC CAPITAL LETTER E + u'\u042e' # 0xCE -> CYRILLIC CAPITAL LETTER YU + u'\u042f' # 0xCF -> CYRILLIC CAPITAL LETTER YA + u'\u0430' # 0xD0 -> CYRILLIC SMALL LETTER A + u'\u0431' # 0xD1 -> CYRILLIC SMALL LETTER BE + u'\u0432' # 0xD2 -> CYRILLIC SMALL LETTER VE + u'\u0433' # 0xD3 -> CYRILLIC SMALL LETTER GHE + u'\u0434' # 0xD4 -> CYRILLIC SMALL LETTER DE + u'\u0435' # 0xD5 -> CYRILLIC SMALL LETTER IE + u'\u0436' # 0xD6 -> CYRILLIC SMALL LETTER ZHE + u'\u0437' # 0xD7 -> CYRILLIC SMALL LETTER ZE + u'\u0438' # 0xD8 -> CYRILLIC SMALL LETTER I + u'\u0439' # 0xD9 -> CYRILLIC SMALL LETTER SHORT I + u'\u043a' # 0xDA -> CYRILLIC SMALL LETTER KA + u'\u043b' # 0xDB -> CYRILLIC SMALL LETTER EL + u'\u043c' # 0xDC -> CYRILLIC SMALL LETTER EM + u'\u043d' # 0xDD -> CYRILLIC SMALL LETTER EN + u'\u043e' # 0xDE -> CYRILLIC SMALL LETTER O + u'\u043f' # 0xDF -> CYRILLIC SMALL LETTER PE + u'\u0440' # 0xE0 -> CYRILLIC SMALL LETTER ER + u'\u0441' # 0xE1 -> CYRILLIC SMALL LETTER ES + u'\u0442' # 0xE2 -> CYRILLIC SMALL LETTER TE + u'\u0443' # 0xE3 -> CYRILLIC SMALL LETTER U + u'\u0444' # 0xE4 -> CYRILLIC SMALL LETTER EF + u'\u0445' # 0xE5 -> CYRILLIC SMALL LETTER HA + u'\u0446' # 0xE6 -> CYRILLIC SMALL LETTER TSE + u'\u0447' # 0xE7 -> CYRILLIC SMALL LETTER CHE + u'\u0448' # 0xE8 -> CYRILLIC SMALL LETTER SHA + u'\u0449' # 0xE9 -> CYRILLIC SMALL LETTER SHCHA + u'\u044a' # 0xEA -> CYRILLIC SMALL LETTER HARD SIGN + u'\u044b' # 0xEB -> CYRILLIC SMALL LETTER YERU + u'\u044c' # 0xEC -> CYRILLIC SMALL LETTER SOFT SIGN + u'\u044d' # 0xED -> CYRILLIC SMALL LETTER E + u'\u044e' # 0xEE -> CYRILLIC SMALL LETTER YU + u'\u044f' # 0xEF -> CYRILLIC SMALL LETTER YA + u'\u2116' # 0xF0 -> NUMERO SIGN + u'\u0451' # 0xF1 -> CYRILLIC SMALL LETTER IO + u'\u0452' # 0xF2 -> CYRILLIC SMALL LETTER DJE + u'\u0453' # 0xF3 -> CYRILLIC SMALL LETTER GJE + u'\u0454' # 0xF4 -> CYRILLIC SMALL LETTER UKRAINIAN IE + u'\u0455' # 0xF5 -> CYRILLIC SMALL LETTER DZE + u'\u0456' # 0xF6 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + u'\u0457' # 0xF7 -> CYRILLIC SMALL LETTER YI + u'\u0458' # 0xF8 -> CYRILLIC SMALL LETTER JE + u'\u0459' # 0xF9 -> CYRILLIC SMALL LETTER LJE + u'\u045a' # 0xFA -> CYRILLIC SMALL LETTER NJE + u'\u045b' # 0xFB -> CYRILLIC SMALL LETTER TSHE + u'\u045c' # 0xFC -> CYRILLIC SMALL LETTER KJE + u'\xa7' # 0xFD -> SECTION SIGN + u'\u045e' # 0xFE -> CYRILLIC SMALL LETTER SHORT U + u'\u045f' # 0xFF -> CYRILLIC SMALL LETTER DZHE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/iso8859_6.py b/thirdparty/python25/Lib/encodings/iso8859_6.py new file mode 100644 index 000000000..6fc769af9 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso8859_6.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_6 generated from 'MAPPINGS/ISO8859/8859-6.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-6', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\x80' # 0x80 -> + u'\x81' # 0x81 -> + u'\x82' # 0x82 -> + u'\x83' # 0x83 -> + u'\x84' # 0x84 -> + u'\x85' # 0x85 -> + u'\x86' # 0x86 -> + u'\x87' # 0x87 -> + u'\x88' # 0x88 -> + u'\x89' # 0x89 -> + u'\x8a' # 0x8A -> + u'\x8b' # 0x8B -> + u'\x8c' # 0x8C -> + u'\x8d' # 0x8D -> + u'\x8e' # 0x8E -> + u'\x8f' # 0x8F -> + u'\x90' # 0x90 -> + u'\x91' # 0x91 -> + u'\x92' # 0x92 -> + u'\x93' # 0x93 -> + u'\x94' # 0x94 -> + u'\x95' # 0x95 -> + u'\x96' # 0x96 -> + u'\x97' # 0x97 -> + u'\x98' # 0x98 -> + u'\x99' # 0x99 -> + u'\x9a' # 0x9A -> + u'\x9b' # 0x9B -> + u'\x9c' # 0x9C -> + u'\x9d' # 0x9D -> + u'\x9e' # 0x9E -> + u'\x9f' # 0x9F -> + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\xa4' # 0xA4 -> CURRENCY SIGN + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\u060c' # 0xAC -> ARABIC COMMA + u'\xad' # 0xAD -> SOFT HYPHEN + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\u061b' # 0xBB -> ARABIC SEMICOLON + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\u061f' # 0xBF -> ARABIC QUESTION MARK + u'\ufffe' + u'\u0621' # 0xC1 -> ARABIC LETTER HAMZA + u'\u0622' # 0xC2 -> ARABIC LETTER ALEF WITH MADDA ABOVE + u'\u0623' # 0xC3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE + u'\u0624' # 0xC4 -> ARABIC LETTER WAW WITH HAMZA ABOVE + u'\u0625' # 0xC5 -> ARABIC LETTER ALEF WITH HAMZA BELOW + u'\u0626' # 0xC6 -> ARABIC LETTER YEH WITH HAMZA ABOVE + u'\u0627' # 0xC7 -> ARABIC LETTER ALEF + u'\u0628' # 0xC8 -> ARABIC LETTER BEH + u'\u0629' # 0xC9 -> ARABIC LETTER TEH MARBUTA + u'\u062a' # 0xCA -> ARABIC LETTER TEH + u'\u062b' # 0xCB -> ARABIC LETTER THEH + u'\u062c' # 0xCC -> ARABIC LETTER JEEM + u'\u062d' # 0xCD -> ARABIC LETTER HAH + u'\u062e' # 0xCE -> ARABIC LETTER KHAH + u'\u062f' # 0xCF -> ARABIC LETTER DAL + u'\u0630' # 0xD0 -> ARABIC LETTER THAL + u'\u0631' # 0xD1 -> ARABIC LETTER REH + u'\u0632' # 0xD2 -> ARABIC LETTER ZAIN + u'\u0633' # 0xD3 -> ARABIC LETTER SEEN + u'\u0634' # 0xD4 -> ARABIC LETTER SHEEN + u'\u0635' # 0xD5 -> ARABIC LETTER SAD + u'\u0636' # 0xD6 -> ARABIC LETTER DAD + u'\u0637' # 0xD7 -> ARABIC LETTER TAH + u'\u0638' # 0xD8 -> ARABIC LETTER ZAH + u'\u0639' # 0xD9 -> ARABIC LETTER AIN + u'\u063a' # 0xDA -> ARABIC LETTER GHAIN + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\u0640' # 0xE0 -> ARABIC TATWEEL + u'\u0641' # 0xE1 -> ARABIC LETTER FEH + u'\u0642' # 0xE2 -> ARABIC LETTER QAF + u'\u0643' # 0xE3 -> ARABIC LETTER KAF + u'\u0644' # 0xE4 -> ARABIC LETTER LAM + u'\u0645' # 0xE5 -> ARABIC LETTER MEEM + u'\u0646' # 0xE6 -> ARABIC LETTER NOON + u'\u0647' # 0xE7 -> ARABIC LETTER HEH + u'\u0648' # 0xE8 -> ARABIC LETTER WAW + u'\u0649' # 0xE9 -> ARABIC LETTER ALEF MAKSURA + u'\u064a' # 0xEA -> ARABIC LETTER YEH + u'\u064b' # 0xEB -> ARABIC FATHATAN + u'\u064c' # 0xEC -> ARABIC DAMMATAN + u'\u064d' # 0xED -> ARABIC KASRATAN + u'\u064e' # 0xEE -> ARABIC FATHA + u'\u064f' # 0xEF -> ARABIC DAMMA + u'\u0650' # 0xF0 -> ARABIC KASRA + u'\u0651' # 0xF1 -> ARABIC SHADDA + u'\u0652' # 0xF2 -> ARABIC SUKUN + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/iso8859_7.py b/thirdparty/python25/Lib/encodings/iso8859_7.py new file mode 100644 index 000000000..9fc2785b8 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso8859_7.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_7 generated from 'MAPPINGS/ISO8859/8859-7.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-7', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\x80' # 0x80 -> + u'\x81' # 0x81 -> + u'\x82' # 0x82 -> + u'\x83' # 0x83 -> + u'\x84' # 0x84 -> + u'\x85' # 0x85 -> + u'\x86' # 0x86 -> + u'\x87' # 0x87 -> + u'\x88' # 0x88 -> + u'\x89' # 0x89 -> + u'\x8a' # 0x8A -> + u'\x8b' # 0x8B -> + u'\x8c' # 0x8C -> + u'\x8d' # 0x8D -> + u'\x8e' # 0x8E -> + u'\x8f' # 0x8F -> + u'\x90' # 0x90 -> + u'\x91' # 0x91 -> + u'\x92' # 0x92 -> + u'\x93' # 0x93 -> + u'\x94' # 0x94 -> + u'\x95' # 0x95 -> + u'\x96' # 0x96 -> + u'\x97' # 0x97 -> + u'\x98' # 0x98 -> + u'\x99' # 0x99 -> + u'\x9a' # 0x9A -> + u'\x9b' # 0x9B -> + u'\x9c' # 0x9C -> + u'\x9d' # 0x9D -> + u'\x9e' # 0x9E -> + u'\x9f' # 0x9F -> + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\u2018' # 0xA1 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0xA2 -> RIGHT SINGLE QUOTATION MARK + u'\xa3' # 0xA3 -> POUND SIGN + u'\u20ac' # 0xA4 -> EURO SIGN + u'\u20af' # 0xA5 -> DRACHMA SIGN + u'\xa6' # 0xA6 -> BROKEN BAR + u'\xa7' # 0xA7 -> SECTION SIGN + u'\xa8' # 0xA8 -> DIAERESIS + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\u037a' # 0xAA -> GREEK YPOGEGRAMMENI + u'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xac' # 0xAC -> NOT SIGN + u'\xad' # 0xAD -> SOFT HYPHEN + u'\ufffe' + u'\u2015' # 0xAF -> HORIZONTAL BAR + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\xb2' # 0xB2 -> SUPERSCRIPT TWO + u'\xb3' # 0xB3 -> SUPERSCRIPT THREE + u'\u0384' # 0xB4 -> GREEK TONOS + u'\u0385' # 0xB5 -> GREEK DIALYTIKA TONOS + u'\u0386' # 0xB6 -> GREEK CAPITAL LETTER ALPHA WITH TONOS + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\u0388' # 0xB8 -> GREEK CAPITAL LETTER EPSILON WITH TONOS + u'\u0389' # 0xB9 -> GREEK CAPITAL LETTER ETA WITH TONOS + u'\u038a' # 0xBA -> GREEK CAPITAL LETTER IOTA WITH TONOS + u'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u038c' # 0xBC -> GREEK CAPITAL LETTER OMICRON WITH TONOS + u'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + u'\u038e' # 0xBE -> GREEK CAPITAL LETTER UPSILON WITH TONOS + u'\u038f' # 0xBF -> GREEK CAPITAL LETTER OMEGA WITH TONOS + u'\u0390' # 0xC0 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + u'\u0391' # 0xC1 -> GREEK CAPITAL LETTER ALPHA + u'\u0392' # 0xC2 -> GREEK CAPITAL LETTER BETA + u'\u0393' # 0xC3 -> GREEK CAPITAL LETTER GAMMA + u'\u0394' # 0xC4 -> GREEK CAPITAL LETTER DELTA + u'\u0395' # 0xC5 -> GREEK CAPITAL LETTER EPSILON + u'\u0396' # 0xC6 -> GREEK CAPITAL LETTER ZETA + u'\u0397' # 0xC7 -> GREEK CAPITAL LETTER ETA + u'\u0398' # 0xC8 -> GREEK CAPITAL LETTER THETA + u'\u0399' # 0xC9 -> GREEK CAPITAL LETTER IOTA + u'\u039a' # 0xCA -> GREEK CAPITAL LETTER KAPPA + u'\u039b' # 0xCB -> GREEK CAPITAL LETTER LAMDA + u'\u039c' # 0xCC -> GREEK CAPITAL LETTER MU + u'\u039d' # 0xCD -> GREEK CAPITAL LETTER NU + u'\u039e' # 0xCE -> GREEK CAPITAL LETTER XI + u'\u039f' # 0xCF -> GREEK CAPITAL LETTER OMICRON + u'\u03a0' # 0xD0 -> GREEK CAPITAL LETTER PI + u'\u03a1' # 0xD1 -> GREEK CAPITAL LETTER RHO + u'\ufffe' + u'\u03a3' # 0xD3 -> GREEK CAPITAL LETTER SIGMA + u'\u03a4' # 0xD4 -> GREEK CAPITAL LETTER TAU + u'\u03a5' # 0xD5 -> GREEK CAPITAL LETTER UPSILON + u'\u03a6' # 0xD6 -> GREEK CAPITAL LETTER PHI + u'\u03a7' # 0xD7 -> GREEK CAPITAL LETTER CHI + u'\u03a8' # 0xD8 -> GREEK CAPITAL LETTER PSI + u'\u03a9' # 0xD9 -> GREEK CAPITAL LETTER OMEGA + u'\u03aa' # 0xDA -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + u'\u03ab' # 0xDB -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + u'\u03ac' # 0xDC -> GREEK SMALL LETTER ALPHA WITH TONOS + u'\u03ad' # 0xDD -> GREEK SMALL LETTER EPSILON WITH TONOS + u'\u03ae' # 0xDE -> GREEK SMALL LETTER ETA WITH TONOS + u'\u03af' # 0xDF -> GREEK SMALL LETTER IOTA WITH TONOS + u'\u03b0' # 0xE0 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + u'\u03b1' # 0xE1 -> GREEK SMALL LETTER ALPHA + u'\u03b2' # 0xE2 -> GREEK SMALL LETTER BETA + u'\u03b3' # 0xE3 -> GREEK SMALL LETTER GAMMA + u'\u03b4' # 0xE4 -> GREEK SMALL LETTER DELTA + u'\u03b5' # 0xE5 -> GREEK SMALL LETTER EPSILON + u'\u03b6' # 0xE6 -> GREEK SMALL LETTER ZETA + u'\u03b7' # 0xE7 -> GREEK SMALL LETTER ETA + u'\u03b8' # 0xE8 -> GREEK SMALL LETTER THETA + u'\u03b9' # 0xE9 -> GREEK SMALL LETTER IOTA + u'\u03ba' # 0xEA -> GREEK SMALL LETTER KAPPA + u'\u03bb' # 0xEB -> GREEK SMALL LETTER LAMDA + u'\u03bc' # 0xEC -> GREEK SMALL LETTER MU + u'\u03bd' # 0xED -> GREEK SMALL LETTER NU + u'\u03be' # 0xEE -> GREEK SMALL LETTER XI + u'\u03bf' # 0xEF -> GREEK SMALL LETTER OMICRON + u'\u03c0' # 0xF0 -> GREEK SMALL LETTER PI + u'\u03c1' # 0xF1 -> GREEK SMALL LETTER RHO + u'\u03c2' # 0xF2 -> GREEK SMALL LETTER FINAL SIGMA + u'\u03c3' # 0xF3 -> GREEK SMALL LETTER SIGMA + u'\u03c4' # 0xF4 -> GREEK SMALL LETTER TAU + u'\u03c5' # 0xF5 -> GREEK SMALL LETTER UPSILON + u'\u03c6' # 0xF6 -> GREEK SMALL LETTER PHI + u'\u03c7' # 0xF7 -> GREEK SMALL LETTER CHI + u'\u03c8' # 0xF8 -> GREEK SMALL LETTER PSI + u'\u03c9' # 0xF9 -> GREEK SMALL LETTER OMEGA + u'\u03ca' # 0xFA -> GREEK SMALL LETTER IOTA WITH DIALYTIKA + u'\u03cb' # 0xFB -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA + u'\u03cc' # 0xFC -> GREEK SMALL LETTER OMICRON WITH TONOS + u'\u03cd' # 0xFD -> GREEK SMALL LETTER UPSILON WITH TONOS + u'\u03ce' # 0xFE -> GREEK SMALL LETTER OMEGA WITH TONOS + u'\ufffe' +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/iso8859_8.py b/thirdparty/python25/Lib/encodings/iso8859_8.py new file mode 100644 index 000000000..8810aedc7 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso8859_8.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_8 generated from 'MAPPINGS/ISO8859/8859-8.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-8', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\x80' # 0x80 -> + u'\x81' # 0x81 -> + u'\x82' # 0x82 -> + u'\x83' # 0x83 -> + u'\x84' # 0x84 -> + u'\x85' # 0x85 -> + u'\x86' # 0x86 -> + u'\x87' # 0x87 -> + u'\x88' # 0x88 -> + u'\x89' # 0x89 -> + u'\x8a' # 0x8A -> + u'\x8b' # 0x8B -> + u'\x8c' # 0x8C -> + u'\x8d' # 0x8D -> + u'\x8e' # 0x8E -> + u'\x8f' # 0x8F -> + u'\x90' # 0x90 -> + u'\x91' # 0x91 -> + u'\x92' # 0x92 -> + u'\x93' # 0x93 -> + u'\x94' # 0x94 -> + u'\x95' # 0x95 -> + u'\x96' # 0x96 -> + u'\x97' # 0x97 -> + u'\x98' # 0x98 -> + u'\x99' # 0x99 -> + u'\x9a' # 0x9A -> + u'\x9b' # 0x9B -> + u'\x9c' # 0x9C -> + u'\x9d' # 0x9D -> + u'\x9e' # 0x9E -> + u'\x9f' # 0x9F -> + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\ufffe' + u'\xa2' # 0xA2 -> CENT SIGN + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa4' # 0xA4 -> CURRENCY SIGN + u'\xa5' # 0xA5 -> YEN SIGN + u'\xa6' # 0xA6 -> BROKEN BAR + u'\xa7' # 0xA7 -> SECTION SIGN + u'\xa8' # 0xA8 -> DIAERESIS + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\xd7' # 0xAA -> MULTIPLICATION SIGN + u'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xac' # 0xAC -> NOT SIGN + u'\xad' # 0xAD -> SOFT HYPHEN + u'\xae' # 0xAE -> REGISTERED SIGN + u'\xaf' # 0xAF -> MACRON + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\xb2' # 0xB2 -> SUPERSCRIPT TWO + u'\xb3' # 0xB3 -> SUPERSCRIPT THREE + u'\xb4' # 0xB4 -> ACUTE ACCENT + u'\xb5' # 0xB5 -> MICRO SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\xb8' # 0xB8 -> CEDILLA + u'\xb9' # 0xB9 -> SUPERSCRIPT ONE + u'\xf7' # 0xBA -> DIVISION SIGN + u'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + u'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + u'\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\u2017' # 0xDF -> DOUBLE LOW LINE + u'\u05d0' # 0xE0 -> HEBREW LETTER ALEF + u'\u05d1' # 0xE1 -> HEBREW LETTER BET + u'\u05d2' # 0xE2 -> HEBREW LETTER GIMEL + u'\u05d3' # 0xE3 -> HEBREW LETTER DALET + u'\u05d4' # 0xE4 -> HEBREW LETTER HE + u'\u05d5' # 0xE5 -> HEBREW LETTER VAV + u'\u05d6' # 0xE6 -> HEBREW LETTER ZAYIN + u'\u05d7' # 0xE7 -> HEBREW LETTER HET + u'\u05d8' # 0xE8 -> HEBREW LETTER TET + u'\u05d9' # 0xE9 -> HEBREW LETTER YOD + u'\u05da' # 0xEA -> HEBREW LETTER FINAL KAF + u'\u05db' # 0xEB -> HEBREW LETTER KAF + u'\u05dc' # 0xEC -> HEBREW LETTER LAMED + u'\u05dd' # 0xED -> HEBREW LETTER FINAL MEM + u'\u05de' # 0xEE -> HEBREW LETTER MEM + u'\u05df' # 0xEF -> HEBREW LETTER FINAL NUN + u'\u05e0' # 0xF0 -> HEBREW LETTER NUN + u'\u05e1' # 0xF1 -> HEBREW LETTER SAMEKH + u'\u05e2' # 0xF2 -> HEBREW LETTER AYIN + u'\u05e3' # 0xF3 -> HEBREW LETTER FINAL PE + u'\u05e4' # 0xF4 -> HEBREW LETTER PE + u'\u05e5' # 0xF5 -> HEBREW LETTER FINAL TSADI + u'\u05e6' # 0xF6 -> HEBREW LETTER TSADI + u'\u05e7' # 0xF7 -> HEBREW LETTER QOF + u'\u05e8' # 0xF8 -> HEBREW LETTER RESH + u'\u05e9' # 0xF9 -> HEBREW LETTER SHIN + u'\u05ea' # 0xFA -> HEBREW LETTER TAV + u'\ufffe' + u'\ufffe' + u'\u200e' # 0xFD -> LEFT-TO-RIGHT MARK + u'\u200f' # 0xFE -> RIGHT-TO-LEFT MARK + u'\ufffe' +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/iso8859_9.py b/thirdparty/python25/Lib/encodings/iso8859_9.py new file mode 100644 index 000000000..980e99470 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/iso8859_9.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec iso8859_9 generated from 'MAPPINGS/ISO8859/8859-9.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-9', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\x80' # 0x80 -> + u'\x81' # 0x81 -> + u'\x82' # 0x82 -> + u'\x83' # 0x83 -> + u'\x84' # 0x84 -> + u'\x85' # 0x85 -> + u'\x86' # 0x86 -> + u'\x87' # 0x87 -> + u'\x88' # 0x88 -> + u'\x89' # 0x89 -> + u'\x8a' # 0x8A -> + u'\x8b' # 0x8B -> + u'\x8c' # 0x8C -> + u'\x8d' # 0x8D -> + u'\x8e' # 0x8E -> + u'\x8f' # 0x8F -> + u'\x90' # 0x90 -> + u'\x91' # 0x91 -> + u'\x92' # 0x92 -> + u'\x93' # 0x93 -> + u'\x94' # 0x94 -> + u'\x95' # 0x95 -> + u'\x96' # 0x96 -> + u'\x97' # 0x97 -> + u'\x98' # 0x98 -> + u'\x99' # 0x99 -> + u'\x9a' # 0x9A -> + u'\x9b' # 0x9B -> + u'\x9c' # 0x9C -> + u'\x9d' # 0x9D -> + u'\x9e' # 0x9E -> + u'\x9f' # 0x9F -> + u'\xa0' # 0xA0 -> NO-BREAK SPACE + u'\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK + u'\xa2' # 0xA2 -> CENT SIGN + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa4' # 0xA4 -> CURRENCY SIGN + u'\xa5' # 0xA5 -> YEN SIGN + u'\xa6' # 0xA6 -> BROKEN BAR + u'\xa7' # 0xA7 -> SECTION SIGN + u'\xa8' # 0xA8 -> DIAERESIS + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR + u'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xac' # 0xAC -> NOT SIGN + u'\xad' # 0xAD -> SOFT HYPHEN + u'\xae' # 0xAE -> REGISTERED SIGN + u'\xaf' # 0xAF -> MACRON + u'\xb0' # 0xB0 -> DEGREE SIGN + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\xb2' # 0xB2 -> SUPERSCRIPT TWO + u'\xb3' # 0xB3 -> SUPERSCRIPT THREE + u'\xb4' # 0xB4 -> ACUTE ACCENT + u'\xb5' # 0xB5 -> MICRO SIGN + u'\xb6' # 0xB6 -> PILCROW SIGN + u'\xb7' # 0xB7 -> MIDDLE DOT + u'\xb8' # 0xB8 -> CEDILLA + u'\xb9' # 0xB9 -> SUPERSCRIPT ONE + u'\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR + u'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER + u'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF + u'\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS + u'\xbf' # 0xBF -> INVERTED QUESTION MARK + u'\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE + u'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE + u'\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE + u'\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\u011e' # 0xD0 -> LATIN CAPITAL LETTER G WITH BREVE + u'\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE + u'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xd7' # 0xD7 -> MULTIPLICATION SIGN + u'\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE + u'\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE + u'\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\u0130' # 0xDD -> LATIN CAPITAL LETTER I WITH DOT ABOVE + u'\u015e' # 0xDE -> LATIN CAPITAL LETTER S WITH CEDILLA + u'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S + u'\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE + u'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe6' # 0xE6 -> LATIN SMALL LETTER AE + u'\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE + u'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE + u'\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE + u'\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE + u'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS + u'\u011f' # 0xF0 -> LATIN SMALL LETTER G WITH BREVE + u'\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE + u'\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE + u'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE + u'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE + u'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf7' # 0xF7 -> DIVISION SIGN + u'\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE + u'\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE + u'\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE + u'\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS + u'\u0131' # 0xFD -> LATIN SMALL LETTER DOTLESS I + u'\u015f' # 0xFE -> LATIN SMALL LETTER S WITH CEDILLA + u'\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/johab.py b/thirdparty/python25/Lib/encodings/johab.py new file mode 100644 index 000000000..5c767cd7a --- /dev/null +++ b/thirdparty/python25/Lib/encodings/johab.py @@ -0,0 +1,39 @@ +# +# johab.py: Python Unicode Codec for JOHAB +# +# Written by Hye-Shik Chang +# + +import _codecs_kr, codecs +import _multibytecodec as mbc + +codec = _codecs_kr.getcodec('johab') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='johab', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/koi8_r.py b/thirdparty/python25/Lib/encodings/koi8_r.py new file mode 100644 index 000000000..492a618de --- /dev/null +++ b/thirdparty/python25/Lib/encodings/koi8_r.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec koi8_r generated from 'MAPPINGS/VENDORS/MISC/KOI8-R.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='koi8-r', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\u2500' # 0x80 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u2502' # 0x81 -> BOX DRAWINGS LIGHT VERTICAL + u'\u250c' # 0x82 -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2510' # 0x83 -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0x84 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2518' # 0x85 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u251c' # 0x86 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2524' # 0x87 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\u252c' # 0x88 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u2534' # 0x89 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u253c' # 0x8A -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\u2580' # 0x8B -> UPPER HALF BLOCK + u'\u2584' # 0x8C -> LOWER HALF BLOCK + u'\u2588' # 0x8D -> FULL BLOCK + u'\u258c' # 0x8E -> LEFT HALF BLOCK + u'\u2590' # 0x8F -> RIGHT HALF BLOCK + u'\u2591' # 0x90 -> LIGHT SHADE + u'\u2592' # 0x91 -> MEDIUM SHADE + u'\u2593' # 0x92 -> DARK SHADE + u'\u2320' # 0x93 -> TOP HALF INTEGRAL + u'\u25a0' # 0x94 -> BLACK SQUARE + u'\u2219' # 0x95 -> BULLET OPERATOR + u'\u221a' # 0x96 -> SQUARE ROOT + u'\u2248' # 0x97 -> ALMOST EQUAL TO + u'\u2264' # 0x98 -> LESS-THAN OR EQUAL TO + u'\u2265' # 0x99 -> GREATER-THAN OR EQUAL TO + u'\xa0' # 0x9A -> NO-BREAK SPACE + u'\u2321' # 0x9B -> BOTTOM HALF INTEGRAL + u'\xb0' # 0x9C -> DEGREE SIGN + u'\xb2' # 0x9D -> SUPERSCRIPT TWO + u'\xb7' # 0x9E -> MIDDLE DOT + u'\xf7' # 0x9F -> DIVISION SIGN + u'\u2550' # 0xA0 -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u2551' # 0xA1 -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2552' # 0xA2 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + u'\u0451' # 0xA3 -> CYRILLIC SMALL LETTER IO + u'\u2553' # 0xA4 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + u'\u2554' # 0xA5 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u2555' # 0xA6 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + u'\u2556' # 0xA7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + u'\u2557' # 0xA8 -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u2558' # 0xA9 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + u'\u2559' # 0xAA -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + u'\u255a' # 0xAB -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u255b' # 0xAC -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + u'\u255c' # 0xAD -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + u'\u255d' # 0xAE -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\u255e' # 0xAF -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + u'\u255f' # 0xB0 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + u'\u2560' # 0xB1 -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2561' # 0xB2 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + u'\u0401' # 0xB3 -> CYRILLIC CAPITAL LETTER IO + u'\u2562' # 0xB4 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + u'\u2563' # 0xB5 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u2564' # 0xB6 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + u'\u2565' # 0xB7 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + u'\u2566' # 0xB8 -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2567' # 0xB9 -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + u'\u2568' # 0xBA -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + u'\u2569' # 0xBB -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u256a' # 0xBC -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + u'\u256b' # 0xBD -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + u'\u256c' # 0xBE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\xa9' # 0xBF -> COPYRIGHT SIGN + u'\u044e' # 0xC0 -> CYRILLIC SMALL LETTER YU + u'\u0430' # 0xC1 -> CYRILLIC SMALL LETTER A + u'\u0431' # 0xC2 -> CYRILLIC SMALL LETTER BE + u'\u0446' # 0xC3 -> CYRILLIC SMALL LETTER TSE + u'\u0434' # 0xC4 -> CYRILLIC SMALL LETTER DE + u'\u0435' # 0xC5 -> CYRILLIC SMALL LETTER IE + u'\u0444' # 0xC6 -> CYRILLIC SMALL LETTER EF + u'\u0433' # 0xC7 -> CYRILLIC SMALL LETTER GHE + u'\u0445' # 0xC8 -> CYRILLIC SMALL LETTER HA + u'\u0438' # 0xC9 -> CYRILLIC SMALL LETTER I + u'\u0439' # 0xCA -> CYRILLIC SMALL LETTER SHORT I + u'\u043a' # 0xCB -> CYRILLIC SMALL LETTER KA + u'\u043b' # 0xCC -> CYRILLIC SMALL LETTER EL + u'\u043c' # 0xCD -> CYRILLIC SMALL LETTER EM + u'\u043d' # 0xCE -> CYRILLIC SMALL LETTER EN + u'\u043e' # 0xCF -> CYRILLIC SMALL LETTER O + u'\u043f' # 0xD0 -> CYRILLIC SMALL LETTER PE + u'\u044f' # 0xD1 -> CYRILLIC SMALL LETTER YA + u'\u0440' # 0xD2 -> CYRILLIC SMALL LETTER ER + u'\u0441' # 0xD3 -> CYRILLIC SMALL LETTER ES + u'\u0442' # 0xD4 -> CYRILLIC SMALL LETTER TE + u'\u0443' # 0xD5 -> CYRILLIC SMALL LETTER U + u'\u0436' # 0xD6 -> CYRILLIC SMALL LETTER ZHE + u'\u0432' # 0xD7 -> CYRILLIC SMALL LETTER VE + u'\u044c' # 0xD8 -> CYRILLIC SMALL LETTER SOFT SIGN + u'\u044b' # 0xD9 -> CYRILLIC SMALL LETTER YERU + u'\u0437' # 0xDA -> CYRILLIC SMALL LETTER ZE + u'\u0448' # 0xDB -> CYRILLIC SMALL LETTER SHA + u'\u044d' # 0xDC -> CYRILLIC SMALL LETTER E + u'\u0449' # 0xDD -> CYRILLIC SMALL LETTER SHCHA + u'\u0447' # 0xDE -> CYRILLIC SMALL LETTER CHE + u'\u044a' # 0xDF -> CYRILLIC SMALL LETTER HARD SIGN + u'\u042e' # 0xE0 -> CYRILLIC CAPITAL LETTER YU + u'\u0410' # 0xE1 -> CYRILLIC CAPITAL LETTER A + u'\u0411' # 0xE2 -> CYRILLIC CAPITAL LETTER BE + u'\u0426' # 0xE3 -> CYRILLIC CAPITAL LETTER TSE + u'\u0414' # 0xE4 -> CYRILLIC CAPITAL LETTER DE + u'\u0415' # 0xE5 -> CYRILLIC CAPITAL LETTER IE + u'\u0424' # 0xE6 -> CYRILLIC CAPITAL LETTER EF + u'\u0413' # 0xE7 -> CYRILLIC CAPITAL LETTER GHE + u'\u0425' # 0xE8 -> CYRILLIC CAPITAL LETTER HA + u'\u0418' # 0xE9 -> CYRILLIC CAPITAL LETTER I + u'\u0419' # 0xEA -> CYRILLIC CAPITAL LETTER SHORT I + u'\u041a' # 0xEB -> CYRILLIC CAPITAL LETTER KA + u'\u041b' # 0xEC -> CYRILLIC CAPITAL LETTER EL + u'\u041c' # 0xED -> CYRILLIC CAPITAL LETTER EM + u'\u041d' # 0xEE -> CYRILLIC CAPITAL LETTER EN + u'\u041e' # 0xEF -> CYRILLIC CAPITAL LETTER O + u'\u041f' # 0xF0 -> CYRILLIC CAPITAL LETTER PE + u'\u042f' # 0xF1 -> CYRILLIC CAPITAL LETTER YA + u'\u0420' # 0xF2 -> CYRILLIC CAPITAL LETTER ER + u'\u0421' # 0xF3 -> CYRILLIC CAPITAL LETTER ES + u'\u0422' # 0xF4 -> CYRILLIC CAPITAL LETTER TE + u'\u0423' # 0xF5 -> CYRILLIC CAPITAL LETTER U + u'\u0416' # 0xF6 -> CYRILLIC CAPITAL LETTER ZHE + u'\u0412' # 0xF7 -> CYRILLIC CAPITAL LETTER VE + u'\u042c' # 0xF8 -> CYRILLIC CAPITAL LETTER SOFT SIGN + u'\u042b' # 0xF9 -> CYRILLIC CAPITAL LETTER YERU + u'\u0417' # 0xFA -> CYRILLIC CAPITAL LETTER ZE + u'\u0428' # 0xFB -> CYRILLIC CAPITAL LETTER SHA + u'\u042d' # 0xFC -> CYRILLIC CAPITAL LETTER E + u'\u0429' # 0xFD -> CYRILLIC CAPITAL LETTER SHCHA + u'\u0427' # 0xFE -> CYRILLIC CAPITAL LETTER CHE + u'\u042a' # 0xFF -> CYRILLIC CAPITAL LETTER HARD SIGN +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/koi8_u.py b/thirdparty/python25/Lib/encodings/koi8_u.py new file mode 100644 index 000000000..edb85f483 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/koi8_u.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec koi8_u generated from 'python-mappings/KOI8-U.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='koi8-u', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\u2500' # 0x80 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u2502' # 0x81 -> BOX DRAWINGS LIGHT VERTICAL + u'\u250c' # 0x82 -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2510' # 0x83 -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0x84 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2518' # 0x85 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u251c' # 0x86 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2524' # 0x87 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\u252c' # 0x88 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u2534' # 0x89 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u253c' # 0x8A -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\u2580' # 0x8B -> UPPER HALF BLOCK + u'\u2584' # 0x8C -> LOWER HALF BLOCK + u'\u2588' # 0x8D -> FULL BLOCK + u'\u258c' # 0x8E -> LEFT HALF BLOCK + u'\u2590' # 0x8F -> RIGHT HALF BLOCK + u'\u2591' # 0x90 -> LIGHT SHADE + u'\u2592' # 0x91 -> MEDIUM SHADE + u'\u2593' # 0x92 -> DARK SHADE + u'\u2320' # 0x93 -> TOP HALF INTEGRAL + u'\u25a0' # 0x94 -> BLACK SQUARE + u'\u2219' # 0x95 -> BULLET OPERATOR + u'\u221a' # 0x96 -> SQUARE ROOT + u'\u2248' # 0x97 -> ALMOST EQUAL TO + u'\u2264' # 0x98 -> LESS-THAN OR EQUAL TO + u'\u2265' # 0x99 -> GREATER-THAN OR EQUAL TO + u'\xa0' # 0x9A -> NO-BREAK SPACE + u'\u2321' # 0x9B -> BOTTOM HALF INTEGRAL + u'\xb0' # 0x9C -> DEGREE SIGN + u'\xb2' # 0x9D -> SUPERSCRIPT TWO + u'\xb7' # 0x9E -> MIDDLE DOT + u'\xf7' # 0x9F -> DIVISION SIGN + u'\u2550' # 0xA0 -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u2551' # 0xA1 -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2552' # 0xA2 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + u'\u0451' # 0xA3 -> CYRILLIC SMALL LETTER IO + u'\u0454' # 0xA4 -> CYRILLIC SMALL LETTER UKRAINIAN IE + u'\u2554' # 0xA5 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u0456' # 0xA6 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + u'\u0457' # 0xA7 -> CYRILLIC SMALL LETTER YI (UKRAINIAN) + u'\u2557' # 0xA8 -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u2558' # 0xA9 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + u'\u2559' # 0xAA -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + u'\u255a' # 0xAB -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u255b' # 0xAC -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + u'\u0491' # 0xAD -> CYRILLIC SMALL LETTER UKRAINIAN GHE WITH UPTURN + u'\u255d' # 0xAE -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\u255e' # 0xAF -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + u'\u255f' # 0xB0 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + u'\u2560' # 0xB1 -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2561' # 0xB2 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + u'\u0401' # 0xB3 -> CYRILLIC CAPITAL LETTER IO + u'\u0404' # 0xB4 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE + u'\u2563' # 0xB5 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u0406' # 0xB6 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + u'\u0407' # 0xB7 -> CYRILLIC CAPITAL LETTER YI (UKRAINIAN) + u'\u2566' # 0xB8 -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2567' # 0xB9 -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + u'\u2568' # 0xBA -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + u'\u2569' # 0xBB -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u256a' # 0xBC -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + u'\u0490' # 0xBD -> CYRILLIC CAPITAL LETTER UKRAINIAN GHE WITH UPTURN + u'\u256c' # 0xBE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\xa9' # 0xBF -> COPYRIGHT SIGN + u'\u044e' # 0xC0 -> CYRILLIC SMALL LETTER YU + u'\u0430' # 0xC1 -> CYRILLIC SMALL LETTER A + u'\u0431' # 0xC2 -> CYRILLIC SMALL LETTER BE + u'\u0446' # 0xC3 -> CYRILLIC SMALL LETTER TSE + u'\u0434' # 0xC4 -> CYRILLIC SMALL LETTER DE + u'\u0435' # 0xC5 -> CYRILLIC SMALL LETTER IE + u'\u0444' # 0xC6 -> CYRILLIC SMALL LETTER EF + u'\u0433' # 0xC7 -> CYRILLIC SMALL LETTER GHE + u'\u0445' # 0xC8 -> CYRILLIC SMALL LETTER HA + u'\u0438' # 0xC9 -> CYRILLIC SMALL LETTER I + u'\u0439' # 0xCA -> CYRILLIC SMALL LETTER SHORT I + u'\u043a' # 0xCB -> CYRILLIC SMALL LETTER KA + u'\u043b' # 0xCC -> CYRILLIC SMALL LETTER EL + u'\u043c' # 0xCD -> CYRILLIC SMALL LETTER EM + u'\u043d' # 0xCE -> CYRILLIC SMALL LETTER EN + u'\u043e' # 0xCF -> CYRILLIC SMALL LETTER O + u'\u043f' # 0xD0 -> CYRILLIC SMALL LETTER PE + u'\u044f' # 0xD1 -> CYRILLIC SMALL LETTER YA + u'\u0440' # 0xD2 -> CYRILLIC SMALL LETTER ER + u'\u0441' # 0xD3 -> CYRILLIC SMALL LETTER ES + u'\u0442' # 0xD4 -> CYRILLIC SMALL LETTER TE + u'\u0443' # 0xD5 -> CYRILLIC SMALL LETTER U + u'\u0436' # 0xD6 -> CYRILLIC SMALL LETTER ZHE + u'\u0432' # 0xD7 -> CYRILLIC SMALL LETTER VE + u'\u044c' # 0xD8 -> CYRILLIC SMALL LETTER SOFT SIGN + u'\u044b' # 0xD9 -> CYRILLIC SMALL LETTER YERU + u'\u0437' # 0xDA -> CYRILLIC SMALL LETTER ZE + u'\u0448' # 0xDB -> CYRILLIC SMALL LETTER SHA + u'\u044d' # 0xDC -> CYRILLIC SMALL LETTER E + u'\u0449' # 0xDD -> CYRILLIC SMALL LETTER SHCHA + u'\u0447' # 0xDE -> CYRILLIC SMALL LETTER CHE + u'\u044a' # 0xDF -> CYRILLIC SMALL LETTER HARD SIGN + u'\u042e' # 0xE0 -> CYRILLIC CAPITAL LETTER YU + u'\u0410' # 0xE1 -> CYRILLIC CAPITAL LETTER A + u'\u0411' # 0xE2 -> CYRILLIC CAPITAL LETTER BE + u'\u0426' # 0xE3 -> CYRILLIC CAPITAL LETTER TSE + u'\u0414' # 0xE4 -> CYRILLIC CAPITAL LETTER DE + u'\u0415' # 0xE5 -> CYRILLIC CAPITAL LETTER IE + u'\u0424' # 0xE6 -> CYRILLIC CAPITAL LETTER EF + u'\u0413' # 0xE7 -> CYRILLIC CAPITAL LETTER GHE + u'\u0425' # 0xE8 -> CYRILLIC CAPITAL LETTER HA + u'\u0418' # 0xE9 -> CYRILLIC CAPITAL LETTER I + u'\u0419' # 0xEA -> CYRILLIC CAPITAL LETTER SHORT I + u'\u041a' # 0xEB -> CYRILLIC CAPITAL LETTER KA + u'\u041b' # 0xEC -> CYRILLIC CAPITAL LETTER EL + u'\u041c' # 0xED -> CYRILLIC CAPITAL LETTER EM + u'\u041d' # 0xEE -> CYRILLIC CAPITAL LETTER EN + u'\u041e' # 0xEF -> CYRILLIC CAPITAL LETTER O + u'\u041f' # 0xF0 -> CYRILLIC CAPITAL LETTER PE + u'\u042f' # 0xF1 -> CYRILLIC CAPITAL LETTER YA + u'\u0420' # 0xF2 -> CYRILLIC CAPITAL LETTER ER + u'\u0421' # 0xF3 -> CYRILLIC CAPITAL LETTER ES + u'\u0422' # 0xF4 -> CYRILLIC CAPITAL LETTER TE + u'\u0423' # 0xF5 -> CYRILLIC CAPITAL LETTER U + u'\u0416' # 0xF6 -> CYRILLIC CAPITAL LETTER ZHE + u'\u0412' # 0xF7 -> CYRILLIC CAPITAL LETTER VE + u'\u042c' # 0xF8 -> CYRILLIC CAPITAL LETTER SOFT SIGN + u'\u042b' # 0xF9 -> CYRILLIC CAPITAL LETTER YERU + u'\u0417' # 0xFA -> CYRILLIC CAPITAL LETTER ZE + u'\u0428' # 0xFB -> CYRILLIC CAPITAL LETTER SHA + u'\u042d' # 0xFC -> CYRILLIC CAPITAL LETTER E + u'\u0429' # 0xFD -> CYRILLIC CAPITAL LETTER SHCHA + u'\u0427' # 0xFE -> CYRILLIC CAPITAL LETTER CHE + u'\u042a' # 0xFF -> CYRILLIC CAPITAL LETTER HARD SIGN +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/latin_1.py b/thirdparty/python25/Lib/encodings/latin_1.py new file mode 100644 index 000000000..a6193bc85 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/latin_1.py @@ -0,0 +1,50 @@ +""" Python 'latin-1' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + # Note: Binding these as C functions will result in the class not + # converting them to methods. This is intended. + encode = codecs.latin_1_encode + decode = codecs.latin_1_decode + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.latin_1_encode(input,self.errors)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.latin_1_decode(input,self.errors)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +class StreamConverter(StreamWriter,StreamReader): + + encode = codecs.latin_1_decode + decode = codecs.latin_1_encode + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='iso8859-1', + encode=Codec.encode, + decode=Codec.decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/mac_arabic.py b/thirdparty/python25/Lib/encodings/mac_arabic.py new file mode 100644 index 000000000..e5e63e3c3 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/mac_arabic.py @@ -0,0 +1,698 @@ +""" Python Character Mapping Codec generated from 'VENDORS/APPLE/ARABIC.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-arabic', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x0081: 0x00a0, # NO-BREAK SPACE, right-left + 0x0082: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x0083: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0084: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE + 0x0085: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x0086: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x0087: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x0088: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0x0089: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x008a: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x008b: 0x06ba, # ARABIC LETTER NOON GHUNNA + 0x008c: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left + 0x008d: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0x008e: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x008f: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0x0090: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x0091: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0x0092: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x0093: 0x2026, # HORIZONTAL ELLIPSIS, right-left + 0x0094: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x0095: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS + 0x0096: 0x00f1, # LATIN SMALL LETTER N WITH TILDE + 0x0097: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x0098: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left + 0x0099: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x009a: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x009b: 0x00f7, # DIVISION SIGN, right-left + 0x009c: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x009d: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE + 0x009e: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x009f: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x00a0: 0x0020, # SPACE, right-left + 0x00a1: 0x0021, # EXCLAMATION MARK, right-left + 0x00a2: 0x0022, # QUOTATION MARK, right-left + 0x00a3: 0x0023, # NUMBER SIGN, right-left + 0x00a4: 0x0024, # DOLLAR SIGN, right-left + 0x00a5: 0x066a, # ARABIC PERCENT SIGN + 0x00a6: 0x0026, # AMPERSAND, right-left + 0x00a7: 0x0027, # APOSTROPHE, right-left + 0x00a8: 0x0028, # LEFT PARENTHESIS, right-left + 0x00a9: 0x0029, # RIGHT PARENTHESIS, right-left + 0x00aa: 0x002a, # ASTERISK, right-left + 0x00ab: 0x002b, # PLUS SIGN, right-left + 0x00ac: 0x060c, # ARABIC COMMA + 0x00ad: 0x002d, # HYPHEN-MINUS, right-left + 0x00ae: 0x002e, # FULL STOP, right-left + 0x00af: 0x002f, # SOLIDUS, right-left + 0x00b0: 0x0660, # ARABIC-INDIC DIGIT ZERO, right-left (need override) + 0x00b1: 0x0661, # ARABIC-INDIC DIGIT ONE, right-left (need override) + 0x00b2: 0x0662, # ARABIC-INDIC DIGIT TWO, right-left (need override) + 0x00b3: 0x0663, # ARABIC-INDIC DIGIT THREE, right-left (need override) + 0x00b4: 0x0664, # ARABIC-INDIC DIGIT FOUR, right-left (need override) + 0x00b5: 0x0665, # ARABIC-INDIC DIGIT FIVE, right-left (need override) + 0x00b6: 0x0666, # ARABIC-INDIC DIGIT SIX, right-left (need override) + 0x00b7: 0x0667, # ARABIC-INDIC DIGIT SEVEN, right-left (need override) + 0x00b8: 0x0668, # ARABIC-INDIC DIGIT EIGHT, right-left (need override) + 0x00b9: 0x0669, # ARABIC-INDIC DIGIT NINE, right-left (need override) + 0x00ba: 0x003a, # COLON, right-left + 0x00bb: 0x061b, # ARABIC SEMICOLON + 0x00bc: 0x003c, # LESS-THAN SIGN, right-left + 0x00bd: 0x003d, # EQUALS SIGN, right-left + 0x00be: 0x003e, # GREATER-THAN SIGN, right-left + 0x00bf: 0x061f, # ARABIC QUESTION MARK + 0x00c0: 0x274a, # EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left + 0x00c1: 0x0621, # ARABIC LETTER HAMZA + 0x00c2: 0x0622, # ARABIC LETTER ALEF WITH MADDA ABOVE + 0x00c3: 0x0623, # ARABIC LETTER ALEF WITH HAMZA ABOVE + 0x00c4: 0x0624, # ARABIC LETTER WAW WITH HAMZA ABOVE + 0x00c5: 0x0625, # ARABIC LETTER ALEF WITH HAMZA BELOW + 0x00c6: 0x0626, # ARABIC LETTER YEH WITH HAMZA ABOVE + 0x00c7: 0x0627, # ARABIC LETTER ALEF + 0x00c8: 0x0628, # ARABIC LETTER BEH + 0x00c9: 0x0629, # ARABIC LETTER TEH MARBUTA + 0x00ca: 0x062a, # ARABIC LETTER TEH + 0x00cb: 0x062b, # ARABIC LETTER THEH + 0x00cc: 0x062c, # ARABIC LETTER JEEM + 0x00cd: 0x062d, # ARABIC LETTER HAH + 0x00ce: 0x062e, # ARABIC LETTER KHAH + 0x00cf: 0x062f, # ARABIC LETTER DAL + 0x00d0: 0x0630, # ARABIC LETTER THAL + 0x00d1: 0x0631, # ARABIC LETTER REH + 0x00d2: 0x0632, # ARABIC LETTER ZAIN + 0x00d3: 0x0633, # ARABIC LETTER SEEN + 0x00d4: 0x0634, # ARABIC LETTER SHEEN + 0x00d5: 0x0635, # ARABIC LETTER SAD + 0x00d6: 0x0636, # ARABIC LETTER DAD + 0x00d7: 0x0637, # ARABIC LETTER TAH + 0x00d8: 0x0638, # ARABIC LETTER ZAH + 0x00d9: 0x0639, # ARABIC LETTER AIN + 0x00da: 0x063a, # ARABIC LETTER GHAIN + 0x00db: 0x005b, # LEFT SQUARE BRACKET, right-left + 0x00dc: 0x005c, # REVERSE SOLIDUS, right-left + 0x00dd: 0x005d, # RIGHT SQUARE BRACKET, right-left + 0x00de: 0x005e, # CIRCUMFLEX ACCENT, right-left + 0x00df: 0x005f, # LOW LINE, right-left + 0x00e0: 0x0640, # ARABIC TATWEEL + 0x00e1: 0x0641, # ARABIC LETTER FEH + 0x00e2: 0x0642, # ARABIC LETTER QAF + 0x00e3: 0x0643, # ARABIC LETTER KAF + 0x00e4: 0x0644, # ARABIC LETTER LAM + 0x00e5: 0x0645, # ARABIC LETTER MEEM + 0x00e6: 0x0646, # ARABIC LETTER NOON + 0x00e7: 0x0647, # ARABIC LETTER HEH + 0x00e8: 0x0648, # ARABIC LETTER WAW + 0x00e9: 0x0649, # ARABIC LETTER ALEF MAKSURA + 0x00ea: 0x064a, # ARABIC LETTER YEH + 0x00eb: 0x064b, # ARABIC FATHATAN + 0x00ec: 0x064c, # ARABIC DAMMATAN + 0x00ed: 0x064d, # ARABIC KASRATAN + 0x00ee: 0x064e, # ARABIC FATHA + 0x00ef: 0x064f, # ARABIC DAMMA + 0x00f0: 0x0650, # ARABIC KASRA + 0x00f1: 0x0651, # ARABIC SHADDA + 0x00f2: 0x0652, # ARABIC SUKUN + 0x00f3: 0x067e, # ARABIC LETTER PEH + 0x00f4: 0x0679, # ARABIC LETTER TTEH + 0x00f5: 0x0686, # ARABIC LETTER TCHEH + 0x00f6: 0x06d5, # ARABIC LETTER AE + 0x00f7: 0x06a4, # ARABIC LETTER VEH + 0x00f8: 0x06af, # ARABIC LETTER GAF + 0x00f9: 0x0688, # ARABIC LETTER DDAL + 0x00fa: 0x0691, # ARABIC LETTER RREH + 0x00fb: 0x007b, # LEFT CURLY BRACKET, right-left + 0x00fc: 0x007c, # VERTICAL LINE, right-left + 0x00fd: 0x007d, # RIGHT CURLY BRACKET, right-left + 0x00fe: 0x0698, # ARABIC LETTER JEH + 0x00ff: 0x06d2, # ARABIC LETTER YEH BARREE +}) + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x0000 -> CONTROL CHARACTER + u'\x01' # 0x0001 -> CONTROL CHARACTER + u'\x02' # 0x0002 -> CONTROL CHARACTER + u'\x03' # 0x0003 -> CONTROL CHARACTER + u'\x04' # 0x0004 -> CONTROL CHARACTER + u'\x05' # 0x0005 -> CONTROL CHARACTER + u'\x06' # 0x0006 -> CONTROL CHARACTER + u'\x07' # 0x0007 -> CONTROL CHARACTER + u'\x08' # 0x0008 -> CONTROL CHARACTER + u'\t' # 0x0009 -> CONTROL CHARACTER + u'\n' # 0x000a -> CONTROL CHARACTER + u'\x0b' # 0x000b -> CONTROL CHARACTER + u'\x0c' # 0x000c -> CONTROL CHARACTER + u'\r' # 0x000d -> CONTROL CHARACTER + u'\x0e' # 0x000e -> CONTROL CHARACTER + u'\x0f' # 0x000f -> CONTROL CHARACTER + u'\x10' # 0x0010 -> CONTROL CHARACTER + u'\x11' # 0x0011 -> CONTROL CHARACTER + u'\x12' # 0x0012 -> CONTROL CHARACTER + u'\x13' # 0x0013 -> CONTROL CHARACTER + u'\x14' # 0x0014 -> CONTROL CHARACTER + u'\x15' # 0x0015 -> CONTROL CHARACTER + u'\x16' # 0x0016 -> CONTROL CHARACTER + u'\x17' # 0x0017 -> CONTROL CHARACTER + u'\x18' # 0x0018 -> CONTROL CHARACTER + u'\x19' # 0x0019 -> CONTROL CHARACTER + u'\x1a' # 0x001a -> CONTROL CHARACTER + u'\x1b' # 0x001b -> CONTROL CHARACTER + u'\x1c' # 0x001c -> CONTROL CHARACTER + u'\x1d' # 0x001d -> CONTROL CHARACTER + u'\x1e' # 0x001e -> CONTROL CHARACTER + u'\x1f' # 0x001f -> CONTROL CHARACTER + u' ' # 0x0020 -> SPACE, left-right + u'!' # 0x0021 -> EXCLAMATION MARK, left-right + u'"' # 0x0022 -> QUOTATION MARK, left-right + u'#' # 0x0023 -> NUMBER SIGN, left-right + u'$' # 0x0024 -> DOLLAR SIGN, left-right + u'%' # 0x0025 -> PERCENT SIGN, left-right + u'&' # 0x0026 -> AMPERSAND, left-right + u"'" # 0x0027 -> APOSTROPHE, left-right + u'(' # 0x0028 -> LEFT PARENTHESIS, left-right + u')' # 0x0029 -> RIGHT PARENTHESIS, left-right + u'*' # 0x002a -> ASTERISK, left-right + u'+' # 0x002b -> PLUS SIGN, left-right + u',' # 0x002c -> COMMA, left-right; in Arabic-script context, displayed as 0x066C ARABIC THOUSANDS SEPARATOR + u'-' # 0x002d -> HYPHEN-MINUS, left-right + u'.' # 0x002e -> FULL STOP, left-right; in Arabic-script context, displayed as 0x066B ARABIC DECIMAL SEPARATOR + u'/' # 0x002f -> SOLIDUS, left-right + u'0' # 0x0030 -> DIGIT ZERO; in Arabic-script context, displayed as 0x0660 ARABIC-INDIC DIGIT ZERO + u'1' # 0x0031 -> DIGIT ONE; in Arabic-script context, displayed as 0x0661 ARABIC-INDIC DIGIT ONE + u'2' # 0x0032 -> DIGIT TWO; in Arabic-script context, displayed as 0x0662 ARABIC-INDIC DIGIT TWO + u'3' # 0x0033 -> DIGIT THREE; in Arabic-script context, displayed as 0x0663 ARABIC-INDIC DIGIT THREE + u'4' # 0x0034 -> DIGIT FOUR; in Arabic-script context, displayed as 0x0664 ARABIC-INDIC DIGIT FOUR + u'5' # 0x0035 -> DIGIT FIVE; in Arabic-script context, displayed as 0x0665 ARABIC-INDIC DIGIT FIVE + u'6' # 0x0036 -> DIGIT SIX; in Arabic-script context, displayed as 0x0666 ARABIC-INDIC DIGIT SIX + u'7' # 0x0037 -> DIGIT SEVEN; in Arabic-script context, displayed as 0x0667 ARABIC-INDIC DIGIT SEVEN + u'8' # 0x0038 -> DIGIT EIGHT; in Arabic-script context, displayed as 0x0668 ARABIC-INDIC DIGIT EIGHT + u'9' # 0x0039 -> DIGIT NINE; in Arabic-script context, displayed as 0x0669 ARABIC-INDIC DIGIT NINE + u':' # 0x003a -> COLON, left-right + u';' # 0x003b -> SEMICOLON, left-right + u'<' # 0x003c -> LESS-THAN SIGN, left-right + u'=' # 0x003d -> EQUALS SIGN, left-right + u'>' # 0x003e -> GREATER-THAN SIGN, left-right + u'?' # 0x003f -> QUESTION MARK, left-right + u'@' # 0x0040 -> COMMERCIAL AT + u'A' # 0x0041 -> LATIN CAPITAL LETTER A + u'B' # 0x0042 -> LATIN CAPITAL LETTER B + u'C' # 0x0043 -> LATIN CAPITAL LETTER C + u'D' # 0x0044 -> LATIN CAPITAL LETTER D + u'E' # 0x0045 -> LATIN CAPITAL LETTER E + u'F' # 0x0046 -> LATIN CAPITAL LETTER F + u'G' # 0x0047 -> LATIN CAPITAL LETTER G + u'H' # 0x0048 -> LATIN CAPITAL LETTER H + u'I' # 0x0049 -> LATIN CAPITAL LETTER I + u'J' # 0x004a -> LATIN CAPITAL LETTER J + u'K' # 0x004b -> LATIN CAPITAL LETTER K + u'L' # 0x004c -> LATIN CAPITAL LETTER L + u'M' # 0x004d -> LATIN CAPITAL LETTER M + u'N' # 0x004e -> LATIN CAPITAL LETTER N + u'O' # 0x004f -> LATIN CAPITAL LETTER O + u'P' # 0x0050 -> LATIN CAPITAL LETTER P + u'Q' # 0x0051 -> LATIN CAPITAL LETTER Q + u'R' # 0x0052 -> LATIN CAPITAL LETTER R + u'S' # 0x0053 -> LATIN CAPITAL LETTER S + u'T' # 0x0054 -> LATIN CAPITAL LETTER T + u'U' # 0x0055 -> LATIN CAPITAL LETTER U + u'V' # 0x0056 -> LATIN CAPITAL LETTER V + u'W' # 0x0057 -> LATIN CAPITAL LETTER W + u'X' # 0x0058 -> LATIN CAPITAL LETTER X + u'Y' # 0x0059 -> LATIN CAPITAL LETTER Y + u'Z' # 0x005a -> LATIN CAPITAL LETTER Z + u'[' # 0x005b -> LEFT SQUARE BRACKET, left-right + u'\\' # 0x005c -> REVERSE SOLIDUS, left-right + u']' # 0x005d -> RIGHT SQUARE BRACKET, left-right + u'^' # 0x005e -> CIRCUMFLEX ACCENT, left-right + u'_' # 0x005f -> LOW LINE, left-right + u'`' # 0x0060 -> GRAVE ACCENT + u'a' # 0x0061 -> LATIN SMALL LETTER A + u'b' # 0x0062 -> LATIN SMALL LETTER B + u'c' # 0x0063 -> LATIN SMALL LETTER C + u'd' # 0x0064 -> LATIN SMALL LETTER D + u'e' # 0x0065 -> LATIN SMALL LETTER E + u'f' # 0x0066 -> LATIN SMALL LETTER F + u'g' # 0x0067 -> LATIN SMALL LETTER G + u'h' # 0x0068 -> LATIN SMALL LETTER H + u'i' # 0x0069 -> LATIN SMALL LETTER I + u'j' # 0x006a -> LATIN SMALL LETTER J + u'k' # 0x006b -> LATIN SMALL LETTER K + u'l' # 0x006c -> LATIN SMALL LETTER L + u'm' # 0x006d -> LATIN SMALL LETTER M + u'n' # 0x006e -> LATIN SMALL LETTER N + u'o' # 0x006f -> LATIN SMALL LETTER O + u'p' # 0x0070 -> LATIN SMALL LETTER P + u'q' # 0x0071 -> LATIN SMALL LETTER Q + u'r' # 0x0072 -> LATIN SMALL LETTER R + u's' # 0x0073 -> LATIN SMALL LETTER S + u't' # 0x0074 -> LATIN SMALL LETTER T + u'u' # 0x0075 -> LATIN SMALL LETTER U + u'v' # 0x0076 -> LATIN SMALL LETTER V + u'w' # 0x0077 -> LATIN SMALL LETTER W + u'x' # 0x0078 -> LATIN SMALL LETTER X + u'y' # 0x0079 -> LATIN SMALL LETTER Y + u'z' # 0x007a -> LATIN SMALL LETTER Z + u'{' # 0x007b -> LEFT CURLY BRACKET, left-right + u'|' # 0x007c -> VERTICAL LINE, left-right + u'}' # 0x007d -> RIGHT CURLY BRACKET, left-right + u'~' # 0x007e -> TILDE + u'\x7f' # 0x007f -> CONTROL CHARACTER + u'\xc4' # 0x0080 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xa0' # 0x0081 -> NO-BREAK SPACE, right-left + u'\xc7' # 0x0082 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xc9' # 0x0083 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xd1' # 0x0084 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xd6' # 0x0085 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xdc' # 0x0086 -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xe1' # 0x0087 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe0' # 0x0088 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe2' # 0x0089 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x008a -> LATIN SMALL LETTER A WITH DIAERESIS + u'\u06ba' # 0x008b -> ARABIC LETTER NOON GHUNNA + u'\xab' # 0x008c -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left + u'\xe7' # 0x008d -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe9' # 0x008e -> LATIN SMALL LETTER E WITH ACUTE + u'\xe8' # 0x008f -> LATIN SMALL LETTER E WITH GRAVE + u'\xea' # 0x0090 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x0091 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xed' # 0x0092 -> LATIN SMALL LETTER I WITH ACUTE + u'\u2026' # 0x0093 -> HORIZONTAL ELLIPSIS, right-left + u'\xee' # 0x0094 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0x0095 -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xf1' # 0x0096 -> LATIN SMALL LETTER N WITH TILDE + u'\xf3' # 0x0097 -> LATIN SMALL LETTER O WITH ACUTE + u'\xbb' # 0x0098 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left + u'\xf4' # 0x0099 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0x009a -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf7' # 0x009b -> DIVISION SIGN, right-left + u'\xfa' # 0x009c -> LATIN SMALL LETTER U WITH ACUTE + u'\xf9' # 0x009d -> LATIN SMALL LETTER U WITH GRAVE + u'\xfb' # 0x009e -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0x009f -> LATIN SMALL LETTER U WITH DIAERESIS + u' ' # 0x00a0 -> SPACE, right-left + u'!' # 0x00a1 -> EXCLAMATION MARK, right-left + u'"' # 0x00a2 -> QUOTATION MARK, right-left + u'#' # 0x00a3 -> NUMBER SIGN, right-left + u'$' # 0x00a4 -> DOLLAR SIGN, right-left + u'\u066a' # 0x00a5 -> ARABIC PERCENT SIGN + u'&' # 0x00a6 -> AMPERSAND, right-left + u"'" # 0x00a7 -> APOSTROPHE, right-left + u'(' # 0x00a8 -> LEFT PARENTHESIS, right-left + u')' # 0x00a9 -> RIGHT PARENTHESIS, right-left + u'*' # 0x00aa -> ASTERISK, right-left + u'+' # 0x00ab -> PLUS SIGN, right-left + u'\u060c' # 0x00ac -> ARABIC COMMA + u'-' # 0x00ad -> HYPHEN-MINUS, right-left + u'.' # 0x00ae -> FULL STOP, right-left + u'/' # 0x00af -> SOLIDUS, right-left + u'\u0660' # 0x00b0 -> ARABIC-INDIC DIGIT ZERO, right-left (need override) + u'\u0661' # 0x00b1 -> ARABIC-INDIC DIGIT ONE, right-left (need override) + u'\u0662' # 0x00b2 -> ARABIC-INDIC DIGIT TWO, right-left (need override) + u'\u0663' # 0x00b3 -> ARABIC-INDIC DIGIT THREE, right-left (need override) + u'\u0664' # 0x00b4 -> ARABIC-INDIC DIGIT FOUR, right-left (need override) + u'\u0665' # 0x00b5 -> ARABIC-INDIC DIGIT FIVE, right-left (need override) + u'\u0666' # 0x00b6 -> ARABIC-INDIC DIGIT SIX, right-left (need override) + u'\u0667' # 0x00b7 -> ARABIC-INDIC DIGIT SEVEN, right-left (need override) + u'\u0668' # 0x00b8 -> ARABIC-INDIC DIGIT EIGHT, right-left (need override) + u'\u0669' # 0x00b9 -> ARABIC-INDIC DIGIT NINE, right-left (need override) + u':' # 0x00ba -> COLON, right-left + u'\u061b' # 0x00bb -> ARABIC SEMICOLON + u'<' # 0x00bc -> LESS-THAN SIGN, right-left + u'=' # 0x00bd -> EQUALS SIGN, right-left + u'>' # 0x00be -> GREATER-THAN SIGN, right-left + u'\u061f' # 0x00bf -> ARABIC QUESTION MARK + u'\u274a' # 0x00c0 -> EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left + u'\u0621' # 0x00c1 -> ARABIC LETTER HAMZA + u'\u0622' # 0x00c2 -> ARABIC LETTER ALEF WITH MADDA ABOVE + u'\u0623' # 0x00c3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE + u'\u0624' # 0x00c4 -> ARABIC LETTER WAW WITH HAMZA ABOVE + u'\u0625' # 0x00c5 -> ARABIC LETTER ALEF WITH HAMZA BELOW + u'\u0626' # 0x00c6 -> ARABIC LETTER YEH WITH HAMZA ABOVE + u'\u0627' # 0x00c7 -> ARABIC LETTER ALEF + u'\u0628' # 0x00c8 -> ARABIC LETTER BEH + u'\u0629' # 0x00c9 -> ARABIC LETTER TEH MARBUTA + u'\u062a' # 0x00ca -> ARABIC LETTER TEH + u'\u062b' # 0x00cb -> ARABIC LETTER THEH + u'\u062c' # 0x00cc -> ARABIC LETTER JEEM + u'\u062d' # 0x00cd -> ARABIC LETTER HAH + u'\u062e' # 0x00ce -> ARABIC LETTER KHAH + u'\u062f' # 0x00cf -> ARABIC LETTER DAL + u'\u0630' # 0x00d0 -> ARABIC LETTER THAL + u'\u0631' # 0x00d1 -> ARABIC LETTER REH + u'\u0632' # 0x00d2 -> ARABIC LETTER ZAIN + u'\u0633' # 0x00d3 -> ARABIC LETTER SEEN + u'\u0634' # 0x00d4 -> ARABIC LETTER SHEEN + u'\u0635' # 0x00d5 -> ARABIC LETTER SAD + u'\u0636' # 0x00d6 -> ARABIC LETTER DAD + u'\u0637' # 0x00d7 -> ARABIC LETTER TAH + u'\u0638' # 0x00d8 -> ARABIC LETTER ZAH + u'\u0639' # 0x00d9 -> ARABIC LETTER AIN + u'\u063a' # 0x00da -> ARABIC LETTER GHAIN + u'[' # 0x00db -> LEFT SQUARE BRACKET, right-left + u'\\' # 0x00dc -> REVERSE SOLIDUS, right-left + u']' # 0x00dd -> RIGHT SQUARE BRACKET, right-left + u'^' # 0x00de -> CIRCUMFLEX ACCENT, right-left + u'_' # 0x00df -> LOW LINE, right-left + u'\u0640' # 0x00e0 -> ARABIC TATWEEL + u'\u0641' # 0x00e1 -> ARABIC LETTER FEH + u'\u0642' # 0x00e2 -> ARABIC LETTER QAF + u'\u0643' # 0x00e3 -> ARABIC LETTER KAF + u'\u0644' # 0x00e4 -> ARABIC LETTER LAM + u'\u0645' # 0x00e5 -> ARABIC LETTER MEEM + u'\u0646' # 0x00e6 -> ARABIC LETTER NOON + u'\u0647' # 0x00e7 -> ARABIC LETTER HEH + u'\u0648' # 0x00e8 -> ARABIC LETTER WAW + u'\u0649' # 0x00e9 -> ARABIC LETTER ALEF MAKSURA + u'\u064a' # 0x00ea -> ARABIC LETTER YEH + u'\u064b' # 0x00eb -> ARABIC FATHATAN + u'\u064c' # 0x00ec -> ARABIC DAMMATAN + u'\u064d' # 0x00ed -> ARABIC KASRATAN + u'\u064e' # 0x00ee -> ARABIC FATHA + u'\u064f' # 0x00ef -> ARABIC DAMMA + u'\u0650' # 0x00f0 -> ARABIC KASRA + u'\u0651' # 0x00f1 -> ARABIC SHADDA + u'\u0652' # 0x00f2 -> ARABIC SUKUN + u'\u067e' # 0x00f3 -> ARABIC LETTER PEH + u'\u0679' # 0x00f4 -> ARABIC LETTER TTEH + u'\u0686' # 0x00f5 -> ARABIC LETTER TCHEH + u'\u06d5' # 0x00f6 -> ARABIC LETTER AE + u'\u06a4' # 0x00f7 -> ARABIC LETTER VEH + u'\u06af' # 0x00f8 -> ARABIC LETTER GAF + u'\u0688' # 0x00f9 -> ARABIC LETTER DDAL + u'\u0691' # 0x00fa -> ARABIC LETTER RREH + u'{' # 0x00fb -> LEFT CURLY BRACKET, right-left + u'|' # 0x00fc -> VERTICAL LINE, right-left + u'}' # 0x00fd -> RIGHT CURLY BRACKET, right-left + u'\u0698' # 0x00fe -> ARABIC LETTER JEH + u'\u06d2' # 0x00ff -> ARABIC LETTER YEH BARREE +) + +### Encoding Map + +encoding_map = { + 0x0000: 0x0000, # CONTROL CHARACTER + 0x0001: 0x0001, # CONTROL CHARACTER + 0x0002: 0x0002, # CONTROL CHARACTER + 0x0003: 0x0003, # CONTROL CHARACTER + 0x0004: 0x0004, # CONTROL CHARACTER + 0x0005: 0x0005, # CONTROL CHARACTER + 0x0006: 0x0006, # CONTROL CHARACTER + 0x0007: 0x0007, # CONTROL CHARACTER + 0x0008: 0x0008, # CONTROL CHARACTER + 0x0009: 0x0009, # CONTROL CHARACTER + 0x000a: 0x000a, # CONTROL CHARACTER + 0x000b: 0x000b, # CONTROL CHARACTER + 0x000c: 0x000c, # CONTROL CHARACTER + 0x000d: 0x000d, # CONTROL CHARACTER + 0x000e: 0x000e, # CONTROL CHARACTER + 0x000f: 0x000f, # CONTROL CHARACTER + 0x0010: 0x0010, # CONTROL CHARACTER + 0x0011: 0x0011, # CONTROL CHARACTER + 0x0012: 0x0012, # CONTROL CHARACTER + 0x0013: 0x0013, # CONTROL CHARACTER + 0x0014: 0x0014, # CONTROL CHARACTER + 0x0015: 0x0015, # CONTROL CHARACTER + 0x0016: 0x0016, # CONTROL CHARACTER + 0x0017: 0x0017, # CONTROL CHARACTER + 0x0018: 0x0018, # CONTROL CHARACTER + 0x0019: 0x0019, # CONTROL CHARACTER + 0x001a: 0x001a, # CONTROL CHARACTER + 0x001b: 0x001b, # CONTROL CHARACTER + 0x001c: 0x001c, # CONTROL CHARACTER + 0x001d: 0x001d, # CONTROL CHARACTER + 0x001e: 0x001e, # CONTROL CHARACTER + 0x001f: 0x001f, # CONTROL CHARACTER + 0x0020: 0x0020, # SPACE, left-right + 0x0020: 0x00a0, # SPACE, right-left + 0x0021: 0x0021, # EXCLAMATION MARK, left-right + 0x0021: 0x00a1, # EXCLAMATION MARK, right-left + 0x0022: 0x0022, # QUOTATION MARK, left-right + 0x0022: 0x00a2, # QUOTATION MARK, right-left + 0x0023: 0x0023, # NUMBER SIGN, left-right + 0x0023: 0x00a3, # NUMBER SIGN, right-left + 0x0024: 0x0024, # DOLLAR SIGN, left-right + 0x0024: 0x00a4, # DOLLAR SIGN, right-left + 0x0025: 0x0025, # PERCENT SIGN, left-right + 0x0026: 0x0026, # AMPERSAND, left-right + 0x0026: 0x00a6, # AMPERSAND, right-left + 0x0027: 0x0027, # APOSTROPHE, left-right + 0x0027: 0x00a7, # APOSTROPHE, right-left + 0x0028: 0x0028, # LEFT PARENTHESIS, left-right + 0x0028: 0x00a8, # LEFT PARENTHESIS, right-left + 0x0029: 0x0029, # RIGHT PARENTHESIS, left-right + 0x0029: 0x00a9, # RIGHT PARENTHESIS, right-left + 0x002a: 0x002a, # ASTERISK, left-right + 0x002a: 0x00aa, # ASTERISK, right-left + 0x002b: 0x002b, # PLUS SIGN, left-right + 0x002b: 0x00ab, # PLUS SIGN, right-left + 0x002c: 0x002c, # COMMA, left-right; in Arabic-script context, displayed as 0x066C ARABIC THOUSANDS SEPARATOR + 0x002d: 0x002d, # HYPHEN-MINUS, left-right + 0x002d: 0x00ad, # HYPHEN-MINUS, right-left + 0x002e: 0x002e, # FULL STOP, left-right; in Arabic-script context, displayed as 0x066B ARABIC DECIMAL SEPARATOR + 0x002e: 0x00ae, # FULL STOP, right-left + 0x002f: 0x002f, # SOLIDUS, left-right + 0x002f: 0x00af, # SOLIDUS, right-left + 0x0030: 0x0030, # DIGIT ZERO; in Arabic-script context, displayed as 0x0660 ARABIC-INDIC DIGIT ZERO + 0x0031: 0x0031, # DIGIT ONE; in Arabic-script context, displayed as 0x0661 ARABIC-INDIC DIGIT ONE + 0x0032: 0x0032, # DIGIT TWO; in Arabic-script context, displayed as 0x0662 ARABIC-INDIC DIGIT TWO + 0x0033: 0x0033, # DIGIT THREE; in Arabic-script context, displayed as 0x0663 ARABIC-INDIC DIGIT THREE + 0x0034: 0x0034, # DIGIT FOUR; in Arabic-script context, displayed as 0x0664 ARABIC-INDIC DIGIT FOUR + 0x0035: 0x0035, # DIGIT FIVE; in Arabic-script context, displayed as 0x0665 ARABIC-INDIC DIGIT FIVE + 0x0036: 0x0036, # DIGIT SIX; in Arabic-script context, displayed as 0x0666 ARABIC-INDIC DIGIT SIX + 0x0037: 0x0037, # DIGIT SEVEN; in Arabic-script context, displayed as 0x0667 ARABIC-INDIC DIGIT SEVEN + 0x0038: 0x0038, # DIGIT EIGHT; in Arabic-script context, displayed as 0x0668 ARABIC-INDIC DIGIT EIGHT + 0x0039: 0x0039, # DIGIT NINE; in Arabic-script context, displayed as 0x0669 ARABIC-INDIC DIGIT NINE + 0x003a: 0x003a, # COLON, left-right + 0x003a: 0x00ba, # COLON, right-left + 0x003b: 0x003b, # SEMICOLON, left-right + 0x003c: 0x003c, # LESS-THAN SIGN, left-right + 0x003c: 0x00bc, # LESS-THAN SIGN, right-left + 0x003d: 0x003d, # EQUALS SIGN, left-right + 0x003d: 0x00bd, # EQUALS SIGN, right-left + 0x003e: 0x003e, # GREATER-THAN SIGN, left-right + 0x003e: 0x00be, # GREATER-THAN SIGN, right-left + 0x003f: 0x003f, # QUESTION MARK, left-right + 0x0040: 0x0040, # COMMERCIAL AT + 0x0041: 0x0041, # LATIN CAPITAL LETTER A + 0x0042: 0x0042, # LATIN CAPITAL LETTER B + 0x0043: 0x0043, # LATIN CAPITAL LETTER C + 0x0044: 0x0044, # LATIN CAPITAL LETTER D + 0x0045: 0x0045, # LATIN CAPITAL LETTER E + 0x0046: 0x0046, # LATIN CAPITAL LETTER F + 0x0047: 0x0047, # LATIN CAPITAL LETTER G + 0x0048: 0x0048, # LATIN CAPITAL LETTER H + 0x0049: 0x0049, # LATIN CAPITAL LETTER I + 0x004a: 0x004a, # LATIN CAPITAL LETTER J + 0x004b: 0x004b, # LATIN CAPITAL LETTER K + 0x004c: 0x004c, # LATIN CAPITAL LETTER L + 0x004d: 0x004d, # LATIN CAPITAL LETTER M + 0x004e: 0x004e, # LATIN CAPITAL LETTER N + 0x004f: 0x004f, # LATIN CAPITAL LETTER O + 0x0050: 0x0050, # LATIN CAPITAL LETTER P + 0x0051: 0x0051, # LATIN CAPITAL LETTER Q + 0x0052: 0x0052, # LATIN CAPITAL LETTER R + 0x0053: 0x0053, # LATIN CAPITAL LETTER S + 0x0054: 0x0054, # LATIN CAPITAL LETTER T + 0x0055: 0x0055, # LATIN CAPITAL LETTER U + 0x0056: 0x0056, # LATIN CAPITAL LETTER V + 0x0057: 0x0057, # LATIN CAPITAL LETTER W + 0x0058: 0x0058, # LATIN CAPITAL LETTER X + 0x0059: 0x0059, # LATIN CAPITAL LETTER Y + 0x005a: 0x005a, # LATIN CAPITAL LETTER Z + 0x005b: 0x005b, # LEFT SQUARE BRACKET, left-right + 0x005b: 0x00db, # LEFT SQUARE BRACKET, right-left + 0x005c: 0x005c, # REVERSE SOLIDUS, left-right + 0x005c: 0x00dc, # REVERSE SOLIDUS, right-left + 0x005d: 0x005d, # RIGHT SQUARE BRACKET, left-right + 0x005d: 0x00dd, # RIGHT SQUARE BRACKET, right-left + 0x005e: 0x005e, # CIRCUMFLEX ACCENT, left-right + 0x005e: 0x00de, # CIRCUMFLEX ACCENT, right-left + 0x005f: 0x005f, # LOW LINE, left-right + 0x005f: 0x00df, # LOW LINE, right-left + 0x0060: 0x0060, # GRAVE ACCENT + 0x0061: 0x0061, # LATIN SMALL LETTER A + 0x0062: 0x0062, # LATIN SMALL LETTER B + 0x0063: 0x0063, # LATIN SMALL LETTER C + 0x0064: 0x0064, # LATIN SMALL LETTER D + 0x0065: 0x0065, # LATIN SMALL LETTER E + 0x0066: 0x0066, # LATIN SMALL LETTER F + 0x0067: 0x0067, # LATIN SMALL LETTER G + 0x0068: 0x0068, # LATIN SMALL LETTER H + 0x0069: 0x0069, # LATIN SMALL LETTER I + 0x006a: 0x006a, # LATIN SMALL LETTER J + 0x006b: 0x006b, # LATIN SMALL LETTER K + 0x006c: 0x006c, # LATIN SMALL LETTER L + 0x006d: 0x006d, # LATIN SMALL LETTER M + 0x006e: 0x006e, # LATIN SMALL LETTER N + 0x006f: 0x006f, # LATIN SMALL LETTER O + 0x0070: 0x0070, # LATIN SMALL LETTER P + 0x0071: 0x0071, # LATIN SMALL LETTER Q + 0x0072: 0x0072, # LATIN SMALL LETTER R + 0x0073: 0x0073, # LATIN SMALL LETTER S + 0x0074: 0x0074, # LATIN SMALL LETTER T + 0x0075: 0x0075, # LATIN SMALL LETTER U + 0x0076: 0x0076, # LATIN SMALL LETTER V + 0x0077: 0x0077, # LATIN SMALL LETTER W + 0x0078: 0x0078, # LATIN SMALL LETTER X + 0x0079: 0x0079, # LATIN SMALL LETTER Y + 0x007a: 0x007a, # LATIN SMALL LETTER Z + 0x007b: 0x007b, # LEFT CURLY BRACKET, left-right + 0x007b: 0x00fb, # LEFT CURLY BRACKET, right-left + 0x007c: 0x007c, # VERTICAL LINE, left-right + 0x007c: 0x00fc, # VERTICAL LINE, right-left + 0x007d: 0x007d, # RIGHT CURLY BRACKET, left-right + 0x007d: 0x00fd, # RIGHT CURLY BRACKET, right-left + 0x007e: 0x007e, # TILDE + 0x007f: 0x007f, # CONTROL CHARACTER + 0x00a0: 0x0081, # NO-BREAK SPACE, right-left + 0x00ab: 0x008c, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left + 0x00bb: 0x0098, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left + 0x00c4: 0x0080, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x00c7: 0x0082, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x00c9: 0x0083, # LATIN CAPITAL LETTER E WITH ACUTE + 0x00d1: 0x0084, # LATIN CAPITAL LETTER N WITH TILDE + 0x00d6: 0x0085, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x00dc: 0x0086, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x00e0: 0x0088, # LATIN SMALL LETTER A WITH GRAVE + 0x00e1: 0x0087, # LATIN SMALL LETTER A WITH ACUTE + 0x00e2: 0x0089, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0x00e4: 0x008a, # LATIN SMALL LETTER A WITH DIAERESIS + 0x00e7: 0x008d, # LATIN SMALL LETTER C WITH CEDILLA + 0x00e8: 0x008f, # LATIN SMALL LETTER E WITH GRAVE + 0x00e9: 0x008e, # LATIN SMALL LETTER E WITH ACUTE + 0x00ea: 0x0090, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0x00eb: 0x0091, # LATIN SMALL LETTER E WITH DIAERESIS + 0x00ed: 0x0092, # LATIN SMALL LETTER I WITH ACUTE + 0x00ee: 0x0094, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0x00ef: 0x0095, # LATIN SMALL LETTER I WITH DIAERESIS + 0x00f1: 0x0096, # LATIN SMALL LETTER N WITH TILDE + 0x00f3: 0x0097, # LATIN SMALL LETTER O WITH ACUTE + 0x00f4: 0x0099, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x00f6: 0x009a, # LATIN SMALL LETTER O WITH DIAERESIS + 0x00f7: 0x009b, # DIVISION SIGN, right-left + 0x00f9: 0x009d, # LATIN SMALL LETTER U WITH GRAVE + 0x00fa: 0x009c, # LATIN SMALL LETTER U WITH ACUTE + 0x00fb: 0x009e, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0x00fc: 0x009f, # LATIN SMALL LETTER U WITH DIAERESIS + 0x060c: 0x00ac, # ARABIC COMMA + 0x061b: 0x00bb, # ARABIC SEMICOLON + 0x061f: 0x00bf, # ARABIC QUESTION MARK + 0x0621: 0x00c1, # ARABIC LETTER HAMZA + 0x0622: 0x00c2, # ARABIC LETTER ALEF WITH MADDA ABOVE + 0x0623: 0x00c3, # ARABIC LETTER ALEF WITH HAMZA ABOVE + 0x0624: 0x00c4, # ARABIC LETTER WAW WITH HAMZA ABOVE + 0x0625: 0x00c5, # ARABIC LETTER ALEF WITH HAMZA BELOW + 0x0626: 0x00c6, # ARABIC LETTER YEH WITH HAMZA ABOVE + 0x0627: 0x00c7, # ARABIC LETTER ALEF + 0x0628: 0x00c8, # ARABIC LETTER BEH + 0x0629: 0x00c9, # ARABIC LETTER TEH MARBUTA + 0x062a: 0x00ca, # ARABIC LETTER TEH + 0x062b: 0x00cb, # ARABIC LETTER THEH + 0x062c: 0x00cc, # ARABIC LETTER JEEM + 0x062d: 0x00cd, # ARABIC LETTER HAH + 0x062e: 0x00ce, # ARABIC LETTER KHAH + 0x062f: 0x00cf, # ARABIC LETTER DAL + 0x0630: 0x00d0, # ARABIC LETTER THAL + 0x0631: 0x00d1, # ARABIC LETTER REH + 0x0632: 0x00d2, # ARABIC LETTER ZAIN + 0x0633: 0x00d3, # ARABIC LETTER SEEN + 0x0634: 0x00d4, # ARABIC LETTER SHEEN + 0x0635: 0x00d5, # ARABIC LETTER SAD + 0x0636: 0x00d6, # ARABIC LETTER DAD + 0x0637: 0x00d7, # ARABIC LETTER TAH + 0x0638: 0x00d8, # ARABIC LETTER ZAH + 0x0639: 0x00d9, # ARABIC LETTER AIN + 0x063a: 0x00da, # ARABIC LETTER GHAIN + 0x0640: 0x00e0, # ARABIC TATWEEL + 0x0641: 0x00e1, # ARABIC LETTER FEH + 0x0642: 0x00e2, # ARABIC LETTER QAF + 0x0643: 0x00e3, # ARABIC LETTER KAF + 0x0644: 0x00e4, # ARABIC LETTER LAM + 0x0645: 0x00e5, # ARABIC LETTER MEEM + 0x0646: 0x00e6, # ARABIC LETTER NOON + 0x0647: 0x00e7, # ARABIC LETTER HEH + 0x0648: 0x00e8, # ARABIC LETTER WAW + 0x0649: 0x00e9, # ARABIC LETTER ALEF MAKSURA + 0x064a: 0x00ea, # ARABIC LETTER YEH + 0x064b: 0x00eb, # ARABIC FATHATAN + 0x064c: 0x00ec, # ARABIC DAMMATAN + 0x064d: 0x00ed, # ARABIC KASRATAN + 0x064e: 0x00ee, # ARABIC FATHA + 0x064f: 0x00ef, # ARABIC DAMMA + 0x0650: 0x00f0, # ARABIC KASRA + 0x0651: 0x00f1, # ARABIC SHADDA + 0x0652: 0x00f2, # ARABIC SUKUN + 0x0660: 0x00b0, # ARABIC-INDIC DIGIT ZERO, right-left (need override) + 0x0661: 0x00b1, # ARABIC-INDIC DIGIT ONE, right-left (need override) + 0x0662: 0x00b2, # ARABIC-INDIC DIGIT TWO, right-left (need override) + 0x0663: 0x00b3, # ARABIC-INDIC DIGIT THREE, right-left (need override) + 0x0664: 0x00b4, # ARABIC-INDIC DIGIT FOUR, right-left (need override) + 0x0665: 0x00b5, # ARABIC-INDIC DIGIT FIVE, right-left (need override) + 0x0666: 0x00b6, # ARABIC-INDIC DIGIT SIX, right-left (need override) + 0x0667: 0x00b7, # ARABIC-INDIC DIGIT SEVEN, right-left (need override) + 0x0668: 0x00b8, # ARABIC-INDIC DIGIT EIGHT, right-left (need override) + 0x0669: 0x00b9, # ARABIC-INDIC DIGIT NINE, right-left (need override) + 0x066a: 0x00a5, # ARABIC PERCENT SIGN + 0x0679: 0x00f4, # ARABIC LETTER TTEH + 0x067e: 0x00f3, # ARABIC LETTER PEH + 0x0686: 0x00f5, # ARABIC LETTER TCHEH + 0x0688: 0x00f9, # ARABIC LETTER DDAL + 0x0691: 0x00fa, # ARABIC LETTER RREH + 0x0698: 0x00fe, # ARABIC LETTER JEH + 0x06a4: 0x00f7, # ARABIC LETTER VEH + 0x06af: 0x00f8, # ARABIC LETTER GAF + 0x06ba: 0x008b, # ARABIC LETTER NOON GHUNNA + 0x06d2: 0x00ff, # ARABIC LETTER YEH BARREE + 0x06d5: 0x00f6, # ARABIC LETTER AE + 0x2026: 0x0093, # HORIZONTAL ELLIPSIS, right-left + 0x274a: 0x00c0, # EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left +} diff --git a/thirdparty/python25/Lib/encodings/mac_centeuro.py b/thirdparty/python25/Lib/encodings/mac_centeuro.py new file mode 100644 index 000000000..3ef432c40 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/mac_centeuro.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_centeuro generated from 'MAPPINGS/VENDORS/APPLE/CENTEURO.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-centeuro', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> CONTROL CHARACTER + u'\x01' # 0x01 -> CONTROL CHARACTER + u'\x02' # 0x02 -> CONTROL CHARACTER + u'\x03' # 0x03 -> CONTROL CHARACTER + u'\x04' # 0x04 -> CONTROL CHARACTER + u'\x05' # 0x05 -> CONTROL CHARACTER + u'\x06' # 0x06 -> CONTROL CHARACTER + u'\x07' # 0x07 -> CONTROL CHARACTER + u'\x08' # 0x08 -> CONTROL CHARACTER + u'\t' # 0x09 -> CONTROL CHARACTER + u'\n' # 0x0A -> CONTROL CHARACTER + u'\x0b' # 0x0B -> CONTROL CHARACTER + u'\x0c' # 0x0C -> CONTROL CHARACTER + u'\r' # 0x0D -> CONTROL CHARACTER + u'\x0e' # 0x0E -> CONTROL CHARACTER + u'\x0f' # 0x0F -> CONTROL CHARACTER + u'\x10' # 0x10 -> CONTROL CHARACTER + u'\x11' # 0x11 -> CONTROL CHARACTER + u'\x12' # 0x12 -> CONTROL CHARACTER + u'\x13' # 0x13 -> CONTROL CHARACTER + u'\x14' # 0x14 -> CONTROL CHARACTER + u'\x15' # 0x15 -> CONTROL CHARACTER + u'\x16' # 0x16 -> CONTROL CHARACTER + u'\x17' # 0x17 -> CONTROL CHARACTER + u'\x18' # 0x18 -> CONTROL CHARACTER + u'\x19' # 0x19 -> CONTROL CHARACTER + u'\x1a' # 0x1A -> CONTROL CHARACTER + u'\x1b' # 0x1B -> CONTROL CHARACTER + u'\x1c' # 0x1C -> CONTROL CHARACTER + u'\x1d' # 0x1D -> CONTROL CHARACTER + u'\x1e' # 0x1E -> CONTROL CHARACTER + u'\x1f' # 0x1F -> CONTROL CHARACTER + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> CONTROL CHARACTER + u'\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\u0100' # 0x81 -> LATIN CAPITAL LETTER A WITH MACRON + u'\u0101' # 0x82 -> LATIN SMALL LETTER A WITH MACRON + u'\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\u0104' # 0x84 -> LATIN CAPITAL LETTER A WITH OGONEK + u'\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE + u'\u0105' # 0x88 -> LATIN SMALL LETTER A WITH OGONEK + u'\u010c' # 0x89 -> LATIN CAPITAL LETTER C WITH CARON + u'\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS + u'\u010d' # 0x8B -> LATIN SMALL LETTER C WITH CARON + u'\u0106' # 0x8C -> LATIN CAPITAL LETTER C WITH ACUTE + u'\u0107' # 0x8D -> LATIN SMALL LETTER C WITH ACUTE + u'\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE + u'\u0179' # 0x8F -> LATIN CAPITAL LETTER Z WITH ACUTE + u'\u017a' # 0x90 -> LATIN SMALL LETTER Z WITH ACUTE + u'\u010e' # 0x91 -> LATIN CAPITAL LETTER D WITH CARON + u'\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE + u'\u010f' # 0x93 -> LATIN SMALL LETTER D WITH CARON + u'\u0112' # 0x94 -> LATIN CAPITAL LETTER E WITH MACRON + u'\u0113' # 0x95 -> LATIN SMALL LETTER E WITH MACRON + u'\u0116' # 0x96 -> LATIN CAPITAL LETTER E WITH DOT ABOVE + u'\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE + u'\u0117' # 0x98 -> LATIN SMALL LETTER E WITH DOT ABOVE + u'\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE + u'\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE + u'\u011a' # 0x9D -> LATIN CAPITAL LETTER E WITH CARON + u'\u011b' # 0x9E -> LATIN SMALL LETTER E WITH CARON + u'\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS + u'\u2020' # 0xA0 -> DAGGER + u'\xb0' # 0xA1 -> DEGREE SIGN + u'\u0118' # 0xA2 -> LATIN CAPITAL LETTER E WITH OGONEK + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa7' # 0xA4 -> SECTION SIGN + u'\u2022' # 0xA5 -> BULLET + u'\xb6' # 0xA6 -> PILCROW SIGN + u'\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S + u'\xae' # 0xA8 -> REGISTERED SIGN + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\u2122' # 0xAA -> TRADE MARK SIGN + u'\u0119' # 0xAB -> LATIN SMALL LETTER E WITH OGONEK + u'\xa8' # 0xAC -> DIAERESIS + u'\u2260' # 0xAD -> NOT EQUAL TO + u'\u0123' # 0xAE -> LATIN SMALL LETTER G WITH CEDILLA + u'\u012e' # 0xAF -> LATIN CAPITAL LETTER I WITH OGONEK + u'\u012f' # 0xB0 -> LATIN SMALL LETTER I WITH OGONEK + u'\u012a' # 0xB1 -> LATIN CAPITAL LETTER I WITH MACRON + u'\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO + u'\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO + u'\u012b' # 0xB4 -> LATIN SMALL LETTER I WITH MACRON + u'\u0136' # 0xB5 -> LATIN CAPITAL LETTER K WITH CEDILLA + u'\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL + u'\u2211' # 0xB7 -> N-ARY SUMMATION + u'\u0142' # 0xB8 -> LATIN SMALL LETTER L WITH STROKE + u'\u013b' # 0xB9 -> LATIN CAPITAL LETTER L WITH CEDILLA + u'\u013c' # 0xBA -> LATIN SMALL LETTER L WITH CEDILLA + u'\u013d' # 0xBB -> LATIN CAPITAL LETTER L WITH CARON + u'\u013e' # 0xBC -> LATIN SMALL LETTER L WITH CARON + u'\u0139' # 0xBD -> LATIN CAPITAL LETTER L WITH ACUTE + u'\u013a' # 0xBE -> LATIN SMALL LETTER L WITH ACUTE + u'\u0145' # 0xBF -> LATIN CAPITAL LETTER N WITH CEDILLA + u'\u0146' # 0xC0 -> LATIN SMALL LETTER N WITH CEDILLA + u'\u0143' # 0xC1 -> LATIN CAPITAL LETTER N WITH ACUTE + u'\xac' # 0xC2 -> NOT SIGN + u'\u221a' # 0xC3 -> SQUARE ROOT + u'\u0144' # 0xC4 -> LATIN SMALL LETTER N WITH ACUTE + u'\u0147' # 0xC5 -> LATIN CAPITAL LETTER N WITH CARON + u'\u2206' # 0xC6 -> INCREMENT + u'\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS + u'\xa0' # 0xCA -> NO-BREAK SPACE + u'\u0148' # 0xCB -> LATIN SMALL LETTER N WITH CARON + u'\u0150' # 0xCC -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + u'\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE + u'\u0151' # 0xCE -> LATIN SMALL LETTER O WITH DOUBLE ACUTE + u'\u014c' # 0xCF -> LATIN CAPITAL LETTER O WITH MACRON + u'\u2013' # 0xD0 -> EN DASH + u'\u2014' # 0xD1 -> EM DASH + u'\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK + u'\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK + u'\xf7' # 0xD6 -> DIVISION SIGN + u'\u25ca' # 0xD7 -> LOZENGE + u'\u014d' # 0xD8 -> LATIN SMALL LETTER O WITH MACRON + u'\u0154' # 0xD9 -> LATIN CAPITAL LETTER R WITH ACUTE + u'\u0155' # 0xDA -> LATIN SMALL LETTER R WITH ACUTE + u'\u0158' # 0xDB -> LATIN CAPITAL LETTER R WITH CARON + u'\u2039' # 0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + u'\u203a' # 0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + u'\u0159' # 0xDE -> LATIN SMALL LETTER R WITH CARON + u'\u0156' # 0xDF -> LATIN CAPITAL LETTER R WITH CEDILLA + u'\u0157' # 0xE0 -> LATIN SMALL LETTER R WITH CEDILLA + u'\u0160' # 0xE1 -> LATIN CAPITAL LETTER S WITH CARON + u'\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK + u'\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK + u'\u0161' # 0xE4 -> LATIN SMALL LETTER S WITH CARON + u'\u015a' # 0xE5 -> LATIN CAPITAL LETTER S WITH ACUTE + u'\u015b' # 0xE6 -> LATIN SMALL LETTER S WITH ACUTE + u'\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\u0164' # 0xE8 -> LATIN CAPITAL LETTER T WITH CARON + u'\u0165' # 0xE9 -> LATIN SMALL LETTER T WITH CARON + u'\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE + u'\u017d' # 0xEB -> LATIN CAPITAL LETTER Z WITH CARON + u'\u017e' # 0xEC -> LATIN SMALL LETTER Z WITH CARON + u'\u016a' # 0xED -> LATIN CAPITAL LETTER U WITH MACRON + u'\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\u016b' # 0xF0 -> LATIN SMALL LETTER U WITH MACRON + u'\u016e' # 0xF1 -> LATIN CAPITAL LETTER U WITH RING ABOVE + u'\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE + u'\u016f' # 0xF3 -> LATIN SMALL LETTER U WITH RING ABOVE + u'\u0170' # 0xF4 -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + u'\u0171' # 0xF5 -> LATIN SMALL LETTER U WITH DOUBLE ACUTE + u'\u0172' # 0xF6 -> LATIN CAPITAL LETTER U WITH OGONEK + u'\u0173' # 0xF7 -> LATIN SMALL LETTER U WITH OGONEK + u'\xdd' # 0xF8 -> LATIN CAPITAL LETTER Y WITH ACUTE + u'\xfd' # 0xF9 -> LATIN SMALL LETTER Y WITH ACUTE + u'\u0137' # 0xFA -> LATIN SMALL LETTER K WITH CEDILLA + u'\u017b' # 0xFB -> LATIN CAPITAL LETTER Z WITH DOT ABOVE + u'\u0141' # 0xFC -> LATIN CAPITAL LETTER L WITH STROKE + u'\u017c' # 0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE + u'\u0122' # 0xFE -> LATIN CAPITAL LETTER G WITH CEDILLA + u'\u02c7' # 0xFF -> CARON +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/mac_croatian.py b/thirdparty/python25/Lib/encodings/mac_croatian.py new file mode 100644 index 000000000..ebcb1cc00 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/mac_croatian.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_croatian generated from 'MAPPINGS/VENDORS/APPLE/CROATIAN.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-croatian', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> CONTROL CHARACTER + u'\x01' # 0x01 -> CONTROL CHARACTER + u'\x02' # 0x02 -> CONTROL CHARACTER + u'\x03' # 0x03 -> CONTROL CHARACTER + u'\x04' # 0x04 -> CONTROL CHARACTER + u'\x05' # 0x05 -> CONTROL CHARACTER + u'\x06' # 0x06 -> CONTROL CHARACTER + u'\x07' # 0x07 -> CONTROL CHARACTER + u'\x08' # 0x08 -> CONTROL CHARACTER + u'\t' # 0x09 -> CONTROL CHARACTER + u'\n' # 0x0A -> CONTROL CHARACTER + u'\x0b' # 0x0B -> CONTROL CHARACTER + u'\x0c' # 0x0C -> CONTROL CHARACTER + u'\r' # 0x0D -> CONTROL CHARACTER + u'\x0e' # 0x0E -> CONTROL CHARACTER + u'\x0f' # 0x0F -> CONTROL CHARACTER + u'\x10' # 0x10 -> CONTROL CHARACTER + u'\x11' # 0x11 -> CONTROL CHARACTER + u'\x12' # 0x12 -> CONTROL CHARACTER + u'\x13' # 0x13 -> CONTROL CHARACTER + u'\x14' # 0x14 -> CONTROL CHARACTER + u'\x15' # 0x15 -> CONTROL CHARACTER + u'\x16' # 0x16 -> CONTROL CHARACTER + u'\x17' # 0x17 -> CONTROL CHARACTER + u'\x18' # 0x18 -> CONTROL CHARACTER + u'\x19' # 0x19 -> CONTROL CHARACTER + u'\x1a' # 0x1A -> CONTROL CHARACTER + u'\x1b' # 0x1B -> CONTROL CHARACTER + u'\x1c' # 0x1C -> CONTROL CHARACTER + u'\x1d' # 0x1D -> CONTROL CHARACTER + u'\x1e' # 0x1E -> CONTROL CHARACTER + u'\x1f' # 0x1F -> CONTROL CHARACTER + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> CONTROL CHARACTER + u'\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe3' # 0x8B -> LATIN SMALL LETTER A WITH TILDE + u'\xe5' # 0x8C -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE + u'\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE + u'\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE + u'\xec' # 0x93 -> LATIN SMALL LETTER I WITH GRAVE + u'\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE + u'\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE + u'\xf2' # 0x98 -> LATIN SMALL LETTER O WITH GRAVE + u'\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE + u'\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE + u'\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE + u'\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS + u'\u2020' # 0xA0 -> DAGGER + u'\xb0' # 0xA1 -> DEGREE SIGN + u'\xa2' # 0xA2 -> CENT SIGN + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa7' # 0xA4 -> SECTION SIGN + u'\u2022' # 0xA5 -> BULLET + u'\xb6' # 0xA6 -> PILCROW SIGN + u'\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S + u'\xae' # 0xA8 -> REGISTERED SIGN + u'\u0160' # 0xA9 -> LATIN CAPITAL LETTER S WITH CARON + u'\u2122' # 0xAA -> TRADE MARK SIGN + u'\xb4' # 0xAB -> ACUTE ACCENT + u'\xa8' # 0xAC -> DIAERESIS + u'\u2260' # 0xAD -> NOT EQUAL TO + u'\u017d' # 0xAE -> LATIN CAPITAL LETTER Z WITH CARON + u'\xd8' # 0xAF -> LATIN CAPITAL LETTER O WITH STROKE + u'\u221e' # 0xB0 -> INFINITY + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO + u'\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO + u'\u2206' # 0xB4 -> INCREMENT + u'\xb5' # 0xB5 -> MICRO SIGN + u'\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL + u'\u2211' # 0xB7 -> N-ARY SUMMATION + u'\u220f' # 0xB8 -> N-ARY PRODUCT + u'\u0161' # 0xB9 -> LATIN SMALL LETTER S WITH CARON + u'\u222b' # 0xBA -> INTEGRAL + u'\xaa' # 0xBB -> FEMININE ORDINAL INDICATOR + u'\xba' # 0xBC -> MASCULINE ORDINAL INDICATOR + u'\u03a9' # 0xBD -> GREEK CAPITAL LETTER OMEGA + u'\u017e' # 0xBE -> LATIN SMALL LETTER Z WITH CARON + u'\xf8' # 0xBF -> LATIN SMALL LETTER O WITH STROKE + u'\xbf' # 0xC0 -> INVERTED QUESTION MARK + u'\xa1' # 0xC1 -> INVERTED EXCLAMATION MARK + u'\xac' # 0xC2 -> NOT SIGN + u'\u221a' # 0xC3 -> SQUARE ROOT + u'\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK + u'\u2248' # 0xC5 -> ALMOST EQUAL TO + u'\u0106' # 0xC6 -> LATIN CAPITAL LETTER C WITH ACUTE + u'\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON + u'\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS + u'\xa0' # 0xCA -> NO-BREAK SPACE + u'\xc0' # 0xCB -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc3' # 0xCC -> LATIN CAPITAL LETTER A WITH TILDE + u'\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE + u'\u0152' # 0xCE -> LATIN CAPITAL LIGATURE OE + u'\u0153' # 0xCF -> LATIN SMALL LIGATURE OE + u'\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE + u'\u2014' # 0xD1 -> EM DASH + u'\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK + u'\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK + u'\xf7' # 0xD6 -> DIVISION SIGN + u'\u25ca' # 0xD7 -> LOZENGE + u'\uf8ff' # 0xD8 -> Apple logo + u'\xa9' # 0xD9 -> COPYRIGHT SIGN + u'\u2044' # 0xDA -> FRACTION SLASH + u'\u20ac' # 0xDB -> EURO SIGN + u'\u2039' # 0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + u'\u203a' # 0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + u'\xc6' # 0xDE -> LATIN CAPITAL LETTER AE + u'\xbb' # 0xDF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2013' # 0xE0 -> EN DASH + u'\xb7' # 0xE1 -> MIDDLE DOT + u'\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK + u'\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK + u'\u2030' # 0xE4 -> PER MILLE SIGN + u'\xc2' # 0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\u0107' # 0xE6 -> LATIN SMALL LETTER C WITH ACUTE + u'\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON + u'\xc8' # 0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\xcc' # 0xED -> LATIN CAPITAL LETTER I WITH GRAVE + u'\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE + u'\xd2' # 0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xd9' # 0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE + u'\u0131' # 0xF5 -> LATIN SMALL LETTER DOTLESS I + u'\u02c6' # 0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT + u'\u02dc' # 0xF7 -> SMALL TILDE + u'\xaf' # 0xF8 -> MACRON + u'\u03c0' # 0xF9 -> GREEK SMALL LETTER PI + u'\xcb' # 0xFA -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\u02da' # 0xFB -> RING ABOVE + u'\xb8' # 0xFC -> CEDILLA + u'\xca' # 0xFD -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xe6' # 0xFE -> LATIN SMALL LETTER AE + u'\u02c7' # 0xFF -> CARON +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/mac_cyrillic.py b/thirdparty/python25/Lib/encodings/mac_cyrillic.py new file mode 100644 index 000000000..bca866f70 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/mac_cyrillic.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_cyrillic generated from 'MAPPINGS/VENDORS/APPLE/CYRILLIC.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-cyrillic', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> CONTROL CHARACTER + u'\x01' # 0x01 -> CONTROL CHARACTER + u'\x02' # 0x02 -> CONTROL CHARACTER + u'\x03' # 0x03 -> CONTROL CHARACTER + u'\x04' # 0x04 -> CONTROL CHARACTER + u'\x05' # 0x05 -> CONTROL CHARACTER + u'\x06' # 0x06 -> CONTROL CHARACTER + u'\x07' # 0x07 -> CONTROL CHARACTER + u'\x08' # 0x08 -> CONTROL CHARACTER + u'\t' # 0x09 -> CONTROL CHARACTER + u'\n' # 0x0A -> CONTROL CHARACTER + u'\x0b' # 0x0B -> CONTROL CHARACTER + u'\x0c' # 0x0C -> CONTROL CHARACTER + u'\r' # 0x0D -> CONTROL CHARACTER + u'\x0e' # 0x0E -> CONTROL CHARACTER + u'\x0f' # 0x0F -> CONTROL CHARACTER + u'\x10' # 0x10 -> CONTROL CHARACTER + u'\x11' # 0x11 -> CONTROL CHARACTER + u'\x12' # 0x12 -> CONTROL CHARACTER + u'\x13' # 0x13 -> CONTROL CHARACTER + u'\x14' # 0x14 -> CONTROL CHARACTER + u'\x15' # 0x15 -> CONTROL CHARACTER + u'\x16' # 0x16 -> CONTROL CHARACTER + u'\x17' # 0x17 -> CONTROL CHARACTER + u'\x18' # 0x18 -> CONTROL CHARACTER + u'\x19' # 0x19 -> CONTROL CHARACTER + u'\x1a' # 0x1A -> CONTROL CHARACTER + u'\x1b' # 0x1B -> CONTROL CHARACTER + u'\x1c' # 0x1C -> CONTROL CHARACTER + u'\x1d' # 0x1D -> CONTROL CHARACTER + u'\x1e' # 0x1E -> CONTROL CHARACTER + u'\x1f' # 0x1F -> CONTROL CHARACTER + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> CONTROL CHARACTER + u'\u0410' # 0x80 -> CYRILLIC CAPITAL LETTER A + u'\u0411' # 0x81 -> CYRILLIC CAPITAL LETTER BE + u'\u0412' # 0x82 -> CYRILLIC CAPITAL LETTER VE + u'\u0413' # 0x83 -> CYRILLIC CAPITAL LETTER GHE + u'\u0414' # 0x84 -> CYRILLIC CAPITAL LETTER DE + u'\u0415' # 0x85 -> CYRILLIC CAPITAL LETTER IE + u'\u0416' # 0x86 -> CYRILLIC CAPITAL LETTER ZHE + u'\u0417' # 0x87 -> CYRILLIC CAPITAL LETTER ZE + u'\u0418' # 0x88 -> CYRILLIC CAPITAL LETTER I + u'\u0419' # 0x89 -> CYRILLIC CAPITAL LETTER SHORT I + u'\u041a' # 0x8A -> CYRILLIC CAPITAL LETTER KA + u'\u041b' # 0x8B -> CYRILLIC CAPITAL LETTER EL + u'\u041c' # 0x8C -> CYRILLIC CAPITAL LETTER EM + u'\u041d' # 0x8D -> CYRILLIC CAPITAL LETTER EN + u'\u041e' # 0x8E -> CYRILLIC CAPITAL LETTER O + u'\u041f' # 0x8F -> CYRILLIC CAPITAL LETTER PE + u'\u0420' # 0x90 -> CYRILLIC CAPITAL LETTER ER + u'\u0421' # 0x91 -> CYRILLIC CAPITAL LETTER ES + u'\u0422' # 0x92 -> CYRILLIC CAPITAL LETTER TE + u'\u0423' # 0x93 -> CYRILLIC CAPITAL LETTER U + u'\u0424' # 0x94 -> CYRILLIC CAPITAL LETTER EF + u'\u0425' # 0x95 -> CYRILLIC CAPITAL LETTER HA + u'\u0426' # 0x96 -> CYRILLIC CAPITAL LETTER TSE + u'\u0427' # 0x97 -> CYRILLIC CAPITAL LETTER CHE + u'\u0428' # 0x98 -> CYRILLIC CAPITAL LETTER SHA + u'\u0429' # 0x99 -> CYRILLIC CAPITAL LETTER SHCHA + u'\u042a' # 0x9A -> CYRILLIC CAPITAL LETTER HARD SIGN + u'\u042b' # 0x9B -> CYRILLIC CAPITAL LETTER YERU + u'\u042c' # 0x9C -> CYRILLIC CAPITAL LETTER SOFT SIGN + u'\u042d' # 0x9D -> CYRILLIC CAPITAL LETTER E + u'\u042e' # 0x9E -> CYRILLIC CAPITAL LETTER YU + u'\u042f' # 0x9F -> CYRILLIC CAPITAL LETTER YA + u'\u2020' # 0xA0 -> DAGGER + u'\xb0' # 0xA1 -> DEGREE SIGN + u'\u0490' # 0xA2 -> CYRILLIC CAPITAL LETTER GHE WITH UPTURN + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa7' # 0xA4 -> SECTION SIGN + u'\u2022' # 0xA5 -> BULLET + u'\xb6' # 0xA6 -> PILCROW SIGN + u'\u0406' # 0xA7 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + u'\xae' # 0xA8 -> REGISTERED SIGN + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\u2122' # 0xAA -> TRADE MARK SIGN + u'\u0402' # 0xAB -> CYRILLIC CAPITAL LETTER DJE + u'\u0452' # 0xAC -> CYRILLIC SMALL LETTER DJE + u'\u2260' # 0xAD -> NOT EQUAL TO + u'\u0403' # 0xAE -> CYRILLIC CAPITAL LETTER GJE + u'\u0453' # 0xAF -> CYRILLIC SMALL LETTER GJE + u'\u221e' # 0xB0 -> INFINITY + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO + u'\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO + u'\u0456' # 0xB4 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + u'\xb5' # 0xB5 -> MICRO SIGN + u'\u0491' # 0xB6 -> CYRILLIC SMALL LETTER GHE WITH UPTURN + u'\u0408' # 0xB7 -> CYRILLIC CAPITAL LETTER JE + u'\u0404' # 0xB8 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE + u'\u0454' # 0xB9 -> CYRILLIC SMALL LETTER UKRAINIAN IE + u'\u0407' # 0xBA -> CYRILLIC CAPITAL LETTER YI + u'\u0457' # 0xBB -> CYRILLIC SMALL LETTER YI + u'\u0409' # 0xBC -> CYRILLIC CAPITAL LETTER LJE + u'\u0459' # 0xBD -> CYRILLIC SMALL LETTER LJE + u'\u040a' # 0xBE -> CYRILLIC CAPITAL LETTER NJE + u'\u045a' # 0xBF -> CYRILLIC SMALL LETTER NJE + u'\u0458' # 0xC0 -> CYRILLIC SMALL LETTER JE + u'\u0405' # 0xC1 -> CYRILLIC CAPITAL LETTER DZE + u'\xac' # 0xC2 -> NOT SIGN + u'\u221a' # 0xC3 -> SQUARE ROOT + u'\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK + u'\u2248' # 0xC5 -> ALMOST EQUAL TO + u'\u2206' # 0xC6 -> INCREMENT + u'\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS + u'\xa0' # 0xCA -> NO-BREAK SPACE + u'\u040b' # 0xCB -> CYRILLIC CAPITAL LETTER TSHE + u'\u045b' # 0xCC -> CYRILLIC SMALL LETTER TSHE + u'\u040c' # 0xCD -> CYRILLIC CAPITAL LETTER KJE + u'\u045c' # 0xCE -> CYRILLIC SMALL LETTER KJE + u'\u0455' # 0xCF -> CYRILLIC SMALL LETTER DZE + u'\u2013' # 0xD0 -> EN DASH + u'\u2014' # 0xD1 -> EM DASH + u'\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK + u'\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK + u'\xf7' # 0xD6 -> DIVISION SIGN + u'\u201e' # 0xD7 -> DOUBLE LOW-9 QUOTATION MARK + u'\u040e' # 0xD8 -> CYRILLIC CAPITAL LETTER SHORT U + u'\u045e' # 0xD9 -> CYRILLIC SMALL LETTER SHORT U + u'\u040f' # 0xDA -> CYRILLIC CAPITAL LETTER DZHE + u'\u045f' # 0xDB -> CYRILLIC SMALL LETTER DZHE + u'\u2116' # 0xDC -> NUMERO SIGN + u'\u0401' # 0xDD -> CYRILLIC CAPITAL LETTER IO + u'\u0451' # 0xDE -> CYRILLIC SMALL LETTER IO + u'\u044f' # 0xDF -> CYRILLIC SMALL LETTER YA + u'\u0430' # 0xE0 -> CYRILLIC SMALL LETTER A + u'\u0431' # 0xE1 -> CYRILLIC SMALL LETTER BE + u'\u0432' # 0xE2 -> CYRILLIC SMALL LETTER VE + u'\u0433' # 0xE3 -> CYRILLIC SMALL LETTER GHE + u'\u0434' # 0xE4 -> CYRILLIC SMALL LETTER DE + u'\u0435' # 0xE5 -> CYRILLIC SMALL LETTER IE + u'\u0436' # 0xE6 -> CYRILLIC SMALL LETTER ZHE + u'\u0437' # 0xE7 -> CYRILLIC SMALL LETTER ZE + u'\u0438' # 0xE8 -> CYRILLIC SMALL LETTER I + u'\u0439' # 0xE9 -> CYRILLIC SMALL LETTER SHORT I + u'\u043a' # 0xEA -> CYRILLIC SMALL LETTER KA + u'\u043b' # 0xEB -> CYRILLIC SMALL LETTER EL + u'\u043c' # 0xEC -> CYRILLIC SMALL LETTER EM + u'\u043d' # 0xED -> CYRILLIC SMALL LETTER EN + u'\u043e' # 0xEE -> CYRILLIC SMALL LETTER O + u'\u043f' # 0xEF -> CYRILLIC SMALL LETTER PE + u'\u0440' # 0xF0 -> CYRILLIC SMALL LETTER ER + u'\u0441' # 0xF1 -> CYRILLIC SMALL LETTER ES + u'\u0442' # 0xF2 -> CYRILLIC SMALL LETTER TE + u'\u0443' # 0xF3 -> CYRILLIC SMALL LETTER U + u'\u0444' # 0xF4 -> CYRILLIC SMALL LETTER EF + u'\u0445' # 0xF5 -> CYRILLIC SMALL LETTER HA + u'\u0446' # 0xF6 -> CYRILLIC SMALL LETTER TSE + u'\u0447' # 0xF7 -> CYRILLIC SMALL LETTER CHE + u'\u0448' # 0xF8 -> CYRILLIC SMALL LETTER SHA + u'\u0449' # 0xF9 -> CYRILLIC SMALL LETTER SHCHA + u'\u044a' # 0xFA -> CYRILLIC SMALL LETTER HARD SIGN + u'\u044b' # 0xFB -> CYRILLIC SMALL LETTER YERU + u'\u044c' # 0xFC -> CYRILLIC SMALL LETTER SOFT SIGN + u'\u044d' # 0xFD -> CYRILLIC SMALL LETTER E + u'\u044e' # 0xFE -> CYRILLIC SMALL LETTER YU + u'\u20ac' # 0xFF -> EURO SIGN +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/mac_farsi.py b/thirdparty/python25/Lib/encodings/mac_farsi.py new file mode 100644 index 000000000..06d92853c --- /dev/null +++ b/thirdparty/python25/Lib/encodings/mac_farsi.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_farsi generated from 'MAPPINGS/VENDORS/APPLE/FARSI.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-farsi', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> CONTROL CHARACTER + u'\x01' # 0x01 -> CONTROL CHARACTER + u'\x02' # 0x02 -> CONTROL CHARACTER + u'\x03' # 0x03 -> CONTROL CHARACTER + u'\x04' # 0x04 -> CONTROL CHARACTER + u'\x05' # 0x05 -> CONTROL CHARACTER + u'\x06' # 0x06 -> CONTROL CHARACTER + u'\x07' # 0x07 -> CONTROL CHARACTER + u'\x08' # 0x08 -> CONTROL CHARACTER + u'\t' # 0x09 -> CONTROL CHARACTER + u'\n' # 0x0A -> CONTROL CHARACTER + u'\x0b' # 0x0B -> CONTROL CHARACTER + u'\x0c' # 0x0C -> CONTROL CHARACTER + u'\r' # 0x0D -> CONTROL CHARACTER + u'\x0e' # 0x0E -> CONTROL CHARACTER + u'\x0f' # 0x0F -> CONTROL CHARACTER + u'\x10' # 0x10 -> CONTROL CHARACTER + u'\x11' # 0x11 -> CONTROL CHARACTER + u'\x12' # 0x12 -> CONTROL CHARACTER + u'\x13' # 0x13 -> CONTROL CHARACTER + u'\x14' # 0x14 -> CONTROL CHARACTER + u'\x15' # 0x15 -> CONTROL CHARACTER + u'\x16' # 0x16 -> CONTROL CHARACTER + u'\x17' # 0x17 -> CONTROL CHARACTER + u'\x18' # 0x18 -> CONTROL CHARACTER + u'\x19' # 0x19 -> CONTROL CHARACTER + u'\x1a' # 0x1A -> CONTROL CHARACTER + u'\x1b' # 0x1B -> CONTROL CHARACTER + u'\x1c' # 0x1C -> CONTROL CHARACTER + u'\x1d' # 0x1D -> CONTROL CHARACTER + u'\x1e' # 0x1E -> CONTROL CHARACTER + u'\x1f' # 0x1F -> CONTROL CHARACTER + u' ' # 0x20 -> SPACE, left-right + u'!' # 0x21 -> EXCLAMATION MARK, left-right + u'"' # 0x22 -> QUOTATION MARK, left-right + u'#' # 0x23 -> NUMBER SIGN, left-right + u'$' # 0x24 -> DOLLAR SIGN, left-right + u'%' # 0x25 -> PERCENT SIGN, left-right + u'&' # 0x26 -> AMPERSAND, left-right + u"'" # 0x27 -> APOSTROPHE, left-right + u'(' # 0x28 -> LEFT PARENTHESIS, left-right + u')' # 0x29 -> RIGHT PARENTHESIS, left-right + u'*' # 0x2A -> ASTERISK, left-right + u'+' # 0x2B -> PLUS SIGN, left-right + u',' # 0x2C -> COMMA, left-right; in Arabic-script context, displayed as 0x066C ARABIC THOUSANDS SEPARATOR + u'-' # 0x2D -> HYPHEN-MINUS, left-right + u'.' # 0x2E -> FULL STOP, left-right; in Arabic-script context, displayed as 0x066B ARABIC DECIMAL SEPARATOR + u'/' # 0x2F -> SOLIDUS, left-right + u'0' # 0x30 -> DIGIT ZERO; in Arabic-script context, displayed as 0x06F0 EXTENDED ARABIC-INDIC DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE; in Arabic-script context, displayed as 0x06F1 EXTENDED ARABIC-INDIC DIGIT ONE + u'2' # 0x32 -> DIGIT TWO; in Arabic-script context, displayed as 0x06F2 EXTENDED ARABIC-INDIC DIGIT TWO + u'3' # 0x33 -> DIGIT THREE; in Arabic-script context, displayed as 0x06F3 EXTENDED ARABIC-INDIC DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR; in Arabic-script context, displayed as 0x06F4 EXTENDED ARABIC-INDIC DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE; in Arabic-script context, displayed as 0x06F5 EXTENDED ARABIC-INDIC DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX; in Arabic-script context, displayed as 0x06F6 EXTENDED ARABIC-INDIC DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN; in Arabic-script context, displayed as 0x06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT; in Arabic-script context, displayed as 0x06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE; in Arabic-script context, displayed as 0x06F9 EXTENDED ARABIC-INDIC DIGIT NINE + u':' # 0x3A -> COLON, left-right + u';' # 0x3B -> SEMICOLON, left-right + u'<' # 0x3C -> LESS-THAN SIGN, left-right + u'=' # 0x3D -> EQUALS SIGN, left-right + u'>' # 0x3E -> GREATER-THAN SIGN, left-right + u'?' # 0x3F -> QUESTION MARK, left-right + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET, left-right + u'\\' # 0x5C -> REVERSE SOLIDUS, left-right + u']' # 0x5D -> RIGHT SQUARE BRACKET, left-right + u'^' # 0x5E -> CIRCUMFLEX ACCENT, left-right + u'_' # 0x5F -> LOW LINE, left-right + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET, left-right + u'|' # 0x7C -> VERTICAL LINE, left-right + u'}' # 0x7D -> RIGHT CURLY BRACKET, left-right + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> CONTROL CHARACTER + u'\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xa0' # 0x81 -> NO-BREAK SPACE, right-left + u'\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS + u'\u06ba' # 0x8B -> ARABIC LETTER NOON GHUNNA + u'\xab' # 0x8C -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left + u'\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE + u'\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE + u'\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE + u'\u2026' # 0x93 -> HORIZONTAL ELLIPSIS, right-left + u'\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE + u'\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE + u'\xbb' # 0x98 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK, right-left + u'\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf7' # 0x9B -> DIVISION SIGN, right-left + u'\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE + u'\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE + u'\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS + u' ' # 0xA0 -> SPACE, right-left + u'!' # 0xA1 -> EXCLAMATION MARK, right-left + u'"' # 0xA2 -> QUOTATION MARK, right-left + u'#' # 0xA3 -> NUMBER SIGN, right-left + u'$' # 0xA4 -> DOLLAR SIGN, right-left + u'\u066a' # 0xA5 -> ARABIC PERCENT SIGN + u'&' # 0xA6 -> AMPERSAND, right-left + u"'" # 0xA7 -> APOSTROPHE, right-left + u'(' # 0xA8 -> LEFT PARENTHESIS, right-left + u')' # 0xA9 -> RIGHT PARENTHESIS, right-left + u'*' # 0xAA -> ASTERISK, right-left + u'+' # 0xAB -> PLUS SIGN, right-left + u'\u060c' # 0xAC -> ARABIC COMMA + u'-' # 0xAD -> HYPHEN-MINUS, right-left + u'.' # 0xAE -> FULL STOP, right-left + u'/' # 0xAF -> SOLIDUS, right-left + u'\u06f0' # 0xB0 -> EXTENDED ARABIC-INDIC DIGIT ZERO, right-left (need override) + u'\u06f1' # 0xB1 -> EXTENDED ARABIC-INDIC DIGIT ONE, right-left (need override) + u'\u06f2' # 0xB2 -> EXTENDED ARABIC-INDIC DIGIT TWO, right-left (need override) + u'\u06f3' # 0xB3 -> EXTENDED ARABIC-INDIC DIGIT THREE, right-left (need override) + u'\u06f4' # 0xB4 -> EXTENDED ARABIC-INDIC DIGIT FOUR, right-left (need override) + u'\u06f5' # 0xB5 -> EXTENDED ARABIC-INDIC DIGIT FIVE, right-left (need override) + u'\u06f6' # 0xB6 -> EXTENDED ARABIC-INDIC DIGIT SIX, right-left (need override) + u'\u06f7' # 0xB7 -> EXTENDED ARABIC-INDIC DIGIT SEVEN, right-left (need override) + u'\u06f8' # 0xB8 -> EXTENDED ARABIC-INDIC DIGIT EIGHT, right-left (need override) + u'\u06f9' # 0xB9 -> EXTENDED ARABIC-INDIC DIGIT NINE, right-left (need override) + u':' # 0xBA -> COLON, right-left + u'\u061b' # 0xBB -> ARABIC SEMICOLON + u'<' # 0xBC -> LESS-THAN SIGN, right-left + u'=' # 0xBD -> EQUALS SIGN, right-left + u'>' # 0xBE -> GREATER-THAN SIGN, right-left + u'\u061f' # 0xBF -> ARABIC QUESTION MARK + u'\u274a' # 0xC0 -> EIGHT TEARDROP-SPOKED PROPELLER ASTERISK, right-left + u'\u0621' # 0xC1 -> ARABIC LETTER HAMZA + u'\u0622' # 0xC2 -> ARABIC LETTER ALEF WITH MADDA ABOVE + u'\u0623' # 0xC3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE + u'\u0624' # 0xC4 -> ARABIC LETTER WAW WITH HAMZA ABOVE + u'\u0625' # 0xC5 -> ARABIC LETTER ALEF WITH HAMZA BELOW + u'\u0626' # 0xC6 -> ARABIC LETTER YEH WITH HAMZA ABOVE + u'\u0627' # 0xC7 -> ARABIC LETTER ALEF + u'\u0628' # 0xC8 -> ARABIC LETTER BEH + u'\u0629' # 0xC9 -> ARABIC LETTER TEH MARBUTA + u'\u062a' # 0xCA -> ARABIC LETTER TEH + u'\u062b' # 0xCB -> ARABIC LETTER THEH + u'\u062c' # 0xCC -> ARABIC LETTER JEEM + u'\u062d' # 0xCD -> ARABIC LETTER HAH + u'\u062e' # 0xCE -> ARABIC LETTER KHAH + u'\u062f' # 0xCF -> ARABIC LETTER DAL + u'\u0630' # 0xD0 -> ARABIC LETTER THAL + u'\u0631' # 0xD1 -> ARABIC LETTER REH + u'\u0632' # 0xD2 -> ARABIC LETTER ZAIN + u'\u0633' # 0xD3 -> ARABIC LETTER SEEN + u'\u0634' # 0xD4 -> ARABIC LETTER SHEEN + u'\u0635' # 0xD5 -> ARABIC LETTER SAD + u'\u0636' # 0xD6 -> ARABIC LETTER DAD + u'\u0637' # 0xD7 -> ARABIC LETTER TAH + u'\u0638' # 0xD8 -> ARABIC LETTER ZAH + u'\u0639' # 0xD9 -> ARABIC LETTER AIN + u'\u063a' # 0xDA -> ARABIC LETTER GHAIN + u'[' # 0xDB -> LEFT SQUARE BRACKET, right-left + u'\\' # 0xDC -> REVERSE SOLIDUS, right-left + u']' # 0xDD -> RIGHT SQUARE BRACKET, right-left + u'^' # 0xDE -> CIRCUMFLEX ACCENT, right-left + u'_' # 0xDF -> LOW LINE, right-left + u'\u0640' # 0xE0 -> ARABIC TATWEEL + u'\u0641' # 0xE1 -> ARABIC LETTER FEH + u'\u0642' # 0xE2 -> ARABIC LETTER QAF + u'\u0643' # 0xE3 -> ARABIC LETTER KAF + u'\u0644' # 0xE4 -> ARABIC LETTER LAM + u'\u0645' # 0xE5 -> ARABIC LETTER MEEM + u'\u0646' # 0xE6 -> ARABIC LETTER NOON + u'\u0647' # 0xE7 -> ARABIC LETTER HEH + u'\u0648' # 0xE8 -> ARABIC LETTER WAW + u'\u0649' # 0xE9 -> ARABIC LETTER ALEF MAKSURA + u'\u064a' # 0xEA -> ARABIC LETTER YEH + u'\u064b' # 0xEB -> ARABIC FATHATAN + u'\u064c' # 0xEC -> ARABIC DAMMATAN + u'\u064d' # 0xED -> ARABIC KASRATAN + u'\u064e' # 0xEE -> ARABIC FATHA + u'\u064f' # 0xEF -> ARABIC DAMMA + u'\u0650' # 0xF0 -> ARABIC KASRA + u'\u0651' # 0xF1 -> ARABIC SHADDA + u'\u0652' # 0xF2 -> ARABIC SUKUN + u'\u067e' # 0xF3 -> ARABIC LETTER PEH + u'\u0679' # 0xF4 -> ARABIC LETTER TTEH + u'\u0686' # 0xF5 -> ARABIC LETTER TCHEH + u'\u06d5' # 0xF6 -> ARABIC LETTER AE + u'\u06a4' # 0xF7 -> ARABIC LETTER VEH + u'\u06af' # 0xF8 -> ARABIC LETTER GAF + u'\u0688' # 0xF9 -> ARABIC LETTER DDAL + u'\u0691' # 0xFA -> ARABIC LETTER RREH + u'{' # 0xFB -> LEFT CURLY BRACKET, right-left + u'|' # 0xFC -> VERTICAL LINE, right-left + u'}' # 0xFD -> RIGHT CURLY BRACKET, right-left + u'\u0698' # 0xFE -> ARABIC LETTER JEH + u'\u06d2' # 0xFF -> ARABIC LETTER YEH BARREE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/mac_greek.py b/thirdparty/python25/Lib/encodings/mac_greek.py new file mode 100644 index 000000000..77a25f478 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/mac_greek.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_greek generated from 'MAPPINGS/VENDORS/APPLE/GREEK.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-greek', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> CONTROL CHARACTER + u'\x01' # 0x01 -> CONTROL CHARACTER + u'\x02' # 0x02 -> CONTROL CHARACTER + u'\x03' # 0x03 -> CONTROL CHARACTER + u'\x04' # 0x04 -> CONTROL CHARACTER + u'\x05' # 0x05 -> CONTROL CHARACTER + u'\x06' # 0x06 -> CONTROL CHARACTER + u'\x07' # 0x07 -> CONTROL CHARACTER + u'\x08' # 0x08 -> CONTROL CHARACTER + u'\t' # 0x09 -> CONTROL CHARACTER + u'\n' # 0x0A -> CONTROL CHARACTER + u'\x0b' # 0x0B -> CONTROL CHARACTER + u'\x0c' # 0x0C -> CONTROL CHARACTER + u'\r' # 0x0D -> CONTROL CHARACTER + u'\x0e' # 0x0E -> CONTROL CHARACTER + u'\x0f' # 0x0F -> CONTROL CHARACTER + u'\x10' # 0x10 -> CONTROL CHARACTER + u'\x11' # 0x11 -> CONTROL CHARACTER + u'\x12' # 0x12 -> CONTROL CHARACTER + u'\x13' # 0x13 -> CONTROL CHARACTER + u'\x14' # 0x14 -> CONTROL CHARACTER + u'\x15' # 0x15 -> CONTROL CHARACTER + u'\x16' # 0x16 -> CONTROL CHARACTER + u'\x17' # 0x17 -> CONTROL CHARACTER + u'\x18' # 0x18 -> CONTROL CHARACTER + u'\x19' # 0x19 -> CONTROL CHARACTER + u'\x1a' # 0x1A -> CONTROL CHARACTER + u'\x1b' # 0x1B -> CONTROL CHARACTER + u'\x1c' # 0x1C -> CONTROL CHARACTER + u'\x1d' # 0x1D -> CONTROL CHARACTER + u'\x1e' # 0x1E -> CONTROL CHARACTER + u'\x1f' # 0x1F -> CONTROL CHARACTER + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> CONTROL CHARACTER + u'\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xb9' # 0x81 -> SUPERSCRIPT ONE + u'\xb2' # 0x82 -> SUPERSCRIPT TWO + u'\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xb3' # 0x84 -> SUPERSCRIPT THREE + u'\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\u0385' # 0x87 -> GREEK DIALYTIKA TONOS + u'\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS + u'\u0384' # 0x8B -> GREEK TONOS + u'\xa8' # 0x8C -> DIAERESIS + u'\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE + u'\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE + u'\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xa3' # 0x92 -> POUND SIGN + u'\u2122' # 0x93 -> TRADE MARK SIGN + u'\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS + u'\u2022' # 0x96 -> BULLET + u'\xbd' # 0x97 -> VULGAR FRACTION ONE HALF + u'\u2030' # 0x98 -> PER MILLE SIGN + u'\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xa6' # 0x9B -> BROKEN BAR + u'\u20ac' # 0x9C -> EURO SIGN # before Mac OS 9.2.2, was SOFT HYPHEN + u'\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE + u'\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS + u'\u2020' # 0xA0 -> DAGGER + u'\u0393' # 0xA1 -> GREEK CAPITAL LETTER GAMMA + u'\u0394' # 0xA2 -> GREEK CAPITAL LETTER DELTA + u'\u0398' # 0xA3 -> GREEK CAPITAL LETTER THETA + u'\u039b' # 0xA4 -> GREEK CAPITAL LETTER LAMDA + u'\u039e' # 0xA5 -> GREEK CAPITAL LETTER XI + u'\u03a0' # 0xA6 -> GREEK CAPITAL LETTER PI + u'\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S + u'\xae' # 0xA8 -> REGISTERED SIGN + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\u03a3' # 0xAA -> GREEK CAPITAL LETTER SIGMA + u'\u03aa' # 0xAB -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + u'\xa7' # 0xAC -> SECTION SIGN + u'\u2260' # 0xAD -> NOT EQUAL TO + u'\xb0' # 0xAE -> DEGREE SIGN + u'\xb7' # 0xAF -> MIDDLE DOT + u'\u0391' # 0xB0 -> GREEK CAPITAL LETTER ALPHA + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO + u'\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO + u'\xa5' # 0xB4 -> YEN SIGN + u'\u0392' # 0xB5 -> GREEK CAPITAL LETTER BETA + u'\u0395' # 0xB6 -> GREEK CAPITAL LETTER EPSILON + u'\u0396' # 0xB7 -> GREEK CAPITAL LETTER ZETA + u'\u0397' # 0xB8 -> GREEK CAPITAL LETTER ETA + u'\u0399' # 0xB9 -> GREEK CAPITAL LETTER IOTA + u'\u039a' # 0xBA -> GREEK CAPITAL LETTER KAPPA + u'\u039c' # 0xBB -> GREEK CAPITAL LETTER MU + u'\u03a6' # 0xBC -> GREEK CAPITAL LETTER PHI + u'\u03ab' # 0xBD -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + u'\u03a8' # 0xBE -> GREEK CAPITAL LETTER PSI + u'\u03a9' # 0xBF -> GREEK CAPITAL LETTER OMEGA + u'\u03ac' # 0xC0 -> GREEK SMALL LETTER ALPHA WITH TONOS + u'\u039d' # 0xC1 -> GREEK CAPITAL LETTER NU + u'\xac' # 0xC2 -> NOT SIGN + u'\u039f' # 0xC3 -> GREEK CAPITAL LETTER OMICRON + u'\u03a1' # 0xC4 -> GREEK CAPITAL LETTER RHO + u'\u2248' # 0xC5 -> ALMOST EQUAL TO + u'\u03a4' # 0xC6 -> GREEK CAPITAL LETTER TAU + u'\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS + u'\xa0' # 0xCA -> NO-BREAK SPACE + u'\u03a5' # 0xCB -> GREEK CAPITAL LETTER UPSILON + u'\u03a7' # 0xCC -> GREEK CAPITAL LETTER CHI + u'\u0386' # 0xCD -> GREEK CAPITAL LETTER ALPHA WITH TONOS + u'\u0388' # 0xCE -> GREEK CAPITAL LETTER EPSILON WITH TONOS + u'\u0153' # 0xCF -> LATIN SMALL LIGATURE OE + u'\u2013' # 0xD0 -> EN DASH + u'\u2015' # 0xD1 -> HORIZONTAL BAR + u'\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK + u'\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK + u'\xf7' # 0xD6 -> DIVISION SIGN + u'\u0389' # 0xD7 -> GREEK CAPITAL LETTER ETA WITH TONOS + u'\u038a' # 0xD8 -> GREEK CAPITAL LETTER IOTA WITH TONOS + u'\u038c' # 0xD9 -> GREEK CAPITAL LETTER OMICRON WITH TONOS + u'\u038e' # 0xDA -> GREEK CAPITAL LETTER UPSILON WITH TONOS + u'\u03ad' # 0xDB -> GREEK SMALL LETTER EPSILON WITH TONOS + u'\u03ae' # 0xDC -> GREEK SMALL LETTER ETA WITH TONOS + u'\u03af' # 0xDD -> GREEK SMALL LETTER IOTA WITH TONOS + u'\u03cc' # 0xDE -> GREEK SMALL LETTER OMICRON WITH TONOS + u'\u038f' # 0xDF -> GREEK CAPITAL LETTER OMEGA WITH TONOS + u'\u03cd' # 0xE0 -> GREEK SMALL LETTER UPSILON WITH TONOS + u'\u03b1' # 0xE1 -> GREEK SMALL LETTER ALPHA + u'\u03b2' # 0xE2 -> GREEK SMALL LETTER BETA + u'\u03c8' # 0xE3 -> GREEK SMALL LETTER PSI + u'\u03b4' # 0xE4 -> GREEK SMALL LETTER DELTA + u'\u03b5' # 0xE5 -> GREEK SMALL LETTER EPSILON + u'\u03c6' # 0xE6 -> GREEK SMALL LETTER PHI + u'\u03b3' # 0xE7 -> GREEK SMALL LETTER GAMMA + u'\u03b7' # 0xE8 -> GREEK SMALL LETTER ETA + u'\u03b9' # 0xE9 -> GREEK SMALL LETTER IOTA + u'\u03be' # 0xEA -> GREEK SMALL LETTER XI + u'\u03ba' # 0xEB -> GREEK SMALL LETTER KAPPA + u'\u03bb' # 0xEC -> GREEK SMALL LETTER LAMDA + u'\u03bc' # 0xED -> GREEK SMALL LETTER MU + u'\u03bd' # 0xEE -> GREEK SMALL LETTER NU + u'\u03bf' # 0xEF -> GREEK SMALL LETTER OMICRON + u'\u03c0' # 0xF0 -> GREEK SMALL LETTER PI + u'\u03ce' # 0xF1 -> GREEK SMALL LETTER OMEGA WITH TONOS + u'\u03c1' # 0xF2 -> GREEK SMALL LETTER RHO + u'\u03c3' # 0xF3 -> GREEK SMALL LETTER SIGMA + u'\u03c4' # 0xF4 -> GREEK SMALL LETTER TAU + u'\u03b8' # 0xF5 -> GREEK SMALL LETTER THETA + u'\u03c9' # 0xF6 -> GREEK SMALL LETTER OMEGA + u'\u03c2' # 0xF7 -> GREEK SMALL LETTER FINAL SIGMA + u'\u03c7' # 0xF8 -> GREEK SMALL LETTER CHI + u'\u03c5' # 0xF9 -> GREEK SMALL LETTER UPSILON + u'\u03b6' # 0xFA -> GREEK SMALL LETTER ZETA + u'\u03ca' # 0xFB -> GREEK SMALL LETTER IOTA WITH DIALYTIKA + u'\u03cb' # 0xFC -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA + u'\u0390' # 0xFD -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + u'\u03b0' # 0xFE -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + u'\xad' # 0xFF -> SOFT HYPHEN # before Mac OS 9.2.2, was undefined +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/mac_iceland.py b/thirdparty/python25/Lib/encodings/mac_iceland.py new file mode 100644 index 000000000..7045dc1c3 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/mac_iceland.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_iceland generated from 'MAPPINGS/VENDORS/APPLE/ICELAND.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-iceland', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> CONTROL CHARACTER + u'\x01' # 0x01 -> CONTROL CHARACTER + u'\x02' # 0x02 -> CONTROL CHARACTER + u'\x03' # 0x03 -> CONTROL CHARACTER + u'\x04' # 0x04 -> CONTROL CHARACTER + u'\x05' # 0x05 -> CONTROL CHARACTER + u'\x06' # 0x06 -> CONTROL CHARACTER + u'\x07' # 0x07 -> CONTROL CHARACTER + u'\x08' # 0x08 -> CONTROL CHARACTER + u'\t' # 0x09 -> CONTROL CHARACTER + u'\n' # 0x0A -> CONTROL CHARACTER + u'\x0b' # 0x0B -> CONTROL CHARACTER + u'\x0c' # 0x0C -> CONTROL CHARACTER + u'\r' # 0x0D -> CONTROL CHARACTER + u'\x0e' # 0x0E -> CONTROL CHARACTER + u'\x0f' # 0x0F -> CONTROL CHARACTER + u'\x10' # 0x10 -> CONTROL CHARACTER + u'\x11' # 0x11 -> CONTROL CHARACTER + u'\x12' # 0x12 -> CONTROL CHARACTER + u'\x13' # 0x13 -> CONTROL CHARACTER + u'\x14' # 0x14 -> CONTROL CHARACTER + u'\x15' # 0x15 -> CONTROL CHARACTER + u'\x16' # 0x16 -> CONTROL CHARACTER + u'\x17' # 0x17 -> CONTROL CHARACTER + u'\x18' # 0x18 -> CONTROL CHARACTER + u'\x19' # 0x19 -> CONTROL CHARACTER + u'\x1a' # 0x1A -> CONTROL CHARACTER + u'\x1b' # 0x1B -> CONTROL CHARACTER + u'\x1c' # 0x1C -> CONTROL CHARACTER + u'\x1d' # 0x1D -> CONTROL CHARACTER + u'\x1e' # 0x1E -> CONTROL CHARACTER + u'\x1f' # 0x1F -> CONTROL CHARACTER + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> CONTROL CHARACTER + u'\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe3' # 0x8B -> LATIN SMALL LETTER A WITH TILDE + u'\xe5' # 0x8C -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE + u'\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE + u'\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE + u'\xec' # 0x93 -> LATIN SMALL LETTER I WITH GRAVE + u'\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE + u'\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE + u'\xf2' # 0x98 -> LATIN SMALL LETTER O WITH GRAVE + u'\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE + u'\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE + u'\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE + u'\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS + u'\xdd' # 0xA0 -> LATIN CAPITAL LETTER Y WITH ACUTE + u'\xb0' # 0xA1 -> DEGREE SIGN + u'\xa2' # 0xA2 -> CENT SIGN + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa7' # 0xA4 -> SECTION SIGN + u'\u2022' # 0xA5 -> BULLET + u'\xb6' # 0xA6 -> PILCROW SIGN + u'\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S + u'\xae' # 0xA8 -> REGISTERED SIGN + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\u2122' # 0xAA -> TRADE MARK SIGN + u'\xb4' # 0xAB -> ACUTE ACCENT + u'\xa8' # 0xAC -> DIAERESIS + u'\u2260' # 0xAD -> NOT EQUAL TO + u'\xc6' # 0xAE -> LATIN CAPITAL LETTER AE + u'\xd8' # 0xAF -> LATIN CAPITAL LETTER O WITH STROKE + u'\u221e' # 0xB0 -> INFINITY + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO + u'\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO + u'\xa5' # 0xB4 -> YEN SIGN + u'\xb5' # 0xB5 -> MICRO SIGN + u'\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL + u'\u2211' # 0xB7 -> N-ARY SUMMATION + u'\u220f' # 0xB8 -> N-ARY PRODUCT + u'\u03c0' # 0xB9 -> GREEK SMALL LETTER PI + u'\u222b' # 0xBA -> INTEGRAL + u'\xaa' # 0xBB -> FEMININE ORDINAL INDICATOR + u'\xba' # 0xBC -> MASCULINE ORDINAL INDICATOR + u'\u03a9' # 0xBD -> GREEK CAPITAL LETTER OMEGA + u'\xe6' # 0xBE -> LATIN SMALL LETTER AE + u'\xf8' # 0xBF -> LATIN SMALL LETTER O WITH STROKE + u'\xbf' # 0xC0 -> INVERTED QUESTION MARK + u'\xa1' # 0xC1 -> INVERTED EXCLAMATION MARK + u'\xac' # 0xC2 -> NOT SIGN + u'\u221a' # 0xC3 -> SQUARE ROOT + u'\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK + u'\u2248' # 0xC5 -> ALMOST EQUAL TO + u'\u2206' # 0xC6 -> INCREMENT + u'\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS + u'\xa0' # 0xCA -> NO-BREAK SPACE + u'\xc0' # 0xCB -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc3' # 0xCC -> LATIN CAPITAL LETTER A WITH TILDE + u'\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE + u'\u0152' # 0xCE -> LATIN CAPITAL LIGATURE OE + u'\u0153' # 0xCF -> LATIN SMALL LIGATURE OE + u'\u2013' # 0xD0 -> EN DASH + u'\u2014' # 0xD1 -> EM DASH + u'\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK + u'\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK + u'\xf7' # 0xD6 -> DIVISION SIGN + u'\u25ca' # 0xD7 -> LOZENGE + u'\xff' # 0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS + u'\u0178' # 0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS + u'\u2044' # 0xDA -> FRACTION SLASH + u'\u20ac' # 0xDB -> EURO SIGN + u'\xd0' # 0xDC -> LATIN CAPITAL LETTER ETH + u'\xf0' # 0xDD -> LATIN SMALL LETTER ETH + u'\xde' # 0xDE -> LATIN CAPITAL LETTER THORN + u'\xfe' # 0xDF -> LATIN SMALL LETTER THORN + u'\xfd' # 0xE0 -> LATIN SMALL LETTER Y WITH ACUTE + u'\xb7' # 0xE1 -> MIDDLE DOT + u'\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK + u'\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK + u'\u2030' # 0xE4 -> PER MILLE SIGN + u'\xc2' # 0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xca' # 0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xcb' # 0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xc8' # 0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\xcc' # 0xED -> LATIN CAPITAL LETTER I WITH GRAVE + u'\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\uf8ff' # 0xF0 -> Apple logo + u'\xd2' # 0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xd9' # 0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE + u'\u0131' # 0xF5 -> LATIN SMALL LETTER DOTLESS I + u'\u02c6' # 0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT + u'\u02dc' # 0xF7 -> SMALL TILDE + u'\xaf' # 0xF8 -> MACRON + u'\u02d8' # 0xF9 -> BREVE + u'\u02d9' # 0xFA -> DOT ABOVE + u'\u02da' # 0xFB -> RING ABOVE + u'\xb8' # 0xFC -> CEDILLA + u'\u02dd' # 0xFD -> DOUBLE ACUTE ACCENT + u'\u02db' # 0xFE -> OGONEK + u'\u02c7' # 0xFF -> CARON +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/mac_latin2.py b/thirdparty/python25/Lib/encodings/mac_latin2.py new file mode 100644 index 000000000..324b4aff4 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/mac_latin2.py @@ -0,0 +1,183 @@ +""" Python Character Mapping Codec generated from 'LATIN2.TXT' with gencodec.py. + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. +(c) Copyright 2000 Guido van Rossum. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_map) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_map)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-latin2', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x0081: 0x0100, # LATIN CAPITAL LETTER A WITH MACRON + 0x0082: 0x0101, # LATIN SMALL LETTER A WITH MACRON + 0x0083: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x0084: 0x0104, # LATIN CAPITAL LETTER A WITH OGONEK + 0x0085: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x0086: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x0087: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0x0088: 0x0105, # LATIN SMALL LETTER A WITH OGONEK + 0x0089: 0x010c, # LATIN CAPITAL LETTER C WITH CARON + 0x008a: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0x008b: 0x010d, # LATIN SMALL LETTER C WITH CARON + 0x008c: 0x0106, # LATIN CAPITAL LETTER C WITH ACUTE + 0x008d: 0x0107, # LATIN SMALL LETTER C WITH ACUTE + 0x008e: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0x008f: 0x0179, # LATIN CAPITAL LETTER Z WITH ACUTE + 0x0090: 0x017a, # LATIN SMALL LETTER Z WITH ACUTE + 0x0091: 0x010e, # LATIN CAPITAL LETTER D WITH CARON + 0x0092: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0x0093: 0x010f, # LATIN SMALL LETTER D WITH CARON + 0x0094: 0x0112, # LATIN CAPITAL LETTER E WITH MACRON + 0x0095: 0x0113, # LATIN SMALL LETTER E WITH MACRON + 0x0096: 0x0116, # LATIN CAPITAL LETTER E WITH DOT ABOVE + 0x0097: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0x0098: 0x0117, # LATIN SMALL LETTER E WITH DOT ABOVE + 0x0099: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0x009a: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0x009b: 0x00f5, # LATIN SMALL LETTER O WITH TILDE + 0x009c: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0x009d: 0x011a, # LATIN CAPITAL LETTER E WITH CARON + 0x009e: 0x011b, # LATIN SMALL LETTER E WITH CARON + 0x009f: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0x00a0: 0x2020, # DAGGER + 0x00a1: 0x00b0, # DEGREE SIGN + 0x00a2: 0x0118, # LATIN CAPITAL LETTER E WITH OGONEK + 0x00a4: 0x00a7, # SECTION SIGN + 0x00a5: 0x2022, # BULLET + 0x00a6: 0x00b6, # PILCROW SIGN + 0x00a7: 0x00df, # LATIN SMALL LETTER SHARP S + 0x00a8: 0x00ae, # REGISTERED SIGN + 0x00aa: 0x2122, # TRADE MARK SIGN + 0x00ab: 0x0119, # LATIN SMALL LETTER E WITH OGONEK + 0x00ac: 0x00a8, # DIAERESIS + 0x00ad: 0x2260, # NOT EQUAL TO + 0x00ae: 0x0123, # LATIN SMALL LETTER G WITH CEDILLA + 0x00af: 0x012e, # LATIN CAPITAL LETTER I WITH OGONEK + 0x00b0: 0x012f, # LATIN SMALL LETTER I WITH OGONEK + 0x00b1: 0x012a, # LATIN CAPITAL LETTER I WITH MACRON + 0x00b2: 0x2264, # LESS-THAN OR EQUAL TO + 0x00b3: 0x2265, # GREATER-THAN OR EQUAL TO + 0x00b4: 0x012b, # LATIN SMALL LETTER I WITH MACRON + 0x00b5: 0x0136, # LATIN CAPITAL LETTER K WITH CEDILLA + 0x00b6: 0x2202, # PARTIAL DIFFERENTIAL + 0x00b7: 0x2211, # N-ARY SUMMATION + 0x00b8: 0x0142, # LATIN SMALL LETTER L WITH STROKE + 0x00b9: 0x013b, # LATIN CAPITAL LETTER L WITH CEDILLA + 0x00ba: 0x013c, # LATIN SMALL LETTER L WITH CEDILLA + 0x00bb: 0x013d, # LATIN CAPITAL LETTER L WITH CARON + 0x00bc: 0x013e, # LATIN SMALL LETTER L WITH CARON + 0x00bd: 0x0139, # LATIN CAPITAL LETTER L WITH ACUTE + 0x00be: 0x013a, # LATIN SMALL LETTER L WITH ACUTE + 0x00bf: 0x0145, # LATIN CAPITAL LETTER N WITH CEDILLA + 0x00c0: 0x0146, # LATIN SMALL LETTER N WITH CEDILLA + 0x00c1: 0x0143, # LATIN CAPITAL LETTER N WITH ACUTE + 0x00c2: 0x00ac, # NOT SIGN + 0x00c3: 0x221a, # SQUARE ROOT + 0x00c4: 0x0144, # LATIN SMALL LETTER N WITH ACUTE + 0x00c5: 0x0147, # LATIN CAPITAL LETTER N WITH CARON + 0x00c6: 0x2206, # INCREMENT + 0x00c7: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00c8: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x00c9: 0x2026, # HORIZONTAL ELLIPSIS + 0x00ca: 0x00a0, # NO-BREAK SPACE + 0x00cb: 0x0148, # LATIN SMALL LETTER N WITH CARON + 0x00cc: 0x0150, # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + 0x00cd: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE + 0x00ce: 0x0151, # LATIN SMALL LETTER O WITH DOUBLE ACUTE + 0x00cf: 0x014c, # LATIN CAPITAL LETTER O WITH MACRON + 0x00d0: 0x2013, # EN DASH + 0x00d1: 0x2014, # EM DASH + 0x00d2: 0x201c, # LEFT DOUBLE QUOTATION MARK + 0x00d3: 0x201d, # RIGHT DOUBLE QUOTATION MARK + 0x00d4: 0x2018, # LEFT SINGLE QUOTATION MARK + 0x00d5: 0x2019, # RIGHT SINGLE QUOTATION MARK + 0x00d6: 0x00f7, # DIVISION SIGN + 0x00d7: 0x25ca, # LOZENGE + 0x00d8: 0x014d, # LATIN SMALL LETTER O WITH MACRON + 0x00d9: 0x0154, # LATIN CAPITAL LETTER R WITH ACUTE + 0x00da: 0x0155, # LATIN SMALL LETTER R WITH ACUTE + 0x00db: 0x0158, # LATIN CAPITAL LETTER R WITH CARON + 0x00dc: 0x2039, # SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x00dd: 0x203a, # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0x00de: 0x0159, # LATIN SMALL LETTER R WITH CARON + 0x00df: 0x0156, # LATIN CAPITAL LETTER R WITH CEDILLA + 0x00e0: 0x0157, # LATIN SMALL LETTER R WITH CEDILLA + 0x00e1: 0x0160, # LATIN CAPITAL LETTER S WITH CARON + 0x00e2: 0x201a, # SINGLE LOW-9 QUOTATION MARK + 0x00e3: 0x201e, # DOUBLE LOW-9 QUOTATION MARK + 0x00e4: 0x0161, # LATIN SMALL LETTER S WITH CARON + 0x00e5: 0x015a, # LATIN CAPITAL LETTER S WITH ACUTE + 0x00e6: 0x015b, # LATIN SMALL LETTER S WITH ACUTE + 0x00e7: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE + 0x00e8: 0x0164, # LATIN CAPITAL LETTER T WITH CARON + 0x00e9: 0x0165, # LATIN SMALL LETTER T WITH CARON + 0x00ea: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE + 0x00eb: 0x017d, # LATIN CAPITAL LETTER Z WITH CARON + 0x00ec: 0x017e, # LATIN SMALL LETTER Z WITH CARON + 0x00ed: 0x016a, # LATIN CAPITAL LETTER U WITH MACRON + 0x00ee: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE + 0x00ef: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x00f0: 0x016b, # LATIN SMALL LETTER U WITH MACRON + 0x00f1: 0x016e, # LATIN CAPITAL LETTER U WITH RING ABOVE + 0x00f2: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE + 0x00f3: 0x016f, # LATIN SMALL LETTER U WITH RING ABOVE + 0x00f4: 0x0170, # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + 0x00f5: 0x0171, # LATIN SMALL LETTER U WITH DOUBLE ACUTE + 0x00f6: 0x0172, # LATIN CAPITAL LETTER U WITH OGONEK + 0x00f7: 0x0173, # LATIN SMALL LETTER U WITH OGONEK + 0x00f8: 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE + 0x00f9: 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE + 0x00fa: 0x0137, # LATIN SMALL LETTER K WITH CEDILLA + 0x00fb: 0x017b, # LATIN CAPITAL LETTER Z WITH DOT ABOVE + 0x00fc: 0x0141, # LATIN CAPITAL LETTER L WITH STROKE + 0x00fd: 0x017c, # LATIN SMALL LETTER Z WITH DOT ABOVE + 0x00fe: 0x0122, # LATIN CAPITAL LETTER G WITH CEDILLA + 0x00ff: 0x02c7, # CARON +}) + +### Encoding Map + +encoding_map = codecs.make_encoding_map(decoding_map) diff --git a/thirdparty/python25/Lib/encodings/mac_roman.py b/thirdparty/python25/Lib/encodings/mac_roman.py new file mode 100644 index 000000000..109850147 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/mac_roman.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_roman generated from 'MAPPINGS/VENDORS/APPLE/ROMAN.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-roman', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> CONTROL CHARACTER + u'\x01' # 0x01 -> CONTROL CHARACTER + u'\x02' # 0x02 -> CONTROL CHARACTER + u'\x03' # 0x03 -> CONTROL CHARACTER + u'\x04' # 0x04 -> CONTROL CHARACTER + u'\x05' # 0x05 -> CONTROL CHARACTER + u'\x06' # 0x06 -> CONTROL CHARACTER + u'\x07' # 0x07 -> CONTROL CHARACTER + u'\x08' # 0x08 -> CONTROL CHARACTER + u'\t' # 0x09 -> CONTROL CHARACTER + u'\n' # 0x0A -> CONTROL CHARACTER + u'\x0b' # 0x0B -> CONTROL CHARACTER + u'\x0c' # 0x0C -> CONTROL CHARACTER + u'\r' # 0x0D -> CONTROL CHARACTER + u'\x0e' # 0x0E -> CONTROL CHARACTER + u'\x0f' # 0x0F -> CONTROL CHARACTER + u'\x10' # 0x10 -> CONTROL CHARACTER + u'\x11' # 0x11 -> CONTROL CHARACTER + u'\x12' # 0x12 -> CONTROL CHARACTER + u'\x13' # 0x13 -> CONTROL CHARACTER + u'\x14' # 0x14 -> CONTROL CHARACTER + u'\x15' # 0x15 -> CONTROL CHARACTER + u'\x16' # 0x16 -> CONTROL CHARACTER + u'\x17' # 0x17 -> CONTROL CHARACTER + u'\x18' # 0x18 -> CONTROL CHARACTER + u'\x19' # 0x19 -> CONTROL CHARACTER + u'\x1a' # 0x1A -> CONTROL CHARACTER + u'\x1b' # 0x1B -> CONTROL CHARACTER + u'\x1c' # 0x1C -> CONTROL CHARACTER + u'\x1d' # 0x1D -> CONTROL CHARACTER + u'\x1e' # 0x1E -> CONTROL CHARACTER + u'\x1f' # 0x1F -> CONTROL CHARACTER + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> CONTROL CHARACTER + u'\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe3' # 0x8B -> LATIN SMALL LETTER A WITH TILDE + u'\xe5' # 0x8C -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE + u'\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE + u'\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE + u'\xec' # 0x93 -> LATIN SMALL LETTER I WITH GRAVE + u'\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE + u'\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE + u'\xf2' # 0x98 -> LATIN SMALL LETTER O WITH GRAVE + u'\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE + u'\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE + u'\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE + u'\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS + u'\u2020' # 0xA0 -> DAGGER + u'\xb0' # 0xA1 -> DEGREE SIGN + u'\xa2' # 0xA2 -> CENT SIGN + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa7' # 0xA4 -> SECTION SIGN + u'\u2022' # 0xA5 -> BULLET + u'\xb6' # 0xA6 -> PILCROW SIGN + u'\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S + u'\xae' # 0xA8 -> REGISTERED SIGN + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\u2122' # 0xAA -> TRADE MARK SIGN + u'\xb4' # 0xAB -> ACUTE ACCENT + u'\xa8' # 0xAC -> DIAERESIS + u'\u2260' # 0xAD -> NOT EQUAL TO + u'\xc6' # 0xAE -> LATIN CAPITAL LETTER AE + u'\xd8' # 0xAF -> LATIN CAPITAL LETTER O WITH STROKE + u'\u221e' # 0xB0 -> INFINITY + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO + u'\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO + u'\xa5' # 0xB4 -> YEN SIGN + u'\xb5' # 0xB5 -> MICRO SIGN + u'\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL + u'\u2211' # 0xB7 -> N-ARY SUMMATION + u'\u220f' # 0xB8 -> N-ARY PRODUCT + u'\u03c0' # 0xB9 -> GREEK SMALL LETTER PI + u'\u222b' # 0xBA -> INTEGRAL + u'\xaa' # 0xBB -> FEMININE ORDINAL INDICATOR + u'\xba' # 0xBC -> MASCULINE ORDINAL INDICATOR + u'\u03a9' # 0xBD -> GREEK CAPITAL LETTER OMEGA + u'\xe6' # 0xBE -> LATIN SMALL LETTER AE + u'\xf8' # 0xBF -> LATIN SMALL LETTER O WITH STROKE + u'\xbf' # 0xC0 -> INVERTED QUESTION MARK + u'\xa1' # 0xC1 -> INVERTED EXCLAMATION MARK + u'\xac' # 0xC2 -> NOT SIGN + u'\u221a' # 0xC3 -> SQUARE ROOT + u'\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK + u'\u2248' # 0xC5 -> ALMOST EQUAL TO + u'\u2206' # 0xC6 -> INCREMENT + u'\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS + u'\xa0' # 0xCA -> NO-BREAK SPACE + u'\xc0' # 0xCB -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc3' # 0xCC -> LATIN CAPITAL LETTER A WITH TILDE + u'\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE + u'\u0152' # 0xCE -> LATIN CAPITAL LIGATURE OE + u'\u0153' # 0xCF -> LATIN SMALL LIGATURE OE + u'\u2013' # 0xD0 -> EN DASH + u'\u2014' # 0xD1 -> EM DASH + u'\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK + u'\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK + u'\xf7' # 0xD6 -> DIVISION SIGN + u'\u25ca' # 0xD7 -> LOZENGE + u'\xff' # 0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS + u'\u0178' # 0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS + u'\u2044' # 0xDA -> FRACTION SLASH + u'\u20ac' # 0xDB -> EURO SIGN + u'\u2039' # 0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + u'\u203a' # 0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + u'\ufb01' # 0xDE -> LATIN SMALL LIGATURE FI + u'\ufb02' # 0xDF -> LATIN SMALL LIGATURE FL + u'\u2021' # 0xE0 -> DOUBLE DAGGER + u'\xb7' # 0xE1 -> MIDDLE DOT + u'\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK + u'\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK + u'\u2030' # 0xE4 -> PER MILLE SIGN + u'\xc2' # 0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xca' # 0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xcb' # 0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xc8' # 0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\xcc' # 0xED -> LATIN CAPITAL LETTER I WITH GRAVE + u'\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\uf8ff' # 0xF0 -> Apple logo + u'\xd2' # 0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xd9' # 0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE + u'\u0131' # 0xF5 -> LATIN SMALL LETTER DOTLESS I + u'\u02c6' # 0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT + u'\u02dc' # 0xF7 -> SMALL TILDE + u'\xaf' # 0xF8 -> MACRON + u'\u02d8' # 0xF9 -> BREVE + u'\u02d9' # 0xFA -> DOT ABOVE + u'\u02da' # 0xFB -> RING ABOVE + u'\xb8' # 0xFC -> CEDILLA + u'\u02dd' # 0xFD -> DOUBLE ACUTE ACCENT + u'\u02db' # 0xFE -> OGONEK + u'\u02c7' # 0xFF -> CARON +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/mac_romanian.py b/thirdparty/python25/Lib/encodings/mac_romanian.py new file mode 100644 index 000000000..26a5e53da --- /dev/null +++ b/thirdparty/python25/Lib/encodings/mac_romanian.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_romanian generated from 'MAPPINGS/VENDORS/APPLE/ROMANIAN.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-romanian', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> CONTROL CHARACTER + u'\x01' # 0x01 -> CONTROL CHARACTER + u'\x02' # 0x02 -> CONTROL CHARACTER + u'\x03' # 0x03 -> CONTROL CHARACTER + u'\x04' # 0x04 -> CONTROL CHARACTER + u'\x05' # 0x05 -> CONTROL CHARACTER + u'\x06' # 0x06 -> CONTROL CHARACTER + u'\x07' # 0x07 -> CONTROL CHARACTER + u'\x08' # 0x08 -> CONTROL CHARACTER + u'\t' # 0x09 -> CONTROL CHARACTER + u'\n' # 0x0A -> CONTROL CHARACTER + u'\x0b' # 0x0B -> CONTROL CHARACTER + u'\x0c' # 0x0C -> CONTROL CHARACTER + u'\r' # 0x0D -> CONTROL CHARACTER + u'\x0e' # 0x0E -> CONTROL CHARACTER + u'\x0f' # 0x0F -> CONTROL CHARACTER + u'\x10' # 0x10 -> CONTROL CHARACTER + u'\x11' # 0x11 -> CONTROL CHARACTER + u'\x12' # 0x12 -> CONTROL CHARACTER + u'\x13' # 0x13 -> CONTROL CHARACTER + u'\x14' # 0x14 -> CONTROL CHARACTER + u'\x15' # 0x15 -> CONTROL CHARACTER + u'\x16' # 0x16 -> CONTROL CHARACTER + u'\x17' # 0x17 -> CONTROL CHARACTER + u'\x18' # 0x18 -> CONTROL CHARACTER + u'\x19' # 0x19 -> CONTROL CHARACTER + u'\x1a' # 0x1A -> CONTROL CHARACTER + u'\x1b' # 0x1B -> CONTROL CHARACTER + u'\x1c' # 0x1C -> CONTROL CHARACTER + u'\x1d' # 0x1D -> CONTROL CHARACTER + u'\x1e' # 0x1E -> CONTROL CHARACTER + u'\x1f' # 0x1F -> CONTROL CHARACTER + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> CONTROL CHARACTER + u'\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe3' # 0x8B -> LATIN SMALL LETTER A WITH TILDE + u'\xe5' # 0x8C -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE + u'\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE + u'\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE + u'\xec' # 0x93 -> LATIN SMALL LETTER I WITH GRAVE + u'\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE + u'\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE + u'\xf2' # 0x98 -> LATIN SMALL LETTER O WITH GRAVE + u'\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE + u'\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE + u'\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE + u'\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS + u'\u2020' # 0xA0 -> DAGGER + u'\xb0' # 0xA1 -> DEGREE SIGN + u'\xa2' # 0xA2 -> CENT SIGN + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa7' # 0xA4 -> SECTION SIGN + u'\u2022' # 0xA5 -> BULLET + u'\xb6' # 0xA6 -> PILCROW SIGN + u'\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S + u'\xae' # 0xA8 -> REGISTERED SIGN + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\u2122' # 0xAA -> TRADE MARK SIGN + u'\xb4' # 0xAB -> ACUTE ACCENT + u'\xa8' # 0xAC -> DIAERESIS + u'\u2260' # 0xAD -> NOT EQUAL TO + u'\u0102' # 0xAE -> LATIN CAPITAL LETTER A WITH BREVE + u'\u0218' # 0xAF -> LATIN CAPITAL LETTER S WITH COMMA BELOW # for Unicode 3.0 and later + u'\u221e' # 0xB0 -> INFINITY + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO + u'\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO + u'\xa5' # 0xB4 -> YEN SIGN + u'\xb5' # 0xB5 -> MICRO SIGN + u'\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL + u'\u2211' # 0xB7 -> N-ARY SUMMATION + u'\u220f' # 0xB8 -> N-ARY PRODUCT + u'\u03c0' # 0xB9 -> GREEK SMALL LETTER PI + u'\u222b' # 0xBA -> INTEGRAL + u'\xaa' # 0xBB -> FEMININE ORDINAL INDICATOR + u'\xba' # 0xBC -> MASCULINE ORDINAL INDICATOR + u'\u03a9' # 0xBD -> GREEK CAPITAL LETTER OMEGA + u'\u0103' # 0xBE -> LATIN SMALL LETTER A WITH BREVE + u'\u0219' # 0xBF -> LATIN SMALL LETTER S WITH COMMA BELOW # for Unicode 3.0 and later + u'\xbf' # 0xC0 -> INVERTED QUESTION MARK + u'\xa1' # 0xC1 -> INVERTED EXCLAMATION MARK + u'\xac' # 0xC2 -> NOT SIGN + u'\u221a' # 0xC3 -> SQUARE ROOT + u'\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK + u'\u2248' # 0xC5 -> ALMOST EQUAL TO + u'\u2206' # 0xC6 -> INCREMENT + u'\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS + u'\xa0' # 0xCA -> NO-BREAK SPACE + u'\xc0' # 0xCB -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc3' # 0xCC -> LATIN CAPITAL LETTER A WITH TILDE + u'\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE + u'\u0152' # 0xCE -> LATIN CAPITAL LIGATURE OE + u'\u0153' # 0xCF -> LATIN SMALL LIGATURE OE + u'\u2013' # 0xD0 -> EN DASH + u'\u2014' # 0xD1 -> EM DASH + u'\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK + u'\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK + u'\xf7' # 0xD6 -> DIVISION SIGN + u'\u25ca' # 0xD7 -> LOZENGE + u'\xff' # 0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS + u'\u0178' # 0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS + u'\u2044' # 0xDA -> FRACTION SLASH + u'\u20ac' # 0xDB -> EURO SIGN + u'\u2039' # 0xDC -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK + u'\u203a' # 0xDD -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + u'\u021a' # 0xDE -> LATIN CAPITAL LETTER T WITH COMMA BELOW # for Unicode 3.0 and later + u'\u021b' # 0xDF -> LATIN SMALL LETTER T WITH COMMA BELOW # for Unicode 3.0 and later + u'\u2021' # 0xE0 -> DOUBLE DAGGER + u'\xb7' # 0xE1 -> MIDDLE DOT + u'\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK + u'\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK + u'\u2030' # 0xE4 -> PER MILLE SIGN + u'\xc2' # 0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xca' # 0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xcb' # 0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xc8' # 0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\xcc' # 0xED -> LATIN CAPITAL LETTER I WITH GRAVE + u'\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\uf8ff' # 0xF0 -> Apple logo + u'\xd2' # 0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xd9' # 0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE + u'\u0131' # 0xF5 -> LATIN SMALL LETTER DOTLESS I + u'\u02c6' # 0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT + u'\u02dc' # 0xF7 -> SMALL TILDE + u'\xaf' # 0xF8 -> MACRON + u'\u02d8' # 0xF9 -> BREVE + u'\u02d9' # 0xFA -> DOT ABOVE + u'\u02da' # 0xFB -> RING ABOVE + u'\xb8' # 0xFC -> CEDILLA + u'\u02dd' # 0xFD -> DOUBLE ACUTE ACCENT + u'\u02db' # 0xFE -> OGONEK + u'\u02c7' # 0xFF -> CARON +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/mac_turkish.py b/thirdparty/python25/Lib/encodings/mac_turkish.py new file mode 100644 index 000000000..fafcc6446 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/mac_turkish.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec mac_turkish generated from 'MAPPINGS/VENDORS/APPLE/TURKISH.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mac-turkish', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> CONTROL CHARACTER + u'\x01' # 0x01 -> CONTROL CHARACTER + u'\x02' # 0x02 -> CONTROL CHARACTER + u'\x03' # 0x03 -> CONTROL CHARACTER + u'\x04' # 0x04 -> CONTROL CHARACTER + u'\x05' # 0x05 -> CONTROL CHARACTER + u'\x06' # 0x06 -> CONTROL CHARACTER + u'\x07' # 0x07 -> CONTROL CHARACTER + u'\x08' # 0x08 -> CONTROL CHARACTER + u'\t' # 0x09 -> CONTROL CHARACTER + u'\n' # 0x0A -> CONTROL CHARACTER + u'\x0b' # 0x0B -> CONTROL CHARACTER + u'\x0c' # 0x0C -> CONTROL CHARACTER + u'\r' # 0x0D -> CONTROL CHARACTER + u'\x0e' # 0x0E -> CONTROL CHARACTER + u'\x0f' # 0x0F -> CONTROL CHARACTER + u'\x10' # 0x10 -> CONTROL CHARACTER + u'\x11' # 0x11 -> CONTROL CHARACTER + u'\x12' # 0x12 -> CONTROL CHARACTER + u'\x13' # 0x13 -> CONTROL CHARACTER + u'\x14' # 0x14 -> CONTROL CHARACTER + u'\x15' # 0x15 -> CONTROL CHARACTER + u'\x16' # 0x16 -> CONTROL CHARACTER + u'\x17' # 0x17 -> CONTROL CHARACTER + u'\x18' # 0x18 -> CONTROL CHARACTER + u'\x19' # 0x19 -> CONTROL CHARACTER + u'\x1a' # 0x1A -> CONTROL CHARACTER + u'\x1b' # 0x1B -> CONTROL CHARACTER + u'\x1c' # 0x1C -> CONTROL CHARACTER + u'\x1d' # 0x1D -> CONTROL CHARACTER + u'\x1e' # 0x1E -> CONTROL CHARACTER + u'\x1f' # 0x1F -> CONTROL CHARACTER + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> CONTROL CHARACTER + u'\xc4' # 0x80 -> LATIN CAPITAL LETTER A WITH DIAERESIS + u'\xc5' # 0x81 -> LATIN CAPITAL LETTER A WITH RING ABOVE + u'\xc7' # 0x82 -> LATIN CAPITAL LETTER C WITH CEDILLA + u'\xc9' # 0x83 -> LATIN CAPITAL LETTER E WITH ACUTE + u'\xd1' # 0x84 -> LATIN CAPITAL LETTER N WITH TILDE + u'\xd6' # 0x85 -> LATIN CAPITAL LETTER O WITH DIAERESIS + u'\xdc' # 0x86 -> LATIN CAPITAL LETTER U WITH DIAERESIS + u'\xe1' # 0x87 -> LATIN SMALL LETTER A WITH ACUTE + u'\xe0' # 0x88 -> LATIN SMALL LETTER A WITH GRAVE + u'\xe2' # 0x89 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\xe4' # 0x8A -> LATIN SMALL LETTER A WITH DIAERESIS + u'\xe3' # 0x8B -> LATIN SMALL LETTER A WITH TILDE + u'\xe5' # 0x8C -> LATIN SMALL LETTER A WITH RING ABOVE + u'\xe7' # 0x8D -> LATIN SMALL LETTER C WITH CEDILLA + u'\xe9' # 0x8E -> LATIN SMALL LETTER E WITH ACUTE + u'\xe8' # 0x8F -> LATIN SMALL LETTER E WITH GRAVE + u'\xea' # 0x90 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x91 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xed' # 0x92 -> LATIN SMALL LETTER I WITH ACUTE + u'\xec' # 0x93 -> LATIN SMALL LETTER I WITH GRAVE + u'\xee' # 0x94 -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\xef' # 0x95 -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xf1' # 0x96 -> LATIN SMALL LETTER N WITH TILDE + u'\xf3' # 0x97 -> LATIN SMALL LETTER O WITH ACUTE + u'\xf2' # 0x98 -> LATIN SMALL LETTER O WITH GRAVE + u'\xf4' # 0x99 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xf6' # 0x9A -> LATIN SMALL LETTER O WITH DIAERESIS + u'\xf5' # 0x9B -> LATIN SMALL LETTER O WITH TILDE + u'\xfa' # 0x9C -> LATIN SMALL LETTER U WITH ACUTE + u'\xf9' # 0x9D -> LATIN SMALL LETTER U WITH GRAVE + u'\xfb' # 0x9E -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xfc' # 0x9F -> LATIN SMALL LETTER U WITH DIAERESIS + u'\u2020' # 0xA0 -> DAGGER + u'\xb0' # 0xA1 -> DEGREE SIGN + u'\xa2' # 0xA2 -> CENT SIGN + u'\xa3' # 0xA3 -> POUND SIGN + u'\xa7' # 0xA4 -> SECTION SIGN + u'\u2022' # 0xA5 -> BULLET + u'\xb6' # 0xA6 -> PILCROW SIGN + u'\xdf' # 0xA7 -> LATIN SMALL LETTER SHARP S + u'\xae' # 0xA8 -> REGISTERED SIGN + u'\xa9' # 0xA9 -> COPYRIGHT SIGN + u'\u2122' # 0xAA -> TRADE MARK SIGN + u'\xb4' # 0xAB -> ACUTE ACCENT + u'\xa8' # 0xAC -> DIAERESIS + u'\u2260' # 0xAD -> NOT EQUAL TO + u'\xc6' # 0xAE -> LATIN CAPITAL LETTER AE + u'\xd8' # 0xAF -> LATIN CAPITAL LETTER O WITH STROKE + u'\u221e' # 0xB0 -> INFINITY + u'\xb1' # 0xB1 -> PLUS-MINUS SIGN + u'\u2264' # 0xB2 -> LESS-THAN OR EQUAL TO + u'\u2265' # 0xB3 -> GREATER-THAN OR EQUAL TO + u'\xa5' # 0xB4 -> YEN SIGN + u'\xb5' # 0xB5 -> MICRO SIGN + u'\u2202' # 0xB6 -> PARTIAL DIFFERENTIAL + u'\u2211' # 0xB7 -> N-ARY SUMMATION + u'\u220f' # 0xB8 -> N-ARY PRODUCT + u'\u03c0' # 0xB9 -> GREEK SMALL LETTER PI + u'\u222b' # 0xBA -> INTEGRAL + u'\xaa' # 0xBB -> FEMININE ORDINAL INDICATOR + u'\xba' # 0xBC -> MASCULINE ORDINAL INDICATOR + u'\u03a9' # 0xBD -> GREEK CAPITAL LETTER OMEGA + u'\xe6' # 0xBE -> LATIN SMALL LETTER AE + u'\xf8' # 0xBF -> LATIN SMALL LETTER O WITH STROKE + u'\xbf' # 0xC0 -> INVERTED QUESTION MARK + u'\xa1' # 0xC1 -> INVERTED EXCLAMATION MARK + u'\xac' # 0xC2 -> NOT SIGN + u'\u221a' # 0xC3 -> SQUARE ROOT + u'\u0192' # 0xC4 -> LATIN SMALL LETTER F WITH HOOK + u'\u2248' # 0xC5 -> ALMOST EQUAL TO + u'\u2206' # 0xC6 -> INCREMENT + u'\xab' # 0xC7 -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0xC8 -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2026' # 0xC9 -> HORIZONTAL ELLIPSIS + u'\xa0' # 0xCA -> NO-BREAK SPACE + u'\xc0' # 0xCB -> LATIN CAPITAL LETTER A WITH GRAVE + u'\xc3' # 0xCC -> LATIN CAPITAL LETTER A WITH TILDE + u'\xd5' # 0xCD -> LATIN CAPITAL LETTER O WITH TILDE + u'\u0152' # 0xCE -> LATIN CAPITAL LIGATURE OE + u'\u0153' # 0xCF -> LATIN SMALL LIGATURE OE + u'\u2013' # 0xD0 -> EN DASH + u'\u2014' # 0xD1 -> EM DASH + u'\u201c' # 0xD2 -> LEFT DOUBLE QUOTATION MARK + u'\u201d' # 0xD3 -> RIGHT DOUBLE QUOTATION MARK + u'\u2018' # 0xD4 -> LEFT SINGLE QUOTATION MARK + u'\u2019' # 0xD5 -> RIGHT SINGLE QUOTATION MARK + u'\xf7' # 0xD6 -> DIVISION SIGN + u'\u25ca' # 0xD7 -> LOZENGE + u'\xff' # 0xD8 -> LATIN SMALL LETTER Y WITH DIAERESIS + u'\u0178' # 0xD9 -> LATIN CAPITAL LETTER Y WITH DIAERESIS + u'\u011e' # 0xDA -> LATIN CAPITAL LETTER G WITH BREVE + u'\u011f' # 0xDB -> LATIN SMALL LETTER G WITH BREVE + u'\u0130' # 0xDC -> LATIN CAPITAL LETTER I WITH DOT ABOVE + u'\u0131' # 0xDD -> LATIN SMALL LETTER DOTLESS I + u'\u015e' # 0xDE -> LATIN CAPITAL LETTER S WITH CEDILLA + u'\u015f' # 0xDF -> LATIN SMALL LETTER S WITH CEDILLA + u'\u2021' # 0xE0 -> DOUBLE DAGGER + u'\xb7' # 0xE1 -> MIDDLE DOT + u'\u201a' # 0xE2 -> SINGLE LOW-9 QUOTATION MARK + u'\u201e' # 0xE3 -> DOUBLE LOW-9 QUOTATION MARK + u'\u2030' # 0xE4 -> PER MILLE SIGN + u'\xc2' # 0xE5 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX + u'\xca' # 0xE6 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX + u'\xc1' # 0xE7 -> LATIN CAPITAL LETTER A WITH ACUTE + u'\xcb' # 0xE8 -> LATIN CAPITAL LETTER E WITH DIAERESIS + u'\xc8' # 0xE9 -> LATIN CAPITAL LETTER E WITH GRAVE + u'\xcd' # 0xEA -> LATIN CAPITAL LETTER I WITH ACUTE + u'\xce' # 0xEB -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX + u'\xcf' # 0xEC -> LATIN CAPITAL LETTER I WITH DIAERESIS + u'\xcc' # 0xED -> LATIN CAPITAL LETTER I WITH GRAVE + u'\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE + u'\xd4' # 0xEF -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX + u'\uf8ff' # 0xF0 -> Apple logo + u'\xd2' # 0xF1 -> LATIN CAPITAL LETTER O WITH GRAVE + u'\xda' # 0xF2 -> LATIN CAPITAL LETTER U WITH ACUTE + u'\xdb' # 0xF3 -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX + u'\xd9' # 0xF4 -> LATIN CAPITAL LETTER U WITH GRAVE + u'\uf8a0' # 0xF5 -> undefined1 + u'\u02c6' # 0xF6 -> MODIFIER LETTER CIRCUMFLEX ACCENT + u'\u02dc' # 0xF7 -> SMALL TILDE + u'\xaf' # 0xF8 -> MACRON + u'\u02d8' # 0xF9 -> BREVE + u'\u02d9' # 0xFA -> DOT ABOVE + u'\u02da' # 0xFB -> RING ABOVE + u'\xb8' # 0xFC -> CEDILLA + u'\u02dd' # 0xFD -> DOUBLE ACUTE ACCENT + u'\u02db' # 0xFE -> OGONEK + u'\u02c7' # 0xFF -> CARON +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/mbcs.py b/thirdparty/python25/Lib/encodings/mbcs.py new file mode 100644 index 000000000..d6b17b5e9 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/mbcs.py @@ -0,0 +1,47 @@ +""" Python 'mbcs' Codec for Windows + + +Cloned by Mark Hammond (mhammond@skippinet.com.au) from ascii.py, +which was written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +# Import them explicitly to cause an ImportError +# on non-Windows systems +from codecs import mbcs_encode, mbcs_decode +# for IncrementalDecoder, IncrementalEncoder, ... +import codecs + +### Codec APIs + +encode = mbcs_encode + +def decode(input, errors='strict'): + return mbcs_decode(input, errors, True) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return mbcs_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + _buffer_decode = mbcs_decode + +class StreamWriter(codecs.StreamWriter): + encode = mbcs_encode + +class StreamReader(codecs.StreamReader): + decode = mbcs_decode + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='mbcs', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/palmos.py b/thirdparty/python25/Lib/encodings/palmos.py new file mode 100644 index 000000000..4fc4b72a5 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/palmos.py @@ -0,0 +1,83 @@ +""" Python Character Mapping Codec for PalmOS 3.5. + +Written by Sjoerd Mullender (sjoerd@acm.org); based on iso8859_15.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_map) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_map)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='palmos', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) + +# The PalmOS character set is mostly iso-8859-1 with some differences. +decoding_map.update({ + 0x0080: 0x20ac, # EURO SIGN + 0x0082: 0x201a, # SINGLE LOW-9 QUOTATION MARK + 0x0083: 0x0192, # LATIN SMALL LETTER F WITH HOOK + 0x0084: 0x201e, # DOUBLE LOW-9 QUOTATION MARK + 0x0085: 0x2026, # HORIZONTAL ELLIPSIS + 0x0086: 0x2020, # DAGGER + 0x0087: 0x2021, # DOUBLE DAGGER + 0x0088: 0x02c6, # MODIFIER LETTER CIRCUMFLEX ACCENT + 0x0089: 0x2030, # PER MILLE SIGN + 0x008a: 0x0160, # LATIN CAPITAL LETTER S WITH CARON + 0x008b: 0x2039, # SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0x008c: 0x0152, # LATIN CAPITAL LIGATURE OE + 0x008d: 0x2666, # BLACK DIAMOND SUIT + 0x008e: 0x2663, # BLACK CLUB SUIT + 0x008f: 0x2665, # BLACK HEART SUIT + 0x0090: 0x2660, # BLACK SPADE SUIT + 0x0091: 0x2018, # LEFT SINGLE QUOTATION MARK + 0x0092: 0x2019, # RIGHT SINGLE QUOTATION MARK + 0x0093: 0x201c, # LEFT DOUBLE QUOTATION MARK + 0x0094: 0x201d, # RIGHT DOUBLE QUOTATION MARK + 0x0095: 0x2022, # BULLET + 0x0096: 0x2013, # EN DASH + 0x0097: 0x2014, # EM DASH + 0x0098: 0x02dc, # SMALL TILDE + 0x0099: 0x2122, # TRADE MARK SIGN + 0x009a: 0x0161, # LATIN SMALL LETTER S WITH CARON + 0x009c: 0x0153, # LATIN SMALL LIGATURE OE + 0x009f: 0x0178, # LATIN CAPITAL LETTER Y WITH DIAERESIS +}) + +### Encoding Map + +encoding_map = codecs.make_encoding_map(decoding_map) diff --git a/thirdparty/python25/Lib/encodings/ptcp154.py b/thirdparty/python25/Lib/encodings/ptcp154.py new file mode 100644 index 000000000..f197da59c --- /dev/null +++ b/thirdparty/python25/Lib/encodings/ptcp154.py @@ -0,0 +1,175 @@ +""" Python Character Mapping Codec generated from 'PTCP154.txt' with gencodec.py. + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. +(c) Copyright 2000 Guido van Rossum. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_map) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_map)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='ptcp154', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0080: 0x0496, # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER + 0x0081: 0x0492, # CYRILLIC CAPITAL LETTER GHE WITH STROKE + 0x0082: 0x04ee, # CYRILLIC CAPITAL LETTER U WITH MACRON + 0x0083: 0x0493, # CYRILLIC SMALL LETTER GHE WITH STROKE + 0x0084: 0x201e, # DOUBLE LOW-9 QUOTATION MARK + 0x0085: 0x2026, # HORIZONTAL ELLIPSIS + 0x0086: 0x04b6, # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER + 0x0087: 0x04ae, # CYRILLIC CAPITAL LETTER STRAIGHT U + 0x0088: 0x04b2, # CYRILLIC CAPITAL LETTER HA WITH DESCENDER + 0x0089: 0x04af, # CYRILLIC SMALL LETTER STRAIGHT U + 0x008a: 0x04a0, # CYRILLIC CAPITAL LETTER BASHKIR KA + 0x008b: 0x04e2, # CYRILLIC CAPITAL LETTER I WITH MACRON + 0x008c: 0x04a2, # CYRILLIC CAPITAL LETTER EN WITH DESCENDER + 0x008d: 0x049a, # CYRILLIC CAPITAL LETTER KA WITH DESCENDER + 0x008e: 0x04ba, # CYRILLIC CAPITAL LETTER SHHA + 0x008f: 0x04b8, # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE + 0x0090: 0x0497, # CYRILLIC SMALL LETTER ZHE WITH DESCENDER + 0x0091: 0x2018, # LEFT SINGLE QUOTATION MARK + 0x0092: 0x2019, # RIGHT SINGLE QUOTATION MARK + 0x0093: 0x201c, # LEFT DOUBLE QUOTATION MARK + 0x0094: 0x201d, # RIGHT DOUBLE QUOTATION MARK + 0x0095: 0x2022, # BULLET + 0x0096: 0x2013, # EN DASH + 0x0097: 0x2014, # EM DASH + 0x0098: 0x04b3, # CYRILLIC SMALL LETTER HA WITH DESCENDER + 0x0099: 0x04b7, # CYRILLIC SMALL LETTER CHE WITH DESCENDER + 0x009a: 0x04a1, # CYRILLIC SMALL LETTER BASHKIR KA + 0x009b: 0x04e3, # CYRILLIC SMALL LETTER I WITH MACRON + 0x009c: 0x04a3, # CYRILLIC SMALL LETTER EN WITH DESCENDER + 0x009d: 0x049b, # CYRILLIC SMALL LETTER KA WITH DESCENDER + 0x009e: 0x04bb, # CYRILLIC SMALL LETTER SHHA + 0x009f: 0x04b9, # CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE + 0x00a1: 0x040e, # CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) + 0x00a2: 0x045e, # CYRILLIC SMALL LETTER SHORT U (Byelorussian) + 0x00a3: 0x0408, # CYRILLIC CAPITAL LETTER JE + 0x00a4: 0x04e8, # CYRILLIC CAPITAL LETTER BARRED O + 0x00a5: 0x0498, # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER + 0x00a6: 0x04b0, # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE + 0x00a8: 0x0401, # CYRILLIC CAPITAL LETTER IO + 0x00aa: 0x04d8, # CYRILLIC CAPITAL LETTER SCHWA + 0x00ad: 0x04ef, # CYRILLIC SMALL LETTER U WITH MACRON + 0x00af: 0x049c, # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE + 0x00b1: 0x04b1, # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE + 0x00b2: 0x0406, # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I + 0x00b3: 0x0456, # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I + 0x00b4: 0x0499, # CYRILLIC SMALL LETTER ZE WITH DESCENDER + 0x00b5: 0x04e9, # CYRILLIC SMALL LETTER BARRED O + 0x00b8: 0x0451, # CYRILLIC SMALL LETTER IO + 0x00b9: 0x2116, # NUMERO SIGN + 0x00ba: 0x04d9, # CYRILLIC SMALL LETTER SCHWA + 0x00bc: 0x0458, # CYRILLIC SMALL LETTER JE + 0x00bd: 0x04aa, # CYRILLIC CAPITAL LETTER ES WITH DESCENDER + 0x00be: 0x04ab, # CYRILLIC SMALL LETTER ES WITH DESCENDER + 0x00bf: 0x049d, # CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE + 0x00c0: 0x0410, # CYRILLIC CAPITAL LETTER A + 0x00c1: 0x0411, # CYRILLIC CAPITAL LETTER BE + 0x00c2: 0x0412, # CYRILLIC CAPITAL LETTER VE + 0x00c3: 0x0413, # CYRILLIC CAPITAL LETTER GHE + 0x00c4: 0x0414, # CYRILLIC CAPITAL LETTER DE + 0x00c5: 0x0415, # CYRILLIC CAPITAL LETTER IE + 0x00c6: 0x0416, # CYRILLIC CAPITAL LETTER ZHE + 0x00c7: 0x0417, # CYRILLIC CAPITAL LETTER ZE + 0x00c8: 0x0418, # CYRILLIC CAPITAL LETTER I + 0x00c9: 0x0419, # CYRILLIC CAPITAL LETTER SHORT I + 0x00ca: 0x041a, # CYRILLIC CAPITAL LETTER KA + 0x00cb: 0x041b, # CYRILLIC CAPITAL LETTER EL + 0x00cc: 0x041c, # CYRILLIC CAPITAL LETTER EM + 0x00cd: 0x041d, # CYRILLIC CAPITAL LETTER EN + 0x00ce: 0x041e, # CYRILLIC CAPITAL LETTER O + 0x00cf: 0x041f, # CYRILLIC CAPITAL LETTER PE + 0x00d0: 0x0420, # CYRILLIC CAPITAL LETTER ER + 0x00d1: 0x0421, # CYRILLIC CAPITAL LETTER ES + 0x00d2: 0x0422, # CYRILLIC CAPITAL LETTER TE + 0x00d3: 0x0423, # CYRILLIC CAPITAL LETTER U + 0x00d4: 0x0424, # CYRILLIC CAPITAL LETTER EF + 0x00d5: 0x0425, # CYRILLIC CAPITAL LETTER HA + 0x00d6: 0x0426, # CYRILLIC CAPITAL LETTER TSE + 0x00d7: 0x0427, # CYRILLIC CAPITAL LETTER CHE + 0x00d8: 0x0428, # CYRILLIC CAPITAL LETTER SHA + 0x00d9: 0x0429, # CYRILLIC CAPITAL LETTER SHCHA + 0x00da: 0x042a, # CYRILLIC CAPITAL LETTER HARD SIGN + 0x00db: 0x042b, # CYRILLIC CAPITAL LETTER YERU + 0x00dc: 0x042c, # CYRILLIC CAPITAL LETTER SOFT SIGN + 0x00dd: 0x042d, # CYRILLIC CAPITAL LETTER E + 0x00de: 0x042e, # CYRILLIC CAPITAL LETTER YU + 0x00df: 0x042f, # CYRILLIC CAPITAL LETTER YA + 0x00e0: 0x0430, # CYRILLIC SMALL LETTER A + 0x00e1: 0x0431, # CYRILLIC SMALL LETTER BE + 0x00e2: 0x0432, # CYRILLIC SMALL LETTER VE + 0x00e3: 0x0433, # CYRILLIC SMALL LETTER GHE + 0x00e4: 0x0434, # CYRILLIC SMALL LETTER DE + 0x00e5: 0x0435, # CYRILLIC SMALL LETTER IE + 0x00e6: 0x0436, # CYRILLIC SMALL LETTER ZHE + 0x00e7: 0x0437, # CYRILLIC SMALL LETTER ZE + 0x00e8: 0x0438, # CYRILLIC SMALL LETTER I + 0x00e9: 0x0439, # CYRILLIC SMALL LETTER SHORT I + 0x00ea: 0x043a, # CYRILLIC SMALL LETTER KA + 0x00eb: 0x043b, # CYRILLIC SMALL LETTER EL + 0x00ec: 0x043c, # CYRILLIC SMALL LETTER EM + 0x00ed: 0x043d, # CYRILLIC SMALL LETTER EN + 0x00ee: 0x043e, # CYRILLIC SMALL LETTER O + 0x00ef: 0x043f, # CYRILLIC SMALL LETTER PE + 0x00f0: 0x0440, # CYRILLIC SMALL LETTER ER + 0x00f1: 0x0441, # CYRILLIC SMALL LETTER ES + 0x00f2: 0x0442, # CYRILLIC SMALL LETTER TE + 0x00f3: 0x0443, # CYRILLIC SMALL LETTER U + 0x00f4: 0x0444, # CYRILLIC SMALL LETTER EF + 0x00f5: 0x0445, # CYRILLIC SMALL LETTER HA + 0x00f6: 0x0446, # CYRILLIC SMALL LETTER TSE + 0x00f7: 0x0447, # CYRILLIC SMALL LETTER CHE + 0x00f8: 0x0448, # CYRILLIC SMALL LETTER SHA + 0x00f9: 0x0449, # CYRILLIC SMALL LETTER SHCHA + 0x00fa: 0x044a, # CYRILLIC SMALL LETTER HARD SIGN + 0x00fb: 0x044b, # CYRILLIC SMALL LETTER YERU + 0x00fc: 0x044c, # CYRILLIC SMALL LETTER SOFT SIGN + 0x00fd: 0x044d, # CYRILLIC SMALL LETTER E + 0x00fe: 0x044e, # CYRILLIC SMALL LETTER YU + 0x00ff: 0x044f, # CYRILLIC SMALL LETTER YA +}) + +### Encoding Map + +encoding_map = codecs.make_encoding_map(decoding_map) diff --git a/thirdparty/python25/Lib/encodings/punycode.py b/thirdparty/python25/Lib/encodings/punycode.py new file mode 100644 index 000000000..ad3cc554b --- /dev/null +++ b/thirdparty/python25/Lib/encodings/punycode.py @@ -0,0 +1,238 @@ +# -*- coding: iso-8859-1 -*- +""" Codec for the Punicode encoding, as specified in RFC 3492 + +Written by Martin v. Löwis. +""" + +import codecs + +##################### Encoding ##################################### + +def segregate(str): + """3.1 Basic code point segregation""" + base = [] + extended = {} + for c in str: + if ord(c) < 128: + base.append(c) + else: + extended[c] = 1 + extended = extended.keys() + extended.sort() + return "".join(base).encode("ascii"),extended + +def selective_len(str, max): + """Return the length of str, considering only characters below max.""" + res = 0 + for c in str: + if ord(c) < max: + res += 1 + return res + +def selective_find(str, char, index, pos): + """Return a pair (index, pos), indicating the next occurrence of + char in str. index is the position of the character considering + only ordinals up to and including char, and pos is the position in + the full string. index/pos is the starting position in the full + string.""" + + l = len(str) + while 1: + pos += 1 + if pos == l: + return (-1, -1) + c = str[pos] + if c == char: + return index+1, pos + elif c < char: + index += 1 + +def insertion_unsort(str, extended): + """3.2 Insertion unsort coding""" + oldchar = 0x80 + result = [] + oldindex = -1 + for c in extended: + index = pos = -1 + char = ord(c) + curlen = selective_len(str, char) + delta = (curlen+1) * (char - oldchar) + while 1: + index,pos = selective_find(str,c,index,pos) + if index == -1: + break + delta += index - oldindex + result.append(delta-1) + oldindex = index + delta = 0 + oldchar = char + + return result + +def T(j, bias): + # Punycode parameters: tmin = 1, tmax = 26, base = 36 + res = 36 * (j + 1) - bias + if res < 1: return 1 + if res > 26: return 26 + return res + +digits = "abcdefghijklmnopqrstuvwxyz0123456789" +def generate_generalized_integer(N, bias): + """3.3 Generalized variable-length integers""" + result = [] + j = 0 + while 1: + t = T(j, bias) + if N < t: + result.append(digits[N]) + return result + result.append(digits[t + ((N - t) % (36 - t))]) + N = (N - t) // (36 - t) + j += 1 + +def adapt(delta, first, numchars): + if first: + delta //= 700 + else: + delta //= 2 + delta += delta // numchars + # ((base - tmin) * tmax) // 2 == 455 + divisions = 0 + while delta > 455: + delta = delta // 35 # base - tmin + divisions += 36 + bias = divisions + (36 * delta // (delta + 38)) + return bias + + +def generate_integers(baselen, deltas): + """3.4 Bias adaptation""" + # Punycode parameters: initial bias = 72, damp = 700, skew = 38 + result = [] + bias = 72 + for points, delta in enumerate(deltas): + s = generate_generalized_integer(delta, bias) + result.extend(s) + bias = adapt(delta, points==0, baselen+points+1) + return "".join(result) + +def punycode_encode(text): + base, extended = segregate(text) + base = base.encode("ascii") + deltas = insertion_unsort(text, extended) + extended = generate_integers(len(base), deltas) + if base: + return base + "-" + extended + return extended + +##################### Decoding ##################################### + +def decode_generalized_number(extended, extpos, bias, errors): + """3.3 Generalized variable-length integers""" + result = 0 + w = 1 + j = 0 + while 1: + try: + char = ord(extended[extpos]) + except IndexError: + if errors == "strict": + raise UnicodeError, "incomplete punicode string" + return extpos + 1, None + extpos += 1 + if 0x41 <= char <= 0x5A: # A-Z + digit = char - 0x41 + elif 0x30 <= char <= 0x39: + digit = char - 22 # 0x30-26 + elif errors == "strict": + raise UnicodeError("Invalid extended code point '%s'" + % extended[extpos]) + else: + return extpos, None + t = T(j, bias) + result += digit * w + if digit < t: + return extpos, result + w = w * (36 - t) + j += 1 + + +def insertion_sort(base, extended, errors): + """3.2 Insertion unsort coding""" + char = 0x80 + pos = -1 + bias = 72 + extpos = 0 + while extpos < len(extended): + newpos, delta = decode_generalized_number(extended, extpos, + bias, errors) + if delta is None: + # There was an error in decoding. We can't continue because + # synchronization is lost. + return base + pos += delta+1 + char += pos // (len(base) + 1) + if char > 0x10FFFF: + if errors == "strict": + raise UnicodeError, ("Invalid character U+%x" % char) + char = ord('?') + pos = pos % (len(base) + 1) + base = base[:pos] + unichr(char) + base[pos:] + bias = adapt(delta, (extpos == 0), len(base)) + extpos = newpos + return base + +def punycode_decode(text, errors): + pos = text.rfind("-") + if pos == -1: + base = "" + extended = text + else: + base = text[:pos] + extended = text[pos+1:] + base = unicode(base, "ascii", errors) + extended = extended.upper() + return insertion_sort(base, extended, errors) + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + res = punycode_encode(input) + return res, len(input) + + def decode(self,input,errors='strict'): + if errors not in ('strict', 'replace', 'ignore'): + raise UnicodeError, "Unsupported error handling "+errors + res = punycode_decode(input, errors) + return res, len(input) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return punycode_encode(input) + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + if self.errors not in ('strict', 'replace', 'ignore'): + raise UnicodeError, "Unsupported error handling "+self.errors + return punycode_decode(input, self.errors) + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='punycode', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/thirdparty/python25/Lib/encodings/quopri_codec.py b/thirdparty/python25/Lib/encodings/quopri_codec.py new file mode 100644 index 000000000..c7682539b --- /dev/null +++ b/thirdparty/python25/Lib/encodings/quopri_codec.py @@ -0,0 +1,74 @@ +"""Codec for quoted-printable encoding. + +Like base64 and rot13, this returns Python strings, not Unicode. +""" + +import codecs, quopri +try: + from cStringIO import StringIO +except ImportError: + from StringIO import StringIO + +def quopri_encode(input, errors='strict'): + """Encode the input, returning a tuple (output object, length consumed). + + errors defines the error handling to apply. It defaults to + 'strict' handling which is the only currently supported + error handling for this codec. + + """ + assert errors == 'strict' + f = StringIO(input) + g = StringIO() + quopri.encode(f, g, 1) + output = g.getvalue() + return (output, len(input)) + +def quopri_decode(input, errors='strict'): + """Decode the input, returning a tuple (output object, length consumed). + + errors defines the error handling to apply. It defaults to + 'strict' handling which is the only currently supported + error handling for this codec. + + """ + assert errors == 'strict' + f = StringIO(input) + g = StringIO() + quopri.decode(f, g) + output = g.getvalue() + return (output, len(input)) + +class Codec(codecs.Codec): + + def encode(self, input,errors='strict'): + return quopri_encode(input,errors) + def decode(self, input,errors='strict'): + return quopri_decode(input,errors) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return quopri_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return quopri_decode(input, self.errors)[0] + +class StreamWriter(Codec, codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +# encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='quopri', + encode=quopri_encode, + decode=quopri_decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/thirdparty/python25/Lib/encodings/raw_unicode_escape.py b/thirdparty/python25/Lib/encodings/raw_unicode_escape.py new file mode 100644 index 000000000..cb0abfbb5 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/raw_unicode_escape.py @@ -0,0 +1,45 @@ +""" Python 'raw-unicode-escape' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + # Note: Binding these as C functions will result in the class not + # converting them to methods. This is intended. + encode = codecs.raw_unicode_escape_encode + decode = codecs.raw_unicode_escape_decode + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.raw_unicode_escape_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.raw_unicode_escape_decode(input, self.errors)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='raw-unicode-escape', + encode=Codec.encode, + decode=Codec.decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/thirdparty/python25/Lib/encodings/rot_13.py b/thirdparty/python25/Lib/encodings/rot_13.py new file mode 100644 index 000000000..cb25ecb66 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/rot_13.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python +""" Python Character Mapping Codec for ROT13. + + See http://ucsub.colorado.edu/~kominek/rot13/ for details. + + Written by Marc-Andre Lemburg (mal@lemburg.com). + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_map) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_map) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_map)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_map)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='rot-13', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) + +### Decoding Map + +decoding_map = codecs.make_identity_dict(range(256)) +decoding_map.update({ + 0x0041: 0x004e, + 0x0042: 0x004f, + 0x0043: 0x0050, + 0x0044: 0x0051, + 0x0045: 0x0052, + 0x0046: 0x0053, + 0x0047: 0x0054, + 0x0048: 0x0055, + 0x0049: 0x0056, + 0x004a: 0x0057, + 0x004b: 0x0058, + 0x004c: 0x0059, + 0x004d: 0x005a, + 0x004e: 0x0041, + 0x004f: 0x0042, + 0x0050: 0x0043, + 0x0051: 0x0044, + 0x0052: 0x0045, + 0x0053: 0x0046, + 0x0054: 0x0047, + 0x0055: 0x0048, + 0x0056: 0x0049, + 0x0057: 0x004a, + 0x0058: 0x004b, + 0x0059: 0x004c, + 0x005a: 0x004d, + 0x0061: 0x006e, + 0x0062: 0x006f, + 0x0063: 0x0070, + 0x0064: 0x0071, + 0x0065: 0x0072, + 0x0066: 0x0073, + 0x0067: 0x0074, + 0x0068: 0x0075, + 0x0069: 0x0076, + 0x006a: 0x0077, + 0x006b: 0x0078, + 0x006c: 0x0079, + 0x006d: 0x007a, + 0x006e: 0x0061, + 0x006f: 0x0062, + 0x0070: 0x0063, + 0x0071: 0x0064, + 0x0072: 0x0065, + 0x0073: 0x0066, + 0x0074: 0x0067, + 0x0075: 0x0068, + 0x0076: 0x0069, + 0x0077: 0x006a, + 0x0078: 0x006b, + 0x0079: 0x006c, + 0x007a: 0x006d, +}) + +### Encoding Map + +encoding_map = codecs.make_encoding_map(decoding_map) + +### Filter API + +def rot13(infile, outfile): + outfile.write(infile.read().encode('rot-13')) + +if __name__ == '__main__': + import sys + rot13(sys.stdin, sys.stdout) diff --git a/thirdparty/python25/Lib/encodings/shift_jis.py b/thirdparty/python25/Lib/encodings/shift_jis.py new file mode 100644 index 000000000..3db936413 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/shift_jis.py @@ -0,0 +1,39 @@ +# +# shift_jis.py: Python Unicode Codec for SHIFT_JIS +# +# Written by Hye-Shik Chang +# + +import _codecs_jp, codecs +import _multibytecodec as mbc + +codec = _codecs_jp.getcodec('shift_jis') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='shift_jis', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/shift_jis_2004.py b/thirdparty/python25/Lib/encodings/shift_jis_2004.py new file mode 100644 index 000000000..3e48bb7f9 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/shift_jis_2004.py @@ -0,0 +1,39 @@ +# +# shift_jis_2004.py: Python Unicode Codec for SHIFT_JIS_2004 +# +# Written by Hye-Shik Chang +# + +import _codecs_jp, codecs +import _multibytecodec as mbc + +codec = _codecs_jp.getcodec('shift_jis_2004') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='shift_jis_2004', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/shift_jisx0213.py b/thirdparty/python25/Lib/encodings/shift_jisx0213.py new file mode 100644 index 000000000..4092e41dc --- /dev/null +++ b/thirdparty/python25/Lib/encodings/shift_jisx0213.py @@ -0,0 +1,39 @@ +# +# shift_jisx0213.py: Python Unicode Codec for SHIFT_JISX0213 +# +# Written by Hye-Shik Chang +# + +import _codecs_jp, codecs +import _multibytecodec as mbc + +codec = _codecs_jp.getcodec('shift_jisx0213') + +class Codec(codecs.Codec): + encode = codec.encode + decode = codec.decode + +class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, + codecs.IncrementalEncoder): + codec = codec + +class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, + codecs.IncrementalDecoder): + codec = codec + +class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): + codec = codec + +class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): + codec = codec + +def getregentry(): + return codecs.CodecInfo( + name='shift_jisx0213', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/string_escape.py b/thirdparty/python25/Lib/encodings/string_escape.py new file mode 100644 index 000000000..cb1179422 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/string_escape.py @@ -0,0 +1,38 @@ +# -*- coding: iso-8859-1 -*- +""" Python 'escape' Codec + + +Written by Martin v. Löwis (martin@v.loewis.de). + +""" +import codecs + +class Codec(codecs.Codec): + + encode = codecs.escape_encode + decode = codecs.escape_decode + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.escape_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.escape_decode(input, self.errors)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +def getregentry(): + return codecs.CodecInfo( + name='string-escape', + encode=Codec.encode, + decode=Codec.decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/thirdparty/python25/Lib/encodings/tis_620.py b/thirdparty/python25/Lib/encodings/tis_620.py new file mode 100644 index 000000000..776525e5b --- /dev/null +++ b/thirdparty/python25/Lib/encodings/tis_620.py @@ -0,0 +1,307 @@ +""" Python Character Mapping Codec tis_620 generated from 'python-mappings/TIS-620.TXT' with gencodec.py. + +"""#" + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='tis-620', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> NULL + u'\x01' # 0x01 -> START OF HEADING + u'\x02' # 0x02 -> START OF TEXT + u'\x03' # 0x03 -> END OF TEXT + u'\x04' # 0x04 -> END OF TRANSMISSION + u'\x05' # 0x05 -> ENQUIRY + u'\x06' # 0x06 -> ACKNOWLEDGE + u'\x07' # 0x07 -> BELL + u'\x08' # 0x08 -> BACKSPACE + u'\t' # 0x09 -> HORIZONTAL TABULATION + u'\n' # 0x0A -> LINE FEED + u'\x0b' # 0x0B -> VERTICAL TABULATION + u'\x0c' # 0x0C -> FORM FEED + u'\r' # 0x0D -> CARRIAGE RETURN + u'\x0e' # 0x0E -> SHIFT OUT + u'\x0f' # 0x0F -> SHIFT IN + u'\x10' # 0x10 -> DATA LINK ESCAPE + u'\x11' # 0x11 -> DEVICE CONTROL ONE + u'\x12' # 0x12 -> DEVICE CONTROL TWO + u'\x13' # 0x13 -> DEVICE CONTROL THREE + u'\x14' # 0x14 -> DEVICE CONTROL FOUR + u'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE + u'\x16' # 0x16 -> SYNCHRONOUS IDLE + u'\x17' # 0x17 -> END OF TRANSMISSION BLOCK + u'\x18' # 0x18 -> CANCEL + u'\x19' # 0x19 -> END OF MEDIUM + u'\x1a' # 0x1A -> SUBSTITUTE + u'\x1b' # 0x1B -> ESCAPE + u'\x1c' # 0x1C -> FILE SEPARATOR + u'\x1d' # 0x1D -> GROUP SEPARATOR + u'\x1e' # 0x1E -> RECORD SEPARATOR + u'\x1f' # 0x1F -> UNIT SEPARATOR + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> DELETE + u'\x80' # 0x80 -> + u'\x81' # 0x81 -> + u'\x82' # 0x82 -> + u'\x83' # 0x83 -> + u'\x84' # 0x84 -> + u'\x85' # 0x85 -> + u'\x86' # 0x86 -> + u'\x87' # 0x87 -> + u'\x88' # 0x88 -> + u'\x89' # 0x89 -> + u'\x8a' # 0x8A -> + u'\x8b' # 0x8B -> + u'\x8c' # 0x8C -> + u'\x8d' # 0x8D -> + u'\x8e' # 0x8E -> + u'\x8f' # 0x8F -> + u'\x90' # 0x90 -> + u'\x91' # 0x91 -> + u'\x92' # 0x92 -> + u'\x93' # 0x93 -> + u'\x94' # 0x94 -> + u'\x95' # 0x95 -> + u'\x96' # 0x96 -> + u'\x97' # 0x97 -> + u'\x98' # 0x98 -> + u'\x99' # 0x99 -> + u'\x9a' # 0x9A -> + u'\x9b' # 0x9B -> + u'\x9c' # 0x9C -> + u'\x9d' # 0x9D -> + u'\x9e' # 0x9E -> + u'\x9f' # 0x9F -> + u'\ufffe' + u'\u0e01' # 0xA1 -> THAI CHARACTER KO KAI + u'\u0e02' # 0xA2 -> THAI CHARACTER KHO KHAI + u'\u0e03' # 0xA3 -> THAI CHARACTER KHO KHUAT + u'\u0e04' # 0xA4 -> THAI CHARACTER KHO KHWAI + u'\u0e05' # 0xA5 -> THAI CHARACTER KHO KHON + u'\u0e06' # 0xA6 -> THAI CHARACTER KHO RAKHANG + u'\u0e07' # 0xA7 -> THAI CHARACTER NGO NGU + u'\u0e08' # 0xA8 -> THAI CHARACTER CHO CHAN + u'\u0e09' # 0xA9 -> THAI CHARACTER CHO CHING + u'\u0e0a' # 0xAA -> THAI CHARACTER CHO CHANG + u'\u0e0b' # 0xAB -> THAI CHARACTER SO SO + u'\u0e0c' # 0xAC -> THAI CHARACTER CHO CHOE + u'\u0e0d' # 0xAD -> THAI CHARACTER YO YING + u'\u0e0e' # 0xAE -> THAI CHARACTER DO CHADA + u'\u0e0f' # 0xAF -> THAI CHARACTER TO PATAK + u'\u0e10' # 0xB0 -> THAI CHARACTER THO THAN + u'\u0e11' # 0xB1 -> THAI CHARACTER THO NANGMONTHO + u'\u0e12' # 0xB2 -> THAI CHARACTER THO PHUTHAO + u'\u0e13' # 0xB3 -> THAI CHARACTER NO NEN + u'\u0e14' # 0xB4 -> THAI CHARACTER DO DEK + u'\u0e15' # 0xB5 -> THAI CHARACTER TO TAO + u'\u0e16' # 0xB6 -> THAI CHARACTER THO THUNG + u'\u0e17' # 0xB7 -> THAI CHARACTER THO THAHAN + u'\u0e18' # 0xB8 -> THAI CHARACTER THO THONG + u'\u0e19' # 0xB9 -> THAI CHARACTER NO NU + u'\u0e1a' # 0xBA -> THAI CHARACTER BO BAIMAI + u'\u0e1b' # 0xBB -> THAI CHARACTER PO PLA + u'\u0e1c' # 0xBC -> THAI CHARACTER PHO PHUNG + u'\u0e1d' # 0xBD -> THAI CHARACTER FO FA + u'\u0e1e' # 0xBE -> THAI CHARACTER PHO PHAN + u'\u0e1f' # 0xBF -> THAI CHARACTER FO FAN + u'\u0e20' # 0xC0 -> THAI CHARACTER PHO SAMPHAO + u'\u0e21' # 0xC1 -> THAI CHARACTER MO MA + u'\u0e22' # 0xC2 -> THAI CHARACTER YO YAK + u'\u0e23' # 0xC3 -> THAI CHARACTER RO RUA + u'\u0e24' # 0xC4 -> THAI CHARACTER RU + u'\u0e25' # 0xC5 -> THAI CHARACTER LO LING + u'\u0e26' # 0xC6 -> THAI CHARACTER LU + u'\u0e27' # 0xC7 -> THAI CHARACTER WO WAEN + u'\u0e28' # 0xC8 -> THAI CHARACTER SO SALA + u'\u0e29' # 0xC9 -> THAI CHARACTER SO RUSI + u'\u0e2a' # 0xCA -> THAI CHARACTER SO SUA + u'\u0e2b' # 0xCB -> THAI CHARACTER HO HIP + u'\u0e2c' # 0xCC -> THAI CHARACTER LO CHULA + u'\u0e2d' # 0xCD -> THAI CHARACTER O ANG + u'\u0e2e' # 0xCE -> THAI CHARACTER HO NOKHUK + u'\u0e2f' # 0xCF -> THAI CHARACTER PAIYANNOI + u'\u0e30' # 0xD0 -> THAI CHARACTER SARA A + u'\u0e31' # 0xD1 -> THAI CHARACTER MAI HAN-AKAT + u'\u0e32' # 0xD2 -> THAI CHARACTER SARA AA + u'\u0e33' # 0xD3 -> THAI CHARACTER SARA AM + u'\u0e34' # 0xD4 -> THAI CHARACTER SARA I + u'\u0e35' # 0xD5 -> THAI CHARACTER SARA II + u'\u0e36' # 0xD6 -> THAI CHARACTER SARA UE + u'\u0e37' # 0xD7 -> THAI CHARACTER SARA UEE + u'\u0e38' # 0xD8 -> THAI CHARACTER SARA U + u'\u0e39' # 0xD9 -> THAI CHARACTER SARA UU + u'\u0e3a' # 0xDA -> THAI CHARACTER PHINTHU + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\u0e3f' # 0xDF -> THAI CURRENCY SYMBOL BAHT + u'\u0e40' # 0xE0 -> THAI CHARACTER SARA E + u'\u0e41' # 0xE1 -> THAI CHARACTER SARA AE + u'\u0e42' # 0xE2 -> THAI CHARACTER SARA O + u'\u0e43' # 0xE3 -> THAI CHARACTER SARA AI MAIMUAN + u'\u0e44' # 0xE4 -> THAI CHARACTER SARA AI MAIMALAI + u'\u0e45' # 0xE5 -> THAI CHARACTER LAKKHANGYAO + u'\u0e46' # 0xE6 -> THAI CHARACTER MAIYAMOK + u'\u0e47' # 0xE7 -> THAI CHARACTER MAITAIKHU + u'\u0e48' # 0xE8 -> THAI CHARACTER MAI EK + u'\u0e49' # 0xE9 -> THAI CHARACTER MAI THO + u'\u0e4a' # 0xEA -> THAI CHARACTER MAI TRI + u'\u0e4b' # 0xEB -> THAI CHARACTER MAI CHATTAWA + u'\u0e4c' # 0xEC -> THAI CHARACTER THANTHAKHAT + u'\u0e4d' # 0xED -> THAI CHARACTER NIKHAHIT + u'\u0e4e' # 0xEE -> THAI CHARACTER YAMAKKAN + u'\u0e4f' # 0xEF -> THAI CHARACTER FONGMAN + u'\u0e50' # 0xF0 -> THAI DIGIT ZERO + u'\u0e51' # 0xF1 -> THAI DIGIT ONE + u'\u0e52' # 0xF2 -> THAI DIGIT TWO + u'\u0e53' # 0xF3 -> THAI DIGIT THREE + u'\u0e54' # 0xF4 -> THAI DIGIT FOUR + u'\u0e55' # 0xF5 -> THAI DIGIT FIVE + u'\u0e56' # 0xF6 -> THAI DIGIT SIX + u'\u0e57' # 0xF7 -> THAI DIGIT SEVEN + u'\u0e58' # 0xF8 -> THAI DIGIT EIGHT + u'\u0e59' # 0xF9 -> THAI DIGIT NINE + u'\u0e5a' # 0xFA -> THAI CHARACTER ANGKHANKHU + u'\u0e5b' # 0xFB -> THAI CHARACTER KHOMUT + u'\ufffe' + u'\ufffe' + u'\ufffe' + u'\ufffe' +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) diff --git a/thirdparty/python25/Lib/encodings/undefined.py b/thirdparty/python25/Lib/encodings/undefined.py new file mode 100644 index 000000000..a077fd658 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/undefined.py @@ -0,0 +1,49 @@ +""" Python 'undefined' Codec + + This codec will always raise a ValueError exception when being + used. It is intended for use by the site.py file to switch off + automatic string to Unicode coercion. + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + raise UnicodeError("undefined encoding") + + def decode(self,input,errors='strict'): + raise UnicodeError("undefined encoding") + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + raise UnicodeError("undefined encoding") + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + raise UnicodeError("undefined encoding") + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='undefined', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/thirdparty/python25/Lib/encodings/unicode_escape.py b/thirdparty/python25/Lib/encodings/unicode_escape.py new file mode 100644 index 000000000..3b77cda47 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/unicode_escape.py @@ -0,0 +1,45 @@ +""" Python 'unicode-escape' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + # Note: Binding these as C functions will result in the class not + # converting them to methods. This is intended. + encode = codecs.unicode_escape_encode + decode = codecs.unicode_escape_decode + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.unicode_escape_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.unicode_escape_decode(input, self.errors)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='unicode-escape', + encode=Codec.encode, + decode=Codec.decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/thirdparty/python25/Lib/encodings/unicode_internal.py b/thirdparty/python25/Lib/encodings/unicode_internal.py new file mode 100644 index 000000000..0803e7b5a --- /dev/null +++ b/thirdparty/python25/Lib/encodings/unicode_internal.py @@ -0,0 +1,45 @@ +""" Python 'unicode-internal' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + # Note: Binding these as C functions will result in the class not + # converting them to methods. This is intended. + encode = codecs.unicode_internal_encode + decode = codecs.unicode_internal_decode + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.unicode_internal_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.unicode_internal_decode(input, self.errors)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='unicode-internal', + encode=Codec.encode, + decode=Codec.decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamwriter=StreamWriter, + streamreader=StreamReader, + ) diff --git a/thirdparty/python25/Lib/encodings/utf_16.py b/thirdparty/python25/Lib/encodings/utf_16.py new file mode 100644 index 000000000..676c2c850 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/utf_16.py @@ -0,0 +1,104 @@ +""" Python 'utf-16' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs, sys + +### Codec APIs + +encode = codecs.utf_16_encode + +def decode(input, errors='strict'): + return codecs.utf_16_decode(input, errors, True) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def __init__(self, errors='strict'): + codecs.IncrementalEncoder.__init__(self, errors) + self.encoder = None + + def encode(self, input, final=False): + if self.encoder is None: + result = codecs.utf_16_encode(input, self.errors)[0] + if sys.byteorder == 'little': + self.encoder = codecs.utf_16_le_encode + else: + self.encoder = codecs.utf_16_be_encode + return result + return self.encoder(input, self.errors)[0] + + def reset(self): + codecs.IncrementalEncoder.reset(self) + self.encoder = None + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + def __init__(self, errors='strict'): + codecs.BufferedIncrementalDecoder.__init__(self, errors) + self.decoder = None + + def _buffer_decode(self, input, errors, final): + if self.decoder is None: + (output, consumed, byteorder) = \ + codecs.utf_16_ex_decode(input, errors, 0, final) + if byteorder == -1: + self.decoder = codecs.utf_16_le_decode + elif byteorder == 1: + self.decoder = codecs.utf_16_be_decode + elif consumed >= 2: + raise UnicodeError("UTF-16 stream does not start with BOM") + return (output, consumed) + return self.decoder(input, self.errors, final) + + def reset(self): + codecs.BufferedIncrementalDecoder.reset(self) + self.decoder = None + +class StreamWriter(codecs.StreamWriter): + def __init__(self, stream, errors='strict'): + self.bom_written = False + codecs.StreamWriter.__init__(self, stream, errors) + + def encode(self, input, errors='strict'): + self.bom_written = True + result = codecs.utf_16_encode(input, errors) + if sys.byteorder == 'little': + self.encode = codecs.utf_16_le_encode + else: + self.encode = codecs.utf_16_be_encode + return result + +class StreamReader(codecs.StreamReader): + + def reset(self): + codecs.StreamReader.reset(self) + try: + del self.decode + except AttributeError: + pass + + def decode(self, input, errors='strict'): + (object, consumed, byteorder) = \ + codecs.utf_16_ex_decode(input, errors, 0, False) + if byteorder == -1: + self.decode = codecs.utf_16_le_decode + elif byteorder == 1: + self.decode = codecs.utf_16_be_decode + elif consumed>=2: + raise UnicodeError,"UTF-16 stream does not start with BOM" + return (object, consumed) + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='utf-16', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/utf_16_be.py b/thirdparty/python25/Lib/encodings/utf_16_be.py new file mode 100644 index 000000000..780c499bc --- /dev/null +++ b/thirdparty/python25/Lib/encodings/utf_16_be.py @@ -0,0 +1,42 @@ +""" Python 'utf-16-be' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +encode = codecs.utf_16_be_encode + +def decode(input, errors='strict'): + return codecs.utf_16_be_decode(input, errors, True) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.utf_16_be_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + _buffer_decode = codecs.utf_16_be_decode + +class StreamWriter(codecs.StreamWriter): + encode = codecs.utf_16_be_encode + +class StreamReader(codecs.StreamReader): + decode = codecs.utf_16_be_decode + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='utf-16-be', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/utf_16_le.py b/thirdparty/python25/Lib/encodings/utf_16_le.py new file mode 100644 index 000000000..396412489 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/utf_16_le.py @@ -0,0 +1,42 @@ +""" Python 'utf-16-le' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +encode = codecs.utf_16_le_encode + +def decode(input, errors='strict'): + return codecs.utf_16_le_decode(input, errors, True) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.utf_16_le_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + _buffer_decode = codecs.utf_16_le_decode + +class StreamWriter(codecs.StreamWriter): + encode = codecs.utf_16_le_encode + +class StreamReader(codecs.StreamReader): + decode = codecs.utf_16_le_decode + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='utf-16-le', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/utf_7.py b/thirdparty/python25/Lib/encodings/utf_7.py new file mode 100644 index 000000000..91c24e79d --- /dev/null +++ b/thirdparty/python25/Lib/encodings/utf_7.py @@ -0,0 +1,41 @@ +""" Python 'utf-7' Codec + +Written by Brian Quinlan (brian@sweetapp.com). +""" +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + # Note: Binding these as C functions will result in the class not + # converting them to methods. This is intended. + encode = codecs.utf_7_encode + decode = codecs.utf_7_decode + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.utf_7_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + def _buffer_decode(self, input, errors, final): + return codecs.utf_7_decode(input, self.errors) + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='utf-7', + encode=Codec.encode, + decode=Codec.decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/utf_8.py b/thirdparty/python25/Lib/encodings/utf_8.py new file mode 100644 index 000000000..cc118ac2c --- /dev/null +++ b/thirdparty/python25/Lib/encodings/utf_8.py @@ -0,0 +1,42 @@ +""" Python 'utf-8' Codec + + +Written by Marc-Andre Lemburg (mal@lemburg.com). + +(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. + +""" +import codecs + +### Codec APIs + +encode = codecs.utf_8_encode + +def decode(input, errors='strict'): + return codecs.utf_8_decode(input, errors, True) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.utf_8_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + _buffer_decode = codecs.utf_8_decode + +class StreamWriter(codecs.StreamWriter): + encode = codecs.utf_8_encode + +class StreamReader(codecs.StreamReader): + decode = codecs.utf_8_decode + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='utf-8', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/utf_8_sig.py b/thirdparty/python25/Lib/encodings/utf_8_sig.py new file mode 100644 index 000000000..0ad1c1c92 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/utf_8_sig.py @@ -0,0 +1,100 @@ +""" Python 'utf-8-sig' Codec +This work similar to UTF-8 with the following changes: + +* On encoding/writing a UTF-8 encoded BOM will be prepended/written as the + first three bytes. + +* On decoding/reading if the first three bytes are a UTF-8 encoded BOM, these + bytes will be skipped. +""" +import codecs + +### Codec APIs + +def encode(input, errors='strict'): + return (codecs.BOM_UTF8 + codecs.utf_8_encode(input, errors)[0], len(input)) + +def decode(input, errors='strict'): + prefix = 0 + if input[:3] == codecs.BOM_UTF8: + input = input[3:] + prefix = 3 + (output, consumed) = codecs.utf_8_decode(input, errors, True) + return (output, consumed+prefix) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def __init__(self, errors='strict'): + codecs.IncrementalEncoder.__init__(self, errors) + self.first = True + + def encode(self, input, final=False): + if self.first: + self.first = False + return codecs.BOM_UTF8 + codecs.utf_8_encode(input, self.errors)[0] + else: + return codecs.utf_8_encode(input, self.errors)[0] + + def reset(self): + codecs.IncrementalEncoder.reset(self) + self.first = True + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + def __init__(self, errors='strict'): + codecs.BufferedIncrementalDecoder.__init__(self, errors) + self.first = True + + def _buffer_decode(self, input, errors, final): + if self.first and codecs.BOM_UTF8.startswith(input): # might be a BOM + if len(input) < 3: + # not enough data to decide if this really is a BOM + # => try again on the next call + return (u"", 0) + (output, consumed) = codecs.utf_8_decode(input[3:], errors, final) + self.first = False + return (output, consumed+3) + return codecs.utf_8_decode(input, errors, final) + + def reset(self): + codecs.BufferedIncrementalDecoder.reset(self) + self.first = True + +class StreamWriter(codecs.StreamWriter): + def reset(self): + codecs.StreamWriter.reset(self) + try: + del self.encode + except AttributeError: + pass + + def encode(self, input, errors='strict'): + self.encode = codecs.utf_8_encode + return encode(input, errors) + +class StreamReader(codecs.StreamReader): + def reset(self): + codecs.StreamReader.reset(self) + try: + del self.decode + except AttributeError: + pass + + def decode(self, input, errors='strict'): + if len(input) < 3 and codecs.BOM_UTF8.startswith(input): + # not enough data to decide if this is a BOM + # => try again on the next call + return (u"", 0) + self.decode = codecs.utf_8_decode + return decode(input, errors) + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='utf-8-sig', + encode=encode, + decode=decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/uu_codec.py b/thirdparty/python25/Lib/encodings/uu_codec.py new file mode 100644 index 000000000..a3e122530 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/uu_codec.py @@ -0,0 +1,128 @@ +""" Python 'uu_codec' Codec - UU content transfer encoding + + Unlike most of the other codecs which target Unicode, this codec + will return Python string objects for both encode and decode. + + Written by Marc-Andre Lemburg (mal@lemburg.com). Some details were + adapted from uu.py which was written by Lance Ellinghouse and + modified by Jack Jansen and Fredrik Lundh. + +""" +import codecs, binascii + +### Codec APIs + +def uu_encode(input,errors='strict',filename='',mode=0666): + + """ Encodes the object input and returns a tuple (output + object, length consumed). + + errors defines the error handling to apply. It defaults to + 'strict' handling which is the only currently supported + error handling for this codec. + + """ + assert errors == 'strict' + from cStringIO import StringIO + from binascii import b2a_uu + infile = StringIO(input) + outfile = StringIO() + read = infile.read + write = outfile.write + + # Encode + write('begin %o %s\n' % (mode & 0777, filename)) + chunk = read(45) + while chunk: + write(b2a_uu(chunk)) + chunk = read(45) + write(' \nend\n') + + return (outfile.getvalue(), len(input)) + +def uu_decode(input,errors='strict'): + + """ Decodes the object input and returns a tuple (output + object, length consumed). + + input must be an object which provides the bf_getreadbuf + buffer slot. Python strings, buffer objects and memory + mapped files are examples of objects providing this slot. + + errors defines the error handling to apply. It defaults to + 'strict' handling which is the only currently supported + error handling for this codec. + + Note: filename and file mode information in the input data is + ignored. + + """ + assert errors == 'strict' + from cStringIO import StringIO + from binascii import a2b_uu + infile = StringIO(input) + outfile = StringIO() + readline = infile.readline + write = outfile.write + + # Find start of encoded data + while 1: + s = readline() + if not s: + raise ValueError, 'Missing "begin" line in input data' + if s[:5] == 'begin': + break + + # Decode + while 1: + s = readline() + if not s or \ + s == 'end\n': + break + try: + data = a2b_uu(s) + except binascii.Error, v: + # Workaround for broken uuencoders by /Fredrik Lundh + nbytes = (((ord(s[0])-32) & 63) * 4 + 5) / 3 + data = a2b_uu(s[:nbytes]) + #sys.stderr.write("Warning: %s\n" % str(v)) + write(data) + if not s: + raise ValueError, 'Truncated input data' + + return (outfile.getvalue(), len(input)) + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return uu_encode(input,errors) + + def decode(self,input,errors='strict'): + return uu_decode(input,errors) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return uu_encode(input, self.errors)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return uu_decode(input, self.errors)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='uu', + encode=uu_encode, + decode=uu_decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/encodings/zlib_codec.py b/thirdparty/python25/Lib/encodings/zlib_codec.py new file mode 100644 index 000000000..82557d047 --- /dev/null +++ b/thirdparty/python25/Lib/encodings/zlib_codec.py @@ -0,0 +1,102 @@ +""" Python 'zlib_codec' Codec - zlib compression encoding + + Unlike most of the other codecs which target Unicode, this codec + will return Python string objects for both encode and decode. + + Written by Marc-Andre Lemburg (mal@lemburg.com). + +""" +import codecs +import zlib # this codec needs the optional zlib module ! + +### Codec APIs + +def zlib_encode(input,errors='strict'): + + """ Encodes the object input and returns a tuple (output + object, length consumed). + + errors defines the error handling to apply. It defaults to + 'strict' handling which is the only currently supported + error handling for this codec. + + """ + assert errors == 'strict' + output = zlib.compress(input) + return (output, len(input)) + +def zlib_decode(input,errors='strict'): + + """ Decodes the object input and returns a tuple (output + object, length consumed). + + input must be an object which provides the bf_getreadbuf + buffer slot. Python strings, buffer objects and memory + mapped files are examples of objects providing this slot. + + errors defines the error handling to apply. It defaults to + 'strict' handling which is the only currently supported + error handling for this codec. + + """ + assert errors == 'strict' + output = zlib.decompress(input) + return (output, len(input)) + +class Codec(codecs.Codec): + + def encode(self, input, errors='strict'): + return zlib_encode(input, errors) + def decode(self, input, errors='strict'): + return zlib_decode(input, errors) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def __init__(self, errors='strict'): + assert errors == 'strict' + self.errors = errors + self.compressobj = zlib.compressobj() + + def encode(self, input, final=False): + if final: + c = self.compressobj.compress(input) + return c + self.compressobj.flush() + else: + return self.compressobj.compress(input) + + def reset(self): + self.compressobj = zlib.compressobj() + +class IncrementalDecoder(codecs.IncrementalDecoder): + def __init__(self, errors='strict'): + assert errors == 'strict' + self.errors = errors + self.decompressobj = zlib.decompressobj() + + def decode(self, input, final=False): + if final: + c = self.decompressobj.decompress(input) + return c + self.decompressobj.flush() + else: + return self.decompressobj.decompress(input) + + def reset(self): + self.decompressobj = zlib.decompressobj() + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='zlib', + encode=zlib_encode, + decode=zlib_decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) diff --git a/thirdparty/python25/Lib/getopt.py b/thirdparty/python25/Lib/getopt.py new file mode 100644 index 000000000..a9fb5ce71 --- /dev/null +++ b/thirdparty/python25/Lib/getopt.py @@ -0,0 +1,211 @@ +# -*- coding: iso-8859-1 -*- +"""Parser for command line options. + +This module helps scripts to parse the command line arguments in +sys.argv. It supports the same conventions as the Unix getopt() +function (including the special meanings of arguments of the form `-' +and `--'). Long options similar to those supported by GNU software +may be used as well via an optional third argument. This module +provides two functions and an exception: + +getopt() -- Parse command line options +gnu_getopt() -- Like getopt(), but allow option and non-option arguments +to be intermixed. +GetoptError -- exception (class) raised with 'opt' attribute, which is the +option involved with the exception. +""" + +# Long option support added by Lars Wirzenius . +# +# Gerrit Holl moved the string-based exceptions +# to class-based exceptions. +# +# Peter Åstrand added gnu_getopt(). +# +# TODO for gnu_getopt(): +# +# - GNU getopt_long_only mechanism +# - allow the caller to specify ordering +# - RETURN_IN_ORDER option +# - GNU extension with '-' as first character of option string +# - optional arguments, specified by double colons +# - a option string with a W followed by semicolon should +# treat "-W foo" as "--foo" + +__all__ = ["GetoptError","error","getopt","gnu_getopt"] + +import os + +class GetoptError(Exception): + opt = '' + msg = '' + def __init__(self, msg, opt=''): + self.msg = msg + self.opt = opt + Exception.__init__(self, msg, opt) + + def __str__(self): + return self.msg + +error = GetoptError # backward compatibility + +def getopt(args, shortopts, longopts = []): + """getopt(args, options[, long_options]) -> opts, args + + Parses command line options and parameter list. args is the + argument list to be parsed, without the leading reference to the + running program. Typically, this means "sys.argv[1:]". shortopts + is the string of option letters that the script wants to + recognize, with options that require an argument followed by a + colon (i.e., the same format that Unix getopt() uses). If + specified, longopts is a list of strings with the names of the + long options which should be supported. The leading '--' + characters should not be included in the option name. Options + which require an argument should be followed by an equal sign + ('='). + + The return value consists of two elements: the first is a list of + (option, value) pairs; the second is the list of program arguments + left after the option list was stripped (this is a trailing slice + of the first argument). Each option-and-value pair returned has + the option as its first element, prefixed with a hyphen (e.g., + '-x'), and the option argument as its second element, or an empty + string if the option has no argument. The options occur in the + list in the same order in which they were found, thus allowing + multiple occurrences. Long and short options may be mixed. + + """ + + opts = [] + if type(longopts) == type(""): + longopts = [longopts] + else: + longopts = list(longopts) + while args and args[0].startswith('-') and args[0] != '-': + if args[0] == '--': + args = args[1:] + break + if args[0].startswith('--'): + opts, args = do_longs(opts, args[0][2:], longopts, args[1:]) + else: + opts, args = do_shorts(opts, args[0][1:], shortopts, args[1:]) + + return opts, args + +def gnu_getopt(args, shortopts, longopts = []): + """getopt(args, options[, long_options]) -> opts, args + + This function works like getopt(), except that GNU style scanning + mode is used by default. This means that option and non-option + arguments may be intermixed. The getopt() function stops + processing options as soon as a non-option argument is + encountered. + + If the first character of the option string is `+', or if the + environment variable POSIXLY_CORRECT is set, then option + processing stops as soon as a non-option argument is encountered. + + """ + + opts = [] + prog_args = [] + if isinstance(longopts, str): + longopts = [longopts] + else: + longopts = list(longopts) + + # Allow options after non-option arguments? + if shortopts.startswith('+'): + shortopts = shortopts[1:] + all_options_first = True + elif os.environ.get("POSIXLY_CORRECT"): + all_options_first = True + else: + all_options_first = False + + while args: + if args[0] == '--': + prog_args += args[1:] + break + + if args[0][:2] == '--': + opts, args = do_longs(opts, args[0][2:], longopts, args[1:]) + elif args[0][:1] == '-': + opts, args = do_shorts(opts, args[0][1:], shortopts, args[1:]) + else: + if all_options_first: + prog_args += args + break + else: + prog_args.append(args[0]) + args = args[1:] + + return opts, prog_args + +def do_longs(opts, opt, longopts, args): + try: + i = opt.index('=') + except ValueError: + optarg = None + else: + opt, optarg = opt[:i], opt[i+1:] + + has_arg, opt = long_has_args(opt, longopts) + if has_arg: + if optarg is None: + if not args: + raise GetoptError('option --%s requires argument' % opt, opt) + optarg, args = args[0], args[1:] + elif optarg: + raise GetoptError('option --%s must not have an argument' % opt, opt) + opts.append(('--' + opt, optarg or '')) + return opts, args + +# Return: +# has_arg? +# full option name +def long_has_args(opt, longopts): + possibilities = [o for o in longopts if o.startswith(opt)] + if not possibilities: + raise GetoptError('option --%s not recognized' % opt, opt) + # Is there an exact match? + if opt in possibilities: + return False, opt + elif opt + '=' in possibilities: + return True, opt + # No exact match, so better be unique. + if len(possibilities) > 1: + # XXX since possibilities contains all valid continuations, might be + # nice to work them into the error msg + raise GetoptError('option --%s not a unique prefix' % opt, opt) + assert len(possibilities) == 1 + unique_match = possibilities[0] + has_arg = unique_match.endswith('=') + if has_arg: + unique_match = unique_match[:-1] + return has_arg, unique_match + +def do_shorts(opts, optstring, shortopts, args): + while optstring != '': + opt, optstring = optstring[0], optstring[1:] + if short_has_arg(opt, shortopts): + if optstring == '': + if not args: + raise GetoptError('option -%s requires argument' % opt, + opt) + optstring, args = args[0], args[1:] + optarg, optstring = optstring, '' + else: + optarg = '' + opts.append(('-' + opt, optarg)) + return opts, args + +def short_has_arg(opt, shortopts): + for i in range(len(shortopts)): + if opt == shortopts[i] != ':': + return shortopts.startswith(':', i+1) + raise GetoptError('option -%s not recognized' % opt, opt) + +if __name__ == '__main__': + import sys + print getopt(sys.argv[1:], "a:b", ["alpha=", "beta"]) diff --git a/thirdparty/python25/Lib/getpass.py b/thirdparty/python25/Lib/getpass.py new file mode 100644 index 000000000..d8c18c0d9 --- /dev/null +++ b/thirdparty/python25/Lib/getpass.py @@ -0,0 +1,128 @@ +"""Utilities to get a password and/or the current user name. + +getpass(prompt) - prompt for a password, with echo turned off +getuser() - get the user name from the environment or password database + +On Windows, the msvcrt module will be used. +On the Mac EasyDialogs.AskPassword is used, if available. + +""" + +# Authors: Piers Lauder (original) +# Guido van Rossum (Windows support and cleanup) + +import sys + +__all__ = ["getpass","getuser"] + +def unix_getpass(prompt='Password: ', stream=None): + """Prompt for a password, with echo turned off. + The prompt is written on stream, by default stdout. + + Restore terminal settings at end. + """ + if stream is None: + stream = sys.stdout + + try: + fd = sys.stdin.fileno() + except: + return default_getpass(prompt) + + old = termios.tcgetattr(fd) # a copy to save + new = old[:] + + new[3] = new[3] & ~termios.ECHO # 3 == 'lflags' + try: + termios.tcsetattr(fd, termios.TCSADRAIN, new) + passwd = _raw_input(prompt, stream) + finally: + termios.tcsetattr(fd, termios.TCSADRAIN, old) + + stream.write('\n') + return passwd + + +def win_getpass(prompt='Password: ', stream=None): + """Prompt for password with echo off, using Windows getch().""" + if sys.stdin is not sys.__stdin__: + return default_getpass(prompt, stream) + import msvcrt + for c in prompt: + msvcrt.putch(c) + pw = "" + while 1: + c = msvcrt.getch() + if c == '\r' or c == '\n': + break + if c == '\003': + raise KeyboardInterrupt + if c == '\b': + pw = pw[:-1] + else: + pw = pw + c + msvcrt.putch('\r') + msvcrt.putch('\n') + return pw + + +def default_getpass(prompt='Password: ', stream=None): + print >>sys.stderr, "Warning: Problem with getpass. Passwords may be echoed." + return _raw_input(prompt, stream) + + +def _raw_input(prompt="", stream=None): + # A raw_input() replacement that doesn't save the string in the + # GNU readline history. + if stream is None: + stream = sys.stdout + prompt = str(prompt) + if prompt: + stream.write(prompt) + line = sys.stdin.readline() + if not line: + raise EOFError + if line[-1] == '\n': + line = line[:-1] + return line + + +def getuser(): + """Get the username from the environment or password database. + + First try various environment variables, then the password + database. This works on Windows as long as USERNAME is set. + + """ + + import os + + for name in ('LOGNAME', 'USER', 'LNAME', 'USERNAME'): + user = os.environ.get(name) + if user: + return user + + # If this fails, the exception will "explain" why + import pwd + return pwd.getpwuid(os.getuid())[0] + +# Bind the name getpass to the appropriate function +try: + import termios + # it's possible there is an incompatible termios from the + # McMillan Installer, make sure we have a UNIX-compatible termios + termios.tcgetattr, termios.tcsetattr +except (ImportError, AttributeError): + try: + import msvcrt + except ImportError: + try: + from EasyDialogs import AskPassword + except ImportError: + getpass = default_getpass + else: + getpass = AskPassword + else: + getpass = win_getpass +else: + getpass = unix_getpass diff --git a/thirdparty/python25/Lib/gzip.py b/thirdparty/python25/Lib/gzip.py new file mode 100644 index 000000000..0bd1eec0b --- /dev/null +++ b/thirdparty/python25/Lib/gzip.py @@ -0,0 +1,490 @@ +"""Functions that read and write gzipped files. + +The user of the file doesn't have to worry about the compression, +but random access is not allowed.""" + +# based on Andrew Kuchling's minigzip.py distributed with the zlib module + +import struct, sys, time +import zlib +import __builtin__ + +__all__ = ["GzipFile","open"] + +FTEXT, FHCRC, FEXTRA, FNAME, FCOMMENT = 1, 2, 4, 8, 16 + +READ, WRITE = 1, 2 + +def U32(i): + """Return i as an unsigned integer, assuming it fits in 32 bits. + + If it's >= 2GB when viewed as a 32-bit unsigned int, return a long. + """ + if i < 0: + i += 1L << 32 + return i + +def LOWU32(i): + """Return the low-order 32 bits of an int, as a non-negative int.""" + return i & 0xFFFFFFFFL + +def write32(output, value): + output.write(struct.pack("' + + def _init_write(self, filename): + if filename[-3:] != '.gz': + filename = filename + '.gz' + self.filename = filename + self.crc = zlib.crc32("") + self.size = 0 + self.writebuf = [] + self.bufsize = 0 + + def _write_gzip_header(self): + self.fileobj.write('\037\213') # magic header + self.fileobj.write('\010') # compression method + fname = self.filename[:-3] + flags = 0 + if fname: + flags = FNAME + self.fileobj.write(chr(flags)) + write32u(self.fileobj, long(time.time())) + self.fileobj.write('\002') + self.fileobj.write('\377') + if fname: + self.fileobj.write(fname + '\000') + + def _init_read(self): + self.crc = zlib.crc32("") + self.size = 0 + + def _read_gzip_header(self): + magic = self.fileobj.read(2) + if magic != '\037\213': + raise IOError, 'Not a gzipped file' + method = ord( self.fileobj.read(1) ) + if method != 8: + raise IOError, 'Unknown compression method' + flag = ord( self.fileobj.read(1) ) + # modtime = self.fileobj.read(4) + # extraflag = self.fileobj.read(1) + # os = self.fileobj.read(1) + self.fileobj.read(6) + + if flag & FEXTRA: + # Read & discard the extra field, if present + xlen = ord(self.fileobj.read(1)) + xlen = xlen + 256*ord(self.fileobj.read(1)) + self.fileobj.read(xlen) + if flag & FNAME: + # Read and discard a null-terminated string containing the filename + while True: + s = self.fileobj.read(1) + if not s or s=='\000': + break + if flag & FCOMMENT: + # Read and discard a null-terminated string containing a comment + while True: + s = self.fileobj.read(1) + if not s or s=='\000': + break + if flag & FHCRC: + self.fileobj.read(2) # Read & discard the 16-bit header CRC + + + def write(self,data): + if self.mode != WRITE: + import errno + raise IOError(errno.EBADF, "write() on read-only GzipFile object") + + if self.fileobj is None: + raise ValueError, "write() on closed GzipFile object" + if len(data) > 0: + self.size = self.size + len(data) + self.crc = zlib.crc32(data, self.crc) + self.fileobj.write( self.compress.compress(data) ) + self.offset += len(data) + + def read(self, size=-1): + if self.mode != READ: + import errno + raise IOError(errno.EBADF, "read() on write-only GzipFile object") + + if self.extrasize <= 0 and self.fileobj is None: + return '' + + readsize = 1024 + if size < 0: # get the whole thing + try: + while True: + self._read(readsize) + readsize = min(self.max_read_chunk, readsize * 2) + except EOFError: + size = self.extrasize + else: # just get some more of it + try: + while size > self.extrasize: + self._read(readsize) + readsize = min(self.max_read_chunk, readsize * 2) + except EOFError: + if size > self.extrasize: + size = self.extrasize + + chunk = self.extrabuf[:size] + self.extrabuf = self.extrabuf[size:] + self.extrasize = self.extrasize - size + + self.offset += size + return chunk + + def _unread(self, buf): + self.extrabuf = buf + self.extrabuf + self.extrasize = len(buf) + self.extrasize + self.offset -= len(buf) + + def _read(self, size=1024): + if self.fileobj is None: + raise EOFError, "Reached EOF" + + if self._new_member: + # If the _new_member flag is set, we have to + # jump to the next member, if there is one. + # + # First, check if we're at the end of the file; + # if so, it's time to stop; no more members to read. + pos = self.fileobj.tell() # Save current position + self.fileobj.seek(0, 2) # Seek to end of file + if pos == self.fileobj.tell(): + raise EOFError, "Reached EOF" + else: + self.fileobj.seek( pos ) # Return to original position + + self._init_read() + self._read_gzip_header() + self.decompress = zlib.decompressobj(-zlib.MAX_WBITS) + self._new_member = False + + # Read a chunk of data from the file + buf = self.fileobj.read(size) + + # If the EOF has been reached, flush the decompression object + # and mark this object as finished. + + if buf == "": + uncompress = self.decompress.flush() + self._read_eof() + self._add_read_data( uncompress ) + raise EOFError, 'Reached EOF' + + uncompress = self.decompress.decompress(buf) + self._add_read_data( uncompress ) + + if self.decompress.unused_data != "": + # Ending case: we've come to the end of a member in the file, + # so seek back to the start of the unused data, finish up + # this member, and read a new gzip header. + # (The number of bytes to seek back is the length of the unused + # data, minus 8 because _read_eof() will rewind a further 8 bytes) + self.fileobj.seek( -len(self.decompress.unused_data)+8, 1) + + # Check the CRC and file size, and set the flag so we read + # a new member on the next call + self._read_eof() + self._new_member = True + + def _add_read_data(self, data): + self.crc = zlib.crc32(data, self.crc) + self.extrabuf = self.extrabuf + data + self.extrasize = self.extrasize + len(data) + self.size = self.size + len(data) + + def _read_eof(self): + # We've read to the end of the file, so we have to rewind in order + # to reread the 8 bytes containing the CRC and the file size. + # We check the that the computed CRC and size of the + # uncompressed data matches the stored values. Note that the size + # stored is the true file size mod 2**32. + self.fileobj.seek(-8, 1) + crc32 = read32(self.fileobj) + isize = U32(read32(self.fileobj)) # may exceed 2GB + if U32(crc32) != U32(self.crc): + raise IOError, "CRC check failed" + elif isize != LOWU32(self.size): + raise IOError, "Incorrect length of data produced" + + def close(self): + if self.mode == WRITE: + self.fileobj.write(self.compress.flush()) + # The native zlib crc is an unsigned 32-bit integer, but + # the Python wrapper implicitly casts that to a signed C + # long. So, on a 32-bit box self.crc may "look negative", + # while the same crc on a 64-bit box may "look positive". + # To avoid irksome warnings from the `struct` module, force + # it to look positive on all boxes. + write32u(self.fileobj, LOWU32(self.crc)) + # self.size may exceed 2GB, or even 4GB + write32u(self.fileobj, LOWU32(self.size)) + self.fileobj = None + elif self.mode == READ: + self.fileobj = None + if self.myfileobj: + self.myfileobj.close() + self.myfileobj = None + + def __del__(self): + try: + if (self.myfileobj is None and + self.fileobj is None): + return + except AttributeError: + return + self.close() + + def flush(self,zlib_mode=zlib.Z_SYNC_FLUSH): + if self.mode == WRITE: + # Ensure the compressor's buffer is flushed + self.fileobj.write(self.compress.flush(zlib_mode)) + self.fileobj.flush() + + def fileno(self): + """Invoke the underlying file object's fileno() method. + + This will raise AttributeError if the underlying file object + doesn't support fileno(). + """ + return self.fileobj.fileno() + + def isatty(self): + return False + + def tell(self): + return self.offset + + def rewind(self): + '''Return the uncompressed stream file position indicator to the + beginning of the file''' + if self.mode != READ: + raise IOError("Can't rewind in write mode") + self.fileobj.seek(0) + self._new_member = True + self.extrabuf = "" + self.extrasize = 0 + self.offset = 0 + + def seek(self, offset): + if self.mode == WRITE: + if offset < self.offset: + raise IOError('Negative seek in write mode') + count = offset - self.offset + for i in range(count // 1024): + self.write(1024 * '\0') + self.write((count % 1024) * '\0') + elif self.mode == READ: + if offset < self.offset: + # for negative seek, rewind and do positive seek + self.rewind() + count = offset - self.offset + for i in range(count // 1024): + self.read(1024) + self.read(count % 1024) + + def readline(self, size=-1): + if size < 0: + size = sys.maxint + readsize = self.min_readsize + else: + readsize = size + bufs = [] + while size != 0: + c = self.read(readsize) + i = c.find('\n') + + # We set i=size to break out of the loop under two + # conditions: 1) there's no newline, and the chunk is + # larger than size, or 2) there is a newline, but the + # resulting line would be longer than 'size'. + if (size <= i) or (i == -1 and len(c) > size): + i = size - 1 + + if i >= 0 or c == '': + bufs.append(c[:i + 1]) # Add portion of last chunk + self._unread(c[i + 1:]) # Push back rest of chunk + break + + # Append chunk to list, decrease 'size', + bufs.append(c) + size = size - len(c) + readsize = min(size, readsize * 2) + if readsize > self.min_readsize: + self.min_readsize = min(readsize, self.min_readsize * 2, 512) + return ''.join(bufs) # Return resulting line + + def readlines(self, sizehint=0): + # Negative numbers result in reading all the lines + if sizehint <= 0: + sizehint = sys.maxint + L = [] + while sizehint > 0: + line = self.readline() + if line == "": + break + L.append(line) + sizehint = sizehint - len(line) + + return L + + def writelines(self, L): + for line in L: + self.write(line) + + def __iter__(self): + return self + + def next(self): + line = self.readline() + if line: + return line + else: + raise StopIteration + + +def _test(): + # Act like gzip; with -d, act like gunzip. + # The input file is not deleted, however, nor are any other gzip + # options or features supported. + args = sys.argv[1:] + decompress = args and args[0] == "-d" + if decompress: + args = args[1:] + if not args: + args = ["-"] + for arg in args: + if decompress: + if arg == "-": + f = GzipFile(filename="", mode="rb", fileobj=sys.stdin) + g = sys.stdout + else: + if arg[-3:] != ".gz": + print "filename doesn't end in .gz:", repr(arg) + continue + f = open(arg, "rb") + g = __builtin__.open(arg[:-3], "wb") + else: + if arg == "-": + f = sys.stdin + g = GzipFile(filename="", mode="wb", fileobj=sys.stdout) + else: + f = __builtin__.open(arg, "rb") + g = open(arg + ".gz", "wb") + while True: + chunk = f.read(1024) + if not chunk: + break + g.write(chunk) + if g is not sys.stdout: + g.close() + if f is not sys.stdin: + f.close() + +if __name__ == '__main__': + _test() diff --git a/thirdparty/python25/Lib/hashlib.py b/thirdparty/python25/Lib/hashlib.py new file mode 100644 index 000000000..2c2696294 --- /dev/null +++ b/thirdparty/python25/Lib/hashlib.py @@ -0,0 +1,138 @@ +# $Id: hashlib.py 52533 2006-10-29 18:01:12Z georg.brandl $ +# +# Copyright (C) 2005 Gregory P. Smith (greg@electricrain.com) +# Licensed to PSF under a Contributor Agreement. +# + +__doc__ = """hashlib module - A common interface to many hash functions. + +new(name, string='') - returns a new hash object implementing the + given hash function; initializing the hash + using the given string data. + +Named constructor functions are also available, these are much faster +than using new(): + +md5(), sha1(), sha224(), sha256(), sha384(), and sha512() + +More algorithms may be available on your platform but the above are +guaranteed to exist. + +Choose your hash function wisely. Some have known collision weaknesses. +sha384 and sha512 will be slow on 32 bit platforms. + +Hash objects have these methods: + - update(arg): Update the hash object with the string arg. Repeated calls + are equivalent to a single call with the concatenation of all + the arguments. + - digest(): Return the digest of the strings passed to the update() method + so far. This may contain non-ASCII characters, including + NUL bytes. + - hexdigest(): Like digest() except the digest is returned as a string of + double length, containing only hexadecimal digits. + - copy(): Return a copy (clone) of the hash object. This can be used to + efficiently compute the digests of strings that share a common + initial substring. + +For example, to obtain the digest of the string 'Nobody inspects the +spammish repetition': + + >>> import hashlib + >>> m = hashlib.md5() + >>> m.update("Nobody inspects") + >>> m.update(" the spammish repetition") + >>> m.digest() + '\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9' + +More condensed: + + >>> hashlib.sha224("Nobody inspects the spammish repetition").hexdigest() + 'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2' + +""" + + +def __get_builtin_constructor(name): + if name in ('SHA1', 'sha1'): + import _sha + return _sha.new + elif name in ('MD5', 'md5'): + import _md5 + return _md5.new + elif name in ('SHA256', 'sha256', 'SHA224', 'sha224'): + import _sha256 + bs = name[3:] + if bs == '256': + return _sha256.sha256 + elif bs == '224': + return _sha256.sha224 + elif name in ('SHA512', 'sha512', 'SHA384', 'sha384'): + import _sha512 + bs = name[3:] + if bs == '512': + return _sha512.sha512 + elif bs == '384': + return _sha512.sha384 + + raise ValueError, "unsupported hash type" + + +def __py_new(name, string=''): + """new(name, string='') - Return a new hashing object using the named algorithm; + optionally initialized with a string. + """ + return __get_builtin_constructor(name)(string) + + +def __hash_new(name, string=''): + """new(name, string='') - Return a new hashing object using the named algorithm; + optionally initialized with a string. + """ + try: + return _hashlib.new(name, string) + except ValueError: + # If the _hashlib module (OpenSSL) doesn't support the named + # hash, try using our builtin implementations. + # This allows for SHA224/256 and SHA384/512 support even though + # the OpenSSL library prior to 0.9.8 doesn't provide them. + return __get_builtin_constructor(name)(string) + + +try: + import _hashlib + # use the wrapper of the C implementation + new = __hash_new + + for opensslFuncName in filter(lambda n: n.startswith('openssl_'), dir(_hashlib)): + funcName = opensslFuncName[len('openssl_'):] + try: + # try them all, some may not work due to the OpenSSL + # version not supporting that algorithm. + f = getattr(_hashlib, opensslFuncName) + f() + # Use the C function directly (very fast) + exec funcName + ' = f' + except ValueError: + try: + # Use the builtin implementation directly (fast) + exec funcName + ' = __get_builtin_constructor(funcName)' + except ValueError: + # this one has no builtin implementation, don't define it + pass + # clean up our locals + del f + del opensslFuncName + del funcName + +except ImportError: + # We don't have the _hashlib OpenSSL module? + # use the built in legacy interfaces via a wrapper function + new = __py_new + + # lookup the C function to use directly for the named constructors + md5 = __get_builtin_constructor('md5') + sha1 = __get_builtin_constructor('sha1') + sha224 = __get_builtin_constructor('sha224') + sha256 = __get_builtin_constructor('sha256') + sha384 = __get_builtin_constructor('sha384') + sha512 = __get_builtin_constructor('sha512') diff --git a/thirdparty/python25/Lib/httplib.py b/thirdparty/python25/Lib/httplib.py new file mode 100644 index 000000000..1e76184ae --- /dev/null +++ b/thirdparty/python25/Lib/httplib.py @@ -0,0 +1,1428 @@ +"""HTTP/1.1 client library + + + + +HTTPConnection goes through a number of "states", which define when a client +may legally make another request or fetch the response for a particular +request. This diagram details these state transitions: + + (null) + | + | HTTPConnection() + v + Idle + | + | putrequest() + v + Request-started + | + | ( putheader() )* endheaders() + v + Request-sent + | + | response = getresponse() + v + Unread-response [Response-headers-read] + |\____________________ + | | + | response.read() | putrequest() + v v + Idle Req-started-unread-response + ______/| + / | + response.read() | | ( putheader() )* endheaders() + v v + Request-started Req-sent-unread-response + | + | response.read() + v + Request-sent + +This diagram presents the following rules: + -- a second request may not be started until {response-headers-read} + -- a response [object] cannot be retrieved until {request-sent} + -- there is no differentiation between an unread response body and a + partially read response body + +Note: this enforcement is applied by the HTTPConnection class. The + HTTPResponse class does not enforce this state machine, which + implies sophisticated clients may accelerate the request/response + pipeline. Caution should be taken, though: accelerating the states + beyond the above pattern may imply knowledge of the server's + connection-close behavior for certain requests. For example, it + is impossible to tell whether the server will close the connection + UNTIL the response headers have been read; this means that further + requests cannot be placed into the pipeline until it is known that + the server will NOT be closing the connection. + +Logical State __state __response +------------- ------- ---------- +Idle _CS_IDLE None +Request-started _CS_REQ_STARTED None +Request-sent _CS_REQ_SENT None +Unread-response _CS_IDLE +Req-started-unread-response _CS_REQ_STARTED +Req-sent-unread-response _CS_REQ_SENT +""" + +import errno +import mimetools +import socket +from urlparse import urlsplit + +try: + from cStringIO import StringIO +except ImportError: + from StringIO import StringIO + +__all__ = ["HTTP", "HTTPResponse", "HTTPConnection", "HTTPSConnection", + "HTTPException", "NotConnected", "UnknownProtocol", + "UnknownTransferEncoding", "UnimplementedFileMode", + "IncompleteRead", "InvalidURL", "ImproperConnectionState", + "CannotSendRequest", "CannotSendHeader", "ResponseNotReady", + "BadStatusLine", "error", "responses"] + +HTTP_PORT = 80 +HTTPS_PORT = 443 + +_UNKNOWN = 'UNKNOWN' + +# connection states +_CS_IDLE = 'Idle' +_CS_REQ_STARTED = 'Request-started' +_CS_REQ_SENT = 'Request-sent' + +# status codes +# informational +CONTINUE = 100 +SWITCHING_PROTOCOLS = 101 +PROCESSING = 102 + +# successful +OK = 200 +CREATED = 201 +ACCEPTED = 202 +NON_AUTHORITATIVE_INFORMATION = 203 +NO_CONTENT = 204 +RESET_CONTENT = 205 +PARTIAL_CONTENT = 206 +MULTI_STATUS = 207 +IM_USED = 226 + +# redirection +MULTIPLE_CHOICES = 300 +MOVED_PERMANENTLY = 301 +FOUND = 302 +SEE_OTHER = 303 +NOT_MODIFIED = 304 +USE_PROXY = 305 +TEMPORARY_REDIRECT = 307 + +# client error +BAD_REQUEST = 400 +UNAUTHORIZED = 401 +PAYMENT_REQUIRED = 402 +FORBIDDEN = 403 +NOT_FOUND = 404 +METHOD_NOT_ALLOWED = 405 +NOT_ACCEPTABLE = 406 +PROXY_AUTHENTICATION_REQUIRED = 407 +REQUEST_TIMEOUT = 408 +CONFLICT = 409 +GONE = 410 +LENGTH_REQUIRED = 411 +PRECONDITION_FAILED = 412 +REQUEST_ENTITY_TOO_LARGE = 413 +REQUEST_URI_TOO_LONG = 414 +UNSUPPORTED_MEDIA_TYPE = 415 +REQUESTED_RANGE_NOT_SATISFIABLE = 416 +EXPECTATION_FAILED = 417 +UNPROCESSABLE_ENTITY = 422 +LOCKED = 423 +FAILED_DEPENDENCY = 424 +UPGRADE_REQUIRED = 426 + +# server error +INTERNAL_SERVER_ERROR = 500 +NOT_IMPLEMENTED = 501 +BAD_GATEWAY = 502 +SERVICE_UNAVAILABLE = 503 +GATEWAY_TIMEOUT = 504 +HTTP_VERSION_NOT_SUPPORTED = 505 +INSUFFICIENT_STORAGE = 507 +NOT_EXTENDED = 510 + +# Mapping status codes to official W3C names +responses = { + 100: 'Continue', + 101: 'Switching Protocols', + + 200: 'OK', + 201: 'Created', + 202: 'Accepted', + 203: 'Non-Authoritative Information', + 204: 'No Content', + 205: 'Reset Content', + 206: 'Partial Content', + + 300: 'Multiple Choices', + 301: 'Moved Permanently', + 302: 'Found', + 303: 'See Other', + 304: 'Not Modified', + 305: 'Use Proxy', + 306: '(Unused)', + 307: 'Temporary Redirect', + + 400: 'Bad Request', + 401: 'Unauthorized', + 402: 'Payment Required', + 403: 'Forbidden', + 404: 'Not Found', + 405: 'Method Not Allowed', + 406: 'Not Acceptable', + 407: 'Proxy Authentication Required', + 408: 'Request Timeout', + 409: 'Conflict', + 410: 'Gone', + 411: 'Length Required', + 412: 'Precondition Failed', + 413: 'Request Entity Too Large', + 414: 'Request-URI Too Long', + 415: 'Unsupported Media Type', + 416: 'Requested Range Not Satisfiable', + 417: 'Expectation Failed', + + 500: 'Internal Server Error', + 501: 'Not Implemented', + 502: 'Bad Gateway', + 503: 'Service Unavailable', + 504: 'Gateway Timeout', + 505: 'HTTP Version Not Supported', +} + +# maximal amount of data to read at one time in _safe_read +MAXAMOUNT = 1048576 + +class HTTPMessage(mimetools.Message): + + def addheader(self, key, value): + """Add header for field key handling repeats.""" + prev = self.dict.get(key) + if prev is None: + self.dict[key] = value + else: + combined = ", ".join((prev, value)) + self.dict[key] = combined + + def addcontinue(self, key, more): + """Add more field data from a continuation line.""" + prev = self.dict[key] + self.dict[key] = prev + "\n " + more + + def readheaders(self): + """Read header lines. + + Read header lines up to the entirely blank line that terminates them. + The (normally blank) line that ends the headers is skipped, but not + included in the returned list. If a non-header line ends the headers, + (which is an error), an attempt is made to backspace over it; it is + never included in the returned list. + + The variable self.status is set to the empty string if all went well, + otherwise it is an error message. The variable self.headers is a + completely uninterpreted list of lines contained in the header (so + printing them will reproduce the header exactly as it appears in the + file). + + If multiple header fields with the same name occur, they are combined + according to the rules in RFC 2616 sec 4.2: + + Appending each subsequent field-value to the first, each separated + by a comma. The order in which header fields with the same field-name + are received is significant to the interpretation of the combined + field value. + """ + # XXX The implementation overrides the readheaders() method of + # rfc822.Message. The base class design isn't amenable to + # customized behavior here so the method here is a copy of the + # base class code with a few small changes. + + self.dict = {} + self.unixfrom = '' + self.headers = hlist = [] + self.status = '' + headerseen = "" + firstline = 1 + startofline = unread = tell = None + if hasattr(self.fp, 'unread'): + unread = self.fp.unread + elif self.seekable: + tell = self.fp.tell + while True: + if tell: + try: + startofline = tell() + except IOError: + startofline = tell = None + self.seekable = 0 + line = self.fp.readline() + if not line: + self.status = 'EOF in headers' + break + # Skip unix From name time lines + if firstline and line.startswith('From '): + self.unixfrom = self.unixfrom + line + continue + firstline = 0 + if headerseen and line[0] in ' \t': + # XXX Not sure if continuation lines are handled properly + # for http and/or for repeating headers + # It's a continuation line. + hlist.append(line) + self.addcontinue(headerseen, line.strip()) + continue + elif self.iscomment(line): + # It's a comment. Ignore it. + continue + elif self.islast(line): + # Note! No pushback here! The delimiter line gets eaten. + break + headerseen = self.isheader(line) + if headerseen: + # It's a legal header line, save it. + hlist.append(line) + self.addheader(headerseen, line[len(headerseen)+1:].strip()) + continue + else: + # It's not a header line; throw it back and stop here. + if not self.dict: + self.status = 'No headers' + else: + self.status = 'Non-header line where header expected' + # Try to undo the read. + if unread: + unread(line) + elif tell: + self.fp.seek(startofline) + else: + self.status = self.status + '; bad seek' + break + +class HTTPResponse: + + # strict: If true, raise BadStatusLine if the status line can't be + # parsed as a valid HTTP/1.0 or 1.1 status line. By default it is + # false because it prevents clients from talking to HTTP/0.9 + # servers. Note that a response with a sufficiently corrupted + # status line will look like an HTTP/0.9 response. + + # See RFC 2616 sec 19.6 and RFC 1945 sec 6 for details. + + def __init__(self, sock, debuglevel=0, strict=0, method=None): + self.fp = sock.makefile('rb', 0) + self.debuglevel = debuglevel + self.strict = strict + self._method = method + + self.msg = None + + # from the Status-Line of the response + self.version = _UNKNOWN # HTTP-Version + self.status = _UNKNOWN # Status-Code + self.reason = _UNKNOWN # Reason-Phrase + + self.chunked = _UNKNOWN # is "chunked" being used? + self.chunk_left = _UNKNOWN # bytes left to read in current chunk + self.length = _UNKNOWN # number of bytes left in response + self.will_close = _UNKNOWN # conn will close at end of response + + def _read_status(self): + # Initialize with Simple-Response defaults + line = self.fp.readline() + if self.debuglevel > 0: + print "reply:", repr(line) + if not line: + # Presumably, the server closed the connection before + # sending a valid response. + raise BadStatusLine(line) + try: + [version, status, reason] = line.split(None, 2) + except ValueError: + try: + [version, status] = line.split(None, 1) + reason = "" + except ValueError: + # empty version will cause next test to fail and status + # will be treated as 0.9 response. + version = "" + if not version.startswith('HTTP/'): + if self.strict: + self.close() + raise BadStatusLine(line) + else: + # assume it's a Simple-Response from an 0.9 server + self.fp = LineAndFileWrapper(line, self.fp) + return "HTTP/0.9", 200, "" + + # The status code is a three-digit number + try: + status = int(status) + if status < 100 or status > 999: + raise BadStatusLine(line) + except ValueError: + raise BadStatusLine(line) + return version, status, reason + + def begin(self): + if self.msg is not None: + # we've already started reading the response + return + + # read until we get a non-100 response + while True: + version, status, reason = self._read_status() + if status != CONTINUE: + break + # skip the header from the 100 response + while True: + skip = self.fp.readline().strip() + if not skip: + break + if self.debuglevel > 0: + print "header:", skip + + self.status = status + self.reason = reason.strip() + if version == 'HTTP/1.0': + self.version = 10 + elif version.startswith('HTTP/1.'): + self.version = 11 # use HTTP/1.1 code for HTTP/1.x where x>=1 + elif version == 'HTTP/0.9': + self.version = 9 + else: + raise UnknownProtocol(version) + + if self.version == 9: + self.length = None + self.chunked = 0 + self.will_close = 1 + self.msg = HTTPMessage(StringIO()) + return + + self.msg = HTTPMessage(self.fp, 0) + if self.debuglevel > 0: + for hdr in self.msg.headers: + print "header:", hdr, + + # don't let the msg keep an fp + self.msg.fp = None + + # are we using the chunked-style of transfer encoding? + tr_enc = self.msg.getheader('transfer-encoding') + if tr_enc and tr_enc.lower() == "chunked": + self.chunked = 1 + self.chunk_left = None + else: + self.chunked = 0 + + # will the connection close at the end of the response? + self.will_close = self._check_close() + + # do we have a Content-Length? + # NOTE: RFC 2616, S4.4, #3 says we ignore this if tr_enc is "chunked" + length = self.msg.getheader('content-length') + if length and not self.chunked: + try: + self.length = int(length) + except ValueError: + self.length = None + else: + self.length = None + + # does the body have a fixed length? (of zero) + if (status == NO_CONTENT or status == NOT_MODIFIED or + 100 <= status < 200 or # 1xx codes + self._method == 'HEAD'): + self.length = 0 + + # if the connection remains open, and we aren't using chunked, and + # a content-length was not provided, then assume that the connection + # WILL close. + if not self.will_close and \ + not self.chunked and \ + self.length is None: + self.will_close = 1 + + def _check_close(self): + conn = self.msg.getheader('connection') + if self.version == 11: + # An HTTP/1.1 proxy is assumed to stay open unless + # explicitly closed. + conn = self.msg.getheader('connection') + if conn and "close" in conn.lower(): + return True + return False + + # Some HTTP/1.0 implementations have support for persistent + # connections, using rules different than HTTP/1.1. + + # For older HTTP, Keep-Alive indiciates persistent connection. + if self.msg.getheader('keep-alive'): + return False + + # At least Akamai returns a "Connection: Keep-Alive" header, + # which was supposed to be sent by the client. + if conn and "keep-alive" in conn.lower(): + return False + + # Proxy-Connection is a netscape hack. + pconn = self.msg.getheader('proxy-connection') + if pconn and "keep-alive" in pconn.lower(): + return False + + # otherwise, assume it will close + return True + + def close(self): + if self.fp: + self.fp.close() + self.fp = None + + def isclosed(self): + # NOTE: it is possible that we will not ever call self.close(). This + # case occurs when will_close is TRUE, length is None, and we + # read up to the last byte, but NOT past it. + # + # IMPLIES: if will_close is FALSE, then self.close() will ALWAYS be + # called, meaning self.isclosed() is meaningful. + return self.fp is None + + # XXX It would be nice to have readline and __iter__ for this, too. + + def read(self, amt=None): + if self.fp is None: + return '' + + if self.chunked: + return self._read_chunked(amt) + + if amt is None: + # unbounded read + if self.length is None: + s = self.fp.read() + else: + s = self._safe_read(self.length) + self.length = 0 + self.close() # we read everything + return s + + if self.length is not None: + if amt > self.length: + # clip the read to the "end of response" + amt = self.length + + # we do not use _safe_read() here because this may be a .will_close + # connection, and the user is reading more bytes than will be provided + # (for example, reading in 1k chunks) + s = self.fp.read(amt) + if self.length is not None: + self.length -= len(s) + + return s + + def _read_chunked(self, amt): + assert self.chunked != _UNKNOWN + chunk_left = self.chunk_left + value = '' + + # XXX This accumulates chunks by repeated string concatenation, + # which is not efficient as the number or size of chunks gets big. + while True: + if chunk_left is None: + line = self.fp.readline() + i = line.find(';') + if i >= 0: + line = line[:i] # strip chunk-extensions + chunk_left = int(line, 16) + if chunk_left == 0: + break + if amt is None: + value += self._safe_read(chunk_left) + elif amt < chunk_left: + value += self._safe_read(amt) + self.chunk_left = chunk_left - amt + return value + elif amt == chunk_left: + value += self._safe_read(amt) + self._safe_read(2) # toss the CRLF at the end of the chunk + self.chunk_left = None + return value + else: + value += self._safe_read(chunk_left) + amt -= chunk_left + + # we read the whole chunk, get another + self._safe_read(2) # toss the CRLF at the end of the chunk + chunk_left = None + + # read and discard trailer up to the CRLF terminator + ### note: we shouldn't have any trailers! + while True: + line = self.fp.readline() + if line == '\r\n': + break + + # we read everything; close the "file" + self.close() + + return value + + def _safe_read(self, amt): + """Read the number of bytes requested, compensating for partial reads. + + Normally, we have a blocking socket, but a read() can be interrupted + by a signal (resulting in a partial read). + + Note that we cannot distinguish between EOF and an interrupt when zero + bytes have been read. IncompleteRead() will be raised in this + situation. + + This function should be used when bytes "should" be present for + reading. If the bytes are truly not available (due to EOF), then the + IncompleteRead exception can be used to detect the problem. + """ + s = [] + while amt > 0: + chunk = self.fp.read(min(amt, MAXAMOUNT)) + if not chunk: + raise IncompleteRead(s) + s.append(chunk) + amt -= len(chunk) + return ''.join(s) + + def getheader(self, name, default=None): + if self.msg is None: + raise ResponseNotReady() + return self.msg.getheader(name, default) + + def getheaders(self): + """Return list of (header, value) tuples.""" + if self.msg is None: + raise ResponseNotReady() + return self.msg.items() + + +class HTTPConnection: + + _http_vsn = 11 + _http_vsn_str = 'HTTP/1.1' + + response_class = HTTPResponse + default_port = HTTP_PORT + auto_open = 1 + debuglevel = 0 + strict = 0 + + def __init__(self, host, port=None, strict=None): + self.sock = None + self._buffer = [] + self.__response = None + self.__state = _CS_IDLE + self._method = None + + self._set_hostport(host, port) + if strict is not None: + self.strict = strict + + def _set_hostport(self, host, port): + if port is None: + i = host.rfind(':') + j = host.rfind(']') # ipv6 addresses have [...] + if i > j: + try: + port = int(host[i+1:]) + except ValueError: + raise InvalidURL("nonnumeric port: '%s'" % host[i+1:]) + host = host[:i] + else: + port = self.default_port + if host and host[0] == '[' and host[-1] == ']': + host = host[1:-1] + self.host = host + self.port = port + + def set_debuglevel(self, level): + self.debuglevel = level + + def connect(self): + """Connect to the host and port specified in __init__.""" + msg = "getaddrinfo returns an empty list" + for res in socket.getaddrinfo(self.host, self.port, 0, + socket.SOCK_STREAM): + af, socktype, proto, canonname, sa = res + try: + self.sock = socket.socket(af, socktype, proto) + if self.debuglevel > 0: + print "connect: (%s, %s)" % (self.host, self.port) + self.sock.connect(sa) + except socket.error, msg: + if self.debuglevel > 0: + print 'connect fail:', (self.host, self.port) + if self.sock: + self.sock.close() + self.sock = None + continue + break + if not self.sock: + raise socket.error, msg + + def close(self): + """Close the connection to the HTTP server.""" + if self.sock: + self.sock.close() # close it manually... there may be other refs + self.sock = None + if self.__response: + self.__response.close() + self.__response = None + self.__state = _CS_IDLE + + def send(self, str): + """Send `str' to the server.""" + if self.sock is None: + if self.auto_open: + self.connect() + else: + raise NotConnected() + + # send the data to the server. if we get a broken pipe, then close + # the socket. we want to reconnect when somebody tries to send again. + # + # NOTE: we DO propagate the error, though, because we cannot simply + # ignore the error... the caller will know if they can retry. + if self.debuglevel > 0: + print "send:", repr(str) + try: + self.sock.sendall(str) + except socket.error, v: + if v[0] == 32: # Broken pipe + self.close() + raise + + def _output(self, s): + """Add a line of output to the current request buffer. + + Assumes that the line does *not* end with \\r\\n. + """ + self._buffer.append(s) + + def _send_output(self): + """Send the currently buffered request and clear the buffer. + + Appends an extra \\r\\n to the buffer. + """ + self._buffer.extend(("", "")) + msg = "\r\n".join(self._buffer) + del self._buffer[:] + self.send(msg) + + def putrequest(self, method, url, skip_host=0, skip_accept_encoding=0): + """Send a request to the server. + + `method' specifies an HTTP request method, e.g. 'GET'. + `url' specifies the object being requested, e.g. '/index.html'. + `skip_host' if True does not add automatically a 'Host:' header + `skip_accept_encoding' if True does not add automatically an + 'Accept-Encoding:' header + """ + + # if a prior response has been completed, then forget about it. + if self.__response and self.__response.isclosed(): + self.__response = None + + + # in certain cases, we cannot issue another request on this connection. + # this occurs when: + # 1) we are in the process of sending a request. (_CS_REQ_STARTED) + # 2) a response to a previous request has signalled that it is going + # to close the connection upon completion. + # 3) the headers for the previous response have not been read, thus + # we cannot determine whether point (2) is true. (_CS_REQ_SENT) + # + # if there is no prior response, then we can request at will. + # + # if point (2) is true, then we will have passed the socket to the + # response (effectively meaning, "there is no prior response"), and + # will open a new one when a new request is made. + # + # Note: if a prior response exists, then we *can* start a new request. + # We are not allowed to begin fetching the response to this new + # request, however, until that prior response is complete. + # + if self.__state == _CS_IDLE: + self.__state = _CS_REQ_STARTED + else: + raise CannotSendRequest() + + # Save the method we use, we need it later in the response phase + self._method = method + if not url: + url = '/' + str = '%s %s %s' % (method, url, self._http_vsn_str) + + self._output(str) + + if self._http_vsn == 11: + # Issue some standard headers for better HTTP/1.1 compliance + + if not skip_host: + # this header is issued *only* for HTTP/1.1 + # connections. more specifically, this means it is + # only issued when the client uses the new + # HTTPConnection() class. backwards-compat clients + # will be using HTTP/1.0 and those clients may be + # issuing this header themselves. we should NOT issue + # it twice; some web servers (such as Apache) barf + # when they see two Host: headers + + # If we need a non-standard port,include it in the + # header. If the request is going through a proxy, + # but the host of the actual URL, not the host of the + # proxy. + + netloc = '' + if url.startswith('http'): + nil, netloc, nil, nil, nil = urlsplit(url) + + if netloc: + try: + netloc_enc = netloc.encode("ascii") + except UnicodeEncodeError: + netloc_enc = netloc.encode("idna") + self.putheader('Host', netloc_enc) + else: + try: + host_enc = self.host.encode("ascii") + except UnicodeEncodeError: + host_enc = self.host.encode("idna") + if self.port == HTTP_PORT: + self.putheader('Host', host_enc) + else: + self.putheader('Host', "%s:%s" % (host_enc, self.port)) + + # note: we are assuming that clients will not attempt to set these + # headers since *this* library must deal with the + # consequences. this also means that when the supporting + # libraries are updated to recognize other forms, then this + # code should be changed (removed or updated). + + # we only want a Content-Encoding of "identity" since we don't + # support encodings such as x-gzip or x-deflate. + if not skip_accept_encoding: + self.putheader('Accept-Encoding', 'identity') + + # we can accept "chunked" Transfer-Encodings, but no others + # NOTE: no TE header implies *only* "chunked" + #self.putheader('TE', 'chunked') + + # if TE is supplied in the header, then it must appear in a + # Connection header. + #self.putheader('Connection', 'TE') + + else: + # For HTTP/1.0, the server will assume "not chunked" + pass + + def putheader(self, header, value): + """Send a request header line to the server. + + For example: h.putheader('Accept', 'text/html') + """ + if self.__state != _CS_REQ_STARTED: + raise CannotSendHeader() + + str = '%s: %s' % (header, value) + self._output(str) + + def endheaders(self): + """Indicate that the last header line has been sent to the server.""" + + if self.__state == _CS_REQ_STARTED: + self.__state = _CS_REQ_SENT + else: + raise CannotSendHeader() + + self._send_output() + + def request(self, method, url, body=None, headers={}): + """Send a complete request to the server.""" + + try: + self._send_request(method, url, body, headers) + except socket.error, v: + # trap 'Broken pipe' if we're allowed to automatically reconnect + if v[0] != 32 or not self.auto_open: + raise + # try one more time + self._send_request(method, url, body, headers) + + def _send_request(self, method, url, body, headers): + # honour explicitly requested Host: and Accept-Encoding headers + header_names = dict.fromkeys([k.lower() for k in headers]) + skips = {} + if 'host' in header_names: + skips['skip_host'] = 1 + if 'accept-encoding' in header_names: + skips['skip_accept_encoding'] = 1 + + self.putrequest(method, url, **skips) + + if body and ('content-length' not in header_names): + self.putheader('Content-Length', str(len(body))) + for hdr, value in headers.iteritems(): + self.putheader(hdr, value) + self.endheaders() + + if body: + self.send(body) + + def getresponse(self): + "Get the response from the server." + + # if a prior response has been completed, then forget about it. + if self.__response and self.__response.isclosed(): + self.__response = None + + # + # if a prior response exists, then it must be completed (otherwise, we + # cannot read this response's header to determine the connection-close + # behavior) + # + # note: if a prior response existed, but was connection-close, then the + # socket and response were made independent of this HTTPConnection + # object since a new request requires that we open a whole new + # connection + # + # this means the prior response had one of two states: + # 1) will_close: this connection was reset and the prior socket and + # response operate independently + # 2) persistent: the response was retained and we await its + # isclosed() status to become true. + # + if self.__state != _CS_REQ_SENT or self.__response: + raise ResponseNotReady() + + if self.debuglevel > 0: + response = self.response_class(self.sock, self.debuglevel, + strict=self.strict, + method=self._method) + else: + response = self.response_class(self.sock, strict=self.strict, + method=self._method) + + response.begin() + assert response.will_close != _UNKNOWN + self.__state = _CS_IDLE + + if response.will_close: + # this effectively passes the connection to the response + self.close() + else: + # remember this, so we can tell when it is complete + self.__response = response + + return response + +# The next several classes are used to define FakeSocket, a socket-like +# interface to an SSL connection. + +# The primary complexity comes from faking a makefile() method. The +# standard socket makefile() implementation calls dup() on the socket +# file descriptor. As a consequence, clients can call close() on the +# parent socket and its makefile children in any order. The underlying +# socket isn't closed until they are all closed. + +# The implementation uses reference counting to keep the socket open +# until the last client calls close(). SharedSocket keeps track of +# the reference counting and SharedSocketClient provides an constructor +# and close() method that call incref() and decref() correctly. + +class SharedSocket: + + def __init__(self, sock): + self.sock = sock + self._refcnt = 0 + + def incref(self): + self._refcnt += 1 + + def decref(self): + self._refcnt -= 1 + assert self._refcnt >= 0 + if self._refcnt == 0: + self.sock.close() + + def __del__(self): + self.sock.close() + +class SharedSocketClient: + + def __init__(self, shared): + self._closed = 0 + self._shared = shared + self._shared.incref() + self._sock = shared.sock + + def close(self): + if not self._closed: + self._shared.decref() + self._closed = 1 + self._shared = None + +class SSLFile(SharedSocketClient): + """File-like object wrapping an SSL socket.""" + + BUFSIZE = 8192 + + def __init__(self, sock, ssl, bufsize=None): + SharedSocketClient.__init__(self, sock) + self._ssl = ssl + self._buf = '' + self._bufsize = bufsize or self.__class__.BUFSIZE + + def _read(self): + buf = '' + # put in a loop so that we retry on transient errors + while True: + try: + buf = self._ssl.read(self._bufsize) + except socket.sslerror, err: + if (err[0] == socket.SSL_ERROR_WANT_READ + or err[0] == socket.SSL_ERROR_WANT_WRITE): + continue + if (err[0] == socket.SSL_ERROR_ZERO_RETURN + or err[0] == socket.SSL_ERROR_EOF): + break + raise + except socket.error, err: + if err[0] == errno.EINTR: + continue + if err[0] == errno.EBADF: + # XXX socket was closed? + break + raise + else: + break + return buf + + def read(self, size=None): + L = [self._buf] + avail = len(self._buf) + while size is None or avail < size: + s = self._read() + if s == '': + break + L.append(s) + avail += len(s) + all = "".join(L) + if size is None: + self._buf = '' + return all + else: + self._buf = all[size:] + return all[:size] + + def readline(self): + L = [self._buf] + self._buf = '' + while 1: + i = L[-1].find("\n") + if i >= 0: + break + s = self._read() + if s == '': + break + L.append(s) + if i == -1: + # loop exited because there is no more data + return "".join(L) + else: + all = "".join(L) + # XXX could do enough bookkeeping not to do a 2nd search + i = all.find("\n") + 1 + line = all[:i] + self._buf = all[i:] + return line + + def readlines(self, sizehint=0): + total = 0 + list = [] + while True: + line = self.readline() + if not line: + break + list.append(line) + total += len(line) + if sizehint and total >= sizehint: + break + return list + + def fileno(self): + return self._sock.fileno() + + def __iter__(self): + return self + + def next(self): + line = self.readline() + if not line: + raise StopIteration + return line + +class FakeSocket(SharedSocketClient): + + class _closedsocket: + def __getattr__(self, name): + raise error(9, 'Bad file descriptor') + + def __init__(self, sock, ssl): + sock = SharedSocket(sock) + SharedSocketClient.__init__(self, sock) + self._ssl = ssl + + def close(self): + SharedSocketClient.close(self) + self._sock = self.__class__._closedsocket() + + def makefile(self, mode, bufsize=None): + if mode != 'r' and mode != 'rb': + raise UnimplementedFileMode() + return SSLFile(self._shared, self._ssl, bufsize) + + def send(self, stuff, flags = 0): + return self._ssl.write(stuff) + + sendall = send + + def recv(self, len = 1024, flags = 0): + return self._ssl.read(len) + + def __getattr__(self, attr): + return getattr(self._sock, attr) + + +class HTTPSConnection(HTTPConnection): + "This class allows communication via SSL." + + default_port = HTTPS_PORT + + def __init__(self, host, port=None, key_file=None, cert_file=None, + strict=None): + HTTPConnection.__init__(self, host, port, strict) + self.key_file = key_file + self.cert_file = cert_file + + def connect(self): + "Connect to a host on a given (SSL) port." + + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.connect((self.host, self.port)) + ssl = socket.ssl(sock, self.key_file, self.cert_file) + self.sock = FakeSocket(sock, ssl) + + +class HTTP: + "Compatibility class with httplib.py from 1.5." + + _http_vsn = 10 + _http_vsn_str = 'HTTP/1.0' + + debuglevel = 0 + + _connection_class = HTTPConnection + + def __init__(self, host='', port=None, strict=None): + "Provide a default host, since the superclass requires one." + + # some joker passed 0 explicitly, meaning default port + if port == 0: + port = None + + # Note that we may pass an empty string as the host; this will throw + # an error when we attempt to connect. Presumably, the client code + # will call connect before then, with a proper host. + self._setup(self._connection_class(host, port, strict)) + + def _setup(self, conn): + self._conn = conn + + # set up delegation to flesh out interface + self.send = conn.send + self.putrequest = conn.putrequest + self.endheaders = conn.endheaders + self.set_debuglevel = conn.set_debuglevel + + conn._http_vsn = self._http_vsn + conn._http_vsn_str = self._http_vsn_str + + self.file = None + + def connect(self, host=None, port=None): + "Accept arguments to set the host/port, since the superclass doesn't." + + if host is not None: + self._conn._set_hostport(host, port) + self._conn.connect() + + def getfile(self): + "Provide a getfile, since the superclass' does not use this concept." + return self.file + + def putheader(self, header, *values): + "The superclass allows only one value argument." + self._conn.putheader(header, '\r\n\t'.join(values)) + + def getreply(self): + """Compat definition since superclass does not define it. + + Returns a tuple consisting of: + - server status code (e.g. '200' if all goes well) + - server "reason" corresponding to status code + - any RFC822 headers in the response from the server + """ + try: + response = self._conn.getresponse() + except BadStatusLine, e: + ### hmm. if getresponse() ever closes the socket on a bad request, + ### then we are going to have problems with self.sock + + ### should we keep this behavior? do people use it? + # keep the socket open (as a file), and return it + self.file = self._conn.sock.makefile('rb', 0) + + # close our socket -- we want to restart after any protocol error + self.close() + + self.headers = None + return -1, e.line, None + + self.headers = response.msg + self.file = response.fp + return response.status, response.reason, response.msg + + def close(self): + self._conn.close() + + # note that self.file == response.fp, which gets closed by the + # superclass. just clear the object ref here. + ### hmm. messy. if status==-1, then self.file is owned by us. + ### well... we aren't explicitly closing, but losing this ref will + ### do it + self.file = None + +if hasattr(socket, 'ssl'): + class HTTPS(HTTP): + """Compatibility with 1.5 httplib interface + + Python 1.5.2 did not have an HTTPS class, but it defined an + interface for sending http requests that is also useful for + https. + """ + + _connection_class = HTTPSConnection + + def __init__(self, host='', port=None, key_file=None, cert_file=None, + strict=None): + # provide a default host, pass the X509 cert info + + # urf. compensate for bad input. + if port == 0: + port = None + self._setup(self._connection_class(host, port, key_file, + cert_file, strict)) + + # we never actually use these for anything, but we keep them + # here for compatibility with post-1.5.2 CVS. + self.key_file = key_file + self.cert_file = cert_file + + +class HTTPException(Exception): + # Subclasses that define an __init__ must call Exception.__init__ + # or define self.args. Otherwise, str() will fail. + pass + +class NotConnected(HTTPException): + pass + +class InvalidURL(HTTPException): + pass + +class UnknownProtocol(HTTPException): + def __init__(self, version): + self.args = version, + self.version = version + +class UnknownTransferEncoding(HTTPException): + pass + +class UnimplementedFileMode(HTTPException): + pass + +class IncompleteRead(HTTPException): + def __init__(self, partial): + self.args = partial, + self.partial = partial + +class ImproperConnectionState(HTTPException): + pass + +class CannotSendRequest(ImproperConnectionState): + pass + +class CannotSendHeader(ImproperConnectionState): + pass + +class ResponseNotReady(ImproperConnectionState): + pass + +class BadStatusLine(HTTPException): + def __init__(self, line): + self.args = line, + self.line = line + +# for backwards compatibility +error = HTTPException + +class LineAndFileWrapper: + """A limited file-like object for HTTP/0.9 responses.""" + + # The status-line parsing code calls readline(), which normally + # get the HTTP status line. For a 0.9 response, however, this is + # actually the first line of the body! Clients need to get a + # readable file object that contains that line. + + def __init__(self, line, file): + self._line = line + self._file = file + self._line_consumed = 0 + self._line_offset = 0 + self._line_left = len(line) + + def __getattr__(self, attr): + return getattr(self._file, attr) + + def _done(self): + # called when the last byte is read from the line. After the + # call, all read methods are delegated to the underlying file + # object. + self._line_consumed = 1 + self.read = self._file.read + self.readline = self._file.readline + self.readlines = self._file.readlines + + def read(self, amt=None): + if self._line_consumed: + return self._file.read(amt) + assert self._line_left + if amt is None or amt > self._line_left: + s = self._line[self._line_offset:] + self._done() + if amt is None: + return s + self._file.read() + else: + return s + self._file.read(amt - len(s)) + else: + assert amt <= self._line_left + i = self._line_offset + j = i + amt + s = self._line[i:j] + self._line_offset = j + self._line_left -= amt + if self._line_left == 0: + self._done() + return s + + def readline(self): + if self._line_consumed: + return self._file.readline() + assert self._line_left + s = self._line[self._line_offset:] + self._done() + return s + + def readlines(self, size=None): + if self._line_consumed: + return self._file.readlines(size) + assert self._line_left + L = [self._line[self._line_offset:]] + self._done() + if size is None: + return L + self._file.readlines() + else: + return L + self._file.readlines(size) + +def test(): + """Test this module. + + A hodge podge of tests collected here, because they have too many + external dependencies for the regular test suite. + """ + + import sys + import getopt + opts, args = getopt.getopt(sys.argv[1:], 'd') + dl = 0 + for o, a in opts: + if o == '-d': dl = dl + 1 + host = 'www.python.org' + selector = '/' + if args[0:]: host = args[0] + if args[1:]: selector = args[1] + h = HTTP() + h.set_debuglevel(dl) + h.connect(host) + h.putrequest('GET', selector) + h.endheaders() + status, reason, headers = h.getreply() + print 'status =', status + print 'reason =', reason + print "read", len(h.getfile().read()) + print + if headers: + for header in headers.headers: print header.strip() + print + + # minimal test that code to extract host from url works + class HTTP11(HTTP): + _http_vsn = 11 + _http_vsn_str = 'HTTP/1.1' + + h = HTTP11('www.python.org') + h.putrequest('GET', 'http://www.python.org/~jeremy/') + h.endheaders() + h.getreply() + h.close() + + if hasattr(socket, 'ssl'): + + for host, selector in (('sourceforge.net', '/projects/python'), + ): + print "https://%s%s" % (host, selector) + hs = HTTPS() + hs.set_debuglevel(dl) + hs.connect(host) + hs.putrequest('GET', selector) + hs.endheaders() + status, reason, headers = hs.getreply() + print 'status =', status + print 'reason =', reason + print "read", len(hs.getfile().read()) + print + if headers: + for header in headers.headers: print header.strip() + print + +if __name__ == '__main__': + test() diff --git a/thirdparty/python25/Lib/linecache.py b/thirdparty/python25/Lib/linecache.py new file mode 100644 index 000000000..56ce490cb --- /dev/null +++ b/thirdparty/python25/Lib/linecache.py @@ -0,0 +1,136 @@ +"""Cache lines from files. + +This is intended to read lines from modules imported -- hence if a filename +is not found, it will look down the module search path for a file by +that name. +""" + +import sys +import os + +__all__ = ["getline", "clearcache", "checkcache"] + +def getline(filename, lineno, module_globals=None): + lines = getlines(filename, module_globals) + if 1 <= lineno <= len(lines): + return lines[lineno-1] + else: + return '' + + +# The cache + +cache = {} # The cache + + +def clearcache(): + """Clear the cache entirely.""" + + global cache + cache = {} + + +def getlines(filename, module_globals=None): + """Get the lines for a file from the cache. + Update the cache if it doesn't contain an entry for this file already.""" + + if filename in cache: + return cache[filename][2] + else: + return updatecache(filename, module_globals) + + +def checkcache(filename=None): + """Discard cache entries that are out of date. + (This is not checked upon each call!)""" + + if filename is None: + filenames = cache.keys() + else: + if filename in cache: + filenames = [filename] + else: + return + + for filename in filenames: + size, mtime, lines, fullname = cache[filename] + if mtime is None: + continue # no-op for files loaded via a __loader__ + try: + stat = os.stat(fullname) + except os.error: + del cache[filename] + continue + if size != stat.st_size or mtime != stat.st_mtime: + del cache[filename] + + +def updatecache(filename, module_globals=None): + """Update a cache entry and return its list of lines. + If something's wrong, print a message, discard the cache entry, + and return an empty list.""" + + if filename in cache: + del cache[filename] + if not filename or filename[0] + filename[-1] == '<>': + return [] + + fullname = filename + try: + stat = os.stat(fullname) + except os.error, msg: + basename = os.path.split(filename)[1] + + # Try for a __loader__, if available + if module_globals and '__loader__' in module_globals: + name = module_globals.get('__name__') + loader = module_globals['__loader__'] + get_source = getattr(loader, 'get_source', None) + + if name and get_source: + if basename.startswith(name.split('.')[-1]+'.'): + try: + data = get_source(name) + except (ImportError, IOError): + pass + else: + if data is None: + # No luck, the PEP302 loader cannot find the source + # for this module. + return [] + cache[filename] = ( + len(data), None, + [line+'\n' for line in data.splitlines()], fullname + ) + return cache[filename][2] + + # Try looking through the module search path. + + for dirname in sys.path: + # When using imputil, sys.path may contain things other than + # strings; ignore them when it happens. + try: + fullname = os.path.join(dirname, basename) + except (TypeError, AttributeError): + # Not sufficiently string-like to do anything useful with. + pass + else: + try: + stat = os.stat(fullname) + break + except os.error: + pass + else: + # No luck +## print '*** Cannot stat', filename, ':', msg + return [] + try: + fp = open(fullname, 'rU') + lines = fp.readlines() + fp.close() + except IOError, msg: +## print '*** Cannot open', fullname, ':', msg + return [] + size, mtime = stat.st_size, stat.st_mtime + cache[filename] = size, mtime, lines, fullname + return lines diff --git a/thirdparty/python25/Lib/locale.py b/thirdparty/python25/Lib/locale.py new file mode 100644 index 000000000..b808bb17c --- /dev/null +++ b/thirdparty/python25/Lib/locale.py @@ -0,0 +1,1562 @@ +""" Locale support. + + The module provides low-level access to the C lib's locale APIs + and adds high level number formatting APIs as well as a locale + aliasing engine to complement these. + + The aliasing engine includes support for many commonly used locale + names and maps them to values suitable for passing to the C lib's + setlocale() function. It also includes default encodings for all + supported locale names. + +""" + +import sys, encodings, encodings.aliases + +# Try importing the _locale module. +# +# If this fails, fall back on a basic 'C' locale emulation. + +# Yuck: LC_MESSAGES is non-standard: can't tell whether it exists before +# trying the import. So __all__ is also fiddled at the end of the file. +__all__ = ["setlocale","Error","localeconv","strcoll","strxfrm", + "format","str","atof","atoi","LC_CTYPE","LC_COLLATE", + "LC_TIME","LC_MONETARY","LC_NUMERIC", "LC_ALL","CHAR_MAX"] + +try: + + from _locale import * + +except ImportError: + + # Locale emulation + + CHAR_MAX = 127 + LC_ALL = 6 + LC_COLLATE = 3 + LC_CTYPE = 0 + LC_MESSAGES = 5 + LC_MONETARY = 4 + LC_NUMERIC = 1 + LC_TIME = 2 + Error = ValueError + + def localeconv(): + """ localeconv() -> dict. + Returns numeric and monetary locale-specific parameters. + """ + # 'C' locale default values + return {'grouping': [127], + 'currency_symbol': '', + 'n_sign_posn': 127, + 'p_cs_precedes': 127, + 'n_cs_precedes': 127, + 'mon_grouping': [], + 'n_sep_by_space': 127, + 'decimal_point': '.', + 'negative_sign': '', + 'positive_sign': '', + 'p_sep_by_space': 127, + 'int_curr_symbol': '', + 'p_sign_posn': 127, + 'thousands_sep': '', + 'mon_thousands_sep': '', + 'frac_digits': 127, + 'mon_decimal_point': '', + 'int_frac_digits': 127} + + def setlocale(category, value=None): + """ setlocale(integer,string=None) -> string. + Activates/queries locale processing. + """ + if value not in (None, '', 'C'): + raise Error, '_locale emulation only supports "C" locale' + return 'C' + + def strcoll(a,b): + """ strcoll(string,string) -> int. + Compares two strings according to the locale. + """ + return cmp(a,b) + + def strxfrm(s): + """ strxfrm(string) -> string. + Returns a string that behaves for cmp locale-aware. + """ + return s + +### Number formatting APIs + +# Author: Martin von Loewis +# improved by Georg Brandl + +#perform the grouping from right to left +def _group(s, monetary=False): + conv = localeconv() + thousands_sep = conv[monetary and 'mon_thousands_sep' or 'thousands_sep'] + grouping = conv[monetary and 'mon_grouping' or 'grouping'] + if not grouping: + return (s, 0) + result = "" + seps = 0 + spaces = "" + if s[-1] == ' ': + sp = s.find(' ') + spaces = s[sp:] + s = s[:sp] + while s and grouping: + # if grouping is -1, we are done + if grouping[0] == CHAR_MAX: + break + # 0: re-use last group ad infinitum + elif grouping[0] != 0: + #process last group + group = grouping[0] + grouping = grouping[1:] + if result: + result = s[-group:] + thousands_sep + result + seps += 1 + else: + result = s[-group:] + s = s[:-group] + if s and s[-1] not in "0123456789": + # the leading string is only spaces and signs + return s + result + spaces, seps + if not result: + return s + spaces, seps + if s: + result = s + thousands_sep + result + seps += 1 + return result + spaces, seps + +def format(percent, value, grouping=False, monetary=False, *additional): + """Returns the locale-aware substitution of a %? specifier + (percent). + + additional is for format strings which contain one or more + '*' modifiers.""" + # this is only for one-percent-specifier strings and this should be checked + if percent[0] != '%': + raise ValueError("format() must be given exactly one %char " + "format specifier") + if additional: + formatted = percent % ((value,) + additional) + else: + formatted = percent % value + # floats and decimal ints need special action! + if percent[-1] in 'eEfFgG': + seps = 0 + parts = formatted.split('.') + if grouping: + parts[0], seps = _group(parts[0], monetary=monetary) + decimal_point = localeconv()[monetary and 'mon_decimal_point' + or 'decimal_point'] + formatted = decimal_point.join(parts) + while seps: + sp = formatted.find(' ') + if sp == -1: break + formatted = formatted[:sp] + formatted[sp+1:] + seps -= 1 + elif percent[-1] in 'diu': + if grouping: + formatted = _group(formatted, monetary=monetary)[0] + return formatted + +import re, operator +_percent_re = re.compile(r'%(?:\((?P.*?)\))?' + r'(?P[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]') + +def format_string(f, val, grouping=False): + """Formats a string in the same way that the % formatting would use, + but takes the current locale into account. + Grouping is applied if the third parameter is true.""" + percents = list(_percent_re.finditer(f)) + new_f = _percent_re.sub('%s', f) + + if isinstance(val, tuple): + new_val = list(val) + i = 0 + for perc in percents: + starcount = perc.group('modifiers').count('*') + new_val[i] = format(perc.group(), new_val[i], grouping, False, *new_val[i+1:i+1+starcount]) + del new_val[i+1:i+1+starcount] + i += (1 + starcount) + val = tuple(new_val) + elif operator.isMappingType(val): + for perc in percents: + key = perc.group("key") + val[key] = format(perc.group(), val[key], grouping) + else: + # val is a single value + val = format(percents[0].group(), val, grouping) + + return new_f % val + +def currency(val, symbol=True, grouping=False, international=False): + """Formats val according to the currency settings + in the current locale.""" + conv = localeconv() + + # check for illegal values + digits = conv[international and 'int_frac_digits' or 'frac_digits'] + if digits == 127: + raise ValueError("Currency formatting is not possible using " + "the 'C' locale.") + + s = format('%%.%if' % digits, abs(val), grouping, monetary=True) + # '<' and '>' are markers if the sign must be inserted between symbol and value + s = '<' + s + '>' + + if symbol: + smb = conv[international and 'int_curr_symbol' or 'currency_symbol'] + precedes = conv[val<0 and 'n_cs_precedes' or 'p_cs_precedes'] + separated = conv[val<0 and 'n_sep_by_space' or 'p_sep_by_space'] + + if precedes: + s = smb + (separated and ' ' or '') + s + else: + s = s + (separated and ' ' or '') + smb + + sign_pos = conv[val<0 and 'n_sign_posn' or 'p_sign_posn'] + sign = conv[val<0 and 'negative_sign' or 'positive_sign'] + + if sign_pos == 0: + s = '(' + s + ')' + elif sign_pos == 1: + s = sign + s + elif sign_pos == 2: + s = s + sign + elif sign_pos == 3: + s = s.replace('<', sign) + elif sign_pos == 4: + s = s.replace('>', sign) + else: + # the default if nothing specified; + # this should be the most fitting sign position + s = sign + s + + return s.replace('<', '').replace('>', '') + +def str(val): + """Convert float to integer, taking the locale into account.""" + return format("%.12g", val) + +def atof(string, func=float): + "Parses a string as a float according to the locale settings." + #First, get rid of the grouping + ts = localeconv()['thousands_sep'] + if ts: + string = string.replace(ts, '') + #next, replace the decimal point with a dot + dd = localeconv()['decimal_point'] + if dd: + string = string.replace(dd, '.') + #finally, parse the string + return func(string) + +def atoi(str): + "Converts a string to an integer according to the locale settings." + return atof(str, int) + +def _test(): + setlocale(LC_ALL, "") + #do grouping + s1 = format("%d", 123456789,1) + print s1, "is", atoi(s1) + #standard formatting + s1 = str(3.14) + print s1, "is", atof(s1) + +### Locale name aliasing engine + +# Author: Marc-Andre Lemburg, mal@lemburg.com +# Various tweaks by Fredrik Lundh + +# store away the low-level version of setlocale (it's +# overridden below) +_setlocale = setlocale + +def normalize(localename): + + """ Returns a normalized locale code for the given locale + name. + + The returned locale code is formatted for use with + setlocale(). + + If normalization fails, the original name is returned + unchanged. + + If the given encoding is not known, the function defaults to + the default encoding for the locale code just like setlocale() + does. + + """ + # Normalize the locale name and extract the encoding + fullname = localename.lower() + if ':' in fullname: + # ':' is sometimes used as encoding delimiter. + fullname = fullname.replace(':', '.') + if '.' in fullname: + langname, encoding = fullname.split('.')[:2] + fullname = langname + '.' + encoding + else: + langname = fullname + encoding = '' + + # First lookup: fullname (possibly with encoding) + norm_encoding = encoding.replace('-', '') + norm_encoding = norm_encoding.replace('_', '') + lookup_name = langname + '.' + encoding + code = locale_alias.get(lookup_name, None) + if code is not None: + return code + #print 'first lookup failed' + + # Second try: langname (without encoding) + code = locale_alias.get(langname, None) + if code is not None: + #print 'langname lookup succeeded' + if '.' in code: + langname, defenc = code.split('.') + else: + langname = code + defenc = '' + if encoding: + # Convert the encoding to a C lib compatible encoding string + norm_encoding = encodings.normalize_encoding(encoding) + #print 'norm encoding: %r' % norm_encoding + norm_encoding = encodings.aliases.aliases.get(norm_encoding, + norm_encoding) + #print 'aliased encoding: %r' % norm_encoding + encoding = locale_encoding_alias.get(norm_encoding, + norm_encoding) + else: + encoding = defenc + #print 'found encoding %r' % encoding + if encoding: + return langname + '.' + encoding + else: + return langname + + else: + return localename + +def _parse_localename(localename): + + """ Parses the locale code for localename and returns the + result as tuple (language code, encoding). + + The localename is normalized and passed through the locale + alias engine. A ValueError is raised in case the locale name + cannot be parsed. + + The language code corresponds to RFC 1766. code and encoding + can be None in case the values cannot be determined or are + unknown to this implementation. + + """ + code = normalize(localename) + if '@' in code: + # Deal with locale modifiers + code, modifier = code.split('@') + if modifier == 'euro' and '.' not in code: + # Assume Latin-9 for @euro locales. This is bogus, + # since some systems may use other encodings for these + # locales. Also, we ignore other modifiers. + return code, 'iso-8859-15' + + if '.' in code: + return tuple(code.split('.')[:2]) + elif code == 'C': + return None, None + raise ValueError, 'unknown locale: %s' % localename + +def _build_localename(localetuple): + + """ Builds a locale code from the given tuple (language code, + encoding). + + No aliasing or normalizing takes place. + + """ + language, encoding = localetuple + if language is None: + language = 'C' + if encoding is None: + return language + else: + return language + '.' + encoding + +def getdefaultlocale(envvars=('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')): + + """ Tries to determine the default locale settings and returns + them as tuple (language code, encoding). + + According to POSIX, a program which has not called + setlocale(LC_ALL, "") runs using the portable 'C' locale. + Calling setlocale(LC_ALL, "") lets it use the default locale as + defined by the LANG variable. Since we don't want to interfere + with the current locale setting we thus emulate the behavior + in the way described above. + + To maintain compatibility with other platforms, not only the + LANG variable is tested, but a list of variables given as + envvars parameter. The first found to be defined will be + used. envvars defaults to the search path used in GNU gettext; + it must always contain the variable name 'LANG'. + + Except for the code 'C', the language code corresponds to RFC + 1766. code and encoding can be None in case the values cannot + be determined. + + """ + + try: + # check if it's supported by the _locale module + import _locale + code, encoding = _locale._getdefaultlocale() + except (ImportError, AttributeError): + pass + else: + # make sure the code/encoding values are valid + if sys.platform == "win32" and code and code[:2] == "0x": + # map windows language identifier to language name + code = windows_locale.get(int(code, 0)) + # ...add other platform-specific processing here, if + # necessary... + return code, encoding + + # fall back on POSIX behaviour + import os + lookup = os.environ.get + for variable in envvars: + localename = lookup(variable,None) + if localename: + if variable == 'LANGUAGE': + localename = localename.split(':')[0] + break + else: + localename = 'C' + return _parse_localename(localename) + + +def getlocale(category=LC_CTYPE): + + """ Returns the current setting for the given locale category as + tuple (language code, encoding). + + category may be one of the LC_* value except LC_ALL. It + defaults to LC_CTYPE. + + Except for the code 'C', the language code corresponds to RFC + 1766. code and encoding can be None in case the values cannot + be determined. + + """ + localename = _setlocale(category) + if category == LC_ALL and ';' in localename: + raise TypeError, 'category LC_ALL is not supported' + return _parse_localename(localename) + +def setlocale(category, locale=None): + + """ Set the locale for the given category. The locale can be + a string, a locale tuple (language code, encoding), or None. + + Locale tuples are converted to strings the locale aliasing + engine. Locale strings are passed directly to the C lib. + + category may be given as one of the LC_* values. + + """ + if locale and type(locale) is not type(""): + # convert to string + locale = normalize(_build_localename(locale)) + return _setlocale(category, locale) + +def resetlocale(category=LC_ALL): + + """ Sets the locale for category to the default setting. + + The default setting is determined by calling + getdefaultlocale(). category defaults to LC_ALL. + + """ + _setlocale(category, _build_localename(getdefaultlocale())) + +if sys.platform in ('win32', 'darwin', 'mac'): + # On Win32, this will return the ANSI code page + # On the Mac, it should return the system encoding; + # it might return "ascii" instead + def getpreferredencoding(do_setlocale = True): + """Return the charset that the user is likely using.""" + import _locale + return _locale._getdefaultlocale()[1] +else: + # On Unix, if CODESET is available, use that. + try: + CODESET + except NameError: + # Fall back to parsing environment variables :-( + def getpreferredencoding(do_setlocale = True): + """Return the charset that the user is likely using, + by looking at environment variables.""" + return getdefaultlocale()[1] + else: + def getpreferredencoding(do_setlocale = True): + """Return the charset that the user is likely using, + according to the system configuration.""" + if do_setlocale: + oldloc = setlocale(LC_CTYPE) + setlocale(LC_CTYPE, "") + result = nl_langinfo(CODESET) + setlocale(LC_CTYPE, oldloc) + return result + else: + return nl_langinfo(CODESET) + + +### Database +# +# The following data was extracted from the locale.alias file which +# comes with X11 and then hand edited removing the explicit encoding +# definitions and adding some more aliases. The file is usually +# available as /usr/lib/X11/locale/locale.alias. +# + +# +# The local_encoding_alias table maps lowercase encoding alias names +# to C locale encoding names (case-sensitive). Note that normalize() +# first looks up the encoding in the encodings.aliases dictionary and +# then applies this mapping to find the correct C lib name for the +# encoding. +# +locale_encoding_alias = { + + # Mappings for non-standard encoding names used in locale names + '437': 'C', + 'c': 'C', + 'en': 'ISO8859-1', + 'jis': 'JIS7', + 'jis7': 'JIS7', + 'ajec': 'eucJP', + + # Mappings from Python codec names to C lib encoding names + 'ascii': 'ISO8859-1', + 'latin_1': 'ISO8859-1', + 'iso8859_1': 'ISO8859-1', + 'iso8859_10': 'ISO8859-10', + 'iso8859_11': 'ISO8859-11', + 'iso8859_13': 'ISO8859-13', + 'iso8859_14': 'ISO8859-14', + 'iso8859_15': 'ISO8859-15', + 'iso8859_2': 'ISO8859-2', + 'iso8859_3': 'ISO8859-3', + 'iso8859_4': 'ISO8859-4', + 'iso8859_5': 'ISO8859-5', + 'iso8859_6': 'ISO8859-6', + 'iso8859_7': 'ISO8859-7', + 'iso8859_8': 'ISO8859-8', + 'iso8859_9': 'ISO8859-9', + 'iso2022_jp': 'JIS7', + 'shift_jis': 'SJIS', + 'tactis': 'TACTIS', + 'euc_jp': 'eucJP', + 'euc_kr': 'eucKR', + 'utf_8': 'UTF8', + 'koi8_r': 'KOI8-R', + 'koi8_u': 'KOI8-U', + # XXX This list is still incomplete. If you know more + # mappings, please file a bug report. Thanks. +} + +# +# The locale_alias table maps lowercase alias names to C locale names +# (case-sensitive). Encodings are always separated from the locale +# name using a dot ('.'); they should only be given in case the +# language name is needed to interpret the given encoding alias +# correctly (CJK codes often have this need). +# +# Note that the normalize() function which uses this tables +# removes '_' and '-' characters from the encoding part of the +# locale name before doing the lookup. This saves a lot of +# space in the table. +# +# MAL 2004-12-10: +# Updated alias mapping to most recent locale.alias file +# from X.org distribution using makelocalealias.py. +# +# These are the differences compared to the old mapping (Python 2.4 +# and older): +# +# updated 'bg' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251' +# updated 'bg_bg' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251' +# updated 'bulgarian' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251' +# updated 'cz' -> 'cz_CZ.ISO8859-2' to 'cs_CZ.ISO8859-2' +# updated 'cz_cz' -> 'cz_CZ.ISO8859-2' to 'cs_CZ.ISO8859-2' +# updated 'czech' -> 'cs_CS.ISO8859-2' to 'cs_CZ.ISO8859-2' +# updated 'dutch' -> 'nl_BE.ISO8859-1' to 'nl_NL.ISO8859-1' +# updated 'et' -> 'et_EE.ISO8859-4' to 'et_EE.ISO8859-15' +# updated 'et_ee' -> 'et_EE.ISO8859-4' to 'et_EE.ISO8859-15' +# updated 'fi' -> 'fi_FI.ISO8859-1' to 'fi_FI.ISO8859-15' +# updated 'fi_fi' -> 'fi_FI.ISO8859-1' to 'fi_FI.ISO8859-15' +# updated 'iw' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' +# updated 'iw_il' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8' +# updated 'japanese' -> 'ja_JP.SJIS' to 'ja_JP.eucJP' +# updated 'lt' -> 'lt_LT.ISO8859-4' to 'lt_LT.ISO8859-13' +# updated 'lv' -> 'lv_LV.ISO8859-4' to 'lv_LV.ISO8859-13' +# updated 'sl' -> 'sl_CS.ISO8859-2' to 'sl_SI.ISO8859-2' +# updated 'slovene' -> 'sl_CS.ISO8859-2' to 'sl_SI.ISO8859-2' +# updated 'th_th' -> 'th_TH.TACTIS' to 'th_TH.ISO8859-11' +# updated 'zh_cn' -> 'zh_CN.eucCN' to 'zh_CN.gb2312' +# updated 'zh_cn.big5' -> 'zh_TW.eucTW' to 'zh_TW.big5' +# updated 'zh_tw' -> 'zh_TW.eucTW' to 'zh_TW.big5' +# +locale_alias = { + 'a3': 'a3_AZ.KOI8-C', + 'a3_az': 'a3_AZ.KOI8-C', + 'a3_az.koi8c': 'a3_AZ.KOI8-C', + 'af': 'af_ZA.ISO8859-1', + 'af_za': 'af_ZA.ISO8859-1', + 'af_za.iso88591': 'af_ZA.ISO8859-1', + 'am': 'am_ET.UTF-8', + 'american': 'en_US.ISO8859-1', + 'american.iso88591': 'en_US.ISO8859-1', + 'ar': 'ar_AA.ISO8859-6', + 'ar_aa': 'ar_AA.ISO8859-6', + 'ar_aa.iso88596': 'ar_AA.ISO8859-6', + 'ar_ae': 'ar_AE.ISO8859-6', + 'ar_bh': 'ar_BH.ISO8859-6', + 'ar_dz': 'ar_DZ.ISO8859-6', + 'ar_eg': 'ar_EG.ISO8859-6', + 'ar_eg.iso88596': 'ar_EG.ISO8859-6', + 'ar_iq': 'ar_IQ.ISO8859-6', + 'ar_jo': 'ar_JO.ISO8859-6', + 'ar_kw': 'ar_KW.ISO8859-6', + 'ar_lb': 'ar_LB.ISO8859-6', + 'ar_ly': 'ar_LY.ISO8859-6', + 'ar_ma': 'ar_MA.ISO8859-6', + 'ar_om': 'ar_OM.ISO8859-6', + 'ar_qa': 'ar_QA.ISO8859-6', + 'ar_sa': 'ar_SA.ISO8859-6', + 'ar_sa.iso88596': 'ar_SA.ISO8859-6', + 'ar_sd': 'ar_SD.ISO8859-6', + 'ar_sy': 'ar_SY.ISO8859-6', + 'ar_tn': 'ar_TN.ISO8859-6', + 'ar_ye': 'ar_YE.ISO8859-6', + 'arabic': 'ar_AA.ISO8859-6', + 'arabic.iso88596': 'ar_AA.ISO8859-6', + 'az': 'az_AZ.ISO8859-9E', + 'az_az': 'az_AZ.ISO8859-9E', + 'az_az.iso88599e': 'az_AZ.ISO8859-9E', + 'be': 'be_BY.CP1251', + 'be_by': 'be_BY.CP1251', + 'be_by.cp1251': 'be_BY.CP1251', + 'be_by.microsoftcp1251': 'be_BY.CP1251', + 'bg': 'bg_BG.CP1251', + 'bg_bg': 'bg_BG.CP1251', + 'bg_bg.cp1251': 'bg_BG.CP1251', + 'bg_bg.iso88595': 'bg_BG.ISO8859-5', + 'bg_bg.koi8r': 'bg_BG.KOI8-R', + 'bg_bg.microsoftcp1251': 'bg_BG.CP1251', + 'bokmal': 'nb_NO.ISO8859-1', + 'bokm\xe5l': 'nb_NO.ISO8859-1', + 'br': 'br_FR.ISO8859-1', + 'br_fr': 'br_FR.ISO8859-1', + 'br_fr.iso88591': 'br_FR.ISO8859-1', + 'br_fr.iso885914': 'br_FR.ISO8859-14', + 'br_fr.iso885915': 'br_FR.ISO8859-15', + 'br_fr@euro': 'br_FR.ISO8859-15', + 'bulgarian': 'bg_BG.CP1251', + 'c': 'C', + 'c-french': 'fr_CA.ISO8859-1', + 'c-french.iso88591': 'fr_CA.ISO8859-1', + 'c.en': 'C', + 'c.iso88591': 'en_US.ISO8859-1', + 'c_c': 'C', + 'c_c.c': 'C', + 'ca': 'ca_ES.ISO8859-1', + 'ca_es': 'ca_ES.ISO8859-1', + 'ca_es.iso88591': 'ca_ES.ISO8859-1', + 'ca_es.iso885915': 'ca_ES.ISO8859-15', + 'ca_es@euro': 'ca_ES.ISO8859-15', + 'catalan': 'ca_ES.ISO8859-1', + 'cextend': 'en_US.ISO8859-1', + 'cextend.en': 'en_US.ISO8859-1', + 'chinese-s': 'zh_CN.eucCN', + 'chinese-t': 'zh_TW.eucTW', + 'croatian': 'hr_HR.ISO8859-2', + 'cs': 'cs_CZ.ISO8859-2', + 'cs_cs': 'cs_CZ.ISO8859-2', + 'cs_cs.iso88592': 'cs_CZ.ISO8859-2', + 'cs_cz': 'cs_CZ.ISO8859-2', + 'cs_cz.iso88592': 'cs_CZ.ISO8859-2', + 'cy': 'cy_GB.ISO8859-1', + 'cy_gb': 'cy_GB.ISO8859-1', + 'cy_gb.iso88591': 'cy_GB.ISO8859-1', + 'cy_gb.iso885914': 'cy_GB.ISO8859-14', + 'cy_gb.iso885915': 'cy_GB.ISO8859-15', + 'cy_gb@euro': 'cy_GB.ISO8859-15', + 'cz': 'cs_CZ.ISO8859-2', + 'cz_cz': 'cs_CZ.ISO8859-2', + 'czech': 'cs_CZ.ISO8859-2', + 'da': 'da_DK.ISO8859-1', + 'da_dk': 'da_DK.ISO8859-1', + 'da_dk.88591': 'da_DK.ISO8859-1', + 'da_dk.885915': 'da_DK.ISO8859-15', + 'da_dk.iso88591': 'da_DK.ISO8859-1', + 'da_dk.iso885915': 'da_DK.ISO8859-15', + 'da_dk@euro': 'da_DK.ISO8859-15', + 'danish': 'da_DK.ISO8859-1', + 'danish.iso88591': 'da_DK.ISO8859-1', + 'dansk': 'da_DK.ISO8859-1', + 'de': 'de_DE.ISO8859-1', + 'de_at': 'de_AT.ISO8859-1', + 'de_at.iso88591': 'de_AT.ISO8859-1', + 'de_at.iso885915': 'de_AT.ISO8859-15', + 'de_at@euro': 'de_AT.ISO8859-15', + 'de_be': 'de_BE.ISO8859-1', + 'de_be.iso88591': 'de_BE.ISO8859-1', + 'de_be.iso885915': 'de_BE.ISO8859-15', + 'de_be@euro': 'de_BE.ISO8859-15', + 'de_ch': 'de_CH.ISO8859-1', + 'de_ch.iso88591': 'de_CH.ISO8859-1', + 'de_ch.iso885915': 'de_CH.ISO8859-15', + 'de_ch@euro': 'de_CH.ISO8859-15', + 'de_de': 'de_DE.ISO8859-1', + 'de_de.88591': 'de_DE.ISO8859-1', + 'de_de.885915': 'de_DE.ISO8859-15', + 'de_de.885915@euro': 'de_DE.ISO8859-15', + 'de_de.iso88591': 'de_DE.ISO8859-1', + 'de_de.iso885915': 'de_DE.ISO8859-15', + 'de_de@euro': 'de_DE.ISO8859-15', + 'de_lu': 'de_LU.ISO8859-1', + 'de_lu.iso88591': 'de_LU.ISO8859-1', + 'de_lu.iso885915': 'de_LU.ISO8859-15', + 'de_lu@euro': 'de_LU.ISO8859-15', + 'deutsch': 'de_DE.ISO8859-1', + 'dutch': 'nl_NL.ISO8859-1', + 'dutch.iso88591': 'nl_BE.ISO8859-1', + 'ee': 'ee_EE.ISO8859-4', + 'ee_ee': 'ee_EE.ISO8859-4', + 'ee_ee.iso88594': 'ee_EE.ISO8859-4', + 'eesti': 'et_EE.ISO8859-1', + 'el': 'el_GR.ISO8859-7', + 'el_gr': 'el_GR.ISO8859-7', + 'el_gr.iso88597': 'el_GR.ISO8859-7', + 'el_gr@euro': 'el_GR.ISO8859-15', + 'en': 'en_US.ISO8859-1', + 'en.iso88591': 'en_US.ISO8859-1', + 'en_au': 'en_AU.ISO8859-1', + 'en_au.iso88591': 'en_AU.ISO8859-1', + 'en_be': 'en_BE.ISO8859-1', + 'en_be@euro': 'en_BE.ISO8859-15', + 'en_bw': 'en_BW.ISO8859-1', + 'en_ca': 'en_CA.ISO8859-1', + 'en_ca.iso88591': 'en_CA.ISO8859-1', + 'en_gb': 'en_GB.ISO8859-1', + 'en_gb.88591': 'en_GB.ISO8859-1', + 'en_gb.iso88591': 'en_GB.ISO8859-1', + 'en_gb.iso885915': 'en_GB.ISO8859-15', + 'en_gb@euro': 'en_GB.ISO8859-15', + 'en_hk': 'en_HK.ISO8859-1', + 'en_ie': 'en_IE.ISO8859-1', + 'en_ie.iso88591': 'en_IE.ISO8859-1', + 'en_ie.iso885915': 'en_IE.ISO8859-15', + 'en_ie@euro': 'en_IE.ISO8859-15', + 'en_in': 'en_IN.ISO8859-1', + 'en_nz': 'en_NZ.ISO8859-1', + 'en_nz.iso88591': 'en_NZ.ISO8859-1', + 'en_ph': 'en_PH.ISO8859-1', + 'en_sg': 'en_SG.ISO8859-1', + 'en_uk': 'en_GB.ISO8859-1', + 'en_us': 'en_US.ISO8859-1', + 'en_us.88591': 'en_US.ISO8859-1', + 'en_us.885915': 'en_US.ISO8859-15', + 'en_us.iso88591': 'en_US.ISO8859-1', + 'en_us.iso885915': 'en_US.ISO8859-15', + 'en_us.iso885915@euro': 'en_US.ISO8859-15', + 'en_us@euro': 'en_US.ISO8859-15', + 'en_us@euro@euro': 'en_US.ISO8859-15', + 'en_za': 'en_ZA.ISO8859-1', + 'en_za.88591': 'en_ZA.ISO8859-1', + 'en_za.iso88591': 'en_ZA.ISO8859-1', + 'en_za.iso885915': 'en_ZA.ISO8859-15', + 'en_za@euro': 'en_ZA.ISO8859-15', + 'en_zw': 'en_ZW.ISO8859-1', + 'eng_gb': 'en_GB.ISO8859-1', + 'eng_gb.8859': 'en_GB.ISO8859-1', + 'english': 'en_EN.ISO8859-1', + 'english.iso88591': 'en_EN.ISO8859-1', + 'english_uk': 'en_GB.ISO8859-1', + 'english_uk.8859': 'en_GB.ISO8859-1', + 'english_united-states': 'en_US.ISO8859-1', + 'english_united-states.437': 'C', + 'english_us': 'en_US.ISO8859-1', + 'english_us.8859': 'en_US.ISO8859-1', + 'english_us.ascii': 'en_US.ISO8859-1', + 'eo': 'eo_XX.ISO8859-3', + 'eo_eo': 'eo_EO.ISO8859-3', + 'eo_eo.iso88593': 'eo_EO.ISO8859-3', + 'eo_xx': 'eo_XX.ISO8859-3', + 'eo_xx.iso88593': 'eo_XX.ISO8859-3', + 'es': 'es_ES.ISO8859-1', + 'es_ar': 'es_AR.ISO8859-1', + 'es_ar.iso88591': 'es_AR.ISO8859-1', + 'es_bo': 'es_BO.ISO8859-1', + 'es_bo.iso88591': 'es_BO.ISO8859-1', + 'es_cl': 'es_CL.ISO8859-1', + 'es_cl.iso88591': 'es_CL.ISO8859-1', + 'es_co': 'es_CO.ISO8859-1', + 'es_co.iso88591': 'es_CO.ISO8859-1', + 'es_cr': 'es_CR.ISO8859-1', + 'es_cr.iso88591': 'es_CR.ISO8859-1', + 'es_do': 'es_DO.ISO8859-1', + 'es_do.iso88591': 'es_DO.ISO8859-1', + 'es_ec': 'es_EC.ISO8859-1', + 'es_ec.iso88591': 'es_EC.ISO8859-1', + 'es_es': 'es_ES.ISO8859-1', + 'es_es.88591': 'es_ES.ISO8859-1', + 'es_es.iso88591': 'es_ES.ISO8859-1', + 'es_es.iso885915': 'es_ES.ISO8859-15', + 'es_es@euro': 'es_ES.ISO8859-15', + 'es_gt': 'es_GT.ISO8859-1', + 'es_gt.iso88591': 'es_GT.ISO8859-1', + 'es_hn': 'es_HN.ISO8859-1', + 'es_hn.iso88591': 'es_HN.ISO8859-1', + 'es_mx': 'es_MX.ISO8859-1', + 'es_mx.iso88591': 'es_MX.ISO8859-1', + 'es_ni': 'es_NI.ISO8859-1', + 'es_ni.iso88591': 'es_NI.ISO8859-1', + 'es_pa': 'es_PA.ISO8859-1', + 'es_pa.iso88591': 'es_PA.ISO8859-1', + 'es_pa.iso885915': 'es_PA.ISO8859-15', + 'es_pa@euro': 'es_PA.ISO8859-15', + 'es_pe': 'es_PE.ISO8859-1', + 'es_pe.iso88591': 'es_PE.ISO8859-1', + 'es_pe.iso885915': 'es_PE.ISO8859-15', + 'es_pe@euro': 'es_PE.ISO8859-15', + 'es_pr': 'es_PR.ISO8859-1', + 'es_pr.iso88591': 'es_PR.ISO8859-1', + 'es_py': 'es_PY.ISO8859-1', + 'es_py.iso88591': 'es_PY.ISO8859-1', + 'es_py.iso885915': 'es_PY.ISO8859-15', + 'es_py@euro': 'es_PY.ISO8859-15', + 'es_sv': 'es_SV.ISO8859-1', + 'es_sv.iso88591': 'es_SV.ISO8859-1', + 'es_sv.iso885915': 'es_SV.ISO8859-15', + 'es_sv@euro': 'es_SV.ISO8859-15', + 'es_us': 'es_US.ISO8859-1', + 'es_uy': 'es_UY.ISO8859-1', + 'es_uy.iso88591': 'es_UY.ISO8859-1', + 'es_uy.iso885915': 'es_UY.ISO8859-15', + 'es_uy@euro': 'es_UY.ISO8859-15', + 'es_ve': 'es_VE.ISO8859-1', + 'es_ve.iso88591': 'es_VE.ISO8859-1', + 'es_ve.iso885915': 'es_VE.ISO8859-15', + 'es_ve@euro': 'es_VE.ISO8859-15', + 'estonian': 'et_EE.ISO8859-1', + 'et': 'et_EE.ISO8859-15', + 'et_ee': 'et_EE.ISO8859-15', + 'et_ee.iso88591': 'et_EE.ISO8859-1', + 'et_ee.iso885913': 'et_EE.ISO8859-13', + 'et_ee.iso885915': 'et_EE.ISO8859-15', + 'et_ee.iso88594': 'et_EE.ISO8859-4', + 'et_ee@euro': 'et_EE.ISO8859-15', + 'eu': 'eu_ES.ISO8859-1', + 'eu_es': 'eu_ES.ISO8859-1', + 'eu_es.iso88591': 'eu_ES.ISO8859-1', + 'eu_es.iso885915': 'eu_ES.ISO8859-15', + 'eu_es@euro': 'eu_ES.ISO8859-15', + 'fa': 'fa_IR.UTF-8', + 'fa_ir': 'fa_IR.UTF-8', + 'fa_ir.isiri3342': 'fa_IR.ISIRI-3342', + 'fi': 'fi_FI.ISO8859-15', + 'fi_fi': 'fi_FI.ISO8859-15', + 'fi_fi.88591': 'fi_FI.ISO8859-1', + 'fi_fi.iso88591': 'fi_FI.ISO8859-1', + 'fi_fi.iso885915': 'fi_FI.ISO8859-15', + 'fi_fi.utf8@euro': 'fi_FI.UTF-8', + 'fi_fi@euro': 'fi_FI.ISO8859-15', + 'finnish': 'fi_FI.ISO8859-1', + 'finnish.iso88591': 'fi_FI.ISO8859-1', + 'fo': 'fo_FO.ISO8859-1', + 'fo_fo': 'fo_FO.ISO8859-1', + 'fo_fo.iso88591': 'fo_FO.ISO8859-1', + 'fo_fo.iso885915': 'fo_FO.ISO8859-15', + 'fo_fo@euro': 'fo_FO.ISO8859-15', + 'fr': 'fr_FR.ISO8859-1', + 'fr_be': 'fr_BE.ISO8859-1', + 'fr_be.88591': 'fr_BE.ISO8859-1', + 'fr_be.iso88591': 'fr_BE.ISO8859-1', + 'fr_be.iso885915': 'fr_BE.ISO8859-15', + 'fr_be@euro': 'fr_BE.ISO8859-15', + 'fr_ca': 'fr_CA.ISO8859-1', + 'fr_ca.88591': 'fr_CA.ISO8859-1', + 'fr_ca.iso88591': 'fr_CA.ISO8859-1', + 'fr_ca.iso885915': 'fr_CA.ISO8859-15', + 'fr_ca@euro': 'fr_CA.ISO8859-15', + 'fr_ch': 'fr_CH.ISO8859-1', + 'fr_ch.88591': 'fr_CH.ISO8859-1', + 'fr_ch.iso88591': 'fr_CH.ISO8859-1', + 'fr_ch.iso885915': 'fr_CH.ISO8859-15', + 'fr_ch@euro': 'fr_CH.ISO8859-15', + 'fr_fr': 'fr_FR.ISO8859-1', + 'fr_fr.88591': 'fr_FR.ISO8859-1', + 'fr_fr.iso88591': 'fr_FR.ISO8859-1', + 'fr_fr.iso885915': 'fr_FR.ISO8859-15', + 'fr_fr@euro': 'fr_FR.ISO8859-15', + 'fr_lu': 'fr_LU.ISO8859-1', + 'fr_lu.88591': 'fr_LU.ISO8859-1', + 'fr_lu.iso88591': 'fr_LU.ISO8859-1', + 'fr_lu.iso885915': 'fr_LU.ISO8859-15', + 'fr_lu@euro': 'fr_LU.ISO8859-15', + 'fran\xe7ais': 'fr_FR.ISO8859-1', + 'fre_fr': 'fr_FR.ISO8859-1', + 'fre_fr.8859': 'fr_FR.ISO8859-1', + 'french': 'fr_FR.ISO8859-1', + 'french.iso88591': 'fr_CH.ISO8859-1', + 'french_france': 'fr_FR.ISO8859-1', + 'french_france.8859': 'fr_FR.ISO8859-1', + 'ga': 'ga_IE.ISO8859-1', + 'ga_ie': 'ga_IE.ISO8859-1', + 'ga_ie.iso88591': 'ga_IE.ISO8859-1', + 'ga_ie.iso885914': 'ga_IE.ISO8859-14', + 'ga_ie.iso885915': 'ga_IE.ISO8859-15', + 'ga_ie@euro': 'ga_IE.ISO8859-15', + 'galego': 'gl_ES.ISO8859-1', + 'galician': 'gl_ES.ISO8859-1', + 'gd': 'gd_GB.ISO8859-1', + 'gd_gb': 'gd_GB.ISO8859-1', + 'gd_gb.iso88591': 'gd_GB.ISO8859-1', + 'gd_gb.iso885914': 'gd_GB.ISO8859-14', + 'gd_gb.iso885915': 'gd_GB.ISO8859-15', + 'gd_gb@euro': 'gd_GB.ISO8859-15', + 'ger_de': 'de_DE.ISO8859-1', + 'ger_de.8859': 'de_DE.ISO8859-1', + 'german': 'de_DE.ISO8859-1', + 'german.iso88591': 'de_CH.ISO8859-1', + 'german_germany': 'de_DE.ISO8859-1', + 'german_germany.8859': 'de_DE.ISO8859-1', + 'gl': 'gl_ES.ISO8859-1', + 'gl_es': 'gl_ES.ISO8859-1', + 'gl_es.iso88591': 'gl_ES.ISO8859-1', + 'gl_es.iso885915': 'gl_ES.ISO8859-15', + 'gl_es@euro': 'gl_ES.ISO8859-15', + 'greek': 'el_GR.ISO8859-7', + 'greek.iso88597': 'el_GR.ISO8859-7', + 'gv': 'gv_GB.ISO8859-1', + 'gv_gb': 'gv_GB.ISO8859-1', + 'gv_gb.iso88591': 'gv_GB.ISO8859-1', + 'gv_gb.iso885914': 'gv_GB.ISO8859-14', + 'gv_gb.iso885915': 'gv_GB.ISO8859-15', + 'gv_gb@euro': 'gv_GB.ISO8859-15', + 'he': 'he_IL.ISO8859-8', + 'he_il': 'he_IL.ISO8859-8', + 'he_il.cp1255': 'he_IL.CP1255', + 'he_il.iso88598': 'he_IL.ISO8859-8', + 'he_il.microsoftcp1255': 'he_IL.CP1255', + 'hebrew': 'iw_IL.ISO8859-8', + 'hebrew.iso88598': 'iw_IL.ISO8859-8', + 'hi': 'hi_IN.ISCII-DEV', + 'hi_in': 'hi_IN.ISCII-DEV', + 'hi_in.isciidev': 'hi_IN.ISCII-DEV', + 'hr': 'hr_HR.ISO8859-2', + 'hr_hr': 'hr_HR.ISO8859-2', + 'hr_hr.iso88592': 'hr_HR.ISO8859-2', + 'hrvatski': 'hr_HR.ISO8859-2', + 'hu': 'hu_HU.ISO8859-2', + 'hu_hu': 'hu_HU.ISO8859-2', + 'hu_hu.iso88592': 'hu_HU.ISO8859-2', + 'hungarian': 'hu_HU.ISO8859-2', + 'icelandic': 'is_IS.ISO8859-1', + 'icelandic.iso88591': 'is_IS.ISO8859-1', + 'id': 'id_ID.ISO8859-1', + 'id_id': 'id_ID.ISO8859-1', + 'in': 'id_ID.ISO8859-1', + 'in_id': 'id_ID.ISO8859-1', + 'is': 'is_IS.ISO8859-1', + 'is_is': 'is_IS.ISO8859-1', + 'is_is.iso88591': 'is_IS.ISO8859-1', + 'is_is.iso885915': 'is_IS.ISO8859-15', + 'is_is@euro': 'is_IS.ISO8859-15', + 'iso-8859-1': 'en_US.ISO8859-1', + 'iso-8859-15': 'en_US.ISO8859-15', + 'iso8859-1': 'en_US.ISO8859-1', + 'iso8859-15': 'en_US.ISO8859-15', + 'iso_8859_1': 'en_US.ISO8859-1', + 'iso_8859_15': 'en_US.ISO8859-15', + 'it': 'it_IT.ISO8859-1', + 'it_ch': 'it_CH.ISO8859-1', + 'it_ch.iso88591': 'it_CH.ISO8859-1', + 'it_ch.iso885915': 'it_CH.ISO8859-15', + 'it_ch@euro': 'it_CH.ISO8859-15', + 'it_it': 'it_IT.ISO8859-1', + 'it_it.88591': 'it_IT.ISO8859-1', + 'it_it.iso88591': 'it_IT.ISO8859-1', + 'it_it.iso885915': 'it_IT.ISO8859-15', + 'it_it@euro': 'it_IT.ISO8859-15', + 'italian': 'it_IT.ISO8859-1', + 'italian.iso88591': 'it_IT.ISO8859-1', + 'iu': 'iu_CA.NUNACOM-8', + 'iu_ca': 'iu_CA.NUNACOM-8', + 'iu_ca.nunacom8': 'iu_CA.NUNACOM-8', + 'iw': 'he_IL.ISO8859-8', + 'iw_il': 'he_IL.ISO8859-8', + 'iw_il.iso88598': 'he_IL.ISO8859-8', + 'ja': 'ja_JP.eucJP', + 'ja.jis': 'ja_JP.JIS7', + 'ja.sjis': 'ja_JP.SJIS', + 'ja_jp': 'ja_JP.eucJP', + 'ja_jp.ajec': 'ja_JP.eucJP', + 'ja_jp.euc': 'ja_JP.eucJP', + 'ja_jp.eucjp': 'ja_JP.eucJP', + 'ja_jp.iso-2022-jp': 'ja_JP.JIS7', + 'ja_jp.iso2022jp': 'ja_JP.JIS7', + 'ja_jp.jis': 'ja_JP.JIS7', + 'ja_jp.jis7': 'ja_JP.JIS7', + 'ja_jp.mscode': 'ja_JP.SJIS', + 'ja_jp.sjis': 'ja_JP.SJIS', + 'ja_jp.ujis': 'ja_JP.eucJP', + 'japan': 'ja_JP.eucJP', + 'japanese': 'ja_JP.eucJP', + 'japanese-euc': 'ja_JP.eucJP', + 'japanese.euc': 'ja_JP.eucJP', + 'japanese.sjis': 'ja_JP.SJIS', + 'jp_jp': 'ja_JP.eucJP', + 'ka': 'ka_GE.GEORGIAN-ACADEMY', + 'ka_ge': 'ka_GE.GEORGIAN-ACADEMY', + 'ka_ge.georgianacademy': 'ka_GE.GEORGIAN-ACADEMY', + 'ka_ge.georgianps': 'ka_GE.GEORGIAN-PS', + 'ka_ge.georgianrs': 'ka_GE.GEORGIAN-ACADEMY', + 'kl': 'kl_GL.ISO8859-1', + 'kl_gl': 'kl_GL.ISO8859-1', + 'kl_gl.iso88591': 'kl_GL.ISO8859-1', + 'kl_gl.iso885915': 'kl_GL.ISO8859-15', + 'kl_gl@euro': 'kl_GL.ISO8859-15', + 'ko': 'ko_KR.eucKR', + 'ko_kr': 'ko_KR.eucKR', + 'ko_kr.euc': 'ko_KR.eucKR', + 'ko_kr.euckr': 'ko_KR.eucKR', + 'korean': 'ko_KR.eucKR', + 'korean.euc': 'ko_KR.eucKR', + 'kw': 'kw_GB.ISO8859-1', + 'kw_gb': 'kw_GB.ISO8859-1', + 'kw_gb.iso88591': 'kw_GB.ISO8859-1', + 'kw_gb.iso885914': 'kw_GB.ISO8859-14', + 'kw_gb.iso885915': 'kw_GB.ISO8859-15', + 'kw_gb@euro': 'kw_GB.ISO8859-15', + 'lithuanian': 'lt_LT.ISO8859-13', + 'lo': 'lo_LA.MULELAO-1', + 'lo_la': 'lo_LA.MULELAO-1', + 'lo_la.cp1133': 'lo_LA.IBM-CP1133', + 'lo_la.ibmcp1133': 'lo_LA.IBM-CP1133', + 'lo_la.mulelao1': 'lo_LA.MULELAO-1', + 'lt': 'lt_LT.ISO8859-13', + 'lt_lt': 'lt_LT.ISO8859-13', + 'lt_lt.iso885913': 'lt_LT.ISO8859-13', + 'lt_lt.iso88594': 'lt_LT.ISO8859-4', + 'lv': 'lv_LV.ISO8859-13', + 'lv_lv': 'lv_LV.ISO8859-13', + 'lv_lv.iso885913': 'lv_LV.ISO8859-13', + 'lv_lv.iso88594': 'lv_LV.ISO8859-4', + 'mi': 'mi_NZ.ISO8859-1', + 'mi_nz': 'mi_NZ.ISO8859-1', + 'mi_nz.iso88591': 'mi_NZ.ISO8859-1', + 'mk': 'mk_MK.ISO8859-5', + 'mk_mk': 'mk_MK.ISO8859-5', + 'mk_mk.cp1251': 'mk_MK.CP1251', + 'mk_mk.iso88595': 'mk_MK.ISO8859-5', + 'mk_mk.microsoftcp1251': 'mk_MK.CP1251', + 'ms': 'ms_MY.ISO8859-1', + 'ms_my': 'ms_MY.ISO8859-1', + 'ms_my.iso88591': 'ms_MY.ISO8859-1', + 'mt': 'mt_MT.ISO8859-3', + 'mt_mt': 'mt_MT.ISO8859-3', + 'mt_mt.iso88593': 'mt_MT.ISO8859-3', + 'nb': 'nb_NO.ISO8859-1', + 'nb_no': 'nb_NO.ISO8859-1', + 'nb_no.88591': 'nb_NO.ISO8859-1', + 'nb_no.iso88591': 'nb_NO.ISO8859-1', + 'nb_no.iso885915': 'nb_NO.ISO8859-15', + 'nb_no@euro': 'nb_NO.ISO8859-15', + 'nl': 'nl_NL.ISO8859-1', + 'nl_be': 'nl_BE.ISO8859-1', + 'nl_be.88591': 'nl_BE.ISO8859-1', + 'nl_be.iso88591': 'nl_BE.ISO8859-1', + 'nl_be.iso885915': 'nl_BE.ISO8859-15', + 'nl_be@euro': 'nl_BE.ISO8859-15', + 'nl_nl': 'nl_NL.ISO8859-1', + 'nl_nl.88591': 'nl_NL.ISO8859-1', + 'nl_nl.iso88591': 'nl_NL.ISO8859-1', + 'nl_nl.iso885915': 'nl_NL.ISO8859-15', + 'nl_nl@euro': 'nl_NL.ISO8859-15', + 'nn': 'nn_NO.ISO8859-1', + 'nn_no': 'nn_NO.ISO8859-1', + 'nn_no.88591': 'nn_NO.ISO8859-1', + 'nn_no.iso88591': 'nn_NO.ISO8859-1', + 'nn_no.iso885915': 'nn_NO.ISO8859-15', + 'nn_no@euro': 'nn_NO.ISO8859-15', + 'no': 'no_NO.ISO8859-1', + 'no@nynorsk': 'ny_NO.ISO8859-1', + 'no_no': 'no_NO.ISO8859-1', + 'no_no.88591': 'no_NO.ISO8859-1', + 'no_no.iso88591': 'no_NO.ISO8859-1', + 'no_no.iso885915': 'no_NO.ISO8859-15', + 'no_no@euro': 'no_NO.ISO8859-15', + 'norwegian': 'no_NO.ISO8859-1', + 'norwegian.iso88591': 'no_NO.ISO8859-1', + 'ny': 'ny_NO.ISO8859-1', + 'ny_no': 'ny_NO.ISO8859-1', + 'ny_no.88591': 'ny_NO.ISO8859-1', + 'ny_no.iso88591': 'ny_NO.ISO8859-1', + 'ny_no.iso885915': 'ny_NO.ISO8859-15', + 'ny_no@euro': 'ny_NO.ISO8859-15', + 'nynorsk': 'nn_NO.ISO8859-1', + 'oc': 'oc_FR.ISO8859-1', + 'oc_fr': 'oc_FR.ISO8859-1', + 'oc_fr.iso88591': 'oc_FR.ISO8859-1', + 'oc_fr.iso885915': 'oc_FR.ISO8859-15', + 'oc_fr@euro': 'oc_FR.ISO8859-15', + 'pd': 'pd_US.ISO8859-1', + 'pd_de': 'pd_DE.ISO8859-1', + 'pd_de.iso88591': 'pd_DE.ISO8859-1', + 'pd_de.iso885915': 'pd_DE.ISO8859-15', + 'pd_de@euro': 'pd_DE.ISO8859-15', + 'pd_us': 'pd_US.ISO8859-1', + 'pd_us.iso88591': 'pd_US.ISO8859-1', + 'pd_us.iso885915': 'pd_US.ISO8859-15', + 'pd_us@euro': 'pd_US.ISO8859-15', + 'ph': 'ph_PH.ISO8859-1', + 'ph_ph': 'ph_PH.ISO8859-1', + 'ph_ph.iso88591': 'ph_PH.ISO8859-1', + 'pl': 'pl_PL.ISO8859-2', + 'pl_pl': 'pl_PL.ISO8859-2', + 'pl_pl.iso88592': 'pl_PL.ISO8859-2', + 'polish': 'pl_PL.ISO8859-2', + 'portuguese': 'pt_PT.ISO8859-1', + 'portuguese.iso88591': 'pt_PT.ISO8859-1', + 'portuguese_brazil': 'pt_BR.ISO8859-1', + 'portuguese_brazil.8859': 'pt_BR.ISO8859-1', + 'posix': 'C', + 'posix-utf2': 'C', + 'pp': 'pp_AN.ISO8859-1', + 'pp_an': 'pp_AN.ISO8859-1', + 'pp_an.iso88591': 'pp_AN.ISO8859-1', + 'pt': 'pt_PT.ISO8859-1', + 'pt_br': 'pt_BR.ISO8859-1', + 'pt_br.88591': 'pt_BR.ISO8859-1', + 'pt_br.iso88591': 'pt_BR.ISO8859-1', + 'pt_br.iso885915': 'pt_BR.ISO8859-15', + 'pt_br@euro': 'pt_BR.ISO8859-15', + 'pt_pt': 'pt_PT.ISO8859-1', + 'pt_pt.88591': 'pt_PT.ISO8859-1', + 'pt_pt.iso88591': 'pt_PT.ISO8859-1', + 'pt_pt.iso885915': 'pt_PT.ISO8859-15', + 'pt_pt.utf8@euro': 'pt_PT.UTF-8', + 'pt_pt@euro': 'pt_PT.ISO8859-15', + 'ro': 'ro_RO.ISO8859-2', + 'ro_ro': 'ro_RO.ISO8859-2', + 'ro_ro.iso88592': 'ro_RO.ISO8859-2', + 'romanian': 'ro_RO.ISO8859-2', + 'ru': 'ru_RU.ISO8859-5', + 'ru_ru': 'ru_RU.ISO8859-5', + 'ru_ru.cp1251': 'ru_RU.CP1251', + 'ru_ru.iso88595': 'ru_RU.ISO8859-5', + 'ru_ru.koi8r': 'ru_RU.KOI8-R', + 'ru_ru.microsoftcp1251': 'ru_RU.CP1251', + 'ru_ua': 'ru_UA.KOI8-U', + 'ru_ua.cp1251': 'ru_UA.CP1251', + 'ru_ua.koi8u': 'ru_UA.KOI8-U', + 'ru_ua.microsoftcp1251': 'ru_UA.CP1251', + 'rumanian': 'ro_RO.ISO8859-2', + 'russian': 'ru_RU.ISO8859-5', + 'se_no': 'se_NO.UTF-8', + 'serbocroatian': 'sh_YU.ISO8859-2', + 'sh': 'sh_YU.ISO8859-2', + 'sh_hr': 'sh_HR.ISO8859-2', + 'sh_hr.iso88592': 'sh_HR.ISO8859-2', + 'sh_sp': 'sh_YU.ISO8859-2', + 'sh_yu': 'sh_YU.ISO8859-2', + 'sk': 'sk_SK.ISO8859-2', + 'sk_sk': 'sk_SK.ISO8859-2', + 'sk_sk.iso88592': 'sk_SK.ISO8859-2', + 'sl': 'sl_SI.ISO8859-2', + 'sl_cs': 'sl_CS.ISO8859-2', + 'sl_si': 'sl_SI.ISO8859-2', + 'sl_si.iso88592': 'sl_SI.ISO8859-2', + 'slovak': 'sk_SK.ISO8859-2', + 'slovene': 'sl_SI.ISO8859-2', + 'slovenian': 'sl_SI.ISO8859-2', + 'sp': 'sp_YU.ISO8859-5', + 'sp_yu': 'sp_YU.ISO8859-5', + 'spanish': 'es_ES.ISO8859-1', + 'spanish.iso88591': 'es_ES.ISO8859-1', + 'spanish_spain': 'es_ES.ISO8859-1', + 'spanish_spain.8859': 'es_ES.ISO8859-1', + 'sq': 'sq_AL.ISO8859-2', + 'sq_al': 'sq_AL.ISO8859-2', + 'sq_al.iso88592': 'sq_AL.ISO8859-2', + 'sr': 'sr_YU.ISO8859-5', + 'sr@cyrillic': 'sr_YU.ISO8859-5', + 'sr_sp': 'sr_SP.ISO8859-2', + 'sr_yu': 'sr_YU.ISO8859-5', + 'sr_yu.cp1251@cyrillic': 'sr_YU.CP1251', + 'sr_yu.iso88592': 'sr_YU.ISO8859-2', + 'sr_yu.iso88595': 'sr_YU.ISO8859-5', + 'sr_yu.iso88595@cyrillic': 'sr_YU.ISO8859-5', + 'sr_yu.microsoftcp1251@cyrillic': 'sr_YU.CP1251', + 'sr_yu.utf8@cyrillic': 'sr_YU.UTF-8', + 'sr_yu@cyrillic': 'sr_YU.ISO8859-5', + 'sv': 'sv_SE.ISO8859-1', + 'sv_fi': 'sv_FI.ISO8859-1', + 'sv_fi.iso88591': 'sv_FI.ISO8859-1', + 'sv_fi.iso885915': 'sv_FI.ISO8859-15', + 'sv_fi@euro': 'sv_FI.ISO8859-15', + 'sv_se': 'sv_SE.ISO8859-1', + 'sv_se.88591': 'sv_SE.ISO8859-1', + 'sv_se.iso88591': 'sv_SE.ISO8859-1', + 'sv_se.iso885915': 'sv_SE.ISO8859-15', + 'sv_se@euro': 'sv_SE.ISO8859-15', + 'swedish': 'sv_SE.ISO8859-1', + 'swedish.iso88591': 'sv_SE.ISO8859-1', + 'ta': 'ta_IN.TSCII-0', + 'ta_in': 'ta_IN.TSCII-0', + 'ta_in.tscii': 'ta_IN.TSCII-0', + 'ta_in.tscii0': 'ta_IN.TSCII-0', + 'tg': 'tg_TJ.KOI8-C', + 'tg_tj': 'tg_TJ.KOI8-C', + 'tg_tj.koi8c': 'tg_TJ.KOI8-C', + 'th': 'th_TH.ISO8859-11', + 'th_th': 'th_TH.ISO8859-11', + 'th_th.iso885911': 'th_TH.ISO8859-11', + 'th_th.tactis': 'th_TH.TIS620', + 'th_th.tis620': 'th_TH.TIS620', + 'thai': 'th_TH.ISO8859-11', + 'tl': 'tl_PH.ISO8859-1', + 'tl_ph': 'tl_PH.ISO8859-1', + 'tl_ph.iso88591': 'tl_PH.ISO8859-1', + 'tr': 'tr_TR.ISO8859-9', + 'tr_tr': 'tr_TR.ISO8859-9', + 'tr_tr.iso88599': 'tr_TR.ISO8859-9', + 'tt': 'tt_RU.TATAR-CYR', + 'tt_ru': 'tt_RU.TATAR-CYR', + 'tt_ru.koi8c': 'tt_RU.KOI8-C', + 'tt_ru.tatarcyr': 'tt_RU.TATAR-CYR', + 'turkish': 'tr_TR.ISO8859-9', + 'turkish.iso88599': 'tr_TR.ISO8859-9', + 'uk': 'uk_UA.KOI8-U', + 'uk_ua': 'uk_UA.KOI8-U', + 'uk_ua.cp1251': 'uk_UA.CP1251', + 'uk_ua.iso88595': 'uk_UA.ISO8859-5', + 'uk_ua.koi8u': 'uk_UA.KOI8-U', + 'uk_ua.microsoftcp1251': 'uk_UA.CP1251', + 'univ': 'en_US.utf', + 'universal': 'en_US.utf', + 'universal.utf8@ucs4': 'en_US.UTF-8', + 'ur': 'ur_PK.CP1256', + 'ur_pk': 'ur_PK.CP1256', + 'ur_pk.cp1256': 'ur_PK.CP1256', + 'ur_pk.microsoftcp1256': 'ur_PK.CP1256', + 'uz': 'uz_UZ.UTF-8', + 'uz_uz': 'uz_UZ.UTF-8', + 'vi': 'vi_VN.TCVN', + 'vi_vn': 'vi_VN.TCVN', + 'vi_vn.tcvn': 'vi_VN.TCVN', + 'vi_vn.tcvn5712': 'vi_VN.TCVN', + 'vi_vn.viscii': 'vi_VN.VISCII', + 'vi_vn.viscii111': 'vi_VN.VISCII', + 'wa': 'wa_BE.ISO8859-1', + 'wa_be': 'wa_BE.ISO8859-1', + 'wa_be.iso88591': 'wa_BE.ISO8859-1', + 'wa_be.iso885915': 'wa_BE.ISO8859-15', + 'wa_be@euro': 'wa_BE.ISO8859-15', + 'yi': 'yi_US.CP1255', + 'yi_us': 'yi_US.CP1255', + 'yi_us.cp1255': 'yi_US.CP1255', + 'yi_us.microsoftcp1255': 'yi_US.CP1255', + 'zh': 'zh_CN.eucCN', + 'zh_cn': 'zh_CN.gb2312', + 'zh_cn.big5': 'zh_TW.big5', + 'zh_cn.euc': 'zh_CN.eucCN', + 'zh_cn.gb18030': 'zh_CN.gb18030', + 'zh_cn.gb2312': 'zh_CN.gb2312', + 'zh_cn.gbk': 'zh_CN.gbk', + 'zh_hk': 'zh_HK.big5hkscs', + 'zh_hk.big5': 'zh_HK.big5', + 'zh_hk.big5hkscs': 'zh_HK.big5hkscs', + 'zh_tw': 'zh_TW.big5', + 'zh_tw.big5': 'zh_TW.big5', + 'zh_tw.euc': 'zh_TW.eucTW', +} + +# +# This maps Windows language identifiers to locale strings. +# +# This list has been updated from +# http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/nls_238z.asp +# to include every locale up to Windows XP. +# +# NOTE: this mapping is incomplete. If your language is missing, please +# submit a bug report to Python bug manager, which you can find via: +# http://www.python.org/dev/ +# Make sure you include the missing language identifier and the suggested +# locale code. +# + +windows_locale = { + 0x0436: "af_ZA", # Afrikaans + 0x041c: "sq_AL", # Albanian + 0x0401: "ar_SA", # Arabic - Saudi Arabia + 0x0801: "ar_IQ", # Arabic - Iraq + 0x0c01: "ar_EG", # Arabic - Egypt + 0x1001: "ar_LY", # Arabic - Libya + 0x1401: "ar_DZ", # Arabic - Algeria + 0x1801: "ar_MA", # Arabic - Morocco + 0x1c01: "ar_TN", # Arabic - Tunisia + 0x2001: "ar_OM", # Arabic - Oman + 0x2401: "ar_YE", # Arabic - Yemen + 0x2801: "ar_SY", # Arabic - Syria + 0x2c01: "ar_JO", # Arabic - Jordan + 0x3001: "ar_LB", # Arabic - Lebanon + 0x3401: "ar_KW", # Arabic - Kuwait + 0x3801: "ar_AE", # Arabic - United Arab Emirates + 0x3c01: "ar_BH", # Arabic - Bahrain + 0x4001: "ar_QA", # Arabic - Qatar + 0x042b: "hy_AM", # Armenian + 0x042c: "az_AZ", # Azeri Latin + 0x082c: "az_AZ", # Azeri - Cyrillic + 0x042d: "eu_ES", # Basque + 0x0423: "be_BY", # Belarusian + 0x0445: "bn_IN", # Begali + 0x201a: "bs_BA", # Bosnian + 0x141a: "bs_BA", # Bosnian - Cyrillic + 0x047e: "br_FR", # Breton - France + 0x0402: "bg_BG", # Bulgarian + 0x0403: "ca_ES", # Catalan + 0x0004: "zh_CHS",# Chinese - Simplified + 0x0404: "zh_TW", # Chinese - Taiwan + 0x0804: "zh_CN", # Chinese - PRC + 0x0c04: "zh_HK", # Chinese - Hong Kong S.A.R. + 0x1004: "zh_SG", # Chinese - Singapore + 0x1404: "zh_MO", # Chinese - Macao S.A.R. + 0x7c04: "zh_CHT",# Chinese - Traditional + 0x041a: "hr_HR", # Croatian + 0x101a: "hr_BA", # Croatian - Bosnia + 0x0405: "cs_CZ", # Czech + 0x0406: "da_DK", # Danish + 0x048c: "gbz_AF",# Dari - Afghanistan + 0x0465: "div_MV",# Divehi - Maldives + 0x0413: "nl_NL", # Dutch - The Netherlands + 0x0813: "nl_BE", # Dutch - Belgium + 0x0409: "en_US", # English - United States + 0x0809: "en_GB", # English - United Kingdom + 0x0c09: "en_AU", # English - Australia + 0x1009: "en_CA", # English - Canada + 0x1409: "en_NZ", # English - New Zealand + 0x1809: "en_IE", # English - Ireland + 0x1c09: "en_ZA", # English - South Africa + 0x2009: "en_JA", # English - Jamaica + 0x2409: "en_CB", # English - Carribbean + 0x2809: "en_BZ", # English - Belize + 0x2c09: "en_TT", # English - Trinidad + 0x3009: "en_ZW", # English - Zimbabwe + 0x3409: "en_PH", # English - Phillippines + 0x0425: "et_EE", # Estonian + 0x0438: "fo_FO", # Faroese + 0x0464: "fil_PH",# Filipino + 0x040b: "fi_FI", # Finnish + 0x040c: "fr_FR", # French - France + 0x080c: "fr_BE", # French - Belgium + 0x0c0c: "fr_CA", # French - Canada + 0x100c: "fr_CH", # French - Switzerland + 0x140c: "fr_LU", # French - Luxembourg + 0x180c: "fr_MC", # French - Monaco + 0x0462: "fy_NL", # Frisian - Netherlands + 0x0456: "gl_ES", # Galician + 0x0437: "ka_GE", # Georgian + 0x0407: "de_DE", # German - Germany + 0x0807: "de_CH", # German - Switzerland + 0x0c07: "de_AT", # German - Austria + 0x1007: "de_LU", # German - Luxembourg + 0x1407: "de_LI", # German - Liechtenstein + 0x0408: "el_GR", # Greek + 0x0447: "gu_IN", # Gujarati + 0x040d: "he_IL", # Hebrew + 0x0439: "hi_IN", # Hindi + 0x040e: "hu_HU", # Hungarian + 0x040f: "is_IS", # Icelandic + 0x0421: "id_ID", # Indonesian + 0x045d: "iu_CA", # Inuktitut + 0x085d: "iu_CA", # Inuktitut - Latin + 0x083c: "ga_IE", # Irish - Ireland + 0x0434: "xh_ZA", # Xhosa - South Africa + 0x0435: "zu_ZA", # Zulu + 0x0410: "it_IT", # Italian - Italy + 0x0810: "it_CH", # Italian - Switzerland + 0x0411: "ja_JP", # Japanese + 0x044b: "kn_IN", # Kannada - India + 0x043f: "kk_KZ", # Kazakh + 0x0457: "kok_IN",# Konkani + 0x0412: "ko_KR", # Korean + 0x0440: "ky_KG", # Kyrgyz + 0x0426: "lv_LV", # Latvian + 0x0427: "lt_LT", # Lithuanian + 0x046e: "lb_LU", # Luxembourgish + 0x042f: "mk_MK", # FYRO Macedonian + 0x043e: "ms_MY", # Malay - Malaysia + 0x083e: "ms_BN", # Malay - Brunei + 0x044c: "ml_IN", # Malayalam - India + 0x043a: "mt_MT", # Maltese + 0x0481: "mi_NZ", # Maori + 0x047a: "arn_CL",# Mapudungun + 0x044e: "mr_IN", # Marathi + 0x047c: "moh_CA",# Mohawk - Canada + 0x0450: "mn_MN", # Mongolian + 0x0461: "ne_NP", # Nepali + 0x0414: "nb_NO", # Norwegian - Bokmal + 0x0814: "nn_NO", # Norwegian - Nynorsk + 0x0482: "oc_FR", # Occitan - France + 0x0448: "or_IN", # Oriya - India + 0x0463: "ps_AF", # Pashto - Afghanistan + 0x0429: "fa_IR", # Persian + 0x0415: "pl_PL", # Polish + 0x0416: "pt_BR", # Portuguese - Brazil + 0x0816: "pt_PT", # Portuguese - Portugal + 0x0446: "pa_IN", # Punjabi + 0x046b: "quz_BO",# Quechua (Bolivia) + 0x086b: "quz_EC",# Quechua (Ecuador) + 0x0c6b: "quz_PE",# Quechua (Peru) + 0x0418: "ro_RO", # Romanian - Romania + 0x0417: "rm_CH", # Raeto-Romanese + 0x0419: "ru_RU", # Russian + 0x243b: "smn_FI",# Sami Finland + 0x103b: "smj_NO",# Sami Norway + 0x143b: "smj_SE",# Sami Sweden + 0x043b: "se_NO", # Sami Northern Norway + 0x083b: "se_SE", # Sami Northern Sweden + 0x0c3b: "se_FI", # Sami Northern Finland + 0x203b: "sms_FI",# Sami Skolt + 0x183b: "sma_NO",# Sami Southern Norway + 0x1c3b: "sma_SE",# Sami Southern Sweden + 0x044f: "sa_IN", # Sanskrit + 0x0c1a: "sr_SP", # Serbian - Cyrillic + 0x1c1a: "sr_BA", # Serbian - Bosnia Cyrillic + 0x081a: "sr_SP", # Serbian - Latin + 0x181a: "sr_BA", # Serbian - Bosnia Latin + 0x046c: "ns_ZA", # Northern Sotho + 0x0432: "tn_ZA", # Setswana - Southern Africa + 0x041b: "sk_SK", # Slovak + 0x0424: "sl_SI", # Slovenian + 0x040a: "es_ES", # Spanish - Spain + 0x080a: "es_MX", # Spanish - Mexico + 0x0c0a: "es_ES", # Spanish - Spain (Modern) + 0x100a: "es_GT", # Spanish - Guatemala + 0x140a: "es_CR", # Spanish - Costa Rica + 0x180a: "es_PA", # Spanish - Panama + 0x1c0a: "es_DO", # Spanish - Dominican Republic + 0x200a: "es_VE", # Spanish - Venezuela + 0x240a: "es_CO", # Spanish - Colombia + 0x280a: "es_PE", # Spanish - Peru + 0x2c0a: "es_AR", # Spanish - Argentina + 0x300a: "es_EC", # Spanish - Ecuador + 0x340a: "es_CL", # Spanish - Chile + 0x380a: "es_UR", # Spanish - Uruguay + 0x3c0a: "es_PY", # Spanish - Paraguay + 0x400a: "es_BO", # Spanish - Bolivia + 0x440a: "es_SV", # Spanish - El Salvador + 0x480a: "es_HN", # Spanish - Honduras + 0x4c0a: "es_NI", # Spanish - Nicaragua + 0x500a: "es_PR", # Spanish - Puerto Rico + 0x0441: "sw_KE", # Swahili + 0x041d: "sv_SE", # Swedish - Sweden + 0x081d: "sv_FI", # Swedish - Finland + 0x045a: "syr_SY",# Syriac + 0x0449: "ta_IN", # Tamil + 0x0444: "tt_RU", # Tatar + 0x044a: "te_IN", # Telugu + 0x041e: "th_TH", # Thai + 0x041f: "tr_TR", # Turkish + 0x0422: "uk_UA", # Ukrainian + 0x0420: "ur_PK", # Urdu + 0x0820: "ur_IN", # Urdu - India + 0x0443: "uz_UZ", # Uzbek - Latin + 0x0843: "uz_UZ", # Uzbek - Cyrillic + 0x042a: "vi_VN", # Vietnamese + 0x0452: "cy_GB", # Welsh +} + +def _print_locale(): + + """ Test function. + """ + categories = {} + def _init_categories(categories=categories): + for k,v in globals().items(): + if k[:3] == 'LC_': + categories[k] = v + _init_categories() + del categories['LC_ALL'] + + print 'Locale defaults as determined by getdefaultlocale():' + print '-'*72 + lang, enc = getdefaultlocale() + print 'Language: ', lang or '(undefined)' + print 'Encoding: ', enc or '(undefined)' + print + + print 'Locale settings on startup:' + print '-'*72 + for name,category in categories.items(): + print name, '...' + lang, enc = getlocale(category) + print ' Language: ', lang or '(undefined)' + print ' Encoding: ', enc or '(undefined)' + print + + print + print 'Locale settings after calling resetlocale():' + print '-'*72 + resetlocale() + for name,category in categories.items(): + print name, '...' + lang, enc = getlocale(category) + print ' Language: ', lang or '(undefined)' + print ' Encoding: ', enc or '(undefined)' + print + + try: + setlocale(LC_ALL, "") + except: + print 'NOTE:' + print 'setlocale(LC_ALL, "") does not support the default locale' + print 'given in the OS environment variables.' + else: + print + print 'Locale settings after calling setlocale(LC_ALL, ""):' + print '-'*72 + for name,category in categories.items(): + print name, '...' + lang, enc = getlocale(category) + print ' Language: ', lang or '(undefined)' + print ' Encoding: ', enc or '(undefined)' + print + +### + +try: + LC_MESSAGES +except NameError: + pass +else: + __all__.append("LC_MESSAGES") + +if __name__=='__main__': + print 'Locale aliasing:' + print + _print_locale() + print + print 'Number formatting:' + print + _test() diff --git a/thirdparty/python25/Lib/md5.py b/thirdparty/python25/Lib/md5.py new file mode 100644 index 000000000..a5ca4009e --- /dev/null +++ b/thirdparty/python25/Lib/md5.py @@ -0,0 +1,10 @@ +# $Id: md5.py 39316 2005-08-21 18:45:59Z greg $ +# +# Copyright (C) 2005 Gregory P. Smith (greg@electricrain.com) +# Licensed to PSF under a Contributor Agreement. + +from hashlib import md5 +new = md5 + +blocksize = 1 # legacy value (wrong in any useful sense) +digest_size = 16 diff --git a/thirdparty/python25/Lib/mimetools.py b/thirdparty/python25/Lib/mimetools.py new file mode 100644 index 000000000..c4b9be67e --- /dev/null +++ b/thirdparty/python25/Lib/mimetools.py @@ -0,0 +1,241 @@ +"""Various tools used by MIME-reading or MIME-writing programs.""" + + +import os +import rfc822 +import tempfile + +__all__ = ["Message","choose_boundary","encode","decode","copyliteral", + "copybinary"] + +class Message(rfc822.Message): + """A derived class of rfc822.Message that knows about MIME headers and + contains some hooks for decoding encoded and multipart messages.""" + + def __init__(self, fp, seekable = 1): + rfc822.Message.__init__(self, fp, seekable) + self.encodingheader = \ + self.getheader('content-transfer-encoding') + self.typeheader = \ + self.getheader('content-type') + self.parsetype() + self.parseplist() + + def parsetype(self): + str = self.typeheader + if str is None: + str = 'text/plain' + if ';' in str: + i = str.index(';') + self.plisttext = str[i:] + str = str[:i] + else: + self.plisttext = '' + fields = str.split('/') + for i in range(len(fields)): + fields[i] = fields[i].strip().lower() + self.type = '/'.join(fields) + self.maintype = fields[0] + self.subtype = '/'.join(fields[1:]) + + def parseplist(self): + str = self.plisttext + self.plist = [] + while str[:1] == ';': + str = str[1:] + if ';' in str: + # XXX Should parse quotes! + end = str.index(';') + else: + end = len(str) + f = str[:end] + if '=' in f: + i = f.index('=') + f = f[:i].strip().lower() + \ + '=' + f[i+1:].strip() + self.plist.append(f.strip()) + str = str[end:] + + def getplist(self): + return self.plist + + def getparam(self, name): + name = name.lower() + '=' + n = len(name) + for p in self.plist: + if p[:n] == name: + return rfc822.unquote(p[n:]) + return None + + def getparamnames(self): + result = [] + for p in self.plist: + i = p.find('=') + if i >= 0: + result.append(p[:i].lower()) + return result + + def getencoding(self): + if self.encodingheader is None: + return '7bit' + return self.encodingheader.lower() + + def gettype(self): + return self.type + + def getmaintype(self): + return self.maintype + + def getsubtype(self): + return self.subtype + + + + +# Utility functions +# ----------------- + +try: + import thread +except ImportError: + import dummy_thread as thread +_counter_lock = thread.allocate_lock() +del thread + +_counter = 0 +def _get_next_counter(): + global _counter + _counter_lock.acquire() + _counter += 1 + result = _counter + _counter_lock.release() + return result + +_prefix = None + +def choose_boundary(): + """Return a string usable as a multipart boundary. + + The string chosen is unique within a single program run, and + incorporates the user id (if available), process id (if available), + and current time. So it's very unlikely the returned string appears + in message text, but there's no guarantee. + + The boundary contains dots so you have to quote it in the header.""" + + global _prefix + import time + if _prefix is None: + import socket + try: + hostid = socket.gethostbyname(socket.gethostname()) + except socket.gaierror: + hostid = '127.0.0.1' + try: + uid = repr(os.getuid()) + except AttributeError: + uid = '1' + try: + pid = repr(os.getpid()) + except AttributeError: + pid = '1' + _prefix = hostid + '.' + uid + '.' + pid + return "%s.%.3f.%d" % (_prefix, time.time(), _get_next_counter()) + + +# Subroutines for decoding some common content-transfer-types + +def decode(input, output, encoding): + """Decode common content-transfer-encodings (base64, quopri, uuencode).""" + if encoding == 'base64': + import base64 + return base64.decode(input, output) + if encoding == 'quoted-printable': + import quopri + return quopri.decode(input, output) + if encoding in ('uuencode', 'x-uuencode', 'uue', 'x-uue'): + import uu + return uu.decode(input, output) + if encoding in ('7bit', '8bit'): + return output.write(input.read()) + if encoding in decodetab: + pipethrough(input, decodetab[encoding], output) + else: + raise ValueError, \ + 'unknown Content-Transfer-Encoding: %s' % encoding + +def encode(input, output, encoding): + """Encode common content-transfer-encodings (base64, quopri, uuencode).""" + if encoding == 'base64': + import base64 + return base64.encode(input, output) + if encoding == 'quoted-printable': + import quopri + return quopri.encode(input, output, 0) + if encoding in ('uuencode', 'x-uuencode', 'uue', 'x-uue'): + import uu + return uu.encode(input, output) + if encoding in ('7bit', '8bit'): + return output.write(input.read()) + if encoding in encodetab: + pipethrough(input, encodetab[encoding], output) + else: + raise ValueError, \ + 'unknown Content-Transfer-Encoding: %s' % encoding + +# The following is no longer used for standard encodings + +# XXX This requires that uudecode and mmencode are in $PATH + +uudecode_pipe = '''( +TEMP=/tmp/@uu.$$ +sed "s%^begin [0-7][0-7]* .*%begin 600 $TEMP%" | uudecode +cat $TEMP +rm $TEMP +)''' + +decodetab = { + 'uuencode': uudecode_pipe, + 'x-uuencode': uudecode_pipe, + 'uue': uudecode_pipe, + 'x-uue': uudecode_pipe, + 'quoted-printable': 'mmencode -u -q', + 'base64': 'mmencode -u -b', +} + +encodetab = { + 'x-uuencode': 'uuencode tempfile', + 'uuencode': 'uuencode tempfile', + 'x-uue': 'uuencode tempfile', + 'uue': 'uuencode tempfile', + 'quoted-printable': 'mmencode -q', + 'base64': 'mmencode -b', +} + +def pipeto(input, command): + pipe = os.popen(command, 'w') + copyliteral(input, pipe) + pipe.close() + +def pipethrough(input, command, output): + (fd, tempname) = tempfile.mkstemp() + temp = os.fdopen(fd, 'w') + copyliteral(input, temp) + temp.close() + pipe = os.popen(command + ' <' + tempname, 'r') + copybinary(pipe, output) + pipe.close() + os.unlink(tempname) + +def copyliteral(input, output): + while 1: + line = input.readline() + if not line: break + output.write(line) + +def copybinary(input, output): + BUFSIZE = 8192 + while 1: + line = input.read(BUFSIZE) + if not line: break + output.write(line) diff --git a/thirdparty/python25/Lib/ntpath.py b/thirdparty/python25/Lib/ntpath.py new file mode 100644 index 000000000..bf6d284c4 --- /dev/null +++ b/thirdparty/python25/Lib/ntpath.py @@ -0,0 +1,511 @@ +# Module 'ntpath' -- common operations on WinNT/Win95 pathnames +"""Common pathname manipulations, WindowsNT/95 version. + +Instead of importing this module directly, import os and refer to this +module as os.path. +""" + +import os +import stat +import sys + +__all__ = ["normcase","isabs","join","splitdrive","split","splitext", + "basename","dirname","commonprefix","getsize","getmtime", + "getatime","getctime", "islink","exists","lexists","isdir","isfile", + "ismount","walk","expanduser","expandvars","normpath","abspath", + "splitunc","curdir","pardir","sep","pathsep","defpath","altsep", + "extsep","devnull","realpath","supports_unicode_filenames"] + +# strings representing various path-related bits and pieces +curdir = '.' +pardir = '..' +extsep = '.' +sep = '\\' +pathsep = ';' +altsep = '/' +defpath = '.;C:\\bin' +if 'ce' in sys.builtin_module_names: + defpath = '\\Windows' +elif 'os2' in sys.builtin_module_names: + # OS/2 w/ VACPP + altsep = '/' +devnull = 'nul' + +# Normalize the case of a pathname and map slashes to backslashes. +# Other normalizations (such as optimizing '../' away) are not done +# (this is done by normpath). + +def normcase(s): + """Normalize case of pathname. + + Makes all characters lowercase and all slashes into backslashes.""" + return s.replace("/", "\\").lower() + + +# Return whether a path is absolute. +# Trivial in Posix, harder on the Mac or MS-DOS. +# For DOS it is absolute if it starts with a slash or backslash (current +# volume), or if a pathname after the volume letter and colon / UNC resource +# starts with a slash or backslash. + +def isabs(s): + """Test whether a path is absolute""" + s = splitdrive(s)[1] + return s != '' and s[:1] in '/\\' + + +# Join two (or more) paths. + +def join(a, *p): + """Join two or more pathname components, inserting "\\" as needed""" + path = a + for b in p: + b_wins = 0 # set to 1 iff b makes path irrelevant + if path == "": + b_wins = 1 + + elif isabs(b): + # This probably wipes out path so far. However, it's more + # complicated if path begins with a drive letter: + # 1. join('c:', '/a') == 'c:/a' + # 2. join('c:/', '/a') == 'c:/a' + # But + # 3. join('c:/a', '/b') == '/b' + # 4. join('c:', 'd:/') = 'd:/' + # 5. join('c:/', 'd:/') = 'd:/' + if path[1:2] != ":" or b[1:2] == ":": + # Path doesn't start with a drive letter, or cases 4 and 5. + b_wins = 1 + + # Else path has a drive letter, and b doesn't but is absolute. + elif len(path) > 3 or (len(path) == 3 and + path[-1] not in "/\\"): + # case 3 + b_wins = 1 + + if b_wins: + path = b + else: + # Join, and ensure there's a separator. + assert len(path) > 0 + if path[-1] in "/\\": + if b and b[0] in "/\\": + path += b[1:] + else: + path += b + elif path[-1] == ":": + path += b + elif b: + if b[0] in "/\\": + path += b + else: + path += "\\" + b + else: + # path is not empty and does not end with a backslash, + # but b is empty; since, e.g., split('a/') produces + # ('a', ''), it's best if join() adds a backslash in + # this case. + path += '\\' + + return path + + +# Split a path in a drive specification (a drive letter followed by a +# colon) and the path specification. +# It is always true that drivespec + pathspec == p +def splitdrive(p): + """Split a pathname into drive and path specifiers. Returns a 2-tuple +"(drive,path)"; either part may be empty""" + if p[1:2] == ':': + return p[0:2], p[2:] + return '', p + + +# Parse UNC paths +def splitunc(p): + """Split a pathname into UNC mount point and relative path specifiers. + + Return a 2-tuple (unc, rest); either part may be empty. + If unc is not empty, it has the form '//host/mount' (or similar + using backslashes). unc+rest is always the input path. + Paths containing drive letters never have an UNC part. + """ + if p[1:2] == ':': + return '', p # Drive letter present + firstTwo = p[0:2] + if firstTwo == '//' or firstTwo == '\\\\': + # is a UNC path: + # vvvvvvvvvvvvvvvvvvvv equivalent to drive letter + # \\machine\mountpoint\directories... + # directory ^^^^^^^^^^^^^^^ + normp = normcase(p) + index = normp.find('\\', 2) + if index == -1: + ##raise RuntimeError, 'illegal UNC path: "' + p + '"' + return ("", p) + index = normp.find('\\', index + 1) + if index == -1: + index = len(p) + return p[:index], p[index:] + return '', p + + +# Split a path in head (everything up to the last '/') and tail (the +# rest). After the trailing '/' is stripped, the invariant +# join(head, tail) == p holds. +# The resulting head won't end in '/' unless it is the root. + +def split(p): + """Split a pathname. + + Return tuple (head, tail) where tail is everything after the final slash. + Either part may be empty.""" + + d, p = splitdrive(p) + # set i to index beyond p's last slash + i = len(p) + while i and p[i-1] not in '/\\': + i = i - 1 + head, tail = p[:i], p[i:] # now tail has no slashes + # remove trailing slashes from head, unless it's all slashes + head2 = head + while head2 and head2[-1] in '/\\': + head2 = head2[:-1] + head = head2 or head + return d + head, tail + + +# Split a path in root and extension. +# The extension is everything starting at the last dot in the last +# pathname component; the root is everything before that. +# It is always true that root + ext == p. + +def splitext(p): + """Split the extension from a pathname. + + Extension is everything from the last dot to the end. + Return (root, ext), either part may be empty.""" + + i = p.rfind('.') + if i<=max(p.rfind('/'), p.rfind('\\')): + return p, '' + else: + return p[:i], p[i:] + + +# Return the tail (basename) part of a path. + +def basename(p): + """Returns the final component of a pathname""" + return split(p)[1] + + +# Return the head (dirname) part of a path. + +def dirname(p): + """Returns the directory component of a pathname""" + return split(p)[0] + + +# Return the longest prefix of all list elements. + +def commonprefix(m): + "Given a list of pathnames, returns the longest common leading component" + if not m: return '' + s1 = min(m) + s2 = max(m) + n = min(len(s1), len(s2)) + for i in xrange(n): + if s1[i] != s2[i]: + return s1[:i] + return s1[:n] + + +# Get size, mtime, atime of files. + +def getsize(filename): + """Return the size of a file, reported by os.stat()""" + return os.stat(filename).st_size + +def getmtime(filename): + """Return the last modification time of a file, reported by os.stat()""" + return os.stat(filename).st_mtime + +def getatime(filename): + """Return the last access time of a file, reported by os.stat()""" + return os.stat(filename).st_atime + +def getctime(filename): + """Return the creation time of a file, reported by os.stat().""" + return os.stat(filename).st_ctime + +# Is a path a symbolic link? +# This will always return false on systems where posix.lstat doesn't exist. + +def islink(path): + """Test for symbolic link. On WindowsNT/95 always returns false""" + return False + + +# Does a path exist? + +def exists(path): + """Test whether a path exists""" + try: + st = os.stat(path) + except os.error: + return False + return True + +lexists = exists + + +# Is a path a dos directory? +# This follows symbolic links, so both islink() and isdir() can be true +# for the same path. + +def isdir(path): + """Test whether a path is a directory""" + try: + st = os.stat(path) + except os.error: + return False + return stat.S_ISDIR(st.st_mode) + + +# Is a path a regular file? +# This follows symbolic links, so both islink() and isdir() can be true +# for the same path. + +def isfile(path): + """Test whether a path is a regular file""" + try: + st = os.stat(path) + except os.error: + return False + return stat.S_ISREG(st.st_mode) + + +# Is a path a mount point? Either a root (with or without drive letter) +# or an UNC path with at most a / or \ after the mount point. + +def ismount(path): + """Test whether a path is a mount point (defined as root of drive)""" + unc, rest = splitunc(path) + if unc: + return rest in ("", "/", "\\") + p = splitdrive(path)[1] + return len(p) == 1 and p[0] in '/\\' + + +# Directory tree walk. +# For each directory under top (including top itself, but excluding +# '.' and '..'), func(arg, dirname, filenames) is called, where +# dirname is the name of the directory and filenames is the list +# of files (and subdirectories etc.) in the directory. +# The func may modify the filenames list, to implement a filter, +# or to impose a different order of visiting. + +def walk(top, func, arg): + """Directory tree walk with callback function. + + For each directory in the directory tree rooted at top (including top + itself, but excluding '.' and '..'), call func(arg, dirname, fnames). + dirname is the name of the directory, and fnames a list of the names of + the files and subdirectories in dirname (excluding '.' and '..'). func + may modify the fnames list in-place (e.g. via del or slice assignment), + and walk will only recurse into the subdirectories whose names remain in + fnames; this can be used to implement a filter, or to impose a specific + order of visiting. No semantics are defined for, or required of, arg, + beyond that arg is always passed to func. It can be used, e.g., to pass + a filename pattern, or a mutable object designed to accumulate + statistics. Passing None for arg is common.""" + + try: + names = os.listdir(top) + except os.error: + return + func(arg, top, names) + exceptions = ('.', '..') + for name in names: + if name not in exceptions: + name = join(top, name) + if isdir(name): + walk(name, func, arg) + + +# Expand paths beginning with '~' or '~user'. +# '~' means $HOME; '~user' means that user's home directory. +# If the path doesn't begin with '~', or if the user or $HOME is unknown, +# the path is returned unchanged (leaving error reporting to whatever +# function is called with the expanded path as argument). +# See also module 'glob' for expansion of *, ? and [...] in pathnames. +# (A function should also be defined to do full *sh-style environment +# variable expansion.) + +def expanduser(path): + """Expand ~ and ~user constructs. + + If user or $HOME is unknown, do nothing.""" + if path[:1] != '~': + return path + i, n = 1, len(path) + while i < n and path[i] not in '/\\': + i = i + 1 + if i == 1: + if 'HOME' in os.environ: + userhome = os.environ['HOME'] + elif not 'HOMEPATH' in os.environ: + return path + else: + try: + drive = os.environ['HOMEDRIVE'] + except KeyError: + drive = '' + userhome = join(drive, os.environ['HOMEPATH']) + else: + return path + return userhome + path[i:] + + +# Expand paths containing shell variable substitutions. +# The following rules apply: +# - no expansion within single quotes +# - no escape character, except for '$$' which is translated into '$' +# - ${varname} is accepted. +# - varnames can be made out of letters, digits and the character '_' +# XXX With COMMAND.COM you can use any characters in a variable name, +# XXX except '^|<>='. + +def expandvars(path): + """Expand shell variables of form $var and ${var}. + + Unknown variables are left unchanged.""" + if '$' not in path: + return path + import string + varchars = string.ascii_letters + string.digits + '_-' + res = '' + index = 0 + pathlen = len(path) + while index < pathlen: + c = path[index] + if c == '\'': # no expansion within single quotes + path = path[index + 1:] + pathlen = len(path) + try: + index = path.index('\'') + res = res + '\'' + path[:index + 1] + except ValueError: + res = res + path + index = pathlen - 1 + elif c == '$': # variable or '$$' + if path[index + 1:index + 2] == '$': + res = res + c + index = index + 1 + elif path[index + 1:index + 2] == '{': + path = path[index+2:] + pathlen = len(path) + try: + index = path.index('}') + var = path[:index] + if var in os.environ: + res = res + os.environ[var] + except ValueError: + res = res + path + index = pathlen - 1 + else: + var = '' + index = index + 1 + c = path[index:index + 1] + while c != '' and c in varchars: + var = var + c + index = index + 1 + c = path[index:index + 1] + if var in os.environ: + res = res + os.environ[var] + if c != '': + res = res + c + else: + res = res + c + index = index + 1 + return res + + +# Normalize a path, e.g. A//B, A/./B and A/foo/../B all become A\B. +# Previously, this function also truncated pathnames to 8+3 format, +# but as this module is called "ntpath", that's obviously wrong! + +def normpath(path): + """Normalize path, eliminating double slashes, etc.""" + path = path.replace("/", "\\") + prefix, path = splitdrive(path) + # We need to be careful here. If the prefix is empty, and the path starts + # with a backslash, it could either be an absolute path on the current + # drive (\dir1\dir2\file) or a UNC filename (\\server\mount\dir1\file). It + # is therefore imperative NOT to collapse multiple backslashes blindly in + # that case. + # The code below preserves multiple backslashes when there is no drive + # letter. This means that the invalid filename \\\a\b is preserved + # unchanged, where a\\\b is normalised to a\b. It's not clear that there + # is any better behaviour for such edge cases. + if prefix == '': + # No drive letter - preserve initial backslashes + while path[:1] == "\\": + prefix = prefix + "\\" + path = path[1:] + else: + # We have a drive letter - collapse initial backslashes + if path.startswith("\\"): + prefix = prefix + "\\" + path = path.lstrip("\\") + comps = path.split("\\") + i = 0 + while i < len(comps): + if comps[i] in ('.', ''): + del comps[i] + elif comps[i] == '..': + if i > 0 and comps[i-1] != '..': + del comps[i-1:i+1] + i -= 1 + elif i == 0 and prefix.endswith("\\"): + del comps[i] + else: + i += 1 + else: + i += 1 + # If the path is now empty, substitute '.' + if not prefix and not comps: + comps.append('.') + return prefix + "\\".join(comps) + + +# Return an absolute path. +try: + from nt import _getfullpathname + +except ImportError: # not running on Windows - mock up something sensible + def abspath(path): + """Return the absolute version of a path.""" + if not isabs(path): + path = join(os.getcwd(), path) + return normpath(path) + +else: # use native Windows method on Windows + def abspath(path): + """Return the absolute version of a path.""" + + if path: # Empty path must return current working directory. + try: + path = _getfullpathname(path) + except WindowsError: + pass # Bad path - return unchanged. + else: + path = os.getcwd() + return normpath(path) + +# realpath is a no-op on systems without islink support +realpath = abspath +# Win9x family and earlier have no Unicode filename support. +supports_unicode_filenames = (hasattr(sys, "getwindowsversion") and + sys.getwindowsversion()[3] >= 2) diff --git a/thirdparty/python25/Lib/nturl2path.py b/thirdparty/python25/Lib/nturl2path.py new file mode 100644 index 000000000..a2517ea4f --- /dev/null +++ b/thirdparty/python25/Lib/nturl2path.py @@ -0,0 +1,63 @@ +"""Convert a NT pathname to a file URL and vice versa.""" + +def url2pathname(url): + """OS-specific conversion from a relative URL of the 'file' scheme + to a file system path; not recommended for general use.""" + # e.g. + # ///C|/foo/bar/spam.foo + # becomes + # C:\foo\bar\spam.foo + import string, urllib + # Windows itself uses ":" even in URLs. + url = url.replace(':', '|') + if not '|' in url: + # No drive specifier, just convert slashes + if url[:4] == '////': + # path is something like ////host/path/on/remote/host + # convert this to \\host\path\on\remote\host + # (notice halving of slashes at the start of the path) + url = url[2:] + components = url.split('/') + # make sure not to convert quoted slashes :-) + return urllib.unquote('\\'.join(components)) + comp = url.split('|') + if len(comp) != 2 or comp[0][-1] not in string.ascii_letters: + error = 'Bad URL: ' + url + raise IOError, error + drive = comp[0][-1].upper() + components = comp[1].split('/') + path = drive + ':' + for comp in components: + if comp: + path = path + '\\' + urllib.unquote(comp) + return path + +def pathname2url(p): + """OS-specific conversion from a file system path to a relative URL + of the 'file' scheme; not recommended for general use.""" + # e.g. + # C:\foo\bar\spam.foo + # becomes + # ///C|/foo/bar/spam.foo + import urllib + if not ':' in p: + # No drive specifier, just convert slashes and quote the name + if p[:2] == '\\\\': + # path is something like \\host\path\on\remote\host + # convert this to ////host/path/on/remote/host + # (notice doubling of slashes at the start of the path) + p = '\\\\' + p + components = p.split('\\') + return urllib.quote('/'.join(components)) + comp = p.split(':') + if len(comp) != 2 or len(comp[0]) > 1: + error = 'Bad path: ' + p + raise IOError, error + + drive = urllib.quote(comp[0].upper()) + components = comp[1].split('\\') + path = '///' + drive + '|' + for comp in components: + if comp: + path = path + '/' + urllib.quote(comp) + return path diff --git a/thirdparty/python25/Lib/os.py b/thirdparty/python25/Lib/os.py new file mode 100644 index 000000000..813240768 --- /dev/null +++ b/thirdparty/python25/Lib/os.py @@ -0,0 +1,738 @@ +r"""OS routines for Mac, NT, or Posix depending on what system we're on. + +This exports: + - all functions from posix, nt, os2, mac, or ce, e.g. unlink, stat, etc. + - os.path is one of the modules posixpath, ntpath, or macpath + - os.name is 'posix', 'nt', 'os2', 'mac', 'ce' or 'riscos' + - os.curdir is a string representing the current directory ('.' or ':') + - os.pardir is a string representing the parent directory ('..' or '::') + - os.sep is the (or a most common) pathname separator ('/' or ':' or '\\') + - os.extsep is the extension separator ('.' or '/') + - os.altsep is the alternate pathname separator (None or '/') + - os.pathsep is the component separator used in $PATH etc + - os.linesep is the line separator in text files ('\r' or '\n' or '\r\n') + - os.defpath is the default search path for executables + - os.devnull is the file path of the null device ('/dev/null', etc.) + +Programs that import and use 'os' stand a better chance of being +portable between different platforms. Of course, they must then +only use functions that are defined by all platforms (e.g., unlink +and opendir), and leave all pathname manipulation to os.path +(e.g., split and join). +""" + +#' + +import sys + +_names = sys.builtin_module_names + +# Note: more names are added to __all__ later. +__all__ = ["altsep", "curdir", "pardir", "sep", "pathsep", "linesep", + "defpath", "name", "path", "devnull", + "SEEK_SET", "SEEK_CUR", "SEEK_END"] + +def _get_exports_list(module): + try: + return list(module.__all__) + except AttributeError: + return [n for n in dir(module) if n[0] != '_'] + +if 'posix' in _names: + name = 'posix' + linesep = '\n' + from posix import * + try: + from posix import _exit + except ImportError: + pass + import posixpath as path + + import posix + __all__.extend(_get_exports_list(posix)) + del posix + +elif 'nt' in _names: + name = 'nt' + linesep = '\r\n' + from nt import * + try: + from nt import _exit + except ImportError: + pass + import ntpath as path + + import nt + __all__.extend(_get_exports_list(nt)) + del nt + +elif 'os2' in _names: + name = 'os2' + linesep = '\r\n' + from os2 import * + try: + from os2 import _exit + except ImportError: + pass + if sys.version.find('EMX GCC') == -1: + import ntpath as path + else: + import os2emxpath as path + from _emx_link import link + + import os2 + __all__.extend(_get_exports_list(os2)) + del os2 + +elif 'mac' in _names: + name = 'mac' + linesep = '\r' + from mac import * + try: + from mac import _exit + except ImportError: + pass + import macpath as path + + import mac + __all__.extend(_get_exports_list(mac)) + del mac + +elif 'ce' in _names: + name = 'ce' + linesep = '\r\n' + from ce import * + try: + from ce import _exit + except ImportError: + pass + # We can use the standard Windows path. + import ntpath as path + + import ce + __all__.extend(_get_exports_list(ce)) + del ce + +elif 'riscos' in _names: + name = 'riscos' + linesep = '\n' + from riscos import * + try: + from riscos import _exit + except ImportError: + pass + import riscospath as path + + import riscos + __all__.extend(_get_exports_list(riscos)) + del riscos + +else: + raise ImportError, 'no os specific module found' + +sys.modules['os.path'] = path +from os.path import (curdir, pardir, sep, pathsep, defpath, extsep, altsep, + devnull) + +del _names + +# Python uses fixed values for the SEEK_ constants; they are mapped +# to native constants if necessary in posixmodule.c +SEEK_SET = 0 +SEEK_CUR = 1 +SEEK_END = 2 + +#' + +# Super directory utilities. +# (Inspired by Eric Raymond; the doc strings are mostly his) + +def makedirs(name, mode=0777): + """makedirs(path [, mode=0777]) + + Super-mkdir; create a leaf directory and all intermediate ones. + Works like mkdir, except that any intermediate path segment (not + just the rightmost) will be created if it does not exist. This is + recursive. + + """ + from errno import EEXIST + head, tail = path.split(name) + if not tail: + head, tail = path.split(head) + if head and tail and not path.exists(head): + try: + makedirs(head, mode) + except OSError, e: + # be happy if someone already created the path + if e.errno != EEXIST: + raise + if tail == curdir: # xxx/newdir/. exists if xxx/newdir exists + return + mkdir(name, mode) + +def removedirs(name): + """removedirs(path) + + Super-rmdir; remove a leaf directory and all empty intermediate + ones. Works like rmdir except that, if the leaf directory is + successfully removed, directories corresponding to rightmost path + segments will be pruned away until either the whole path is + consumed or an error occurs. Errors during this latter phase are + ignored -- they generally mean that a directory was not empty. + + """ + rmdir(name) + head, tail = path.split(name) + if not tail: + head, tail = path.split(head) + while head and tail: + try: + rmdir(head) + except error: + break + head, tail = path.split(head) + +def renames(old, new): + """renames(old, new) + + Super-rename; create directories as necessary and delete any left + empty. Works like rename, except creation of any intermediate + directories needed to make the new pathname good is attempted + first. After the rename, directories corresponding to rightmost + path segments of the old name will be pruned way until either the + whole path is consumed or a nonempty directory is found. + + Note: this function can fail with the new directory structure made + if you lack permissions needed to unlink the leaf directory or + file. + + """ + head, tail = path.split(new) + if head and tail and not path.exists(head): + makedirs(head) + rename(old, new) + head, tail = path.split(old) + if head and tail: + try: + removedirs(head) + except error: + pass + +__all__.extend(["makedirs", "removedirs", "renames"]) + +def walk(top, topdown=True, onerror=None): + """Directory tree generator. + + For each directory in the directory tree rooted at top (including top + itself, but excluding '.' and '..'), yields a 3-tuple + + dirpath, dirnames, filenames + + dirpath is a string, the path to the directory. dirnames is a list of + the names of the subdirectories in dirpath (excluding '.' and '..'). + filenames is a list of the names of the non-directory files in dirpath. + Note that the names in the lists are just names, with no path components. + To get a full path (which begins with top) to a file or directory in + dirpath, do os.path.join(dirpath, name). + + If optional arg 'topdown' is true or not specified, the triple for a + directory is generated before the triples for any of its subdirectories + (directories are generated top down). If topdown is false, the triple + for a directory is generated after the triples for all of its + subdirectories (directories are generated bottom up). + + When topdown is true, the caller can modify the dirnames list in-place + (e.g., via del or slice assignment), and walk will only recurse into the + subdirectories whose names remain in dirnames; this can be used to prune + the search, or to impose a specific order of visiting. Modifying + dirnames when topdown is false is ineffective, since the directories in + dirnames have already been generated by the time dirnames itself is + generated. + + By default errors from the os.listdir() call are ignored. If + optional arg 'onerror' is specified, it should be a function; it + will be called with one argument, an os.error instance. It can + report the error to continue with the walk, or raise the exception + to abort the walk. Note that the filename is available as the + filename attribute of the exception object. + + Caution: if you pass a relative pathname for top, don't change the + current working directory between resumptions of walk. walk never + changes the current directory, and assumes that the client doesn't + either. + + Example: + + from os.path import join, getsize + for root, dirs, files in walk('python/Lib/email'): + print root, "consumes", + print sum([getsize(join(root, name)) for name in files]), + print "bytes in", len(files), "non-directory files" + if 'CVS' in dirs: + dirs.remove('CVS') # don't visit CVS directories + """ + + from os.path import join, isdir, islink + + # We may not have read permission for top, in which case we can't + # get a list of the files the directory contains. os.path.walk + # always suppressed the exception then, rather than blow up for a + # minor reason when (say) a thousand readable directories are still + # left to visit. That logic is copied here. + try: + # Note that listdir and error are globals in this module due + # to earlier import-*. + names = listdir(top) + except error, err: + if onerror is not None: + onerror(err) + return + + dirs, nondirs = [], [] + for name in names: + if isdir(join(top, name)): + dirs.append(name) + else: + nondirs.append(name) + + if topdown: + yield top, dirs, nondirs + for name in dirs: + path = join(top, name) + if not islink(path): + for x in walk(path, topdown, onerror): + yield x + if not topdown: + yield top, dirs, nondirs + +__all__.append("walk") + +# Make sure os.environ exists, at least +try: + environ +except NameError: + environ = {} + +def execl(file, *args): + """execl(file, *args) + + Execute the executable file with argument list args, replacing the + current process. """ + execv(file, args) + +def execle(file, *args): + """execle(file, *args, env) + + Execute the executable file with argument list args and + environment env, replacing the current process. """ + env = args[-1] + execve(file, args[:-1], env) + +def execlp(file, *args): + """execlp(file, *args) + + Execute the executable file (which is searched for along $PATH) + with argument list args, replacing the current process. """ + execvp(file, args) + +def execlpe(file, *args): + """execlpe(file, *args, env) + + Execute the executable file (which is searched for along $PATH) + with argument list args and environment env, replacing the current + process. """ + env = args[-1] + execvpe(file, args[:-1], env) + +def execvp(file, args): + """execp(file, args) + + Execute the executable file (which is searched for along $PATH) + with argument list args, replacing the current process. + args may be a list or tuple of strings. """ + _execvpe(file, args) + +def execvpe(file, args, env): + """execvpe(file, args, env) + + Execute the executable file (which is searched for along $PATH) + with argument list args and environment env , replacing the + current process. + args may be a list or tuple of strings. """ + _execvpe(file, args, env) + +__all__.extend(["execl","execle","execlp","execlpe","execvp","execvpe"]) + +def _execvpe(file, args, env=None): + from errno import ENOENT, ENOTDIR + + if env is not None: + func = execve + argrest = (args, env) + else: + func = execv + argrest = (args,) + env = environ + + head, tail = path.split(file) + if head: + func(file, *argrest) + return + if 'PATH' in env: + envpath = env['PATH'] + else: + envpath = defpath + PATH = envpath.split(pathsep) + saved_exc = None + saved_tb = None + for dir in PATH: + fullname = path.join(dir, file) + try: + func(fullname, *argrest) + except error, e: + tb = sys.exc_info()[2] + if (e.errno != ENOENT and e.errno != ENOTDIR + and saved_exc is None): + saved_exc = e + saved_tb = tb + if saved_exc: + raise error, saved_exc, saved_tb + raise error, e, tb + +# Change environ to automatically call putenv() if it exists +try: + # This will fail if there's no putenv + putenv +except NameError: + pass +else: + import UserDict + + # Fake unsetenv() for Windows + # not sure about os2 here but + # I'm guessing they are the same. + + if name in ('os2', 'nt'): + def unsetenv(key): + putenv(key, "") + + if name == "riscos": + # On RISC OS, all env access goes through getenv and putenv + from riscosenviron import _Environ + elif name in ('os2', 'nt'): # Where Env Var Names Must Be UPPERCASE + # But we store them as upper case + class _Environ(UserDict.IterableUserDict): + def __init__(self, environ): + UserDict.UserDict.__init__(self) + data = self.data + for k, v in environ.items(): + data[k.upper()] = v + def __setitem__(self, key, item): + putenv(key, item) + self.data[key.upper()] = item + def __getitem__(self, key): + return self.data[key.upper()] + try: + unsetenv + except NameError: + def __delitem__(self, key): + del self.data[key.upper()] + else: + def __delitem__(self, key): + unsetenv(key) + del self.data[key.upper()] + def has_key(self, key): + return key.upper() in self.data + def __contains__(self, key): + return key.upper() in self.data + def get(self, key, failobj=None): + return self.data.get(key.upper(), failobj) + def update(self, dict=None, **kwargs): + if dict: + try: + keys = dict.keys() + except AttributeError: + # List of (key, value) + for k, v in dict: + self[k] = v + else: + # got keys + # cannot use items(), since mappings + # may not have them. + for k in keys: + self[k] = dict[k] + if kwargs: + self.update(kwargs) + def copy(self): + return dict(self) + + else: # Where Env Var Names Can Be Mixed Case + class _Environ(UserDict.IterableUserDict): + def __init__(self, environ): + UserDict.UserDict.__init__(self) + self.data = environ + def __setitem__(self, key, item): + putenv(key, item) + self.data[key] = item + def update(self, dict=None, **kwargs): + if dict: + try: + keys = dict.keys() + except AttributeError: + # List of (key, value) + for k, v in dict: + self[k] = v + else: + # got keys + # cannot use items(), since mappings + # may not have them. + for k in keys: + self[k] = dict[k] + if kwargs: + self.update(kwargs) + try: + unsetenv + except NameError: + pass + else: + def __delitem__(self, key): + unsetenv(key) + del self.data[key] + def copy(self): + return dict(self) + + + environ = _Environ(environ) + +def getenv(key, default=None): + """Get an environment variable, return None if it doesn't exist. + The optional second argument can specify an alternate default.""" + return environ.get(key, default) +__all__.append("getenv") + +def _exists(name): + try: + eval(name) + return True + except NameError: + return False + +# Supply spawn*() (probably only for Unix) +if _exists("fork") and not _exists("spawnv") and _exists("execv"): + + P_WAIT = 0 + P_NOWAIT = P_NOWAITO = 1 + + # XXX Should we support P_DETACH? I suppose it could fork()**2 + # and close the std I/O streams. Also, P_OVERLAY is the same + # as execv*()? + + def _spawnvef(mode, file, args, env, func): + # Internal helper; func is the exec*() function to use + pid = fork() + if not pid: + # Child + try: + if env is None: + func(file, args) + else: + func(file, args, env) + except: + _exit(127) + else: + # Parent + if mode == P_NOWAIT: + return pid # Caller is responsible for waiting! + while 1: + wpid, sts = waitpid(pid, 0) + if WIFSTOPPED(sts): + continue + elif WIFSIGNALED(sts): + return -WTERMSIG(sts) + elif WIFEXITED(sts): + return WEXITSTATUS(sts) + else: + raise error, "Not stopped, signaled or exited???" + + def spawnv(mode, file, args): + """spawnv(mode, file, args) -> integer + +Execute file with arguments from args in a subprocess. +If mode == P_NOWAIT return the pid of the process. +If mode == P_WAIT return the process's exit code if it exits normally; +otherwise return -SIG, where SIG is the signal that killed it. """ + return _spawnvef(mode, file, args, None, execv) + + def spawnve(mode, file, args, env): + """spawnve(mode, file, args, env) -> integer + +Execute file with arguments from args in a subprocess with the +specified environment. +If mode == P_NOWAIT return the pid of the process. +If mode == P_WAIT return the process's exit code if it exits normally; +otherwise return -SIG, where SIG is the signal that killed it. """ + return _spawnvef(mode, file, args, env, execve) + + # Note: spawnvp[e] is't currently supported on Windows + + def spawnvp(mode, file, args): + """spawnvp(mode, file, args) -> integer + +Execute file (which is looked for along $PATH) with arguments from +args in a subprocess. +If mode == P_NOWAIT return the pid of the process. +If mode == P_WAIT return the process's exit code if it exits normally; +otherwise return -SIG, where SIG is the signal that killed it. """ + return _spawnvef(mode, file, args, None, execvp) + + def spawnvpe(mode, file, args, env): + """spawnvpe(mode, file, args, env) -> integer + +Execute file (which is looked for along $PATH) with arguments from +args in a subprocess with the supplied environment. +If mode == P_NOWAIT return the pid of the process. +If mode == P_WAIT return the process's exit code if it exits normally; +otherwise return -SIG, where SIG is the signal that killed it. """ + return _spawnvef(mode, file, args, env, execvpe) + +if _exists("spawnv"): + # These aren't supplied by the basic Windows code + # but can be easily implemented in Python + + def spawnl(mode, file, *args): + """spawnl(mode, file, *args) -> integer + +Execute file with arguments from args in a subprocess. +If mode == P_NOWAIT return the pid of the process. +If mode == P_WAIT return the process's exit code if it exits normally; +otherwise return -SIG, where SIG is the signal that killed it. """ + return spawnv(mode, file, args) + + def spawnle(mode, file, *args): + """spawnle(mode, file, *args, env) -> integer + +Execute file with arguments from args in a subprocess with the +supplied environment. +If mode == P_NOWAIT return the pid of the process. +If mode == P_WAIT return the process's exit code if it exits normally; +otherwise return -SIG, where SIG is the signal that killed it. """ + env = args[-1] + return spawnve(mode, file, args[:-1], env) + + + __all__.extend(["spawnv", "spawnve", "spawnl", "spawnle",]) + + +if _exists("spawnvp"): + # At the moment, Windows doesn't implement spawnvp[e], + # so it won't have spawnlp[e] either. + def spawnlp(mode, file, *args): + """spawnlp(mode, file, *args) -> integer + +Execute file (which is looked for along $PATH) with arguments from +args in a subprocess with the supplied environment. +If mode == P_NOWAIT return the pid of the process. +If mode == P_WAIT return the process's exit code if it exits normally; +otherwise return -SIG, where SIG is the signal that killed it. """ + return spawnvp(mode, file, args) + + def spawnlpe(mode, file, *args): + """spawnlpe(mode, file, *args, env) -> integer + +Execute file (which is looked for along $PATH) with arguments from +args in a subprocess with the supplied environment. +If mode == P_NOWAIT return the pid of the process. +If mode == P_WAIT return the process's exit code if it exits normally; +otherwise return -SIG, where SIG is the signal that killed it. """ + env = args[-1] + return spawnvpe(mode, file, args[:-1], env) + + + __all__.extend(["spawnvp", "spawnvpe", "spawnlp", "spawnlpe",]) + + +# Supply popen2 etc. (for Unix) +if _exists("fork"): + if not _exists("popen2"): + def popen2(cmd, mode="t", bufsize=-1): + """Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' + may be a sequence, in which case arguments will be passed directly to + the program without shell intervention (as with os.spawnv()). If 'cmd' + is a string it will be passed to the shell (as with os.system()). If + 'bufsize' is specified, it sets the buffer size for the I/O pipes. The + file objects (child_stdin, child_stdout) are returned.""" + import popen2 + stdout, stdin = popen2.popen2(cmd, bufsize) + return stdin, stdout + __all__.append("popen2") + + if not _exists("popen3"): + def popen3(cmd, mode="t", bufsize=-1): + """Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' + may be a sequence, in which case arguments will be passed directly to + the program without shell intervention (as with os.spawnv()). If 'cmd' + is a string it will be passed to the shell (as with os.system()). If + 'bufsize' is specified, it sets the buffer size for the I/O pipes. The + file objects (child_stdin, child_stdout, child_stderr) are returned.""" + import popen2 + stdout, stdin, stderr = popen2.popen3(cmd, bufsize) + return stdin, stdout, stderr + __all__.append("popen3") + + if not _exists("popen4"): + def popen4(cmd, mode="t", bufsize=-1): + """Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' + may be a sequence, in which case arguments will be passed directly to + the program without shell intervention (as with os.spawnv()). If 'cmd' + is a string it will be passed to the shell (as with os.system()). If + 'bufsize' is specified, it sets the buffer size for the I/O pipes. The + file objects (child_stdin, child_stdout_stderr) are returned.""" + import popen2 + stdout, stdin = popen2.popen4(cmd, bufsize) + return stdin, stdout + __all__.append("popen4") + +import copy_reg as _copy_reg + +def _make_stat_result(tup, dict): + return stat_result(tup, dict) + +def _pickle_stat_result(sr): + (type, args) = sr.__reduce__() + return (_make_stat_result, args) + +try: + _copy_reg.pickle(stat_result, _pickle_stat_result, _make_stat_result) +except NameError: # stat_result may not exist + pass + +def _make_statvfs_result(tup, dict): + return statvfs_result(tup, dict) + +def _pickle_statvfs_result(sr): + (type, args) = sr.__reduce__() + return (_make_statvfs_result, args) + +try: + _copy_reg.pickle(statvfs_result, _pickle_statvfs_result, + _make_statvfs_result) +except NameError: # statvfs_result may not exist + pass + +if not _exists("urandom"): + def urandom(n): + """urandom(n) -> str + + Return a string of n random bytes suitable for cryptographic use. + + """ + try: + _urandomfd = open("/dev/urandom", O_RDONLY) + except (OSError, IOError): + raise NotImplementedError("/dev/urandom (or equivalent) not found") + bytes = "" + while len(bytes) < n: + bytes += read(_urandomfd, n - len(bytes)) + close(_urandomfd) + return bytes diff --git a/thirdparty/python25/Lib/random.py b/thirdparty/python25/Lib/random.py new file mode 100644 index 000000000..53e959724 --- /dev/null +++ b/thirdparty/python25/Lib/random.py @@ -0,0 +1,862 @@ +"""Random variable generators. + + integers + -------- + uniform within range + + sequences + --------- + pick random element + pick random sample + generate random permutation + + distributions on the real line: + ------------------------------ + uniform + normal (Gaussian) + lognormal + negative exponential + gamma + beta + pareto + Weibull + + distributions on the circle (angles 0 to 2pi) + --------------------------------------------- + circular uniform + von Mises + +General notes on the underlying Mersenne Twister core generator: + +* The period is 2**19937-1. +* It is one of the most extensively tested generators in existence. +* Without a direct way to compute N steps forward, the semantics of + jumpahead(n) are weakened to simply jump to another distant state and rely + on the large period to avoid overlapping sequences. +* The random() method is implemented in C, executes in a single Python step, + and is, therefore, threadsafe. + +""" + +from warnings import warn as _warn +from types import MethodType as _MethodType, BuiltinMethodType as _BuiltinMethodType +from math import log as _log, exp as _exp, pi as _pi, e as _e, ceil as _ceil +from math import sqrt as _sqrt, acos as _acos, cos as _cos, sin as _sin +from os import urandom as _urandom +from binascii import hexlify as _hexlify + +__all__ = ["Random","seed","random","uniform","randint","choice","sample", + "randrange","shuffle","normalvariate","lognormvariate", + "expovariate","vonmisesvariate","gammavariate", + "gauss","betavariate","paretovariate","weibullvariate", + "getstate","setstate","jumpahead", "WichmannHill", "getrandbits", + "SystemRandom"] + +NV_MAGICCONST = 4 * _exp(-0.5)/_sqrt(2.0) +TWOPI = 2.0*_pi +LOG4 = _log(4.0) +SG_MAGICCONST = 1.0 + _log(4.5) +BPF = 53 # Number of bits in a float +RECIP_BPF = 2**-BPF + + +# Translated by Guido van Rossum from C source provided by +# Adrian Baddeley. Adapted by Raymond Hettinger for use with +# the Mersenne Twister and os.urandom() core generators. + +import _random + +class Random(_random.Random): + """Random number generator base class used by bound module functions. + + Used to instantiate instances of Random to get generators that don't + share state. Especially useful for multi-threaded programs, creating + a different instance of Random for each thread, and using the jumpahead() + method to ensure that the generated sequences seen by each thread don't + overlap. + + Class Random can also be subclassed if you want to use a different basic + generator of your own devising: in that case, override the following + methods: random(), seed(), getstate(), setstate() and jumpahead(). + Optionally, implement a getrandombits() method so that randrange() + can cover arbitrarily large ranges. + + """ + + VERSION = 2 # used by getstate/setstate + + def __init__(self, x=None): + """Initialize an instance. + + Optional argument x controls seeding, as for Random.seed(). + """ + + self.seed(x) + self.gauss_next = None + + def seed(self, a=None): + """Initialize internal state from hashable object. + + None or no argument seeds from current time or from an operating + system specific randomness source if available. + + If a is not None or an int or long, hash(a) is used instead. + """ + + if a is None: + try: + a = long(_hexlify(_urandom(16)), 16) + except NotImplementedError: + import time + a = long(time.time() * 256) # use fractional seconds + + super(Random, self).seed(a) + self.gauss_next = None + + def getstate(self): + """Return internal state; can be passed to setstate() later.""" + return self.VERSION, super(Random, self).getstate(), self.gauss_next + + def setstate(self, state): + """Restore internal state from object returned by getstate().""" + version = state[0] + if version == 2: + version, internalstate, self.gauss_next = state + super(Random, self).setstate(internalstate) + else: + raise ValueError("state with version %s passed to " + "Random.setstate() of version %s" % + (version, self.VERSION)) + +## ---- Methods below this point do not need to be overridden when +## ---- subclassing for the purpose of using a different core generator. + +## -------------------- pickle support ------------------- + + def __getstate__(self): # for pickle + return self.getstate() + + def __setstate__(self, state): # for pickle + self.setstate(state) + + def __reduce__(self): + return self.__class__, (), self.getstate() + +## -------------------- integer methods ------------------- + + def randrange(self, start, stop=None, step=1, int=int, default=None, + maxwidth=1L< 0: + if istart >= maxwidth: + return self._randbelow(istart) + return int(self.random() * istart) + raise ValueError, "empty range for randrange()" + + # stop argument supplied. + istop = int(stop) + if istop != stop: + raise ValueError, "non-integer stop for randrange()" + width = istop - istart + if step == 1 and width > 0: + # Note that + # int(istart + self.random()*width) + # instead would be incorrect. For example, consider istart + # = -2 and istop = 0. Then the guts would be in + # -2.0 to 0.0 exclusive on both ends (ignoring that random() + # might return 0.0), and because int() truncates toward 0, the + # final result would be -1 or 0 (instead of -2 or -1). + # istart + int(self.random()*width) + # would also be incorrect, for a subtler reason: the RHS + # can return a long, and then randrange() would also return + # a long, but we're supposed to return an int (for backward + # compatibility). + + if width >= maxwidth: + return int(istart + self._randbelow(width)) + return int(istart + int(self.random()*width)) + if step == 1: + raise ValueError, "empty range for randrange() (%d,%d, %d)" % (istart, istop, width) + + # Non-unit step argument supplied. + istep = int(step) + if istep != step: + raise ValueError, "non-integer step for randrange()" + if istep > 0: + n = (width + istep - 1) // istep + elif istep < 0: + n = (width + istep + 1) // istep + else: + raise ValueError, "zero step for randrange()" + + if n <= 0: + raise ValueError, "empty range for randrange()" + + if n >= maxwidth: + return istart + istep*self._randbelow(n) + return istart + istep*int(self.random() * n) + + def randint(self, a, b): + """Return random integer in range [a, b], including both end points. + """ + + return self.randrange(a, b+1) + + def _randbelow(self, n, _log=_log, int=int, _maxwidth=1L< n-1 > 2**(k-2) + r = getrandbits(k) + while r >= n: + r = getrandbits(k) + return r + if n >= _maxwidth: + _warn("Underlying random() generator does not supply \n" + "enough bits to choose from a population range this large") + return int(self.random() * n) + +## -------------------- sequence methods ------------------- + + def choice(self, seq): + """Choose a random element from a non-empty sequence.""" + return seq[int(self.random() * len(seq))] # raises IndexError if seq is empty + + def shuffle(self, x, random=None, int=int): + """x, random=random.random -> shuffle list x in place; return None. + + Optional arg random is a 0-argument function returning a random + float in [0.0, 1.0); by default, the standard random.random. + """ + + if random is None: + random = self.random + for i in reversed(xrange(1, len(x))): + # pick an element in x[:i+1] with which to exchange x[i] + j = int(random() * (i+1)) + x[i], x[j] = x[j], x[i] + + def sample(self, population, k): + """Chooses k unique random elements from a population sequence. + + Returns a new list containing elements from the population while + leaving the original population unchanged. The resulting list is + in selection order so that all sub-slices will also be valid random + samples. This allows raffle winners (the sample) to be partitioned + into grand prize and second place winners (the subslices). + + Members of the population need not be hashable or unique. If the + population contains repeats, then each occurrence is a possible + selection in the sample. + + To choose a sample in a range of integers, use xrange as an argument. + This is especially fast and space efficient for sampling from a + large population: sample(xrange(10000000), 60) + """ + + # XXX Although the documentation says `population` is "a sequence", + # XXX attempts are made to cater to any iterable with a __len__ + # XXX method. This has had mixed success. Examples from both + # XXX sides: sets work fine, and should become officially supported; + # XXX dicts are much harder, and have failed in various subtle + # XXX ways across attempts. Support for mapping types should probably + # XXX be dropped (and users should pass mapping.keys() or .values() + # XXX explicitly). + + # Sampling without replacement entails tracking either potential + # selections (the pool) in a list or previous selections in a set. + + # When the number of selections is small compared to the + # population, then tracking selections is efficient, requiring + # only a small set and an occasional reselection. For + # a larger number of selections, the pool tracking method is + # preferred since the list takes less space than the + # set and it doesn't suffer from frequent reselections. + + n = len(population) + if not 0 <= k <= n: + raise ValueError, "sample larger than population" + random = self.random + _int = int + result = [None] * k + setsize = 21 # size of a small set minus size of an empty list + if k > 5: + setsize += 4 ** _ceil(_log(k * 3, 4)) # table size for big sets + if n <= setsize or hasattr(population, "keys"): + # An n-length list is smaller than a k-length set, or this is a + # mapping type so the other algorithm wouldn't work. + pool = list(population) + for i in xrange(k): # invariant: non-selected at [0,n-i) + j = _int(random() * (n-i)) + result[i] = pool[j] + pool[j] = pool[n-i-1] # move non-selected item into vacancy + else: + try: + selected = set() + selected_add = selected.add + for i in xrange(k): + j = _int(random() * n) + while j in selected: + j = _int(random() * n) + selected_add(j) + result[i] = population[j] + except (TypeError, KeyError): # handle (at least) sets + if isinstance(population, list): + raise + return self.sample(tuple(population), k) + return result + +## -------------------- real-valued distributions ------------------- + +## -------------------- uniform distribution ------------------- + + def uniform(self, a, b): + """Get a random number in the range [a, b).""" + return a + (b-a) * self.random() + +## -------------------- normal distribution -------------------- + + def normalvariate(self, mu, sigma): + """Normal distribution. + + mu is the mean, and sigma is the standard deviation. + + """ + # mu = mean, sigma = standard deviation + + # Uses Kinderman and Monahan method. Reference: Kinderman, + # A.J. and Monahan, J.F., "Computer generation of random + # variables using the ratio of uniform deviates", ACM Trans + # Math Software, 3, (1977), pp257-260. + + random = self.random + while 1: + u1 = random() + u2 = 1.0 - random() + z = NV_MAGICCONST*(u1-0.5)/u2 + zz = z*z/4.0 + if zz <= -_log(u2): + break + return mu + z*sigma + +## -------------------- lognormal distribution -------------------- + + def lognormvariate(self, mu, sigma): + """Log normal distribution. + + If you take the natural logarithm of this distribution, you'll get a + normal distribution with mean mu and standard deviation sigma. + mu can have any value, and sigma must be greater than zero. + + """ + return _exp(self.normalvariate(mu, sigma)) + +## -------------------- exponential distribution -------------------- + + def expovariate(self, lambd): + """Exponential distribution. + + lambd is 1.0 divided by the desired mean. (The parameter would be + called "lambda", but that is a reserved word in Python.) Returned + values range from 0 to positive infinity. + + """ + # lambd: rate lambd = 1/mean + # ('lambda' is a Python reserved word) + + random = self.random + u = random() + while u <= 1e-7: + u = random() + return -_log(u)/lambd + +## -------------------- von Mises distribution -------------------- + + def vonmisesvariate(self, mu, kappa): + """Circular data distribution. + + mu is the mean angle, expressed in radians between 0 and 2*pi, and + kappa is the concentration parameter, which must be greater than or + equal to zero. If kappa is equal to zero, this distribution reduces + to a uniform random angle over the range 0 to 2*pi. + + """ + # mu: mean angle (in radians between 0 and 2*pi) + # kappa: concentration parameter kappa (>= 0) + # if kappa = 0 generate uniform random angle + + # Based upon an algorithm published in: Fisher, N.I., + # "Statistical Analysis of Circular Data", Cambridge + # University Press, 1993. + + # Thanks to Magnus Kessler for a correction to the + # implementation of step 4. + + random = self.random + if kappa <= 1e-6: + return TWOPI * random() + + a = 1.0 + _sqrt(1.0 + 4.0 * kappa * kappa) + b = (a - _sqrt(2.0 * a))/(2.0 * kappa) + r = (1.0 + b * b)/(2.0 * b) + + while 1: + u1 = random() + + z = _cos(_pi * u1) + f = (1.0 + r * z)/(r + z) + c = kappa * (r - f) + + u2 = random() + + if u2 < c * (2.0 - c) or u2 <= c * _exp(1.0 - c): + break + + u3 = random() + if u3 > 0.5: + theta = (mu % TWOPI) + _acos(f) + else: + theta = (mu % TWOPI) - _acos(f) + + return theta + +## -------------------- gamma distribution -------------------- + + def gammavariate(self, alpha, beta): + """Gamma distribution. Not the gamma function! + + Conditions on the parameters are alpha > 0 and beta > 0. + + """ + + # alpha > 0, beta > 0, mean is alpha*beta, variance is alpha*beta**2 + + # Warning: a few older sources define the gamma distribution in terms + # of alpha > -1.0 + if alpha <= 0.0 or beta <= 0.0: + raise ValueError, 'gammavariate: alpha and beta must be > 0.0' + + random = self.random + if alpha > 1.0: + + # Uses R.C.H. Cheng, "The generation of Gamma + # variables with non-integral shape parameters", + # Applied Statistics, (1977), 26, No. 1, p71-74 + + ainv = _sqrt(2.0 * alpha - 1.0) + bbb = alpha - LOG4 + ccc = alpha + ainv + + while 1: + u1 = random() + if not 1e-7 < u1 < .9999999: + continue + u2 = 1.0 - random() + v = _log(u1/(1.0-u1))/ainv + x = alpha*_exp(v) + z = u1*u1*u2 + r = bbb+ccc*v-x + if r + SG_MAGICCONST - 4.5*z >= 0.0 or r >= _log(z): + return x * beta + + elif alpha == 1.0: + # expovariate(1) + u = random() + while u <= 1e-7: + u = random() + return -_log(u) * beta + + else: # alpha is between 0 and 1 (exclusive) + + # Uses ALGORITHM GS of Statistical Computing - Kennedy & Gentle + + while 1: + u = random() + b = (_e + alpha)/_e + p = b*u + if p <= 1.0: + x = p ** (1.0/alpha) + else: + x = -_log((b-p)/alpha) + u1 = random() + if p > 1.0: + if u1 <= x ** (alpha - 1.0): + break + elif u1 <= _exp(-x): + break + return x * beta + +## -------------------- Gauss (faster alternative) -------------------- + + def gauss(self, mu, sigma): + """Gaussian distribution. + + mu is the mean, and sigma is the standard deviation. This is + slightly faster than the normalvariate() function. + + Not thread-safe without a lock around calls. + + """ + + # When x and y are two variables from [0, 1), uniformly + # distributed, then + # + # cos(2*pi*x)*sqrt(-2*log(1-y)) + # sin(2*pi*x)*sqrt(-2*log(1-y)) + # + # are two *independent* variables with normal distribution + # (mu = 0, sigma = 1). + # (Lambert Meertens) + # (corrected version; bug discovered by Mike Miller, fixed by LM) + + # Multithreading note: When two threads call this function + # simultaneously, it is possible that they will receive the + # same return value. The window is very small though. To + # avoid this, you have to use a lock around all calls. (I + # didn't want to slow this down in the serial case by using a + # lock here.) + + random = self.random + z = self.gauss_next + self.gauss_next = None + if z is None: + x2pi = random() * TWOPI + g2rad = _sqrt(-2.0 * _log(1.0 - random())) + z = _cos(x2pi) * g2rad + self.gauss_next = _sin(x2pi) * g2rad + + return mu + z*sigma + +## -------------------- beta -------------------- +## See +## http://sourceforge.net/bugs/?func=detailbug&bug_id=130030&group_id=5470 +## for Ivan Frohne's insightful analysis of why the original implementation: +## +## def betavariate(self, alpha, beta): +## # Discrete Event Simulation in C, pp 87-88. +## +## y = self.expovariate(alpha) +## z = self.expovariate(1.0/beta) +## return z/(y+z) +## +## was dead wrong, and how it probably got that way. + + def betavariate(self, alpha, beta): + """Beta distribution. + + Conditions on the parameters are alpha > 0 and beta > 0. + Returned values range between 0 and 1. + + """ + + # This version due to Janne Sinkkonen, and matches all the std + # texts (e.g., Knuth Vol 2 Ed 3 pg 134 "the beta distribution"). + y = self.gammavariate(alpha, 1.) + if y == 0: + return 0.0 + else: + return y / (y + self.gammavariate(beta, 1.)) + +## -------------------- Pareto -------------------- + + def paretovariate(self, alpha): + """Pareto distribution. alpha is the shape parameter.""" + # Jain, pg. 495 + + u = 1.0 - self.random() + return 1.0 / pow(u, 1.0/alpha) + +## -------------------- Weibull -------------------- + + def weibullvariate(self, alpha, beta): + """Weibull distribution. + + alpha is the scale parameter and beta is the shape parameter. + + """ + # Jain, pg. 499; bug fix courtesy Bill Arms + + u = 1.0 - self.random() + return alpha * pow(-_log(u), 1.0/beta) + +## -------------------- Wichmann-Hill ------------------- + +class WichmannHill(Random): + + VERSION = 1 # used by getstate/setstate + + def seed(self, a=None): + """Initialize internal state from hashable object. + + None or no argument seeds from current time or from an operating + system specific randomness source if available. + + If a is not None or an int or long, hash(a) is used instead. + + If a is an int or long, a is used directly. Distinct values between + 0 and 27814431486575L inclusive are guaranteed to yield distinct + internal states (this guarantee is specific to the default + Wichmann-Hill generator). + """ + + if a is None: + try: + a = long(_hexlify(_urandom(16)), 16) + except NotImplementedError: + import time + a = long(time.time() * 256) # use fractional seconds + + if not isinstance(a, (int, long)): + a = hash(a) + + a, x = divmod(a, 30268) + a, y = divmod(a, 30306) + a, z = divmod(a, 30322) + self._seed = int(x)+1, int(y)+1, int(z)+1 + + self.gauss_next = None + + def random(self): + """Get the next random number in the range [0.0, 1.0).""" + + # Wichman-Hill random number generator. + # + # Wichmann, B. A. & Hill, I. D. (1982) + # Algorithm AS 183: + # An efficient and portable pseudo-random number generator + # Applied Statistics 31 (1982) 188-190 + # + # see also: + # Correction to Algorithm AS 183 + # Applied Statistics 33 (1984) 123 + # + # McLeod, A. I. (1985) + # A remark on Algorithm AS 183 + # Applied Statistics 34 (1985),198-200 + + # This part is thread-unsafe: + # BEGIN CRITICAL SECTION + x, y, z = self._seed + x = (171 * x) % 30269 + y = (172 * y) % 30307 + z = (170 * z) % 30323 + self._seed = x, y, z + # END CRITICAL SECTION + + # Note: on a platform using IEEE-754 double arithmetic, this can + # never return 0.0 (asserted by Tim; proof too long for a comment). + return (x/30269.0 + y/30307.0 + z/30323.0) % 1.0 + + def getstate(self): + """Return internal state; can be passed to setstate() later.""" + return self.VERSION, self._seed, self.gauss_next + + def setstate(self, state): + """Restore internal state from object returned by getstate().""" + version = state[0] + if version == 1: + version, self._seed, self.gauss_next = state + else: + raise ValueError("state with version %s passed to " + "Random.setstate() of version %s" % + (version, self.VERSION)) + + def jumpahead(self, n): + """Act as if n calls to random() were made, but quickly. + + n is an int, greater than or equal to 0. + + Example use: If you have 2 threads and know that each will + consume no more than a million random numbers, create two Random + objects r1 and r2, then do + r2.setstate(r1.getstate()) + r2.jumpahead(1000000) + Then r1 and r2 will use guaranteed-disjoint segments of the full + period. + """ + + if not n >= 0: + raise ValueError("n must be >= 0") + x, y, z = self._seed + x = int(x * pow(171, n, 30269)) % 30269 + y = int(y * pow(172, n, 30307)) % 30307 + z = int(z * pow(170, n, 30323)) % 30323 + self._seed = x, y, z + + def __whseed(self, x=0, y=0, z=0): + """Set the Wichmann-Hill seed from (x, y, z). + + These must be integers in the range [0, 256). + """ + + if not type(x) == type(y) == type(z) == int: + raise TypeError('seeds must be integers') + if not (0 <= x < 256 and 0 <= y < 256 and 0 <= z < 256): + raise ValueError('seeds must be in range(0, 256)') + if 0 == x == y == z: + # Initialize from current time + import time + t = long(time.time() * 256) + t = int((t&0xffffff) ^ (t>>24)) + t, x = divmod(t, 256) + t, y = divmod(t, 256) + t, z = divmod(t, 256) + # Zero is a poor seed, so substitute 1 + self._seed = (x or 1, y or 1, z or 1) + + self.gauss_next = None + + def whseed(self, a=None): + """Seed from hashable object's hash code. + + None or no argument seeds from current time. It is not guaranteed + that objects with distinct hash codes lead to distinct internal + states. + + This is obsolete, provided for compatibility with the seed routine + used prior to Python 2.1. Use the .seed() method instead. + """ + + if a is None: + self.__whseed() + return + a = hash(a) + a, x = divmod(a, 256) + a, y = divmod(a, 256) + a, z = divmod(a, 256) + x = (x + a) % 256 or 1 + y = (y + a) % 256 or 1 + z = (z + a) % 256 or 1 + self.__whseed(x, y, z) + +## --------------- Operating System Random Source ------------------ + +class SystemRandom(Random): + """Alternate random number generator using sources provided + by the operating system (such as /dev/urandom on Unix or + CryptGenRandom on Windows). + + Not available on all systems (see os.urandom() for details). + """ + + def random(self): + """Get the next random number in the range [0.0, 1.0).""" + return (long(_hexlify(_urandom(7)), 16) >> 3) * RECIP_BPF + + def getrandbits(self, k): + """getrandbits(k) -> x. Generates a long int with k random bits.""" + if k <= 0: + raise ValueError('number of bits must be greater than zero') + if k != int(k): + raise TypeError('number of bits should be an integer') + bytes = (k + 7) // 8 # bits / 8 and rounded up + x = long(_hexlify(_urandom(bytes)), 16) + return x >> (bytes * 8 - k) # trim excess bits + + def _stub(self, *args, **kwds): + "Stub method. Not used for a system random number generator." + return None + seed = jumpahead = _stub + + def _notimplemented(self, *args, **kwds): + "Method should not be called for a system random number generator." + raise NotImplementedError('System entropy source does not have state.') + getstate = setstate = _notimplemented + +## -------------------- test program -------------------- + +def _test_generator(n, func, args): + import time + print n, 'times', func.__name__ + total = 0.0 + sqsum = 0.0 + smallest = 1e10 + largest = -1e10 + t0 = time.time() + for i in range(n): + x = func(*args) + total += x + sqsum = sqsum + x*x + smallest = min(x, smallest) + largest = max(x, largest) + t1 = time.time() + print round(t1-t0, 3), 'sec,', + avg = total/n + stddev = _sqrt(sqsum/n - avg*avg) + print 'avg %g, stddev %g, min %g, max %g' % \ + (avg, stddev, smallest, largest) + + +def _test(N=2000): + _test_generator(N, random, ()) + _test_generator(N, normalvariate, (0.0, 1.0)) + _test_generator(N, lognormvariate, (0.0, 1.0)) + _test_generator(N, vonmisesvariate, (0.0, 1.0)) + _test_generator(N, gammavariate, (0.01, 1.0)) + _test_generator(N, gammavariate, (0.1, 1.0)) + _test_generator(N, gammavariate, (0.1, 2.0)) + _test_generator(N, gammavariate, (0.5, 1.0)) + _test_generator(N, gammavariate, (0.9, 1.0)) + _test_generator(N, gammavariate, (1.0, 1.0)) + _test_generator(N, gammavariate, (2.0, 1.0)) + _test_generator(N, gammavariate, (20.0, 1.0)) + _test_generator(N, gammavariate, (200.0, 1.0)) + _test_generator(N, gauss, (0.0, 1.0)) + _test_generator(N, betavariate, (3.0, 3.0)) + +# Create one instance, seeded from current time, and export its methods +# as module-level functions. The functions share state across all uses +#(both in the user's code and in the Python libraries), but that's fine +# for most programs and is easier for the casual user than making them +# instantiate their own Random() instance. + +_inst = Random() +seed = _inst.seed +random = _inst.random +uniform = _inst.uniform +randint = _inst.randint +choice = _inst.choice +randrange = _inst.randrange +sample = _inst.sample +shuffle = _inst.shuffle +normalvariate = _inst.normalvariate +lognormvariate = _inst.lognormvariate +expovariate = _inst.expovariate +vonmisesvariate = _inst.vonmisesvariate +gammavariate = _inst.gammavariate +gauss = _inst.gauss +betavariate = _inst.betavariate +paretovariate = _inst.paretovariate +weibullvariate = _inst.weibullvariate +getstate = _inst.getstate +setstate = _inst.setstate +jumpahead = _inst.jumpahead +getrandbits = _inst.getrandbits + +if __name__ == '__main__': + _test() diff --git a/thirdparty/python25/Lib/re.py b/thirdparty/python25/Lib/re.py new file mode 100644 index 000000000..426863c22 --- /dev/null +++ b/thirdparty/python25/Lib/re.py @@ -0,0 +1,315 @@ +# +# Secret Labs' Regular Expression Engine +# +# re-compatible interface for the sre matching engine +# +# Copyright (c) 1998-2001 by Secret Labs AB. All rights reserved. +# +# This version of the SRE library can be redistributed under CNRI's +# Python 1.6 license. For any other use, please contact Secret Labs +# AB (info@pythonware.com). +# +# Portions of this engine have been developed in cooperation with +# CNRI. Hewlett-Packard provided funding for 1.6 integration and +# other compatibility work. +# + +r"""Support for regular expressions (RE). + +This module provides regular expression matching operations similar to +those found in Perl. It supports both 8-bit and Unicode strings; both +the pattern and the strings being processed can contain null bytes and +characters outside the US ASCII range. + +Regular expressions can contain both special and ordinary characters. +Most ordinary characters, like "A", "a", or "0", are the simplest +regular expressions; they simply match themselves. You can +concatenate ordinary characters, so last matches the string 'last'. + +The special characters are: + "." Matches any character except a newline. + "^" Matches the start of the string. + "$" Matches the end of the string. + "*" Matches 0 or more (greedy) repetitions of the preceding RE. + Greedy means that it will match as many repetitions as possible. + "+" Matches 1 or more (greedy) repetitions of the preceding RE. + "?" Matches 0 or 1 (greedy) of the preceding RE. + *?,+?,?? Non-greedy versions of the previous three special characters. + {m,n} Matches from m to n repetitions of the preceding RE. + {m,n}? Non-greedy version of the above. + "\\" Either escapes special characters or signals a special sequence. + [] Indicates a set of characters. + A "^" as the first character indicates a complementing set. + "|" A|B, creates an RE that will match either A or B. + (...) Matches the RE inside the parentheses. + The contents can be retrieved or matched later in the string. + (?iLmsux) Set the I, L, M, S, U, or X flag for the RE (see below). + (?:...) Non-grouping version of regular parentheses. + (?P...) The substring matched by the group is accessible by name. + (?P=name) Matches the text matched earlier by the group named name. + (?#...) A comment; ignored. + (?=...) Matches if ... matches next, but doesn't consume the string. + (?!...) Matches if ... doesn't match next. + +The special sequences consist of "\\" and a character from the list +below. If the ordinary character is not on the list, then the +resulting RE will match the second character. + \number Matches the contents of the group of the same number. + \A Matches only at the start of the string. + \Z Matches only at the end of the string. + \b Matches the empty string, but only at the start or end of a word. + \B Matches the empty string, but not at the start or end of a word. + \d Matches any decimal digit; equivalent to the set [0-9]. + \D Matches any non-digit character; equivalent to the set [^0-9]. + \s Matches any whitespace character; equivalent to [ \t\n\r\f\v]. + \S Matches any non-whitespace character; equiv. to [^ \t\n\r\f\v]. + \w Matches any alphanumeric character; equivalent to [a-zA-Z0-9_]. + With LOCALE, it will match the set [0-9_] plus characters defined + as letters for the current locale. + \W Matches the complement of \w. + \\ Matches a literal backslash. + +This module exports the following functions: + match Match a regular expression pattern to the beginning of a string. + search Search a string for the presence of a pattern. + sub Substitute occurrences of a pattern found in a string. + subn Same as sub, but also return the number of substitutions made. + split Split a string by the occurrences of a pattern. + findall Find all occurrences of a pattern in a string. + compile Compile a pattern into a RegexObject. + purge Clear the regular expression cache. + escape Backslash all non-alphanumerics in a string. + +Some of the functions in this module takes flags as optional parameters: + I IGNORECASE Perform case-insensitive matching. + L LOCALE Make \w, \W, \b, \B, dependent on the current locale. + M MULTILINE "^" matches the beginning of lines as well as the string. + "$" matches the end of lines as well as the string. + S DOTALL "." matches any character at all, including the newline. + X VERBOSE Ignore whitespace and comments for nicer looking RE's. + U UNICODE Make \w, \W, \b, \B, dependent on the Unicode locale. + +This module also defines an exception 'error'. + +""" + +import sys +import sre_compile +import sre_parse + +# public symbols +__all__ = [ "match", "search", "sub", "subn", "split", "findall", + "compile", "purge", "template", "escape", "I", "L", "M", "S", "X", + "U", "IGNORECASE", "LOCALE", "MULTILINE", "DOTALL", "VERBOSE", + "UNICODE", "error" ] + +__version__ = "2.2.1" + +# flags +I = IGNORECASE = sre_compile.SRE_FLAG_IGNORECASE # ignore case +L = LOCALE = sre_compile.SRE_FLAG_LOCALE # assume current 8-bit locale +U = UNICODE = sre_compile.SRE_FLAG_UNICODE # assume unicode locale +M = MULTILINE = sre_compile.SRE_FLAG_MULTILINE # make anchors look for newline +S = DOTALL = sre_compile.SRE_FLAG_DOTALL # make dot match newline +X = VERBOSE = sre_compile.SRE_FLAG_VERBOSE # ignore whitespace and comments + +# sre extensions (experimental, don't rely on these) +T = TEMPLATE = sre_compile.SRE_FLAG_TEMPLATE # disable backtracking +DEBUG = sre_compile.SRE_FLAG_DEBUG # dump pattern after compilation + +# sre exception +error = sre_compile.error + +# -------------------------------------------------------------------- +# public interface + +def match(pattern, string, flags=0): + """Try to apply the pattern at the start of the string, returning + a match object, or None if no match was found.""" + return _compile(pattern, flags).match(string) + +def search(pattern, string, flags=0): + """Scan through string looking for a match to the pattern, returning + a match object, or None if no match was found.""" + return _compile(pattern, flags).search(string) + +def sub(pattern, repl, string, count=0): + """Return the string obtained by replacing the leftmost + non-overlapping occurrences of the pattern in string by the + replacement repl. repl can be either a string or a callable; + if a callable, it's passed the match object and must return + a replacement string to be used.""" + return _compile(pattern, 0).sub(repl, string, count) + +def subn(pattern, repl, string, count=0): + """Return a 2-tuple containing (new_string, number). + new_string is the string obtained by replacing the leftmost + non-overlapping occurrences of the pattern in the source + string by the replacement repl. number is the number of + substitutions that were made. repl can be either a string or a + callable; if a callable, it's passed the match object and must + return a replacement string to be used.""" + return _compile(pattern, 0).subn(repl, string, count) + +def split(pattern, string, maxsplit=0): + """Split the source string by the occurrences of the pattern, + returning a list containing the resulting substrings.""" + return _compile(pattern, 0).split(string, maxsplit) + +def findall(pattern, string, flags=0): + """Return a list of all non-overlapping matches in the string. + + If one or more groups are present in the pattern, return a + list of groups; this will be a list of tuples if the pattern + has more than one group. + + Empty matches are included in the result.""" + return _compile(pattern, flags).findall(string) + +if sys.hexversion >= 0x02020000: + __all__.append("finditer") + def finditer(pattern, string, flags=0): + """Return an iterator over all non-overlapping matches in the + string. For each match, the iterator returns a match object. + + Empty matches are included in the result.""" + return _compile(pattern, flags).finditer(string) + +def compile(pattern, flags=0): + "Compile a regular expression pattern, returning a pattern object." + return _compile(pattern, flags) + +def purge(): + "Clear the regular expression cache" + _cache.clear() + _cache_repl.clear() + +def template(pattern, flags=0): + "Compile a template pattern, returning a pattern object" + return _compile(pattern, flags|T) + +_alphanum = {} +for c in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890': + _alphanum[c] = 1 +del c + +def escape(pattern): + "Escape all non-alphanumeric characters in pattern." + s = list(pattern) + alphanum = _alphanum + for i in range(len(pattern)): + c = pattern[i] + if c not in alphanum: + if c == "\000": + s[i] = "\\000" + else: + s[i] = "\\" + c + return pattern[:0].join(s) + +# -------------------------------------------------------------------- +# internals + +_cache = {} +_cache_repl = {} + +_pattern_type = type(sre_compile.compile("", 0)) + +_MAXCACHE = 100 + +def _compile(*key): + # internal: compile pattern + cachekey = (type(key[0]),) + key + p = _cache.get(cachekey) + if p is not None: + return p + pattern, flags = key + if isinstance(pattern, _pattern_type): + return pattern + if not sre_compile.isstring(pattern): + raise TypeError, "first argument must be string or compiled pattern" + try: + p = sre_compile.compile(pattern, flags) + except error, v: + raise error, v # invalid expression + if len(_cache) >= _MAXCACHE: + _cache.clear() + _cache[cachekey] = p + return p + +def _compile_repl(*key): + # internal: compile replacement pattern + p = _cache_repl.get(key) + if p is not None: + return p + repl, pattern = key + try: + p = sre_parse.parse_template(repl, pattern) + except error, v: + raise error, v # invalid expression + if len(_cache_repl) >= _MAXCACHE: + _cache_repl.clear() + _cache_repl[key] = p + return p + +def _expand(pattern, match, template): + # internal: match.expand implementation hook + template = sre_parse.parse_template(template, pattern) + return sre_parse.expand_template(template, match) + +def _subx(pattern, template): + # internal: pattern.sub/subn implementation helper + template = _compile_repl(template, pattern) + if not template[0] and len(template[1]) == 1: + # literal replacement + return template[1][0] + def filter(match, template=template): + return sre_parse.expand_template(template, match) + return filter + +# register myself for pickling + +import copy_reg + +def _pickle(p): + return _compile, (p.pattern, p.flags) + +copy_reg.pickle(_pattern_type, _pickle, _compile) + +# -------------------------------------------------------------------- +# experimental stuff (see python-dev discussions for details) + +class Scanner: + def __init__(self, lexicon, flags=0): + from sre_constants import BRANCH, SUBPATTERN + self.lexicon = lexicon + # combine phrases into a compound pattern + p = [] + s = sre_parse.Pattern() + s.flags = flags + for phrase, action in lexicon: + p.append(sre_parse.SubPattern(s, [ + (SUBPATTERN, (len(p)+1, sre_parse.parse(phrase, flags))), + ])) + p = sre_parse.SubPattern(s, [(BRANCH, (None, p))]) + s.groups = len(p) + self.scanner = sre_compile.compile(p) + def scan(self, string): + result = [] + append = result.append + match = self.scanner.scanner(string).match + i = 0 + while 1: + m = match() + if not m: + break + j = m.end() + if i == j: + break + action = self.lexicon[m.lastindex-1][1] + if callable(action): + self.match = m + action = action(self, m.group()) + if action is not None: + append(action) + i = j + return result, string[i:] diff --git a/thirdparty/python25/Lib/rfc822.py b/thirdparty/python25/Lib/rfc822.py new file mode 100644 index 000000000..e644cec70 --- /dev/null +++ b/thirdparty/python25/Lib/rfc822.py @@ -0,0 +1,1007 @@ +"""RFC 2822 message manipulation. + +Note: This is only a very rough sketch of a full RFC-822 parser; in particular +the tokenizing of addresses does not adhere to all the quoting rules. + +Note: RFC 2822 is a long awaited update to RFC 822. This module should +conform to RFC 2822, and is thus mis-named (it's not worth renaming it). Some +effort at RFC 2822 updates have been made, but a thorough audit has not been +performed. Consider any RFC 2822 non-conformance to be a bug. + + RFC 2822: http://www.faqs.org/rfcs/rfc2822.html + RFC 822 : http://www.faqs.org/rfcs/rfc822.html (obsolete) + +Directions for use: + +To create a Message object: first open a file, e.g.: + + fp = open(file, 'r') + +You can use any other legal way of getting an open file object, e.g. use +sys.stdin or call os.popen(). Then pass the open file object to the Message() +constructor: + + m = Message(fp) + +This class can work with any input object that supports a readline method. If +the input object has seek and tell capability, the rewindbody method will +work; also illegal lines will be pushed back onto the input stream. If the +input object lacks seek but has an `unread' method that can push back a line +of input, Message will use that to push back illegal lines. Thus this class +can be used to parse messages coming from a buffered stream. + +The optional `seekable' argument is provided as a workaround for certain stdio +libraries in which tell() discards buffered data before discovering that the +lseek() system call doesn't work. For maximum portability, you should set the +seekable argument to zero to prevent that initial \code{tell} when passing in +an unseekable object such as a a file object created from a socket object. If +it is 1 on entry -- which it is by default -- the tell() method of the open +file object is called once; if this raises an exception, seekable is reset to +0. For other nonzero values of seekable, this test is not made. + +To get the text of a particular header there are several methods: + + str = m.getheader(name) + str = m.getrawheader(name) + +where name is the name of the header, e.g. 'Subject'. The difference is that +getheader() strips the leading and trailing whitespace, while getrawheader() +doesn't. Both functions retain embedded whitespace (including newlines) +exactly as they are specified in the header, and leave the case of the text +unchanged. + +For addresses and address lists there are functions + + realname, mailaddress = m.getaddr(name) + list = m.getaddrlist(name) + +where the latter returns a list of (realname, mailaddr) tuples. + +There is also a method + + time = m.getdate(name) + +which parses a Date-like field and returns a time-compatible tuple, +i.e. a tuple such as returned by time.localtime() or accepted by +time.mktime(). + +See the class definition for lower level access methods. + +There are also some utility functions here. +""" +# Cleanup and extensions by Eric S. Raymond + +import time + +__all__ = ["Message","AddressList","parsedate","parsedate_tz","mktime_tz"] + +_blanklines = ('\r\n', '\n') # Optimization for islast() + + +class Message: + """Represents a single RFC 2822-compliant message.""" + + def __init__(self, fp, seekable = 1): + """Initialize the class instance and read the headers.""" + if seekable == 1: + # Exercise tell() to make sure it works + # (and then assume seek() works, too) + try: + fp.tell() + except (AttributeError, IOError): + seekable = 0 + self.fp = fp + self.seekable = seekable + self.startofheaders = None + self.startofbody = None + # + if self.seekable: + try: + self.startofheaders = self.fp.tell() + except IOError: + self.seekable = 0 + # + self.readheaders() + # + if self.seekable: + try: + self.startofbody = self.fp.tell() + except IOError: + self.seekable = 0 + + def rewindbody(self): + """Rewind the file to the start of the body (if seekable).""" + if not self.seekable: + raise IOError, "unseekable file" + self.fp.seek(self.startofbody) + + def readheaders(self): + """Read header lines. + + Read header lines up to the entirely blank line that terminates them. + The (normally blank) line that ends the headers is skipped, but not + included in the returned list. If a non-header line ends the headers, + (which is an error), an attempt is made to backspace over it; it is + never included in the returned list. + + The variable self.status is set to the empty string if all went well, + otherwise it is an error message. The variable self.headers is a + completely uninterpreted list of lines contained in the header (so + printing them will reproduce the header exactly as it appears in the + file). + """ + self.dict = {} + self.unixfrom = '' + self.headers = lst = [] + self.status = '' + headerseen = "" + firstline = 1 + startofline = unread = tell = None + if hasattr(self.fp, 'unread'): + unread = self.fp.unread + elif self.seekable: + tell = self.fp.tell + while 1: + if tell: + try: + startofline = tell() + except IOError: + startofline = tell = None + self.seekable = 0 + line = self.fp.readline() + if not line: + self.status = 'EOF in headers' + break + # Skip unix From name time lines + if firstline and line.startswith('From '): + self.unixfrom = self.unixfrom + line + continue + firstline = 0 + if headerseen and line[0] in ' \t': + # It's a continuation line. + lst.append(line) + x = (self.dict[headerseen] + "\n " + line.strip()) + self.dict[headerseen] = x.strip() + continue + elif self.iscomment(line): + # It's a comment. Ignore it. + continue + elif self.islast(line): + # Note! No pushback here! The delimiter line gets eaten. + break + headerseen = self.isheader(line) + if headerseen: + # It's a legal header line, save it. + lst.append(line) + self.dict[headerseen] = line[len(headerseen)+1:].strip() + continue + else: + # It's not a header line; throw it back and stop here. + if not self.dict: + self.status = 'No headers' + else: + self.status = 'Non-header line where header expected' + # Try to undo the read. + if unread: + unread(line) + elif tell: + self.fp.seek(startofline) + else: + self.status = self.status + '; bad seek' + break + + def isheader(self, line): + """Determine whether a given line is a legal header. + + This method should return the header name, suitably canonicalized. + You may override this method in order to use Message parsing on tagged + data in RFC 2822-like formats with special header formats. + """ + i = line.find(':') + if i > 0: + return line[:i].lower() + return None + + def islast(self, line): + """Determine whether a line is a legal end of RFC 2822 headers. + + You may override this method if your application wants to bend the + rules, e.g. to strip trailing whitespace, or to recognize MH template + separators ('--------'). For convenience (e.g. for code reading from + sockets) a line consisting of \r\n also matches. + """ + return line in _blanklines + + def iscomment(self, line): + """Determine whether a line should be skipped entirely. + + You may override this method in order to use Message parsing on tagged + data in RFC 2822-like formats that support embedded comments or + free-text data. + """ + return False + + def getallmatchingheaders(self, name): + """Find all header lines matching a given header name. + + Look through the list of headers and find all lines matching a given + header name (and their continuation lines). A list of the lines is + returned, without interpretation. If the header does not occur, an + empty list is returned. If the header occurs multiple times, all + occurrences are returned. Case is not important in the header name. + """ + name = name.lower() + ':' + n = len(name) + lst = [] + hit = 0 + for line in self.headers: + if line[:n].lower() == name: + hit = 1 + elif not line[:1].isspace(): + hit = 0 + if hit: + lst.append(line) + return lst + + def getfirstmatchingheader(self, name): + """Get the first header line matching name. + + This is similar to getallmatchingheaders, but it returns only the + first matching header (and its continuation lines). + """ + name = name.lower() + ':' + n = len(name) + lst = [] + hit = 0 + for line in self.headers: + if hit: + if not line[:1].isspace(): + break + elif line[:n].lower() == name: + hit = 1 + if hit: + lst.append(line) + return lst + + def getrawheader(self, name): + """A higher-level interface to getfirstmatchingheader(). + + Return a string containing the literal text of the header but with the + keyword stripped. All leading, trailing and embedded whitespace is + kept in the string, however. Return None if the header does not + occur. + """ + + lst = self.getfirstmatchingheader(name) + if not lst: + return None + lst[0] = lst[0][len(name) + 1:] + return ''.join(lst) + + def getheader(self, name, default=None): + """Get the header value for a name. + + This is the normal interface: it returns a stripped version of the + header value for a given header name, or None if it doesn't exist. + This uses the dictionary version which finds the *last* such header. + """ + return self.dict.get(name.lower(), default) + get = getheader + + def getheaders(self, name): + """Get all values for a header. + + This returns a list of values for headers given more than once; each + value in the result list is stripped in the same way as the result of + getheader(). If the header is not given, return an empty list. + """ + result = [] + current = '' + have_header = 0 + for s in self.getallmatchingheaders(name): + if s[0].isspace(): + if current: + current = "%s\n %s" % (current, s.strip()) + else: + current = s.strip() + else: + if have_header: + result.append(current) + current = s[s.find(":") + 1:].strip() + have_header = 1 + if have_header: + result.append(current) + return result + + def getaddr(self, name): + """Get a single address from a header, as a tuple. + + An example return value: + ('Guido van Rossum', 'guido@cwi.nl') + """ + # New, by Ben Escoto + alist = self.getaddrlist(name) + if alist: + return alist[0] + else: + return (None, None) + + def getaddrlist(self, name): + """Get a list of addresses from a header. + + Retrieves a list of addresses from a header, where each address is a + tuple as returned by getaddr(). Scans all named headers, so it works + properly with multiple To: or Cc: headers for example. + """ + raw = [] + for h in self.getallmatchingheaders(name): + if h[0] in ' \t': + raw.append(h) + else: + if raw: + raw.append(', ') + i = h.find(':') + if i > 0: + addr = h[i+1:] + raw.append(addr) + alladdrs = ''.join(raw) + a = AddressList(alladdrs) + return a.addresslist + + def getdate(self, name): + """Retrieve a date field from a header. + + Retrieves a date field from the named header, returning a tuple + compatible with time.mktime(). + """ + try: + data = self[name] + except KeyError: + return None + return parsedate(data) + + def getdate_tz(self, name): + """Retrieve a date field from a header as a 10-tuple. + + The first 9 elements make up a tuple compatible with time.mktime(), + and the 10th is the offset of the poster's time zone from GMT/UTC. + """ + try: + data = self[name] + except KeyError: + return None + return parsedate_tz(data) + + + # Access as a dictionary (only finds *last* header of each type): + + def __len__(self): + """Get the number of headers in a message.""" + return len(self.dict) + + def __getitem__(self, name): + """Get a specific header, as from a dictionary.""" + return self.dict[name.lower()] + + def __setitem__(self, name, value): + """Set the value of a header. + + Note: This is not a perfect inversion of __getitem__, because any + changed headers get stuck at the end of the raw-headers list rather + than where the altered header was. + """ + del self[name] # Won't fail if it doesn't exist + self.dict[name.lower()] = value + text = name + ": " + value + for line in text.split("\n"): + self.headers.append(line + "\n") + + def __delitem__(self, name): + """Delete all occurrences of a specific header, if it is present.""" + name = name.lower() + if not name in self.dict: + return + del self.dict[name] + name = name + ':' + n = len(name) + lst = [] + hit = 0 + for i in range(len(self.headers)): + line = self.headers[i] + if line[:n].lower() == name: + hit = 1 + elif not line[:1].isspace(): + hit = 0 + if hit: + lst.append(i) + for i in reversed(lst): + del self.headers[i] + + def setdefault(self, name, default=""): + lowername = name.lower() + if lowername in self.dict: + return self.dict[lowername] + else: + text = name + ": " + default + for line in text.split("\n"): + self.headers.append(line + "\n") + self.dict[lowername] = default + return default + + def has_key(self, name): + """Determine whether a message contains the named header.""" + return name.lower() in self.dict + + def __contains__(self, name): + """Determine whether a message contains the named header.""" + return name.lower() in self.dict + + def __iter__(self): + return iter(self.dict) + + def keys(self): + """Get all of a message's header field names.""" + return self.dict.keys() + + def values(self): + """Get all of a message's header field values.""" + return self.dict.values() + + def items(self): + """Get all of a message's headers. + + Returns a list of name, value tuples. + """ + return self.dict.items() + + def __str__(self): + return ''.join(self.headers) + + +# Utility functions +# ----------------- + +# XXX Should fix unquote() and quote() to be really conformant. +# XXX The inverses of the parse functions may also be useful. + + +def unquote(s): + """Remove quotes from a string.""" + if len(s) > 1: + if s.startswith('"') and s.endswith('"'): + return s[1:-1].replace('\\\\', '\\').replace('\\"', '"') + if s.startswith('<') and s.endswith('>'): + return s[1:-1] + return s + + +def quote(s): + """Add quotes around a string.""" + return s.replace('\\', '\\\\').replace('"', '\\"') + + +def parseaddr(address): + """Parse an address into a (realname, mailaddr) tuple.""" + a = AddressList(address) + lst = a.addresslist + if not lst: + return (None, None) + return lst[0] + + +class AddrlistClass: + """Address parser class by Ben Escoto. + + To understand what this class does, it helps to have a copy of + RFC 2822 in front of you. + + http://www.faqs.org/rfcs/rfc2822.html + + Note: this class interface is deprecated and may be removed in the future. + Use rfc822.AddressList instead. + """ + + def __init__(self, field): + """Initialize a new instance. + + `field' is an unparsed address header field, containing one or more + addresses. + """ + self.specials = '()<>@,:;.\"[]' + self.pos = 0 + self.LWS = ' \t' + self.CR = '\r\n' + self.atomends = self.specials + self.LWS + self.CR + # Note that RFC 2822 now specifies `.' as obs-phrase, meaning that it + # is obsolete syntax. RFC 2822 requires that we recognize obsolete + # syntax, so allow dots in phrases. + self.phraseends = self.atomends.replace('.', '') + self.field = field + self.commentlist = [] + + def gotonext(self): + """Parse up to the start of the next address.""" + while self.pos < len(self.field): + if self.field[self.pos] in self.LWS + '\n\r': + self.pos = self.pos + 1 + elif self.field[self.pos] == '(': + self.commentlist.append(self.getcomment()) + else: break + + def getaddrlist(self): + """Parse all addresses. + + Returns a list containing all of the addresses. + """ + result = [] + ad = self.getaddress() + while ad: + result += ad + ad = self.getaddress() + return result + + def getaddress(self): + """Parse the next address.""" + self.commentlist = [] + self.gotonext() + + oldpos = self.pos + oldcl = self.commentlist + plist = self.getphraselist() + + self.gotonext() + returnlist = [] + + if self.pos >= len(self.field): + # Bad email address technically, no domain. + if plist: + returnlist = [(' '.join(self.commentlist), plist[0])] + + elif self.field[self.pos] in '.@': + # email address is just an addrspec + # this isn't very efficient since we start over + self.pos = oldpos + self.commentlist = oldcl + addrspec = self.getaddrspec() + returnlist = [(' '.join(self.commentlist), addrspec)] + + elif self.field[self.pos] == ':': + # address is a group + returnlist = [] + + fieldlen = len(self.field) + self.pos += 1 + while self.pos < len(self.field): + self.gotonext() + if self.pos < fieldlen and self.field[self.pos] == ';': + self.pos += 1 + break + returnlist = returnlist + self.getaddress() + + elif self.field[self.pos] == '<': + # Address is a phrase then a route addr + routeaddr = self.getrouteaddr() + + if self.commentlist: + returnlist = [(' '.join(plist) + ' (' + \ + ' '.join(self.commentlist) + ')', routeaddr)] + else: returnlist = [(' '.join(plist), routeaddr)] + + else: + if plist: + returnlist = [(' '.join(self.commentlist), plist[0])] + elif self.field[self.pos] in self.specials: + self.pos += 1 + + self.gotonext() + if self.pos < len(self.field) and self.field[self.pos] == ',': + self.pos += 1 + return returnlist + + def getrouteaddr(self): + """Parse a route address (Return-path value). + + This method just skips all the route stuff and returns the addrspec. + """ + if self.field[self.pos] != '<': + return + + expectroute = 0 + self.pos += 1 + self.gotonext() + adlist = "" + while self.pos < len(self.field): + if expectroute: + self.getdomain() + expectroute = 0 + elif self.field[self.pos] == '>': + self.pos += 1 + break + elif self.field[self.pos] == '@': + self.pos += 1 + expectroute = 1 + elif self.field[self.pos] == ':': + self.pos += 1 + else: + adlist = self.getaddrspec() + self.pos += 1 + break + self.gotonext() + + return adlist + + def getaddrspec(self): + """Parse an RFC 2822 addr-spec.""" + aslist = [] + + self.gotonext() + while self.pos < len(self.field): + if self.field[self.pos] == '.': + aslist.append('.') + self.pos += 1 + elif self.field[self.pos] == '"': + aslist.append('"%s"' % self.getquote()) + elif self.field[self.pos] in self.atomends: + break + else: aslist.append(self.getatom()) + self.gotonext() + + if self.pos >= len(self.field) or self.field[self.pos] != '@': + return ''.join(aslist) + + aslist.append('@') + self.pos += 1 + self.gotonext() + return ''.join(aslist) + self.getdomain() + + def getdomain(self): + """Get the complete domain name from an address.""" + sdlist = [] + while self.pos < len(self.field): + if self.field[self.pos] in self.LWS: + self.pos += 1 + elif self.field[self.pos] == '(': + self.commentlist.append(self.getcomment()) + elif self.field[self.pos] == '[': + sdlist.append(self.getdomainliteral()) + elif self.field[self.pos] == '.': + self.pos += 1 + sdlist.append('.') + elif self.field[self.pos] in self.atomends: + break + else: sdlist.append(self.getatom()) + return ''.join(sdlist) + + def getdelimited(self, beginchar, endchars, allowcomments = 1): + """Parse a header fragment delimited by special characters. + + `beginchar' is the start character for the fragment. If self is not + looking at an instance of `beginchar' then getdelimited returns the + empty string. + + `endchars' is a sequence of allowable end-delimiting characters. + Parsing stops when one of these is encountered. + + If `allowcomments' is non-zero, embedded RFC 2822 comments are allowed + within the parsed fragment. + """ + if self.field[self.pos] != beginchar: + return '' + + slist = [''] + quote = 0 + self.pos += 1 + while self.pos < len(self.field): + if quote == 1: + slist.append(self.field[self.pos]) + quote = 0 + elif self.field[self.pos] in endchars: + self.pos += 1 + break + elif allowcomments and self.field[self.pos] == '(': + slist.append(self.getcomment()) + continue # have already advanced pos from getcomment + elif self.field[self.pos] == '\\': + quote = 1 + else: + slist.append(self.field[self.pos]) + self.pos += 1 + + return ''.join(slist) + + def getquote(self): + """Get a quote-delimited fragment from self's field.""" + return self.getdelimited('"', '"\r', 0) + + def getcomment(self): + """Get a parenthesis-delimited fragment from self's field.""" + return self.getdelimited('(', ')\r', 1) + + def getdomainliteral(self): + """Parse an RFC 2822 domain-literal.""" + return '[%s]' % self.getdelimited('[', ']\r', 0) + + def getatom(self, atomends=None): + """Parse an RFC 2822 atom. + + Optional atomends specifies a different set of end token delimiters + (the default is to use self.atomends). This is used e.g. in + getphraselist() since phrase endings must not include the `.' (which + is legal in phrases).""" + atomlist = [''] + if atomends is None: + atomends = self.atomends + + while self.pos < len(self.field): + if self.field[self.pos] in atomends: + break + else: atomlist.append(self.field[self.pos]) + self.pos += 1 + + return ''.join(atomlist) + + def getphraselist(self): + """Parse a sequence of RFC 2822 phrases. + + A phrase is a sequence of words, which are in turn either RFC 2822 + atoms or quoted-strings. Phrases are canonicalized by squeezing all + runs of continuous whitespace into one space. + """ + plist = [] + + while self.pos < len(self.field): + if self.field[self.pos] in self.LWS: + self.pos += 1 + elif self.field[self.pos] == '"': + plist.append(self.getquote()) + elif self.field[self.pos] == '(': + self.commentlist.append(self.getcomment()) + elif self.field[self.pos] in self.phraseends: + break + else: + plist.append(self.getatom(self.phraseends)) + + return plist + +class AddressList(AddrlistClass): + """An AddressList encapsulates a list of parsed RFC 2822 addresses.""" + def __init__(self, field): + AddrlistClass.__init__(self, field) + if field: + self.addresslist = self.getaddrlist() + else: + self.addresslist = [] + + def __len__(self): + return len(self.addresslist) + + def __str__(self): + return ", ".join(map(dump_address_pair, self.addresslist)) + + def __add__(self, other): + # Set union + newaddr = AddressList(None) + newaddr.addresslist = self.addresslist[:] + for x in other.addresslist: + if not x in self.addresslist: + newaddr.addresslist.append(x) + return newaddr + + def __iadd__(self, other): + # Set union, in-place + for x in other.addresslist: + if not x in self.addresslist: + self.addresslist.append(x) + return self + + def __sub__(self, other): + # Set difference + newaddr = AddressList(None) + for x in self.addresslist: + if not x in other.addresslist: + newaddr.addresslist.append(x) + return newaddr + + def __isub__(self, other): + # Set difference, in-place + for x in other.addresslist: + if x in self.addresslist: + self.addresslist.remove(x) + return self + + def __getitem__(self, index): + # Make indexing, slices, and 'in' work + return self.addresslist[index] + +def dump_address_pair(pair): + """Dump a (name, address) pair in a canonicalized form.""" + if pair[0]: + return '"' + pair[0] + '" <' + pair[1] + '>' + else: + return pair[1] + +# Parse a date field + +_monthnames = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', + 'aug', 'sep', 'oct', 'nov', 'dec', + 'january', 'february', 'march', 'april', 'may', 'june', 'july', + 'august', 'september', 'october', 'november', 'december'] +_daynames = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'] + +# The timezone table does not include the military time zones defined +# in RFC822, other than Z. According to RFC1123, the description in +# RFC822 gets the signs wrong, so we can't rely on any such time +# zones. RFC1123 recommends that numeric timezone indicators be used +# instead of timezone names. + +_timezones = {'UT':0, 'UTC':0, 'GMT':0, 'Z':0, + 'AST': -400, 'ADT': -300, # Atlantic (used in Canada) + 'EST': -500, 'EDT': -400, # Eastern + 'CST': -600, 'CDT': -500, # Central + 'MST': -700, 'MDT': -600, # Mountain + 'PST': -800, 'PDT': -700 # Pacific + } + + +def parsedate_tz(data): + """Convert a date string to a time tuple. + + Accounts for military timezones. + """ + if not data: + return None + data = data.split() + if data[0][-1] in (',', '.') or data[0].lower() in _daynames: + # There's a dayname here. Skip it + del data[0] + else: + # no space after the "weekday,"? + i = data[0].rfind(',') + if i >= 0: + data[0] = data[0][i+1:] + if len(data) == 3: # RFC 850 date, deprecated + stuff = data[0].split('-') + if len(stuff) == 3: + data = stuff + data[1:] + if len(data) == 4: + s = data[3] + i = s.find('+') + if i > 0: + data[3:] = [s[:i], s[i+1:]] + else: + data.append('') # Dummy tz + if len(data) < 5: + return None + data = data[:5] + [dd, mm, yy, tm, tz] = data + mm = mm.lower() + if not mm in _monthnames: + dd, mm = mm, dd.lower() + if not mm in _monthnames: + return None + mm = _monthnames.index(mm)+1 + if mm > 12: mm = mm - 12 + if dd[-1] == ',': + dd = dd[:-1] + i = yy.find(':') + if i > 0: + yy, tm = tm, yy + if yy[-1] == ',': + yy = yy[:-1] + if not yy[0].isdigit(): + yy, tz = tz, yy + if tm[-1] == ',': + tm = tm[:-1] + tm = tm.split(':') + if len(tm) == 2: + [thh, tmm] = tm + tss = '0' + elif len(tm) == 3: + [thh, tmm, tss] = tm + else: + return None + try: + yy = int(yy) + dd = int(dd) + thh = int(thh) + tmm = int(tmm) + tss = int(tss) + except ValueError: + return None + tzoffset = None + tz = tz.upper() + if tz in _timezones: + tzoffset = _timezones[tz] + else: + try: + tzoffset = int(tz) + except ValueError: + pass + # Convert a timezone offset into seconds ; -0500 -> -18000 + if tzoffset: + if tzoffset < 0: + tzsign = -1 + tzoffset = -tzoffset + else: + tzsign = 1 + tzoffset = tzsign * ( (tzoffset//100)*3600 + (tzoffset % 100)*60) + return (yy, mm, dd, thh, tmm, tss, 0, 1, 0, tzoffset) + + +def parsedate(data): + """Convert a time string to a time tuple.""" + t = parsedate_tz(data) + if t is None: + return t + return t[:9] + + +def mktime_tz(data): + """Turn a 10-tuple as returned by parsedate_tz() into a UTC timestamp.""" + if data[9] is None: + # No zone info, so localtime is better assumption than GMT + return time.mktime(data[:8] + (-1,)) + else: + t = time.mktime(data[:8] + (0,)) + return t - data[9] - time.timezone + +def formatdate(timeval=None): + """Returns time format preferred for Internet standards. + + Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 + + According to RFC 1123, day and month names must always be in + English. If not for that, this code could use strftime(). It + can't because strftime() honors the locale and could generated + non-English names. + """ + if timeval is None: + timeval = time.time() + timeval = time.gmtime(timeval) + return "%s, %02d %s %04d %02d:%02d:%02d GMT" % ( + ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")[timeval[6]], + timeval[2], + ("Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")[timeval[1]-1], + timeval[0], timeval[3], timeval[4], timeval[5]) + + +# When used as script, run a small test program. +# The first command line argument must be a filename containing one +# message in RFC-822 format. + +if __name__ == '__main__': + import sys, os + file = os.path.join(os.environ['HOME'], 'Mail/inbox/1') + if sys.argv[1:]: file = sys.argv[1] + f = open(file, 'r') + m = Message(f) + print 'From:', m.getaddr('from') + print 'To:', m.getaddrlist('to') + print 'Subject:', m.getheader('subject') + print 'Date:', m.getheader('date') + date = m.getdate_tz('date') + tz = date[-1] + date = time.localtime(mktime_tz(date)) + if date: + print 'ParsedDate:', time.asctime(date), + hhmmss = tz + hhmm, ss = divmod(hhmmss, 60) + hh, mm = divmod(hhmm, 60) + print "%+03d%02d" % (hh, mm), + if ss: print ".%02d" % ss, + print + else: + print 'ParsedDate:', None + m.rewindbody() + n = 0 + while f.readline(): + n += 1 + print 'Lines:', n + print '-'*70 + print 'len =', len(m) + if 'Date' in m: print 'Date =', m['Date'] + if 'X-Nonsense' in m: pass + print 'keys =', m.keys() + print 'values =', m.values() + print 'items =', m.items() diff --git a/thirdparty/python25/Lib/sha.py b/thirdparty/python25/Lib/sha.py new file mode 100644 index 000000000..83ffa7a79 --- /dev/null +++ b/thirdparty/python25/Lib/sha.py @@ -0,0 +1,11 @@ +# $Id: sha.py 39316 2005-08-21 18:45:59Z greg $ +# +# Copyright (C) 2005 Gregory P. Smith (greg@electricrain.com) +# Licensed to PSF under a Contributor Agreement. + +from hashlib import sha1 as sha +new = sha + +blocksize = 1 # legacy value (wrong in any useful sense) +digest_size = 20 +digestsize = 20 diff --git a/thirdparty/python25/Lib/shutil.py b/thirdparty/python25/Lib/shutil.py new file mode 100644 index 000000000..e3d1e78d1 --- /dev/null +++ b/thirdparty/python25/Lib/shutil.py @@ -0,0 +1,203 @@ +"""Utility functions for copying files and directory trees. + +XXX The functions here don't copy the resource fork or other metadata on Mac. + +""" + +import os +import sys +import stat +from os.path import abspath + +__all__ = ["copyfileobj","copyfile","copymode","copystat","copy","copy2", + "copytree","move","rmtree","Error"] + +class Error(EnvironmentError): + pass + +def copyfileobj(fsrc, fdst, length=16*1024): + """copy data from file-like object fsrc to file-like object fdst""" + while 1: + buf = fsrc.read(length) + if not buf: + break + fdst.write(buf) + +def _samefile(src, dst): + # Macintosh, Unix. + if hasattr(os.path,'samefile'): + try: + return os.path.samefile(src, dst) + except OSError: + return False + + # All other platforms: check for same pathname. + return (os.path.normcase(os.path.abspath(src)) == + os.path.normcase(os.path.abspath(dst))) + +def copyfile(src, dst): + """Copy data from src to dst""" + if _samefile(src, dst): + raise Error, "`%s` and `%s` are the same file" % (src, dst) + + fsrc = None + fdst = None + try: + fsrc = open(src, 'rb') + fdst = open(dst, 'wb') + copyfileobj(fsrc, fdst) + finally: + if fdst: + fdst.close() + if fsrc: + fsrc.close() + +def copymode(src, dst): + """Copy mode bits from src to dst""" + if hasattr(os, 'chmod'): + st = os.stat(src) + mode = stat.S_IMODE(st.st_mode) + os.chmod(dst, mode) + +def copystat(src, dst): + """Copy all stat info (mode bits, atime and mtime) from src to dst""" + st = os.stat(src) + mode = stat.S_IMODE(st.st_mode) + if hasattr(os, 'utime'): + os.utime(dst, (st.st_atime, st.st_mtime)) + if hasattr(os, 'chmod'): + os.chmod(dst, mode) + + +def copy(src, dst): + """Copy data and mode bits ("cp src dst"). + + The destination may be a directory. + + """ + if os.path.isdir(dst): + dst = os.path.join(dst, os.path.basename(src)) + copyfile(src, dst) + copymode(src, dst) + +def copy2(src, dst): + """Copy data and all stat info ("cp -p src dst"). + + The destination may be a directory. + + """ + if os.path.isdir(dst): + dst = os.path.join(dst, os.path.basename(src)) + copyfile(src, dst) + copystat(src, dst) + + +def copytree(src, dst, symlinks=False): + """Recursively copy a directory tree using copy2(). + + The destination directory must not already exist. + If exception(s) occur, an Error is raised with a list of reasons. + + If the optional symlinks flag is true, symbolic links in the + source tree result in symbolic links in the destination tree; if + it is false, the contents of the files pointed to by symbolic + links are copied. + + XXX Consider this example code rather than the ultimate tool. + + """ + names = os.listdir(src) + os.makedirs(dst) + errors = [] + for name in names: + srcname = os.path.join(src, name) + dstname = os.path.join(dst, name) + try: + if symlinks and os.path.islink(srcname): + linkto = os.readlink(srcname) + os.symlink(linkto, dstname) + elif os.path.isdir(srcname): + copytree(srcname, dstname, symlinks) + else: + copy2(srcname, dstname) + # XXX What about devices, sockets etc.? + except (IOError, os.error), why: + errors.append((srcname, dstname, str(why))) + # catch the Error from the recursive copytree so that we can + # continue with other files + except Error, err: + errors.extend(err.args[0]) + try: + copystat(src, dst) + except WindowsError: + # can't copy file access times on Windows + pass + except OSError, why: + errors.extend((src, dst, str(why))) + if errors: + raise Error, errors + +def rmtree(path, ignore_errors=False, onerror=None): + """Recursively delete a directory tree. + + If ignore_errors is set, errors are ignored; otherwise, if onerror + is set, it is called to handle the error with arguments (func, + path, exc_info) where func is os.listdir, os.remove, or os.rmdir; + path is the argument to that function that caused it to fail; and + exc_info is a tuple returned by sys.exc_info(). If ignore_errors + is false and onerror is None, an exception is raised. + + """ + if ignore_errors: + def onerror(*args): + pass + elif onerror is None: + def onerror(*args): + raise + names = [] + try: + names = os.listdir(path) + except os.error, err: + onerror(os.listdir, path, sys.exc_info()) + for name in names: + fullname = os.path.join(path, name) + try: + mode = os.lstat(fullname).st_mode + except os.error: + mode = 0 + if stat.S_ISDIR(mode): + rmtree(fullname, ignore_errors, onerror) + else: + try: + os.remove(fullname) + except os.error, err: + onerror(os.remove, fullname, sys.exc_info()) + try: + os.rmdir(path) + except os.error: + onerror(os.rmdir, path, sys.exc_info()) + +def move(src, dst): + """Recursively move a file or directory to another location. + + If the destination is on our current filesystem, then simply use + rename. Otherwise, copy src to the dst and then remove src. + A lot more could be done here... A look at a mv.c shows a lot of + the issues this implementation glosses over. + + """ + + try: + os.rename(src, dst) + except OSError: + if os.path.isdir(src): + if destinsrc(src, dst): + raise Error, "Cannot move a directory '%s' into itself '%s'." % (src, dst) + copytree(src, dst, symlinks=True) + rmtree(src) + else: + copy2(src,dst) + os.unlink(src) + +def destinsrc(src, dst): + return abspath(dst).startswith(abspath(src)) diff --git a/thirdparty/python25/Lib/site-packages/psyco-1.5.2-py2.5.egg-info b/thirdparty/python25/Lib/site-packages/psyco-1.5.2-py2.5.egg-info new file mode 100644 index 000000000..4c636e20e --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/psyco-1.5.2-py2.5.egg-info @@ -0,0 +1,22 @@ +Metadata-Version: 1.0 +Name: psyco +Version: 1.5.2 +Summary: Psyco, the Python specializing compiler +Home-page: http://psyco.sourceforge.net/ +Author: Armin Rigo +Author-email: arigo@users.sourceforge.net +License: MIT License +Description: Psyco shows that it is possible to execute Python code at speeds + approaching that of fully compiled languages, by "specialization". + This extension module for the unmodified interpreter accelerates + user programs with little or not change in their sources, by a + factor that can be very interesting (2-10 times is common). +Platform: i386 +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: C +Classifier: Topic :: Software Development :: Compilers +Classifier: Topic :: Software Development :: Interpreters diff --git a/thirdparty/python25/Lib/site-packages/psyco/__init__.py b/thirdparty/python25/Lib/site-packages/psyco/__init__.py new file mode 100644 index 000000000..01754dcdc --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/psyco/__init__.py @@ -0,0 +1,58 @@ +########################################################################### +# +# Psyco top-level file of the Psyco package. +# Copyright (C) 2001-2002 Armin Rigo et.al. + +"""Psyco -- the Python Specializing Compiler. + +Typical usage: add the following lines to your application's main module, +preferably after the other imports: + +try: + import psyco + psyco.full() +except ImportError: + print 'Psyco not installed, the program will just run slower' +""" +########################################################################### + + +# +# This module is present to make 'psyco' a package and to +# publish the main functions and variables. +# +# More documentation can be found in core.py. +# + + +# Try to import the dynamic-loading _psyco and report errors +try: + import _psyco +except ImportError, e: + extramsg = '' + import sys, imp + try: + file, filename, (suffix, mode, type) = imp.find_module('_psyco', __path__) + except ImportError: + ext = [suffix for suffix, mode, type in imp.get_suffixes() + if type == imp.C_EXTENSION] + if ext: + extramsg = (" (cannot locate the compiled extension '_psyco%s' " + "in the package path '%s')" % (ext[0], '; '.join(__path__))) + else: + extramsg = (" (check that the compiled extension '%s' is for " + "the correct Python version; this is Python %s)" % + (filename, sys.version.split()[0])) + raise ImportError, str(e) + extramsg + +# Publish important data by importing them in the package +from support import __version__, error, warning, _getrealframe, _getemulframe +from support import version_info, __version__ as hexversion +from core import full, profile, background, runonly, stop, cannotcompile +from core import log, bind, unbind, proxy, unproxy, dumpcodebuf +from _psyco import setfilter + +try: + from _psyco import compact, compacttype # Python 2.2 and above only +except ImportError: + pass diff --git a/thirdparty/python25/Lib/site-packages/psyco/_psyco.pyd b/thirdparty/python25/Lib/site-packages/psyco/_psyco.pyd new file mode 100644 index 0000000000000000000000000000000000000000..ef40d8b5bce0dbbab1e5661e730a399319f36c42 GIT binary patch literal 208896 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%0A&CdHgbtK&K=+~Ww7xBshZKTg;4~8m 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Ð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 literal 0 HcmV?d00001 diff --git a/thirdparty/python25/Lib/site-packages/psyco/classes.py b/thirdparty/python25/Lib/site-packages/psyco/classes.py new file mode 100644 index 000000000..11c2d169b --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/psyco/classes.py @@ -0,0 +1,53 @@ +########################################################################### +# +# Psyco class support module. +# Copyright (C) 2001-2002 Armin Rigo et.al. + +"""Psyco class support module. + +'psyco.classes.psyobj' is an alternate Psyco-optimized root for classes. +Any class inheriting from it or using the metaclass '__metaclass__' might +get optimized specifically for Psyco. It is equivalent to call +psyco.bind() on the class object after its creation. + +Note that this module has no effect with Python version 2.1 or earlier. + +Importing everything from psyco.classes in a module will import the +'__metaclass__' name, so all classes defined after a + + from psyco.classes import * + +will automatically use the Psyco-optimized metaclass. +""" +########################################################################### + +__all__ = ['psyobj', 'psymetaclass', '__metaclass__'] + + +# Python version check +try: + from _psyco import compacttype +except ImportError: + class psyobj: # compatilibity + pass + psymetaclass = None +else: + # version >= 2.2 only + + import core + from types import FunctionType + + class psymetaclass(compacttype): + "Psyco-optimized meta-class. Turns all methods into Psyco proxies." + + def __new__(cls, name, bases, dict): + bindlist = dict.get('__psyco__bind__') + if bindlist is None: + bindlist = [key for key, value in dict.items() + if isinstance(value, FunctionType)] + for attr in bindlist: + dict[attr] = core.proxy(dict[attr]) + return super(psymetaclass, cls).__new__(cls, name, bases, dict) + + psyobj = psymetaclass("psyobj", (), {}) +__metaclass__ = psymetaclass diff --git a/thirdparty/python25/Lib/site-packages/psyco/core.py b/thirdparty/python25/Lib/site-packages/psyco/core.py new file mode 100644 index 000000000..42a6c2fb3 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/psyco/core.py @@ -0,0 +1,232 @@ +########################################################################### +# +# Psyco main functions. +# Copyright (C) 2001-2002 Armin Rigo et.al. + +"""Psyco main functions. + +Here are the routines that you can use from your applications. +These are mostly interfaces to the C core, but they depend on +the Python version. + +You can use these functions from the 'psyco' module instead of +'psyco.core', e.g. + + import psyco + psyco.log('/tmp/psyco.log') + psyco.profile() +""" +########################################################################### + +import _psyco +import types, new +from support import * + + +# Default charge profiler values +default_watermark = 0.09 # between 0.0 (0%) and 1.0 (100%) +default_halflife = 0.5 # seconds +default_pollfreq_profile = 20 # Hz +default_pollfreq_background = 100 # Hz -- a maximum for sleep's resolution +default_parentframe = 0.25 # should not be more than 0.5 (50%) + + +def full(memory=None, time=None, memorymax=None, timemax=None): + """Compile as much as possible. + +Typical use is for small scripts performing intensive computations +or string handling.""" + import profiler + if PYTHON_SUPPORT: + p = profiler.FullCompiler() + else: + p = profiler.ActiveProfiler(0.0, 0.5) + p.run(memory, time, memorymax, timemax) + + +def profile(watermark = default_watermark, + halflife = default_halflife, + pollfreq = default_pollfreq_profile, + parentframe = default_parentframe, + memory=None, time=None, memorymax=None, timemax=None): + """Turn on profiling. + +The 'watermark' parameter controls how easily running functions will +be compiled. The smaller the value, the more functions are compiled.""" + import profiler + p = profiler.ActivePassiveProfiler(watermark, halflife, + pollfreq, parentframe) + p.run(memory, time, memorymax, timemax) + + +def background(watermark = default_watermark, + halflife = default_halflife, + pollfreq = default_pollfreq_background, + parentframe = default_parentframe, + memory=None, time=None, memorymax=None, timemax=None): + """Turn on passive profiling. + +This is a very lightweight mode in which only intensively computing +functions can be detected. The smaller the 'watermark', the more functions +are compiled.""" + import profiler + p = profiler.PassiveProfiler(watermark, halflife, pollfreq, parentframe) + p.run(memory, time, memorymax, timemax) + + +def runonly(memory=None, time=None, memorymax=None, timemax=None): + """Nonprofiler. + +XXX check if this is useful and document.""" + if PYTHON_SUPPORT: + import profiler + p = profiler.RunOnly() + p.run(memory, time, memorymax, timemax) + + +def stop(): + """Turn off all automatic compilation. bind() calls remain in effect.""" + import profiler + profiler.go([]) + + +def log(logfile='', mode='w', top=10): + """Enable logging to the given file. + +If the file name is unspecified, a default name is built by appending +a 'log-psyco' extension to the main script name. + +Mode is 'a' to append to a possibly existing file or 'w' to overwrite +an existing file. Note that the log file may grow quickly in 'a' mode.""" + import profiler, logger + if not logfile: + import os + logfile, dummy = os.path.splitext(sys.argv[0]) + if os.path.basename(logfile): + logfile += '.' + logfile += 'log-psyco' + if hasattr(_psyco, 'VERBOSE_LEVEL'): + print >> sys.stderr, 'psyco: logging to', logfile + # logger.current should be a real file object; subtle problems + # will show up if its write() and flush() methods are written + # in Python, as Psyco will invoke them while compiling. + logger.current = open(logfile, mode) + logger.print_charges = top + profiler.logger = logger + logger.writedate('Logging started') + cannotcompile(logger.psycowrite) + _psyco.statwrite(logger=logger.psycowrite) + + +def bind(x, rec=None): + """Enable compilation of the given function, method, or class object. + +If C is a class (or anything with a '__dict__' attribute), bind(C) will +rebind all functions and methods found in C.__dict__ (which means, for +classes, all methods defined in the class but not in its parents). + +The optional second argument specifies the number of recursive +compilation levels: all functions called by func are compiled +up to the given depth of indirection.""" + if isinstance(x, types.MethodType): + x = x.im_func + if isinstance(x, types.FunctionType): + if rec is None: + x.func_code = _psyco.proxycode(x) + else: + x.func_code = _psyco.proxycode(x, rec) + return + if hasattr(x, '__dict__'): + funcs = [o for o in x.__dict__.values() + if isinstance(o, types.MethodType) + or isinstance(o, types.FunctionType)] + if not funcs: + raise error, ("nothing bindable found in %s object" % + type(x).__name__) + for o in funcs: + bind(o, rec) + return + raise TypeError, "cannot bind %s objects" % type(x).__name__ + + +def unbind(x): + """Reverse of bind().""" + if isinstance(x, types.MethodType): + x = x.im_func + if isinstance(x, types.FunctionType): + try: + f = _psyco.unproxycode(x.func_code) + except error: + pass + else: + x.func_code = f.func_code + return + if hasattr(x, '__dict__'): + for o in x.__dict__.values(): + if (isinstance(o, types.MethodType) + or isinstance(o, types.FunctionType)): + unbind(o) + return + raise TypeError, "cannot unbind %s objects" % type(x).__name__ + + +def proxy(x, rec=None): + """Return a Psyco-enabled copy of the function. + +The original function is still available for non-compiled calls. +The optional second argument specifies the number of recursive +compilation levels: all functions called by func are compiled +up to the given depth of indirection.""" + if isinstance(x, types.FunctionType): + if rec is None: + code = _psyco.proxycode(x) + else: + code = _psyco.proxycode(x, rec) + return new.function(code, x.func_globals, x.func_name) + if isinstance(x, types.MethodType): + p = proxy(x.im_func, rec) + return new.instancemethod(p, x.im_self, x.im_class) + raise TypeError, "cannot proxy %s objects" % type(x).__name__ + + +def unproxy(proxy): + """Return a new copy of the original function of method behind a proxy. +The result behaves like the original function in that calling it +does not trigger compilation nor execution of any compiled code.""" + if isinstance(proxy, types.FunctionType): + return _psyco.unproxycode(proxy.func_code) + if isinstance(proxy, types.MethodType): + f = unproxy(proxy.im_func) + return new.instancemethod(f, proxy.im_self, proxy.im_class) + raise TypeError, "%s objects cannot be proxies" % type(proxy).__name__ + + +def cannotcompile(x): + """Instruct Psyco never to compile the given function, method +or code object.""" + if isinstance(x, types.MethodType): + x = x.im_func + if isinstance(x, types.FunctionType): + x = x.func_code + if isinstance(x, types.CodeType): + _psyco.cannotcompile(x) + else: + raise TypeError, "unexpected %s object" % type(x).__name__ + + +def dumpcodebuf(): + """Write in file psyco.dump a copy of the emitted machine code, +provided Psyco was compiled with a non-zero CODE_DUMP. +See py-utils/httpxam.py to examine psyco.dump.""" + if hasattr(_psyco, 'dumpcodebuf'): + _psyco.dumpcodebuf() + + +########################################################################### +# Psyco variables +# error * the error raised by Psyco +# warning * the warning raised by Psyco +# __in_psyco__ * a new built-in variable which is always zero, but which +# Psyco special-cases by returning 1 instead. So +# __in_psyco__ can be used in a function to know if +# that function is being executed by Psyco or not. diff --git a/thirdparty/python25/Lib/site-packages/psyco/kdictproxy.py b/thirdparty/python25/Lib/site-packages/psyco/kdictproxy.py new file mode 100644 index 000000000..710677b00 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/psyco/kdictproxy.py @@ -0,0 +1,133 @@ +########################################################################### +# +# Support code for the 'psyco.compact' type. + +from __future__ import generators + +try: + from UserDict import DictMixin +except ImportError: + + # backported from Python 2.3 to Python 2.2 + class DictMixin: + # Mixin defining all dictionary methods for classes that already have + # a minimum dictionary interface including getitem, setitem, delitem, + # and keys. Without knowledge of the subclass constructor, the mixin + # does not define __init__() or copy(). In addition to the four base + # methods, progressively more efficiency comes with defining + # __contains__(), __iter__(), and iteritems(). + + # second level definitions support higher levels + def __iter__(self): + for k in self.keys(): + yield k + def has_key(self, key): + try: + value = self[key] + except KeyError: + return False + return True + def __contains__(self, key): + return self.has_key(key) + + # third level takes advantage of second level definitions + def iteritems(self): + for k in self: + yield (k, self[k]) + def iterkeys(self): + return self.__iter__() + + # fourth level uses definitions from lower levels + def itervalues(self): + for _, v in self.iteritems(): + yield v + def values(self): + return [v for _, v in self.iteritems()] + def items(self): + return list(self.iteritems()) + def clear(self): + for key in self.keys(): + del self[key] + def setdefault(self, key, default): + try: + return self[key] + except KeyError: + self[key] = default + return default + def pop(self, key, *args): + if len(args) > 1: + raise TypeError, "pop expected at most 2 arguments, got "\ + + repr(1 + len(args)) + try: + value = self[key] + except KeyError: + if args: + return args[0] + raise + del self[key] + return value + def popitem(self): + try: + k, v = self.iteritems().next() + except StopIteration: + raise KeyError, 'container is empty' + del self[k] + return (k, v) + def update(self, other): + # Make progressively weaker assumptions about "other" + if hasattr(other, 'iteritems'): # iteritems saves memory and lookups + for k, v in other.iteritems(): + self[k] = v + elif hasattr(other, '__iter__'): # iter saves memory + for k in other: + self[k] = other[k] + else: + for k in other.keys(): + self[k] = other[k] + def get(self, key, default=None): + try: + return self[key] + except KeyError: + return default + def __repr__(self): + return repr(dict(self.iteritems())) + def __cmp__(self, other): + if other is None: + return 1 + if isinstance(other, DictMixin): + other = dict(other.iteritems()) + return cmp(dict(self.iteritems()), other) + def __len__(self): + return len(self.keys()) + +########################################################################### + +from _psyco import compact # Python 2.2 and above only + + +class compactdictproxy(DictMixin): + + def __init__(self, ko): + self._ko = ko # compact object of which 'self' is the dict + + def __getitem__(self, key): + return compact.__getslot__(self._ko, key) + + def __setitem__(self, key, value): + compact.__setslot__(self._ko, key, value) + + def __delitem__(self, key): + compact.__delslot__(self._ko, key) + + def keys(self): + return compact.__members__.__get__(self._ko) + + def clear(self): + keys = self.keys() + keys.reverse() + for key in keys: + del self[key] + + def __repr__(self): + keys = ', '.join(self.keys()) + return '' % (keys,) diff --git a/thirdparty/python25/Lib/site-packages/psyco/logger.py b/thirdparty/python25/Lib/site-packages/psyco/logger.py new file mode 100644 index 000000000..a3c52197f --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/psyco/logger.py @@ -0,0 +1,96 @@ +########################################################################### +# +# Psyco logger. +# Copyright (C) 2001-2002 Armin Rigo et.al. + +"""Psyco logger. + +See log() in core.py. +""" +########################################################################### + + +import _psyco +from time import time, localtime, strftime + + +current = None +print_charges = 10 +dump_delay = 0.2 +dump_last = 0.0 + +def write(s, level): + t = time() + f = t-int(t) + try: + current.write("%s.%02d %-*s%s\n" % ( + strftime("%X", localtime(int(t))), + int(f*100.0), 63-level, s, + "%"*level)) + current.flush() + except (OSError, IOError): + pass + +def psycowrite(s): + t = time() + f = t-int(t) + try: + current.write("%s.%02d %-*s%s\n" % ( + strftime("%X", localtime(int(t))), + int(f*100.0), 60, s.strip(), + "% %")) + current.flush() + except (OSError, IOError): + pass + +##def writelines(lines, level=0): +## if lines: +## t = time() +## f = t-int(t) +## timedesc = strftime("%x %X", localtime(int(t))) +## print >> current, "%s.%03d %-*s %s" % ( +## timedesc, int(f*1000), +## 50-level, lines[0], +## "+"*level) +## timedesc = " " * (len(timedesc)+5) +## for line in lines[1:]: +## print >> current, timedesc, line + +def writememory(): + write("memory usage: %d+ kb" % _psyco.memory(), 1) + +def dumpcharges(): + global dump_last + if print_charges: + t = time() + if not (dump_last <= t < dump_last+dump_delay): + if t <= dump_last+1.5*dump_delay: + dump_last += dump_delay + else: + dump_last = t + #write("%s: charges:" % who, 0) + lst = _psyco.stattop(print_charges) + if lst: + f = t-int(t) + lines = ["%s.%02d ______\n" % ( + strftime("%X", localtime(int(t))), + int(f*100.0))] + i = 1 + for co, charge in lst: + detail = co.co_filename + if len(detail) > 19: + detail = '...' + detail[-17:] + lines.append(" #%-3d |%4.1f %%| %-26s%20s:%d\n" % + (i, charge*100.0, co.co_name, detail, + co.co_firstlineno)) + i += 1 + current.writelines(lines) + current.flush() + +def writefinalstats(): + dumpcharges() + writememory() + writedate("program exit") + +def writedate(msg): + write('%s, %s' % (msg, strftime("%x")), 20) diff --git a/thirdparty/python25/Lib/site-packages/psyco/profiler.py b/thirdparty/python25/Lib/site-packages/psyco/profiler.py new file mode 100644 index 000000000..ef7bf8e59 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/psyco/profiler.py @@ -0,0 +1,388 @@ +########################################################################### +# +# Psyco profiler (Python part). +# Copyright (C) 2001-2002 Armin Rigo et.al. + +"""Psyco profiler (Python part). + +The implementation of the non-time-critical parts of the profiler. +See profile() and full() in core.py for the easy interface. +""" +########################################################################### + +import _psyco +from support import * +import math, time, types, atexit +now = time.time +try: + import thread +except ImportError: + import dummy_thread as thread + + +# current profiler instance +current = None + +# enabled profilers, in order of priority +profilers = [] + +# logger module (when enabled by core.log()) +logger = None + +# a lock for a thread-safe go() +go_lock = thread.allocate_lock() + +def go(stop=0): + # run the highest-priority profiler in 'profilers' + global current + go_lock.acquire() + try: + prev = current + if stop: + del profilers[:] + if prev: + if profilers and profilers[0] is prev: + return # best profiler already running + prev.stop() + current = None + for p in profilers[:]: + if p.start(): + current = p + if logger: # and p is not prev: + logger.write("%s: starting" % p.__class__.__name__, 5) + return + finally: + go_lock.release() + # no profiler is running now + if stop: + if logger: + logger.writefinalstats() + else: + tag2bind() + +atexit.register(go, 1) + + +def buildfncache(globals, cache): + if hasattr(types.IntType, '__dict__'): + clstypes = (types.ClassType, types.TypeType) + else: + clstypes = types.ClassType + for x in globals.values(): + if isinstance(x, types.MethodType): + x = x.im_func + if isinstance(x, types.FunctionType): + cache[x.func_code] = x, '' + elif isinstance(x, clstypes): + for y in x.__dict__.values(): + if isinstance(y, types.MethodType): + y = y.im_func + if isinstance(y, types.FunctionType): + cache[y.func_code] = y, x.__name__ + +# code-to-function mapping (cache) +function_cache = {} + +def trytobind(co, globals, log=1): + try: + f, clsname = function_cache[co] + except KeyError: + buildfncache(globals, function_cache) + try: + f, clsname = function_cache[co] + except KeyError: + if logger: + logger.write('warning: cannot find function %s in %s' % + (co.co_name, globals.get('__name__', '?')), 3) + return # give up + if logger and log: + modulename = globals.get('__name__', '?') + if clsname: + modulename += '.' + clsname + logger.write('bind function: %s.%s' % (modulename, co.co_name), 1) + f.func_code = _psyco.proxycode(f) + + +if PYTHON_SUPPORT: + # the list of code objects that have been tagged + tagged_codes = [] + + def tag(co, globals): + if logger: + try: + f, clsname = function_cache[co] + except KeyError: + buildfncache(globals, function_cache) + try: + f, clsname = function_cache[co] + except KeyError: + clsname = '' # give up + modulename = globals.get('__name__', '?') + if clsname: + modulename += '.' + clsname + logger.write('tag function: %s.%s' % (modulename, co.co_name), 1) + tagged_codes.append((co, globals)) + _psyco.turbo_frame(co) + _psyco.turbo_code(co) + + def tag2bind(): + if tagged_codes: + if logger: + logger.write('profiling stopped, binding %d functions' % + len(tagged_codes), 2) + for co, globals in tagged_codes: + trytobind(co, globals, 0) + function_cache.clear() + del tagged_codes[:] + +else: + # tagging is impossible, always bind + tag = trytobind + def tag2bind(): + pass + + + +class Profiler: + MemoryTimerResolution = 0.103 + + def run(self, memory, time, memorymax, timemax): + self.memory = memory + self.memorymax = memorymax + self.time = time + if timemax is None: + self.endtime = None + else: + self.endtime = now() + timemax + self.alarms = [] + profilers.append(self) + go() + + def start(self): + curmem = _psyco.memory() + memlimits = [] + if self.memorymax is not None: + if curmem >= self.memorymax: + if logger: + logger.writememory() + return self.limitreached('memorymax') + memlimits.append(self.memorymax) + if self.memory is not None: + if self.memory <= 0: + if logger: + logger.writememory() + return self.limitreached('memory') + memlimits.append(curmem + self.memory) + self.memory_at_start = curmem + + curtime = now() + timelimits = [] + if self.endtime is not None: + if curtime >= self.endtime: + return self.limitreached('timemax') + timelimits.append(self.endtime - curtime) + if self.time is not None: + if self.time <= 0.0: + return self.limitreached('time') + timelimits.append(self.time) + self.time_at_start = curtime + + try: + self.do_start() + except error, e: + if logger: + logger.write('%s: disabled by psyco.error:' % ( + self.__class__.__name__), 4) + logger.write(' %s' % str(e), 3) + return 0 + + if memlimits: + self.memlimits_args = (time.sleep, (self.MemoryTimerResolution,), + self.check_memory, (min(memlimits),)) + self.alarms.append(_psyco.alarm(*self.memlimits_args)) + if timelimits: + self.alarms.append(_psyco.alarm(time.sleep, (min(timelimits),), + self.time_out)) + return 1 + + def stop(self): + for alarm in self.alarms: + alarm.stop(0) + for alarm in self.alarms: + alarm.stop(1) # wait for parallel threads to stop + del self.alarms[:] + if self.time is not None: + self.time -= now() - self.time_at_start + if self.memory is not None: + self.memory -= _psyco.memory() - self.memory_at_start + + try: + self.do_stop() + except error: + return 0 + return 1 + + def check_memory(self, limit): + if _psyco.memory() < limit: + return self.memlimits_args + go() + + def time_out(self): + self.time = 0.0 + go() + + def limitreached(self, limitname): + try: + profilers.remove(self) + except ValueError: + pass + if logger: + logger.write('%s: disabled (%s limit reached)' % ( + self.__class__.__name__, limitname), 4) + return 0 + + +class FullCompiler(Profiler): + + def do_start(self): + _psyco.profiling('f') + + def do_stop(self): + _psyco.profiling('.') + + +class RunOnly(Profiler): + + def do_start(self): + _psyco.profiling('n') + + def do_stop(self): + _psyco.profiling('.') + + +class ChargeProfiler(Profiler): + + def __init__(self, watermark, parentframe): + self.watermark = watermark + self.parent2 = parentframe * 2.0 + self.lock = thread.allocate_lock() + + def init_charges(self): + _psyco.statwrite(watermark = self.watermark, + parent2 = self.parent2) + + def do_stop(self): + _psyco.profiling('.') + _psyco.statwrite(callback = None) + + +class ActiveProfiler(ChargeProfiler): + + def active_start(self): + _psyco.profiling('p') + + def do_start(self): + self.init_charges() + self.active_start() + _psyco.statwrite(callback = self.charge_callback) + + def charge_callback(self, frame, charge): + tag(frame.f_code, frame.f_globals) + + +class PassiveProfiler(ChargeProfiler): + + initial_charge_unit = _psyco.statread('unit') + reset_stats_after = 120 # half-lives (maximum 200!) + reset_limit = initial_charge_unit * (2.0 ** reset_stats_after) + + def __init__(self, watermark, halflife, pollfreq, parentframe): + ChargeProfiler.__init__(self, watermark, parentframe) + self.pollfreq = pollfreq + # self.progress is slightly more than 1.0, and computed so that + # do_profile() will double the change_unit every 'halflife' seconds. + self.progress = 2.0 ** (1.0 / (halflife * pollfreq)) + + def reset(self): + _psyco.statwrite(unit = self.initial_charge_unit, callback = None) + _psyco.statreset() + if logger: + logger.write("%s: resetting stats" % self.__class__.__name__, 1) + + def passive_start(self): + self.passivealarm_args = (time.sleep, (1.0 / self.pollfreq,), + self.do_profile) + self.alarms.append(_psyco.alarm(*self.passivealarm_args)) + + def do_start(self): + tag2bind() + self.init_charges() + self.passive_start() + + def do_profile(self): + _psyco.statcollect() + if logger: + logger.dumpcharges() + nunit = _psyco.statread('unit') * self.progress + if nunit > self.reset_limit: + self.reset() + else: + _psyco.statwrite(unit = nunit, callback = self.charge_callback) + return self.passivealarm_args + + def charge_callback(self, frame, charge): + trytobind(frame.f_code, frame.f_globals) + + +class ActivePassiveProfiler(PassiveProfiler, ActiveProfiler): + + def do_start(self): + self.init_charges() + self.active_start() + self.passive_start() + + def charge_callback(self, frame, charge): + tag(frame.f_code, frame.f_globals) + + + +# +# we register our own version of sys.settrace(), sys.setprofile() +# and thread.start_new_thread(). +# + +def psyco_settrace(*args, **kw): + "This is the Psyco-aware version of sys.settrace()." + result = original_settrace(*args, **kw) + go() + return result + +def psyco_setprofile(*args, **kw): + "This is the Psyco-aware version of sys.setprofile()." + result = original_setprofile(*args, **kw) + go() + return result + +def psyco_thread_stub(callable, args, kw): + _psyco.statcollect() + if kw is None: + return callable(*args) + else: + return callable(*args, **kw) + +def psyco_start_new_thread(callable, args, kw=None): + "This is the Psyco-aware version of thread.start_new_thread()." + return original_start_new_thread(psyco_thread_stub, (callable, args, kw)) + +original_settrace = sys.settrace +original_setprofile = sys.setprofile +original_start_new_thread = thread.start_new_thread +sys.settrace = psyco_settrace +sys.setprofile = psyco_setprofile +if PYTHON_SUPPORT: + thread.start_new_thread = psyco_start_new_thread + # hack to patch threading._start_new_thread if the module is + # already loaded + if (sys.modules.has_key('threading') and + hasattr(sys.modules['threading'], '_start_new_thread')): + sys.modules['threading']._start_new_thread = psyco_start_new_thread diff --git a/thirdparty/python25/Lib/site-packages/psyco/support.py b/thirdparty/python25/Lib/site-packages/psyco/support.py new file mode 100644 index 000000000..b5b0e03d8 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/psyco/support.py @@ -0,0 +1,196 @@ +########################################################################### +# +# Psyco general support module. +# Copyright (C) 2001-2002 Armin Rigo et.al. + +"""Psyco general support module. + +For internal use. +""" +########################################################################### + +import sys, _psyco, __builtin__ + +error = _psyco.error +class warning(Warning): + pass + +_psyco.NoLocalsWarning = warning + +def warn(msg): + from warnings import warn + warn(msg, warning, stacklevel=2) + +# +# Version checks +# +__version__ = 0x010502f0 +if _psyco.PSYVER != __version__: + raise error, "version mismatch between Psyco parts, reinstall it" + +version_info = (__version__ >> 24, + (__version__ >> 16) & 0xff, + (__version__ >> 8) & 0xff, + {0xa0: 'alpha', + 0xb0: 'beta', + 0xc0: 'candidate', + 0xf0: 'final'}[__version__ & 0xf0], + __version__ & 0xf) + + +VERSION_LIMITS = [0x02010000, # 2.1 + 0x02020000, # 2.2 + 0x02020200, # 2.2.2 + 0x02030000, # 2.3 + 0x02040000] # 2.4 + +if ([v for v in VERSION_LIMITS if v <= sys.hexversion] != + [v for v in VERSION_LIMITS if v <= _psyco.PYVER ]): + if sys.hexversion < VERSION_LIMITS[0]: + warn("Psyco requires Python version 2.1 or later") + else: + warn("Psyco version does not match Python version. " + "Psyco must be updated or recompiled") + +PYTHON_SUPPORT = hasattr(_psyco, 'turbo_code') + + +if hasattr(_psyco, 'ALL_CHECKS') and hasattr(_psyco, 'VERBOSE_LEVEL'): + print >> sys.stderr, ('psyco: running in debugging mode on %s' % + _psyco.PROCESSOR) + + +########################################################################### +# sys._getframe() gives strange results on a mixed Psyco- and Python-style +# stack frame. Psyco provides a replacement that partially emulates Python +# frames from Psyco frames. The new sys._getframe() may return objects of +# a custom "Psyco frame" type, which with Python >=2.2 is a subtype of the +# normal frame type. +# +# The same problems require some other built-in functions to be replaced +# as well. Note that the local variables are not available in any +# dictionary with Psyco. + + +class Frame: + pass + + +class PythonFrame(Frame): + + def __init__(self, frame): + self.__dict__.update({ + '_frame': frame, + }) + + def __getattr__(self, attr): + if attr == 'f_back': + try: + result = embedframe(_psyco.getframe(self._frame)) + except ValueError: + result = None + except error: + warn("f_back is skipping dead Psyco frames") + result = self._frame.f_back + self.__dict__['f_back'] = result + return result + else: + return getattr(self._frame, attr) + + def __setattr__(self, attr, value): + setattr(self._frame, attr, value) + + def __delattr__(self, attr): + delattr(self._frame, attr) + + +class PsycoFrame(Frame): + + def __init__(self, tag): + self.__dict__.update({ + '_tag' : tag, + 'f_code' : tag[0], + 'f_globals': tag[1], + }) + + def __getattr__(self, attr): + if attr == 'f_back': + try: + result = embedframe(_psyco.getframe(self._tag)) + except ValueError: + result = None + elif attr == 'f_lineno': + result = self.f_code.co_firstlineno # better than nothing + elif attr == 'f_builtins': + result = self.f_globals['__builtins__'] + elif attr == 'f_restricted': + result = self.f_builtins is not __builtins__ + elif attr == 'f_locals': + raise AttributeError, ("local variables of functions run by Psyco " + "cannot be accessed in any way, sorry") + else: + raise AttributeError, ("emulated Psyco frames have " + "no '%s' attribute" % attr) + self.__dict__[attr] = result + return result + + def __setattr__(self, attr, value): + raise AttributeError, "Psyco frame objects are read-only" + + def __delattr__(self, attr): + if attr == 'f_trace': + # for bdb which relies on CPython frames exhibiting a slightly + # buggy behavior: you can 'del f.f_trace' as often as you like + # even without having set it previously. + return + raise AttributeError, "Psyco frame objects are read-only" + + +def embedframe(result): + if type(result) is type(()): + return PsycoFrame(result) + else: + return PythonFrame(result) + +def _getframe(depth=0): + """Return a frame object from the call stack. This is a replacement for +sys._getframe() which is aware of Psyco frames. + +The returned objects are instances of either PythonFrame or PsycoFrame +instead of being real Python-level frame object, so that they can emulate +the common attributes of frame objects. + +The original sys._getframe() ignoring Psyco frames altogether is stored in +psyco._getrealframe(). See also psyco._getemulframe().""" + # 'depth+1' to account for this _getframe() Python function + return embedframe(_psyco.getframe(depth+1)) + +def _getemulframe(depth=0): + """As _getframe(), but the returned objects are real Python frame objects +emulating Psyco frames. Some of their attributes can be wrong or missing, +however.""" + # 'depth+1' to account for this _getemulframe() Python function + return _psyco.getframe(depth+1, 1) + +def patch(name, module=__builtin__): + f = getattr(_psyco, name) + org = getattr(module, name) + if org is not f: + setattr(module, name, f) + setattr(_psyco, 'original_' + name, org) + +_getrealframe = sys._getframe +sys._getframe = _getframe +patch('globals') +patch('eval') +patch('execfile') +patch('locals') +patch('vars') +patch('dir') +patch('input') +_psyco.original_raw_input = raw_input +__builtin__.__in_psyco__ = 0==1 # False + +if hasattr(_psyco, 'compact'): + import kdictproxy + _psyco.compactdictproxy = kdictproxy.compactdictproxy diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/Pythonwin.exe b/thirdparty/python25/Lib/site-packages/pythonwin/Pythonwin.exe new file mode 100644 index 0000000000000000000000000000000000000000..8f990c3dadb039070baf9be6d297f27acf2bc70f GIT binary patch literal 15360 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 and sys.argv[1][0]!='/': + self.timerAppName = sys.argv[1] + self.argOff = 1 + + def PreDoModal(self): +# sys.stderr = sys.stdout + pass + + def ProcessArgs(self, args): + for arg in args: + if arg=="/now": + self.OnOK() + + def OnInitDialog(self): + win32ui.SetProfileFileName('pytimer.ini') + self.title = win32ui.GetProfileVal(self.timerAppName, "Title", "Remote System Timer") + self.buildTimer = win32ui.GetProfileVal(self.timerAppName, "Timer", "EachMinuteIntervaler()") + self.doWork = win32ui.GetProfileVal(self.timerAppName, "Work", "DoDemoWork()") + # replace "\n" with real \n. + self.doWork = regsub.gsub('\\\\n','\n', self.doWork) + dlgappcore.AppDialog.OnInitDialog(self) + + self.SetWindowText(self.title) + self.prompt1 = self.GetDlgItem(win32ui.IDC_PROMPT1) + self.prompt2 = self.GetDlgItem(win32ui.IDC_PROMPT2) + self.prompt3 = self.GetDlgItem(win32ui.IDC_PROMPT3) + self.butOK = self.GetDlgItem(win32con.IDOK) + self.butCancel = self.GetDlgItem(win32con.IDCANCEL) + self.prompt1.SetWindowText("Python Timer App") + self.prompt2.SetWindowText("") + self.prompt3.SetWindowText("") + self.butOK.SetWindowText("Do it now") + self.butCancel.SetWindowText("Close") + + self.timerManager = TimerManager(self) + self.ProcessArgs(sys.argv[self.argOff:]) + self.timerManager.go() + return 1 + + def OnDestroy(self,msg): + dlgappcore.AppDialog.OnDestroy(self, msg) + self.timerManager.stop() + def OnOK(self): + # stop the timer, then restart after setting special boolean + self.timerManager.stop() + self.timerManager.bConnectNow = 1 + self.timerManager.go() + return +# def OnCancel(self): default behaviour - cancel == close. +# return + +class TimerManager: + def __init__(self, dlg): + self.dlg = dlg + self.timerId = None + self.intervaler = eval(self.dlg.buildTimer) + self.bConnectNow = 0 + self.bHaveSetPrompt1 = 0 + def CaptureOutput(self): + self.oldOut = sys.stdout + self.oldErr = sys.stderr + sys.stdout = sys.stderr = self + self.bHaveSetPrompt1 = 0 + def ReleaseOutput(self): + sys.stdout = self.oldOut + sys.stderr = self.oldErr + def write(self, str): + s = string.strip(str) + if len(s): + if self.bHaveSetPrompt1: + dest = self.dlg.prompt3 + else: + dest = self.dlg.prompt1 + self.bHaveSetPrompt1 = 1 + dest.SetWindowText(s) + def go(self): + self.OnTimer(None,None) + def stop(self): + if self.timerId: timer.kill_timer (self.timerId) + self.timerId = None + + def OnTimer(self, id, timeVal): + if id: timer.kill_timer (id) + if self.intervaler.IsTime() or self.bConnectNow : + # do the work. + try: + self.dlg.SetWindowText(self.dlg.title + " - Working...") + self.dlg.butOK.EnableWindow(0) + self.dlg.butCancel.EnableWindow(0) + self.CaptureOutput() + try: + exec(self.dlg.doWork) + print "The last operation completed successfully." + except: + t, v, tb = sys.exc_info() + str = "Failed: %s: %s" % (t, `v`) + print str + self.oldErr.write(str) + tb = None # Prevent cycle + finally: + self.ReleaseOutput() + self.dlg.butOK.EnableWindow() + self.dlg.butCancel.EnableWindow() + self.dlg.SetWindowText(self.dlg.title) + else: + now = time.time() + nextTime = self.intervaler.GetNextTime() + if nextTime: + timeDiffSeconds = nextTime - now + timeDiffMinutes = int(timeDiffSeconds / 60) + timeDiffSeconds = timeDiffSeconds % 60 + timeDiffHours = int(timeDiffMinutes / 60) + timeDiffMinutes = timeDiffMinutes % 60 + self.dlg.prompt1.SetWindowText("Next connection due in %02d:%02d:%02d" % (timeDiffHours,timeDiffMinutes,timeDiffSeconds)) + self.timerId = timer.set_timer (self.intervaler.GetWakeupInterval(), self.OnTimer) + self.bConnectNow = 0 + +class TimerIntervaler: + def __init__(self): + self.nextTime = None + self.wakeUpInterval = 2000 + def GetWakeupInterval(self): + return self.wakeUpInterval + def GetNextTime(self): + return self.nextTime + def IsTime(self): + now = time.time() + if self.nextTime is None: + self.nextTime = self.SetFirstTime(now) + ret = 0 + if now >= self.nextTime: + ret = 1 + self.nextTime = self.SetNextTime(self.nextTime, now) + # do the work. + return ret + +class EachAnyIntervaler(TimerIntervaler): + def __init__(self, timeAt, timePos, timeAdd, wakeUpInterval = None): + TimerIntervaler.__init__(self) + self.timeAt = timeAt + self.timePos = timePos + self.timeAdd = timeAdd + if wakeUpInterval: + self.wakeUpInterval = wakeUpInterval + def SetFirstTime(self, now): + timeTup = time.localtime(now) + lst = [] + for item in timeTup: + lst.append(item) + bAdd = timeTup[self.timePos] > self.timeAt + lst[self.timePos] = self.timeAt + for pos in range(self.timePos+1, 6): + lst[pos]=0 + ret = time.mktime(tuple(lst)) + if (bAdd): + ret = ret + self.timeAdd + return ret; + + def SetNextTime(self, lastTime, now): + return lastTime + self.timeAdd + +class EachMinuteIntervaler(EachAnyIntervaler): + def __init__(self, at=0): + EachAnyIntervaler.__init__(self, at, 5, 60, 2000) + +class EachHourIntervaler(EachAnyIntervaler): + def __init__(self, at=0): + EachAnyIntervaler.__init__(self, at, 4, 3600, 10000) + +class EachDayIntervaler(EachAnyIntervaler): + def __init__(self,at=0): + EachAnyIntervaler.__init__(self, at, 3, 86400, 10000) + +class TimerDialogApp(dlgappcore.DialogApp): + def CreateDialog(self): + return TimerAppDialog() + +def DoDemoWork(): + print "Doing the work..." + print "About to connect" + win32api.MessageBeep(win32con.MB_ICONASTERISK) + win32api.Sleep(2000) + print "Doing something else..." + win32api.MessageBeep(win32con.MB_ICONEXCLAMATION) + win32api.Sleep(2000) + print "More work." + win32api.MessageBeep(win32con.MB_ICONHAND) + win32api.Sleep(2000) + print "The last bit." + win32api.MessageBeep(win32con.MB_OK) + win32api.Sleep(2000) + +app = TimerDialogApp() + +def t(): + t = TimerAppDialog("Test Dialog") + t.DoModal() + return t + +if __name__=='__main__': + import demoutils + demoutils.NeedApp() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/customprint.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/customprint.py new file mode 100644 index 000000000..c38409297 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/customprint.py @@ -0,0 +1,194 @@ +# A demo of an Application object that has some custom print functionality. + +# If you desire, you can also run this from inside Pythonwin, in which +# case it will do the demo inside the Pythonwin environment. + +# This sample was contributed by Roger Burnham. + +from pywin.mfc import docview, dialog, afxres +from pywin.framework import app + +import win32con +import win32ui +import win32api + +PRINTDLGORD = 1538 +IDC_PRINT_MAG_EDIT = 1010 + + +class PrintDemoTemplate(docview.DocTemplate): + def _SetupSharedMenu_(self): + pass + +class PrintDemoView(docview.ScrollView): + + def OnInitialUpdate(self): + ret = self._obj_.OnInitialUpdate() + self.colors = {'Black' : (0x00<<0) + (0x00<<8) + (0x00<<16), + 'Red' : (0xff<<0) + (0x00<<8) + (0x00<<16), + 'Green' : (0x00<<0) + (0xff<<8) + (0x00<<16), + 'Blue' : (0x00<<0) + (0x00<<8) + (0xff<<16), + 'Cyan' : (0x00<<0) + (0xff<<8) + (0xff<<16), + 'Magenta': (0xff<<0) + (0x00<<8) + (0xff<<16), + 'Yellow' : (0xff<<0) + (0xff<<8) + (0x00<<16), + } + self.pens = {} + for name, color in self.colors.items(): + self.pens[name] = win32ui.CreatePen(win32con.PS_SOLID, + 5, color) + self.pen = None + self.size = (128,128) + self.SetScaleToFitSize(self.size) + self.HookCommand(self.OnFilePrint, afxres.ID_FILE_PRINT) + self.HookCommand(self.OnFilePrintPreview, + win32ui.ID_FILE_PRINT_PREVIEW) + return ret + + def OnDraw(self, dc): + oldPen = None + x,y = self.size + delta = 2 + colors = self.colors.keys() + colors.sort() + colors = colors*2 + for color in colors: + if oldPen is None: + oldPen = dc.SelectObject(self.pens[color]) + else: + dc.SelectObject(self.pens[color]) + dc.MoveTo(( delta, delta)) + dc.LineTo((x-delta, delta)) + dc.LineTo((x-delta, y-delta)) + dc.LineTo(( delta, y-delta)) + dc.LineTo(( delta, delta)) + delta = delta + 4 + if x-delta <= 0 or y-delta <= 0: + break + dc.SelectObject(oldPen) + + def OnPrepareDC (self, dc, pInfo): + if dc.IsPrinting(): + mag = self.prtDlg['mag'] + dc.SetMapMode(win32con.MM_ANISOTROPIC); + dc.SetWindowOrg((0, 0)) + dc.SetWindowExt((1, 1)) + dc.SetViewportOrg((0, 0)) + dc.SetViewportExt((mag, mag)) + + def OnPreparePrinting(self, pInfo): + flags = (win32ui.PD_USEDEVMODECOPIES| + win32ui.PD_PAGENUMS| + win32ui.PD_NOPAGENUMS| + win32ui.PD_NOSELECTION) + self.prtDlg = ImagePrintDialog(pInfo, PRINTDLGORD, flags) + pInfo.SetPrintDialog(self.prtDlg) + pInfo.SetMinPage(1) + pInfo.SetMaxPage(1) + pInfo.SetFromPage(1) + pInfo.SetToPage(1) + ret = self.DoPreparePrinting(pInfo) + return ret + + def OnBeginPrinting(self, dc, pInfo): + return self._obj_.OnBeginPrinting(dc, pInfo) + + def OnEndPrinting(self, dc, pInfo): + del self.prtDlg + return self._obj_.OnEndPrinting(dc, pInfo) + + def OnFilePrintPreview(self, *arg): + self._obj_.OnFilePrintPreview() + + def OnFilePrint(self, *arg): + self._obj_.OnFilePrint() + + def OnPrint(self, dc, pInfo): + doc = self.GetDocument() + metrics = dc.GetTextMetrics() + cxChar = metrics['tmAveCharWidth'] + cyChar = metrics['tmHeight'] + left, top, right, bottom = pInfo.GetDraw() + dc.TextOut(0, 2*cyChar, doc.GetTitle()) + top = top + (7*cyChar)/2 + dc.MoveTo(left, top) + dc.LineTo(right, top) + top = top + cyChar + # this seems to have not effect... + # get what I want with the dc.SetWindowOrg calls + pInfo.SetDraw((left, top, right, bottom)) + dc.SetWindowOrg((0, -top)) + + self.OnDraw(dc) + dc.SetTextAlign(win32con.TA_LEFT|win32con.TA_BOTTOM) + + rect = self.GetWindowRect() + rect = self.ScreenToClient(rect) + height = (rect[3]-rect[1]) + dc.SetWindowOrg((0, -(top+height+cyChar))) + dc.MoveTo(left, 0) + dc.LineTo(right, 0) + + x = 0 + y = (3*cyChar)/2 + + dc.TextOut(x, y, doc.GetTitle()) + y = y + cyChar + + +class PrintDemoApp(app.CApp): + def __init__(self): + app.CApp.__init__(self) + + def InitInstance(self): + template = PrintDemoTemplate(None, None, + None, PrintDemoView) + self.AddDocTemplate(template) + self._obj_.InitMDIInstance() + self.LoadMainFrame() + doc = template.OpenDocumentFile(None) + doc.SetTitle('Custom Print Document') + + +class ImagePrintDialog(dialog.PrintDialog): + + sectionPos = 'Image Print Demo' + + def __init__(self, pInfo, dlgID, flags=win32ui.PD_USEDEVMODECOPIES): + dialog.PrintDialog.__init__(self, pInfo, dlgID, flags=flags) + mag = win32ui.GetProfileVal(self.sectionPos, + 'Document Magnification', + 0) + if mag <= 0: + mag = 2 + win32ui.WriteProfileVal(self.sectionPos, + 'Document Magnification', + mag) + + self['mag'] = mag + + def OnInitDialog(self): + self.magCtl = self.GetDlgItem(IDC_PRINT_MAG_EDIT) + self.magCtl.SetWindowText(`self['mag']`) + return dialog.PrintDialog.OnInitDialog(self) + def OnOK(self): + dialog.PrintDialog.OnOK(self) + strMag = self.magCtl.GetWindowText() + try: + self['mag'] = string.atoi(strMag) + except: + pass + win32ui.WriteProfileVal(self.sectionPos, + 'Document Magnification', + self['mag']) + + +if __name__=='__main__': + # Running under Pythonwin + def test(): + template = PrintDemoTemplate(None, None, + None, PrintDemoView) + template.OpenDocumentFile(None) + test() +else: + app = PrintDemoApp() + diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/demoutils.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/demoutils.py new file mode 100644 index 000000000..2f6bf8fad --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/demoutils.py @@ -0,0 +1,52 @@ +# Utilities for the demos + +import sys, win32api, win32con, win32ui + +NotScriptMsg = """\ +This demo program is not designed to be run as a Script, but is +probably used by some other test program. Please try another demo. +""" + +NeedGUIMsg = """\ +This demo program can only be run from inside of Pythonwin + +You must start Pythonwin, and select 'Run' from the toolbar or File menu +""" + + +NeedAppMsg = """\ +This demo program is a 'Pythonwin Application'. + +It is more demo code than an example of Pythonwin's capabilities. + +To run it, you must execute the command: +pythonwin.exe /app "%s" + +Would you like to execute it now? +""" + +def NotAScript(): + import win32ui + win32ui.MessageBox(NotScriptMsg, "Demos") + +def NeedGoodGUI(): + from pywin.framework.app import HaveGoodGUI + rc = HaveGoodGUI() + if not rc: + win32ui.MessageBox(NeedGUIMsg, "Demos") + return rc + +def NeedApp(): + import win32ui + rc = win32ui.MessageBox(NeedAppMsg % sys.argv[0], "Demos", win32con.MB_YESNO) + if rc==win32con.IDYES: + try: + parent = win32ui.GetMainFrame().GetSafeHwnd() + win32api.ShellExecute(parent, None, 'pythonwin.exe', '/app "%s"' % sys.argv[0], None, 1) + except win32api.error, details: + win32ui.MessageBox("Error executing command - %s" % (details), "Demos") + + +if __name__=='__main__': + import demoutils + demoutils.NotAScript() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/dlgappdemo.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/dlgappdemo.py new file mode 100644 index 000000000..454e7fa47 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/dlgappdemo.py @@ -0,0 +1,48 @@ +# dlgappdemo - a demo of a dialog application. +# This is a demonstration of both a custom "application" module, +# and a Python program in a dialog box. +# +# NOTE: You CAN NOT import this module from either PythonWin or Python. +# This module must be specified on the commandline to PythonWin only. +# eg, PythonWin /app dlgappdemo.py + +from pywin.framework import dlgappcore, app +import win32ui +import sys +import regsub + +class TestDialogApp(dlgappcore.DialogApp): + def CreateDialog(self): + return TestAppDialog() + + +class TestAppDialog(dlgappcore.AppDialog): + def __init__(self): + self.edit = None + dlgappcore.AppDialog.__init__(self, win32ui.IDD_LARGE_EDIT) + def OnInitDialog(self): + self.SetWindowText('Test dialog application') + self.edit = self.GetDlgItem(win32ui.IDC_EDIT1) + print "Hello from Python" + print "args are:", + for arg in sys.argv: + print arg + return 1 + + def PreDoModal(self): + sys.stdout = sys.stderr = self + + def write(self, str): + if self.edit: + self.edit.SetSel(-2) + # translate \n to \n\r + self.edit.ReplaceSel(regsub.gsub('\n','\r\n',str)) + else: + win32ui.OutputDebug("dlgapp - no edit control! >>\n%s\n<<\n" % str ) + +app.AppBuilder = TestDialogApp + +if __name__=='__main__': + import demoutils + demoutils.NeedApp() + \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/dojobapp.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/dojobapp.py new file mode 100644 index 000000000..b73f7948c --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/dojobapp.py @@ -0,0 +1,62 @@ +# dojobapp - do a job, show the result in a dialog, and exit. +# +# Very simple - faily minimal dialog based app. +# +# This should be run using the command line: +# pythonwin /app demos\dojobapp.py + +import win32ui +import win32api +import win32con +import sys +from pywin.framework import app, dlgappcore +import string + +class DoJobAppDialog(dlgappcore.AppDialog): + softspace=1 + def __init__(self, appName = ""): + self.appName = appName + dlgappcore.AppDialog.__init__(self, win32ui.IDD_GENERAL_STATUS) + + def PreDoModal(self): + pass + + def ProcessArgs(self, args): + pass + + def OnInitDialog(self): + self.SetWindowText(self.appName) + butCancel = self.GetDlgItem(win32con.IDCANCEL) + butCancel.ShowWindow(win32con.SW_HIDE) + p1 = self.GetDlgItem(win32ui.IDC_PROMPT1) + p2 = self.GetDlgItem(win32ui.IDC_PROMPT2) + + # Do something here! + + p1.SetWindowText("Hello there") + p2.SetWindowText("from the demo") + def OnDestroy(self,msg): + pass +# def OnOK(self): +# pass +# def OnCancel(self): default behaviour - cancel == close. +# return + +class DoJobDialogApp(dlgappcore.DialogApp): + def CreateDialog(self): + return DoJobAppDialog("Do Something") + +class CopyToDialogApp(DoJobDialogApp): + def __init__(self): + DoJobDialogApp.__init__(self) + +app.AppBuilder = DoJobDialogApp + +def t(): + t = DoJobAppDialog("Copy To") + t.DoModal() + return t + +if __name__=='__main__': + import demoutils + demoutils.NeedApp() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/helloapp.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/helloapp.py new file mode 100644 index 000000000..7e7bf703c --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/app/helloapp.py @@ -0,0 +1,44 @@ +## +## helloapp.py +## +## +## A nice, small 'hello world' Pythonwin application. +## NOT an MDI application - just a single, normal, top-level window. +## +## MUST be run with the command line "pythonwin.exe /app helloapp.py" +## (or if you are really keen, rename "pythonwin.exe" to something else, then +## using MSVC or similar, edit the string section in the .EXE to name this file) +## +## Originally by Willy Heineman + + +import win32con +import win32ui +from pywin.mfc import window, dialog, thread, afxres + +# The main frame. +# Does almost nothing at all - doesnt even create a child window! +class HelloWindow(window.Wnd): + def __init__(self): + # The window.Wnd ctor creates a Window object, and places it in + # self._obj_. Note the window object exists, but the window itself + # does not! + window.Wnd.__init__(self, win32ui.CreateWnd()) + + # Now we ask the window object to create the window itself. + self._obj_.CreateWindowEx(win32con.WS_EX_CLIENTEDGE, \ + win32ui.RegisterWndClass(0, 0, win32con.COLOR_WINDOW + 1), \ + 'Hello World!', win32con.WS_OVERLAPPEDWINDOW, \ + (100, 100, 400, 300), None, 0, None) + +# The application object itself. +class HelloApp(thread.WinApp): + + def InitInstance(self): + self.frame = HelloWindow() + self.frame.ShowWindow(win32con.SW_SHOWNORMAL) + # We need to tell MFC what our main frame is. + self.SetMainFrame(self.frame) + +# Now create the application object itself! +app = HelloApp() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/cmdserver.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/cmdserver.py new file mode 100644 index 000000000..0f620378d --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/cmdserver.py @@ -0,0 +1,108 @@ +# cmdserver.py + +# Demo code that is not Pythonwin related, but too good to throw away... + +import win32api +import sys +from pywin.framework import winout + +import thread, sys + +import traceback + +class ThreadWriter: + "Assign an instance to sys.stdout for per-thread printing objects - Courtesy Guido!" + def __init__(self): + "Constructor -- initialize the table of writers" + self.writers = {} + self.origStdOut = None + def register(self, writer): + "Register the writer for the current thread" + self.writers[thread.get_ident()] = writer + if self.origStdOut is None: + self.origStdOut = sys.stdout + sys.stdout = self + + def unregister(self): + "Remove the writer for the current thread, if any" + try: + del self.writers[thread.get_ident()] + except KeyError: + pass + if len(self.writers)==0: + sys.stdout = self.origStdOut + self.origStdOut = None + + def getwriter(self): + "Return the current thread's writer, default sys.stdout" + try: + return self.writers[thread.get_ident()] + except KeyError: + return self.origStdOut + + def write(self, str): + "Write to the current thread's writer, default sys.stdout" + self.getwriter().write(str) + +def Test(): + num=1 + while num<1000: + print 'Hello there no ' + str(num) + win32api.Sleep(50) + num = num + 1 + +class flags: + SERVER_BEST = 0 + SERVER_IMMEDIATE = 1 + SERVER_THREAD = 2 + SERVER_PROCESS = 3 + +def StartServer( cmd, title=None, bCloseOnEnd=0, serverFlags = flags.SERVER_BEST ): + out = winout.WindowOutput( title, None, winout.flags.WQ_IDLE ) + if not title: + title=cmd + out.Create(title) +# ServerThread((out, cmd, title, bCloseOnEnd)) +# out = sys.stdout + thread.start_new_thread( ServerThread, (out, cmd, title, bCloseOnEnd) ) + +def ServerThread(myout, cmd, title, bCloseOnEnd): + try: + writer.register(myout) + print 'Executing "%s"\n' % cmd + bOK = 1 + try: + import __main__ + exec (cmd+'\n', __main__.__dict__) + except: + bOK = 0 + if bOK: + print "Command terminated without errors." + else: + t, v, tb = sys.exc_info() + print t, ': ', v + traceback.print_tb(tb) + tb = None # prevent a cycle + print "Command terminated with an unhandled exception" + writer.unregister() + if bOK and bCloseOnEnd: + myout.frame.DestroyWindow() + + # Unhandled exception of any kind in a thread kills the gui! + except: + t, v, tb = sys.exc_info() + print t, ': ', v + traceback.print_tb(tb) + tb = None + print "Thread failed" + +# assist for reloading (when debugging) - use only 1 tracer object, +# else a large chain of tracer objects will exist. +#try: +# writer +#except NameError: +# writer=ThreadWriter() +if __name__=='__main__': + import demoutils + demoutils.NotAScript() + diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/createwin.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/createwin.py new file mode 100644 index 000000000..a332f24aa --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/createwin.py @@ -0,0 +1,99 @@ +# +# Window creation example +# +# This example creates a minimal "control" that just fills in its +# window with red. To make your own control, subclass Control and +# write your own OnPaint() method. See PyCWnd.HookMessage for what +# the parameters to OnPaint are. +# + +from pywin.mfc import dialog, window +import win32ui +import win32con +import win32api + +class Control(window.Wnd): + """Generic control class""" + def __init__ (self): + window.Wnd.__init__(self, win32ui.CreateWnd ()) + + def OnPaint (self): + dc, paintStruct = self.BeginPaint() + self.DoPaint(dc) + self.EndPaint(paintStruct) + + def DoPaint (self, dc): # Override this! + pass + +class RedBox (Control): + def DoPaint (self, dc): + dc.FillSolidRect (self.GetClientRect(), win32api.RGB(255,0,0)) + + +class RedBoxWithPie (RedBox): + def DoPaint (self, dc): + RedBox.DoPaint(self, dc) + r = self.GetClientRect() + dc.Pie(r[0], r[1], r[2], r[3], 0,0,r[2], r[3]/2) + +def MakeDlgTemplate(): + style = (win32con.DS_MODALFRAME | + win32con.WS_POPUP | + win32con.WS_VISIBLE | + win32con.WS_CAPTION | + win32con.WS_SYSMENU | + win32con.DS_SETFONT) + cs = (win32con.WS_CHILD | + win32con.WS_VISIBLE) + + w = 64 + h = 64 + + dlg = [["Red box", + (0, 0, w, h), + style, + None, + (8, "MS Sans Serif")], + ] + + s = win32con.WS_TABSTOP | cs + + dlg.append([128, + "Cancel", + win32con.IDCANCEL, + (7, h - 18, 50, 14), s | win32con.BS_PUSHBUTTON]) + + return dlg + +class TestDialog(dialog.Dialog): + def OnInitDialog(self): + rc = dialog.Dialog.OnInitDialog(self) + self.redbox = RedBox () + self.redbox.CreateWindow (None, "RedBox", + win32con.WS_CHILD | + win32con.WS_VISIBLE, + (5, 5, 90, 68), + self, 1003) + return rc + +class TestPieDialog(dialog.Dialog): + def OnInitDialog(self): + rc = dialog.Dialog.OnInitDialog(self) + self.control = RedBoxWithPie() + self.control.CreateWindow (None, "RedBox with Pie", + win32con.WS_CHILD | + win32con.WS_VISIBLE, + (5, 5, 90, 68), + self, 1003) + +def demo(modal=0): + d = TestPieDialog (MakeDlgTemplate()) + if modal: + d.DoModal() + else: + d.CreateWindow() + +if __name__=='__main__': + demo(1) + +# II Cor. 12:9 $Header: /home/cvsroot/PyWin32/Pythonwin/pywin/Demos/createwin.py,v 1.1 1999/09/01 23:33:35 mhammond Exp $ diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/demoutils.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/demoutils.py new file mode 100644 index 000000000..3120e6cbe --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/demoutils.py @@ -0,0 +1,54 @@ +# Utilities for the demos + +import sys, win32api, win32con, win32ui + +NotScriptMsg = """\ +This demo program is not designed to be run as a Script, but is +probably used by some other test program. Please try another demo. +""" + +NeedGUIMsg = """\ +This demo program can only be run from inside of Pythonwin + +You must start Pythonwin, and select 'Run' from the toolbar or File menu +""" + + +NeedAppMsg = """\ +This demo program is a 'Pythonwin Application'. + +It is more demo code than an example of Pythonwin's capabilities. + +To run it, you must execute the command: +pythonwin.exe /app "%s" + +Would you like to execute it now? +""" + +def NotAScript(): + import win32ui + win32ui.MessageBox(NotScriptMsg, "Demos") + +def NeedGoodGUI(): + from pywin.framework.app import HaveGoodGUI + rc = HaveGoodGUI() + if not rc: + win32ui.MessageBox(NeedGUIMsg, "Demos") + return rc + +def NeedApp(): + import win32ui + rc = win32ui.MessageBox(NeedAppMsg % sys.argv[0], "Demos", win32con.MB_YESNO) + if rc==win32con.IDYES: + try: + parent = win32ui.GetMainFrame().GetSafeHwnd() + win32api.ShellExecute(parent, None, 'pythonwin.exe', '/app "%s"' % sys.argv[0], None, 1) + except win32api.error, details: + win32ui.MessageBox("Error executing command - %s" % (details), "Demos") + + +from pywin.framework.app import HaveGoodGUI + +if __name__=='__main__': + import demoutils + demoutils.NotAScript() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/dibdemo.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/dibdemo.py new file mode 100644 index 000000000..376749ef3 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/dibdemo.py @@ -0,0 +1,69 @@ +# A demo which creates a view and a frame which displays a PPM format bitmap +# +# This hasnnt been run in a while, as I dont have many of that format around! +import win32ui +import win32con +import win32api +import string + +class DIBView: + def __init__(self, doc, dib): + self.dib = dib + self.view = win32ui.CreateView(doc) + self.width = self.height = 0 + # set up message handlers +# self.view.OnPrepareDC = self.OnPrepareDC + self.view.HookMessage (self.OnSize, win32con.WM_SIZE) + + def OnSize (self, params): + lParam = params[3] + self.width = win32api.LOWORD(lParam) + self.height = win32api.HIWORD(lParam) + + def OnDraw (self, ob, dc): + # set sizes used for "non strecth" mode. + self.view.SetScrollSizes(win32con.MM_TEXT, self.dib.GetSize()) + dibSize = self.dib.GetSize() + dibRect = (0,0,dibSize[0], dibSize[1]) + # stretch BMP. + #self.dib.Paint(dc, (0,0,self.width, self.height),dibRect) + # non stretch. + self.dib.Paint(dc) + +class DIBDemo: + def __init__(self, filename, * bPBM): + # init data members + f = open(filename, 'rb') + dib=win32ui.CreateDIBitmap() + if len(bPBM)>0: + magic=f.readline() + if magic <> "P6\n": + print "The file is not a PBM format file" + raise "Failed" + # check magic? + rowcollist=string.split(f.readline()) + cols=string.atoi(rowcollist[0]) + rows=string.atoi(rowcollist[1]) + f.readline() # whats this one? + dib.LoadPBMData(f,(cols,rows)) + else: + dib.LoadWindowsFormatFile(f) + f.close() + # create doc/view + self.doc = win32ui.CreateDoc() + self.dibView = DIBView( self.doc, dib ) + self.frame = win32ui.CreateMDIFrame() + self.frame.LoadFrame() # this will force OnCreateClient + self.doc.SetTitle ('DIB Demo') + self.frame.ShowWindow() + + # display the sucka + self.frame.ActivateFrame() + + def OnCreateClient( self, createparams, context ): + self.dibView.view.CreateWindow(self.frame) + return 1 + +if __name__=='__main__': + import demoutils + demoutils.NotAScript() \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/dlgtest.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/dlgtest.py new file mode 100644 index 000000000..d295d1f95 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/dlgtest.py @@ -0,0 +1,138 @@ +# A Demo of Pythonwin's Dialog and Property Page support. + +################### +# +# First demo - use the built-in to Pythonwin "Tab Stop" dialog, but +# customise it heavily. +# +# ID's for the tabstop dialog - out test. +# +from win32ui import IDD_SET_TABSTOPS +from win32ui import IDC_EDIT_TABS +from win32ui import IDC_PROMPT_TABS +from win32con import IDOK +from win32con import IDCANCEL + +import win32ui +import win32con + +from pywin.mfc import dialog + +class TestDialog(dialog.Dialog): + def __init__(self, modal=1): + dialog.Dialog.__init__(self, IDD_SET_TABSTOPS) + self.counter=0 + if modal: + self.DoModal() + else: + self.CreateWindow() + + def OnInitDialog(self): + # Set the caption of the dialog itself. + self.SetWindowText("Used to be Tab Stops!") + # Get a child control, remember it, and change its text. + self.edit=self.GetDlgItem(IDC_EDIT_TABS) # the text box. + self.edit.SetWindowText("Test") + # Hook a Windows message for the dialog. + self.edit.HookMessage(self.KillFocus, win32con.WM_KILLFOCUS) + # Get the prompt control, and change its next. + prompt=self.GetDlgItem(IDC_PROMPT_TABS) # the prompt box. + prompt.SetWindowText("Prompt") + # And the same for the button.. + cancel=self.GetDlgItem(IDCANCEL) # the cancel button + cancel.SetWindowText("&Kill me") + + # And just for demonstration purposes, we hook the notify message for the dialog. + # This allows us to be notified when the Edit Control text changes. + self.HookCommand(self.OnNotify, IDC_EDIT_TABS) + + def OnNotify(self, controlid, code): + if code==win32con.EN_CHANGE: + print "Edit text changed!" + return 1 # I handled this, so no need to call defaults! + + # kill focus for the edit box. + # Simply increment the value in the text box. + def KillFocus(self,msg): + self.counter=self.counter+1 + if self.edit != None: + self.edit.SetWindowText(str(self.counter)) + + # Called when the dialog box is terminating... + def OnDestroy(self,msg): + del self.edit + del self.counter + +# A very simply Property Sheet. +# We only make a new class for demonstration purposes. +class TestSheet(dialog.PropertySheet): + def __init__(self, title): + dialog.PropertySheet.__init__(self, title) + self.HookMessage(self.OnActivate, win32con.WM_ACTIVATE) + def OnActivate(self, msg): + pass + +# A very simply Property Page, which will be "owned" by the above +# Property Sheet. +# We create a new class, just so we can hook a control notification. +class TestPage(dialog.PropertyPage): + def OnInitDialog(self): + # We use the HookNotify function to allow Python to respond to + # Windows WM_NOTIFY messages. + # In this case, we are interested in BN_CLICKED messages. + self.HookNotify(self.OnNotify, win32con.BN_CLICKED) + + def OnNotify(self, std, extra): + print "OnNotify", std, extra + +# Some code that actually uses these objects. +def demo(modal = 0): + TestDialog(modal) + + # property sheet/page demo + ps=win32ui.CreatePropertySheet('Property Sheet/Page Demo') + # Create a completely standard PropertyPage. + page1=win32ui.CreatePropertyPage(win32ui.IDD_PROPDEMO1) + # Create our custom property page. + page2=TestPage(win32ui.IDD_PROPDEMO2) + ps.AddPage(page1) + ps.AddPage(page2) + if modal: + ps.DoModal() + else: + style = win32con.WS_SYSMENU|win32con.WS_POPUP|win32con.WS_CAPTION|win32con.DS_MODALFRAME|win32con.WS_VISIBLE + styleex = win32con.WS_EX_DLGMODALFRAME | win32con.WS_EX_PALETTEWINDOW + ps.CreateWindow(win32ui.GetMainFrame(), style, styleex) + + +def test(modal=1): + +# dlg=dialog.Dialog(1010) +# dlg.CreateWindow() +# dlg.EndDialog(0) +# del dlg +# return + # property sheet/page demo + ps=TestSheet('Property Sheet/Page Demo') + page1=win32ui.CreatePropertyPage(win32ui.IDD_PROPDEMO1) + page2=win32ui.CreatePropertyPage(win32ui.IDD_PROPDEMO2) + ps.AddPage(page1) + ps.AddPage(page2) + del page1 + del page2 + if modal: + ps.DoModal() + else: + ps.CreateWindow(win32ui.GetMainFrame()) + return ps + +def d(): + dlg = win32ui.CreateDialog(win32ui.IDD_DEBUGGER) + dlg.datalist.append((win32ui.IDC_DBG_RADIOSTACK, "radio")) + print "data list is ", dlg.datalist + dlg.data['radio']=1 + dlg.DoModal() + print dlg.data['radio'] + +if __name__=='__main__': + demo(1) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/dyndlg.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/dyndlg.py new file mode 100644 index 000000000..4b920f503 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/dyndlg.py @@ -0,0 +1,73 @@ +# dyndlg.py +# contributed by Curt Hagenlocher + +# Dialog Template params: +# Parameter 0 - Window caption +# Parameter 1 - Bounds (rect tuple) +# Parameter 2 - Window style +# Parameter 3 - Extended style +# Parameter 4 - Font tuple +# Parameter 5 - Menu name +# Parameter 6 - Window class +# Dialog item params: +# Parameter 0 - Window class +# Parameter 1 - Text +# Parameter 2 - ID +# Parameter 3 - Bounds +# Parameter 4 - Style +# Parameter 5 - Extended style +# Parameter 6 - Extra data + + +import win32ui +import win32con +from pywin.mfc import dialog, window + +def MakeDlgTemplate(): + style = win32con.DS_MODALFRAME | win32con.WS_POPUP | win32con.WS_VISIBLE | win32con.WS_CAPTION | win32con.WS_SYSMENU | win32con.DS_SETFONT + cs = win32con.WS_CHILD | win32con.WS_VISIBLE + dlg = [ ["Select Warehouse", (0, 0, 177, 93), style, None, (8, "MS Sans Serif")], ] + dlg.append([130, "Current Warehouse:", -1, (7, 7, 69, 9), cs | win32con.SS_LEFT]) + dlg.append([130, "ASTORIA", 128, (16, 17, 99, 7), cs | win32con.SS_LEFT]) + dlg.append([130, "New &Warehouse:", -1, (7, 29, 69, 9), cs | win32con.SS_LEFT]) + s = win32con.WS_TABSTOP | cs +# dlg.append([131, None, 130, (5, 40, 110, 48), +# s | win32con.LBS_NOTIFY | win32con.LBS_SORT | win32con.LBS_NOINTEGRALHEIGHT | win32con.WS_VSCROLL | win32con.WS_BORDER]) + dlg.append(["{8E27C92B-1264-101C-8A2F-040224009C02}", None, 131, (5, 40, 110, 48),win32con.WS_TABSTOP]) + + dlg.append([128, "OK", win32con.IDOK, (124, 5, 50, 14), s | win32con.BS_DEFPUSHBUTTON]) + s = win32con.BS_PUSHBUTTON | s + dlg.append([128, "Cancel", win32con.IDCANCEL, (124, 22, 50, 14), s]) + dlg.append([128, "&Help", 100, (124, 74, 50, 14), s]) + + return dlg + +def test1(): + win32ui.CreateDialogIndirect( MakeDlgTemplate() ).DoModal() + +def test2(): + dialog.Dialog( MakeDlgTemplate() ).DoModal() + +def test3(): + dlg = win32ui.LoadDialogResource(win32ui.IDD_SET_TABSTOPS) + dlg[0][0] = 'New Dialog Title' + dlg[0][1] = (80, 20, 161, 60) + dlg[1][1] = '&Confusion:' + cs = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.WS_TABSTOP | win32con.BS_PUSHBUTTON + dlg.append([128, "&Help", 100, (111, 41, 40, 14), cs]) + dialog.Dialog( dlg ).DoModal() + +def test4(): + page1=dialog.PropertyPage(win32ui.LoadDialogResource(win32ui.IDD_PROPDEMO1)) + page2=dialog.PropertyPage(win32ui.LoadDialogResource(win32ui.IDD_PROPDEMO2)) + ps=dialog.PropertySheet('Property Sheet/Page Demo', None, [page1, page2]) + ps.DoModal() + +def testall(): + test1() + test2() + test3() + test4() + +if __name__=='__main__': + testall() \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/fontdemo.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/fontdemo.py new file mode 100644 index 000000000..f99569fd0 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/fontdemo.py @@ -0,0 +1,79 @@ +# Demo of Generic document windows, DC, and Font usage +# by Dave Brennan (brennan@hal.com) + +# usage examples: + +# >>> from fontdemo import * +# >>> d = FontDemo('Hello, Python') +# >>> f1 = { 'name':'Arial', 'height':36, 'weight':win32con.FW_BOLD} +# >>> d.SetFont(f1) +# >>> f2 = {'name':'Courier New', 'height':24, 'italic':1} +# >>> d.SetFont (f2) + +import win32ui +import win32con +import win32api + +from pywin.mfc import docview + + +# font is a dictionary in which the following elements matter: +# (the best matching font to supplied parameters is returned) +# name string name of the font as known by Windows +# size point size of font in logical units +# weight weight of font (win32con.FW_NORMAL, win32con.FW_BOLD) +# italic boolean; true if set to anything but None +# underline boolean; true if set to anything but None + +class FontView(docview.ScrollView): + def __init__(self, doc, text = 'Python Rules!', font_spec = {'name':'Arial', 'height':42}): + docview.ScrollView.__init__(self, doc) + self.font = win32ui.CreateFont (font_spec) + self.text = text + self.width = self.height = 0 + # set up message handlers + self.HookMessage (self.OnSize, win32con.WM_SIZE) + def OnAttachedObjectDeath(self): + docview.ScrollView.OnAttachedObjectDeath(self) + del self.font + + def SetFont (self, new_font): + # Change font on the fly + self.font = win32ui.CreateFont (new_font) + # redraw the entire client window + selfInvalidateRect (None) + def OnSize (self, params): + lParam = params[3] + self.width = win32api.LOWORD(lParam) + self.height = win32api.HIWORD(lParam) + + def OnPrepareDC (self, dc, printinfo): + # Set up the DC for forthcoming OnDraw call + self.SetScrollSizes(win32con.MM_TEXT, (100,100)) + dc.SetTextColor (win32api.RGB(0,0,255)) + dc.SetBkColor (win32api.GetSysColor (win32con.COLOR_WINDOW)) + dc.SelectObject (self.font) + dc.SetTextAlign (win32con.TA_CENTER | win32con.TA_BASELINE) + + def OnDraw (self, dc): + if (self.width == 0 and self.height == 0): + left, top, right, bottom = self.GetClientRect() + self.width = right - left + self.height = bottom - top + x, y = self.width / 2, self.height / 2 + dc.TextOut (x, y, self.text) + +def FontDemo(): + # create doc/view + template = docview.DocTemplate(win32ui.IDR_PYTHONTYPE, None, None, FontView) + doc=template.OpenDocumentFile(None) + doc.SetTitle ('Font Demo') +# print "template is ", template, "obj is", template._obj_ + template.close() +# print "closed" +# del template + +if __name__=='__main__': + import demoutils + if demoutils.NeedGoodGUI(): + FontDemo() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/guidemo.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/guidemo.py new file mode 100644 index 000000000..b5e0efa03 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/guidemo.py @@ -0,0 +1,68 @@ +# GUI Demo - just a worker script to invoke all the other demo/test scripts. +import win32ui +import __main__ +import sys +import regutil +import win32api + +demos = [ \ +# ('Font', 'import fontdemo;fontdemo.FontDemo()'), + ('Open GL Demo', 'import openGLDemo;openGLDemo.test()'), + ('Threaded GUI', 'import threadedgui;threadedgui.ThreadedDemo()'), + ('Tree View Demo', 'import hiertest;hiertest.demoboth()'), + ('3-Way Splitter Window', 'import splittst;splittst.demo()'), + ('Custom Toolbars and Tooltips', 'import toolbar;toolbar.test()'), + ('Progress Bar', 'import progressbar;progressbar.demo()'), + ('Slider Control', 'import sliderdemo;sliderdemo.demo()'), + ('Dynamic window creation', 'import createwin;createwin.demo()'), + ('Various Dialog demos', 'import dlgtest;dlgtest.demo()'), + ('OCX Control Demo', 'from ocx import ocxtest;ocxtest.demo()'), + ('OCX Serial Port Demo', 'from ocx import ocxserialtest; ocxserialtest.test()'), + ('IE4 Control Demo', 'from ocx import webbrowser; webbrowser.Demo()'), +] + +def demo(): + try: + # seeif I can locate the demo files. + import fontdemo + except ImportError: + # else put the demos direectory on the path (if not already) + try: + instPath = regutil.GetRegistryDefaultValue(regutil.BuildDefaultPythonKey() + "\\InstallPath") + except win32api.error: + print "The InstallPath can not be located, and the Demos directory is not on the path" + instPath="." + + demosDir = win32ui.FullPath(instPath + "\\Demos") + for path in sys.path: + if win32ui.FullPath(path)==demosDir: + break + else: + sys.path.append(demosDir) + import fontdemo + + import sys + if "/go" in sys.argv: + for name, cmd in demos: + try: + exec cmd + except: + print "Demo of %s failed - %s:%s" % (cmd,sys.exc_info()[0], sys.exc_info()[1]) + return + # Otherwise allow the user to select the demo to run + + import pywin.dialogs.list + while 1: + rc = pywin.dialogs.list.SelectFromLists( "Select a Demo", demos, ['Demo Title'] ) + if rc is None: + break + title, cmd = demos[rc] + try: + exec cmd + except: + print "Demo of %s failed - %s:%s" % (title,sys.exc_info()[0], sys.exc_info()[1]) + +if __name__==__main__.__name__: + import demoutils + if demoutils.NeedGoodGUI(): + demo() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/hiertest.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/hiertest.py new file mode 100644 index 000000000..dac582169 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/hiertest.py @@ -0,0 +1,104 @@ +import win32ui +import os +import commctrl + +from pywin.tools import hierlist +from pywin.mfc import docview, window + +# directory listbox +# This has obvious limitations - doesnt track subdirs, etc. Demonstrates +# simple use of Python code for querying the tree as needed. +# Only use strings, and lists of strings (from curdir()) +class DirHierList(hierlist.HierList): + def __init__(self, root, listBoxID = win32ui.IDC_LIST1): + hierlist.HierList.__init__(self, root, win32ui.IDB_HIERFOLDERS, listBoxID) + def GetText(self, item): + return os.path.basename(item) + def GetSubList(self, item): + if os.path.isdir(item): + ret = map(lambda path, base=item: os.path.join(base, path), os.listdir(item)) + else: + ret = None + return ret + # if the item is a dir, it is expandable. + def IsExpandable(self, item): + return os.path.isdir(item) + def GetSelectedBitmapColumn(self, item): + return self.GetBitmapColumn(item)+6 # Use different color for selection + +class TestDocument(docview.Document): + def __init__(self, template): + docview.Document.__init__(self, template) + self.hierlist = hierlist.HierListWithItems(HLIFileDir("\\"), win32ui.IDB_HIERFOLDERS, win32ui.AFX_IDW_PANE_FIRST) + +class HierListView(docview.TreeView): + def OnInitialUpdate(self): + rc = self._obj_.OnInitialUpdate() + self.hierList = self.GetDocument().hierlist + self.hierList.HierInit(self.GetParent()) + self.hierList.SetStyle(commctrl.TVS_HASLINES | commctrl.TVS_LINESATROOT | commctrl.TVS_HASBUTTONS) + return rc + +class HierListFrame(window.MDIChildWnd): + pass + +def GetTestRoot(): + tree1 = ('Tree 1',[('Item 1','Item 1 data'),'Item 2',3]) + tree2 = ('Tree 2',[('Item 2.1','Item 2 data'),'Item 2.2',2.3]) + return ('Root',[tree1,tree2,'Item 3']) + +def demoboth(): + template = docview.DocTemplate(win32ui.IDR_PYTHONTYPE, TestDocument, HierListFrame, HierListView) + template.OpenDocumentFile(None).SetTitle("Hierlist demo") + + demomodeless() + +def demomodeless(): + testList2=DirHierList("\\") + dlg=hierlist.HierDialog('hier list test',testList2) + dlg.CreateWindow() + +def demodlg (): + testList2=DirHierList("\\") + dlg=hierlist.HierDialog('hier list test',testList2) + dlg.DoModal() + +def demo(): + template = docview.DocTemplate(win32ui.IDR_PYTHONTYPE, TestDocument, HierListFrame, HierListView) + template.OpenDocumentFile(None).SetTitle("Hierlist demo") + +# +# Demo/Test for HierList items. +# +# Easy to make a better directory program. +# +class HLIFileDir(hierlist.HierListItem): + def __init__( self, filename ): + self.filename = filename + hierlist.HierListItem.__init__(self) + def GetText(self): + try: + return "%-20s %d bytes" % (os.path.basename(self.filename), os.stat(self.filename)[6]) + except os.error, details: + return "%-20s - %s" % (self.filename, details[1]) + + def IsExpandable(self): + return os.path.isdir(self.filename) + def GetSubList(self): + ret = [] + for newname in os.listdir(self.filename): + if newname not in ['.', '..']: + ret.append( HLIFileDir( os.path.join(self.filename,newname ) ) ) + return ret + + +def demohli(): + template = docview.DocTemplate(win32ui.IDR_PYTHONTYPE, TestDocument, hierlist.HierListFrame, hierlist.HierListView) + template.OpenDocumentFile(None).SetTitle("Hierlist demo") + +if __name__=='__main__': + import demoutils + if demoutils.HaveGoodGUI(): + demoboth() + else: + demodlg() \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/menutest.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/menutest.py new file mode 100644 index 000000000..d89a94b20 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/menutest.py @@ -0,0 +1,12 @@ +# Run this as a python script, to gray "close" off the edit window system menu. +from pywin.framework import interact +import win32con + +if __name__=='__main__': + import demoutils + if demoutils.NeedGoodGUI(): + win=interact.edit.currentView.GetParent() + menu=win.GetSystemMenu() + id=menu.GetMenuItemID(6) + menu.EnableMenuItem(id,win32con.MF_BYCOMMAND|win32con.MF_GRAYED) + print "The interactive window's 'Close' menu item is now disabled." \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/objdoc.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/objdoc.py new file mode 100644 index 000000000..2a2cf532c --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/objdoc.py @@ -0,0 +1,49 @@ +# This is a sample file, and shows the basic framework for using an "Object" based +# document, rather than a "filename" based document. +# This is referenced by the Pythonwin .html documentation. + +# In the example below, the OpenObject() method is used instead of OpenDocumentFile, +# and all the core MFC document open functionality is retained. + +import win32ui +from pywin.mfc import docview + +class object_template (docview.DocTemplate): + def __init__(self): + docview.DocTemplate.__init__(self, None, None, None, object_view) + def OpenObject(self, object): # Use this instead of OpenDocumentFile. + # Look for existing open document + for doc in self.GetDocumentList(): + print "document is ", doc + if doc.object is object: + doc.GetFirstView().ActivateFrame() + return doc + # not found - new one. + doc = object_document(self, object) + frame = self.CreateNewFrame(doc) + doc.OnNewDocument() + doc.SetTitle(str(object)) + self.InitialUpdateFrame(frame, doc) + return doc + +class object_document (docview.Document): + def __init__(self, template, object): + docview.Document.__init__(self, template) + self.object = object + def OnOpenDocument (self, name): + raise error, "Should not be called if template strings set up correctly" + return 0 + +class object_view (docview.EditView): + def OnInitialUpdate (self): + self.ReplaceSel("Object is %s" % `self.GetDocument().object`) + +def demo (): + t = object_template() + d = t.OpenObject(win32ui) + return (t, d) + +if __name__=='__main__': + import demoutils + if demoutils.NeedGoodGUI(): + demo() \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/__init__.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/demoutils.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/demoutils.py new file mode 100644 index 000000000..3120e6cbe --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/demoutils.py @@ -0,0 +1,54 @@ +# Utilities for the demos + +import sys, win32api, win32con, win32ui + +NotScriptMsg = """\ +This demo program is not designed to be run as a Script, but is +probably used by some other test program. Please try another demo. +""" + +NeedGUIMsg = """\ +This demo program can only be run from inside of Pythonwin + +You must start Pythonwin, and select 'Run' from the toolbar or File menu +""" + + +NeedAppMsg = """\ +This demo program is a 'Pythonwin Application'. + +It is more demo code than an example of Pythonwin's capabilities. + +To run it, you must execute the command: +pythonwin.exe /app "%s" + +Would you like to execute it now? +""" + +def NotAScript(): + import win32ui + win32ui.MessageBox(NotScriptMsg, "Demos") + +def NeedGoodGUI(): + from pywin.framework.app import HaveGoodGUI + rc = HaveGoodGUI() + if not rc: + win32ui.MessageBox(NeedGUIMsg, "Demos") + return rc + +def NeedApp(): + import win32ui + rc = win32ui.MessageBox(NeedAppMsg % sys.argv[0], "Demos", win32con.MB_YESNO) + if rc==win32con.IDYES: + try: + parent = win32ui.GetMainFrame().GetSafeHwnd() + win32api.ShellExecute(parent, None, 'pythonwin.exe', '/app "%s"' % sys.argv[0], None, 1) + except win32api.error, details: + win32ui.MessageBox("Error executing command - %s" % (details), "Demos") + + +from pywin.framework.app import HaveGoodGUI + +if __name__=='__main__': + import demoutils + demoutils.NotAScript() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/flash.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/flash.py new file mode 100644 index 000000000..ebf33ecf9 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/flash.py @@ -0,0 +1,84 @@ +# By Bradley Schatz +# simple flash/python application demonstrating bidirectional +# communicaion between flash and python. Click the sphere to see +# behavior. Uses Bounce.swf from FlashBounce.zip, available from +# http://pages.cpsc.ucalgary.ca/~saul/vb_examples/tutorial12/ + +# Update to the path of the .swf file (note it could be a true URL) +flash_url = "c:\\bounce.swf" + +import win32ui, win32con, win32api, regutil +from pywin.mfc import window, activex +from win32com.client import gencache +import sys + +FlashModule = gencache.EnsureModule("{D27CDB6B-AE6D-11CF-96B8-444553540000}", 0, 1, 0) + +if FlashModule is None: + raise ImportError, "Flash does not appear to be installed." + +class MyFlashComponent(activex.Control, FlashModule.ShockwaveFlash): + def __init__(self): + activex.Control.__init__(self) + FlashModule.ShockwaveFlash.__init__(self) + self.x = 50 + self.y = 50 + self.angle = 30 + self.started = 0 + + def OnFSCommand(self, command, args): + print "FSCommend" , command, args + self.x = self.x + 20 + self.y = self.y + 20 + self.angle = self.angle + 20 + if self.x > 200 or self.y > 200: + self.x = 0 + self.y = 0 + if self.angle > 360: + self.angle = 0 + self.SetVariable("xVal", self.x) + self.SetVariable("yVal", self.y) + self.SetVariable("angle", self.angle) + self.TPlay("_root.mikeBall") + + def OnProgress(self, percentDone): + print "PercentDone", percentDone + def OnReadyStateChange(self, newState): + # 0=Loading, 1=Uninitialized, 2=Loaded, 3=Interactive, 4=Complete + print "State", newState + + +class BrowserFrame(window.MDIChildWnd): + def __init__(self, url = None): + if url is None: + self.url = regutil.GetRegisteredHelpFile("Main Python Documentation") + else: + self.url = url + pass # Dont call base class doc/view version... + def Create(self, title, rect = None, parent = None): + style = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.WS_OVERLAPPEDWINDOW + self._obj_ = win32ui.CreateMDIChild() + self._obj_.AttachObject(self) + self._obj_.CreateWindow(None, title, style, rect, parent) + rect = self.GetClientRect() + rect = (0,0,rect[2]-rect[0], rect[3]-rect[1]) + self.ocx = MyFlashComponent() + self.ocx.CreateControl("Flash Player", win32con.WS_VISIBLE | win32con.WS_CHILD, rect, self, 1000) + self.ocx.LoadMovie(0,flash_url) + self.ocx.Play() + self.HookMessage (self.OnSize, win32con.WM_SIZE) + + def OnSize (self, params): + rect = self.GetClientRect() + rect = (0,0,rect[2]-rect[0], rect[3]-rect[1]) + self.ocx.SetWindowPos(0, rect, 0) + +def Demo(): + url = None + if len(sys.argv)>1: + url = win32api.GetFullPathName(sys.argv[1]) + f = BrowserFrame(url) + f.Create("Flash Player") + +if __name__=='__main__': + Demo() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/msoffice.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/msoffice.py new file mode 100644 index 000000000..45023630c --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/msoffice.py @@ -0,0 +1,127 @@ +# This demo uses some of the Microsoft Office components. +# +# It was taken from an MSDN article showing how to embed excel. +# It is not comlpete yet, but it _does_ show an Excel spreadsheet in a frame! +# + +import win32ui, win32uiole, win32con, regutil +from pywin.mfc import window, activex, object, docview +from win32com.client import gencache + +#WordModule = gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}', 1033, 8, 0) +#if WordModule is None: +# raise ImportError, "Microsoft Word version 8 does not appear to be installed." + + +class OleClientItem(object.CmdTarget): + def __init__(self, doc): + object.CmdTarget.__init__(self, win32uiole.CreateOleClientItem(doc)) + + def OnGetItemPosition(self): + # For now return a hard-coded rect. + return (10, 10, 210, 210) + + def OnActivate(self): + # Allow only one inplace activate item per frame + view = self.GetActiveView() + item = self.GetDocument().GetInPlaceActiveItem(view) + if item is not None and item._obj_ != self._obj_: + item.Close() + self._obj_.OnActivate() + + def OnChange(self, oleNotification, dwParam): + self._obj_.OnChange(oleNotification, dwParam) + self.GetDocument().UpdateAllViews(None) + + def OnChangeItemPosition(self, rect): + # During in-place activation CEmbed_ExcelCntrItem::OnChangeItemPosition + # is called by the server to change the position of the in-place + # window. Usually, this is a result of the data in the server + # document changing such that the extent has changed or as a result + # of in-place resizing. + # + # The default here is to call the base class, which will call + # COleClientItem::SetItemRects to move the item + # to the new position. + if not self._obj_.OnChangeItemPosition(self, rect): + return 0 + + # TODO: update any cache you may have of the item's rectangle/extent + return 1 + +class OleDocument(object.CmdTarget): + def __init__(self, template): + object.CmdTarget.__init__(self, win32uiole.CreateOleDocument(template)) + self.EnableCompoundFile() + +class ExcelView(docview.ScrollView): + def OnInitialUpdate(self): + self.HookMessage(self.OnSetFocus, win32con.WM_SETFOCUS) + self.HookMessage (self.OnSize, win32con.WM_SIZE) + + self.SetScrollSizes(win32con.MM_TEXT, (100, 100)) + rc = self._obj_.OnInitialUpdate() + self.EmbedExcel() + return rc + + def EmbedExcel(self): + doc = self.GetDocument() + self.clientItem = OleClientItem(doc) + self.clientItem.CreateNewItem("Excel.Sheet") + self.clientItem.DoVerb(-1, self) + doc.UpdateAllViews(None) + + def OnDraw(self, dc): + doc = self.GetDocument() + pos = doc.GetStartPosition() + clientItem, pos = doc.GetNextItem(pos) + clientItem.Draw(dc, (10, 10, 210, 210) ) + + # Special handling of OnSetFocus and OnSize are required for a container + # when an object is being edited in-place. + def OnSetFocus(self, msg): + item = self.GetDocument().GetInPlaceActiveItem(self) + if item is not None and item.GetItemState()==win32uiole.COleClientItem_activeUIState: + wnd = item.GetInPlaceWindow() + if wnd is not None: + wnd.SetFocus() + return 0 # Dont get the base version called. + return 1 # Call the base version. + + def OnSize (self, params): + item = self.GetDocument().GetInPlaceActiveItem(self) + if item is not None: + item.SetItemRects() + return 1 # do call the base! + +class OleTemplate(docview.DocTemplate): + def __init__(self, resourceId=None, MakeDocument=None, MakeFrame=None, MakeView=None): + if MakeDocument is None: MakeDocument = OleDocument + if MakeView is None: MakeView = ExcelView + docview.DocTemplate.__init__(self, resourceId, MakeDocument, MakeFrame, MakeView) + +class WordFrame(window.MDIChildWnd): + def __init__(self, doc = None): + self._obj_ = win32ui.CreateMDIChild() + self._obj_.AttachObject(self) + # Dont call base class doc/view version... + def Create(self, title, rect = None, parent = None): + style = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.WS_OVERLAPPEDWINDOW + self._obj_.CreateWindow(None, title, style, rect, parent) + + rect = self.GetClientRect() + rect = (0,0,rect[2]-rect[0], rect[3]-rect[1]) + self.ocx = MyWordControl() + self.ocx.CreateControl("Microsoft Word", win32con.WS_VISIBLE | win32con.WS_CHILD, rect, self, 20000) + +def Demo(): + import sys, win32api + docName = None + if len(sys.argv)>1: + docName = win32api.GetFullPathName(sys.argv[1]) + OleTemplate().OpenDocumentFile(None) +# f = WordFrame(docName) +# f.Create("Microsoft Office") + +if __name__=='__main__': + Demo() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/ocxserialtest.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/ocxserialtest.py new file mode 100644 index 000000000..9c1312aaf --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/ocxserialtest.py @@ -0,0 +1,101 @@ +# ocxserialtest.py +# +# Sample that uses the mscomm OCX to talk to a serial +# device. + +# Very simple - queries a modem for ATI responses + +import win32ui, win32uiole +import win32con +from pywin.mfc import dialog, activex +from win32com.client import gencache +import pythoncom + +SERIAL_SETTINGS = '19200,n,8,1' +SERIAL_PORT = 2 + +win32ui.DoWaitCursor(1) +serialModule = gencache.EnsureModule("{648A5603-2C6E-101B-82B6-000000000014}", 0, 1, 1) +win32ui.DoWaitCursor(0) +if serialModule is None: + raise ImportError, "MS COMM Control does not appear to be installed on the PC" + + +def MakeDlgTemplate(): + style = win32con.DS_MODALFRAME | win32con.WS_POPUP \ + | win32con.WS_VISIBLE | win32con.WS_CAPTION \ + | win32con.WS_SYSMENU | win32con.DS_SETFONT + cs = win32con.WS_CHILD | win32con.WS_VISIBLE + dlg = [ ["Very Basic Terminal", + (0, 0, 350, 180), style, None, (8, "MS Sans Serif")], ] + s = win32con.WS_TABSTOP | cs + dlg.append(["RICHEDIT", None, 132, (5, 5, 340, 170),s | win32con.ES_WANTRETURN | win32con.ES_MULTILINE | win32con.ES_AUTOVSCROLL | win32con.WS_VSCROLL]) + return dlg + + +#################################### +# +# Serial Control +# +class MySerialControl(activex.Control, serialModule.MSComm): + def __init__(self, parent): + activex.Control.__init__(self) + serialModule.MSComm.__init__(self) + self.parent = parent + def OnComm(self): + self.parent.OnComm() + +class TestSerDialog(dialog.Dialog): + def __init__(self, *args): + apply( dialog.Dialog.__init__, (self,)+args ) + self.olectl = None + def OnComm(self): + event = self.olectl.CommEvent + if event == serialModule.OnCommConstants.comEvReceive: + self.editwindow.ReplaceSel(self.olectl.Input) + + def OnKey(self, key): + if self.olectl: + self.olectl.Output = chr(key) + + def OnInitDialog(self): + rc = dialog.Dialog.OnInitDialog(self) + self.editwindow = self.GetDlgItem(132) + self.editwindow.HookAllKeyStrokes(self.OnKey) + + self.olectl = MySerialControl(self) + try: + self.olectl.CreateControl("OCX", + win32con.WS_TABSTOP | win32con.WS_VISIBLE, + (7,43,500,300), self._obj_, 131) + except win32ui.error: + self.MessageBox("The Serial Control could not be created") + self.olectl = None + self.EndDialog(win32con.IDCANCEL) + if self.olectl: + self.olectl.Settings = SERIAL_SETTINGS + self.olectl.CommPort = SERIAL_PORT + self.olectl.RThreshold = 1 + try: + self.olectl.PortOpen = 1 + except pythoncom.com_error, details: + print "Could not open the specified serial port - %s" % (details[2][2]) + self.EndDialog(win32con.IDCANCEL) + return rc + + def OnDestroy(self, msg): + if self.olectl: + try: + self.olectl.PortOpen = 0 + except pythoncom.com_error, details: + print "Error closing port - %s" % (details[2][2]) + return dialog.Dialog.OnDestroy(self, msg) + +def test(): + d = TestSerDialog(MakeDlgTemplate() ) + d.DoModal() + +if __name__ == "__main__": + import demoutils + if demoutils.NeedGoodGUI(): + test() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/ocxtest.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/ocxtest.py new file mode 100644 index 000000000..b83a9cbd1 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/ocxtest.py @@ -0,0 +1,186 @@ +# OCX Tester for Pythonwin +# +# This file _is_ ready to run. All that is required is that the OCXs being tested +# are installed on your machine. +# +# The .py files behind the OCXs will be automatically generated and imported. + +from pywin.mfc import dialog, window, activex +import win32ui, win32uiole +import win32con +import os, sys, win32api, glob +from win32com.client import gencache + + +def MakeDlgTemplate(): + style = win32con.DS_MODALFRAME | win32con.WS_POPUP | win32con.WS_VISIBLE | win32con.WS_CAPTION | win32con.WS_SYSMENU | win32con.DS_SETFONT + cs = win32con.WS_CHILD | win32con.WS_VISIBLE + dlg = [ ["OCX Demos", (0, 0, 350, 350), style, None, (8, "MS Sans Serif")], ] + s = win32con.WS_TABSTOP | cs +# dlg.append([131, None, 130, (5, 40, 110, 48), +# s | win32con.LBS_NOTIFY | win32con.LBS_SORT | win32con.LBS_NOINTEGRALHEIGHT | win32con.WS_VSCROLL | win32con.WS_BORDER]) +# dlg.append(["{8E27C92B-1264-101C-8A2F-040224009C02}", None, 131, (5, 40, 110, 48),win32con.WS_TABSTOP]) + + dlg.append([128, "About", win32con.IDOK, (124, 5, 50, 14), s | win32con.BS_DEFPUSHBUTTON]) + s = win32con.BS_PUSHBUTTON | s + dlg.append([128, "Close", win32con.IDCANCEL, (124, 22, 50, 14), s]) + + return dlg + +#################################### +# +# Calendar test code +# + +def GetTestCalendarClass(): + global calendarParentModule + win32ui.DoWaitCursor(1) + calendarParentModule = gencache.EnsureModule("{8E27C92E-1264-101C-8A2F-040224009C02}", 0, 7, 0) + win32ui.DoWaitCursor(0) + if calendarParentModule is None: + return None + + class TestCalDialog(dialog.Dialog): + def OnInitDialog(self): + + class MyCal(activex.Control, calendarParentModule.Calendar): + def OnAfterUpdate(self): + print "OnAfterUpdate" + def OnClick(self): + print "OnClick" + def OnDblClick(self): + print "OnDblClick" + def OnKeyDown(self, KeyCode, Shift): + print "OnKeyDown", KeyCode, Shift + def OnKeyPress(self, KeyAscii): + print "OnKeyPress", KeyAscii + def OnKeyUp(self, KeyCode, Shift): + print "OnKeyUp", KeyCode, Shift + def OnBeforeUpdate(self, Cancel): + print "OnBeforeUpdate", Cancel + def OnNewMonth(self): + print "OnNewMonth" + def OnNewYear(self): + print "OnNewYear" + + rc = dialog.Dialog.OnInitDialog(self) + self.olectl = MyCal() + try: + self.olectl.CreateControl("OCX", win32con.WS_TABSTOP | win32con.WS_VISIBLE, (7,43,500,300), self._obj_, 131) + except win32ui.error: + self.MessageBox("The Calendar Control could not be created") + self.olectl = None + self.EndDialog(win32con.IDCANCEL) + + return rc + def OnOK(self): + self.olectl.AboutBox() + + return TestCalDialog + + +#################################### +# +# Video Control +# +def GetTestVideoModule(): + global videoControlModule, videoControlFileName + win32ui.DoWaitCursor(1) + videoControlModule = gencache.EnsureModule("{05589FA0-C356-11CE-BF01-00AA0055595A}", 0, 2, 0) + win32ui.DoWaitCursor(0) + if videoControlModule is None: + return None + fnames = glob.glob(os.path.join(win32api.GetWindowsDirectory(), "*.avi")) + if not fnames: + print "No AVI files available in system directory" + return None + videoControlFileName = fnames[0] + return videoControlModule + +def GetTestVideoDialogClass(): + if GetTestVideoModule() is None: + return None + class TestVideoDialog(dialog.Dialog): + def OnInitDialog(self): + rc = dialog.Dialog.OnInitDialog(self) + try: + self.olectl = activex.MakeControlInstance(videoControlModule.ActiveMovie) + self.olectl.CreateControl("", win32con.WS_TABSTOP | win32con.WS_VISIBLE, (7,43,500,300), self._obj_, 131) + except win32ui.error: + self.MessageBox("The Video Control could not be created") + self.olectl = None + self.EndDialog(win32con.IDCANCEL) + return + + self.olectl.FileName = videoControlFileName +# self.olectl.Run() + return rc + def OnOK(self): + self.olectl.AboutBox() + return TestVideoDialog + +############### +# +# An OCX in an MDI Frame +# +class OCXFrame(window.MDIChildWnd): + def __init__(self): + pass # Dont call base class doc/view version... + def Create(self, controlClass, title, rect = None, parent = None): + style = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.WS_OVERLAPPEDWINDOW + self._obj_ = win32ui.CreateMDIChild() + self._obj_.AttachObject(self) + self._obj_.CreateWindow(None, title, style, rect, parent) + + rect = self.GetClientRect() + rect = (0,0,rect[2]-rect[0], rect[3]-rect[1]) + self.ocx = controlClass() + self.ocx.CreateControl("", win32con.WS_VISIBLE | win32con.WS_CHILD, rect, self, 1000) + +def MDITest(): + calendarParentModule = gencache.EnsureModule("{8E27C92E-1264-101C-8A2F-040224009C02}", 0, 7, 0) + class MyCal(activex.Control, calendarParentModule.Calendar): + def OnAfterUpdate(self): + print "OnAfterUpdate" + def OnClick(self): + print "OnClick" + + f = OCXFrame() + f.Create(MyCal, "Calendar Test") + + +def test1(): + klass = GetTestCalendarClass() + if klass is None: + print "Can not test the MSAccess Calendar control - it does not appear to be installed" + return + + d = klass(MakeDlgTemplate() ) + d.DoModal() + +def test2(): + klass = GetTestVideoDialogClass() + if klass is None: + print "Can not test the Video OCX - it does not appear to be installed," + print "or no AVI files can be found." + return + d = klass(MakeDlgTemplate() ) + d.DoModal() + d = None + +def test3(): + d = TestCOMMDialog(MakeDlgTemplate() ) + d.DoModal() + d = None + +def testall(): + test1() + test2() + +def demo(): + testall() + +if __name__=='__main__': + import demoutils + if demoutils.NeedGoodGUI(): + testall() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/webbrowser.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/webbrowser.py new file mode 100644 index 000000000..03aaa77d5 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/ocx/webbrowser.py @@ -0,0 +1,54 @@ +# This demo uses the IE4 Web Browser control. + +# It catches an "OnNavigate" event, and updates the frame title. +# (event stuff by Neil Hodgson) + +import win32ui, win32con, win32api, regutil +from pywin.mfc import window, activex +from win32com.client import gencache +import sys + +WebBrowserModule = gencache.EnsureModule("{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}", 0, 1, 1) +if WebBrowserModule is None: + raise ImportError, "IE4 does not appear to be installed." + +class MyWebBrowser(activex.Control, WebBrowserModule.WebBrowser): + def OnBeforeNavigate2(self, pDisp, URL, Flags, TargetFrameName, PostData, Headers, Cancel): + self.GetParent().OnNavigate(URL) + #print "BeforeNavigate2", pDisp, URL, Flags, TargetFrameName, PostData, Headers, Cancel + +class BrowserFrame(window.MDIChildWnd): + def __init__(self, url = None): + if url is None: + self.url = regutil.GetRegisteredHelpFile("Main Python Documentation") + else: + self.url = url + pass # Dont call base class doc/view version... + def Create(self, title, rect = None, parent = None): + style = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.WS_OVERLAPPEDWINDOW + self._obj_ = win32ui.CreateMDIChild() + self._obj_.AttachObject(self) + self._obj_.CreateWindow(None, title, style, rect, parent) + rect = self.GetClientRect() + rect = (0,0,rect[2]-rect[0], rect[3]-rect[1]) + self.ocx = MyWebBrowser() + self.ocx.CreateControl("Web Browser", win32con.WS_VISIBLE | win32con.WS_CHILD, rect, self, 1000) + self.ocx.Navigate(self.url) + self.HookMessage (self.OnSize, win32con.WM_SIZE) + def OnSize (self, params): + rect = self.GetClientRect() + rect = (0,0,rect[2]-rect[0], rect[3]-rect[1]) + self.ocx.SetWindowPos(0, rect, 0) + def OnNavigate(self, url): + title = "Web Browser - %s" % (url,) + self.SetWindowText(title) + +def Demo(): + url = None + if len(sys.argv)>1: + url = win32api.GetFullPathName(sys.argv[1]) + f = BrowserFrame(url) + f.Create("Web Browser") + +if __name__=='__main__': + Demo() \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/openGLDemo.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/openGLDemo.py new file mode 100644 index 000000000..be8d859b9 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/openGLDemo.py @@ -0,0 +1,357 @@ +# Ported from the win32 and MFC OpenGL Samples. + +from pywin.mfc import docview +import sys +try: + from OpenGL.GL import * + from OpenGL.GLU import * +except ImportError: + print "The OpenGL extensions do not appear to be installed." + print "This Pythonwin demo can not run" + sys.exit(1) + +import win32con +import win32ui +import win32api +import timer + +PFD_TYPE_RGBA = 0 +PFD_TYPE_COLORINDEX = 1 +PFD_MAIN_PLANE = 0 +PFD_OVERLAY_PLANE = 1 +PFD_UNDERLAY_PLANE = (-1) +PFD_DOUBLEBUFFER = 0x00000001 +PFD_STEREO = 0x00000002 +PFD_DRAW_TO_WINDOW = 0x00000004 +PFD_DRAW_TO_BITMAP = 0x00000008 +PFD_SUPPORT_GDI = 0x00000010 +PFD_SUPPORT_OPENGL = 0x00000020 +PFD_GENERIC_FORMAT = 0x00000040 +PFD_NEED_PALETTE = 0x00000080 +PFD_NEED_SYSTEM_PALETTE = 0x00000100 +PFD_SWAP_EXCHANGE = 0x00000200 +PFD_SWAP_COPY = 0x00000400 +PFD_SWAP_LAYER_BUFFERS = 0x00000800 +PFD_GENERIC_ACCELERATED = 0x00001000 +PFD_DEPTH_DONTCARE = 0x20000000 +PFD_DOUBLEBUFFER_DONTCARE = 0x40000000 +PFD_STEREO_DONTCARE = 0x80000000 + + +threeto8 = [0, 0111>>1, 0222>>1, 0333>>1, 0444>>1, 0555>>1, 0666>>1, 0377] +twoto8 = [0, 0x55, 0xaa, 0xff] +oneto8 = [0, 255] + +def ComponentFromIndex(i, nbits, shift): + # val = (unsigned char) (i >> shift); + val = (i >> shift) & 0xF; + if nbits==1: + val = val & 0x1 + return oneto8[val] + elif nbits==2: + val = val & 0x3 + return twoto8[val] + elif nbits==3: + val = val & 0x7 + return threeto8[val] + else: + return 0; + +OpenGLViewParent=docview.ScrollView +class OpenGLView(OpenGLViewParent): + def PreCreateWindow(self, cc): + self.HookMessage (self.OnSize, win32con.WM_SIZE) + # An OpenGL window must be created with the following flags and must not + # include CS_PARENTDC for the class style. Refer to SetPixelFormat + # documentation in the "Comments" section for further information. + style = cc[5] + style = style | win32con.WS_CLIPSIBLINGS | win32con.WS_CLIPCHILDREN + cc = cc[0], cc[1], cc[2], cc[3], cc[4], style, cc[6], cc[7], cc[8] + cc = self._obj_.PreCreateWindow(cc) + return cc + + def OnSize (self, params): + lParam = params[3] + cx = win32api.LOWORD(lParam) + cy = win32api.HIWORD(lParam) + glViewport(0, 0, cx, cy) + + if self.oldrect[2] > cx or self.oldrect[3] > cy: + self.RedrawWindow() + + self.OnSizeChange(cx, cy) + + self.oldrect = self.oldrect[0], self.oldrect[1], cx, cy + + def OnInitialUpdate(self): + self.SetScaleToFitSize((100,100)) # or SetScrollSizes() - A Pythonwin requirement + return self._obj_.OnInitialUpdate() +# return rc + + def OnCreate(self, cs): + self.oldrect = self.GetClientRect() + self._InitContexts() + self.Init() + + def OnDestroy(self, msg): + self.Term() + self._DestroyContexts() + return OpenGLViewParent.OnDestroy(self, msg) + + + def OnDraw(self, dc): + self.DrawScene() + + def OnEraseBkgnd(self, dc): + return 1 + + # The OpenGL helpers + def _SetupPixelFormat(self): + dc = self.dc.GetSafeHdc() + pfd = CreatePIXELFORMATDESCRIPTOR() + pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER + pfd.iPixelType = PFD_TYPE_RGBA + pfd.cColorBits = 24 + pfd.cDepthBits = 32 + pfd.iLayerType = PFD_MAIN_PLANE + pixelformat = ChoosePixelFormat(dc, pfd) + SetPixelFormat(dc, pixelformat, pfd) + self._CreateRGBPalette() + + def _CreateRGBPalette(self): + dc = self.dc.GetSafeHdc() + n = GetPixelFormat(dc) + pfd = DescribePixelFormat(dc, n) + if pfd.dwFlags & PFD_NEED_PALETTE: + n = 1 << pfd.cColorBits + pal = [] + for i in range(n): + this = ComponentFromIndex(i, pfd.cRedBits, pfd.cRedShift), \ + ComponentFromIndex(i, pfd.cGreenBits, pfd.cGreenShift), \ + ComponentFromIndex(i, pfd.cBlueBits, pfd.cBlueShift), \ + 0 + pal.append(this) + hpal = win32ui.CreatePalette(pal) + self.dc.SelectPalette(hpal, 0) + self.dc.RealizePalette() + + def _InitContexts(self): + self.dc = self.GetDC() + self._SetupPixelFormat() + hrc = wglCreateContext(self.dc.GetSafeHdc()) + wglMakeCurrent(self.dc.GetSafeHdc(), hrc) + + def _DestroyContexts(self): + hrc = wglGetCurrentContext() + wglMakeCurrent(0, 0) + if hrc: wglDeleteContext(hrc) + + # The methods to support OpenGL + def DrawScene(self): + assert 0, "You must override this method" + + def Init(self): + assert 0, "You must override this method" + + def OnSizeChange(self, cx, cy): + pass + + def Term(self): + pass + + +class TestView(OpenGLView): + + def OnSizeChange(self, right, bottom): + glClearColor( 0.0, 0.0, 0.0, 1.0 ); + glClearDepth( 1.0 ); + glEnable(GL_DEPTH_TEST) + + glMatrixMode( GL_PROJECTION ) + if bottom: + aspect = right / bottom + else: + aspect = 0 # When window created! + glLoadIdentity() + gluPerspective( 45.0, aspect, 3.0, 7.0 ) + glMatrixMode( GL_MODELVIEW ) + + near_plane = 3.0; + far_plane = 7.0; + maxObjectSize = 3.0; + self.radius = near_plane + maxObjectSize/2.0; + + + def Init(self): + pass + + def DrawScene(self): + glClearColor(0.0, 0.0, 0.0, 1.0) + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) + + glPushMatrix() + glTranslatef(0.0, 0.0, -self.radius); + + self._DrawCone() + + self._DrawPyramid() + + glPopMatrix() + glFinish() + + SwapBuffers( wglGetCurrentDC() ) + + def _DrawCone(self): + glColor3f(0.0, 1.0, 0.0) + + glPushMatrix() + glTranslatef(-1.0, 0.0, 0.0); + quadObj = gluNewQuadric(); + gluQuadricDrawStyle(quadObj, GLU_FILL); + gluQuadricNormals(quadObj, GLU_SMOOTH); + gluCylinder(quadObj, 1.0, 0.0, 1.0, 20, 10); +# gluDeleteQuadric(quadObj); + glPopMatrix(); + + def _DrawPyramid(self): + glPushMatrix() + glTranslatef(1.0, 0.0, 0.0) + glBegin(GL_TRIANGLE_FAN) + glColor3f(1.0, 0.0, 0.0) + glVertex3f(0.0, 1.0, 0.0) + glColor3f(0.0, 1.0, 0.0) + glVertex3f(-1.0, 0.0, 0.0) + glColor3f(0.0, 0.0, 1.0) + glVertex3f(0.0, 0.0, 1.0) + glColor3f(0.0, 1.0, 0.0) + glVertex3f(1.0, 0.0, 0.0) + glEnd() + glPopMatrix() + +class CubeView(OpenGLView): + def OnSizeChange(self, right, bottom): + glClearColor( 0.0, 0.0, 0.0, 1.0 ); + glClearDepth( 1.0 ); + glEnable(GL_DEPTH_TEST) + + glMatrixMode( GL_PROJECTION ) + if bottom: + aspect = right / bottom + else: + aspect = 0 # When window created! + glLoadIdentity() + gluPerspective( 45.0, aspect, 3.0, 7.0 ) + glMatrixMode( GL_MODELVIEW ) + + near_plane = 3.0; + far_plane = 7.0; + maxObjectSize = 3.0; + self.radius = near_plane + maxObjectSize/2.0; + + def Init(self): + self.busy = 0 + self.wAngleY = 10.0 + self.wAngleX = 1.0 + self.wAngleZ = 5.0 + self.timerid = timer.set_timer (150, self.OnTimer) + + def OnTimer(self, id, timeVal): + self.DrawScene() + + def Term(self): + timer.kill_timer(self.timerid) + + def DrawScene(self): + if self.busy: return + self.busy = 1 + + glClearColor(0.0, 0.0, 0.0, 1.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glPushMatrix(); + + glTranslatef(0.0, 0.0, -self.radius); + glRotatef(self.wAngleX, 1.0, 0.0, 0.0); + glRotatef(self.wAngleY, 0.0, 1.0, 0.0); + glRotatef(self.wAngleZ, 0.0, 0.0, 1.0); + + self.wAngleX = self.wAngleX + 1.0 + self.wAngleY = self.wAngleY + 10.0 + self.wAngleZ = self.wAngleZ + 5.0; + + + glBegin(GL_QUAD_STRIP); + glColor3f(1.0, 0.0, 1.0); + glVertex3f(-0.5, 0.5, 0.5); + + glColor3f(1.0, 0.0, 0.0); + glVertex3f(-0.5, -0.5, 0.5); + + glColor3f(1.0, 1.0, 1.0); + glVertex3f(0.5, 0.5, 0.5); + + glColor3f(1.0, 1.0, 0.0); + glVertex3f(0.5, -0.5, 0.5); + + glColor3f(0.0, 1.0, 1.0); + glVertex3f(0.5, 0.5, -0.5); + + glColor3f(0.0, 1.0, 0.0); + glVertex3f(0.5, -0.5, -0.5); + + glColor3f(0.0, 0.0, 1.0); + glVertex3f(-0.5, 0.5, -0.5); + + glColor3f(0.0, 0.0, 0.0); + glVertex3f(-0.5, -0.5, -0.5); + + glColor3f(1.0, 0.0, 1.0); + glVertex3f(-0.5, 0.5, 0.5); + + glColor3f(1.0, 0.0, 0.0); + glVertex3f(-0.5, -0.5, 0.5); + + glEnd(); + + glBegin(GL_QUADS); + glColor3f(1.0, 0.0, 1.0); + glVertex3f(-0.5, 0.5, 0.5); + + glColor3f(1.0, 1.0, 1.0); + glVertex3f(0.5, 0.5, 0.5); + + glColor3f(0.0, 1.0, 1.0); + glVertex3f(0.5, 0.5, -0.5); + + glColor3f(0.0, 0.0, 1.0); + glVertex3f(-0.5, 0.5, -0.5); + glEnd(); + + glBegin(GL_QUADS); + glColor3f(1.0, 0.0, 0.0); + glVertex3f(-0.5, -0.5, 0.5); + + glColor3f(1.0, 1.0, 0.0); + glVertex3f(0.5, -0.5, 0.5); + + glColor3f(0.0, 1.0, 0.0); + glVertex3f(0.5, -0.5, -0.5); + + glColor3f(0.0, 0.0, 0.0); + glVertex3f(-0.5, -0.5, -0.5); + glEnd(); + + glPopMatrix(); + + glFinish(); + SwapBuffers(wglGetCurrentDC()); + + self.busy = 0 + +def test(): + template = docview.DocTemplate(None, None, None, CubeView ) +# template = docview.DocTemplate(None, None, None, TestView ) + template.OpenDocumentFile(None) + +if __name__=='__main__': + test() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/progressbar.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/progressbar.py new file mode 100644 index 000000000..5f0b6f895 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/progressbar.py @@ -0,0 +1,91 @@ +# +# Progress bar control example +# +# PyCProgressCtrl encapsulates the MFC CProgressCtrl class. To use it, +# you: +# +# - Create the control with win32ui.CreateProgressCtrl() +# - Create the control window with PyCProgressCtrl.CreateWindow() +# - Initialize the range if you want it to be other than (0, 100) using +# PyCProgressCtrl.SetRange() +# - Either: +# - Set the step size with PyCProgressCtrl.SetStep(), and +# - Increment using PyCProgressCtrl.StepIt() +# or: +# - Set the amount completed using PyCProgressCtrl.SetPos() +# +# Example and progress bar code courtesy of KDL Technologies, Ltd., Hong Kong SAR, China. +# + +from pywin.mfc import dialog +import win32ui +import win32con + +def MakeDlgTemplate(): + style = (win32con.DS_MODALFRAME | + win32con.WS_POPUP | + win32con.WS_VISIBLE | + win32con.WS_CAPTION | + win32con.WS_SYSMENU | + win32con.DS_SETFONT) + cs = (win32con.WS_CHILD | + win32con.WS_VISIBLE) + + w = 215 + h = 36 + + dlg = [["Progress bar control example", + (0, 0, w, h), + style, + None, + (8, "MS Sans Serif")], + ] + + s = win32con.WS_TABSTOP | cs + + dlg.append([128, + "Tick", + win32con.IDOK, + (10, h - 18, 50, 14), s | win32con.BS_DEFPUSHBUTTON]) + + dlg.append([128, + "Cancel", + win32con.IDCANCEL, + (w - 60, h - 18, 50, 14), s | win32con.BS_PUSHBUTTON]) + + return dlg + +class TestDialog(dialog.Dialog): + def OnInitDialog(self): + rc = dialog.Dialog.OnInitDialog(self) + self.pbar = win32ui.CreateProgressCtrl() + self.pbar.CreateWindow (win32con.WS_CHILD | + win32con.WS_VISIBLE, + (10, 10, 310, 24), + self, 1001) + # self.pbar.SetStep (5) + self.progress = 0 + self.pincr = 5 + return rc + + def OnOK(self): + # NB: StepIt wraps at the end if you increment past the upper limit! + # self.pbar.StepIt() + self.progress = self.progress + self.pincr + if self.progress > 100: + self.progress = 100 + if self.progress <= 100: + self.pbar.SetPos(self.progress) + +def demo(modal = 0): + d = TestDialog (MakeDlgTemplate()) + if modal: + d.DoModal() + else: + d.CreateWindow () + +if __name__=='__main__': + demo(1) + +# $Header: /home/cvsroot/PyWin32/Pythonwin/pywin/Demos/progressbar.py,v 1.1 1999/09/01 23:33:35 mhammond Exp $ + diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/sliderdemo.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/sliderdemo.py new file mode 100644 index 000000000..db32bf6a7 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/sliderdemo.py @@ -0,0 +1,49 @@ +# sliderdemo.py +# Demo of the slider control courtesy of Mike Fletcher. + +import win32con, win32ui +from pywin.mfc import dialog + +class MyDialog(dialog.Dialog): + ''' + Example using simple controls + ''' + _dialogstyle = (win32con.WS_MINIMIZEBOX | win32con.WS_DLGFRAME | + win32con.DS_MODALFRAME | win32con.WS_POPUP | win32con.WS_VISIBLE | + win32con.WS_CAPTION | win32con.WS_SYSMENU | win32con.DS_SETFONT ) + _buttonstyle = (win32con.BS_PUSHBUTTON | win32con.WS_TABSTOP | + win32con.WS_CHILD | win32con.WS_VISIBLE) + ### The static template, contains all "normal" dialog items + DIALOGTEMPLATE = [ + # the dialog itself is the first element in the template + ["Example slider", (0, 0, 50, 43), _dialogstyle, None, (8, "MS SansSerif")], + # rest of elements are the controls within the dialog + # standard "Close" button + [128, "Close", win32con.IDCANCEL, (0, 30, 50, 13), _buttonstyle], ] + ### ID of the control to be created during dialog initialisation + IDC_SLIDER = 9500 + def __init__(self ): + dialog.Dialog.__init__(self, self.DIALOGTEMPLATE) + def OnInitDialog(self): + rc = dialog.Dialog.OnInitDialog(self) + # now initialise your controls that you want to create + # programmatically, including those which are OLE controls + # those created directly by win32ui.Create* + # and your "custom controls" which are subclasses/whatever + win32ui.EnableControlContainer() + self.slider = win32ui.CreateSliderCtrl( ) + self.slider.CreateWindow( win32con.WS_TABSTOP | win32con.WS_VISIBLE, + (0,0,100,30), + self._obj_, + self.IDC_SLIDER) + return rc + def OnCancel(self): + print "The slider control is at position", self.slider.GetPos() + self._obj_.OnCancel() +### +def demo(): + dia = MyDialog() + dia.DoModal() + +if __name__ == "__main__": + demo() \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/splittst.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/splittst.py new file mode 100644 index 000000000..682c64fe2 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/splittst.py @@ -0,0 +1,72 @@ +import win32ui +import win32con +import fontdemo +from pywin.mfc import window, docview +import commctrl + +# derive from CMDIChild. This does much work for us. + +class SplitterFrame(window.MDIChildWnd): + def __init__(self): + # call base CreateFrame + self.images = None + window.MDIChildWnd.__init__(self) + + def OnCreateClient(self, cp, context): + splitter = win32ui.CreateSplitter() + doc = context.doc + frame_rect = self.GetWindowRect() + size = ((frame_rect[2] - frame_rect[0]), + (frame_rect[3] - frame_rect[1])/2) + sub_size = (size[0]/2, size[1]) + splitter.CreateStatic (self, 2, 1) + self.v1 = win32ui.CreateEditView(doc) + self.v2 = fontdemo.FontView(doc) + # CListControl view + self.v3 = win32ui.CreateListView(doc) + sub_splitter = win32ui.CreateSplitter() + # pass "splitter" so each view knows how to get to the others + sub_splitter.CreateStatic (splitter, 1, 2) + sub_splitter.CreateView(self.v1, 0, 0, (sub_size)) + sub_splitter.CreateView(self.v2, 0, 1, (0,0)) # size ignored. + splitter.SetRowInfo(0, size[1] ,0) + splitter.CreateView (self.v3, 1, 0, (0,0)) # size ignored. + # Setup items in the imagelist + self.images = win32ui.CreateImageList(32,32,1,5,5) + self.images.Add(win32ui.GetApp().LoadIcon(win32ui.IDR_MAINFRAME)) + self.images.Add(win32ui.GetApp().LoadIcon(win32ui.IDR_PYTHONCONTYPE)) + self.images.Add(win32ui.GetApp().LoadIcon(win32ui.IDR_TEXTTYPE)) + self.v3.SetImageList(self.images, commctrl.LVSIL_NORMAL) + self.v3.InsertItem(0, "Icon 1", 0) + self.v3.InsertItem(0, "Icon 2", 1) + self.v3.InsertItem(0, "Icon 3", 2) +# self.v3.Arrange(commctrl.LVA_DEFAULT) Hmmm - win95 aligns left always??? + return 1 + def OnDestroy(self, msg): + window.MDIChildWnd.OnDestroy(self, msg) + if self.images: + self.images.DeleteImageList() + self.images = None + + def InitialUpdateFrame(self, doc, makeVisible): + self.v1.ReplaceSel("Hello from Edit Window 1") + self.v1.SetModifiedFlag(0) + +class SampleTemplate(docview.DocTemplate): + def __init__(self): + docview.DocTemplate.__init__(self, win32ui.IDR_PYTHONTYPE, None, SplitterFrame, None) + def InitialUpdateFrame(self, frame, doc, makeVisible): +# print "frame is ", frame, frame._obj_ +# print "doc is ", doc, doc._obj_ + self._obj_.InitialUpdateFrame(frame, doc, makeVisible) # call default handler. + frame.InitialUpdateFrame(doc, makeVisible) + +def demo(): + template = SampleTemplate() + doc=template.OpenDocumentFile(None) + doc.SetTitle("Splitter Demo") + +if __name__=='__main__': + import demoutils + if demoutils.NeedGoodGUI(): + demo() \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/threadedgui.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/threadedgui.py new file mode 100644 index 000000000..a2e031c4b --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/threadedgui.py @@ -0,0 +1,171 @@ +# Demo of using just windows, without documents and views. + +# Also demo of a GUI thread, pretty much direct from the MFC C++ sample MTMDI. + +import win32ui +import win32con +import win32api +import timer + +from pywin.mfc import window, docview, thread + + +WM_USER_PREPARE_TO_CLOSE = win32con.WM_USER + 32 + +# font is a dictionary in which the following elements matter: +# (the best matching font to supplied parameters is returned) +# name string name of the font as known by Windows +# size point size of font in logical units +# weight weight of font (win32con.FW_NORMAL, win32con.FW_BOLD) +# italic boolean; true if set to anything but None +# underline boolean; true if set to anything but None + +# This window is a child window of a frame. It is not the frame window itself. +class FontWindow(window.Wnd): + def __init__(self, text = 'Python Rules!'): + window.Wnd.__init__(self) + self.text = text + self.index = 0 + self.incr = 1 + self.width = self.height = 0 + self.ChangeAttributes() + # set up message handlers + + def Create(self, title, style, rect, parent): + classStyle = win32con.CS_HREDRAW | win32con.CS_VREDRAW + className = win32ui.RegisterWndClass(classStyle, 0, win32con.COLOR_WINDOW+1, 0) + self._obj_ = win32ui.CreateWnd() + self._obj_.AttachObject(self) + self._obj_.CreateWindow(className, title, style, rect, parent, win32ui.AFX_IDW_PANE_FIRST) + self.HookMessage (self.OnSize, win32con.WM_SIZE) + self.HookMessage (self.OnPrepareToClose, WM_USER_PREPARE_TO_CLOSE) + self.HookMessage (self.OnDestroy, win32con.WM_DESTROY) + self.timerid = timer.set_timer (100, self.OnTimer) + self.InvalidateRect() + + def OnDestroy (self, msg): + timer.kill_timer(self.timerid) + + def OnTimer(self, id, timeVal): + self.index = self.index + self.incr + if self.index > len(self.text): + self.incr = -1 + self.index = len(self.text) + elif self.index < 0: + self.incr = 1 + self.index = 0 + self.InvalidateRect() + + def OnPaint (self): +# print "Paint message from thread", win32api.GetCurrentThreadId() + dc, paintStruct = self.BeginPaint() + self.OnPrepareDC(dc, None) + + if (self.width == 0 and self.height == 0): + left, top, right, bottom = self.GetClientRect() + self.width = right - left + self.height = bottom - top + x, y = self.width / 2, self.height / 2 + dc.TextOut (x, y, self.text[:self.index]) + self.EndPaint(paintStruct) + + def ChangeAttributes(self): + font_spec = {'name':'Arial', 'height':42} + self.font = win32ui.CreateFont (font_spec) + + def OnPrepareToClose(self, params): + self.DestroyWindow() + + def OnSize (self, params): + lParam = params[3] + self.width = win32api.LOWORD(lParam) + self.height = win32api.HIWORD(lParam) + + def OnPrepareDC (self, dc, printinfo): + # Set up the DC for forthcoming OnDraw call + dc.SetTextColor (win32api.RGB(0,0,255)) + dc.SetBkColor (win32api.GetSysColor (win32con.COLOR_WINDOW)) + dc.SelectObject (self.font) + dc.SetTextAlign (win32con.TA_CENTER | win32con.TA_BASELINE) + +class FontFrame(window.MDIChildWnd): + def __init__(self): + pass # Dont call base class doc/view version... + def Create(self, title, rect = None, parent = None): + style = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.WS_OVERLAPPEDWINDOW + self._obj_ = win32ui.CreateMDIChild() + self._obj_.AttachObject(self) + self._obj_.CreateWindow(None, title, style, rect, parent) + rect = self.GetClientRect() + rect = (0,0,rect[2]-rect[0], rect[3]-rect[1]) + self.child = FontWindow("Not threaded") + self.child.Create("FontDemo", win32con.WS_CHILD | win32con.WS_VISIBLE, rect, self) + + +class TestThread(thread.WinThread): + def __init__(self, parentWindow): + self.parentWindow = parentWindow + self.child = None + thread.WinThread.__init__(self) + def InitInstance(self): + rect = self.parentWindow.GetClientRect() + rect = (0,0,rect[2]-rect[0], rect[3]-rect[1]) + self.child = FontWindow() + self.child.Create("FontDemo", win32con.WS_CHILD | win32con.WS_VISIBLE, rect, self.parentWindow) + self.SetMainFrame(self.child) + return thread.WinThread.InitInstance(self) + + def ExitInstance(self): + return 0 + +class ThreadedFontFrame(window.MDIChildWnd): + def __init__(self): + pass # Dont call base class doc/view version... + self.thread = None + def Create(self, title, rect = None, parent = None): + style = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.WS_OVERLAPPEDWINDOW + self._obj_ = win32ui.CreateMDIChild() + self._obj_.CreateWindow(None, title, style, rect, parent) + self._obj_.HookMessage(self.OnDestroy, win32con.WM_DESTROY) + self._obj_.HookMessage (self.OnSize, win32con.WM_SIZE) + + self.thread = TestThread(self) + self.thread.CreateThread() + + def OnSize(self, msg): + pass + + def OnDestroy(self, msg): + win32ui.OutputDebugString("OnDestroy\n") + if self.thread and self.thread.child: + child = self.thread.child + child.SendMessage(WM_USER_PREPARE_TO_CLOSE, 0, 0) + win32ui.OutputDebugString("Destroyed\n") + + +def Demo(): + f = FontFrame() + f.Create("Font Demo") + +def ThreadedDemo(): + rect = win32ui.GetMainFrame().GetMDIClient().GetClientRect() + rect = rect[0], rect[3]*3/4, rect[2]/4, rect[3] + incr = rect[2] + for i in range(4): + if i==0: + f = FontFrame() + title = "Not threaded" + else: + f = ThreadedFontFrame() + title = "Threaded GUI Demo" + f.Create(title, rect) + rect = rect[0] + incr, rect[1], rect[2]+incr, rect[3] + # Givem a chance to start + win32api.Sleep(100) + win32ui.PumpWaitingMessages() + +if __name__=='__main__': + import demoutils + if demoutils.NeedGoodGUI(): + ThreadedDemo() +# Demo() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/toolbar.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/toolbar.py new file mode 100644 index 000000000..0e0880e71 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/Demos/toolbar.py @@ -0,0 +1,85 @@ +# Demo of ToolBars + +# Shows the toolbar control. +# Demos how to make custom tooltips, etc. + +import win32ui +import win32con +import win32api +from pywin.mfc import docview, window, afxres +import commctrl + +class GenericFrame(window.MDIChildWnd): + def OnCreateClient(self, cp, context): + # handlers for toolbar buttons + self.HookCommand (self.OnPrevious, 401) + self.HookCommand (self.OnNext, 402) + self.HookNotify(self.GetTTText, commctrl.TTN_NEEDTEXT) + self.HookNotify(self.GetTTText, commctrl.TTN_NEEDTEXTW) + +# parent = win32ui.GetMainFrame() + parent = self + style = win32con.WS_CHILD | win32con.WS_VISIBLE | \ + afxres.CBRS_SIZE_DYNAMIC | afxres.CBRS_TOP | afxres.CBRS_TOOLTIPS | afxres.CBRS_FLYBY + + buttons = (win32ui.ID_APP_ABOUT,win32ui.ID_VIEW_INTERACTIVE) + bitmap = win32ui.IDB_BROWSER_HIER + tbid = 0xE840 + self.toolbar = tb = win32ui.CreateToolBar (parent, style, tbid) + tb.LoadBitmap(bitmap) + tb.SetButtons(buttons) + + tb.EnableDocking(afxres.CBRS_ALIGN_ANY) + tb.SetWindowText("Test") + parent.EnableDocking(afxres.CBRS_ALIGN_ANY) + parent.DockControlBar(tb) + parent.LoadBarState("ToolbarTest") + window.MDIChildWnd.OnCreateClient(self, cp, context) + return 1 + + def OnDestroy(self, msg): + self.SaveBarState("ToolbarTest") + + def GetTTText(self, std, extra): + (hwndFrom, idFrom, code) = std + text, hinst, flags = extra + if flags & commctrl.TTF_IDISHWND: + return # Not handled + if (idFrom==win32ui.ID_APP_ABOUT): + return 0, ("It works!", idFrom, code) + return None # not handled. + + def GetMessageString(self, id): + if id==win32ui.ID_APP_ABOUT: + return "Dialog Test\nTest" + else: + return self._obj_.GetMessageString(id) + + def OnSize (self, params): + print 'OnSize called with ', params + + def OnNext (self, id, cmd): + print 'OnNext called' + + def OnPrevious (self, id, cmd): + print 'OnPrevious called' + +msg = """\ +This toolbar was dynamically created.\r +\r +The first item's tooltips is provided by Python code.\r +\r +(Dont close the window with the toolbar in a floating state - it may not re-appear!)\r +""" + +def test(): + template = docview.DocTemplate( win32ui.IDR_PYTHONTYPE, None, GenericFrame, docview.EditView) + doc = template.OpenDocumentFile(None) + doc.SetTitle("Toolbar Test") + view = doc.GetFirstView() + view.SetWindowText(msg) + +if __name__=='__main__': + import demoutils + if demoutils.NeedGoodGUI(): + test() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/IDLE.cfg b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/IDLE.cfg new file mode 100644 index 000000000..c724b954a --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/IDLE.cfg @@ -0,0 +1,29 @@ +[General] +# We base this configuration on the default config. +# You can list "Based On" as many times as you like +Based On = default + +[Keys] +# Only list keys different to default. +# Note you may wish to rebind some of the default +# Pythonwin keys to "Beep" or "DoNothing" + +Alt+L = LocateSelectedFile +Ctrl+Q = AppExit + +# Other non-default Pythonwin keys +Alt+A = EditSelectAll +Alt+M = LocateModule + +# Movement +Ctrl+D = GotoEndOfFile + +# Tabs and other indent features +Alt+T = <> +Ctrl+[ = <> +Ctrl+] = <> + +[Keys:Interactive] +Alt+P = <> +Alt+N = <> + diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/__init__.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/__init__.py new file mode 100644 index 000000000..5b2e5bf07 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/__init__.py @@ -0,0 +1,11 @@ +# See if we run in Unicode mode. +# This may be referenced all over the place, so we save it globally. +import win32api, win32con, __builtin__ + +# This doesn't seem to work correctly on NT - see bug 716708 +is_platform_unicode = 0 +#is_platform_unicode = hasattr(__builtin__, "unicode") and win32api.GetVersionEx()[3] == win32con.VER_PLATFORM_WIN32_NT +default_platform_encoding = "mbcs" # Will it ever be necessary to change this? +default_scintilla_encoding = "utf-8" # Scintilla _only_ supports this ATM + +del win32api, win32con, __builtin__ diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/__init__.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/__init__.py new file mode 100644 index 000000000..fe17e953f --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/__init__.py @@ -0,0 +1,113 @@ +import sys + +# Some cruft to deal with the Pythonwin GUI booting up from a non GUI app. +def _MakeDebuggerGUI(): + app.InitInstance() + +isInprocApp = -1 +def _CheckNeedGUI(): + global isInprocApp + if isInprocApp==-1: + import win32ui + isInprocApp = win32ui.GetApp().IsInproc() + if isInprocApp: + # MAY Need it - may already have one + need = sys.modules.has_key("pywin.debugger.dbgpyapp")==0 + else: + need = 0 + if need: + import pywin.framework.app + import dbgpyapp + pywin.framework.app.CreateDefaultGUI(dbgpyapp.DebuggerPythonApp) + + else: + # Check we have the appropriate editor + # No longer necessary! + pass + return need + +# Inject some methods in the top level name-space. +currentDebugger = None # Wipe out any old one on reload. + +def _GetCurrentDebugger(): + global currentDebugger + if currentDebugger is None: + _CheckNeedGUI() + import debugger + currentDebugger = debugger.Debugger() + return currentDebugger + +def GetDebugger(): + # An error here is not nice - as we are probably trying to + # break into the debugger on a Python error, any + # error raised by this is usually silent, and causes + # big problems later! + try: + rc = _GetCurrentDebugger() + rc.GUICheckInit() + return rc + except: + print "Could not create the debugger!" + import traceback + traceback.print_exc() + return None + +def close(): + if currentDebugger is not None: + currentDebugger.close() + +def run(cmd,globals=None, locals=None, start_stepping = 1): + _GetCurrentDebugger().run(cmd, globals,locals, start_stepping) + +def runeval(expression, globals=None, locals=None): + return _GetCurrentDebugger().runeval(expression, globals, locals) + +def runcall(*args): + return apply(_GetCurrentDebugger().runcall, args) + +def set_trace(): + import sys + d = _GetCurrentDebugger() + + if d.frameShutdown: return # App closing + + if d.stopframe != d.botframe: + # If im not "running" + return + + sys.settrace(None) # May be hooked + d.reset() + d.set_trace() + +# "brk" is an alias for "set_trace" ("break" is a reserved word :-( +brk = set_trace + +# Post-Mortem interface + +def post_mortem(t=None): + if t is None: + t = sys.exc_info()[2] # Will be valid if we are called from an except handler. + if t is None: + try: + t = sys.last_traceback + except AttributeError: + print "No traceback can be found from which to perform post-mortem debugging!" + print "No debugging can continue" + return + p = _GetCurrentDebugger() + if p.frameShutdown: return # App closing + # No idea why I need to settrace to None - it should have been reset by now? + sys.settrace(None) + p.reset() + while t.tb_next <> None: t = t.tb_next + p.bAtPostMortem = 1 + p.prep_run(None) + try: + p.interaction(t.tb_frame, t) + finally: + t = None + p.bAtPostMortem = 0 + p.done_run() + +def pm(t=None): + post_mortem(t) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/configui.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/configui.py new file mode 100644 index 000000000..d350769ca --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/configui.py @@ -0,0 +1,30 @@ +from dbgcon import * +from pywin.mfc import dialog + +class DebuggerOptionsPropPage(dialog.PropertyPage): + def __init__(self): + dialog.PropertyPage.__init__(self, win32ui.IDD_PP_DEBUGGER) + + def OnInitDialog(self): + options = self.options = LoadDebuggerOptions() + self.AddDDX(win32ui.IDC_CHECK1, OPT_HIDE) + self[OPT_STOP_EXCEPTIONS] = options[OPT_STOP_EXCEPTIONS] + self.AddDDX(win32ui.IDC_CHECK2, OPT_STOP_EXCEPTIONS) + self[OPT_HIDE] = options[OPT_HIDE] + return dialog.PropertyPage.OnInitDialog(self) + + def OnOK(self): + self.UpdateData() + dirty = 0 + for key, val in self.items(): + if self.options.has_key(key): + if self.options[key] != val: + self.options[key] = val + dirty = 1 + if dirty: + SaveDebuggerOptions(self.options) + # If there is a debugger open, then set its options. + import pywin.debugger + if pywin.debugger.currentDebugger is not None: + pywin.debugger.currentDebugger.options = self.options + return 1 diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/dbgcon.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/dbgcon.py new file mode 100644 index 000000000..beb2996b0 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/dbgcon.py @@ -0,0 +1,28 @@ +# General constants for the debugger + +DBGSTATE_NOT_DEBUGGING = 0 +DBGSTATE_RUNNING = 1 +DBGSTATE_BREAK = 2 +DBGSTATE_QUITTING = 3 # Attempting to back out of the debug session. + +LINESTATE_CURRENT = 0x1 # This line is where we are stopped +LINESTATE_BREAKPOINT = 0x2 # This line is a breakpoint +LINESTATE_CALLSTACK = 0x4 # This line is in the callstack. + +OPT_HIDE = 'hide' +OPT_STOP_EXCEPTIONS = 'stopatexceptions' + +import win32api, win32ui + +def DoGetOption(optsDict, optName, default): + optsDict[optName] = win32ui.GetProfileVal("Debugger Options", optName, default) + +def LoadDebuggerOptions(): + opts = {} + DoGetOption(opts, OPT_HIDE, 0) + DoGetOption(opts, OPT_STOP_EXCEPTIONS, 1) + return opts + +def SaveDebuggerOptions(opts): + for key, val in opts.items(): + win32ui.WriteProfileVal("Debugger Options", key, val) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/dbgpyapp.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/dbgpyapp.py new file mode 100644 index 000000000..7c5b43cd5 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/dbgpyapp.py @@ -0,0 +1,59 @@ +# dbgpyapp.py - Debugger Python application class +# +import win32con +import win32ui +import sys +import string +import os +from pywin.framework import intpyapp + +version = '0.3.0' + +class DebuggerPythonApp(intpyapp.InteractivePythonApp): + def LoadMainFrame(self): + " Create the main applications frame " + self.frame = self.CreateMainFrame() + self.SetMainFrame(self.frame) + self.frame.LoadFrame(win32ui.IDR_DEBUGGER, win32con.WS_OVERLAPPEDWINDOW) + self.frame.DragAcceptFiles() # we can accept these. + self.frame.ShowWindow(win32con.SW_HIDE); + self.frame.UpdateWindow(); + + # but we do rehook, hooking the new code objects. + self.HookCommands() + + def InitInstance(self): + # Use a registry path of "Python\Pythonwin Debugger + win32ui.SetAppName(win32ui.LoadString(win32ui.IDR_DEBUGGER)) + win32ui.SetRegistryKey("Python %s" % (sys.winver,)) + # We _need_ the Scintilla color editor. + # (and we _always_ get it now :-) + + numMRU = win32ui.GetProfileVal("Settings","Recent File List Size", 10) + win32ui.LoadStdProfileSettings(numMRU) + + self.LoadMainFrame() + + # Display the interactive window if the user wants it. + from pywin.framework import interact + interact.CreateInteractiveWindowUserPreference() + + # Load the modules we use internally. + self.LoadSystemModules() + # Load additional module the user may want. + self.LoadUserModules() + +# win32ui.CreateDebuggerThread() + win32ui.EnableControlContainer() + + # Load the ToolBar state near the end of the init process, as + # there may be Toolbar IDs created by the user or other modules. + # By now all these modules should be loaded, so all the toolbar IDs loaded. + try: + self.frame.LoadBarState("ToolbarDefault") + except win32ui.error: + # MFC sucks. It does essentially "GetDlgItem(x)->Something", so if the + # toolbar with ID x does not exist, MFC crashes! Pythonwin has a trap for this + # but I need to investigate more how to prevent it (AFAIK, ensuring all the + # toolbars are created by now _should_ stop it!) + pass diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/debugger.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/debugger.py new file mode 100644 index 000000000..49c4cf18c --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/debugger.py @@ -0,0 +1,968 @@ +# debugger.py + +# A debugger for Pythonwin. Built from pdb. + +# Mark Hammond (MHammond@skippinet.com.au) - Dec 94. + +# usage: +# >>> import pywin.debugger +# >>> pywin.debugger.GetDebugger().run("command") + +import pdb +import bdb +import sys +import string +import os +import types + +import win32ui +import win32api +import win32con +import pywin.docking.DockingBar +from pywin.mfc import dialog, object, afxres, window +from pywin.framework import app, interact, editor, scriptutils +from pywin.framework.editor.color.coloreditor import MARKER_CURRENT, MARKER_BREAKPOINT +from pywin.tools import browser, hierlist +import commctrl +import traceback + +#import win32traceutil + +from dbgcon import * + +error = "pywin.debugger.error" + +def SetInteractiveContext(globs, locs): + if interact.edit is not None and interact.edit.currentView is not None: + interact.edit.currentView.SetContext(globs, locs) + +def _LineStateToMarker(ls): + if ls==LINESTATE_CURRENT: + return MARKER_CURRENT +# elif ls == LINESTATE_CALLSTACK: +# return MARKER_CALLSTACK + return MARKER_BREAKPOINT + +class HierListItem(browser.HLIPythonObject): + pass + +class HierFrameItem(HierListItem): + def __init__(self, frame, debugger): + HierListItem.__init__(self, frame, None) + self.debugger = debugger + def GetText(self): + name = self.myobject.f_code.co_name + if not name or name == '?' : + # See if locals has a '__name__' (ie, a module) + if self.myobject.f_locals.has_key('__name__'): + name = self.myobject.f_locals['__name__'] + " module" + else: + name = '' + + return "%s (%s:%d)" % (name, os.path.split(self.myobject.f_code.co_filename)[1], self.myobject.f_lineno) + def GetBitmapColumn(self): + if self.debugger.curframe is self.myobject: + return 7 + else: + return 8 + def GetSubList(self): + ret = [] + ret.append(HierFrameDict(self.myobject.f_locals, "Locals", 2)) + ret.append(HierFrameDict(self.myobject.f_globals, "Globals", 1)) + return ret + def IsExpandable(self): + return 1 + def TakeDefaultAction(self): + # Set the default frame to be this frame. + self.debugger.set_cur_frame(self.myobject) + return 1 + +class HierFrameDict(browser.HLIDict): + def __init__(self, dict, name, bitmapColumn): + self.bitmapColumn=bitmapColumn + browser.HLIDict.__init__(self, dict, name) + def GetBitmapColumn(self): + return self.bitmapColumn + +class NoStackAvailableItem(HierListItem): + def __init__(self, why): + HierListItem.__init__(self, None, why) + def IsExpandable(self): + return 0 + def GetText(self): + return self.name + def GetBitmapColumn(self): + return 8 + +class HierStackRoot(HierListItem): + def __init__( self, debugger ): + HierListItem.__init__(self, debugger, None) + self.last_stack = [] +## def __del__(self): +## print "HierStackRoot dieing" + def GetSubList(self): + debugger = self.myobject +# print self.debugger.stack, self.debugger.curframe + ret = [] + if debugger.debuggerState==DBGSTATE_BREAK: + stackUse=debugger.stack[:] + stackUse.reverse() + self.last_stack = [] + for frame, lineno in stackUse: + self.last_stack.append( (frame, lineno) ) + if frame is debugger.userbotframe: # Dont bother showing frames below our bottom frame. + break + for frame, lineno in self.last_stack: + ret.append( HierFrameItem( frame, debugger ) ) +## elif debugger.debuggerState==DBGSTATE_NOT_DEBUGGING: +## ret.append(NoStackAvailableItem('')) +## else: +## ret.append(NoStackAvailableItem('')) + return ret + def GetText(self): + return 'root item' + def IsExpandable(self): + return 1 + +class HierListDebugger(hierlist.HierListWithItems): + """ Hier List of stack frames, breakpoints, whatever """ + def __init__(self): + hierlist.HierListWithItems.__init__(self, None, win32ui.IDB_DEBUGGER_HIER, None, win32api.RGB(255,0,0)) + def Setup(self, debugger): + root = HierStackRoot(debugger) + self.AcceptRoot(root) +# def Refresh(self): +# self.Setup() + +class DebuggerWindow(window.Wnd): + def __init__(self, ob): + window.Wnd.__init__(self, ob) + self.debugger = None + + def Init(self, debugger): + self.debugger = debugger + + def GetDefRect(self): + defRect = app.LoadWindowSize("Debugger Windows\\" + self.title) + if defRect[2]-defRect[0]==0: + defRect = 0, 0, 150, 150 + return defRect + + def OnDestroy(self, msg): + newSize = self.GetWindowPlacement()[4] + pywin.framework.app.SaveWindowSize("Debugger Windows\\" + self.title, newSize) + return window.Wnd.OnDestroy(self, msg) + + def OnKeyDown(self, msg): + key = msg[2] + if key in [13, 27, 32]: return 1 + if key in [46,8]: # delete/BS key + self.DeleteSelected() + return 0 + view = scriptutils.GetActiveView() + try: + firer = view.bindings.fire_key_event + except AttributeError: + firer = None + if firer is not None: + return firer(msg) + else: + return 1 + + def DeleteSelected(self): + win32api.MessageBeep() + + def EditSelected(self): + win32api.MessageBeep() + +class DebuggerStackWindow(DebuggerWindow): + title = "Stack" + def __init__(self): + DebuggerWindow.__init__(self, win32ui.CreateTreeCtrl()) + self.list = HierListDebugger() + self.listOK = 0 + def SaveState(self): + self.list.DeleteAllItems() + self.listOK = 0 + def CreateWindow(self, parent): + style = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.WS_BORDER | commctrl.TVS_HASLINES | commctrl.TVS_LINESATROOT | commctrl.TVS_HASBUTTONS + self._obj_.CreateWindow(style, self.GetDefRect(), parent, win32ui.IDC_LIST1) + self.HookMessage(self.OnKeyDown, win32con.WM_KEYDOWN) + self.HookMessage(self.OnKeyDown, win32con.WM_SYSKEYDOWN) + self.list.HierInit (parent, self) + self.listOK = 0 # delayed setup + #self.list.Setup() + + def RespondDebuggerState(self, state): + assert self.debugger is not None, "Init not called" + if not self.listOK: + self.listOK = 1 + self.list.Setup(self.debugger) + else: + self.list.Refresh() + + def RespondDebuggerData(self): + try: + handle = self.GetChildItem(0) + except win32ui.error: + return # No items + while 1: + item = self.list.ItemFromHandle(handle) + col = self.list.GetBitmapColumn(item) + selCol = self.list.GetSelectedBitmapColumn(item) + if selCol is None: selCol = col + if self.list.GetItemImage(handle)!= (col, selCol): + self.list.SetItemImage(handle, col, selCol) + try: + handle = self.GetNextSiblingItem(handle) + except win32ui.error: + break + +class DebuggerListViewWindow(DebuggerWindow): + def __init__(self): + DebuggerWindow.__init__(self, win32ui.CreateListCtrl()) + def CreateWindow(self, parent): + list = self + style = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.WS_BORDER | commctrl.LVS_EDITLABELS | commctrl.LVS_REPORT + self._obj_.CreateWindow(style, self.GetDefRect(), parent, win32ui.IDC_LIST1) + self.HookMessage(self.OnKeyDown, win32con.WM_KEYDOWN) + self.HookMessage(self.OnKeyDown, win32con.WM_SYSKEYDOWN) + list = self + title, width = self.columns[0] + itemDetails = (commctrl.LVCFMT_LEFT, width, title, 0) + list.InsertColumn(0, itemDetails) + col = 1 + for title, width in self.columns[1:]: + col = col + 1 + itemDetails = (commctrl.LVCFMT_LEFT, width, title, 0) + list.InsertColumn(col, itemDetails) + parent.HookNotify( self.OnListEndLabelEdit, commctrl.LVN_ENDLABELEDIT) + parent.HookNotify(self.OnItemRightClick, commctrl.NM_RCLICK) + parent.HookNotify(self.OnItemDoubleClick, commctrl.NM_DBLCLK) + + def RespondDebuggerData(self): + pass + + def RespondDebuggerState(self, state): + pass + + def EditSelected(self): + sel = self.GetNextItem(-1, commctrl.LVNI_SELECTED) + if sel == -1: + return + self.EditLabel(sel) + + def OnKeyDown(self, msg): + key = msg[2] + # If someone starts typing, they probably are trying to edit the text! + if chr(key) in string.uppercase: + self.EditSelected() + return 0 + return DebuggerWindow.OnKeyDown(self, msg) + + def OnItemDoubleClick(self, notify_data, extra): + self.EditSelected() + + def OnItemRightClick(self, notify_data, extra): + # First select the item we right-clicked on. + pt = self.ScreenToClient(win32api.GetCursorPos()) + flags, hItem, subitem = self.HitTest(pt) + if hItem==-1 or commctrl.TVHT_ONITEM & flags==0: + return None + self.SetItemState(hItem, commctrl.LVIS_SELECTED, commctrl.LVIS_SELECTED) + + menu = win32ui.CreatePopupMenu() + menu.AppendMenu(win32con.MF_STRING|win32con.MF_ENABLED,1000, "Edit item") + menu.AppendMenu(win32con.MF_STRING|win32con.MF_ENABLED,1001, "Delete item") + dockbar = self.GetParent() + if dockbar.IsFloating(): + hook_parent = win32ui.GetMainFrame() + else: + hook_parent = self.GetParentFrame() + hook_parent.HookCommand(self.OnEditItem, 1000) + hook_parent.HookCommand(self.OnDeleteItem, 1001) + menu.TrackPopupMenu(win32api.GetCursorPos()) # track at mouse position. + return None + + def OnDeleteItem(self,command, code): + self.DeleteSelected() + def OnEditItem(self, command, code): + self.EditSelected() + +class DebuggerBreakpointsWindow(DebuggerListViewWindow): + title = "Breakpoints" + columns = [ ("Condition", 70), ("Location", 1024)] + + def SaveState(self): + pass + + def OnListEndLabelEdit(self, std, extra): + item = extra[0] + text = item[4] + if text is None: return + + item_id = self.GetItem(item[0])[6] + + from bdb import Breakpoint + for bplist in Breakpoint.bplist.values(): + for bp in bplist: + if id(bp)==item_id: + if string.lower(string.strip(text))=="none": + text = None + bp.cond = text + break + self.RespondDebuggerData() + + def DeleteSelected(self): + try: + num = self.GetNextItem(-1, commctrl.LVNI_SELECTED) + item_id = self.GetItem(num)[6] + from bdb import Breakpoint + for bplist in Breakpoint.bplist.values(): + for bp in bplist: + if id(bp)==item_id: + self.debugger.clear_break(bp.file, bp.line) + break + except win32ui.error: + win32api.MessageBeep() + self.RespondDebuggerData() + + def RespondDebuggerData(self): + list = self + list.DeleteAllItems() + index = -1 + from bdb import Breakpoint + for bplist in Breakpoint.bplist.values(): + for bp in bplist: + baseName = os.path.split(bp.file)[1] + cond = bp.cond + item = index+1, 0, 0, 0, str(cond), 0, id(bp) + index = list.InsertItem(item) + list.SetItemText(index, 1, "%s: %s" % (baseName, bp.line)) + +class DebuggerWatchWindow(DebuggerListViewWindow): + title = "Watch" + columns = [ ("Expression", 70), ("Value", 1024)] + + def CreateWindow(self, parent): + DebuggerListViewWindow.CreateWindow(self, parent) + items = string.split(win32ui.GetProfileVal("Debugger Windows\\" + self.title, "Items", ""), "\t") + index = -1 + for item in items: + if item: + index = self.InsertItem(index+1, item) + self.InsertItem(index+1, "") + + def SaveState(self): + items = [] + for i in range(self.GetItemCount()-1): + items.append(self.GetItemText(i,0)) + win32ui.WriteProfileVal("Debugger Windows\\" + self.title, "Items", string.join(items,"\t")) + return 1 + + def OnListEndLabelEdit(self, std, extra): + item = extra[0] + itemno = item[0] + text = item[4] + if text is None: return + self.SetItemText(itemno, 0, text) + if itemno == self.GetItemCount()-1: + self.InsertItem(itemno+1, "") + self.RespondDebuggerState(self.debugger.debuggerState) + + def DeleteSelected(self): + try: + num = self.GetNextItem(-1, commctrl.LVNI_SELECTED) + if num < self.GetItemCount()-1: # We cant delete the last + self.DeleteItem(num) + except win32ui.error: + win32api.MessageBeep() + + def RespondDebuggerState(self, state): + globs = locs = None + if state==DBGSTATE_BREAK: + if self.debugger.curframe: + globs = self.debugger.curframe.f_globals + locs = self.debugger.curframe.f_locals + elif state==DBGSTATE_NOT_DEBUGGING: + import __main__ + globs = locs = __main__.__dict__ + for i in range(self.GetItemCount()-1): + text = self.GetItemText(i, 0) + if globs is None: + val = "" + else: + try: + val = repr( eval( text, globs, locs) ) + except SyntaxError: + val = "Syntax Error" + except: + t, v, tb = sys.exc_info() + val = string.strip(traceback.format_exception_only(t, v)[0]) + tb = None # prevent a cycle. + self.SetItemText(i, 1, val) + +def CreateDebuggerDialog(parent, klass): + control = klass() + control.CreateWindow(parent) + return control + +DebuggerDialogInfos = ( + (0xe810, DebuggerStackWindow, None), + (0xe811, DebuggerBreakpointsWindow, (10, 10)), + (0xe812, DebuggerWatchWindow, None), + ) + +# Prepare all the "control bars" for this package. +# If control bars are not all loaded when the toolbar-state functions are +# called, things go horribly wrong. +def PrepareControlBars(frame): + style = win32con.WS_CHILD | afxres.CBRS_SIZE_DYNAMIC | afxres.CBRS_TOP | afxres.CBRS_TOOLTIPS | afxres.CBRS_FLYBY + tbd = win32ui.CreateToolBar (frame, style, win32ui.ID_VIEW_TOOLBAR_DBG) + tbd.ModifyStyle(0, commctrl.TBSTYLE_FLAT) + tbd.LoadToolBar(win32ui.IDR_DEBUGGER) + tbd.EnableDocking(afxres.CBRS_ALIGN_ANY) + tbd.SetWindowText("Debugger") + frame.DockControlBar(tbd) + + # and the other windows. + for id, klass, float in DebuggerDialogInfos: + try: + frame.GetControlBar(id) + exists=1 + except win32ui.error: + exists=0 + if exists: continue + bar = pywin.docking.DockingBar.DockingBar() + style=win32con.WS_CHILD | afxres.CBRS_LEFT # don't create visible. + bar.CreateWindow(frame, CreateDebuggerDialog, klass.title, id, style, childCreatorArgs=(klass,)) + bar.SetBarStyle( bar.GetBarStyle()|afxres.CBRS_TOOLTIPS|afxres.CBRS_FLYBY|afxres.CBRS_SIZE_DYNAMIC) + bar.EnableDocking(afxres.CBRS_ALIGN_ANY) + if float is None: + frame.DockControlBar(bar) + else: + frame.FloatControlBar(bar, float, afxres.CBRS_ALIGN_ANY) + + frame.ShowControlBar(bar, 0, 1) + + +SKIP_NONE=0 +SKIP_STEP=1 +SKIP_RUN=2 + +debugger_parent=pdb.Pdb +class Debugger(debugger_parent): + def __init__(self): + self.inited = 0 + self.skipBotFrame = SKIP_NONE + self.userbotframe = None + self.frameShutdown = 0 + self.pumping = 0 + self.debuggerState = DBGSTATE_NOT_DEBUGGING # Assume so, anyway. + self.shownLineCurrent = None # The last filename I highlighted. + self.shownLineCallstack = None # The last filename I highlighted. + self.last_cmd_debugged = "" + self.abortClosed = 0 + self.isInitialBreakpoint = 0 + debugger_parent.__init__(self) + + # See if any break-points have been set in the editor + for doc in editor.editorTemplate.GetDocumentList(): + lineNo = -1 + while 1: + lineNo = doc.MarkerGetNext(lineNo+1, MARKER_BREAKPOINT) + if lineNo <= 0: break + self.set_break(doc.GetPathName(), lineNo) + + self.reset() + self.inForcedGUI = win32ui.GetApp().IsInproc() + self.options = LoadDebuggerOptions() + self.bAtException = self.bAtPostMortem = 0 + + def __del__(self): + self.close() + def close(self, frameShutdown = 0): + # abortClose indicates if we have total shutdown + # (ie, main window is dieing) + if self.pumping: + # Can stop pump here, as it only posts a message, and + # returns immediately. + if not self.StopDebuggerPump(): # User cancelled close. + return 0 + # NOTE - from this point on the close can not be + # stopped - the WM_QUIT message is already in the queue. + self.frameShutdown = frameShutdown + if not self.inited: return 1 + self.inited = 0 + + SetInteractiveContext(None, None) + + frame = win32ui.GetMainFrame() + frame.SaveBarState("ToolbarDebugging") + # Hide the debuger toolbars (as they wont normally form part of the main toolbar state. + for id, klass, float in DebuggerDialogInfos: + try: + tb = frame.GetControlBar(id) + if tb.dialog is not None: # We may never have actually been shown. + tb.dialog.SaveState() + frame.ShowControlBar(tb, 0, 1) + except win32ui.error: + pass + + # Restore the standard toolbar config + try: + frame.LoadBarState("ToolbarDefault") + except win32ui.error, msg: # When once created toolbars no longer exist. + pass +# print msg # LoadBarState failed (with win32 exception!) + self._UnshowCurrentLine() + self.set_quit() + return 1 + + def StopDebuggerPump(self): + assert self.pumping, "Can't stop the debugger pump if Im not pumping!" + # After stopping a pump, I may never return. + if self.GUIAboutToFinishInteract(): + self.pumping = 0 + win32ui.StopDebuggerPump() # Posts a message, so we do return. + return 1 + return 0 + + def get_option(self, option): + """Public interface into debugger options + """ + try: + return self.options[option] + except KeyError: + raise error, "Option %s is not a valid option" % option + + def prep_run(self, cmd): + pass + def done_run(self, cmd=None): + self.RespondDebuggerState(DBGSTATE_NOT_DEBUGGING) + self.close() + def canonic(self, fname): + return string.lower(os.path.abspath(fname)) + def reset(self): + debugger_parent.reset(self) + self.userbotframe = None + self.UpdateAllLineStates() + self._UnshowCurrentLine() + + + def setup(self, f, t): + debugger_parent.setup(self, f, t) + self.bAtException = t is not None + + def set_break(self, filename, lineno, temporary=0, cond = None): + filename = self.canonic(filename) + self.SetLineState(filename, lineno, LINESTATE_BREAKPOINT) + return debugger_parent.set_break(self, filename, lineno, temporary, cond) + + def clear_break(self, filename, lineno): + filename = self.canonic(filename) + self.ResetLineState(filename, lineno, LINESTATE_BREAKPOINT) + return debugger_parent.clear_break(self, filename, lineno) + + def cmdloop(self): + if self.frameShutdown: return # App in the process of closing - never break in! + self.GUIAboutToBreak() + + def print_stack_entry(self, frame): + # We dont want a stack printed - our GUI is better :-) + pass + + def user_return(self, frame, return_value): + # Same as parent, just no "print" + # This function is called when a return trap is set here + frame.f_locals['__return__'] = return_value + self.interaction(frame, None) + + def user_exception(self, frame, (exc_type, exc_value, exc_traceback)): + # This function is called if an exception occurs, + # but only if we are to stop at or just below this level + if self.get_option(OPT_STOP_EXCEPTIONS): + frame.f_locals['__exception__'] = exc_type, exc_value + print "Unhandled exception while debugging..." + traceback.print_exception(exc_type, exc_value, exc_traceback) + self.interaction(frame, exc_traceback) + + def user_line(self, frame): + if frame.f_lineno==0: return + debugger_parent.user_line(self, frame) + + def stop_here(self, frame): + if self.isInitialBreakpoint: + self.isInitialBreakpoint = 0 + self.set_continue() + return 0 + if frame is self.botframe and self.skipBotFrame == SKIP_RUN: + self.set_continue() + return 0 + if frame is self.botframe and self.skipBotFrame == SKIP_STEP: + self.set_step() + return 0 + return debugger_parent.stop_here(self, frame) + + def run(self, cmd,globals=None, locals=None, start_stepping = 1): + if type(cmd) not in [types.StringType, types.CodeType]: + raise TypeError, "Only strings can be run" + self.last_cmd_debugged = cmd + if start_stepping: + self.isInitialBreakpoint = 0 + else: + self.isInitialBreakpoint = 1 + try: + if globals is None: + import __main__ + globals = __main__.__dict__ + if locals is None: + locals = globals + self.reset() + self.prep_run(cmd) + sys.settrace(self.trace_dispatch) + if type(cmd) <> types.CodeType: + cmd = cmd+'\n' + try: + try: + if start_stepping: self.skipBotFrame = SKIP_STEP + else: self.skipBotFrame = SKIP_RUN + if sys.version_info > (2,2): + exec cmd in globals, locals + else: + _doexec(cmd, globals, locals) + except bdb.BdbQuit: + pass + finally: + self.skipBotFrame = SKIP_NONE + self.quitting = 1 + sys.settrace(None) + + finally: + self.done_run(cmd) + + def runeval(self, expr, globals=None, locals=None): + self.prep_run(expr) + try: + debugger_parent.runeval(self, expr, globals, locals) + finally: + self.done_run(expr) + + def runexec(self, what, globs=None, locs=None): + self.reset() + sys.settrace(self.trace_dispatch) + try: + try: + exec what in globs, locs + except bdb.BdbQuit: + pass + finally: + self.quitting = 1 + sys.settrace(None) + + def do_set_step(self): + if self.GUIAboutToRun(): + self.set_step() + + def do_set_next(self): + if self.GUIAboutToRun(): + self.set_next(self.curframe) + + def do_set_return(self): + if self.GUIAboutToRun(): + self.set_return(self.curframe) + + def do_set_continue(self): + if self.GUIAboutToRun(): + self.set_continue() + + def set_quit(self): + ok = 1 + if self.pumping: + ok = self.StopDebuggerPump() + if ok: + debugger_parent.set_quit(self) + + def _dump_frame_(self, frame,name=None): + if name is None: name = "" + if frame: + if frame.f_code and frame.f_code.co_filename: + fname = os.path.split(frame.f_code.co_filename)[1] + else: + fname = "??" + print `name`, fname, frame.f_lineno, frame + else: + print `name`, "None" + + def set_trace(self): + # Start debugging from _2_ levels up! + try: + 1 + '' + except: + frame = sys.exc_info()[2].tb_frame.f_back.f_back + self.reset() + self.userbotframe = None + while frame: + # scriptutils.py creates a local variable with name + # '_debugger_stop_frame_', and we dont go past it + # (everything above this is Pythonwin framework code) + if frame.f_locals.has_key("_debugger_stop_frame_"): + self.userbotframe = frame + break + + frame.f_trace = self.trace_dispatch + self.botframe = frame + frame = frame.f_back + self.set_step() + sys.settrace(self.trace_dispatch) + + def set_cur_frame(self, frame): + # Sets the "current" frame - ie, the frame with focus. This is the + # frame on which "step out" etc actions are taken. + # This may or may not be the top of the stack. + assert frame is not None, "You must pass a valid frame" + self.curframe = frame + for f, index in self.stack: + if f is frame: + self.curindex = index + break + else: + assert 0, "Can't find the frame in the stack." + SetInteractiveContext(frame.f_globals, frame.f_locals) + self.GUIRespondDebuggerData() + self.ShowCurrentLine() + + def IsBreak(self): + return self.debuggerState == DBGSTATE_BREAK + + def IsDebugging(self): + return self.debuggerState != DBGSTATE_NOT_DEBUGGING + + def RespondDebuggerState(self, state): + if state == self.debuggerState: return + if state==DBGSTATE_NOT_DEBUGGING: # Debugger exists, but not doing anything + title = "" + elif state==DBGSTATE_RUNNING: # Code is running under the debugger. + title = " - running" + elif state==DBGSTATE_BREAK: # We are at a breakpoint or stepping or whatever. + if self.bAtException: + if self.bAtPostMortem: + title = " - post mortem exception" + else: + title = " - exception" + else: + title = " - break" + else: + raise error, "Invalid debugger state passed!" + win32ui.GetMainFrame().SetWindowText(win32ui.LoadString(win32ui.IDR_MAINFRAME) + title) + if self.debuggerState == DBGSTATE_QUITTING and state != DBGSTATE_NOT_DEBUGGING: + print "Ignoring state change cos Im trying to stop!", state + return + self.debuggerState = state + try: + frame = win32ui.GetMainFrame() + except win32ui.error: + frame = None + if frame is not None: + for id, klass, float in DebuggerDialogInfos: + cb = win32ui.GetMainFrame().GetControlBar(id).dialog + cb.RespondDebuggerState(state) + # Tell each open editor window about the state transition + for doc in editor.editorTemplate.GetDocumentList(): + doc.OnDebuggerStateChange(state) + self.ShowCurrentLine() + + # + # GUI debugger interface. + # + def GUICheckInit(self): + if self.inited: return + self.inited = 1 + frame = win32ui.GetMainFrame() + + # Ensure the debugger windows are attached to the debugger. + for id, klass, float in DebuggerDialogInfos: + w = frame.GetControlBar(id).dialog + w.Init(self) + + try: + frame.LoadBarState("ToolbarDebugging") + except win32ui.error, details: + print "LoadBarState failed - %s" % details + + # ALWAYS show debugging toolbar, regardless of saved state + tb = frame.GetControlBar(win32ui.ID_VIEW_TOOLBAR_DBG) + frame.ShowControlBar(tb, 1, 1) + self.GUIRespondDebuggerData() + +# frame.RecalcLayout() + + def GetDebuggerBar(self, barName): + frame = win32ui.GetMainFrame() + for id, klass, float in DebuggerDialogInfos: + if klass.title == barName: + return frame.GetControlBar(id) + assert 0, "Can't find a bar of that name!" + + def GUIRespondDebuggerData(self): + if not self.inited: # GUI not inited - no toolbars etc. + return + + for id, klass, float in DebuggerDialogInfos: + cb = win32ui.GetMainFrame().GetControlBar(id).dialog + cb.RespondDebuggerData() + + def GUIAboutToRun(self): + if not self.StopDebuggerPump(): + return 0 + self._UnshowCurrentLine() + self.RespondDebuggerState(DBGSTATE_RUNNING) + SetInteractiveContext(None, None) + return 1 + + def GUIAboutToBreak(self): + "Called as the GUI debugger is about to get context, and take control of the running program." + self.GUICheckInit() + self.RespondDebuggerState(DBGSTATE_BREAK) + self.GUIAboutToInteract() + if self.pumping: + print "!!! Already pumping - outa here" + return + self.pumping = 1 + win32ui.StartDebuggerPump() # NOTE - This will NOT return until the user is finished interacting + assert not self.pumping, "Should not be pumping once the pump has finished" + if self.frameShutdown: # User shut down app while debugging + win32ui.GetMainFrame().PostMessage(win32con.WM_CLOSE) + + def GUIAboutToInteract(self): + "Called as the GUI is about to perform any interaction with the user" + frame = win32ui.GetMainFrame() + # Remember the enabled state of our main frame + # may be disabled primarily if a modal dialog is displayed. + # Only get at enabled via GetWindowLong. + self.bFrameEnabled = frame.IsWindowEnabled() + self.oldForeground = None + fw = win32ui.GetForegroundWindow() + if fw is not frame: + self.oldForeground = fw +# fw.EnableWindow(0) Leave enabled for now? + self.oldFrameEnableState = frame.IsWindowEnabled() + frame.EnableWindow(1) + if self.inForcedGUI and not frame.IsWindowVisible(): + frame.ShowWindow(win32con.SW_SHOW) + frame.UpdateWindow() + if self.curframe: + SetInteractiveContext(self.curframe.f_globals, self.curframe.f_locals) + else: + SetInteractiveContext(None, None) + self.GUIRespondDebuggerData() + + def GUIAboutToFinishInteract(self): + """Called as the GUI is about to finish any interaction with the user + Returns non zero if we are allowed to stop interacting""" + if self.oldForeground is not None: + try: + win32ui.GetMainFrame().EnableWindow(self.oldFrameEnableState) + self.oldForeground.EnableWindow(1) + except win32ui.error: + # old window may be dead. + pass +# self.oldForeground.SetForegroundWindow() - fails?? + if not self.inForcedGUI: + return 1 # Never a problem, and nothing else to do. + # If we are running a forced GUI, we may never get an opportunity + # to interact again. Therefore we perform a "SaveAll", to makesure that + # any documents are saved before leaving. + for template in win32ui.GetApp().GetDocTemplateList(): + for doc in template.GetDocumentList(): + if not doc.SaveModified(): + return 0 + # All documents saved - now hide the app and debugger. + if self.get_option(OPT_HIDE): + frame = win32ui.GetMainFrame() + frame.ShowWindow(win32con.SW_HIDE) + return 1 + + # + # Pythonwin interface - all stuff to do with showing source files, + # changing line states etc. + # + def ShowLineState(self, fileName, lineNo, lineState): + # Set the state of a line, open if not already + self.ShowLineNo(fileName, lineNo) + self.SetLineState(fileName, lineNo, lineState) + + def SetLineState(self, fileName, lineNo, lineState): + # Set the state of a line if the document is open. + doc = editor.editorTemplate.FindOpenDocument(fileName) + if doc is not None: + marker = _LineStateToMarker(lineState) + if not doc.MarkerCheck(lineNo, marker): + doc.MarkerAdd(lineNo, marker) + + def ResetLineState(self, fileName, lineNo, lineState): + # Set the state of a line if the document is open. + doc = editor.editorTemplate.FindOpenDocument(fileName) + if doc is not None: + marker = _LineStateToMarker(lineState) + doc.MarkerDelete(lineNo, marker) + + def UpdateDocumentLineStates(self, doc): + # Show all lines in their special status color. If the doc is open + # all line states are reset. + doc.MarkerDeleteAll( MARKER_BREAKPOINT ) + doc.MarkerDeleteAll( MARKER_CURRENT ) + fname = self.canonic(doc.GetPathName()) + # Now loop over all break-points + for line in self.breaks.get(fname, []): + doc.MarkerAdd(line, MARKER_BREAKPOINT) + # And the current line if in this document. + if self.shownLineCurrent and fname == self.shownLineCurrent[0]: + lineNo = self.shownLineCurrent[1] + if not doc.MarkerCheck(lineNo, MARKER_CURRENT): + doc.MarkerAdd(lineNo, MARKER_CURRENT) +# if self.shownLineCallstack and fname == self.shownLineCallstack[0]: +# doc.MarkerAdd(self.shownLineCallstack[1], MARKER_CURRENT) + + def UpdateAllLineStates(self): + for doc in editor.editorTemplate.GetDocumentList(): + self.UpdateDocumentLineStates(doc) + + def ShowCurrentLine(self): + # Show the current line. Only ever 1 current line - undoes last current + # The "Current Line" is self.curframe. + # The "Callstack Line" is the top of the stack. + # If current == callstack, only show as current. + self._UnshowCurrentLine() # un-highlight the old one. + if self.curframe: + fileName = self.canonic(self.curframe.f_code.co_filename) + lineNo = self.curframe.f_lineno + self.shownLineCurrent = fileName, lineNo + self.ShowLineState(fileName, lineNo, LINESTATE_CURRENT) + + def _UnshowCurrentLine(self): + "Unshow the current line, and forget it" + if self.shownLineCurrent is not None: + fname, lineno = self.shownLineCurrent + self.ResetLineState(fname, lineno, LINESTATE_CURRENT) + self.shownLineCurrent = None + + def ShowLineNo( self, filename, lineno ): + wasOpen = editor.editorTemplate.FindOpenDocument(filename) is not None + if os.path.isfile(filename) and scriptutils.JumpToDocument(filename, lineno): + if not wasOpen: + doc = editor.editorTemplate.FindOpenDocument(filename) + if doc is not None: + self.UpdateDocumentLineStates(doc) + return 1 + return 0 + return 1 + else: + # Can't find the source file - linecache may have it? + import linecache + line = linecache.getline(filename, lineno) + print "%s(%d): %s" % (os.path.basename(filename), lineno, string.expandtabs(line[:-1],4)) + return 0 + +def _doexec(cmd, globals, locals): + exec cmd in globals, locals diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/fail.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/fail.py new file mode 100644 index 000000000..060fe6f86 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/debugger/fail.py @@ -0,0 +1,48 @@ +# NOTE NOTE - This module is designed to fail! +# +# The ONLY purpose for this script is testing/demoing the +# Pythonwin debugger package. + +# It does nothing useful, and it even doesnt do that! + +import pywin.debugger, sys, time +import traceback + +def a(): + a=1 + try: + b() + except: + # Break into the debugger with the exception information. + pywin.debugger.post_mortem(sys.exc_info()[2]) + a=1 + a=2 + a=3 + a=4 + pass + +def b(): + b=1 + pywin.debugger.set_trace() + # After importing or running this module, you are likely to be + # sitting at the next line. This is because we explicitely + # broke into the debugger using the "set_trace() function + # "pywin.debugger.brk()" is a shorter alias for this. + c() + pass + +def c(): + c=1 + d() + +def d(): + d=1 + e(d) + raise ValueError, "Hi" + +def e(arg): + e=1 + time.sleep(1) + return e + +a() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/default.cfg b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/default.cfg new file mode 100644 index 000000000..3fe52a3b1 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/default.cfg @@ -0,0 +1,214 @@ +# The default keyboard etc configuration file for Pythonwin. +# +# The format of this file is very similar to a Windows INI file. +# Sections are identified with [Section] lines, but comments +# use the standatd Python # character. Depending on the section, +# lines may not be in the standard "key=value" format. + +# NOTE: You should not need to modify this file. +# Simply create a new .CFG file, and add an entry: +# [General] +# BasedOn = Default +# +# and add your customisations. Then select your new configuration +# from the Pythonwin View/Options/Editor dialog. +# This way you get to add your own customisations, +# but still take advantage of changes to the default +# configuration in new releases. + +# See IDLE.cfg for an example extension configuration. +# +########################################################################## + +[IDLE Extensions] + +# The list of IDLE extensions to load. The extensions +# AutoIndent, AutoFormat and possibly others are +# "built-in", so do not need specifying. + +FormatParagraph +CallTips + + +[Keys] + +# The list of _default_ key definitions. +# See [Keys:Interactive] and [Keys:Editor] below for further defs. + +#Events of the format <> +# are events defined in IDLE extensions. + +Alt+Q = <> + +Ctrl+W = ViewWhitespace +Ctrl+Shift+8 = ViewWhitespace # The MSVC default key def. + +Ctrl+Shift+F = ViewFixedFont + +# Auto-complete, call-tips, etc. +Alt+/ = <> +Ctrl+Space = <> +Shift+( = <> +Shift-) = <> +Up = <> +Down = <> +Left = <> +Right = <> +. = KeyDot + +# Debugger - These are the MSVC default keys, for want of a better choice. +F9 = DbgBreakpointToggle +F5 = DbgGo +Shift+F5 = DbgClose +F11 = DbgStep +F10 = DbgStepOver +Shift+F11 = DbgStepOut + +Ctrl+F3 = AutoFindNext + + +[Keys:Editor] +# Key bindings specific to the editor +F2 = GotoNextBookmark +Ctrl+F2 = ToggleBookmark +Ctrl+G = GotoLine + +Alt+I = ShowInteractiveWindow +Alt-B = AddBanner # A sample Event defined in this file. + +# Block operations +Alt+3 = <> +Shift+Alt+3 = <> +Alt+4 = <> # IDLE default. +Alt+5 = <> +Alt+6 = <> + +# Tabs and other indent features +Back = <> +Ctrl+T = <> +Alt+U = <> +Enter = EnterKey +Tab = TabKey +Shift-Tab = <> + +# Folding +Add = FoldExpand +Subtract = FoldCollapse +Alt+Add = FoldExpandAll +Subtract = FoldCollapse +Alt+Subtract = FoldCollapseAll +Multiply = FoldTopLevel + +[Keys:Interactive] +# Key bindings specific to the interactive window. +# History for the interactive window +Ctrl+Up = <> +Ctrl+Down = <> +Enter = ProcessEnter +Ctrl+Enter = ProcessEnter +Shift+Enter = ProcessEnter +Esc = ProcessEsc +Alt+I = WindowBack # Toggle back to previous window. +Home = InteractiveHome # A sample Event defined in this file. +Shift+Home = InteractiveHomeExtend # A sample Event defined in this file. + +# When docked, the Ctrl+Tab and Shift+Ctrl+Tab keys dont work as expected. +Ctrl+Tab = MDINext +Ctrl+Shift+Tab = MDIPrev + +[Extensions] +# Python event handlers specific to this config file. +# All functions not starting with an "_" are assumed +# to be events, and take 2 params: +# * editor_window is the same object passed to IDLE +# extensions. editor_window.text is a text widget +# that conforms to the Tk text widget interface. +# * event is the event being fired. Will always be None +# in the current implementation. + +# Simply by defining these functions, they are available as +# events. +# Note that we bind keystrokes to these events in the various +# [Keys] sections. + +# Add a simple file/class/function simple banner +def AddBanner(editor_window, event): + + text = editor_window.text + big_line = "#" * 70 + banner = "%s\n## \n## \n## \n%s\n" % (big_line, big_line) + + # Insert at the start of the current line. + pos = text.index("insert linestart") + + text.undo_block_start() # Allow action to be undone as a single unit. + text.insert(pos, banner) + text.undo_block_stop() + + # Now set the insert point to the middle of the banner. + import string + line, col = map(int, string.split(pos, ".")) + text.mark_set("insert", "%d.1 lineend" % (line+2, ) ) + + +# Here is a sample event bound to the "Home" key in the +# interactive window +def InteractiveHome(editor_window, event): + return _DoInteractiveHome(editor_window.text, 0) + +def InteractiveHomeExtend(editor_window, event): + return _DoInteractiveHome(editor_window.text, 1) + +def _DoInteractiveHome(text, extend): + import sys + # If Scintilla has an autocomplete window open, then let Scintilla handle it. + if text.edit.SCIAutoCActive(): + return 1 + of_interest = "insert linestart + %d c" % len(sys.ps1) + if not text.compare("insert", "==", of_interest) and \ + text.get("insert linestart", of_interest) in [sys.ps1, sys.ps2]: # Not sys.ps? line + end = of_interest + else: + end = "insert linestart" + + if extend: start = "insert" + else: start = end + text.tag_add("sel", start, end) + +# From Niki Spahie +def AutoFindNext(editor_window, event): + "find selected text or word under cursor" + + from pywin.scintilla import find + from pywin.scintilla import scintillacon + + try: + sci = editor_window.edit + word = sci.GetSelText() + if word: + find.lastSearch.findText = word + find.lastSearch.sel = sci.GetSel() + else: + pos = sci.SendScintilla( scintillacon.SCI_GETCURRENTPOS ) + start = sci.SendScintilla( scintillacon.SCI_WORDSTARTPOSITION, pos, 1 ) + end = sci.SendScintilla( scintillacon.SCI_WORDENDPOSITION, pos, 1 ) + word = sci.GetTextRange( start, end ) + if word: + find.lastSearch.findText = word + find.lastSearch.sel = (start,end) + except Exception, why: + print repr(why), why + find.FindNext() + + +# A couple of generic events. +def Beep(editor_window, event): + editor_window.text.beep() + +def DoNothing(editor_window, event): + pass + +def ContinueEvent(editor_window, event): + # Almost an "unbind" - allows Pythonwin/MFC to handle the keystroke + return 1 + diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/__init__.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/ideoptions.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/ideoptions.py new file mode 100644 index 000000000..482d9dc28 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/ideoptions.py @@ -0,0 +1,116 @@ +# The property page to define generic IDE options for Pythonwin + +from pywin.mfc import dialog +from pywin.framework import interact +import win32ui +import win32con + +buttonControlMap = { + win32ui.IDC_BUTTON1: win32ui.IDC_EDIT1, + win32ui.IDC_BUTTON2: win32ui.IDC_EDIT2, + win32ui.IDC_BUTTON3: win32ui.IDC_EDIT3, +} + +class OptionsPropPage(dialog.PropertyPage): + def __init__(self): + dialog.PropertyPage.__init__(self, win32ui.IDD_PP_IDE) + self.AddDDX(win32ui.IDC_CHECK1, "bShowAtStartup") + self.AddDDX(win32ui.IDC_CHECK2, "bDocking") + self.AddDDX(win32ui.IDC_EDIT4, 'MRUSize', "i") + + def OnInitDialog(self): + + edit = self.GetDlgItem(win32ui.IDC_EDIT1) + format = eval(win32ui.GetProfileVal(interact.sectionProfile, interact.STYLE_INTERACTIVE_PROMPT, str(interact.formatInput))) + edit.SetDefaultCharFormat(format) + edit.SetWindowText("Input Text") + + edit = self.GetDlgItem(win32ui.IDC_EDIT2) + format = eval(win32ui.GetProfileVal(interact.sectionProfile, interact.STYLE_INTERACTIVE_OUTPUT, str(interact.formatOutput))) + edit.SetDefaultCharFormat(format) + edit.SetWindowText("Output Text") + + edit = self.GetDlgItem(win32ui.IDC_EDIT3) + format = eval(win32ui.GetProfileVal(interact.sectionProfile, interact.STYLE_INTERACTIVE_ERROR, str(interact.formatOutputError))) + edit.SetDefaultCharFormat(format) + edit.SetWindowText("Error Text") + + self['bShowAtStartup'] = interact.LoadPreference("Show at startup", 1) + self['bDocking'] = interact.LoadPreference("Docking", 0) + self['MRUSize'] = win32ui.GetProfileVal("Settings","Recent File List Size", 10) + + # Hook the button clicks. + self.HookCommand(self.HandleCharFormatChange, win32ui.IDC_BUTTON1) + self.HookCommand(self.HandleCharFormatChange, win32ui.IDC_BUTTON2) + self.HookCommand(self.HandleCharFormatChange, win32ui.IDC_BUTTON3) + + # Ensure the spin control remains in range. + spinner = self.GetDlgItem(win32ui.IDC_SPIN1) + spinner.SetRange(1, 16) + + return dialog.PropertyPage.OnInitDialog(self) + + # Called to save away the new format tuple for the specified item. + def HandleCharFormatChange(self, id, code): + if code == win32con.BN_CLICKED: + editId = buttonControlMap.get(id) + assert editId is not None, "Format button has no associated edit control" + editControl = self.GetDlgItem(editId) + existingFormat = editControl.GetDefaultCharFormat() + flags = win32con.CF_SCREENFONTS + d=win32ui.CreateFontDialog(existingFormat, flags, None, self) + if d.DoModal()==win32con.IDOK: + cf = d.GetCharFormat() + editControl.SetDefaultCharFormat(cf) + self.SetModified(1) + return 0 # We handled this fully! + + def OnOK(self): + # Handle the edit controls - get all the fonts, put them back into interact, then + # get interact to save its stuff! + controlAttrs = [ + (win32ui.IDC_EDIT1, interact.STYLE_INTERACTIVE_PROMPT), + (win32ui.IDC_EDIT2, interact.STYLE_INTERACTIVE_OUTPUT), + (win32ui.IDC_EDIT3, interact.STYLE_INTERACTIVE_ERROR)] + for id, key in controlAttrs: + control = self.GetDlgItem(id) + fmt = control.GetDefaultCharFormat() + win32ui.WriteProfileVal(interact.sectionProfile, key, str(fmt)) + + # Save the other interactive window options. + interact.SavePreference("Show at startup", self['bShowAtStartup']) + interact.SavePreference("Docking", self['bDocking']) + + # And the other options. + win32ui.WriteProfileVal("Settings","Recent File List Size", self['MRUSize']) + + return 1 + def ChangeFormat(self, fmtAttribute, fmt): + dlg = win32ui.CreateFontDialog(fmt) + if dlg.DoModal() <> win32con.IDOK: return None + return dlg.GetCharFormat() + + def OnFormatTitle(self, command, code): + fmt = self.GetFormat(interact.formatTitle) + if fmt: + formatTitle = fmt + SaveFontPreferences() + + def OnFormatInput(self, command, code): + global formatInput + fmt = self.GetFormat(formatInput) + if fmt: + formatInput = fmt + SaveFontPreferences() + def OnFormatOutput(self, command, code): + global formatOutput + fmt = self.GetFormat(formatOutput) + if fmt: + formatOutput = fmt + SaveFontPreferences() + def OnFormatError(self, command, code): + global formatOutputError + fmt = self.GetFormat(formatOutputError) + if fmt: + formatOutputError = fmt + SaveFontPreferences() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/list.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/list.py new file mode 100644 index 000000000..ec3ed738f --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/list.py @@ -0,0 +1,122 @@ +from pywin.mfc import dialog +import win32ui, win32con, commctrl, win32api + +class ListDialog (dialog.Dialog): + + def __init__ (self, title, list): + dialog.Dialog.__init__ (self, self._maketemplate(title)) + self.HookMessage (self.on_size, win32con.WM_SIZE) + self.HookNotify(self.OnListItemChange, commctrl.LVN_ITEMCHANGED) + self.HookCommand(self.OnListClick, win32ui.IDC_LIST1) + self.items = list + + def _maketemplate(self, title): + style = win32con.WS_DLGFRAME | win32con.WS_SYSMENU | win32con.WS_VISIBLE + ls = ( + win32con.WS_CHILD | + win32con.WS_VISIBLE | + commctrl.LVS_ALIGNLEFT | + commctrl.LVS_REPORT + ) + bs = ( + win32con.WS_CHILD | + win32con.WS_VISIBLE + ) + return [ [title, (0, 0, 200, 200), style, None, (8, "MS Sans Serif")], + ["SysListView32", None, win32ui.IDC_LIST1, (0, 0, 200, 200), ls], + [128, "OK", win32con.IDOK, (10, 0, 50, 14), bs | win32con.BS_DEFPUSHBUTTON], + [128, "Cancel",win32con.IDCANCEL,(0, 0, 50, 14), bs], + ] + + def FillList(self): + size = self.GetWindowRect() + width = size[2] - size[0] - (10) + itemDetails = (commctrl.LVCFMT_LEFT, width, "Item", 0) + self.itemsControl.InsertColumn(0, itemDetails) + index = 0 + for item in self.items: + index = self.itemsControl.InsertItem(index+1, str(item), 0) + + def OnListClick(self, id, code): + if code==commctrl.NM_DBLCLK: + self.EndDialog(win32con.IDOK) + return 1 + + def OnListItemChange(self,std, extra): + (hwndFrom, idFrom, code), (itemNotify, sub, newState, oldState, change, point, lparam) = std, extra + oldSel = (oldState & commctrl.LVIS_SELECTED)<>0 + newSel = (newState & commctrl.LVIS_SELECTED)<>0 + if oldSel <> newSel: + try: + self.selecteditem = itemNotify + self.butOK.EnableWindow(1) + except win32ui.error: + self.selecteditem = None + + + def OnInitDialog (self): + rc = dialog.Dialog.OnInitDialog (self) + self.itemsControl = self.GetDlgItem(win32ui.IDC_LIST1) + self.butOK = self.GetDlgItem(win32con.IDOK) + self.butCancel = self.GetDlgItem(win32con.IDCANCEL) + + self.FillList() + + size = self.GetWindowRect() + self.LayoutControls(size[2]-size[0], size[3]-size[1]) + self.butOK.EnableWindow(0) # wait for first selection + return rc + + def LayoutControls(self, w, h): + self.itemsControl.MoveWindow((0,0,w,h-30)) + self.butCancel.MoveWindow((10, h-24, 60, h-4)) + self.butOK.MoveWindow((w-60, h-24, w-10, h-4)) + + def on_size (self, params): + lparam = params[3] + w = win32api.LOWORD(lparam) + h = win32api.HIWORD(lparam) + self.LayoutControls(w, h) + +class ListsDialog(ListDialog): + def __init__(self, title, list, colHeadings = ['Item']): + ListDialog.__init__(self, title, list) + self.colHeadings = colHeadings + + def FillList(self): + index = 0 + size = self.GetWindowRect() + width = size[2] - size[0] - (10) - win32api.GetSystemMetrics(win32con.SM_CXVSCROLL) + numCols = len(self.colHeadings) + + for col in self.colHeadings: + itemDetails = (commctrl.LVCFMT_LEFT, width/numCols, col, 0) + self.itemsControl.InsertColumn(index, itemDetails) + index = index + 1 + index = 0 + for items in self.items: + index = self.itemsControl.InsertItem(index+1, str(items[0]), 0) + for itemno in range(1,numCols): + item = items[itemno] + self.itemsControl.SetItemText(index, itemno, str(item)) + +def SelectFromList (title, lst): + dlg = ListDialog(title, lst) + if dlg.DoModal()==win32con.IDOK: + return dlg.selecteditem + else: + return None + +def SelectFromLists (title, lists, headings): + dlg = ListsDialog(title, lists, headings) + if dlg.DoModal()==win32con.IDOK: + return dlg.selecteditem + else: + return None + +def test(): +# print SelectFromList('Single list', [1,2,3]) + print SelectFromLists('Multi-List', [ ('1',1, 'a'), ('2',2, 'b'), ('3',3, 'c' )], ['Col 1', 'Col 2']) + +if __name__=='__main__': + test() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/login.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/login.py new file mode 100644 index 000000000..fe522ad56 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/login.py @@ -0,0 +1,121 @@ +'''login -- PythonWin user ID and password dialog box + +(Adapted from originally distributed with Mark Hammond's PythonWin - +this now replaces it!) + +login.GetLogin() displays a modal "OK/Cancel" dialog box with input +fields for a user ID and password. The password field input is masked +with *'s. GetLogin takes two optional parameters, a window title, and a +default user ID. If these parameters are omitted, the title defaults to +"Login", and the user ID is left blank. GetLogin returns a (userid, password) +tuple. GetLogin can be called from scripts running on the console - i.e. you +don't need to write a full-blown GUI app to use it. + +login.GetPassword() is similar, except there is no username field. + +Example: +import pywin.dialogs.login +title = "FTP Login" +def_user = "fred" +userid, password = pywin.dialogs.login.GetLogin(title, def_user) + +Jim Eggleston, 28 August 1996 +Merged with dlgpass and moved to pywin.dialogs by Mark Hammond Jan 1998. +''' + +import win32ui +import win32api +import win32con +from pywin.mfc import dialog + +def MakeLoginDlgTemplate(title): + style = win32con.DS_MODALFRAME | win32con.WS_POPUP | win32con.WS_VISIBLE | win32con.WS_CAPTION | win32con.WS_SYSMENU | win32con.DS_SETFONT + cs = win32con.WS_CHILD | win32con.WS_VISIBLE + + # Window frame and title + dlg = [ [title, (0, 0, 184, 40), style, None, (8, "MS Sans Serif")], ] + + # ID label and text box + dlg.append([130, "User ID:", -1, (7, 9, 69, 9), cs | win32con.SS_LEFT]) + s = cs | win32con.WS_TABSTOP | win32con.WS_BORDER + dlg.append(['EDIT', None, win32ui.IDC_EDIT1, (50, 7, 60, 12), s]) + + # Password label and text box + dlg.append([130, "Password:", -1, (7, 22, 69, 9), cs | win32con.SS_LEFT]) + s = cs | win32con.WS_TABSTOP | win32con.WS_BORDER + dlg.append(['EDIT', None, win32ui.IDC_EDIT2, (50, 20, 60, 12), s | win32con.ES_PASSWORD]) + + # OK/Cancel Buttons + s = cs | win32con.WS_TABSTOP + dlg.append([128, "OK", win32con.IDOK, (124, 5, 50, 14), s | win32con.BS_DEFPUSHBUTTON]) + s = win32con.BS_PUSHBUTTON | s + dlg.append([128, "Cancel", win32con.IDCANCEL, (124, 20, 50, 14), s]) + return dlg + +def MakePasswordDlgTemplate(title): + style = win32con.DS_MODALFRAME | win32con.WS_POPUP | win32con.WS_VISIBLE | win32con.WS_CAPTION | win32con.WS_SYSMENU | win32con.DS_SETFONT + cs = win32con.WS_CHILD | win32con.WS_VISIBLE + # Window frame and title + dlg = [ [title, (0, 0, 177, 45), style, None, (8, "MS Sans Serif")], ] + + # Password label and text box + dlg.append([130, "Password:", -1, (7, 7, 69, 9), cs | win32con.SS_LEFT]) + s = cs | win32con.WS_TABSTOP | win32con.WS_BORDER + dlg.append(['EDIT', None, win32ui.IDC_EDIT1, (50, 7, 60, 12), s | win32con.ES_PASSWORD]) + + # OK/Cancel Buttons + s = cs | win32con.WS_TABSTOP | win32con.BS_PUSHBUTTON + dlg.append([128, "OK", win32con.IDOK, (124, 5, 50, 14), s | win32con.BS_DEFPUSHBUTTON]) + dlg.append([128, "Cancel", win32con.IDCANCEL, (124, 22, 50, 14), s]) + return dlg + +class LoginDlg(dialog.Dialog): + Cancel = 0 + def __init__(self, title): + dialog.Dialog.__init__(self, MakeLoginDlgTemplate(title) ) + self.AddDDX(win32ui.IDC_EDIT1,'userid') + self.AddDDX(win32ui.IDC_EDIT2,'password') + +def GetLogin(title='Login', userid='', password=''): + d = LoginDlg(title) + d['userid'] = userid + d['password'] = password + if d.DoModal() != win32con.IDOK: + return (None, None) + else: + return (d['userid'], d['password']) + +class PasswordDlg(dialog.Dialog): + def __init__(self, title): + dialog.Dialog.__init__(self, MakePasswordDlgTemplate(title) ) + self.AddDDX(win32ui.IDC_EDIT1,'password') + +def GetPassword(title='Password', password=''): + d = PasswordDlg(title) + d['password'] = password + if d.DoModal()!=win32con.IDOK: + return None + return d['password'] + +if __name__ == "__main__": + import sys + title = 'Login' + def_user = '' + if len(sys.argv) > 1: + title = sys.argv[1] + if len(sys.argv) > 2: + def_userid = sys.argv[2] + userid, password = GetLogin(title, def_user) + if userid == password == None: + print "User pressed Cancel" + else: + print "User ID: ", userid + print "Password:", password + newpassword = GetPassword("Reenter just for fun", password) + if newpassword is None: + print "User cancelled" + else: + what = "" + if newpassword != password: + what = "not " + print "The passwords did %smatch" % (what) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/status.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/status.py new file mode 100644 index 000000000..95e5aceb7 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/dialogs/status.py @@ -0,0 +1,226 @@ +# No cancel button. + +from pywin.mfc import dialog, thread +import threading +import win32ui +import win32con +import win32api +import time + +def MakeProgressDlgTemplate(caption, staticText = ""): + style = (win32con.DS_MODALFRAME | + win32con.WS_POPUP | + win32con.WS_VISIBLE | + win32con.WS_CAPTION | + win32con.WS_SYSMENU | + win32con.DS_SETFONT) + cs = (win32con.WS_CHILD | + win32con.WS_VISIBLE) + + w = 215 + h = 36 # With button + h = 40 + + dlg = [[caption, + (0, 0, w, h), + style, + None, + (8, "MS Sans Serif")], + ] + + s = win32con.WS_TABSTOP | cs + + dlg.append([130, staticText, 1000, (7, 7, w-7, h-32), cs | win32con.SS_LEFT]) + +# dlg.append([128, +# "Cancel", +# win32con.IDCANCEL, +# (w - 60, h - 18, 50, 14), s | win32con.BS_PUSHBUTTON]) + + return dlg + +class CStatusProgressDialog(dialog.Dialog): + def __init__(self, title, msg = "", maxticks = 100, tickincr = 1): + self.initMsg = msg + templ = MakeProgressDlgTemplate(title, msg) + dialog.Dialog.__init__(self, templ) + self.maxticks = maxticks + self.tickincr = tickincr + self.pbar = None + + def OnInitDialog(self): + rc = dialog.Dialog.OnInitDialog(self) + self.static = self.GetDlgItem(1000) + self.pbar = win32ui.CreateProgressCtrl() + self.pbar.CreateWindow (win32con.WS_CHILD | + win32con.WS_VISIBLE, + (10, 30, 310, 44), + self, 1001) + self.pbar.SetRange(0, self.maxticks) + self.pbar.SetStep(self.tickincr) + self.progress = 0 + self.pincr = 5 + return rc + + def Close(self): + self.EndDialog(0) + + def SetMaxTicks(self, maxticks): + if self.pbar is not None: + self.pbar.SetRange(0, maxticks) + + def Tick(self): + if self.pbar is not None: + self.pbar.StepIt() + + def SetTitle(self, text): + self.SetWindowText(text) + + def SetText(self, text): + self.SetDlgItemText(1000, text) + + def Set(self, pos, max = None): + if self.pbar is not None: + self.pbar.SetPos(pos) + if max is not None: + self.pbar.SetRange(0, max) + +# a progress dialog created in a new thread - especially suitable for +# console apps with no message loop. +MYWM_SETTITLE = win32con.WM_USER+10 +MYWM_SETMSG = win32con.WM_USER+11 +MYWM_TICK = win32con.WM_USER+12 +MYWM_SETMAXTICKS = win32con.WM_USER+13 +MYWM_SET = win32con.WM_USER+14 + +class CThreadedStatusProcessDialog(CStatusProgressDialog): + def __init__(self, title, msg = "", maxticks = 100, tickincr = 1): + self.title = title + self.msg = msg + self.threadid = win32api.GetCurrentThreadId() + CStatusProgressDialog.__init__(self, title, msg, maxticks, tickincr) + + def OnInitDialog(self): + rc = CStatusProgressDialog.OnInitDialog(self) + self.HookMessage(self.OnTitle, MYWM_SETTITLE) + self.HookMessage(self.OnMsg, MYWM_SETMSG) + self.HookMessage(self.OnTick, MYWM_TICK) + self.HookMessage(self.OnMaxTicks, MYWM_SETMAXTICKS) + self.HookMessage(self.OnSet, MYWM_SET) + return rc + + def _Send(self, msg): + try: + self.PostMessage(msg) + except win32ui.error: + # the user closed the window - but this does not cancel the + # process - so just ignore it. + pass + + def OnTitle(self, msg): + CStatusProgressDialog.SetTitle(self, self.title) + + def OnMsg(self, msg): + CStatusProgressDialog.SetText(self, self.msg) + + def OnTick(self, msg): + CStatusProgressDialog.Tick(self) + + def OnMaxTicks(self, msg): + CStatusProgressDialog.SetMaxTicks(self, self.maxticks) + + def OnSet(self, msg): + CStatusProgressDialog.Set(self, self.pos, self.max) + + def Close(self): + assert self.threadid, "No thread!" + win32api.PostThreadMessage(self.threadid, win32con.WM_QUIT, 0, 0) + + def SetMaxTicks(self, maxticks): + self.maxticks = maxticks + self._Send(MYWM_SETMAXTICKS) + def SetTitle(self, title): + self.title = title + self._Send(MYWM_SETTITLE) + def SetText(self, text): + self.msg = text + self._Send(MYWM_SETMSG) + def Tick(self): + self._Send(MYWM_TICK) + def Set(self, pos, max = None): + self.pos = pos + self.max = max + self._Send(MYWM_SET) + +class ProgressThread(thread.WinThread): + def __init__(self, title, msg = "", maxticks = 100, tickincr = 1): + self.title = title + self.msg = msg + self.maxticks = maxticks + self.tickincr = tickincr + self.dialog = None + thread.WinThread.__init__(self) + self.createdEvent = threading.Event() + + def InitInstance(self): + self.dialog = CThreadedStatusProcessDialog( self.title, self.msg, self.maxticks, self.tickincr) + self.dialog.CreateWindow() + try: + self.dialog.SetForegroundWindow() + except win32ui.error: + pass + self.createdEvent.set() + return thread.WinThread.InitInstance(self) + + def ExitInstance(self): + return 0 + + +def StatusProgressDialog(title, msg = "", maxticks = 100, parent = None): + d = CStatusProgressDialog (title, msg, maxticks) + d.CreateWindow (parent) + return d + +def ThreadedStatusProgressDialog(title, msg = "", maxticks = 100): + t = ProgressThread(title, msg, maxticks) + t.CreateThread() + # Need to run a basic "PumpWaitingMessages" loop just incase we are + # running inside Pythonwin. + # Basic timeout incase things go terribly wrong. Ideally we should use + # win32event.MsgWaitForMultipleObjects(), but we use a threading module + # event - so use a dumb strategy + end_time = time.time() + 10 + while time.time() < end_time: + if t.createdEvent.isSet(): + break + win32ui.PumpWaitingMessages() + time.sleep(0.1) + return t.dialog + +def demo(): + d = StatusProgressDialog("A Demo", "Doing something...") + import win32api + for i in range(100): + if i == 50: + d.SetText("Getting there...") + if i==90: + d.SetText("Nearly done...") + win32api.Sleep(20) + d.Tick() + d.Close() + +def thread_demo(): + d = ThreadedStatusProgressDialog("A threaded demo", "Doing something") + import win32api + for i in range(100): + if i == 50: + d.SetText("Getting there...") + if i==90: + d.SetText("Nearly done...") + win32api.Sleep(20) + d.Tick() + d.Close() + +if __name__=='__main__': + thread_demo() + #demo() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/docking/DockingBar.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/docking/DockingBar.py new file mode 100644 index 000000000..346ba7df4 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/docking/DockingBar.py @@ -0,0 +1,527 @@ +# DockingBar.py + +# Ported directly (comments and all) from the samples at www.codeguru.com + +# WARNING: Use at your own risk, as this interface is highly likely to change. +# Currently we support only one child per DockingBar. Later we need to add +# support for multiple children. + +import win32api, win32con, win32ui +from pywin.mfc import afxres, window +import struct + +clrBtnHilight = win32api.GetSysColor(win32con.COLOR_BTNHILIGHT) +clrBtnShadow = win32api.GetSysColor(win32con.COLOR_BTNSHADOW) + +def CenterPoint(rect): + width = rect[2]-rect[0] + height = rect[3]-rect[1] + return rect[0] + width/2, rect[1] + height/2 + +def OffsetRect(rect, (x, y) ): + return rect[0]+x, rect[1]+y, rect[2]+x, rect[3]+y + +def DeflateRect(rect, (x,y) ): + return rect[0]+x, rect[1]+y, rect[2]-x, rect[3]-y + +def PtInRect(rect, pt): + return rect[0] <= pt[0] < rect[2] and rect[1] <= pt[1] < rect[3] + +class DockingBar(window.Wnd): + def __init__(self, obj=None): + if obj is None: + obj = win32ui.CreateControlBar() + window.Wnd.__init__(self, obj) + self.dialog = None + self.nDockBarID = 0 + self.sizeMin = 32, 32 + self.sizeHorz = 200, 200 + self.sizeVert = 200, 200 + self.sizeFloat = 200, 200 + self.bTracking = 0 + self.bInRecalcNC = 0 + self.cxEdge = 6 + self.cxBorder = 3 + self.cxGripper = 20 + self.brushBkgd = win32ui.CreateBrush() + self.brushBkgd.CreateSolidBrush(win32api.GetSysColor(win32con.COLOR_BTNFACE)) + + # Support for diagonal resizing + self.cyBorder = 3 + self.cCaptionSize = win32api.GetSystemMetrics(win32con.SM_CYSMCAPTION) + self.cMinWidth = win32api.GetSystemMetrics(win32con.SM_CXMIN) + self.cMinHeight = win32api.GetSystemMetrics(win32con.SM_CYMIN) + + def OnUpdateCmdUI(self, target, bDisableIfNoHndler): + return self.UpdateDialogControls(target, bDisableIfNoHndler) + + def CreateWindow(self, parent, childCreator, title, id, style=win32con.WS_CHILD | win32con.WS_VISIBLE | afxres.CBRS_LEFT, childCreatorArgs=()): + assert not ((style & afxres.CBRS_SIZE_FIXED) and (style & afxres.CBRS_SIZE_DYNAMIC)), "Invalid style" + self.rectClose = self.rectBorder = self.rectGripper = self.rectTracker = 0,0,0,0 + + # save the style + self._obj_.dwStyle = style & afxres.CBRS_ALL + + cursor = win32api.LoadCursor(0, win32con.IDC_ARROW) + wndClass = win32ui.RegisterWndClass(win32con.CS_DBLCLKS, cursor, self.brushBkgd.GetSafeHandle(), 0) + + self._obj_.CreateWindow(wndClass, title, style, (0,0,0,0), parent, id) + + # Create the child dialog + self.dialog = apply(childCreator, (self,) + childCreatorArgs) + + # use the dialog dimensions as default base dimensions + assert self.dialog.IsWindow(), "The childCreator function %s did not create a window!" % childCreator + rect = self.dialog.GetWindowRect() + self.sizeHorz = self.sizeVert = self.sizeFloat = rect[2]-rect[0], rect[3]-rect[1] + + self.sizeHorz = self.sizeHorz[0], self.sizeHorz[1] + self.cxEdge + self.cxBorder + self.sizeVert = self.sizeVert[0] + self.cxEdge + self.cxBorder, self.sizeVert[1] + self.HookMessages() + + def CalcFixedLayout(self, bStretch, bHorz): + rectTop = self.dockSite.GetControlBar(afxres.AFX_IDW_DOCKBAR_TOP).GetWindowRect() + rectLeft = self.dockSite.GetControlBar(afxres.AFX_IDW_DOCKBAR_LEFT).GetWindowRect() + if bStretch: + nHorzDockBarWidth = 32767 + nVertDockBarHeight = 32767 + else: + nHorzDockBarWidth = rectTop[2]-rectTop[0] + 4 + nVertDockBarHeight = rectLeft[3]-rectLeft[1] + 4 + + if self.IsFloating(): + return self.sizeFloat + if bHorz: + return nHorzDockBarWidth, self.sizeHorz[1] + return self.sizeVert[0], nVertDockBarHeight + + def CalcDynamicLayout(self, length, mode): + # Support for diagonal sizing. + if self.IsFloating(): + self.GetParent().GetParent().ModifyStyle(win32ui.MFS_4THICKFRAME, 0) + if mode & (win32ui.LM_HORZDOCK | win32ui.LM_VERTDOCK): + flags = win32con.SWP_NOSIZE | win32con.SWP_NOMOVE | win32con.SWP_NOZORDER |\ + win32con.SWP_NOACTIVATE | win32con.SWP_FRAMECHANGED + self.SetWindowPos(0, (0, 0, 0, 0,), flags) + self.dockSite.RecalcLayout() + return self._obj_.CalcDynamicLayout(length, mode) + + if mode & win32ui.LM_MRUWIDTH: + return self.sizeFloat + if mode & win32ui.LM_COMMIT: + self.sizeFloat = length, self.sizeFloat[1] + return self.sizeFloat + # More diagonal sizing. + if self.IsFloating(): + dc = self.dockContext + pt = win32api.GetCursorPos() + windowRect = self.GetParent().GetParent().GetWindowRect() + + hittest = dc.nHitTest + if hittest==win32con.HTTOPLEFT: + cx = max(windowRect[2] - pt[0], self.cMinWidth) - self.cxBorder + cy = max(windowRect[3] - self.cCaptionSize - pt[1],self.cMinHeight) - 1 + self.sizeFloat = cx, cy + + top = min(pt[1], windowRect[3] - self.cCaptionSize - self.cMinHeight) - self.cyBorder + left = min(pt[0], windowRect[2] - self.cMinWidth) - 1 + dc.rectFrameDragHorz = left, top, dc.rectFrameDragHorz[2], dc.rectFrameDragHorz[3] + return self.sizeFloat + if hittest==win32con.HTTOPRIGHT: + cx = max(pt[0] - windowRect[0], self.cMinWidth) + cy = max(windowRect[3] - self.cCaptionSize - pt[1], self.cMinHeight) - 1 + self.sizeFloat = cx, cy + + top = min(pt[1], windowRect[3] - self.cCaptionSize - self.cMinHeight) - self.cyBorder + dc.rectFrameDragHorz = dc.rectFrameDragHorz[0], top, dc.rectFrameDragHorz[2], dc.rectFrameDragHorz[3] + return self.sizeFloat + + if hittest==win32con.HTBOTTOMLEFT: + cx = max(windowRect[2] - pt[0], self.cMinWidth) - self.cxBorder + cy = max(pt[1] - windowRect[1] - self.cCaptionSize, self.cMinHeight) + self.sizeFloat = cx, cy + + left = min(pt[0], windowRect[2] -self.cMinWidth) - 1 + dc.rectFrameDragHorz = left, dc.rectFrameDragHorz[1], dc.rectFrameDragHorz[2], dc.rectFrameDragHorz[3] + return self.sizeFloat + + if hittest==win32con.HTBOTTOMRIGHT: + cx = max(pt[0] - windowRect[0], self.cMinWidth) + cy = max(pt[1] - windowRect[1] - self.cCaptionSize, self.cMinHeight) + self.sizeFloat = cx, cy + return self.sizeFloat + + if mode & win32ui.LM_LENGTHY: + self.sizeFloat = self.sizeFloat[0], max(self.sizeMin[1], length) + return self.sizeFloat + else: + return max(self.sizeMin[0], length), self.sizeFloat[1] + + def OnWindowPosChanged(self, msg): + if self.GetSafeHwnd()==0 or self.dialog is None: + return 0 + lparam = msg[3] + format = "iiiiiii" + bytes = win32ui.GetBytes( lparam, struct.calcsize(format) ) + hwnd, hwndAfter, x, y, cx, cy, flags = struct.unpack(format, bytes) + + if self.bInRecalcNC: + rc = self.GetClientRect() + self.dialog.MoveWindow(rc) + return 0 + # Find on which side are we docked + nDockBarID = self.GetParent().GetDlgCtrlID() + # Return if dropped at same location + # no docking side change and no size change + if (nDockBarID == self.nDockBarID) and \ + (flags & win32con.SWP_NOSIZE) and \ + ((self._obj_.dwStyle & afxres.CBRS_BORDER_ANY) != afxres.CBRS_BORDER_ANY): + return + self.nDockBarID = nDockBarID + + # Force recalc the non-client area + self.bInRecalcNC = 1 + try: + swpflags = win32con.SWP_NOSIZE | win32con.SWP_NOMOVE | win32con.SWP_NOZORDER | win32con.SWP_FRAMECHANGED + self.SetWindowPos(0, (0,0,0,0), swpflags) + finally: + self.bInRecalcNC = 0 + return 0 + + # This is a virtual and not a message hook. + def OnSetCursor(self, window, nHitTest, wMouseMsg): + if nHitTest != win32con.HTSIZE or self.bTracking: + return self._obj_.OnSetCursor(window, nHitTest, wMouseMsg) + + if self.IsHorz(): + win32api.SetCursor(win32api.LoadCursor(0, win32con.IDC_SIZENS)) + else: + win32api.SetCursor(win32api.LoadCursor(0, win32con.IDC_SIZEWE)) + return 1 + + # Mouse Handling + def OnLButtonUp(self, msg): + if not self.bTracking: + return 1 # pass it on. + self.StopTracking(1) + return 0 # Dont pass on + + def OnLButtonDown(self, msg): + # UINT nFlags, CPoint point) + # only start dragging if clicked in "void" space + if self.dockBar is not None: + # start the drag + pt = msg[5] + pt = self.ClientToScreen(pt) + self.dockContext.StartDrag(pt) + return 0 + return 1 + + def OnNcLButtonDown(self, msg): + if self.bTracking: return 0 + nHitTest = wparam = msg[2] + pt = msg[5] + + if nHitTest==win32con.HTSYSMENU and not self.IsFloating(): + self.GetDockingFrame().ShowControlBar(self, 0, 0) + elif nHitTest == win32con.HTMINBUTTON and not self.IsFloating(): + self.dockContext.ToggleDocking() + elif nHitTest == win32con.HTCAPTION and not self.IsFloating() and self.dockBar is not None: + self.dockContext.StartDrag(pt) + elif nHitTest == win32con.HTSIZE and not self.IsFloating(): + self.StartTracking() + else: + return 1 + return 0 + + def OnLButtonDblClk(self, msg): + # only toggle docking if clicked in "void" space + if self.dockBar is not None: + # toggle docking + self.dockContext.ToggleDocking() + return 0 + return 1 + + def OnNcLButtonDblClk(self, msg): + nHitTest = wparam = msg[2] + # UINT nHitTest, CPoint point) + if self.dockBar is not None and nHitTest == win32con.HTCAPTION: + # toggle docking + self.dockContext.ToggleDocking() + return 0 + return 1 + + def OnMouseMove(self, msg): + flags = wparam = msg[2] + lparam = msg[3] + if self.IsFloating() or not self.bTracking: + return 1 + + # Convert unsigned 16 bit to signed 32 bit. + x=win32api.LOWORD(lparam) + if x & 32768: x = x | -65536 + y = win32api.HIWORD(lparam) + if y & 32768: y = y | -65536 + pt = x, y + cpt = CenterPoint(self.rectTracker) + pt = self.ClientToWnd(pt) + if self.IsHorz(): + if cpt[1] != pt[1]: + self.OnInvertTracker(self.rectTracker) + self.rectTracker = OffsetRect(self.rectTracker, (0, pt[1] - cpt[1])) + self.OnInvertTracker(self.rectTracker) + else: + if cpt[0] != pt[0]: + self.OnInvertTracker(self.rectTracker) + self.rectTracker = OffsetRect(self.rectTracker, (pt[0]-cpt[0], 0)) + self.OnInvertTracker(self.rectTracker) + + return 0 # Dont pass it on. + +# def OnBarStyleChange(self, old, new): + + def OnNcCalcSize(self, bCalcValid, (rc0, rc1, rc2, pos)): + self.rectBorder = self.GetWindowRect() + self.rectBorder = OffsetRect( self.rectBorder, (-self.rectBorder[0], -self.rectBorder[1]) ) + + dwBorderStyle = self._obj_.dwStyle | afxres.CBRS_BORDER_ANY + + if self.nDockBarID==afxres.AFX_IDW_DOCKBAR_TOP: + dwBorderStyle = dwBorderStyle & ~afxres.CBRS_BORDER_BOTTOM; + rc0.left = rc0.left + self.cxGripper + rc0.bottom = rc0.bottom-self.cxEdge + rc0.top = rc0.top + self.cxBorder + rc0.right = rc0.right - self.cxBorder + self.rectBorder = self.rectBorder[0], self.rectBorder[3]-self.cxEdge, self.rectBorder[2], self.rectBorder[3] + elif self.nDockBarID==afxres.AFX_IDW_DOCKBAR_BOTTOM: + dwBorderStyle = dwBorderStyle & ~afxres.CBRS_BORDER_TOP + rc0.left = rc0.left + self.cxGripper + rc0.top = rc0.top + self.cxEdge + rc0.bottom = rc0.bottom - self.cxBorder + rc0.right = rc0.right - self.cxBorder + self.rectBorder = self.rectBorder[0], self.rectBorder[1], self.rectBorder[2], self.rectBorder[1]+self.cxEdge + elif self.nDockBarID==afxres.AFX_IDW_DOCKBAR_LEFT: + dwBorderStyle = dwBorderStyle & ~afxres.CBRS_BORDER_RIGHT + rc0.right = rc0.right - self.cxEdge + rc0.left = rc0.left + self.cxBorder + rc0.bottom = rc0.bottom - self.cxBorder + rc0.top = rc0.top + self.cxGripper + self.rectBorder = self.rectBorder[2] - self.cxEdge, self.rectBorder[1], self.rectBorder[2], self.rectBorder[3] + elif self.nDockBarID==afxres.AFX_IDW_DOCKBAR_RIGHT: + dwBorderStyle = dwBorderStyle & ~afxres.CBRS_BORDER_LEFT + rc0.left = rc0.left + self.cxEdge + rc0.right = rc0.right - self.cxBorder + rc0.bottom = rc0.bottom - self.cxBorder + rc0.top = rc0.top + self.cxGripper + self.rectBorder = self.rectBorder[0], self.rectBorder[1], self.rectBorder[0]+self.cxEdge, self.rectBorder[3] + else: + self.rectBorder = 0,0,0,0 + + self.SetBarStyle(dwBorderStyle) + return 0 + + def OnNcPaint(self, msg): + self.EraseNonClient() + dc = self.GetWindowDC() + ctl = win32api.GetSysColor(win32con.COLOR_BTNHIGHLIGHT) + cbr = win32api.GetSysColor(win32con.COLOR_BTNSHADOW) + dc.Draw3dRect(self.rectBorder, ctl, cbr) + + self.DrawGripper(dc) + + rect = self.GetClientRect() + self.InvalidateRect( rect, 1) + return 0 + + def OnNcHitTest(self, pt): # A virtual, not a hooked message. + if self.IsFloating(): + return 1 + + ptOrig = pt + rect = self.GetWindowRect() + pt = pt[0] - rect[0], pt[1] - rect[1] + + if PtInRect(self.rectClose, pt): + return win32con.HTSYSMENU + elif PtInRect(self.rectUndock, pt): + return win32con.HTMINBUTTON + elif PtInRect(self.rectGripper, pt): + return win32con.HTCAPTION + elif PtInRect(self.rectBorder, pt): + return win32con.HTSIZE + else: + return self._obj_.OnNcHitTest(ptOrig) + + def StartTracking(self): + self.SetCapture() + + # make sure no updates are pending + self.RedrawWindow(None, None, win32con.RDW_ALLCHILDREN | win32con.RDW_UPDATENOW) + self.dockSite.LockWindowUpdate() + + self.ptOld = CenterPoint(self.rectBorder) + self.bTracking = 1 + + self.rectTracker = self.rectBorder; + if not self.IsHorz(): + l, t, r, b = self.rectTracker + b = b - 4 + self.rectTracker = l, t, r, b + + self.OnInvertTracker(self.rectTracker); + + def OnCaptureChanged(self, msg): + hwnd = lparam = msg[3] + if self.bTracking and hwnd != self.GetSafeHwnd(): + self.StopTracking(0) # cancel tracking + return 1 + + def StopTracking(self, bAccept): + self.OnInvertTracker(self.rectTracker) + self.dockSite.UnlockWindowUpdate() + self.bTracking = 0 + self.ReleaseCapture() + if not bAccept: return + + rcc = self.dockSite.GetWindowRect() + if self.IsHorz(): + newsize = self.sizeHorz[1] + maxsize = newsize + (rcc[3]-rcc[1]) + minsize = self.sizeMin[1] + else: + newsize = self.sizeVert[0] + maxsize = newsize + (rcc[2]-rcc[0]) + minsize = self.sizeMin[0] + + pt = CenterPoint(self.rectTracker) + if self.nDockBarID== afxres.AFX_IDW_DOCKBAR_TOP: + newsize = newsize + (pt[1] - self.ptOld[1]) + elif self.nDockBarID== afxres.AFX_IDW_DOCKBAR_BOTTOM: + newsize = newsize + (- pt[1] + self.ptOld[1]) + elif self.nDockBarID== afxres.AFX_IDW_DOCKBAR_LEFT: + newsize = newsize + (pt[0] - self.ptOld[0]) + elif self.nDockBarID== afxres.AFX_IDW_DOCKBAR_RIGHT: + newsize = newsize + (- pt[0] + self.ptOld[0]) + newsize = max(minsize, min(maxsize, newsize)) + if self.IsHorz(): + self.sizeHorz = self.sizeHorz[0], newsize + else: + self.sizeVert = newsize, self.sizeVert[1] + self.dockSite.RecalcLayout() + return 0 + + def OnInvertTracker(self, rect): + assert rect[2]-rect[0]>0 and rect[3]-rect[1]>0, "rect is empty" + assert self.bTracking + rcc = self.GetWindowRect() + rcf = self.dockSite.GetWindowRect() + + rect = OffsetRect(rect, (rcc[0] - rcf[0], rcc[1] - rcf[1])) + rect = DeflateRect(rect, (1, 1)); + + flags = win32con.DCX_WINDOW|win32con.DCX_CACHE|win32con.DCX_LOCKWINDOWUPDATE + dc = self.dockSite.GetDCEx(None, flags) + try: + brush = win32ui.GetHalftoneBrush() + oldBrush = dc.SelectObject(brush) + + dc.PatBlt((rect[0], rect[1]), (rect[2]-rect[0], rect[3]-rect[1]), win32con.PATINVERT) + dc.SelectObject(oldBrush) + finally: + self.dockSite.ReleaseDC(dc) + + def IsHorz(self): + return self.nDockBarID == afxres.AFX_IDW_DOCKBAR_TOP or \ + self.nDockBarID == afxres.AFX_IDW_DOCKBAR_BOTTOM + + def ClientToWnd(self, pt): + x, y=pt + if self.nDockBarID == afxres.AFX_IDW_DOCKBAR_BOTTOM: + y = y + self.cxEdge + elif self.nDockBarID == afxres.AFX_IDW_DOCKBAR_RIGHT: + x = x + self.cxEdge + return x,y + + def DrawGripper(self, dc): + # no gripper if floating + if self._obj_.dwStyle & afxres.CBRS_FLOATING: + return + + # -==HACK==- + # in order to calculate the client area properly after docking, + # the client area must be recalculated twice (I have no idea why) + self.dockSite.RecalcLayout() + # -==END HACK==- + + gripper = self.GetWindowRect() + gripper = self.ScreenToClient( gripper ) + gripper = OffsetRect( gripper, (-gripper[0], -gripper[1]) ) + gl, gt, gr, gb = gripper + + if self._obj_.dwStyle & afxres.CBRS_ORIENT_HORZ: + # gripper at left + self.rectGripper = gl, gt + 40, gl+20, gb + # draw close box + self.rectClose = gl+7, gt + 10, gl+19, gt+22 + dc.DrawFrameControl(self.rectClose, win32con.DFC_CAPTION, win32con.DFCS_CAPTIONCLOSE) + # draw docking toggle box + self.rectUndock = OffsetRect(self.rectClose, (0,13)) + dc.DrawFrameControl(self.rectUndock, win32con.DFC_CAPTION, win32con.DFCS_CAPTIONMAX); + + gt = gt + 38 + gb = gb - 10 + gl = gl + 10 + gr = gl + 3 + gripper = gl, gt, gr, gb + dc.Draw3dRect( gripper, clrBtnHilight, clrBtnShadow ) + dc.Draw3dRect( OffsetRect(gripper, (4,0)), clrBtnHilight, clrBtnShadow ) + else: + # gripper at top + self.rectGripper = gl, gt, gr-40, gt+20 + # draw close box + self.rectClose = gr-21, gt+7, gr-10, gt+18 + dc.DrawFrameControl(self.rectClose, win32con.DFC_CAPTION, win32con.DFCS_CAPTIONCLOSE) + # draw docking toggle box + self.rectUndock = OffsetRect( self.rectClose, (-13,0) ) + dc.DrawFrameControl(self.rectUndock, win32con.DFC_CAPTION, win32con.DFCS_CAPTIONMAX) + gr = gr - 38; + gl = gl + 10 + gt = gt + 10 + gb = gt + 3 + + gripper = gl, gt, gr, gb + dc.Draw3dRect( gripper, clrBtnHilight, clrBtnShadow ) + dc.Draw3dRect( OffsetRect(gripper, (0,4) ), clrBtnHilight, clrBtnShadow ) + + def HookMessages(self): + self.HookMessage(self.OnLButtonUp, win32con.WM_LBUTTONUP) + self.HookMessage(self.OnLButtonDown, win32con.WM_LBUTTONDOWN) + self.HookMessage(self.OnLButtonDblClk, win32con.WM_LBUTTONDBLCLK) + self.HookMessage(self.OnNcLButtonDown, win32con.WM_NCLBUTTONDOWN) + self.HookMessage(self.OnNcLButtonDblClk, win32con.WM_NCLBUTTONDBLCLK) + self.HookMessage(self.OnMouseMove, win32con.WM_MOUSEMOVE) + self.HookMessage(self.OnNcPaint, win32con.WM_NCPAINT) + self.HookMessage(self.OnCaptureChanged, win32con.WM_CAPTURECHANGED) + self.HookMessage(self.OnWindowPosChanged, win32con.WM_WINDOWPOSCHANGED) +# self.HookMessage(self.OnSize, win32con.WM_SIZE) + +def EditCreator(parent): + d = win32ui.CreateEdit() + es = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.WS_BORDER | win32con.ES_MULTILINE | win32con.ES_WANTRETURN + d.CreateWindow( es, (0,0,150,150), parent, 1000) + return d + +def test(): + import pywin.mfc.dialog + global bar + bar = DockingBar() + creator = EditCreator + bar.CreateWindow(win32ui.GetMainFrame(), creator, "Coolbar Demo") +# win32ui.GetMainFrame().ShowControlBar(bar, 1, 0) + bar.SetBarStyle( bar.GetBarStyle()|afxres.CBRS_TOOLTIPS|afxres.CBRS_FLYBY|afxres.CBRS_SIZE_DYNAMIC) + bar.EnableDocking(afxres.CBRS_ALIGN_ANY) + win32ui.GetMainFrame().DockControlBar(bar, afxres.AFX_IDW_DOCKBAR_BOTTOM) + + +if __name__=='__main__': + test() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/docking/__init__.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/docking/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/__init__.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/app.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/app.py new file mode 100644 index 000000000..75cb2e580 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/app.py @@ -0,0 +1,404 @@ +# App.py +# Application stuff. +# The application is responsible for managing the main frame window. +# +# We also grab the FileOpen command, to invoke our Python editor +" The PythonWin application code. Manages most aspects of MDI, etc " +import win32con +import win32api +import win32ui +import sys +import string +import os +from pywin.mfc import window, dialog, thread, afxres +import traceback +from pywin.framework import scriptutils + +## NOTE: App and AppBuild should NOT be used - instead, you should contruct your +## APP class manually whenever you like (just ensure you leave these 2 params None!) +## Whoever wants the generic "Application" should get it via win32iu.GetApp() + +# These are "legacy" +AppBuilder = None +App = None # default - if used, must end up a CApp derived class. + +# Helpers that should one day be removed! +def AddIdleHandler(handler): + print "app.AddIdleHandler is deprecated - please use win32ui.GetApp().AddIdleHandler() instead." + return win32ui.GetApp().AddIdleHandler(handler) +def DeleteIdleHandler(handler): + print "app.DeleteIdleHandler is deprecated - please use win32ui.GetApp().DeleteIdleHandler() instead." + return win32ui.GetApp().DeleteIdleHandler(handler) + +# Helper for writing a Window position by name, and later loading it. +def SaveWindowSize(section,rect,state=""): + """ Writes a rectangle to an INI file + Args: section = section name in the applications INI file + rect = a rectangle in a (cy, cx, y, x) tuple + (same format as CREATESTRUCT position tuples).""" + left, top, right, bottom = rect + if state: state = state + " " + win32ui.WriteProfileVal(section,state+"left",left) + win32ui.WriteProfileVal(section,state+"top",top) + win32ui.WriteProfileVal(section,state+"right",right) + win32ui.WriteProfileVal(section,state+"bottom",bottom) + +def LoadWindowSize(section, state=""): + """ Loads a section from an INI file, and returns a rect in a tuple (see SaveWindowSize)""" + if state: state = state + " " + left = win32ui.GetProfileVal(section,state+"left",0) + top = win32ui.GetProfileVal(section,state+"top",0) + right = win32ui.GetProfileVal(section,state+"right",0) + bottom = win32ui.GetProfileVal(section,state+"bottom",0) + return (left, top, right, bottom) + +def RectToCreateStructRect(rect): + return (rect[3]-rect[1], rect[2]-rect[0], rect[1], rect[0] ) + + +# Define FrameWindow and Application objects +# +# The Main Frame of the application. +class MainFrame(window.MDIFrameWnd): + sectionPos = "Main Window" + statusBarIndicators = ( afxres.ID_SEPARATOR, #// status line indicator + afxres.ID_INDICATOR_CAPS, + afxres.ID_INDICATOR_NUM, + afxres.ID_INDICATOR_SCRL, + win32ui.ID_INDICATOR_LINENUM, + win32ui.ID_INDICATOR_COLNUM ) + + def OnCreate(self, cs): + self._CreateStatusBar() + return 0 + + def _CreateStatusBar(self): + self.statusBar = win32ui.CreateStatusBar(self) + self.statusBar.SetIndicators(self.statusBarIndicators) + self.HookCommandUpdate(self.OnUpdatePosIndicator, win32ui.ID_INDICATOR_LINENUM) + self.HookCommandUpdate(self.OnUpdatePosIndicator, win32ui.ID_INDICATOR_COLNUM) + + def OnUpdatePosIndicator(self, cmdui): + editControl = scriptutils.GetActiveEditControl() + value = " " * 5 + if editControl is not None: + try: + startChar, endChar = editControl.GetSel() + lineNo = editControl.LineFromChar(startChar) + colNo = endChar - editControl.LineIndex(lineNo) + + if cmdui.m_nID==win32ui.ID_INDICATOR_LINENUM: + value = "%0*d" % (5, lineNo + 1) + else: + value = "%0*d" % (3, colNo + 1) + except win32ui.error: + pass + cmdui.SetText(value) + cmdui.Enable() + + def PreCreateWindow(self, cc): + cc = self._obj_.PreCreateWindow(cc) + pos = LoadWindowSize(self.sectionPos) + self.startRect = pos + if pos[2] - pos[0]: + rect = RectToCreateStructRect(pos) + cc = cc[0], cc[1], cc[2], cc[3], rect, cc[5], cc[6], cc[7], cc[8] + return cc + + def OnDestroy(self, msg): + # use GetWindowPlacement(), as it works even when min'd or max'd + rectNow = self.GetWindowPlacement()[4] + if rectNow != self.startRect: + SaveWindowSize(self.sectionPos, rectNow) + return 0 + +class CApp(thread.WinApp): + " A class for the application " + def __init__(self): + self.oldCallbackCaller = None + thread.WinApp.__init__(self, win32ui.GetApp() ) + self.idleHandlers = [] + + def InitInstance(self): + " Called to crank up the app " + numMRU = win32ui.GetProfileVal("Settings","Recent File List Size", 10) + win32ui.LoadStdProfileSettings(numMRU) +# self._obj_.InitMDIInstance() + if win32api.GetVersionEx()[0]<4: + win32ui.SetDialogBkColor() + win32ui.Enable3dControls() + + # install a "callback caller" - a manager for the callbacks +# self.oldCallbackCaller = win32ui.InstallCallbackCaller(self.CallbackManager) + self.LoadMainFrame() + self.SetApplicationPaths() + + def ExitInstance(self): + " Called as the app dies - too late to prevent it here! " + win32ui.OutputDebug("Application shutdown\n") + # Restore the callback manager, if any. + try: + win32ui.InstallCallbackCaller(self.oldCallbackCaller) + except AttributeError: + pass + if self.oldCallbackCaller: + del self.oldCallbackCaller + self.frame=None # clean Python references to the now destroyed window object. + self.idleHandlers = [] + # Attempt cleanup if not already done! + if self._obj_: self._obj_.AttachObject(None) + self._obj_ = None + global App + global AppBuilder + App = None + AppBuilder = None + return 0 + + def HaveIdleHandler(self, handler): + return handler in self.idleHandlers + def AddIdleHandler(self, handler): + self.idleHandlers.append(handler) + def DeleteIdleHandler(self, handler): + self.idleHandlers.remove(handler) + def OnIdle(self, count): + try: + ret = 0 + handlers = self.idleHandlers[:] # copy list, as may be modified during loop + for handler in handlers: + try: + thisRet = handler(handler, count) + except: + print "Idle handler %s failed" % (`handler`) + traceback.print_exc() + print "Idle handler removed from list" + try: + self.DeleteIdleHandler(handler) + except ValueError: # Item not in list. + pass + thisRet = 0 + ret = ret or thisRet + return ret + except KeyboardInterrupt: + pass + def CreateMainFrame(self): + return MainFrame() + + def LoadMainFrame(self): + " Create the main applications frame " + self.frame = self.CreateMainFrame() + self.SetMainFrame(self.frame) + self.frame.LoadFrame(win32ui.IDR_MAINFRAME, win32con.WS_OVERLAPPEDWINDOW) + self.frame.DragAcceptFiles() # we can accept these. + self.frame.ShowWindow(win32ui.GetInitialStateRequest()) + self.frame.UpdateWindow() + self.HookCommands() + + def OnHelp(self,id, code): + try: + import regutil + if id==win32ui.ID_HELP_GUI_REF: + helpFile = regutil.GetRegisteredHelpFile("Pythonwin Reference") + helpCmd = win32con.HELP_CONTENTS + else: + helpFile = regutil.GetRegisteredHelpFile("Main Python Documentation") + helpCmd = win32con.HELP_FINDER + if helpFile is None: + win32ui.MessageBox("The help file is not registered!") + else: + import help + help.OpenHelpFile(helpFile, helpCmd) + except: + t, v, tb = sys.exc_info() + win32ui.MessageBox("Internal error in help file processing\r\n%s: %s" % (t,v)) + tb = None # Prevent a cycle + + def DoLoadModules(self, modules): + # XXX - this should go, but the debugger uses it :-( + # dont do much checking! + for module in modules: + __import__(module) + + def HookCommands(self): + self.frame.HookMessage(self.OnDropFiles,win32con.WM_DROPFILES) + self.HookCommand(self.HandleOnFileOpen,win32ui.ID_FILE_OPEN) + self.HookCommand(self.HandleOnFileNew,win32ui.ID_FILE_NEW) + self.HookCommand(self.OnFileMRU,win32ui.ID_FILE_MRU_FILE1) + self.HookCommand(self.OnHelpAbout,win32ui.ID_APP_ABOUT) + self.HookCommand(self.OnHelp, win32ui.ID_HELP_PYTHON) + self.HookCommand(self.OnHelp, win32ui.ID_HELP_GUI_REF) + # Hook for the right-click menu. + self.frame.GetWindow(win32con.GW_CHILD).HookMessage(self.OnRClick,win32con.WM_RBUTTONDOWN) + + def SetApplicationPaths(self): + # Load the users/application paths + new_path = [] + apppath=string.splitfields(win32ui.GetProfileVal('Python','Application Path',''),';') + for path in apppath: + if len(path)>0: + new_path.append(win32ui.FullPath(path)) + for extra_num in range(1,11): + apppath=string.splitfields(win32ui.GetProfileVal('Python','Application Path %d'%extra_num,''),';') + if len(apppath) == 0: + break + for path in apppath: + if len(path)>0: + new_path.append(win32ui.FullPath(path)) + sys.path = new_path + sys.path + + def OnRClick(self,params): + " Handle right click message " + # put up the entire FILE menu! + menu = win32ui.LoadMenu(win32ui.IDR_TEXTTYPE).GetSubMenu(0) + menu.TrackPopupMenu(params[5]) # track at mouse position. + return 0 + + def OnDropFiles(self,msg): + " Handle a file being dropped from file manager " + hDropInfo = msg[2] + self.frame.SetActiveWindow() # active us + nFiles = win32api.DragQueryFile(hDropInfo) + try: + for iFile in range(0,nFiles): + fileName = win32api.DragQueryFile(hDropInfo, iFile) + win32ui.GetApp().OpenDocumentFile( fileName ) + finally: + win32api.DragFinish(hDropInfo); + + return 0 + +# No longer used by Pythonwin, as the C++ code has this same basic functionality +# but handles errors slightly better. +# It all still works, tho, so if you need similar functionality, you can use it. +# Therefore I havent deleted this code completely! +# def CallbackManager( self, ob, args = () ): +# """Manage win32 callbacks. Trap exceptions, report on them, then return 'All OK' +# to the frame-work. """ +# import traceback +# try: +# ret = apply(ob, args) +# return ret +# except: +# # take copies of the exception values, else other (handled) exceptions may get +# # copied over by the other fns called. +# win32ui.SetStatusText('An exception occured in a windows command handler.') +# t, v, tb = sys.exc_info() +# traceback.print_exception(t, v, tb.tb_next) +# try: +# sys.stdout.flush() +# except (NameError, AttributeError): +# pass + + # Command handlers. + def OnFileMRU( self, id, code ): + " Called when a File 1-n message is recieved " + fileName = win32ui.GetRecentFileList()[id - win32ui.ID_FILE_MRU_FILE1] + win32ui.GetApp().OpenDocumentFile(fileName) + + def HandleOnFileOpen( self, id, code ): + " Called when FileOpen message is received " + win32ui.GetApp().OnFileOpen() + + def HandleOnFileNew( self, id, code ): + " Called when FileNew message is received " + win32ui.GetApp().OnFileNew() + + def OnHelpAbout( self, id, code ): + " Called when HelpAbout message is received. Displays the About dialog. " + win32ui.InitRichEdit() + dlg=AboutBox() + dlg.DoModal() + +def _GetRegistryValue(key, val, default = None): + # val is registry value - None for default val. + try: + hkey = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, key) + return win32api.RegQueryValueEx(hkey, val)[0] + except win32api.error: + try: + hkey = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, key) + return win32api.RegQueryValueEx(hkey, val)[0] + except win32api.error: + return default + +scintilla = "Scintilla is Copyright 1998-2004 Neil Hodgson (http://www.scintilla.org)" +idle = "This program uses IDLE extensions by Guido van Rossum, Tim Peters and others." +contributors = "Thanks to the following people for making significant contributions: Sam Rushing, Curt Hagenlocher, Dave Brennan, Roger Burnham, Gordon McMillan, Neil Hodgson, Laramie Leavitt. (let me know if I have forgotten you!)" +# The About Box +class AboutBox(dialog.Dialog): + def __init__(self, idd=win32ui.IDD_ABOUTBOX): + dialog.Dialog.__init__(self, idd) + def OnInitDialog(self): + text = "Pythonwin - Python IDE and GUI Framework for Windows.\n\n%s\n\nPython is %s\n\n%s\n\n%s\n\n%s" % (win32ui.copyright, sys.copyright, scintilla, idle, contributors) + self.SetDlgItemText(win32ui.IDC_EDIT1, text) + # Get the build number - written by installers. + # For distutils build, read pywin32.version.txt + import distutils.sysconfig + site_packages = distutils.sysconfig.get_python_lib(plat_specific=1) + try: + build_no = open(os.path.join(site_packages, "pywin32.version.txt")).read().strip() + ver = "pywin32 build %s" % build_no + except EnvironmentError: + ver = None + if ver is None: + # See if we are Part of Active Python + ver = _GetRegistryValue("SOFTWARE\\ActiveState\\ActivePython", "CurrentVersion") + if ver is not None: + ver = "ActivePython build %s" % (ver,) + if ver is None: + ver = "" + self.SetDlgItemText(win32ui.IDC_ABOUT_VERSION, ver) + self.HookCommand(self.OnButHomePage, win32ui.IDC_BUTTON1) + + def OnButHomePage(self, id, code): + if code == win32con.BN_CLICKED: + win32api.ShellExecute(0, "open", "http://starship.python.net/crew/mhammond/win32", None, "", 1) + +def Win32RawInput(prompt=None): + "Provide raw_input() for gui apps" + # flush stderr/out first. + try: + sys.stdout.flush() + sys.stderr.flush() + except: + pass + if prompt is None: prompt = "" + ret=dialog.GetSimpleInput(prompt) + if ret==None: + raise KeyboardInterrupt, "operation cancelled" + return ret + +def Win32Input(prompt=None): + "Provide input() for gui apps" + return eval(raw_input(prompt)) + +sys.modules['__builtin__'].raw_input=Win32RawInput +sys.modules['__builtin__'].input=Win32Input + +try: + # LocatePythonFile used to be here. + # THIS WILL BE DELETED SOON. + from scriptutils import LocatePythonFile +except: + pass + +def HaveGoodGUI(): + """Returns true if we currently have a good gui available. + """ + return sys.modules.has_key("pywin.framework.startup") + +def CreateDefaultGUI( appClass = None): + """Creates a default GUI environment + """ + if appClass is None: + import intpyapp # Bring in the default app - could be param'd later. + appClass = intpyapp.InteractivePythonApp + # Create and init the app. + appClass().InitInstance() + +def CheckCreateDefaultGUI(): + """Checks and creates if necessary a default GUI environment. + """ + rc = HaveGoodGUI() + if not rc: + CreateDefaultGUI() + return rc diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/bitmap.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/bitmap.py new file mode 100644 index 000000000..3443fb197 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/bitmap.py @@ -0,0 +1,143 @@ +import win32ui +import win32con +import win32api +import string +import os +import app +import sys + +from pywin.mfc import docview, window + +bStretch = 1 + +class BitmapDocument(docview.Document): + "A bitmap document. Holds the bitmap data itself." + def __init__(self, template): + docview.Document.__init__(self, template) + self.bitmap=None + def OnNewDocument(self): + # I can not create new bitmaps. + win32ui.MessageBox("Bitmaps can not be created.") + def OnOpenDocument(self, filename): + self.bitmap=win32ui.CreateBitmap() + # init data members + f = open(filename, 'rb') + try: + try: + self.bitmap.LoadBitmapFile(f) + except IOError: + win32ui.MessageBox("Could not load the bitmap from %s" % filename) + return 0 + finally: + f.close() + self.size = self.bitmap.GetSize() + return 1 + def DeleteContents(self): + self.bitmap=None + +class BitmapView(docview.ScrollView): + "A view of a bitmap. Obtains data from document." + def __init__(self, doc): + docview.ScrollView.__init__(self, doc) + self.width = self.height = 0 + # set up message handlers + self.HookMessage (self.OnSize, win32con.WM_SIZE) + + def OnInitialUpdate(self): + doc = self.GetDocument() + if doc.bitmap: + bitmapSize = doc.bitmap.GetSize() + self.SetScrollSizes(win32con.MM_TEXT, bitmapSize) + + def OnSize (self, params): + lParam = params[3] + self.width = win32api.LOWORD(lParam) + self.height = win32api.HIWORD(lParam) + + def OnDraw (self, dc): + # set sizes used for "non stretch" mode. + doc = self.GetDocument() + if doc.bitmap is None: return + bitmapSize = doc.bitmap.GetSize() + if bStretch: + # stretch BMP. + viewRect = (0,0,self.width, self.height) + bitmapRect = (0,0,bitmapSize[0], bitmapSize[1]) + doc.bitmap.Paint(dc, viewRect, bitmapRect) + else: + # non stretch. + doc.bitmap.Paint(dc) + +class BitmapFrame(window.MDIChildWnd): + def OnCreateClient( self, createparams, context ): + borderX = win32api.GetSystemMetrics(win32con.SM_CXFRAME) + borderY = win32api.GetSystemMetrics(win32con.SM_CYFRAME) + titleY = win32api.GetSystemMetrics(win32con.SM_CYCAPTION) # includes border + # try and maintain default window pos, else adjust if cant fit + # get the main client window dimensions. + mdiClient = win32ui.GetMainFrame().GetWindow(win32con.GW_CHILD) + clientWindowRect=mdiClient.ScreenToClient(mdiClient.GetWindowRect()) + clientWindowSize=(clientWindowRect[2]-clientWindowRect[0],clientWindowRect[3]-clientWindowRect[1]) + left, top, right, bottom=mdiClient.ScreenToClient(self.GetWindowRect()) +# width, height=context.doc.size[0], context.doc.size[1] +# width = width+borderX*2 +# height= height+titleY+borderY*2-1 +# if (left+width)>clientWindowSize[0]: +# left = clientWindowSize[0] - width +# if left<0: +# left = 0 +# width = clientWindowSize[0] +# if (top+height)>clientWindowSize[1]: +# top = clientWindowSize[1] - height +# if top<0: +# top = 0 +# height = clientWindowSize[1] +# self.frame.MoveWindow((left, top, left+width, top+height),0) + window.MDIChildWnd.OnCreateClient(self, createparams, context) + return 1 + + +class BitmapTemplate(docview.DocTemplate): + def __init__(self): + docview.DocTemplate.__init__(self, win32ui.IDR_PYTHONTYPE, BitmapDocument, BitmapFrame, BitmapView) + def MatchDocType(self, fileName, fileType): + doc = self.FindOpenDocument(fileName) + if doc: return doc + ext = string.lower(os.path.splitext(fileName)[1]) + if ext =='.bmp': # removed due to PIL! or ext=='.ppm': + return win32ui.CDocTemplate_Confidence_yesAttemptNative + return win32ui.CDocTemplate_Confidence_maybeAttemptForeign +# return win32ui.CDocTemplate_Confidence_noAttempt + +# For debugging purposes, when this module may be reloaded many times. +try: + win32ui.GetApp().RemoveDocTemplate(bitmapTemplate) +except NameError: + pass + +bitmapTemplate = BitmapTemplate() +bitmapTemplate.SetDocStrings('\nBitmap\nBitmap\nBitmap (*.bmp)\n.bmp\nPythonBitmapFileType\nPython Bitmap File') +win32ui.GetApp().AddDocTemplate(bitmapTemplate) + +# This works, but just didnt make it through the code reorg. +#class PPMBitmap(Bitmap): +# def LoadBitmapFile(self, file ): +# magic=file.readline() +# if magic <> "P6\n": +# raise TypeError, "The file is not a PPM format file" +# rowcollist=string.split(file.readline()) +# cols=string.atoi(rowcollist[0]) +# rows=string.atoi(rowcollist[1]) +# file.readline() # whats this one? +# self.bitmap.LoadPPMFile(file,(cols,rows)) + + +def t(): + bitmapTemplate.OpenDocumentFile('d:\\winnt\\arcade.bmp') + #OpenBMPFile( 'd:\\winnt\\arcade.bmp') + +def demo(): + import glob + winDir=win32api.GetWindowsDirectory() + for fileName in glob.glob1(winDir, '*.bmp')[:2]: + bitmapTemplate.OpenDocumentFile(os.path.join(winDir, fileName)) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/cmdline.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/cmdline.py new file mode 100644 index 000000000..34e02891b --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/cmdline.py @@ -0,0 +1,49 @@ +# cmdline - command line utilities. +import sys +import win32ui +import string + +def ParseArgs( str ): + import string + ret=[] + pos = 0 + length=len(str) + while pos=length: + break + if str[pos]=='"': + pos=pos+1 + try: + endPos = string.index(str, '"', pos)-1 + nextPos = endPos+2 + except ValueError: + endPos=length + nextPos=endPos+1 + else: + endPos = pos + while endPos> 1 + top = (bottom - win32api.GetSystemMetrics(win32con.SM_CYICON)) >> 1 + hIcon = win32ui.GetApp().LoadIcon(self.iconId) + self.GetDC().DrawIcon((left, top), hIcon) + + # Only needed to provide a minimized icon (and this seems + # less important under win95/NT4 + def OnEraseBkgnd(self, dc): + if self.IsIconic(): + return 1 + else: + return self._obj_.OnEraseBkgnd(dc) + def OnQueryDragIcon(self): + return win32ui.GetApp().LoadIcon(self.iconId) + + def PreDoModal(self): + pass + + +class DialogApp(app.CApp): + "An application class, for an app with main dialog box" + def InitInstance(self): +# win32ui.SetProfileFileName('dlgapp.ini') + win32ui.LoadStdProfileSettings() + win32ui.EnableControlContainer() + win32ui.Enable3dControls() + self.dlg = self.frame = self.CreateDialog() + + if self.frame is None: + raise error, "No dialog was created by CreateDialog()" + return + + self._obj_.InitDlgInstance(self.dlg) + self.PreDoModal() + self.dlg.PreDoModal() + self.dlg.DoModal() + + def CreateDialog(self): + pass + def PreDoModal(self): + pass + diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/ModuleBrowser.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/ModuleBrowser.py new file mode 100644 index 000000000..eb926e188 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/ModuleBrowser.py @@ -0,0 +1,205 @@ +# ModuleBrowser.py - A view that provides a module browser for an editor document. +import pywin.mfc.docview +import win32ui +import win32con +import commctrl +import win32api +from pywin.tools import hierlist, browser +import pywin.framework.scriptutils +import afxres + +import pyclbr + +class HierListCLBRModule(hierlist.HierListItem): + def __init__(self, modName, clbrdata): + self.modName = modName + self.clbrdata = clbrdata + def GetText(self): + return self.modName + def GetSubList(self): + ret = [] + for item in self.clbrdata.values(): + if item.__class__ != pyclbr.Class: # ie, it is a pyclbr Function instance (only introduced post 1.5.2) + ret.append(HierListCLBRFunction( item ) ) + else: + ret.append(HierListCLBRClass( item) ) + ret.sort() + return ret + def IsExpandable(self): + return 1 + +class HierListCLBRItem(hierlist.HierListItem): + def __init__(self, name, file, lineno, suffix = ""): + self.name = str(name) + self.file = file + self.lineno = lineno + self.suffix = suffix + def __cmp__(self, other): + return cmp(self.name, other.name) + def GetText(self): + return self.name + self.suffix + def TakeDefaultAction(self): + if self.file: + pywin.framework.scriptutils.JumpToDocument(self.file, self.lineno, bScrollToTop = 1) + else: + win32ui.SetStatusText("Can not locate the source code for this object.") + def PerformItemSelected(self): + if self.file is None: + msg = "%s - source can not be located." % (self.name, ) + else: + msg = "%s defined at line %d of %s" % (self.name, self.lineno, self.file) + win32ui.SetStatusText(msg) + +class HierListCLBRClass(HierListCLBRItem): + def __init__(self, clbrclass, suffix = ""): + try: + name = clbrclass.name + file = clbrclass.file + lineno = clbrclass.lineno + self.super = clbrclass.super + self.methods = clbrclass.methods + except AttributeError: + name = clbrclass + file = lineno = None + self.super = []; self.methods = {} + HierListCLBRItem.__init__(self, name, file, lineno, suffix) + def __cmp__(self,other): + ret = cmp(self.name,other.name) + if ret==0 and (self is not other) and self.file==other.file: + self.methods = other.methods + self.super = other.super + self.lineno = other.lineno + return ret + def GetSubList(self): + r1 = [] + for c in self.super: + r1.append(HierListCLBRClass(c, " (Parent class)")) + r1.sort() + r2=[] + for meth, lineno in self.methods.items(): + r2.append(HierListCLBRMethod(meth, self.file, lineno)) + r2.sort() + return r1+r2 + def IsExpandable(self): + return len(self.methods) + len(self.super) + def GetBitmapColumn(self): + return 21 + +class HierListCLBRFunction(HierListCLBRItem): + def __init__(self, clbrfunc, suffix = ""): + name = clbrfunc.name + file = clbrfunc.file + lineno = clbrfunc.lineno + HierListCLBRItem.__init__(self, name, file, lineno, suffix) + def GetBitmapColumn(self): + return 22 + +class HierListCLBRMethod(HierListCLBRItem): + def GetBitmapColumn(self): + return 22 + +class HierListCLBRErrorItem(hierlist.HierListItem): + def __init__(self, text): + self.text = text + def GetText(self): + return self.text + def GetSubList(self): + return [HierListCLBRErrorItem(self.text)] + def IsExpandable(self): + return 0 + +class HierListCLBRErrorRoot(HierListCLBRErrorItem): + def IsExpandable(self): + return 1 + +class BrowserView(pywin.mfc.docview.TreeView): + def OnInitialUpdate(self): + self.list = None + rc = self._obj_.OnInitialUpdate() + self.HookMessage(self.OnSize, win32con.WM_SIZE) + self.bDirty = 0 + self.destroying = 0 + return rc + + def DestroyBrowser(self): + self.DestroyList() + + def OnActivateView(self, activate, av, dv): +# print "AV", self.bDirty, activate + if activate: + self.CheckRefreshList() + return self._obj_.OnActivateView(activate, av, dv) + + def _MakeRoot(self): + path = self.GetDocument().GetPathName() + if not path: + return HierListCLBRErrorRoot("Error: Can not browse a file until it is saved") + else: + mod, path = pywin.framework.scriptutils.GetPackageModuleName(path) + if self.bDirty: + what = "Refreshing" + # Hack for pyclbr being too smart + try: + del pyclbr._modules[mod] + except (KeyError, AttributeError): + pass + else: + what = "Building" + win32ui.SetStatusText("%s class list - please wait..." % (what,), 1) + win32ui.DoWaitCursor(1) + try: + reader = pyclbr.readmodule_ex # new version post 1.5.2 + except AttributeError: + reader = pyclbr.readmodule + try: + data = reader(mod, [path]) + if data: + return HierListCLBRModule(mod, data) + else: + return HierListCLBRErrorRoot("No Python classes in module.") + + finally: + win32ui.DoWaitCursor(0) + win32ui.SetStatusText(win32ui.LoadString(afxres.AFX_IDS_IDLEMESSAGE)) + + def DestroyList(self): + self.destroying = 1 + list = getattr(self, "list", None) # If the document was not successfully opened, we may not have a list. + self.list = None + if list is not None: + list.HierTerm() + self.destroying = 0 + + def CheckMadeList(self): + if self.list is not None or self.destroying: return + self.rootitem = root = self._MakeRoot() + self.list = list = hierlist.HierListWithItems( root, win32ui.IDB_BROWSER_HIER) + list.HierInit(self.GetParentFrame(), self) + list.SetStyle(commctrl.TVS_HASLINES | commctrl.TVS_LINESATROOT | commctrl.TVS_HASBUTTONS) + + def CheckRefreshList(self): + if self.bDirty: + if self.list is None: + self.CheckMadeList() + else: + new_root = self._MakeRoot() + if self.rootitem.__class__==new_root.__class__==HierListCLBRModule: + self.rootitem.modName = new_root.modName + self.rootitem.clbrdata = new_root.clbrdata + self.list.Refresh() + else: + self.list.AcceptRoot(self._MakeRoot()) + self.bDirty = 0 + + def OnSize(self, params): + lparam = params[3] + w = win32api.LOWORD(lparam) + h = win32api.HIWORD(lparam) + if w != 0: + self.CheckMadeList() + elif w == 0: + self.DestroyList() + return 1 + + def _UpdateUIForState(self): + self.bDirty = 1 diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/__init__.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/__init__.py new file mode 100644 index 000000000..f4b7d2fac --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/__init__.py @@ -0,0 +1,90 @@ +# __init__ for the Pythonwin editor package. +# +# We used to support optional editors - eg, color or non-color. +# +# This really isnt necessary with Scintilla, and scintilla +# is getting so deeply embedded that it was too much work. + +import win32ui, sys, win32con + +defaultCharacterFormat = (-402653169, 0, 200, 0, 0, 0, 49, 'Courier New') + +##def GetDefaultEditorModuleName(): +## import pywin +## # If someone has set pywin.editormodulename, then this is what we use +## try: +## prefModule = pywin.editormodulename +## except AttributeError: +## prefModule = win32ui.GetProfileVal("Editor","Module", "") +## return prefModule +## +##def WriteDefaultEditorModule(module): +## try: +## module = module.__name__ +## except: +## pass +## win32ui.WriteProfileVal("Editor", "Module", module) + +def LoadDefaultEditor(): + pass +## prefModule = GetDefaultEditorModuleName() +## restorePrefModule = None +## mod = None +## if prefModule: +## try: +## mod = __import__(prefModule) +## except 'xx': +## msg = "Importing your preferred editor ('%s') failed.\n\nError %s: %s\n\nAn attempt will be made to load the default editor.\n\nWould you like this editor disabled in the future?" % (prefModule, sys.exc_info()[0], sys.exc_info()[1]) +## rc = win32ui.MessageBox(msg, "Error importing editor", win32con.MB_YESNO) +## if rc == win32con.IDNO: +## restorePrefModule = prefModule +## WriteDefaultEditorModule("") +## del rc +## +## try: +## # Try and load the default one - dont catch errors here. +## if mod is None: +## prefModule = "pywin.framework.editor.color.coloreditor" +## mod = __import__(prefModule) +## +## # Get at the real module. +## mod = sys.modules[prefModule] +## +## # Do a "from mod import *" +## globals().update(mod.__dict__) +## +## finally: +## # Restore the users default editor if it failed and they requested not to disable it. +## if restorePrefModule: +## WriteDefaultEditorModule(restorePrefModule) + +def GetEditorOption(option, defaultValue, min=None, max = None): + rc = win32ui.GetProfileVal("Editor", option, defaultValue) + if min is not None and rc < min: rc = defaultValue + if max is not None and rc > max: rc = defaultValue + return rc + +def SetEditorOption(option, newValue): + win32ui.WriteProfileVal("Editor", option, newValue) + +def DeleteEditorOption(option): + try: + win32ui.WriteProfileVal("Editor", option, None) + except win32ui.error: + pass + +# Load and save font tuples +def GetEditorFontOption(option, default = None): + if default is None: default = defaultCharacterFormat + fmt = GetEditorOption( option, "" ) + if fmt == "": return default + try: + return eval(fmt) + except: + print "WARNING: Invalid font setting in registry - setting ignored" + return default + +def SetEditorFontOption(option, newValue): + SetEditorOption(option, str(newValue)) + +from pywin.framework.editor.color.coloreditor import * diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/color/__init__.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/color/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/color/coloreditor.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/color/coloreditor.py new file mode 100644 index 000000000..a675f7173 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/color/coloreditor.py @@ -0,0 +1,477 @@ +# Color Editor originally by Neil Hodgson, but restructured by mh to integrate +# even tighter into Pythonwin. +import win32ui +import win32con +import win32api +import sys + +import pywin.scintilla.keycodes +from pywin.scintilla import bindings + +from pywin.framework.editor import GetEditorOption, SetEditorOption, GetEditorFontOption, SetEditorFontOption, defaultCharacterFormat +#from pywin.framework.editor import EditorPropertyPage + +MSG_CHECK_EXTERNAL_FILE = win32con.WM_USER+1999 ## WARNING: Duplicated in document.py and editor.py + +# Define a few common markers +MARKER_BOOKMARK = 0 +MARKER_BREAKPOINT = 1 +MARKER_CURRENT = 2 + +# XXX - copied from debugger\dbgcon.py +DBGSTATE_NOT_DEBUGGING = 0 +DBGSTATE_RUNNING = 1 +DBGSTATE_BREAK = 2 + +from pywin.scintilla.document import CScintillaDocument +from pywin.framework.editor.document import EditorDocumentBase +from pywin.scintilla.scintillacon import * # For the marker definitions +import pywin.scintilla.view + +class SyntEditDocument(EditorDocumentBase): + "A SyntEdit document. " + def OnDebuggerStateChange(self, state): + self._ApplyOptionalToViews("OnDebuggerStateChange", state) + def HookViewNotifications(self, view): + EditorDocumentBase.HookViewNotifications(self, view) + view.SCISetUndoCollection(1) + def FinalizeViewCreation(self, view): + EditorDocumentBase.FinalizeViewCreation(self, view) + if view==self.GetFirstView(): + self.GetDocTemplate().CheckIDLEMenus(view.idle) + +SyntEditViewParent=pywin.scintilla.view.CScintillaView +class SyntEditView(SyntEditViewParent): + "A view of a SyntEdit. Obtains data from document." + def __init__(self, doc): + SyntEditViewParent.__init__(self, doc) + self.bCheckingFile = 0 + + def OnInitialUpdate(self): + SyntEditViewParent.OnInitialUpdate(self) + + self.HookMessage(self.OnRClick,win32con.WM_RBUTTONDOWN) + + for id in [win32ui.ID_VIEW_FOLD_COLLAPSE, win32ui.ID_VIEW_FOLD_COLLAPSE_ALL, + win32ui.ID_VIEW_FOLD_EXPAND, win32ui.ID_VIEW_FOLD_EXPAND_ALL]: + + self.HookCommand(self.OnCmdViewFold, id) + self.HookCommandUpdate(self.OnUpdateViewFold, id) + self.HookCommand(self.OnCmdViewFoldTopLevel, win32ui.ID_VIEW_FOLD_TOPLEVEL) + + # Define the markers +# self.SCIMarkerDeleteAll() + self.SCIMarkerDefineAll(MARKER_BOOKMARK, SC_MARK_ROUNDRECT, win32api.RGB(0x0, 0x0, 0x0), win32api.RGB(0, 0xff, 0xff)) + + self.SCIMarkerDefine(MARKER_CURRENT, SC_MARK_ARROW) + self.SCIMarkerSetBack(MARKER_CURRENT, win32api.RGB(0xff, 0xff, 0x00)) + + # Define the folding markers + if 1: #traditional markers + self.SCIMarkerDefineAll(SC_MARKNUM_FOLDEROPEN, SC_MARK_MINUS, win32api.RGB(0xff, 0xff, 0xff), win32api.RGB(0, 0, 0)) + self.SCIMarkerDefineAll(SC_MARKNUM_FOLDER, SC_MARK_PLUS, win32api.RGB(0xff, 0xff, 0xff), win32api.RGB(0, 0, 0)) + self.SCIMarkerDefineAll(SC_MARKNUM_FOLDERSUB, SC_MARK_EMPTY, win32api.RGB(0xff, 0xff, 0xff), win32api.RGB(0, 0, 0)) + self.SCIMarkerDefineAll(SC_MARKNUM_FOLDERTAIL, SC_MARK_EMPTY, win32api.RGB(0xff, 0xff, 0xff), win32api.RGB(0, 0, 0)) + self.SCIMarkerDefineAll(SC_MARKNUM_FOLDEREND, SC_MARK_EMPTY, win32api.RGB(0xff, 0xff, 0xff), win32api.RGB(0, 0, 0)) + self.SCIMarkerDefineAll(SC_MARKNUM_FOLDEROPENMID, SC_MARK_EMPTY, win32api.RGB(0xff, 0xff, 0xff), win32api.RGB(0, 0, 0)) + self.SCIMarkerDefineAll(SC_MARKNUM_FOLDERMIDTAIL, SC_MARK_EMPTY, win32api.RGB(0xff, 0xff, 0xff), win32api.RGB(0, 0, 0)) + else: # curved markers + self.SCIMarkerDefineAll(SC_MARKNUM_FOLDEROPEN, SC_MARK_CIRCLEMINUS, win32api.RGB(0xff, 0xff, 0xff), win32api.RGB(0, 0, 0)) + self.SCIMarkerDefineAll(SC_MARKNUM_FOLDER, SC_MARK_CIRCLEPLUS, win32api.RGB(0xff, 0xff, 0xff), win32api.RGB(0, 0, 0)) + self.SCIMarkerDefineAll(SC_MARKNUM_FOLDERSUB, SC_MARK_VLINE, win32api.RGB(0xff, 0xff, 0xff), win32api.RGB(0, 0, 0)) + self.SCIMarkerDefineAll(SC_MARKNUM_FOLDERTAIL, SC_MARK_LCORNERCURVE, win32api.RGB(0xff, 0xff, 0xff), win32api.RGB(0, 0, 0)) + self.SCIMarkerDefineAll(SC_MARKNUM_FOLDEREND, SC_MARK_CIRCLEPLUSCONNECTED, win32api.RGB(0xff, 0xff, 0xff), win32api.RGB(0, 0, 0)) + self.SCIMarkerDefineAll(SC_MARKNUM_FOLDEROPENMID, SC_MARK_CIRCLEMINUSCONNECTED, win32api.RGB(0xff, 0xff, 0xff), win32api.RGB(0, 0, 0)) + self.SCIMarkerDefineAll(SC_MARKNUM_FOLDERMIDTAIL, SC_MARK_TCORNERCURVE, win32api.RGB(0xff, 0xff, 0xff), win32api.RGB(0, 0, 0)) + + self.SCIMarkerDefine(MARKER_BREAKPOINT, SC_MARK_CIRCLE) + # Marker background depends on debugger state + self.SCIMarkerSetFore(MARKER_BREAKPOINT, win32api.RGB(0x0, 0, 0)) + # Get the current debugger state. + try: + import pywin.debugger + if pywin.debugger.currentDebugger is None: + state = DBGSTATE_NOT_DEBUGGING + else: + state = pywin.debugger.currentDebugger.debuggerState + except ImportError: + state = DBGSTATE_NOT_DEBUGGING + self.OnDebuggerStateChange(state) + + def _GetSubConfigNames(self): + return ["editor"] # Allow [Keys:Editor] sections to be specific to us + + def DoConfigChange(self): + SyntEditViewParent.DoConfigChange(self) + tabSize = GetEditorOption("Tab Size", 4, 2) + indentSize = GetEditorOption("Indent Size", 4, 2) + bUseTabs = GetEditorOption("Use Tabs", 0) + bSmartTabs = GetEditorOption("Smart Tabs", 1) + ext = self.idle.IDLEExtension("AutoIndent") # Required extension. + + self.SCISetViewWS( GetEditorOption("View Whitespace", 0) ) + self.SCISetViewEOL( GetEditorOption("View EOL", 0) ) + self.SCISetIndentationGuides( GetEditorOption("View Indentation Guides", 0) ) + + if GetEditorOption("Right Edge Enabled", 0): + mode = EDGE_BACKGROUND + else: + mode = EDGE_NONE + self.SCISetEdgeMode(mode) + self.SCISetEdgeColumn( GetEditorOption("Right Edge Column", 75) ) + self.SCISetEdgeColor( GetEditorOption("Right Edge Color", win32api.RGB(0xef, 0xef, 0xef))) + + width = GetEditorOption("Marker Margin Width", 16) + self.SCISetMarginWidthN(1, width) + width = GetEditorOption("Folding Margin Width", 12) + self.SCISetMarginWidthN(2, width) + width = GetEditorOption("Line Number Margin Width", 0) + self.SCISetMarginWidthN(0, width) + self.bFolding = GetEditorOption("Enable Folding", 1) + fold_flags = 0 + self.SendScintilla(SCI_SETMODEVENTMASK, SC_MOD_CHANGEFOLD); + if self.bFolding: + if GetEditorOption("Fold Lines", 1): + fold_flags = 16 + + self.SCISetProperty("fold", self.bFolding) + self.SCISetFoldFlags(fold_flags) + + tt_color = GetEditorOption("Tab Timmy Color", win32api.RGB(0xff, 0, 0)) + self.SendScintilla(SCI_INDICSETFORE, 1, tt_color) + + tt_use = GetEditorOption("Use Tab Timmy", 1) + if tt_use: + self.SCISetProperty("tab.timmy.whinge.level", "1") + + # Auto-indent has very complicated behaviour. In a nutshell, the only + # way to get sensible behaviour from it is to ensure tabwidth != indentsize. + # Further, usetabs will only ever go from 1->0, never 0->1. + # This is _not_ the behaviour Pythonwin wants: + # * Tab width is arbitary, so should have no impact on smarts. + # * bUseTabs setting should reflect how new files are created, and + # if Smart Tabs disabled, existing files are edited + # * If "Smart Tabs" is enabled, bUseTabs should have no bearing + # for existing files (unless of course no context can be determined) + # + # So for smart tabs we configure the widget with completely dummy + # values (ensuring tabwidth != indentwidth), ask it to guess, then + # look at the values it has guessed, and re-configure + if bSmartTabs: + ext.config(usetabs=1, tabwidth=5, indentwidth=4) + ext.set_indentation_params(1) + if ext.indentwidth==5: + # Either 5 literal spaces, or a single tab character. Assume a tab + usetabs = 1 + indentwidth = tabSize + else: + # Either Indented with spaces, and indent size has been guessed or + # an empty file (or no context found - tough!) + if self.GetTextLength()==0: # emtpy + usetabs = bUseTabs + indentwidth = indentSize + else: # guessed. + indentwidth = ext.indentwidth + usetabs = 0 + # Tab size can never be guessed - set at user preference. + ext.config(usetabs=usetabs, indentwidth=indentwidth, tabwidth=tabSize) + else: + # Dont want smart-tabs - just set the options! + ext.config(usetabs=bUseTabs, tabwidth=tabSize, indentwidth=indentSize) + self.SCISetIndent(indentSize) + self.SCISetTabWidth(tabSize) + + def OnDebuggerStateChange(self, state): + if state == DBGSTATE_NOT_DEBUGGING: + # Indicate breakpoints arent really usable. + # Not quite white - useful when no marker margin, so set as background color. + self.SCIMarkerSetBack(MARKER_BREAKPOINT, win32api.RGB(0xef, 0xef, 0xef)) + else: + # A light-red, so still readable when no marker margin. + self.SCIMarkerSetBack(MARKER_BREAKPOINT, win32api.RGB(0xff, 0x80, 0x80)) + + def HookDocumentHandlers(self): + SyntEditViewParent.HookDocumentHandlers(self) + self.HookMessage(self.OnCheckExternalDocumentUpdated,MSG_CHECK_EXTERNAL_FILE) + + def HookHandlers(self): + SyntEditViewParent.HookHandlers(self) + self.HookMessage(self.OnSetFocus, win32con.WM_SETFOCUS) + + def _PrepareUserStateChange(self): + return self.GetSel(), self.GetFirstVisibleLine() + def _EndUserStateChange(self, info): + scrollOff = info[1] - self.GetFirstVisibleLine() + if scrollOff: + self.LineScroll(scrollOff) + # Make sure we dont reset the cursor beyond the buffer. + max = self.GetTextLength() + newPos = min(info[0][0], max), min(info[0][1], max) + self.SetSel(newPos) + + ####################################### + # The Windows Message or Notify handlers. + ####################################### + def OnMarginClick(self, std, extra): + notify = self.SCIUnpackNotifyMessage(extra) + if notify.margin==2: # Our fold margin + line_click = self.LineFromChar(notify.position) +# max_line = self.GetLineCount() + if self.SCIGetFoldLevel(line_click) & SC_FOLDLEVELHEADERFLAG: + # If a fold point. + self.SCIToggleFold(line_click) + return 1 + + def OnSetFocus(self,msg): + # Even though we use file change notifications, we should be very sure about it here. + self.OnCheckExternalDocumentUpdated(msg) + return 1 + + def OnCheckExternalDocumentUpdated(self, msg): + if self.bCheckingFile: return + self.bCheckingFile = 1 + self.GetDocument().CheckExternalDocumentUpdated() + self.bCheckingFile = 0 + + def OnRClick(self,params): + menu = win32ui.CreatePopupMenu() + self.AppendMenu(menu, "&Locate module", "LocateModule") + self.AppendMenu(menu, flags=win32con.MF_SEPARATOR) + self.AppendMenu(menu, "&Undo", "EditUndo") + self.AppendMenu(menu, '&Redo', 'EditRedo') + self.AppendMenu(menu, flags=win32con.MF_SEPARATOR) + self.AppendMenu(menu, 'Cu&t', 'EditCut') + self.AppendMenu(menu, '&Copy', 'EditCopy') + self.AppendMenu(menu, '&Paste', 'EditPaste') + self.AppendMenu(menu, flags=win32con.MF_SEPARATOR) + self.AppendMenu(menu, '&Select all', 'EditSelectAll') + self.AppendMenu(menu, 'View &Whitespace', 'ViewWhitespace', checked=self.SCIGetViewWS()) + self.AppendMenu(menu, "&Fixed Font", "ViewFixedFont", checked = self._GetColorizer().bUseFixed) + self.AppendMenu(menu, flags=win32con.MF_SEPARATOR) + self.AppendMenu(menu, "&Goto line...", "GotoLine") + + submenu = win32ui.CreatePopupMenu() + newitems = self.idle.GetMenuItems("edit") + for text, event in newitems: + self.AppendMenu(submenu, text, event) + + flags=win32con.MF_STRING|win32con.MF_ENABLED|win32con.MF_POPUP + menu.AppendMenu(flags, submenu.GetHandle(), "&Source code") + + flags = win32con.TPM_LEFTALIGN|win32con.TPM_LEFTBUTTON|win32con.TPM_RIGHTBUTTON + menu.TrackPopupMenu(params[5], flags, self) + return 0 + def OnCmdViewFold(self, cid, code): # Handle the menu command + if cid == win32ui.ID_VIEW_FOLD_EXPAND_ALL: + self.FoldExpandAllEvent(None) + elif cid == win32ui.ID_VIEW_FOLD_EXPAND: + self.FoldExpandEvent(None) + elif cid == win32ui.ID_VIEW_FOLD_COLLAPSE_ALL: + self.FoldCollapseAllEvent(None) + elif cid == win32ui.ID_VIEW_FOLD_COLLAPSE: + self.FoldCollapseEvent(None) + else: + print "Unknown collapse/expand ID" + def OnUpdateViewFold(self, cmdui): # Update the tick on the UI. + if not self.bFolding: + cmdui.Enable(0) + return + id = cmdui.m_nID + if id in [win32ui.ID_VIEW_FOLD_EXPAND_ALL, win32ui.ID_VIEW_FOLD_COLLAPSE_ALL]: + cmdui.Enable() + else: + enable = 0 + lineno = self.LineFromChar(self.GetSel()[0]) + foldable = self.SCIGetFoldLevel(lineno) & SC_FOLDLEVELHEADERFLAG + is_expanded = self.SCIGetFoldExpanded(lineno) + if id == win32ui.ID_VIEW_FOLD_EXPAND: + if foldable and not is_expanded: + enable = 1 + elif id == win32ui.ID_VIEW_FOLD_COLLAPSE: + if foldable and is_expanded: + enable = 1 + cmdui.Enable(enable) + + def OnCmdViewFoldTopLevel(self, cid, code): # Handle the menu command + self.FoldTopLevelEvent(None) + + ####################################### + # The Events + ####################################### + def ToggleBookmarkEvent(self, event, pos = -1): + """Toggle a bookmark at the specified or current position + """ + if pos==-1: + pos, end = self.GetSel() + startLine = self.LineFromChar(pos) + self.GetDocument().MarkerToggle(startLine+1, MARKER_BOOKMARK) + return 0 + + def GotoNextBookmarkEvent(self, event, fromPos=-1): + """ Move to the next bookmark + """ + if fromPos==-1: + fromPos, end = self.GetSel() + startLine = self.LineFromChar(fromPos)+1 # Zero based line to start + nextLine = self.GetDocument().MarkerGetNext(startLine+1, MARKER_BOOKMARK)-1 + if nextLine<0: + nextLine = self.GetDocument().MarkerGetNext(0, MARKER_BOOKMARK)-1 + if nextLine <0 or nextLine == startLine-1: + win32api.MessageBeep() + else: + self.SCIEnsureVisible(nextLine) + self.SCIGotoLine(nextLine) + return 0 + + def TabKeyEvent(self, event): + """Insert an indent. If no selection, a single indent, otherwise a block indent + """ + # Handle auto-complete first. + if self.SCIAutoCActive(): + self.SCIAutoCComplete() + return 0 + # Call the IDLE event. + return self.bindings.fire("<>", event) + + def EnterKeyEvent(self, event): + """Handle the enter key with special handling for auto-complete + """ + # Handle auto-complete first. + if self.SCIAutoCActive(): + self.SCIAutoCCancel() + # Call the IDLE event. + return self.bindings.fire("<>", event) + + def ShowInteractiveWindowEvent(self, event): + import pywin.framework.interact + pywin.framework.interact.ShowInteractiveWindow() + + def FoldTopLevelEvent(self, event = None): + win32ui.DoWaitCursor(1) + try: + self.Colorize() + maxLine = self.GetLineCount() + # Find the first line, and check out its state. + for lineSeek in xrange(maxLine): + if self.SCIGetFoldLevel(lineSeek) & SC_FOLDLEVELHEADERFLAG: + expanding = not self.SCIGetFoldExpanded(lineSeek) + break + else: + # no folds here! + return + for lineSeek in xrange(lineSeek, maxLine): + level = self.SCIGetFoldLevel(lineSeek) + level_no = level & SC_FOLDLEVELNUMBERMASK - SC_FOLDLEVELBASE + is_header = level & SC_FOLDLEVELHEADERFLAG + # print lineSeek, level_no, is_header + if level_no == 0 and is_header: + if (expanding and not self.SCIGetFoldExpanded(lineSeek)) or \ + (not expanding and self.SCIGetFoldExpanded(lineSeek)): + self.SCIToggleFold(lineSeek) + finally: + win32ui.DoWaitCursor(-1) + + def FoldExpandEvent(self, event): + if not self.bFolding: + win32api.MessageBeep() + return + win32ui.DoWaitCursor(1) + lineno = self.LineFromChar(self.GetSel()[0]) + if self.SCIGetFoldLevel(lineno) & SC_FOLDLEVELHEADERFLAG and \ + not self.SCIGetFoldExpanded(lineno): + self.SCIToggleFold(lineno) + win32ui.DoWaitCursor(-1) + + def FoldExpandAllEvent(self, event): + if not self.bFolding: + win32api.MessageBeep() + return + win32ui.DoWaitCursor(1) + for lineno in xrange(0, self.GetLineCount()): + if self.SCIGetFoldLevel(lineno) & SC_FOLDLEVELHEADERFLAG and \ + not self.SCIGetFoldExpanded(lineno): + self.SCIToggleFold(lineno) + win32ui.DoWaitCursor(-1) + + def FoldCollapseEvent(self, event): + if not self.bFolding: + win32api.MessageBeep() + return + win32ui.DoWaitCursor(1) + lineno = self.LineFromChar(self.GetSel()[0]) + if self.SCIGetFoldLevel(lineno) & SC_FOLDLEVELHEADERFLAG and \ + self.SCIGetFoldExpanded(lineno): + self.SCIToggleFold(lineno) + win32ui.DoWaitCursor(-1) + + def FoldCollapseAllEvent(self, event): + if not self.bFolding: + win32api.MessageBeep() + return + win32ui.DoWaitCursor(1) + self.Colorize() + for lineno in xrange(0, self.GetLineCount()): + if self.SCIGetFoldLevel(lineno) & SC_FOLDLEVELHEADERFLAG and \ + self.SCIGetFoldExpanded(lineno): + self.SCIToggleFold(lineno) + win32ui.DoWaitCursor(-1) + + +from pywin.framework.editor.frame import EditorFrame +class SplitterFrame(EditorFrame): + def OnCreate(self, cs): + self.HookCommand(self.OnWindowSplit, win32ui.ID_WINDOW_SPLIT) + return 1 + def OnWindowSplit(self, id, code): + self.GetDlgItem(win32ui.AFX_IDW_PANE_FIRST).DoKeyboardSplit() + return 1 + +from pywin.framework.editor.template import EditorTemplateBase +class SyntEditTemplate(EditorTemplateBase): + def __init__(self, res=win32ui.IDR_TEXTTYPE, makeDoc=None, makeFrame=None, makeView=None): + if makeDoc is None: makeDoc = SyntEditDocument + if makeView is None: makeView = SyntEditView + if makeFrame is None: makeFrame = SplitterFrame + self.bSetMenus = 0 + EditorTemplateBase.__init__(self, res, makeDoc, makeFrame, makeView) + + def CheckIDLEMenus(self, idle): + if self.bSetMenus: return + self.bSetMenus = 1 + + submenu = win32ui.CreatePopupMenu() + newitems = idle.GetMenuItems("edit") + flags=win32con.MF_STRING|win32con.MF_ENABLED + for text, event in newitems: + id = bindings.event_to_commands.get(event) + if id is not None: + keyname = pywin.scintilla.view.configManager.get_key_binding( event, ["editor"] ) + if keyname is not None: + text = text + "\t" + keyname + submenu.AppendMenu(flags, id, text) + + mainMenu = self.GetSharedMenu() + editMenu = mainMenu.GetSubMenu(1) + editMenu.AppendMenu(win32con.MF_SEPARATOR, 0, "") + editMenu.AppendMenu(win32con.MF_STRING | win32con.MF_POPUP | win32con.MF_ENABLED, submenu.GetHandle(), "&Source Code") + + def _CreateDocTemplate(self, resourceId): + return win32ui.CreateDocTemplate(resourceId) + + def CreateWin32uiDocument(self): + return self.DoCreateDoc() + + def GetPythonPropertyPages(self): + """Returns a list of property pages + """ + from pywin.scintilla import configui + return EditorTemplateBase.GetPythonPropertyPages(self) + [configui.ScintillaFormatPropertyPage()] + +# For debugging purposes, when this module may be reloaded many times. +try: + win32ui.GetApp().RemoveDocTemplate(editorTemplate) +except NameError: + pass + +editorTemplate = SyntEditTemplate() +win32ui.GetApp().AddDocTemplate(editorTemplate) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/configui.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/configui.py new file mode 100644 index 000000000..b0f879368 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/configui.py @@ -0,0 +1,255 @@ +from pywin.mfc import dialog +import document +import win32ui +import win32con +import win32api + +from pywin.framework.editor import GetEditorOption, SetEditorOption, DeleteEditorOption, GetEditorFontOption, SetEditorFontOption, defaultCharacterFormat, editorTemplate +import pywin.scintilla.config + +# The standard 16 color VGA palette should always be possible +paletteVGA = ( ("Black",0,0,0), ("Navy",0,0,128), ("Green",0,128,0), ("Cyan",0,128,128), + ("Maroon",128,0,0), ("Purple",128,0,128), ("Olive",128,128,0), ("Gray",128,128,128), + ("Silver",192,192,192), ("Blue",0,0,255), ("Lime",0,255,0), ("Aqua",0,255,255), + ("Red",255,0,0), ("Fuchsia",255,0,255), ("Yellow",255,255,0), ("White",255,255,255) ) + +###################################################### +# +# Property Page for editor options +# +class EditorPropertyPage(dialog.PropertyPage): + def __init__(self): + dialog.PropertyPage.__init__(self, win32ui.IDD_PP_EDITOR) + self.autooptions = [] + self._AddEditorOption(win32ui.IDC_AUTO_RELOAD, "i", "Auto Reload", 1) + self._AddEditorOption(win32ui.IDC_COMBO1, "i", "Backup Type", document.BAK_DOT_BAK_BAK_DIR) + self._AddEditorOption(win32ui.IDC_AUTOCOMPLETE, "i", "Autocomplete Attributes", 1) + self._AddEditorOption(win32ui.IDC_CALLTIPS, "i", "Show Call Tips", 1) + self._AddEditorOption(win32ui.IDC_MARGIN_LINENUMBER, "i", "Line Number Margin Width", 0) + self._AddEditorOption(win32ui.IDC_RADIO1, "i", "MarkersInMargin", None) + self._AddEditorOption(win32ui.IDC_MARGIN_MARKER, "i", "Marker Margin Width", None) + self["Marker Margin Width"] = GetEditorOption("Marker Margin Width", 16) + + # Folding + self._AddEditorOption(win32ui.IDC_MARGIN_FOLD, "i", "Fold Margin Width", 20) + self._AddEditorOption(win32ui.IDC_FOLD_ENABLE, "i", "Enable Folding", 1) + self._AddEditorOption(win32ui.IDC_FOLD_ON_OPEN, "i", "Fold On Open", 0) + self._AddEditorOption(win32ui.IDC_FOLD_SHOW_LINES, "i", "Fold Lines", 1) + + # Right edge. + self._AddEditorOption(win32ui.IDC_RIGHTEDGE_ENABLE, "i", "Right Edge Enabled", 0) + self._AddEditorOption(win32ui.IDC_RIGHTEDGE_COLUMN, "i", "Right Edge Column", 75) + + # Source control, etc + self.AddDDX(win32ui.IDC_VSS_INTEGRATE, "bVSS") + self.AddDDX(win32ui.IDC_KEYBOARD_CONFIG, "Configs", "l") + self["Configs"] = pywin.scintilla.config.find_config_files() + + + + def _AddEditorOption(self, idd, typ, optionName, defaultVal): + self.AddDDX(idd, optionName, typ) + # some options are "derived" - ie, can be implied from others + # (eg, "view markers in background" is implied from "markerMarginWidth==0" + # So we don't actually store these values, but they do still get DDX support. + if defaultVal is not None: + self[optionName] = GetEditorOption(optionName, defaultVal) + self.autooptions.append((optionName, defaultVal)) + + def OnInitDialog(self): + for name, val in self.autooptions: + self[name] = GetEditorOption(name, val) + + # Note that these MUST be in the same order as the BAK constants. + cbo = self.GetDlgItem(win32ui.IDC_COMBO1) + cbo.AddString("None") + cbo.AddString(".BAK File") + cbo.AddString("TEMP dir") + cbo.AddString("Own dir") + + # Source Safe + bVSS = GetEditorOption("Source Control Module", "") == "pywin.framework.editor.vss" + self['bVSS'] = bVSS + + edit = self.GetDlgItem(win32ui.IDC_RIGHTEDGE_SAMPLE) + edit.SetWindowText("Sample Color") + + rc = dialog.PropertyPage.OnInitDialog(self) + + try: + self.GetDlgItem(win32ui.IDC_KEYBOARD_CONFIG).SelectString(-1, GetEditorOption("Keyboard Config", "default")) + except win32ui.error: + import traceback + traceback.print_exc() + pass + + self.HookCommand(self.OnButSimple, win32ui.IDC_FOLD_ENABLE) + self.HookCommand(self.OnButSimple, win32ui.IDC_RADIO1) + self.HookCommand(self.OnButSimple, win32ui.IDC_RADIO2) + self.HookCommand(self.OnButSimple, win32ui.IDC_RIGHTEDGE_ENABLE) + self.HookCommand(self.OnButEdgeColor, win32ui.IDC_RIGHTEDGE_DEFINE) + + butMarginEnabled = self['Marker Margin Width'] > 0 + self.GetDlgItem(win32ui.IDC_RADIO1).SetCheck(butMarginEnabled) + self.GetDlgItem(win32ui.IDC_RADIO2).SetCheck(not butMarginEnabled) + + self.edgeColor = self.initialEdgeColor = GetEditorOption("Right Edge Color", win32api.RGB(0xef, 0xef, 0xef)) + + self.UpdateUIForState() + + return rc + + def OnButSimple(self, id, code): + if code == win32con.BN_CLICKED: + self.UpdateUIForState() + + def OnButEdgeColor(self, id, code): + if code == win32con.BN_CLICKED: + d = win32ui.CreateColorDialog(self.edgeColor, 0, self) + # Ensure the current color is a custom color (as it may not be in the swatch) + # plus some other nice gray scales. + ccs = [self.edgeColor] + for c in range(0xef, 0x4f, -0x10): + ccs.append(win32api.RGB(c,c,c)) + d.SetCustomColors( ccs ) + if d.DoModal() == win32con.IDOK: + self.edgeColor = d.GetColor() + self.UpdateUIForState() + + def UpdateUIForState(self): + folding = self.GetDlgItem(win32ui.IDC_FOLD_ENABLE).GetCheck() + self.GetDlgItem(win32ui.IDC_FOLD_ON_OPEN).EnableWindow(folding) + self.GetDlgItem(win32ui.IDC_FOLD_SHOW_LINES).EnableWindow(folding) + + widthEnabled = self.GetDlgItem(win32ui.IDC_RADIO1).GetCheck() + self.GetDlgItem(win32ui.IDC_MARGIN_MARKER).EnableWindow(widthEnabled) + self.UpdateData() # Ensure self[] is up to date with the control data. + if widthEnabled and self["Marker Margin Width"] == 0: + self["Marker Margin Width"] = 16 + self.UpdateData(0) # Ensure control up to date with self[] + + # Right edge + edgeEnabled = self.GetDlgItem(win32ui.IDC_RIGHTEDGE_ENABLE).GetCheck() + self.GetDlgItem(win32ui.IDC_RIGHTEDGE_COLUMN).EnableWindow(edgeEnabled) + self.GetDlgItem(win32ui.IDC_RIGHTEDGE_SAMPLE).EnableWindow(edgeEnabled) + self.GetDlgItem(win32ui.IDC_RIGHTEDGE_DEFINE).EnableWindow(edgeEnabled) + + edit = self.GetDlgItem(win32ui.IDC_RIGHTEDGE_SAMPLE) + edit.SetBackgroundColor(0, self.edgeColor) + + def OnOK(self): + for name, defVal in self.autooptions: + SetEditorOption(name, self[name]) + # Margin width gets handled differently. + if self['MarkersInMargin'] == 0: + SetEditorOption("Marker Margin Width", self["Marker Margin Width"]) + else: + SetEditorOption("Marker Margin Width", 0) + if self.edgeColor != self.initialEdgeColor: + SetEditorOption("Right Edge Color", self.edgeColor) + if self['bVSS']: + SetEditorOption("Source Control Module", "pywin.framework.editor.vss") + else: + if GetEditorOption("Source Control Module", "")=='pywin.framework.editor.vss': + SetEditorOption("Source Control Module", "") + # Keyboard config + configname = self.GetDlgItem(win32ui.IDC_KEYBOARD_CONFIG).GetWindowText() + if configname: + if configname == "default": + DeleteEditorOption("Keyboard Config") + else: + SetEditorOption("Keyboard Config", configname) + + import pywin.scintilla.view + pywin.scintilla.view.LoadConfiguration() + + # Now tell all views we have changed. +## for doc in editorTemplate.GetDocumentList(): +## for view in doc.GetAllViews(): +## try: +## fn = view.OnConfigChange +## except AttributeError: +## continue +## fn() + return 1 + +class EditorWhitespacePropertyPage(dialog.PropertyPage): + def __init__(self): + dialog.PropertyPage.__init__(self, win32ui.IDD_PP_TABS) + self.autooptions = [] + self._AddEditorOption(win32ui.IDC_TAB_SIZE, "i", "Tab Size", 4) + self._AddEditorOption(win32ui.IDC_INDENT_SIZE, "i", "Indent Size", 4) + self._AddEditorOption(win32ui.IDC_USE_SMART_TABS, "i", "Smart Tabs", 1) + self._AddEditorOption(win32ui.IDC_VIEW_WHITESPACE, "i", "View Whitespace", 0) + self._AddEditorOption(win32ui.IDC_VIEW_EOL, "i", "View EOL", 0) + self._AddEditorOption(win32ui.IDC_VIEW_INDENTATIONGUIDES, "i", "View Indentation Guides", 0) + + def _AddEditorOption(self, idd, typ, optionName, defaultVal): + self.AddDDX(idd, optionName, typ) + self[optionName] = GetEditorOption(optionName, defaultVal) + self.autooptions.append((optionName, defaultVal)) + + def OnInitDialog(self): + for name, val in self.autooptions: + self[name] = GetEditorOption(name, val) + + rc = dialog.PropertyPage.OnInitDialog(self) + + idc = win32ui.IDC_TABTIMMY_NONE + if GetEditorOption("Use Tab Timmy", 1): + idc = win32ui.IDC_TABTIMMY_IND + self.GetDlgItem(idc).SetCheck(1) + + idc = win32ui.IDC_RADIO1 + if GetEditorOption("Use Tabs", 0): + idc = win32ui.IDC_USE_TABS + self.GetDlgItem(idc).SetCheck(1) + + tt_color = GetEditorOption("Tab Timmy Color", win32api.RGB(0xff, 0, 0)) + self.cbo = self.GetDlgItem(win32ui.IDC_COMBO1) + for c in paletteVGA: + self.cbo.AddString(c[0]) + sel = 0 + for c in paletteVGA: + if tt_color == win32api.RGB(c[1], c[2], c[3]): + break + sel = sel + 1 + else: + sel = -1 + self.cbo.SetCurSel(sel) + self.HookCommand(self.OnButSimple, win32ui.IDC_TABTIMMY_NONE) + self.HookCommand(self.OnButSimple, win32ui.IDC_TABTIMMY_IND) + self.HookCommand(self.OnButSimple, win32ui.IDC_TABTIMMY_BG) + # Set ranges for the spinners. + for spinner_id in [win32ui.IDC_SPIN1, win32ui.IDC_SPIN2]: + spinner = self.GetDlgItem(spinner_id) + spinner.SetRange(1, 16) + return rc + + def OnButSimple(self, id, code): + if code == win32con.BN_CLICKED: + self.UpdateUIForState() + + def UpdateUIForState(self): + timmy = self.GetDlgItem(win32ui.IDC_TABTIMMY_NONE).GetCheck() + self.GetDlgItem(win32ui.IDC_COMBO1).EnableWindow(not timmy) + + def OnOK(self): + for name, defVal in self.autooptions: + SetEditorOption(name, self[name]) + + SetEditorOption("Use Tabs", self.GetDlgItem(win32ui.IDC_USE_TABS).GetCheck()) + + SetEditorOption("Use Tab Timmy", self.GetDlgItem(win32ui.IDC_TABTIMMY_IND).GetCheck()) + c = paletteVGA[self.cbo.GetCurSel()] + SetEditorOption("Tab Timmy Color", win32api.RGB(c[1], c[2], c[3])) + + return 1 + +def testpp(): + ps = dialog.PropertySheet("Editor Options") + ps.AddPage(EditorWhitespacePropertyPage()) + ps.DoModal() + +if __name__=='__main__': + testpp() \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/document.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/document.py new file mode 100644 index 000000000..4e7dae734 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/document.py @@ -0,0 +1,310 @@ +# We no longer support the old, non-colour editor! + +from pywin.mfc import docview, object +from pywin.framework.editor import GetEditorOption +import win32ui +import os +import win32con +import string +import traceback +import win32api + +BAK_NONE=0 +BAK_DOT_BAK=1 +BAK_DOT_BAK_TEMP_DIR=2 +BAK_DOT_BAK_BAK_DIR=3 + +MSG_CHECK_EXTERNAL_FILE = win32con.WM_USER+1999 ## WARNING: Duplicated in editor.py and coloreditor.py + +import pywin.scintilla.document +ParentEditorDocument=pywin.scintilla.document.CScintillaDocument +class EditorDocumentBase(ParentEditorDocument): + def __init__(self, template): + self.bAutoReload = GetEditorOption("Auto Reload", 1) + self.bDeclinedReload = 0 # Has the user declined to reload. + self.fileStat = None + self.bReportedFileNotFound = 0 + + # what sort of bak file should I create. + # default to write to %temp%/bak/filename.ext + self.bakFileType=GetEditorOption("Backup Type", BAK_DOT_BAK_BAK_DIR) + + self.watcherThread = FileWatchingThread(self) + self.watcherThread.CreateThread() + # Should I try and use VSS integration? + self.scModuleName=GetEditorOption("Source Control Module", "") + self.scModule = None # Loaded when first used. + # Skip the direct parent + object.CmdTarget.__init__(self, template.CreateWin32uiDocument()) + + def OnCloseDocument(self ): + self.watcherThread.SignalStop() + return self._obj_.OnCloseDocument() + +# def OnOpenDocument(self, name): +# rc = ParentEditorDocument.OnOpenDocument(self, name) +# self.GetFirstView()._SetLoadedText(self.text) +# self._DocumentStateChanged() +# return rc + + def OnSaveDocument( self, fileName ): + win32ui.SetStatusText("Saving file...",1) + # rename to bak if required. + dir, basename = os.path.split(fileName) + if self.bakFileType==BAK_DOT_BAK: + bakFileName=dir+'\\'+os.path.splitext(basename)[0]+'.bak' + elif self.bakFileType==BAK_DOT_BAK_TEMP_DIR: + bakFileName=win32api.GetTempPath()+'\\'+os.path.splitext(basename)[0]+'.bak' + elif self.bakFileType==BAK_DOT_BAK_BAK_DIR: + tempPath=os.path.join(win32api.GetTempPath(),'bak') + try: + os.mkdir(tempPath,0) + except os.error: + pass + bakFileName=os.path.join(tempPath,basename) + try: + os.unlink(bakFileName) # raise NameError if no bakups wanted. + except (os.error, NameError): + pass + try: + os.rename(fileName, bakFileName) + except (os.error, NameError): + pass + try: + self.SaveFile(fileName) + except IOError, details: + win32ui.MessageBox("Error - could not save file\r\n\r\n%s"%details) + return 0 + self.SetModifiedFlag(0) # No longer dirty + self.bDeclinedReload = 0 # They probably want to know if it changes again! + win32ui.AddToRecentFileList(fileName) + self.SetPathName(fileName) + win32ui.SetStatusText("Ready") + self._DocumentStateChanged() + return 1 + + def FinalizeViewCreation(self, view): + ParentEditorDocument.FinalizeViewCreation(self, view) + if view == self.GetFirstView(): + self._DocumentStateChanged() + if view.bFolding and GetEditorOption("Fold On Open", 0): + view.FoldTopLevelEvent() + + def HookViewNotifications(self, view): + ParentEditorDocument.HookViewNotifications(self, view) + + # Support for reloading the document from disk - presumably after some + # external application has modified it (or possibly source control has + # checked it out. + def ReloadDocument(self): + """Reloads the document from disk. Assumes the file has + been saved and user has been asked if necessary - it just does it! + """ + win32ui.SetStatusText("Reloading document. Please wait...", 1) + self.SetModifiedFlag(0) + # Loop over all views, saving their state, then reload the document + views = self.GetAllViews() + states = [] + for view in views: + try: + info = view._PrepareUserStateChange() + except AttributeError: # Not our editor view? + info = None + states.append(info) + self.OnOpenDocument(self.GetPathName()) + for view, info in map(None, views, states): + if info is not None: + view._EndUserStateChange(info) + self._DocumentStateChanged() + win32ui.SetStatusText("Document reloaded.") + + # Reloading the file + def CheckExternalDocumentUpdated(self): + if self.bDeclinedReload or not self.GetPathName(): + return + try: + newstat = os.stat(self.GetPathName()) + except os.error, (code, msg): + if not self.bReportedFileNotFound: + print "The file '%s' is open for editing, but\nchecking it for changes caused the error: %s" % (self.GetPathName(), msg) + self.bReportedFileNotFound = 1 + return + if self.bReportedFileNotFound: + print "The file '%s' has re-appeared - continuing to watch for changes..." % (self.GetPathName(),) + self.bReportedFileNotFound = 0 # Once found again we want to start complaining. + changed = (self.fileStat is None) or \ + self.fileStat[0] != newstat[0] or \ + self.fileStat[6] != newstat[6] or \ + self.fileStat[8] != newstat[8] or \ + self.fileStat[9] != newstat[9] + if changed: + question = None + if self.IsModified(): + question = "%s\r\n\r\nThis file has been modified outside of the source editor.\r\nDo you want to reload it and LOSE THE CHANGES in the source editor?" % self.GetPathName() + mbStyle = win32con.MB_YESNO | win32con.MB_DEFBUTTON2 # Default to "No" + else: + if not self.bAutoReload: + question = "%s\r\n\r\nThis file has been modified outside of the source editor.\r\nDo you want to reload it?" % self.GetPathName() + mbStyle = win32con.MB_YESNO # Default to "Yes" + if question: + rc = win32ui.MessageBox(question, None, mbStyle) + if rc!=win32con.IDYES: + self.bDeclinedReload = 1 + return + self.ReloadDocument() + + def _DocumentStateChanged(self): + """Called whenever the documents state (on disk etc) has been changed + by the editor (eg, as the result of a save operation) + """ + if self.GetPathName(): + try: + self.fileStat = os.stat(self.GetPathName()) + except os.error: + self.fileStat = None + else: + self.fileStat = None + self.watcherThread._DocumentStateChanged() + self._UpdateUIForState() + self._ApplyOptionalToViews("_UpdateUIForState") + self._ApplyOptionalToViews("SetReadOnly", self._IsReadOnly()) + self._ApplyOptionalToViews("SCISetSavePoint") + # Allow the debugger to reset us too. + import pywin.debugger + if pywin.debugger.currentDebugger is not None: + pywin.debugger.currentDebugger.UpdateDocumentLineStates(self) + + # Read-only document support - make it obvious to the user + # that the file is read-only. + def _IsReadOnly(self): + return self.fileStat is not None and (self.fileStat[0] & 128)==0 + + def _UpdateUIForState(self): + """Change the title to reflect the state of the document - + eg ReadOnly, Dirty, etc + """ + filename = self.GetPathName() + if not filename: return # New file - nothing to do + try: + # This seems necessary so the internal state of the window becomes + # "visible". without it, it is still shown, but certain functions + # (such as updating the title) dont immediately work? + self.GetFirstView().ShowWindow(win32con.SW_SHOW) + title = win32ui.GetFileTitle(filename) + except win32ui.error: + title = filename + if self._IsReadOnly(): + title = title + " (read-only)" + self.SetTitle(title) + + def MakeDocumentWritable(self): + pretend_ss = 0 # Set to 1 to test this without source safe :-) + if not self.scModuleName and not pretend_ss: # No Source Control support. + win32ui.SetStatusText("Document is read-only, and no source-control system is configured") + win32api.MessageBeep() + return 0 + + # We have source control support - check if the user wants to use it. + msg = "Would you like to check this file out?" + defButton = win32con.MB_YESNO + if self.IsModified(): + msg = msg + "\r\n\r\nALL CHANGES IN THE EDITOR WILL BE LOST" + defButton = win32con.MB_YESNO + if win32ui.MessageBox(msg, None, defButton)!=win32con.IDYES: + return 0 + + if pretend_ss: + print "We are only pretending to check it out!" + win32api.SetFileAttributes(self.GetPathName(), win32con.FILE_ATTRIBUTE_NORMAL) + self.ReloadDocument() + return 1 + + # Now call on the module to do it. + if self.scModule is None: + try: + self.scModule = __import__(self.scModuleName) + for part in string.split(self.scModuleName,'.')[1:]: + self.scModule = getattr(self.scModule, part) + except: + traceback.print_exc() + print "Error loading source control module." + return 0 + + if self.scModule.CheckoutFile(self.GetPathName()): + self.ReloadDocument() + return 1 + return 0 + + def CheckMakeDocumentWritable(self): + if self._IsReadOnly(): + return self.MakeDocumentWritable() + return 1 + + def SaveModified(self): + # Called as the document is closed. If we are about + # to prompt for a save, bring the document to the foreground. + if self.IsModified(): + frame = self.GetFirstView().GetParentFrame() + try: + frame.MDIActivate() + frame.AutoRestore() + except: + print "Could not bring document to foreground" + return self._obj_.SaveModified() + +# NOTE - I DONT use the standard threading module, +# as this waits for all threads to terminate at shutdown. +# When using the debugger, it is possible shutdown will +# occur without Pythonwin getting a complete shutdown, +# so we deadlock at the end - threading is waiting for +import pywin.mfc.thread +import win32event +class FileWatchingThread(pywin.mfc.thread.WinThread): + def __init__(self, doc): + self.doc = doc + self.adminEvent = win32event.CreateEvent(None, 0, 0, None) + self.stopEvent = win32event.CreateEvent(None, 0, 0, None) + self.watchEvent = None + pywin.mfc.thread.WinThread.__init__(self) + + def _DocumentStateChanged(self): + win32event.SetEvent(self.adminEvent) + + def RefreshEvent(self): + self.hwnd = self.doc.GetFirstView().GetSafeHwnd() + if self.watchEvent is not None: + win32api.FindCloseChangeNotification(self.watchEvent) + self.watchEvent = None + path = self.doc.GetPathName() + if path: path = os.path.dirname(path) + if path: + filter = win32con.FILE_NOTIFY_CHANGE_FILE_NAME | \ + win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES | \ + win32con.FILE_NOTIFY_CHANGE_LAST_WRITE + try: + self.watchEvent = win32api.FindFirstChangeNotification(path, 0, filter) + except win32api.error, (rc, fn, msg): + print "Can not watch file", path, "for changes -", msg + def SignalStop(self): + win32event.SetEvent(self.stopEvent) + def Run(self): + while 1: + handles = [self.stopEvent, self.adminEvent] + if self.watchEvent is not None: + handles.append(self.watchEvent) + rc = win32event.WaitForMultipleObjects(handles, 0, win32event.INFINITE) + if rc == win32event.WAIT_OBJECT_0: + break + elif rc == win32event.WAIT_OBJECT_0+1: + self.RefreshEvent() + else: + win32api.PostMessage(self.hwnd, MSG_CHECK_EXTERNAL_FILE, 0, 0) + try: + # If the directory has been removed underneath us, we get this error. + win32api.FindNextChangeNotification(self.watchEvent) + except win32api.error, (rc, fn, msg): + print "Can not watch file", self.doc.GetPathName(), "for changes -", msg + break + + # close a circular reference + self.doc = None diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/editor.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/editor.py new file mode 100644 index 000000000..d4e86ab8f --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/editor.py @@ -0,0 +1,465 @@ +##################################################################### +# +# editor.py +# +# A general purpose text editor, built on top of the win32ui edit +# type, which is built on an MFC CEditView +# +# +# We now support reloading of externally modified documented +# (eg, presumably by some other process, such as source control or +# another editor. +# We also suport auto-loading of externally modified files. +# - if the current document has not been modified in this +# editor, but has been modified on disk, then the file +# can be automatically reloaded. +# +# Note that it will _always_ prompt you if the file in the editor has been modified. + + +import win32ui +import win32api +import win32con +import regex +import re +import string +import sys, os +import traceback +from pywin.mfc import docview, dialog, afxres + +from pywin.framework.editor import GetEditorOption, SetEditorOption, GetEditorFontOption, SetEditorFontOption, defaultCharacterFormat + +patImport=regex.symcomp('import \(.*\)') +patIndent=regex.compile('^\\([ \t]*[~ \t]\\)') + +ID_LOCATE_FILE = 0xe200 +ID_GOTO_LINE = 0xe2001 +MSG_CHECK_EXTERNAL_FILE = win32con.WM_USER+1999 ## WARNING: Duplicated in document.py and coloreditor.py + +# Key Codes that modify the bufffer when Ctrl or Alt are NOT pressed. +MODIFYING_VK_KEYS = [win32con.VK_BACK, win32con.VK_TAB, win32con.VK_RETURN, win32con.VK_SPACE, win32con.VK_DELETE] +for k in range(48, 91): + MODIFYING_VK_KEYS.append(k) + +# Key Codes that modify the bufffer when Ctrl is pressed. +MODIFYING_VK_KEYS_CTRL = [win32con.VK_BACK, win32con.VK_RETURN, win32con.VK_SPACE, win32con.VK_DELETE] + +# Key Codes that modify the bufffer when Alt is pressed. +MODIFYING_VK_KEYS_ALT = [win32con.VK_BACK, win32con.VK_RETURN, win32con.VK_SPACE, win32con.VK_DELETE] + + +# The editor itself starts here. +# Using the MFC Document/View model, we have an EditorDocument, which is responsible for +# managing the contents of the file, and a view which is responsible for rendering it. +# +# Due to a limitation in the Windows edit controls, we are limited to one view +# per document, although nothing in this code assumes this (I hope!) + +isRichText=1 # We are using the Rich Text control. This has not been tested with value "0" for quite some time! + +#ParentEditorDocument=docview.Document +from document import EditorDocumentBase +ParentEditorDocument=EditorDocumentBase +class EditorDocument(ParentEditorDocument): + # + # File loading and saving operations + # + def OnOpenDocument(self, filename): + # + # handle Unix and PC text file format. + # + + # Get the "long name" of the file name, as it may have been translated + # to short names by the shell. + self.SetPathName(filename) # Must set this early! + # Now do the work! + self.BeginWaitCursor() + win32ui.SetStatusText("Loading file...",1) + try: + f = open(filename,"rb") + except IOError: + win32ui.MessageBox(filename + '\nCan not find this file\nPlease verify that the correct path and file name are given') + self.EndWaitCursor() + return 0 + raw=f.read() + f.close() + contents = self.TranslateLoadedData(raw) + rc = 0 + if win32ui.IsWin32s() and len(contents)>62000: # give or take a few bytes + win32ui.MessageBox("This file is too big for Python on Windows 3.1\r\nPlease use another editor to view this file.") + else: + try: + self.GetFirstView().SetWindowText(contents) + rc = 1 + except TypeError: # Null byte in file. + win32ui.MessageBox("This file contains NULL bytes, and can not be edited") + rc = 0 + + self.EndWaitCursor() + self.SetModifiedFlag(0) # No longer dirty + self._DocumentStateChanged() + return rc + + def TranslateLoadedData(self, data): + """Given raw data read from a file, massage it suitable for the edit window""" + # if a CR in the first 250 chars, then perform the expensive translate + if string.find(data[:250],'\r')==-1: + win32ui.SetStatusText("Translating from Unix file format - please wait...",1) + return re.sub('\r*\n','\r\n',data) + else: + return data + + def SaveFile(self, fileName): + if isRichText: + view = self.GetFirstView() + view.SaveTextFile(fileName) + else: # Old style edit view window. + self.GetFirstView().SaveFile(fileName) + try: + # Make sure line cache has updated info about me! + import linecache + linecache.checkcache() + except: + pass + + # + # Color state stuff + # + def SetAllLineColors(self, color = None): + for view in self.GetAllViews(): + view.SetAllLineColors(color) + + def SetLineColor(self, lineNo, color): + "Color a line of all views" + for view in self.GetAllViews(): + view.SetLineColor(lineNo, color) + + +# def StreamTextOut(self, data): ### This seems unreliable??? +# self.saveFileHandle.write(data) +# return 1 # keep em coming! + +#ParentEditorView=docview.EditView +ParentEditorView=docview.RichEditView +class EditorView(ParentEditorView): + def __init__(self, doc): + ParentEditorView.__init__(self, doc) + if isRichText: + self.SetWordWrap(win32ui.CRichEditView_WrapNone) + + self.addToMRU = 1 + self.HookHandlers() + self.bCheckingFile = 0 + + self.defCharFormat = GetEditorFontOption("Default Font", defaultCharacterFormat) + + # Smart tabs override everything else if context can be worked out. + self.bSmartTabs = GetEditorOption("Smart Tabs", 1) + + self.tabSize = GetEditorOption("Tab Size", 8) + self.indentSize = GetEditorOption("Indent Size", 8) + # If next indent is at a tab position, and useTabs is set, a tab will be inserted. + self.bUseTabs = GetEditorOption("Use Tabs", 1) + + def OnInitialUpdate(self): + rc = self._obj_.OnInitialUpdate() + self.SetDefaultCharFormat(self.defCharFormat) + return rc + + def CutCurLine(self): + curLine = self._obj_.LineFromChar() + nextLine = curLine+1 + start = self._obj_.LineIndex(curLine) + end = self._obj_.LineIndex(nextLine) + if end==0: # must be last line. + end = start + self.end.GetLineLength(curLine) + self._obj_.SetSel(start,end) + self._obj_.Cut() + def _PrepareUserStateChange(self): + "Return selection, lineindex, etc info, so it can be restored" + self.SetRedraw(0) + return self.GetModify(), self.GetSel(), self.GetFirstVisibleLine() + def _EndUserStateChange(self, info): + scrollOff = info[2] - self.GetFirstVisibleLine() + if scrollOff: + self.LineScroll(scrollOff) + self.SetSel(info[1]) + self.SetModify(info[0]) + self.SetRedraw(1) + self.InvalidateRect() + self.UpdateWindow() + + def _UpdateUIForState(self): + self.SetReadOnly(self.GetDocument()._IsReadOnly()) + + def SetAllLineColors(self, color = None): + if isRichText: + info = self._PrepareUserStateChange() + try: + if color is None: color = self.defCharFormat[4] + self.SetSel(0,-1) + self.SetSelectionCharFormat((win32con.CFM_COLOR, 0,0,0,color)) + finally: + self._EndUserStateChange(info) + + def SetLineColor(self, lineNo, color): + "lineNo is the 1 based line number to set. If color is None, default color is used." + if isRichText: + info = self._PrepareUserStateChange() + try: + if color is None: color = self.defCharFormat[4] + lineNo = lineNo-1 + startIndex = self.LineIndex(lineNo) + if startIndex!=-1: + self.SetSel(startIndex, self.LineIndex(lineNo+1)) + self.SetSelectionCharFormat((win32con.CFM_COLOR, 0,0,0,color)) + finally: + self._EndUserStateChange(info) + + def Indent(self): + """Insert an indent to move the cursor to the next tab position. + + Honors the tab size and 'use tabs' settings. Assumes the cursor is already at the + position to be indented, and the selection is a single character (ie, not a block) + """ + start, end = self._obj_.GetSel() + startLine = self._obj_.LineFromChar(start) + line = self._obj_.GetLine(startLine) + realCol = start - self._obj_.LineIndex(startLine) + # Calulate the next tab stop. + # Expand existing tabs. + curCol = 0 + for ch in line[:realCol]: + if ch=='\t': + curCol = ((curCol / self.tabSize) + 1) * self.tabSize + else: + curCol = curCol + 1 + nextColumn = ((curCol / self.indentSize) + 1) * self.indentSize +# print "curCol is", curCol, "nextColumn is", nextColumn + ins = None + if self.bSmartTabs: + # Look for some context. + if realCol==0: # Start of the line - see if the line above can tell us + lookLine = startLine-1 + while lookLine >= 0: + check = self._obj_.GetLine(lookLine)[0:1] + if check in ['\t', ' ']: + ins = check + break + lookLine = lookLine - 1 + else: # See if the previous char can tell us + check = line[realCol-1] + if check in ['\t', ' ']: + ins = check + + # Either smart tabs off, or not smart enough! + # Use the "old style" settings. + if ins is None: + if self.bUseTabs and nextColumn % self.tabSize==0: + ins = '\t' + else: + ins = ' ' + + if ins == ' ': + # Calc the number of spaces to take us to the next stop + ins = ins * (nextColumn - curCol) + + self._obj_.ReplaceSel(ins) + + + def BlockDent(self, isIndent, startLine, endLine): + " Indent/Undent all lines specified " + if not self.GetDocument().CheckMakeDocumentWritable(): return 0 + tabSize=self.tabSize # hard-code for now! + info = self._PrepareUserStateChange() + try: + for lineNo in range(startLine, endLine): + pos=self._obj_.LineIndex(lineNo) + self._obj_.SetSel(pos, pos) + if isIndent: + self.Indent() + else: + line = self._obj_.GetLine(lineNo) + try: + noToDel = 0 + if line[0]=='\t': + noToDel = 1 + elif line[0]==' ': + for noToDel in range(0,tabSize): + if line[noToDel]!=' ': + break + else: + noToDel=tabSize + if noToDel: + self._obj_.SetSel(pos, pos+noToDel) + self._obj_.Clear() + except IndexError: + pass + finally: + self._EndUserStateChange(info) + self.GetDocument().SetModifiedFlag(1) # Now dirty + self._obj_.SetSel(self.LineIndex(startLine), self.LineIndex(endLine)) + + def GotoLine(self, lineNo = None): + try: + if lineNo is None: + lineNo = string.atoi(raw_input("Enter Line Number")) + except (ValueError, KeyboardInterrupt): + return 0 + self.GetLineCount() # Seems to be needed when file first opened??? + charNo = self.LineIndex(lineNo-1) + self.SetSel(charNo) + + def HookHandlers(self): # children can override, but should still call me! +# self.HookAllKeyStrokes(self.OnKey) + self.HookMessage(self.OnCheckExternalDocumentUpdated,MSG_CHECK_EXTERNAL_FILE) + self.HookMessage(self.OnRClick,win32con.WM_RBUTTONDOWN) + self.HookMessage(self.OnSetFocus, win32con.WM_SETFOCUS) + self.HookMessage(self.OnKeyDown, win32con.WM_KEYDOWN) + self.HookKeyStroke(self.OnKeyCtrlY, 25) # ^Y + self.HookKeyStroke(self.OnKeyCtrlG, 7) # ^G + self.HookKeyStroke(self.OnKeyTab, 9) # TAB + self.HookKeyStroke(self.OnKeyEnter, 13) # Enter + self.HookCommand(self.OnCmdLocateFile, ID_LOCATE_FILE) + self.HookCommand(self.OnCmdGotoLine, ID_GOTO_LINE) + self.HookCommand(self.OnEditPaste, afxres.ID_EDIT_PASTE) + self.HookCommand(self.OnEditCut, afxres.ID_EDIT_CUT) + + # Hook Handlers + def OnSetFocus(self,msg): + # Even though we use file change notifications, we should be very sure about it here. + self.OnCheckExternalDocumentUpdated(msg) + + def OnRClick(self,params): + menu = win32ui.CreatePopupMenu() + + # look for a module name + line=string.strip(self._obj_.GetLine()) + flags=win32con.MF_STRING|win32con.MF_ENABLED + if patImport.match(line)==len(line): + menu.AppendMenu(flags, ID_LOCATE_FILE, "&Locate %s.py"%patImport.group('name')) + menu.AppendMenu(win32con.MF_SEPARATOR); + menu.AppendMenu(flags, win32ui.ID_EDIT_UNDO, '&Undo') + menu.AppendMenu(win32con.MF_SEPARATOR); + menu.AppendMenu(flags, win32ui.ID_EDIT_CUT, 'Cu&t') + menu.AppendMenu(flags, win32ui.ID_EDIT_COPY, '&Copy') + menu.AppendMenu(flags, win32ui.ID_EDIT_PASTE, '&Paste') + menu.AppendMenu(flags, win32con.MF_SEPARATOR); + menu.AppendMenu(flags, win32ui.ID_EDIT_SELECT_ALL, '&Select all') + menu.AppendMenu(flags, win32con.MF_SEPARATOR); + menu.AppendMenu(flags, ID_GOTO_LINE, '&Goto line...') + menu.TrackPopupMenu(params[5]) + return 0 + + def OnCmdGotoLine(self, cmd, code): + self.GotoLine() + return 0 + + def OnCmdLocateFile(self, cmd, code): + modName = patImport.group('name') + if not modName: + return 0 + import pywin.framework.scriptutils + fileName = pywin.framework.scriptutils.LocatePythonFile(modName) + if fileName is None: + win32ui.SetStatusText("Can't locate module %s" % modName) + else: + win32ui.GetApp().OpenDocumentFile(fileName) + return 0 + + # Key handlers + def OnKeyEnter(self, key): + if not self.GetDocument().CheckMakeDocumentWritable(): return 0 + curLine = self._obj_.GetLine() + self._obj_.ReplaceSel('\r\n') # insert the newline + # If the current line indicates the next should be indented, + # then copy the current indentation to this line. + res = patIndent.match(curLine,0) + if res>0 and string.strip(curLine): + curIndent = patIndent.group(1) + self._obj_.ReplaceSel(curIndent) + return 0 # dont pass on + + def OnKeyCtrlY(self, key): + if not self.GetDocument().CheckMakeDocumentWritable(): return 0 + self.CutCurLine() + return 0 # dont let him have it! + def OnKeyCtrlG(self, key): + self.GotoLine() + return 0 # dont let him have it! + def OnKeyTab(self, key): + if not self.GetDocument().CheckMakeDocumentWritable(): return 0 + start, end = self._obj_.GetSel() + if start==end: # normal TAB key + self.Indent() + return 0 # we handled this. + + # Otherwise it is a block indent/dedent. + if start>end: + start, end = end, start # swap them. + startLine = self._obj_.LineFromChar(start) + endLine = self._obj_.LineFromChar(end) + + self.BlockDent(win32api.GetKeyState(win32con.VK_SHIFT)>=0, startLine, endLine) + return 0 + + + def OnEditPaste(self, id, code): + # Return 1 if we can make the file editable.(or it already is!) + return self.GetDocument().CheckMakeDocumentWritable() + + def OnEditCut(self, id, code): + # Return 1 if we can make the file editable.(or it already is!) + return self.GetDocument().CheckMakeDocumentWritable() + + def OnKeyDown(self, msg): + key = msg[2] + if win32api.GetKeyState(win32con.VK_CONTROL) & 0x8000: + modList = MODIFYING_VK_KEYS_CTRL + elif win32api.GetKeyState(win32con.VK_MENU) & 0x8000: + modList = MODIFYING_VK_KEYS_ALT + else: + modList = MODIFYING_VK_KEYS + + if key in modList: + # Return 1 if we can make the file editable.(or it already is!) + return self.GetDocument().CheckMakeDocumentWritable() + return 1 # Pass it on OK + +# def OnKey(self, key): +# return self.GetDocument().CheckMakeDocumentWritable() + + def OnCheckExternalDocumentUpdated(self, msg): + if self._obj_ is None or self.bCheckingFile: return + self.bCheckingFile = 1 + self.GetDocument().CheckExternalDocumentUpdated() + self.bCheckingFile = 0 + +from template import EditorTemplateBase +class EditorTemplate(EditorTemplateBase): + def __init__(self, res=win32ui.IDR_TEXTTYPE, makeDoc=None, makeFrame=None, makeView=None): + if makeDoc is None: makeDoc = EditorDocument + if makeView is None: makeView = EditorView + EditorTemplateBase.__init__(self, res, makeDoc, makeFrame, makeView) + + def _CreateDocTemplate(self, resourceId): + return win32ui.CreateRichEditDocTemplate(resourceId) + + def CreateWin32uiDocument(self): + return self.DoCreateRichEditDoc() + +def Create(fileName = None, title=None, template = None): + return editorTemplate.OpenDocumentFile(fileName) + +from pywin.framework.editor import GetDefaultEditorModuleName +prefModule = GetDefaultEditorModuleName() +# Initialize only if this is the "default" editor. +if __name__==prefModule: + # For debugging purposes, when this module may be reloaded many times. + try: + win32ui.GetApp().RemoveDocTemplate(editorTemplate) + except (NameError, win32ui.error): + pass + + editorTemplate = EditorTemplate() + win32ui.GetApp().AddDocTemplate(editorTemplate) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/frame.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/frame.py new file mode 100644 index 000000000..fdb636828 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/frame.py @@ -0,0 +1,66 @@ +# frame.py - The MDI frame window for an editor. +import pywin.framework.window +import win32ui +import win32con +import afxres + +import ModuleBrowser + +class EditorFrame(pywin.framework.window.MDIChildWnd): + def OnCreateClient(self, cp, context): + + # Create the default view as specified by the template (ie, the editor view) + view = context.template.MakeView(context.doc) + # Create the browser view. + browserView = ModuleBrowser.BrowserView(context.doc) + view2 = context.template.MakeView(context.doc) + + splitter = win32ui.CreateSplitter() + style = win32con.WS_CHILD | win32con.WS_VISIBLE + splitter.CreateStatic (self, 1, 2, style, win32ui.AFX_IDW_PANE_FIRST) + sub_splitter = self.sub_splitter = win32ui.CreateSplitter() + sub_splitter.CreateStatic (splitter, 2, 1, style, win32ui.AFX_IDW_PANE_FIRST+1) + + # Note we must add the default view first, so that doc.GetFirstView() returns the editor view. + sub_splitter.CreateView(view, 1, 0, (0,0)) + splitter.CreateView (browserView, 0, 0, (0,0)) + sub_splitter.CreateView(view2,0, 0, (0,0)) + +## print "First view is", context.doc.GetFirstView() +## print "Views are", view, view2, browserView +## print "Parents are", view.GetParent(), view2.GetParent(), browserView.GetParent() +## print "Splitter is", splitter +## print "sub splitter is", sub_splitter + ## Old +## splitter.CreateStatic (self, 1, 2) +## splitter.CreateView(view, 0, 1, (0,0)) # size ignored. +## splitter.CreateView (browserView, 0, 0, (0, 0)) + + # Restrict the size of the browser splitter (and we can avoid filling + # it until it is shown) + splitter.SetColumnInfo(0, 10, 20) + # And the active view is our default view (so it gets initial focus) + self.SetActiveView(view) + + def GetEditorView(self): + # In a multi-view (eg, splitter) environment, get + # an editor (ie, scintilla) view + # Look for the splitter opened the most! + if self.sub_splitter is None: + return self.GetDlgItem(win32ui.AFX_IDW_PANE_FIRST) + v1 = self.sub_splitter.GetPane(0,0) + v2 = self.sub_splitter.GetPane(1,0) + r1 = v1.GetWindowRect() + r2 = v2.GetWindowRect() + if r1[3]-r1[1] > r2[3]-r2[1]: + return v1 + return v2 + + def GetBrowserView(self): + # XXX - should fix this :-) + return self.GetActiveDocument().GetAllViews()[1] + def OnClose(self): + # Must force the module browser to close itself here (OnDestroy for the view itself is too late!) + self.sub_splitter = None # ensure no circles! + self.GetBrowserView().DestroyBrowser() + return self._obj_.OnClose() \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/template.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/template.py new file mode 100644 index 000000000..41c42a84f --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/template.py @@ -0,0 +1,50 @@ +import string +import win32ui +import win32api +from pywin.mfc import docview +import pywin.framework.window +import os +import frame + +ParentEditorTemplate=docview.DocTemplate +class EditorTemplateBase(ParentEditorTemplate): + def __init__(self, res=win32ui.IDR_TEXTTYPE, makeDoc=None, makeFrame=None, makeView=None): + if makeFrame is None: makeFrame = frame.EditorFrame + ParentEditorTemplate.__init__(self, res, makeDoc, makeFrame, makeView) + + def _CreateDocTemplate(self, resourceId): + assert 0, "You must override this" + def CreateWin32uiDocument(self): + assert 0, "You must override this" + def GetFileExtensions(self): + return ".txt", ".py" + def MatchDocType(self, fileName, fileType): + doc = self.FindOpenDocument(fileName) + if doc: return doc + ext = string.lower(os.path.splitext(fileName)[1]) + if ext in self.GetFileExtensions(): + return win32ui.CDocTemplate_Confidence_yesAttemptNative + return win32ui.CDocTemplate_Confidence_maybeAttemptForeign + + def InitialUpdateFrame(self, frame, doc, makeVisible=1): + self._obj_.InitialUpdateFrame(frame, doc, makeVisible) # call default handler. + doc._UpdateUIForState() + + def GetPythonPropertyPages(self): + """Returns a list of property pages + """ + import configui + return [configui.EditorPropertyPage(), configui.EditorWhitespacePropertyPage()] + + def OpenDocumentFile(self, filename, bMakeVisible = 1): + if filename is not None: + try: + path = os.path.split(filename)[0] +# print "The editor is translating", `filename`,"to", + filename = win32api.FindFiles(filename)[0][8] + filename = os.path.join(path, filename) +# print `filename` + except (win32api.error, IndexError), details: + pass +# print "Couldnt get the full filename!", details + return self._obj_.OpenDocumentFile(filename, bMakeVisible) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/vss.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/vss.py new file mode 100644 index 000000000..a9369d24c --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/editor/vss.py @@ -0,0 +1,95 @@ +# vss.py -- Source Control using Microsoft VSS. + +# Provides routines for checking files out of VSS. +# +# Uses an INI file very similar to how VB integrates with VSS - even +# as far as using the same name. + +# The file must be named "Mssccprj.scc", and be in the format of +# an INI file. This file may be in a parent directory, in which +# case the project name will be built from what is specified in the +# ini file, plus the path from the INI file to the file itself. +# +# The INI file should have a [Python] section, and a +# Project=Project Name +# and optionally +# Database=?? + + +import win32ui, win32api, win32con, os, string, sys + +import traceback + +g_iniName = "Mssccprj.scc" # Use the same INI name as VB! + +g_sourceSafe = None + +def FindVssProjectInfo(fullfname): + """Looks up the file system for an INI file describing the project. + + Looking up the tree is for ni style packages. + + Returns (projectName, pathToFileName) where pathToFileName contains + the path from the ini file to the actual file. + """ + path, fnameonly = os.path.split(fullfname) + origPath = path + project = "" + retPaths = [fnameonly] + while not project: + iniName = os.path.join(path, g_iniName) + database = win32api.GetProfileVal("Python","Database", "", iniName) + project = win32api.GetProfileVal("Python","Project", "", iniName) + if project: + break; + # No valid INI file in this directory - look up a level. + path, addpath = os.path.split(path) + if not addpath: # Root? + break + retPaths.insert(0, addpath) + if not project: + win32ui.MessageBox("%s\r\n\r\nThis directory is not configured for Python/VSS" % origPath) + return + return project, string.join(retPaths, "/"), database + + +def CheckoutFile(fileName): + global g_sourceSafe + import pythoncom + ok = 0 + # Assumes the fileName has a complete path, + # and that the INI file can be found in that path + # (or a parent path if a ni style package) + try: + import win32com.client, win32com.client.gencache + mod = win32com.client.gencache.EnsureModule('{783CD4E0-9D54-11CF-B8EE-00608CC9A71F}', 0, 5, 0) + if mod is None: + win32ui.MessageBox("VSS does not appear to be installed. The TypeInfo can not be created") + return ok + + rc = FindVssProjectInfo(fileName) + if rc is None: + return + project, vssFname, database = rc + if g_sourceSafe is None: + g_sourceSafe=win32com.client.Dispatch("SourceSafe") + # SS seems a bit wierd. It defaults the arguments as empty strings, but + # then complains when they are used - so we pass "Missing" + if not database: + database = pythoncom.Missing + g_sourceSafe.Open(database, pythoncom.Missing, pythoncom.Missing) + item = g_sourceSafe.VSSItem("$/%s/%s" % (project, vssFname)) + item.Checkout(None, fileName) + ok = 1 + except pythoncom.com_error, (hr, msg, exc, arg): + if exc: + msg = exc[2] + win32ui.MessageBox(msg, "Error checking out file") + except: + typ, val, tb = sys.exc_info() + traceback.print_exc() + win32ui.MessageBox("%s - %s" % (str(typ), str(val)),"Error checking out file") + tb = None # Cleanup a cycle + return ok + + diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/help.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/help.py new file mode 100644 index 000000000..25ba970e8 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/help.py @@ -0,0 +1,147 @@ + # help.py - help utilities for PythonWin. +import win32api +import win32con +import win32ui +import string +import sys +import regutil +import string, os + +htmlhelp_handle = None + +html_help_command_translators = { + win32con.HELP_CONTENTS : 1, # HH_DISPLAY_TOC + win32con.HELP_CONTEXT : 15, # HH_HELP_CONTEXT + win32con.HELP_FINDER : 1, # HH_DISPLAY_TOC +} + +def FinalizeHelp(): + global htmlhelp_handle + if htmlhelp_handle is not None: + import win32help + try: + #frame = win32ui.GetMainFrame().GetSafeHwnd() + frame = 0 + win32help.HtmlHelp(frame, None, win32help.HH_UNINITIALIZE, htmlhelp_handle) + except win32help.error: + print "Failed to finalize htmlhelp!" + htmlhelp_handle = None + +def OpenHelpFile(fileName, helpCmd = None, helpArg = None): + "Open a help file, given a full path" + # default help arg. + win32ui.DoWaitCursor(1) + try: + if helpCmd is None: helpCmd = win32con.HELP_CONTENTS + ext = string.lower(os.path.splitext(fileName)[1]) + if ext == ".hlp": + win32api.WinHelp( win32ui.GetMainFrame().GetSafeHwnd(), fileName, helpCmd, helpArg) + # XXX - using the htmlhelp API wreaks havoc with keyboard shortcuts + # so we disable it, forcing ShellExecute, which works fine (but + # doesn't close the help file when Pythonwin is closed. + # Tom Heller also points out http://www.microsoft.com/mind/0499/faq/faq0499.asp, + # which may or may not be related. + elif 0 and ext == ".chm": + import win32help + global htmlhelp_handle + helpCmd = html_help_command_translators.get(helpCmd, helpCmd) + #frame = win32ui.GetMainFrame().GetSafeHwnd() + frame = 0 # Dont want it overlapping ours! + if htmlhelp_handle is None: + htmlhelp_hwnd, htmlhelp_handle = win32help.HtmlHelp(frame, None, win32help.HH_INITIALIZE) + win32help.HtmlHelp(frame, fileName, helpCmd, helpArg) + else: + # Hope that the extension is registered, and we know what to do! + win32api.ShellExecute(0, "open", fileName, None, "", win32con.SW_SHOW) + return fileName + finally: + win32ui.DoWaitCursor(-1) + +def ListAllHelpFiles(): + ret = [] + ret = _ListAllHelpFilesInRoot(win32con.HKEY_LOCAL_MACHINE) + # Ensure we don't get dups. + for item in _ListAllHelpFilesInRoot(win32con.HKEY_CURRENT_USER): + if item not in ret: + ret.append(item) + return ret + +def _ListAllHelpFilesInRoot(root): + """Returns a list of (helpDesc, helpFname) for all registered help files + """ + import regutil + retList = [] + try: + key = win32api.RegOpenKey(root, regutil.BuildDefaultPythonKey() + "\\Help", 0, win32con.KEY_READ) + except win32api.error, (code, fn, details): + import winerror + if code!=winerror.ERROR_FILE_NOT_FOUND: + raise win32api.error, (code, fn, details) + return retList + try: + keyNo = 0 + while 1: + try: + helpDesc = win32api.RegEnumKey(key, keyNo) + helpFile = win32api.RegQueryValue(key, helpDesc) + retList.append((helpDesc, helpFile)) + keyNo = keyNo + 1 + except win32api.error, (code, fn, desc): + import winerror + if code!=winerror.ERROR_NO_MORE_ITEMS: + raise win32api.error, (code, fn, desc) + break + finally: + win32api.RegCloseKey(key) + return retList + +def SelectAndRunHelpFile(): + from pywin.dialogs import list + helpFiles = ListAllHelpFiles() + index = list.SelectFromLists("Select Help file", helpFiles, ["Title"]) + if index is not None: + OpenHelpFile(helpFiles[index][1]) + + +helpIDMap = None + +def SetHelpMenuOtherHelp(mainMenu): + """Modifies the main Help Menu to handle all registered help files. + mainMenu -- The main menu to modify - usually from docTemplate.GetSharedMenu() + """ + + # Load all help files from the registry. + global helpIDMap + if helpIDMap is None: + helpIDMap = {} + cmdID = win32ui.ID_HELP_OTHER + excludeList = ['Main Python Documentation', 'Pythonwin Reference'] + firstList = ListAllHelpFiles() + # We actually want to not only exclude these entries, but + # their help file names (as many entries may share the same name) + excludeFnames = [] + for desc, fname in firstList: + if desc in excludeList: + excludeFnames.append(fname) + + helpDescs = [] + for desc, fname in firstList: + if fname not in excludeFnames: + helpIDMap[cmdID] = (desc, fname) + win32ui.GetMainFrame().HookCommand(HandleHelpOtherCommand, cmdID) + cmdID = cmdID + 1 + + helpMenu = mainMenu.GetSubMenu(mainMenu.GetMenuItemCount()-1) # Help menu always last. + otherHelpMenuPos = 2 # cant search for ID, as sub-menu has no ID. + otherMenu = helpMenu.GetSubMenu(otherHelpMenuPos) + while otherMenu.GetMenuItemCount(): + otherMenu.DeleteMenu(0, win32con.MF_BYPOSITION) + + if helpIDMap: + for id, (desc, fname) in helpIDMap.items(): + otherMenu.AppendMenu(win32con.MF_ENABLED|win32con.MF_STRING,id, desc) + else: + helpMenu.EnableMenuItem(otherHelpMenuPos, win32con.MF_BYPOSITION | win32con.MF_GRAYED) + +def HandleHelpOtherCommand(cmd, code): + OpenHelpFile(helpIDMap[cmd][1]) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/interact.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/interact.py new file mode 100644 index 000000000..ae3024576 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/interact.py @@ -0,0 +1,807 @@ + +################################################################## +## +## Interactive Shell Window +## + +import sys +import code +import string + +import win32ui +import win32api +import win32con +import traceback +import afxres +import array +import __main__ + +import pywin.scintilla.formatter +import pywin.scintilla.control +import pywin.scintilla.IDLEenvironment +import pywin.framework.app + +trace=pywin.scintilla.formatter.trace + +import winout + +import re +# from IDLE. +_is_block_opener = re.compile(r":\s*(#.*)?$").search +_is_block_closer = re.compile(r""" + \s* + ( return + | break + | continue + | raise + | pass + ) + \b +""", re.VERBOSE).match + +tracebackHeader = "Traceback (" + +sectionProfile = "Interactive Window" +valueFormatTitle = "FormatTitle" +valueFormatInput = "FormatInput" +valueFormatOutput = "FormatOutput" +valueFormatOutputError = "FormatOutputError" + +# These are defaults only. Values are read from the registry. +formatTitle = (-536870897, 0, 220, 0, 16711680, 184, 34, 'Arial') +formatInput = (-402653169, 0, 200, 0, 0, 0, 49, 'Courier New') +formatOutput = (-402653169, 0, 200, 0, 8421376, 0, 49, 'Courier New') +formatOutputError = (-402653169, 0, 200, 0, 255, 0, 49, 'Courier New') + +# couple of exceptions defined for this module +excNoValidCommand = 'No Valid Command' +excEmptyCommand = 'Empty Command' +excContinueCommand = 'Continue Command' + +try: + sys.ps1 +except AttributeError: + sys.ps1 = '>>> ' + sys.ps2 = '... ' + +def LoadPreference(preference, default = ""): + return win32ui.GetProfileVal(sectionProfile, preference, default) + +def SavePreference( prefName, prefValue ): + win32ui.WriteProfileVal( sectionProfile, prefName, prefValue ) + +def GetPromptPrefix(line): + ps1=sys.ps1 + if line[:len(ps1)]==ps1: return ps1 + ps2=sys.ps2 + if line[:len(ps2)]==ps2: return ps2 + +############################################################# +# +# Colorizer related code. +# +############################################################# +STYLE_INTERACTIVE_EOL = "Interactive EOL" +STYLE_INTERACTIVE_OUTPUT = "Interactive Output" +STYLE_INTERACTIVE_PROMPT = "Interactive Prompt" +STYLE_INTERACTIVE_BANNER = "Interactive Banner" +STYLE_INTERACTIVE_ERROR = "Interactive Error" +STYLE_INTERACTIVE_ERROR_FINALLINE = "Interactive Error (final line)" + +INTERACTIVE_STYLES = [STYLE_INTERACTIVE_EOL, STYLE_INTERACTIVE_OUTPUT, STYLE_INTERACTIVE_PROMPT, STYLE_INTERACTIVE_BANNER, STYLE_INTERACTIVE_ERROR, STYLE_INTERACTIVE_ERROR_FINALLINE] + +FormatterParent = pywin.scintilla.formatter.PythonSourceFormatter +class InteractiveFormatter(FormatterParent): + def __init__(self, scintilla): + FormatterParent.__init__(self, scintilla) + + def SetStyles(self): + FormatterParent.SetStyles(self) + Style = pywin.scintilla.formatter.Style + self.RegisterStyle( Style(STYLE_INTERACTIVE_EOL, STYLE_INTERACTIVE_PROMPT ) ) + self.RegisterStyle( Style(STYLE_INTERACTIVE_PROMPT, formatInput ) ) + self.RegisterStyle( Style(STYLE_INTERACTIVE_OUTPUT, formatOutput) ) + self.RegisterStyle( Style(STYLE_INTERACTIVE_BANNER, formatTitle ) ) + self.RegisterStyle( Style(STYLE_INTERACTIVE_ERROR, formatOutputError ) ) + self.RegisterStyle( Style(STYLE_INTERACTIVE_ERROR_FINALLINE, STYLE_INTERACTIVE_ERROR ) ) + + def LoadPreference(self, name, default): + rc = win32ui.GetProfileVal("Format", name, default) + if rc==default: + rc = win32ui.GetProfileVal(sectionProfile, name, default) + return rc + + def ColorizeInteractiveCode(self, cdoc, styleStart, stylePyStart): + lengthDoc = len(cdoc) + if lengthDoc == 0: return + state = styleStart + chNext = cdoc[0] + startSeg = 0 + i = 0 + lastState=state # debug only + while i < lengthDoc: + ch = chNext + chNext = cdoc[i+1:i+2] + +# trace("ch=%r, i=%d, next=%r, state=%s" % (ch, i, chNext, state)) + if state == STYLE_INTERACTIVE_EOL: + if ch not in '\r\n': + self.ColorSeg(startSeg, i-1, state) + startSeg = i + if ch in [sys.ps1[0], sys.ps2[0]]: + state = STYLE_INTERACTIVE_PROMPT + elif cdoc[i:i+len(tracebackHeader)]==tracebackHeader: + state = STYLE_INTERACTIVE_ERROR + else: + state = STYLE_INTERACTIVE_OUTPUT + elif state == STYLE_INTERACTIVE_PROMPT: + if ch not in sys.ps1 + sys.ps2 + " ": + self.ColorSeg(startSeg, i-1, state) + startSeg = i + if ch in '\r\n': + state = STYLE_INTERACTIVE_EOL + else: + state = stylePyStart # Start coloring Python code. + elif state in [STYLE_INTERACTIVE_OUTPUT]: + if ch in '\r\n': + self.ColorSeg(startSeg, i-1, state) + startSeg = i + state = STYLE_INTERACTIVE_EOL + elif state == STYLE_INTERACTIVE_ERROR: + if ch in '\r\n' and chNext and chNext not in string.whitespace: + # Everything including me + self.ColorSeg(startSeg, i, state) + startSeg = i+1 + state = STYLE_INTERACTIVE_ERROR_FINALLINE + elif i == 0 and ch not in string.whitespace: + # If we are coloring from the start of a line, + # we need this better check for the last line + # Color up to not including me + self.ColorSeg(startSeg, i-1, state) + startSeg = i + state = STYLE_INTERACTIVE_ERROR_FINALLINE + elif state == STYLE_INTERACTIVE_ERROR_FINALLINE: + if ch in '\r\n': + self.ColorSeg(startSeg, i-1, state) + startSeg = i + state = STYLE_INTERACTIVE_EOL + elif state == STYLE_INTERACTIVE_BANNER: + if ch in '\r\n' and (chNext=='' or chNext in ">["): + # Everything including me + self.ColorSeg(startSeg, i-1, state) + startSeg = i + state = STYLE_INTERACTIVE_EOL + else: + # It is a PythonColorizer state - seek past the end of the line + # and ask the Python colorizer to color that. + end = startSeg + while end < lengthDoc and cdoc[end] not in '\r\n': + end = end + 1 + self.ColorizePythonCode( cdoc[:end], startSeg, state) + stylePyStart = self.GetStringStyle(end-1) + if stylePyStart is None: + stylePyStart = pywin.scintilla.formatter.STYLE_DEFAULT + else: + stylePyStart = stylePyStart.name + startSeg =end + i = end - 1 # ready for increment. + chNext = cdoc[end:end+1] + state = STYLE_INTERACTIVE_EOL + if lastState != state: + lastState = state + i = i + 1 + # and the rest + if startSeg 1: + # Likely we are being asked to color from the start of the line. + # We find the last formatted character on the previous line. + # If TQString, we continue it. Otherwise, we reset. + look = start -1 + while look and self.scintilla.SCIGetCharAt(look) in '\n\r': + look = look - 1 + if look and look < start-1: # Did we find a char before the \n\r sets? + strstyle = self.GetStringStyle(look) + quote_char = None + if strstyle is not None: + if strstyle.name == pywin.scintilla.formatter.STYLE_TQSSTRING: + quote_char = "'" + elif strstyle.name == pywin.scintilla.formatter.STYLE_TQDSTRING: + quote_char = '"' + if quote_char is not None: + # It is a TQS. If the TQS is not terminated, we + # carry the style through. + if look > 2: + look_str = self.scintilla.SCIGetCharAt(look-2) + self.scintilla.SCIGetCharAt(look-1) + self.scintilla.SCIGetCharAt(look) + if look_str != quote_char * 3: + stylePyStart = strstyle.name + if stylePyStart is None: stylePyStart = pywin.scintilla.formatter.STYLE_DEFAULT + + if start > 0: + stylenum = self.scintilla.SCIGetStyleAt(start - 1) + styleStart = self.GetStyleByNum(stylenum).name + else: + styleStart = STYLE_INTERACTIVE_BANNER + self.scintilla.SCIStartStyling(start, 31) + self.style_buffer = array.array("c", chr(0)*len(stringVal)) + self.ColorizeInteractiveCode(stringVal, styleStart, stylePyStart) + self.scintilla.SCISetStylingEx(self.style_buffer) + self.style_buffer = None + +############################################################### +# +# This class handles the Python interactive interpreter. +# +# It uses a basic EditWindow, and does all the magic. +# This is triggered by the enter key hander attached by the +# start-up code. It determines if a command is to be executed +# or continued (ie, emit "... ") by snooping around the current +# line, looking for the prompts +# +class PythonwinInteractiveInterpreter(code.InteractiveInterpreter): + def __init__(self, locals = None, globals = None): + if locals is None: locals = __main__.__dict__ + if globals is None: globals = locals + self.globals = globals + code.InteractiveInterpreter.__init__(self, locals) + def showsyntaxerror(self, filename=None): + sys.stderr.write(tracebackHeader) # So the color syntaxer recognises it. + code.InteractiveInterpreter.showsyntaxerror(self, filename) + def runcode(self, code): + try: + exec code in self.globals, self.locals + except SystemExit: + raise + except: + self.showtraceback() + +class InteractiveCore: + def __init__(self, banner = None): + self.banner = banner +# LoadFontPreferences() + def Init(self): + self.oldStdOut = self.oldStdErr = None + +# self.SetWordWrap(win32ui.CRichEditView_WrapNone) + self.interp = PythonwinInteractiveInterpreter() + + self.OutputGrab() # Release at cleanup. + + if self.GetTextLength()==0: + if self.banner is None: + suffix = "" + if win32ui.debug: suffix = ", debug build" + sys.stderr.write("PythonWin %s on %s%s.\n" % (sys.version, sys.platform, suffix) ) + sys.stderr.write("Portions %s - see 'Help/About PythonWin' for further copyright information.\n" % (win32ui.copyright,) ) + else: + sys.stderr.write(banner) + self.AppendToPrompt([]) + + def SetContext(self, globals, locals, name = "Dbg"): + oldPrompt = sys.ps1 + if globals is None: + # Reset + sys.ps1 = ">>> " + sys.ps2 = "... " + locals = globals = __main__.__dict__ + else: + sys.ps1 = "[%s]>>> " % name + sys.ps2 = "[%s]... " % name + self.interp.locals = locals + self.interp.globals = globals + self.AppendToPrompt([], oldPrompt) + + def GetContext(self): + return self.interp.globals, self.interp.locals + + def DoGetLine(self, line=-1): + if line==-1: line = self.LineFromChar() + line = self.GetLine(line) + if pywin.is_platform_unicode: + try: + line = unicode(line, pywin.default_scintilla_encoding).encode(pywin.default_platform_encoding) + except: + # We should fix the underlying problem rather than always masking errors + # so make it complain. + print "Unicode error converting", repr(line) + line = unicode(line, pywin.default_scintilla_encoding, "ignore").encode(pywin.default_platform_encoding) + + while line and line[-1] in ['\r', '\n']: + line = line[:-1] + return line + def AppendToPrompt(self,bufLines, oldPrompt = None): + " Take a command and stick it at the end of the buffer (with python prompts inserted if required)." + self.flush() + lastLineNo = self.GetLineCount()-1 + line = self.DoGetLine(lastLineNo) + if oldPrompt and line==oldPrompt: + self.SetSel(self.GetTextLength()-len(oldPrompt), self.GetTextLength()) + self.ReplaceSel(sys.ps1) + elif (line!=str(sys.ps1)): + if len(line)!=0: self.write('\n') + self.write(sys.ps1) + self.flush() + self.idle.text.mark_set("iomark", "end-1c") + if not bufLines: + return + terms = (["\n" + sys.ps2] * (len(bufLines)-1)) + [''] + for bufLine, term in map(None, bufLines, terms): + if string.strip(bufLine): + self.write( bufLine + term ) + self.flush() + + def EnsureNoPrompt(self): + # Get ready to write some text NOT at a Python prompt. + self.flush() + lastLineNo = self.GetLineCount()-1 + line = self.DoGetLine(lastLineNo) + if not line or line in [sys.ps1, sys.ps2]: + self.SetSel(self.GetTextLength()-len(line), self.GetTextLength()) + self.ReplaceSel('') + else: + # Just add a new line. + self.write('\n') + + def _GetSubConfigNames(self): + return ["interactive"] # Allow [Keys:Interactive] sections to be specific + + def HookHandlers(self): + # Hook menu command (executed when a menu item with that ID is selected from a menu/toolbar + self.HookCommand(self.OnSelectBlock, win32ui.ID_EDIT_SELECT_BLOCK) + mod = pywin.scintilla.IDLEenvironment.GetIDLEModule("IdleHistory") + if mod is not None: + self.history = mod.History(self.idle.text, "\n" + sys.ps2) + else: + self.history = None + # hack for now for event handling. + + # GetBlockBoundary takes a line number, and will return the + # start and and line numbers of the block, and a flag indicating if the + # block is a Python code block. + # If the line specified has a Python prompt, then the lines are parsed + # backwards and forwards, and the flag is true. + # If the line does not start with a prompt, the block is searched forward + # and backward until a prompt _is_ found, and all lines in between without + # prompts are returned, and the flag is false. + def GetBlockBoundary( self, lineNo ): + line = self.DoGetLine(lineNo) + maxLineNo = self.GetLineCount()-1 + prefix = GetPromptPrefix(line) + if prefix is None: # Non code block + flag = 0 + startLineNo = lineNo + while startLineNo>0: + if GetPromptPrefix(self.DoGetLine(startLineNo-1)) is not None: + break # there _is_ a prompt + startLineNo = startLineNo-1 + endLineNo = lineNo + while endLineNo0 and prefix!=str(sys.ps1): + prefix = GetPromptPrefix(self.DoGetLine(startLineNo-1)) + if prefix is None: + break; # there is no prompt. + startLineNo = startLineNo - 1 + endLineNo = lineNo + while endLineNo= start: + thisLine = self.DoGetLine(end) + promptLen = len(GetPromptPrefix(thisLine)) + retList = [thisLine[promptLen:]] + retList + end = end-1 + return retList + + def OutputGrab(self): +# import win32traceutil; return + self.oldStdOut = sys.stdout + self.oldStdErr = sys.stderr + sys.stdout=self + sys.stderr=self + self.flush() + + def OutputRelease(self): + # a command may have overwritten these - only restore if not. + if self.oldStdOut is not None: + if sys.stdout == self: + sys.stdout=self.oldStdOut + if self.oldStdErr is not None: + if sys.stderr == self: + sys.stderr=self.oldStdErr + self.oldStdOut = None + self.oldStdErr = None + self.flush() + + ################################### + # + # Message/Command/Key Hooks. + # + # Enter key handler + # + def ProcessEnterEvent(self, event ): + self.SCICancel() + # First, check for an error message + haveGrabbedOutput = 0 + if self.HandleSpecialLine(): return 0 + + lineNo = self.LineFromChar() + start, end, isCode = self.GetBlockBoundary(lineNo) + # If we are not in a code block just go to the prompt (or create a new one) + if not isCode: + self.AppendToPrompt([]) + win32ui.SetStatusText(win32ui.LoadString(afxres.AFX_IDS_IDLEMESSAGE)) + return + + lines = self.ExtractCommand((start,end)) + + # If we are in a code-block, but it isnt at the end of the buffer + # then copy it to the end ready for editing and subsequent execution + if end!=self.GetLineCount()-1: + win32ui.SetStatusText('Press ENTER to execute command') + self.AppendToPrompt(lines) + self.SetSel(-2) + return + + # If SHIFT held down, we want new code here and now! + bNeedIndent = win32api.GetKeyState(win32con.VK_SHIFT)<0 or win32api.GetKeyState(win32con.VK_CONTROL)<0 + if bNeedIndent: + self.ReplaceSel("\n") + else: + self.SetSel(-2) + self.ReplaceSel("\n") + source = string.join(lines, '\n') + while source and source[-1] in '\t ': + source = source[:-1] + self.OutputGrab() # grab the output for the command exec. + try: + if self.interp.runsource(source, ""): # Need more input! + bNeedIndent = 1 + else: + # If the last line isnt empty, append a newline + if self.history is not None: + self.history.history_store(source) + self.AppendToPrompt([]) + win32ui.SetStatusText(win32ui.LoadString(afxres.AFX_IDS_IDLEMESSAGE)) +# win32ui.SetStatusText('Successfully executed statement') + finally: + self.OutputRelease() + if bNeedIndent: + win32ui.SetStatusText('Ready to continue the command') + # Now attempt correct indentation (should use IDLE?) + curLine = self.DoGetLine(lineNo)[len(sys.ps2):] + pos = 0 + indent='' + while len(curLine)>pos and curLine[pos] in string.whitespace: + indent = indent + curLine[pos] + pos = pos + 1 + if _is_block_opener(curLine): + indent = indent + '\t' + elif _is_block_closer(curLine): + indent = indent[:-1] + # use ReplaceSel to ensure it goes at the cursor rather than end of buffer. + self.ReplaceSel(sys.ps2+indent) + return 0 + + # ESC key handler + def ProcessEscEvent(self, event): + # Implement a cancel. + if self.SCIAutoCActive() or self.SCICallTipActive(): + self.SCICancel() + else: + win32ui.SetStatusText('Cancelled.') + self.AppendToPrompt(('',)) + return 0 + + def OnSelectBlock(self,command, code): + lineNo = self.LineFromChar() + start, end, isCode = self.GetBlockBoundary(lineNo) + startIndex = self.LineIndex(start) + endIndex = self.LineIndex(end+1)-2 # skip \r + \n + if endIndex<0: # must be beyond end of buffer + endIndex = -2 # self.Length() + self.SetSel(startIndex,endIndex) + + def GetRightMenuItems(self): + # Just override parents + ret = [] + flags = 0 + ret.append((flags, win32ui.ID_EDIT_UNDO, '&Undo')) + ret.append(win32con.MF_SEPARATOR) + ret.append((flags, win32ui.ID_EDIT_CUT, 'Cu&t')) + ret.append((flags, win32ui.ID_EDIT_COPY, '&Copy')) + ret.append((flags, win32ui.ID_EDIT_PASTE, '&Paste')) + ret.append(win32con.MF_SEPARATOR) + ret.append((flags, win32ui.ID_EDIT_SELECT_ALL, '&Select all')) + ret.append((flags, win32ui.ID_EDIT_SELECT_BLOCK, 'Select &block')) + ret.append((flags, win32ui.ID_VIEW_WHITESPACE, "View &Whitespace")) + return ret + + def MDINextEvent(self, event): + win32ui.GetMainFrame().MDINext(0) + def MDIPrevEvent(self, event): + win32ui.GetMainFrame().MDINext(0) + + def WindowBackEvent(self, event): + parent = self.GetParentFrame() + if parent == win32ui.GetMainFrame(): + # It is docked. + try: + wnd, isactive = parent.MDIGetActive() + wnd.SetFocus() + except win32ui.error: + # No MDI window active! + pass + else: + # Normal Window + try: + lastActive = self.GetParentFrame().lastActive + # If the window is invalid, reset it. + if lastActive is not None and (lastActive._obj_ is None or lastActive.GetSafeHwnd()==0): + lastActive = self.GetParentFrame().lastActive = None + win32ui.SetStatusText("The last active Window has been closed.") + except AttributeError: + print "Can't find the last active window!" + lastActive = None + if lastActive is not None: + lastActive.MDIActivate() + +class InteractiveView(InteractiveCore, winout.WindowOutputView): + def __init__(self, doc): + InteractiveCore.__init__(self) + winout.WindowOutputView.__init__(self, doc) + def _MakeColorizer(self): + return InteractiveFormatter(self) + def OnInitialUpdate(self): + winout.WindowOutputView.OnInitialUpdate(self) + self.SetWordWrap() + self.Init() + def HookHandlers(self): + winout.WindowOutputView.HookHandlers(self) + InteractiveCore.HookHandlers(self) + +class CInteractivePython(winout.WindowOutput): + def __init__(self, makeDoc = None, makeFrame = None): + self.IsFinalDestroy = 0 + winout.WindowOutput.__init__(self, sectionProfile, sectionProfile, \ + winout.flags.WQ_LINE, 1, None, makeDoc, makeFrame, InteractiveView ) + self.Create() + + def OnViewDestroy(self, view): + if self.IsFinalDestroy: + view.OutputRelease() + winout.WindowOutput.OnViewDestroy(self, view) + + def Close(self): + self.IsFinalDestroy = 1 + winout.WindowOutput.Close(self) + +class InteractiveFrame(winout.WindowOutputFrame): + def __init__(self): + self.lastActive = None + winout.WindowOutputFrame.__init__(self) + + def OnMDIActivate(self, bActive, wndActive, wndDeactive): + if bActive: + self.lastActive = wndDeactive + +###################################################################### +## +## Dockable Window Support +## +###################################################################### +ID_DOCKED_INTERACTIVE_CONTROLBAR = 0xe802 + +DockedInteractiveViewParent = InteractiveView +class DockedInteractiveView(DockedInteractiveViewParent): + def HookHandlers(self): + DockedInteractiveViewParent.HookHandlers(self) + self.HookMessage(self.OnSetFocus, win32con.WM_SETFOCUS) + self.HookMessage(self.OnKillFocus, win32con.WM_KILLFOCUS) + def OnSetFocus(self, msg): + self.GetParentFrame().SetActiveView(self) + return 1 + def OnKillFocus(self, msg): + # If we are losing focus to another in this app, reset the main frame's active view. + hwnd = wparam = msg[2] + try: + wnd = win32ui.CreateWindowFromHandle(hwnd) + reset = wnd.GetTopLevelFrame()==self.GetTopLevelFrame() + except win32ui.error: + reset = 0 # Not my window + if reset: self.GetParentFrame().SetActiveView(None) + return 1 + def OnDestroy(self, msg): + newSize = self.GetWindowPlacement()[4] + pywin.framework.app.SaveWindowSize("Interactive Window", newSize, "docked") + try: + if self.GetParentFrame().GetActiveView==self: + self.GetParentFrame().SetActiveView(None) + except win32ui.error: + pass + try: + if win32ui.GetMainFrame().GetActiveView()==self: + win32ui.GetMainFrame().SetActiveView(None) + except win32ui.error: + pass + return DockedInteractiveViewParent.OnDestroy(self, msg) + +class CDockedInteractivePython(CInteractivePython): + def __init__(self, dockbar): + self.bFirstCreated = 0 + self.dockbar = dockbar + CInteractivePython.__init__(self) + def NeedRecreateWindow(self): + if self.bCreating: + return 0 + try: + frame = win32ui.GetMainFrame() + if frame.closing: + return 0 # Dieing! + except (win32ui.error, AttributeError): + return 0 # The app is dieing! + try: + cb = frame.GetControlBar(ID_DOCKED_INTERACTIVE_CONTROLBAR) + return not cb.IsWindowVisible() + except win32ui.error: + return 1 # Control bar does not exist! + def RecreateWindow(self): + try: + dockbar = win32ui.GetMainFrame().GetControlBar(ID_DOCKED_INTERACTIVE_CONTROLBAR) + win32ui.GetMainFrame().ShowControlBar(dockbar, 1, 1) + except win32ui.error: + CreateDockedInteractiveWindow() + + def Create(self): + self.bCreating = 1 + doc = InteractiveDocument(None, self.DoCreateDoc()) + view = DockedInteractiveView(doc) + defRect = pywin.framework.app.LoadWindowSize("Interactive Window", "docked") + if defRect[2]-defRect[0]==0: + defRect = 0, 0, 500, 200 + style = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.WS_BORDER + id = 1050 # win32ui.AFX_IDW_PANE_FIRST + view.CreateWindow(self.dockbar, id, style, defRect) + view.OnInitialUpdate() + self.bFirstCreated = 1 + + self.currentView = doc.GetFirstView() + self.bCreating = 0 + if self.title: doc.SetTitle(self.title) + +# The factory we pass to the dockable window support. +def InteractiveViewCreator(parent): + global edit + edit = CDockedInteractivePython(parent) + return edit.currentView + +def CreateDockedInteractiveWindow(): + # Later, the DockingBar should be capable of hosting multiple + # children. + from pywin.docking.DockingBar import DockingBar + bar = DockingBar() + creator = InteractiveViewCreator + bar.CreateWindow(win32ui.GetMainFrame(), creator, "Interactive Window", ID_DOCKED_INTERACTIVE_CONTROLBAR) + bar.SetBarStyle( bar.GetBarStyle()|afxres.CBRS_TOOLTIPS|afxres.CBRS_FLYBY|afxres.CBRS_SIZE_DYNAMIC) + bar.EnableDocking(afxres.CBRS_ALIGN_ANY) + win32ui.GetMainFrame().DockControlBar(bar, afxres.AFX_IDW_DOCKBAR_BOTTOM) + +###################################################################### +# +# The public interface to this module. +# +###################################################################### +# No extra functionality now, but maybe later, so +# publicize these names. +InteractiveDocument = winout.WindowOutputDocument + +# We remember our one and only interactive window in the "edit" variable. +edit = None + +def CreateInteractiveWindowUserPreference(makeDoc = None, makeFrame = None): + """Create some sort of interactive window if the user's preference say we should. + """ + bCreate = LoadPreference("Show at startup", 1) + if bCreate: + CreateInteractiveWindow(makeDoc, makeFrame) + +def CreateInteractiveWindow(makeDoc = None, makeFrame = None): + """Create a standard or docked interactive window unconditionally + """ + assert edit is None, "Creating second interactive window!" + bDocking = LoadPreference("Docking", 0) + if bDocking: + CreateDockedInteractiveWindow() + else: + CreateMDIInteractiveWindow(makeDoc, makeFrame) + assert edit is not None, "Created interactive window, but did not set the global!" + edit.currentView.SetFocus() + +def CreateMDIInteractiveWindow(makeDoc = None, makeFrame = None): + """Create a standard (non-docked) interactive window unconditionally + """ + global edit + if makeDoc is None: makeDoc = InteractiveDocument + if makeFrame is None: makeFrame = InteractiveFrame + edit = CInteractivePython(makeDoc=makeDoc,makeFrame=makeFrame) + +def DestroyInteractiveWindow(): + """ Destroy the interactive window. + This is different to Closing the window, + which may automatically re-appear. Once destroyed, it can never be recreated, + and a complete new instance must be created (which the various other helper + functions will then do after making this call + """ + global edit + if edit is not None and edit.currentView is not None: + if edit.currentView.GetParentFrame() == win32ui.GetMainFrame(): + # It is docked - do nothing now (this is only called at shutdown!) + pass + else: + # It is a standard window - call Close on the container. + edit.Close() + edit = None + +def CloseInteractiveWindow(): + """Close the interactive window, allowing it to be re-created on demand. + """ + global edit + if edit is not None and edit.currentView is not None: + if edit.currentView.GetParentFrame() == win32ui.GetMainFrame(): + # It is docked, just hide the dock bar. + frame = win32ui.GetMainFrame() + cb = frame.GetControlBar(ID_DOCKED_INTERACTIVE_CONTROLBAR) + frame.ShowControlBar(cb, 0, 1) + else: + # It is a standard window - destroy the frame/view, allowing the object itself to remain. + edit.currentView.GetParentFrame().DestroyWindow() + +def ToggleInteractiveWindow(): + """If the interactive window is visible, hide it, otherwise show it. + """ + if edit is None: + CreateInteractiveWindow() + else: + if edit.NeedRecreateWindow(): + edit.RecreateWindow() + else: + # Close it, allowing a reopen. + CloseInteractiveWindow() + +def ShowInteractiveWindow(): + """Shows (or creates if necessary) an interactive window""" + if edit is None: + CreateInteractiveWindow() + else: + if edit.NeedRecreateWindow(): + edit.RecreateWindow() + else: + parent = edit.currentView.GetParentFrame() + if parent == win32ui.GetMainFrame(): # It is docked. + edit.currentView.SetFocus() + else: # It is a "normal" window + edit.currentView.GetParentFrame().AutoRestore() + win32ui.GetMainFrame().MDIActivate(edit.currentView.GetParentFrame()) + +def IsInteractiveWindowVisible(): + return edit is not None and not edit.NeedRecreateWindow() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/intpyapp.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/intpyapp.py new file mode 100644 index 000000000..1b22ee1cc --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/intpyapp.py @@ -0,0 +1,442 @@ +# intpyapp.py - Interactive Python application class +# +import win32con +import win32api +import win32ui +import __main__ +import sys +import string +import app +import traceback +from pywin.mfc import window, afxres, dialog +import commctrl +import dbgcommands + +lastLocateFileName = ".py" # used in the "File/Locate" dialog... + +class MainFrame(app.MainFrame): + def OnCreate(self, createStruct): + self.closing = 0 + if app.MainFrame.OnCreate(self, createStruct)==-1: + return -1 + style = win32con.WS_CHILD | afxres.CBRS_SIZE_DYNAMIC | afxres.CBRS_TOP | afxres.CBRS_TOOLTIPS | afxres.CBRS_FLYBY + + self.EnableDocking(afxres.CBRS_ALIGN_ANY) + + tb = win32ui.CreateToolBar (self, style | win32con.WS_VISIBLE) + tb.ModifyStyle(0, commctrl.TBSTYLE_FLAT) + tb.LoadToolBar(win32ui.IDR_MAINFRAME) + tb.EnableDocking(afxres.CBRS_ALIGN_ANY) + tb.SetWindowText("Standard") + self.DockControlBar(tb) + # Any other packages which use toolbars + from pywin.debugger.debugger import PrepareControlBars + PrepareControlBars(self) + # Note "interact" also uses dockable windows, but they already happen + + # And a "Tools" menu on the main frame. + menu = self.GetMenu() + import toolmenu + toolmenu.SetToolsMenu(menu, 2) + # And fix the "Help" menu on the main frame + from pywin.framework import help + help.SetHelpMenuOtherHelp(menu) + + def OnClose(self): + try: + import pywin.debugger + if pywin.debugger.currentDebugger is not None and pywin.debugger.currentDebugger.pumping: + try: + pywin.debugger.currentDebugger.close(1) + except: + import traceback + traceback.print_exc() + return + except win32ui.error: + pass + self.closing = 1 + self.SaveBarState("ToolbarDefault") + self.SetActiveView(None) # Otherwise MFC's OnClose may _not_ prompt for save. + + from pywin.framework import help + help.FinalizeHelp() + + self.DestroyControlBar(afxres.AFX_IDW_TOOLBAR) + self.DestroyControlBar(win32ui.ID_VIEW_TOOLBAR_DBG) + + return self._obj_.OnClose() + + def DestroyControlBar(self, id): + try: + bar = self.GetControlBar(id) + except win32ui.error: + return + bar.DestroyWindow() + + def OnCommand(self, wparam, lparam): + # By default, the current MDI child frame will process WM_COMMAND + # messages before any docked control bars - even if the control bar + # has focus. This is a problem for the interactive window when docked. + # Therefore, we detect the situation of a view having the main frame + # as its parent, and assume it must be a docked view (which it will in an MDI app) + try: + v = self.GetActiveView() # Raise an exception if none - good - then we want default handling + # Main frame _does_ have a current view (ie, a docking view) - see if it wants it. + if v.OnCommand(wparam, lparam): + return 1 + except (win32ui.error, AttributeError): + pass + return self._obj_.OnCommand(wparam, lparam) + +class InteractivePythonApp(app.CApp): + # This works if necessary - just we dont need to override the Run method. +# def Run(self): +# return self._obj_.Run() + + def HookCommands(self): + app.CApp.HookCommands(self) + dbgcommands.DebuggerCommandHandler().HookCommands() + self.HookCommand(self.OnViewBrowse,win32ui.ID_VIEW_BROWSE) + self.HookCommand(self.OnFileImport,win32ui.ID_FILE_IMPORT) + self.HookCommand(self.OnFileCheck,win32ui.ID_FILE_CHECK) + self.HookCommandUpdate(self.OnUpdateFileCheck, win32ui.ID_FILE_CHECK) + self.HookCommand(self.OnFileRun,win32ui.ID_FILE_RUN) + self.HookCommand(self.OnFileLocate,win32ui.ID_FILE_LOCATE) + self.HookCommand(self.OnInteractiveWindow, win32ui.ID_VIEW_INTERACTIVE) + self.HookCommandUpdate(self.OnUpdateInteractiveWindow, win32ui.ID_VIEW_INTERACTIVE) + self.HookCommand(self.OnViewOptions, win32ui.ID_VIEW_OPTIONS) + self.HookCommand(self.OnHelpIndex, afxres.ID_HELP_INDEX) + self.HookCommand(self.OnFileSaveAll, win32ui.ID_FILE_SAVE_ALL) + self.HookCommand(self.OnViewToolbarDbg, win32ui.ID_VIEW_TOOLBAR_DBG) + self.HookCommandUpdate(self.OnUpdateViewToolbarDbg, win32ui.ID_VIEW_TOOLBAR_DBG) + + def CreateMainFrame(self): + return MainFrame() + + def MakeExistingDDEConnection(self): + # Use DDE to connect to an existing instance + # Return None if no existing instance + try: + import intpydde + except ImportError: + # No dde support! + return None + conv = intpydde.CreateConversation(self.ddeServer) + try: + conv.ConnectTo("Pythonwin", "System") + return conv + except intpydde.error: + return None + + def InitDDE(self): + # Do all the magic DDE handling. + # Returns TRUE if we have pumped the arguments to our + # remote DDE app, and we should terminate. + try: + import intpydde + except ImportError: + self.ddeServer = None + intpydde = None + if intpydde is not None: + self.ddeServer = intpydde.DDEServer(self) + self.ddeServer.Create("Pythonwin", intpydde.CBF_FAIL_SELFCONNECTIONS ) + try: + # If there is an existing instance, pump the arguments to it. + connection = self.MakeExistingDDEConnection() + if connection is not None: + if self.ProcessArgs(sys.argv, connection) is None: + return 1 + except: + win32ui.MessageBox("There was an error in the DDE conversation with Pythonwin") + traceback.print_exc() + + def InitInstance(self): + # Allow "/nodde" and "/newinstance to optimize this! + if "/nodde" not in sys.argv and "/newinstance" not in sys.argv: + if self.InitDDE(): + return 1 # A remote DDE client is doing it for us! + else: + self.ddeServer = None + + win32ui.SetRegistryKey("Python %s" % (sys.winver,)) # MFC automatically puts the main frame caption on! + app.CApp.InitInstance(self) + + # Create the taskbar icon + win32ui.CreateDebuggerThread() + + # Allow Pythonwin to host OCX controls. + win32ui.EnableControlContainer() + + # Display the interactive window if the user wants it. + import interact + interact.CreateInteractiveWindowUserPreference() + + # Load the modules we use internally. + self.LoadSystemModules() + + # Load additional module the user may want. + self.LoadUserModules() + + # Load the ToolBar state near the end of the init process, as + # there may be Toolbar IDs created by the user or other modules. + # By now all these modules should be loaded, so all the toolbar IDs loaded. + try: + self.frame.LoadBarState("ToolbarDefault") + except win32ui.error: + # MFC sucks. It does essentially "GetDlgItem(x)->Something", so if the + # toolbar with ID x does not exist, MFC crashes! Pythonwin has a trap for this + # but I need to investigate more how to prevent it (AFAIK, ensuring all the + # toolbars are created by now _should_ stop it!) + pass + + # Finally process the command line arguments. + self.ProcessArgs(sys.argv) + + def ExitInstance(self): + win32ui.DestroyDebuggerThread() + try: + import interact + interact.DestroyInteractiveWindow() + except: + pass + if self.ddeServer is not None: + self.ddeServer.Shutdown() + self.ddeServer = None + return app.CApp.ExitInstance(self) + + def Activate(self): + # Bring to the foreground. Mainly used when another app starts up, it asks + # this one to activate itself, then it terminates. + frame = win32ui.GetMainFrame() + frame.SetForegroundWindow() + if frame.GetWindowPlacement()[1]==win32con.SW_SHOWMINIMIZED: + frame.ShowWindow(win32con.SW_RESTORE) + + def ProcessArgs(self, args, dde = None): + # If we are going to talk to a remote app via DDE, then + # activate it! + if dde is not None: dde.Exec("self.Activate()") + if len(args) and args[0] in ['/nodde','/newinstance']: del args[0] # already handled. + if len(args)<1 or not args[0]: # argv[0]=='' when started without args, just like Python.exe! + return + try: + if args[0] and args[0][0]!='/': + argStart = 0 + argType = string.lower(win32ui.GetProfileVal("Python","Default Arg Type","/edit")) + else: + argStart = 1 + argType = args[0] + if argStart >= len(args): + raise TypeError, "The command line requires an additional arg." + if argType=="/edit": + # Load up the default application. + if dde: + fname = win32api.GetFullPathName(args[argStart]) + dde.Exec("win32ui.GetApp().OpenDocumentFile(%s)" % (`fname`)) + else: + win32ui.GetApp().OpenDocumentFile(args[argStart]) + elif argType=="/rundlg": + if dde: + dde.Exec("import scriptutils;scriptutils.RunScript('%s', '%s', 1)" % (args[argStart], string.join(args[argStart+1:]))) + else: + import scriptutils + scriptutils.RunScript(args[argStart], string.join(args[argStart+1:])) + elif argType=="/run": + if dde: + dde.Exec("import scriptutils;scriptutils.RunScript('%s', '%s', 0)" % (args[argStart], string.join(args[argStart+1:]))) + else: + import scriptutils + scriptutils.RunScript(args[argStart], string.join(args[argStart+1:]), 0) + elif argType=="/app": + raise RuntimeError, "/app only supported for new instances of Pythonwin.exe" + elif argType=='/new': # Allow a new instance of Pythonwin + return 1 + elif argType=='/dde': # Send arbitary command + if dde is not None: + dde.Exec(args[argStart]) + else: + win32ui.MessageBox("The /dde command can only be used\r\nwhen Pythonwin is already running") + else: + raise TypeError, "Command line arguments not recognised" + except: + typ, val, tb = sys.exc_info() + print "There was an error processing the command line args" + traceback.print_exception(typ, val, tb, None, sys.stdout) + win32ui.OutputDebug("There was a problem with the command line args - %s: %s" % (`typ`,`val`)) + tb = None # Prevent a cycle + + + def LoadSystemModules(self): + self.DoLoadModules("editor,stdin") + + def LoadUserModules(self, moduleNames = None): + # Load the users modules. + if moduleNames is None: + default = "sgrepmdi" + moduleNames=win32ui.GetProfileVal('Python','Startup Modules',default) + self.DoLoadModules(moduleNames) + + def DoLoadModules(self, moduleNames): # ", sep string of module names. + if not moduleNames: return + modules = string.splitfields(moduleNames,",") + for module in modules: + try: + exec "import "+module + except: # Catch em all, else the app itself dies! 'ImportError: + traceback.print_exc() + msg = 'Startup import of user module "%s" failed' % module + print msg + win32ui.MessageBox(msg) + + # + # DDE Callback + # + def OnDDECommand(self, command): +# print "DDE Executing", `command` + try: + exec command + "\n" + except: + print "ERROR executing DDE command: ", command + traceback.print_exc() + raise + + # + # General handlers + # + def OnViewBrowse( self, id, code ): + " Called when ViewBrowse message is received " + from pywin.mfc import dialog + from pywin.tools import browser + obName = dialog.GetSimpleInput('Object', '__builtins__', 'Browse Python Object') + if obName is None: + return + try: + browser.Browse(eval(obName, __main__.__dict__, __main__.__dict__)) + except NameError: + win32ui.MessageBox('This is no object with this name') + except AttributeError: + win32ui.MessageBox('The object has no attribute of that name') + except: + traceback.print_exc() + win32ui.MessageBox('This object can not be browsed') + + def OnFileImport( self, id, code ): + " Called when a FileImport message is received. Import the current or specified file" + import scriptutils + scriptutils.ImportFile() + + def OnFileCheck( self, id, code ): + " Called when a FileCheck message is received. Check the current file." + import scriptutils + scriptutils.CheckFile() + + def OnUpdateFileCheck(self, cmdui): + import scriptutils + cmdui.Enable( scriptutils.GetActiveFileName(0) is not None ) + + def OnFileRun( self, id, code ): + " Called when a FileRun message is received. " + import scriptutils + showDlg = win32api.GetKeyState(win32con.VK_SHIFT) >= 0 + scriptutils.RunScript(None, None, showDlg) + + def OnFileLocate( self, id, code ): + from pywin.mfc import dialog + import scriptutils + import os + global lastLocateFileName # save the new version away for next time... + + # Loop until a good name, or cancel + while 1: + name = dialog.GetSimpleInput('File name', lastLocateFileName, 'Locate Python File') + if name is None: # Cancelled. + break + lastLocateFileName = name + # if ".py" supplied, rip it off! + if string.lower(lastLocateFileName[-3:])=='.py': + lastLocateFileName = lastLocateFileName[:-3] + lastLocateFileName = string.translate(lastLocateFileName, string.maketrans(".","\\")) + newName = scriptutils.LocatePythonFile(lastLocateFileName) + if newName is None: + win32ui.MessageBox("The file '%s' can not be located" % lastLocateFileName) + else: + win32ui.GetApp().OpenDocumentFile(newName) + break + + # Display all the "options" proprety pages we can find + def OnViewOptions(self, id, code): + win32ui.InitRichEdit() + sheet = dialog.PropertySheet("Pythonwin Options") + # Add property pages we know about that need manual work. + from pywin.dialogs import ideoptions + sheet.AddPage( ideoptions.OptionsPropPage() ) + + import toolmenu + sheet.AddPage( toolmenu.ToolMenuPropPage() ) + + # Get other dynamic pages from templates. + pages = [] + for template in self.GetDocTemplateList(): + try: + # Dont actually call the function with the exception handler. + getter = template.GetPythonPropertyPages + except AttributeError: + # Template does not provide property pages! + continue + pages = pages + getter() + + # Debugger template goes at the end + try: + from pywin.debugger import configui + except ImportError: + configui = None + if configui is not None: pages.append(configui.DebuggerOptionsPropPage()) + # Now simply add the pages, and display the dialog. + for page in pages: + sheet.AddPage(page) + + if sheet.DoModal()==win32con.IDOK: + win32ui.SetStatusText("Applying configuration changes...", 1) + win32ui.DoWaitCursor(1) + # Tell every Window in our app that win.ini has changed! + win32ui.GetMainFrame().SendMessageToDescendants(win32con.WM_WININICHANGE, 0, 0) + win32ui.DoWaitCursor(0) + + def OnInteractiveWindow(self, id, code): + # toggle the existing state. + import interact + interact.ToggleInteractiveWindow() + + def OnUpdateInteractiveWindow(self, cmdui): + try: + interact=sys.modules['pywin.framework.interact'] + state = interact.IsInteractiveWindowVisible() + except KeyError: # Interactive module hasnt ever been imported. + state = 0 + cmdui.Enable() + cmdui.SetCheck(state) + + def OnFileSaveAll(self, id, code): + # Only attempt to save editor documents. + from pywin.framework.editor import editorTemplate + docs = filter(lambda doc: doc.IsModified() and doc.GetPathName(), editorTemplate.GetDocumentList()) + map(lambda doc: doc.OnSaveDocument(doc.GetPathName()), docs) + win32ui.SetStatusText("%d documents saved" % len(docs), 1) + + def OnViewToolbarDbg(self, id, code): + if code==0: + return not win32ui.GetMainFrame().OnBarCheck(id) + + def OnUpdateViewToolbarDbg(self, cmdui): + win32ui.GetMainFrame().OnUpdateControlBarMenu(cmdui) + cmdui.Enable(1) + + def OnHelpIndex( self, id, code ): + import help + help.SelectAndRunHelpFile() + +# As per the comments in app.py, this use is depreciated. +# app.AppBuilder = InteractivePythonApp + +# Now all we do is create the application +thisApp = InteractivePythonApp() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/intpydde.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/intpydde.py new file mode 100644 index 000000000..2187a585c --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/intpydde.py @@ -0,0 +1,56 @@ +# DDE support for Pythonwin +# +# Seems to work fine (in the context that IE4 seems to have broken +# DDE on _all_ NT4 machines I have tried, but only when a "Command Prompt" window +# is open. Strange, but true. If you have problems with this, close all Command Prompts! + + +import win32ui +import win32api, win32con +from pywin.mfc import object +from dde import * +import traceback +import string + +class DDESystemTopic(object.Object): + def __init__(self, app): + self.app = app + object.Object.__init__(self, CreateServerSystemTopic()) + def Exec(self, data): + try: +# print "Executing", cmd + self.app.OnDDECommand(data) + except: + # The DDE Execution failed. + print "Error executing DDE command." + traceback.print_exc() + return 0 + +class DDEServer(object.Object): + def __init__(self, app): + self.app = app + object.Object.__init__(self, CreateServer()) + self.topic = self.item = None + + def CreateSystemTopic(self): + return DDESystemTopic(self.app) + + def Shutdown(self): + self._obj_.Shutdown() + self._obj_.Destroy() + if self.topic is not None: + self.topic.Destroy() + self.topic = None + if self.item is not None: + self.item.Destroy() + self.item = None + + def OnCreate(self): + return 1 + + def Status(self, msg): + try: + win32ui.SetStatusText(msg) + except win32ui.error: + pass + diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/scriptutils.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/scriptutils.py new file mode 100644 index 000000000..da2b18e6b --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/scriptutils.py @@ -0,0 +1,590 @@ +""" +Various utilities for running/importing a script +""" +import app +import sys +import win32ui +import win32api +import win32con +import __main__ +from pywin.mfc import dialog +import os +import string +import traceback +import linecache +import bdb + +from cmdline import ParseArgs + +RS_DEBUGGER_NONE=0 # Dont run under the debugger. +RS_DEBUGGER_STEP=1 # Start stepping under the debugger +RS_DEBUGGER_GO=2 # Just run under the debugger, stopping only at break-points. +RS_DEBUGGER_PM=3 # Dont run under debugger, but do post-mortem analysis on exception. + +debugging_options = string.split("""No debugging +Step-through in the debugger +Run in the debugger +Post-Mortem of unhandled exceptions""", "\n") + +# A dialog box for the "Run Script" command. +class DlgRunScript(dialog.Dialog): + "A class for the 'run script' dialog" + def __init__(self, bHaveDebugger): + dialog.Dialog.__init__(self, win32ui.IDD_RUN_SCRIPT ) + self.AddDDX(win32ui.IDC_EDIT1, "script") + self.AddDDX(win32ui.IDC_EDIT2, "args") + self.AddDDX(win32ui.IDC_COMBO1, "debuggingType", "i") + self.HookCommand(self.OnBrowse, win32ui.IDC_BUTTON2) + self.bHaveDebugger = bHaveDebugger + def OnInitDialog(self): + rc = dialog.Dialog.OnInitDialog(self) + cbo = self.GetDlgItem(win32ui.IDC_COMBO1) + for o in debugging_options: + cbo.AddString(o) + cbo.SetCurSel(self['debuggingType']) + if not self.bHaveDebugger: + cbo.EnableWindow(0) + + def OnBrowse(self, id, cmd): + openFlags = win32con.OFN_OVERWRITEPROMPT|win32con.OFN_FILEMUSTEXIST + dlg = win32ui.CreateFileDialog(1,None,None,openFlags, "Python Scripts (*.py)|*.py||", self) + dlg.SetOFNTitle("Run Script") + if dlg.DoModal()!=win32con.IDOK: + return 0 + self['script'] = dlg.GetPathName() + self.UpdateData(0) + return 0 + +def GetDebugger(): + """Get the default Python debugger. Returns the debugger, or None. + + It is assumed the debugger has a standard "pdb" defined interface. + Currently always returns the 'pywin.debugger' debugger, or None + (pdb is _not_ returned as it is not effective in this GUI environment) + """ + try: + import pywin.debugger + return pywin.debugger + except ImportError: + return None + +def IsOnPythonPath(path): + "Given a path only, see if it is on the Pythonpath. Assumes path is a full path spec." + # must check that the command line arg's path is in sys.path + for syspath in sys.path: + try: + # Python 1.5 and later allows an empty sys.path entry. + if syspath and win32ui.FullPath(syspath)==path: + return 1 + except win32ui.error, details: + print "Warning: The sys.path entry '%s' is invalid\n%s" % (syspath, details) + return 0 + +def GetPackageModuleName(fileName): + """Given a filename, return (module name, new path). + eg - given "c:\a\b\c\my.py", return ("b.c.my",None) if "c:\a" is on sys.path. + If no package found, will return ("my", "c:\a\b\c") + """ + path, fname = os.path.split(fileName) + path=origPath=win32ui.FullPath(path) + fname = os.path.splitext(fname)[0] + modBits = [] + newPathReturn = None + if not IsOnPythonPath(path): + # Module not directly on the search path - see if under a package. + while len(path)>3: # ie 'C:\' + path, modBit = os.path.split(path) + modBits.append(modBit) + # If on path, _and_ existing package of that name loaded. + if IsOnPythonPath(path) and sys.modules.has_key(modBit) and \ + ( os.path.exists(os.path.join(path, '__init__.py')) or \ + os.path.exists(os.path.join(path, '__init__.pyc')) or \ + os.path.exists(os.path.join(path, '__init__.pyo')) \ + ): + modBits.reverse() + return string.join(modBits, ".") + "." + fname, newPathReturn + # Not found - look a level higher + else: + newPathReturn = origPath + + return fname, newPathReturn + +def GetActiveView(): + """Gets the edit control (eg, EditView) with the focus, or None + """ + try: + childFrame, bIsMaximised = win32ui.GetMainFrame().MDIGetActive() + return childFrame.GetActiveView() + except win32ui.error: + return None + +def GetActiveEditControl(): + view = GetActiveView() + if view is None: return None + if hasattr(view, "SCIAddText"): # Is it a scintilla control? + return view + try: + return view.GetRichEditCtrl() + except AttributeError: + pass + try: + return view.GetEditCtrl() + except AttributeError: + pass + +def GetActiveEditorDocument(): + """Returns the active editor document, or None if no + active document or its not an editor document. + """ + view = GetActiveView() + if view is None: return None + doc = view.GetDocument() + if hasattr(doc, "MarkerAdd"): # Is it an Editor document? + return doc + return None + +def GetActiveFileName(bAutoSave = 1): + """Gets the file name for the active frame, saving it if necessary. + + Returns None if it cant be found, or raises KeyboardInterrupt. + """ + pathName = None + active = GetActiveView() + if active is None: + return None + try: + doc = active.GetDocument() + pathName = doc.GetPathName() + + if bAutoSave and \ + (len(pathName)>0 or \ + doc.GetTitle()[:8]=="Untitled" or \ + doc.GetTitle()[:6]=="Script"): # if not a special purpose window + if doc.IsModified(): + try: + doc.OnSaveDocument(pathName) + pathName = doc.GetPathName() + + # clear the linecache buffer + linecache.clearcache() + + except win32ui.error: + raise KeyboardInterrupt + + except (win32ui.error, AttributeError): + pass + if not pathName: + return None + return pathName + +lastScript = '' +lastArgs = '' +lastDebuggingType = RS_DEBUGGER_NONE + +def RunScript(defName=None, defArgs=None, bShowDialog = 1, debuggingType=None): + global lastScript, lastArgs, lastDebuggingType + _debugger_stop_frame_ = 1 # Magic variable so the debugger will hide me! + + # Get the debugger - may be None! + debugger = GetDebugger() + + if defName is None: + try: + pathName = GetActiveFileName() + except KeyboardInterrupt: + return # User cancelled save. + else: + pathName = defName + if not pathName: + pathName = lastScript + if defArgs is None: + args = '' + if pathName==lastScript: + args = lastArgs + else: + args = defArgs + if debuggingType is None: debuggingType = lastDebuggingType + + if not pathName or bShowDialog: + dlg = DlgRunScript(debugger is not None) + dlg['script'] = pathName + dlg['args'] = args + dlg['debuggingType'] = debuggingType + if dlg.DoModal() != win32con.IDOK: + return + script=dlg['script'] + args=dlg['args'] + debuggingType = dlg['debuggingType'] + if not script: return + if debuggingType == RS_DEBUGGER_GO and debugger is not None: + # This may surprise users - they select "Run under debugger", but + # it appears not to! Only warn when they pick from the dialog! + # First - ensure the debugger is activated to pickup any break-points + # set in the editor. + try: + # Create the debugger, but _dont_ init the debugger GUI. + rd = debugger._GetCurrentDebugger() + except AttributeError: + rd = None + if rd is not None and len(rd.breaks)==0: + msg = "There are no active break-points.\r\n\r\nSelecting this debug option without any\r\nbreak-points is unlikely to have the desired effect\r\nas the debugger is unlikely to be invoked..\r\n\r\nWould you like to step-through in the debugger instead?" + rc = win32ui.MessageBox(msg, win32ui.LoadString(win32ui.IDR_DEBUGGER), win32con.MB_YESNOCANCEL | win32con.MB_ICONINFORMATION) + if rc == win32con.IDCANCEL: + return + if rc == win32con.IDYES: + debuggingType = RS_DEBUGGER_STEP + + lastDebuggingType = debuggingType + lastScript = script + lastArgs = args + else: + script = pathName + + # try and open the script. + if len(os.path.splitext(script)[1])==0: # check if no extension supplied, and give one. + script = script + '.py' + # If no path specified, try and locate the file + path, fnameonly = os.path.split(script) + if len(path)==0: + try: + os.stat(fnameonly) # See if it is OK as is... + script = fnameonly + except os.error: + fullScript = app.LocatePythonFile(script) + if fullScript is None: + win32ui.MessageBox("The file '%s' can not be located" % script ) + return + script = fullScript + else: + path = win32ui.FullPath(path) + if not IsOnPythonPath(path): sys.path.append(path) + + try: + f = open(script) + except IOError, (code, msg): + win32ui.MessageBox("The file could not be opened - %s (%d)" % (msg, code)) + return + + # Remember and hack sys.argv for the script. + oldArgv = sys.argv + sys.argv = ParseArgs(args) + sys.argv.insert(0, script) + # sys.path[0] is the path of the script + oldPath0 = sys.path[0] + newPath0 = os.path.split(script)[0] + if not oldPath0: # if sys.path[0] is empty + sys.path[0] = newPath0 + insertedPath0 = 0 + else: + sys.path.insert(0, newPath0) + insertedPath0 = 1 + bWorked = 0 + win32ui.DoWaitCursor(1) + base = os.path.split(script)[1] + # Allow windows to repaint before starting. + win32ui.PumpWaitingMessages() + win32ui.SetStatusText('Running script %s...' % base,1 ) + exitCode = 0 + from pywin.framework import interact + # Check the debugger flags + if debugger is None and (debuggingType != RS_DEBUGGER_NONE): + win32ui.MessageBox("No debugger is installed. Debugging options have been ignored!") + debuggingType = RS_DEBUGGER_NONE + + # Get a code object - ignore the debugger for this, as it is probably a syntax error + # at this point + try: + codeObject = compile(f.read()+"\n", script, "exec") + except: + # Almost certainly a syntax error! + _HandlePythonFailure("run script", script) + # No code object which to run/debug. + return + try: + if debuggingType == RS_DEBUGGER_STEP: + debugger.run(codeObject, __main__.__dict__, start_stepping=1) + elif debuggingType == RS_DEBUGGER_GO: + debugger.run(codeObject, __main__.__dict__, start_stepping=0) + else: + # Post mortem or no debugging + exec codeObject in __main__.__dict__ + bWorked = 1 + except bdb.BdbQuit: + # Dont print tracebacks when the debugger quit, but do print a message. + print "Debugging session cancelled." + exitCode = 1 + bWorked = 1 + except SystemExit, code: + exitCode = code + bWorked = 1 + except KeyboardInterrupt: + # Consider this successful, as we dont want the debugger. + # (but we do want a traceback!) + if interact.edit and interact.edit.currentView: + interact.edit.currentView.EnsureNoPrompt() + traceback.print_exc() + if interact.edit and interact.edit.currentView: + interact.edit.currentView.AppendToPrompt([]) + bWorked = 1 + except: + if interact.edit and interact.edit.currentView: + interact.edit.currentView.EnsureNoPrompt() + traceback.print_exc() + if interact.edit and interact.edit.currentView: + interact.edit.currentView.AppendToPrompt([]) + if debuggingType == RS_DEBUGGER_PM: + debugger.pm() + sys.argv = oldArgv + if insertedPath0: + del sys.path[0] + else: + sys.path[0] = oldPath0 + f.close() + if bWorked: + win32ui.SetStatusText("Script '%s' returned exit code %s" %(script, exitCode)) + else: + win32ui.SetStatusText('Exception raised while running script %s' % base) + try: + sys.stdout.flush() + except AttributeError: + pass + + win32ui.DoWaitCursor(0) + +def ImportFile(): + """ This code looks for the current window, and determines if it can be imported. If not, + it will prompt for a file name, and allow it to be imported. """ + try: + pathName = GetActiveFileName() + except KeyboardInterrupt: + pathName = None + + if pathName is not None: + if string.lower(os.path.splitext(pathName)[1]) <> ".py": + pathName = None + + if pathName is None: + openFlags = win32con.OFN_OVERWRITEPROMPT|win32con.OFN_FILEMUSTEXIST + dlg = win32ui.CreateFileDialog(1,None,None,openFlags, "Python Scripts (*.py)|*.py||") + dlg.SetOFNTitle("Import Script") + if dlg.DoModal()!=win32con.IDOK: + return 0 + + pathName = dlg.GetPathName() + + # If already imported, dont look for package + path, modName = os.path.split(pathName) + modName, modExt = os.path.splitext(modName) + newPath = None + for key, mod in sys.modules.items(): + if hasattr(mod, '__file__'): + fname = mod.__file__ + base, ext = os.path.splitext(fname) + if string.lower(ext) in ['.pyo', '.pyc']: + ext = '.py' + fname = base + ext + if win32ui.ComparePath(fname, pathName): + modName = key + break + else: # for not broken + modName, newPath = GetPackageModuleName(pathName) + if newPath: sys.path.append(newPath) + + if sys.modules.has_key(modName): + bNeedReload = 1 + what = "reload" + else: + what = "import" + bNeedReload = 0 + + win32ui.SetStatusText(string.capitalize(what)+'ing module...',1) + win32ui.DoWaitCursor(1) +# win32ui.GetMainFrame().BeginWaitCursor() + try: + # always do an import, as it is cheap is already loaded. This ensures + # it is in our name space. + codeObj = compile('import '+modName,'','exec') + exec codeObj in __main__.__dict__ + if bNeedReload: + reload(sys.modules[modName]) +# codeObj = compile('reload('+modName+')','','eval') +# exec codeObj in __main__.__dict__ + win32ui.SetStatusText('Successfully ' + what + "ed module '"+modName+"'") + except: + _HandlePythonFailure(what) + win32ui.DoWaitCursor(0) + +def CheckFile(): + """ This code looks for the current window, and gets Python to check it + without actually executing any code (ie, by compiling only) + """ + try: + pathName = GetActiveFileName() + except KeyboardInterrupt: + return + + what = "check" + win32ui.SetStatusText(string.capitalize(what)+'ing module...',1) + win32ui.DoWaitCursor(1) + try: + f = open(pathName) + except IOError, details: + print "Cant open file '%s' - %s" % (pathName, details) + return + try: + code = f.read() + "\n" + finally: + f.close() + try: + codeObj = compile(code, pathName,'exec') + if RunTabNanny(pathName): + win32ui.SetStatusText("Python and the TabNanny successfully checked the file '"+os.path.basename(pathName)+"'") + except SyntaxError: + _HandlePythonFailure(what, pathName) + except: + traceback.print_exc() + _HandlePythonFailure(what) + win32ui.DoWaitCursor(0) + +def RunTabNanny(filename): + import cStringIO + tabnanny = FindTabNanny() + if tabnanny is None: + win32ui.MessageBox("The TabNanny is not around, so the children can run amok!" ) + return + + # Capture the tab-nanny output + newout = cStringIO.StringIO() + old_out = sys.stderr, sys.stdout + sys.stderr = sys.stdout = newout + try: + tabnanny.check(filename) + finally: + # Restore output + sys.stderr, sys.stdout = old_out + data = newout.getvalue() + if data: + try: + lineno = string.split(data)[1] + lineno = int(lineno) + _JumpToPosition(filename, lineno) + try: # Try and display whitespace + GetActiveEditControl().SCISetViewWS(1) + except: + pass + win32ui.SetStatusText("The TabNanny found trouble at line %d" % lineno) + except (IndexError, TypeError, ValueError): + print "The tab nanny complained, but I cant see where!" + print data + return 0 + return 1 + +def _JumpToPosition(fileName, lineno, col = 1): + JumpToDocument(fileName, lineno, col) + +def JumpToDocument(fileName, lineno=0, col = 1, nChars = 0, bScrollToTop = 0): + # Jump to the position in a file. + # If lineno is <= 0, dont move the position - just open/restore. + # if nChars > 0, select that many characters. + # if bScrollToTop, the specified line will be moved to the top of the window + # (eg, bScrollToTop should be false when jumping to an error line to retain the + # context, but true when jumping to a method defn, where we want the full body. + doc = win32ui.GetApp().OpenDocumentFile(fileName) + if doc is None: return 0 + frame = doc.GetFirstView().GetParentFrame() + try: + view = frame.GetEditorView() + if frame.GetActiveView() != view: + frame.SetActiveView(view) + frame.AutoRestore() + except AttributeError: # Not an editor frame?? + view = doc.GetFirstView() + if lineno > 0: + charNo = view.LineIndex(lineno-1) + start = charNo + col - 1 + size = view.GetTextLength() + try: + view.EnsureCharsVisible(charNo) + except AttributeError: + print "Doesnt appear to be one of our views?" + view.SetSel(min(start, size), min(start + nChars, size)) + if bScrollToTop: + curTop = view.GetFirstVisibleLine() + nScroll = (lineno-1) - curTop + view.LineScroll(nScroll, 0) + view.SetFocus() + return 1 + +def _HandlePythonFailure(what, syntaxErrorPathName = None): + typ, details, tb = sys.exc_info() + if isinstance(details, SyntaxError): + try: + msg, (fileName, line, col, text) = details + if (not fileName or fileName =="") and syntaxErrorPathName: + fileName = syntaxErrorPathName + _JumpToPosition(fileName, line, col) + except (TypeError, ValueError): + msg = str(details) + win32ui.SetStatusText('Failed to ' + what + ' - syntax error - %s' % msg) + else: + traceback.print_exc() + win32ui.SetStatusText('Failed to ' + what + ' - ' + str(details) ) + tb = None # Clean up a cycle. + +# Find the Python TabNanny in either the standard library or the Python Tools/Scripts directory. +def FindTabNanny(): + try: + return __import__("tabnanny") + except ImportError: + pass + # OK - not in the standard library - go looking. + filename = "tabnanny.py" + try: + path = win32api.RegQueryValue(win32con.HKEY_LOCAL_MACHINE, "SOFTWARE\\Python\\PythonCore\\%s\\InstallPath" % (sys.winver)) + except win32api.error: + print "WARNING - The Python registry does not have an 'InstallPath' setting" + print " The file '%s' can not be located" % (filename) + return None + fname = os.path.join(path, "Tools\\Scripts\\%s" % filename) + try: + os.stat(fname) + except os.error: + print "WARNING - The file '%s' can not be located in path '%s'" % (filename, path) + return None + + tabnannyhome, tabnannybase = os.path.split(fname) + tabnannybase = os.path.splitext(tabnannybase)[0] + # Put tab nanny at the top of the path. + sys.path.insert(0, tabnannyhome) + try: + return __import__(tabnannybase) + finally: + # remove the tab-nanny from the path + del sys.path[0] + +def LocatePythonFile( fileName, bBrowseIfDir = 1 ): + " Given a file name, return a fully qualified file name, or None " + # first look for the exact file as specified + if not os.path.isfile(fileName): + # Go looking! + baseName = fileName + for path in sys.path: + fileName = os.path.join(path, baseName) + if os.path.isdir(fileName): + if bBrowseIfDir: + d=win32ui.CreateFileDialog(1, "*.py", None, 0, "Python Files (*.py)|*.py|All files|*.*") + d.SetOFNInitialDir(fileName) + rc=d.DoModal() + if rc==win32con.IDOK: + fileName = d.GetPathName() + break + else: + return None + else: + fileName = fileName + ".py" + if os.path.isfile(fileName): + break # Found it! + + else: # for not broken out of + return None + return win32ui.FullPath(fileName) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/sgrepmdi.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/sgrepmdi.py new file mode 100644 index 000000000..5e10708aa --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/sgrepmdi.py @@ -0,0 +1,523 @@ +#SGrepMDI is by Gordon McMillan (gmcm@hypernet.com) +#It does basically what Find In Files does in MSVC with a couple enhancements. +# - It saves any directories in the app's ini file (if you want to get rid +# of them you'll have to edit the file) +# - "Directories" can be directories, +# - semicolon separated lists of "directories", +# - environment variables that evaluate to "directories", +# - registry path names that evaluate to "directories", +# - all of which is recursive, so you can mix them all up. +# - It is MDI, so you can 'nest' greps and return to earlier ones, +# (ie, have multiple results open at the same time) +# - Like FIF, double clicking a line opens an editor and takes you to the line. +# - You can highlight text, right click and start a new grep with the selected +# text as search pattern and same directories etc as before. +# - You can save grep parameters (so you don't lose your hardearned pattern) +# from File|Save +# - You can save grep results by right clicking in the result window. +# Hats off to Mark Hammond for providing an environment where I could cobble +# something like this together in a couple evenings! + +import win32ui +import win32api +from pywin.mfc import docview, dialog, window +import win32con +import string +import re +import glob +import os +import stat +import glob +import scriptutils + +def getsubdirs(d): + dlist = [] + flist = glob.glob(d+'\\*') + for f in flist: + if os.path.isdir(f): + dlist.append(f) + dlist = dlist + getsubdirs(f) + return dlist + +class dirpath: + def __init__(self, str, recurse=0): + dp = string.split(str, ';') + dirs = {} + for d in dp: + if os.path.isdir(d): + d = string.lower(d) + if not dirs.has_key(d): + dirs[d] = None + if recurse: + subdirs = getsubdirs(d) + for sd in subdirs: + sd = string.lower(sd) + if not dirs.has_key(sd): + dirs[sd] = None + elif os.path.isfile(d): + pass + else: + x = None + if os.environ.has_key(d): + x = dirpath(os.environ[d]) + elif d[:5] == 'HKEY_': + keystr = string.split(d,'\\') + try: + root = eval('win32con.'+keystr[0]) + except: + win32ui.MessageBox("Can't interpret registry key name '%s'" % keystr[0]) + try: + subkey = string.join(keystr[1:], '\\') + val = win32api.RegQueryValue(root, subkey) + if val: + x = dirpath(val) + else: + win32ui.MessageBox("Registry path '%s' did not return a path entry" % d) + except: + win32ui.MessageBox("Can't interpret registry key value: %s" % keystr[1:]) + else: + win32ui.MessageBox("Directory '%s' not found" % d) + if x: + for xd in x: + if not dirs.has_key(xd): + dirs[xd] = None + if recurse: + subdirs = getsubdirs(xd) + for sd in subdirs: + sd = string.lower(sd) + if not dirs.has_key(sd): + dirs[sd] = None + self.dirs = [] + for d in dirs.keys(): + self.dirs.append(d) + + def __getitem__(self, key): + return self.dirs[key] + def __len__(self): + return len(self.dirs) + def __setitem__(self, key, value): + self.dirs[key] = value + def __delitem__(self, key): + del self.dirs[key] + def __getslice__(self, lo, hi): + return self.dirs[lo:hi] + def __setslice__(self, lo, hi, seq): + self.dirs[lo:hi] = seq + def __delslice__(self, lo, hi): + del self.dirs[lo:hi] + def __add__(self, other): + if type(other) == type(self) or type(other) == type([]): + return self.dirs + other.dirs + def __radd__(self, other): + if type(other) == type(self) or type(other) == type([]): + return other.dirs + self.dirs + +# Group(1) is the filename, group(2) is the lineno. +#regexGrepResult=regex.compile("^\\([a-zA-Z]:.*\\)(\\([0-9]+\\))") + +regexGrep=re.compile(r"^([a-zA-Z]:[^(]*)\(([0-9]+)\)") + +#these are the atom numbers defined by Windows for basic dialog controls + +BUTTON = 0x80 +EDIT = 0x81 +STATIC = 0x82 +LISTBOX = 0x83 +SCROLLBAR = 0x84 +COMBOBOX = 0x85 + +class GrepTemplate(docview.RichEditDocTemplate): + def __init__(self): + docview.RichEditDocTemplate.__init__(self, win32ui.IDR_TEXTTYPE, GrepDocument, GrepFrame, GrepView) + self.SetDocStrings("\nGrep\nGrep\nGrep params (*.grep)\n.grep\n\n\n") + win32ui.GetApp().AddDocTemplate(self) + self.docparams = None + + def MatchDocType(self, fileName, fileType): + doc = self.FindOpenDocument(fileName) + if doc: return doc + ext = string.lower(os.path.splitext(fileName)[1]) + if ext =='.grep': + return win32ui.CDocTemplate_Confidence_yesAttemptNative + return win32ui.CDocTemplate_Confidence_noAttempt + + def setParams(self, params): + self.docparams = params + + def readParams(self): + tmp = self.docparams + self.docparams = None + return tmp + +class GrepFrame(window.MDIChildWnd): + # The template and doc params will one day be removed. + def __init__(self, wnd = None): + window.MDIChildWnd.__init__(self, wnd) + +class GrepDocument(docview.RichEditDoc): + def __init__(self, template): + docview.RichEditDoc.__init__(self, template) + self.dirpattern = '' + self.filpattern = '' + self.greppattern = '' + self.casesensitive = 1 + self.recurse = 1 + self.verbose = 0 + + def OnOpenDocument(self, fnm): + #this bizarre stuff with params is so right clicking in a result window + #and starting a new grep can communicate the default parameters to the + #new grep. + try: + params = open(fnm,'r').read() + except: + params = None + self.setInitParams(params) + return self.OnNewDocument() + + def OnCloseDocument(self): + try: + win32ui.GetApp().DeleteIdleHandler(self.SearchFile) + except: + pass + return self._obj_.OnCloseDocument() + + def saveInitParams(self): + # Only save the flags, not the text boxes. + paramstr = "\t%s\t\t%d\t%d" % (self.filpattern, self.casesensitive, self.recurse) + win32ui.WriteProfileVal("Grep", "Params", paramstr) + + def setInitParams(self, paramstr): + if paramstr is None: + paramstr = win32ui.GetProfileVal("Grep", "Params", '\t\t\t1\t0\t0') + params = string.split(paramstr, '\t') + if len(params) < 3: + params = params + ['']*(3-len(params)) + if len(params) < 6: + params = params + [0]*(6-len(params)) + self.dirpattern = params[0] + self.filpattern = params[1] + self.greppattern = params[2] + self.casesensitive = int(params[3]) + self.recurse = int(params[4]) + self.verbose = int(params[5]) + # setup some reasonable defaults. + if not self.dirpattern: + self.dirpattern = os.getcwd() + if not self.filpattern: + self.filpattern = "*.py" + + def OnNewDocument(self): + if self.dirpattern == '': + self.setInitParams(greptemplate.readParams()) + d = GrepDialog(self.dirpattern, self.filpattern, self.greppattern, self.casesensitive, self.recurse, self.verbose) + if d.DoModal() == win32con.IDOK: + self.dirpattern = d['dirpattern'] + self.filpattern = d['filpattern'] + self.greppattern = d['greppattern'] + self.casesensitive = d['casesensitive'] + self.recurse = d['recursive'] + self.verbose = d['verbose'] + self.doSearch() + self.saveInitParams() + return 1 + return 0 # cancelled - return zero to stop frame creation. + + def doSearch(self): + self.dp = dirpath(self.dirpattern, self.recurse) + self.SetTitle("Grep for %s in %s" % (self.greppattern, self.filpattern)) + #self.text = [] + self.GetFirstView().Append('#Search '+self.dirpattern+'\n') + if self.verbose: + self.GetFirstView().Append('# ='+`self.dp.dirs`+'\n') + self.GetFirstView().Append('# Files '+self.filpattern+'\n') + self.GetFirstView().Append('# For '+self.greppattern+'\n') + self.fplist = string.split(self.filpattern,';') + if self.casesensitive: + self.pat = re.compile(self.greppattern) + else: + self.pat = re.compile(self.greppattern, re.IGNORECASE) + win32ui.SetStatusText("Searching. Please wait...", 0) + self.dpndx = self.fpndx = 0 + self.fndx = -1 + if not self.dp: + self.GetFirstView().Append("# ERROR: '%s' does not resolve to any search locations" % self.dirpattern) + self.SetModifiedFlag(0) + else: + self.flist = glob.glob(self.dp[0]+'\\'+self.fplist[0]) + win32ui.GetApp().AddIdleHandler(self.SearchFile) + + def SearchFile(self, handler, count): + self.fndx = self.fndx + 1 + if self.fndx < len(self.flist): + f = self.flist[self.fndx] + if self.verbose: + self.GetFirstView().Append('# ..'+f+'\n') + win32ui.SetStatusText("Searching "+f, 0) + lines = open(f, 'r').readlines() + for i in range(len(lines)): + line = lines[i] + if self.pat.search(line) != None: + self.GetFirstView().Append(f+'('+`i+1` + ') '+line) + else: + self.fndx = -1 + self.fpndx = self.fpndx + 1 + if self.fpndx < len(self.fplist): + self.flist = glob.glob(self.dp[self.dpndx] + '\\' + self.fplist[self.fpndx]) + else: + self.fpndx = 0 + self.dpndx = self.dpndx + 1 + if self.dpndx < len(self.dp): + self.flist = glob.glob(self.dp[self.dpndx] + '\\' + self.fplist[self.fpndx]) + else: + win32ui.SetStatusText("Search complete.", 0) + self.SetModifiedFlag(0) # default to not modified. + try: + win32ui.GetApp().DeleteIdleHandler(self.SearchFile) + except: + pass + return 0 + return 1 + + def GetParams(self): + return self.dirpattern+'\t'+self.filpattern+'\t'+self.greppattern+'\t'+`self.casesensitive`+'\t'+`self.recurse`+'\t'+`self.verbose` + + def OnSaveDocument(self, filename): +# print 'OnSaveDocument() filename=',filename + savefile = open(filename,"wb") + txt = self.GetParams()+'\n' +# print 'writing',txt + savefile.write(txt) + savefile.close() + self.SetModifiedFlag(0) + return 1 + +ID_OPEN_FILE = 0xe400 +ID_GREP = 0xe401 +ID_SAVERESULTS = 0x402 +ID_TRYAGAIN = 0x403 + +class GrepView(docview.RichEditView): + def __init__(self, doc): + docview.RichEditView.__init__(self, doc) + self.SetWordWrap(win32ui.CRichEditView_WrapNone) + self.HookHandlers() + + def OnInitialUpdate(self): + rc = self._obj_.OnInitialUpdate() + format = (-402653169, 0, 200, 0, 0, 0, 49, 'Courier New') + self.SetDefaultCharFormat(format) + return rc + + def HookHandlers(self): + self.HookMessage(self.OnRClick, win32con.WM_RBUTTONDOWN) + self.HookCommand(self.OnCmdOpenFile, ID_OPEN_FILE) + self.HookCommand(self.OnCmdGrep, ID_GREP) + self.HookCommand(self.OnCmdSave, ID_SAVERESULTS) + self.HookCommand(self.OnTryAgain, ID_TRYAGAIN) + self.HookMessage(self.OnLDblClick,win32con.WM_LBUTTONDBLCLK) + + def OnLDblClick(self,params): + line = self.GetLine() + regexGrepResult = regexGrep.match(line) + if regexGrepResult: + fname = regexGrepResult.group(1) + line = string.atoi(regexGrepResult.group(2)) + scriptutils.JumpToDocument(fname, line) + return 0 # dont pass on + return 1 # pass it on by default. + + def OnRClick(self, params): + menu = win32ui.CreatePopupMenu() + flags=win32con.MF_STRING|win32con.MF_ENABLED + lineno = self._obj_.LineFromChar(-1) #selection or current line + line = self._obj_.GetLine(lineno) + regexGrepResult = regexGrep.match(line) + if regexGrepResult: + self.fnm = regexGrepResult.group(1) + self.lnnum = string.atoi(regexGrepResult.group(2)) + menu.AppendMenu(flags, ID_OPEN_FILE, "&Open "+self.fnm) + menu.AppendMenu(win32con.MF_SEPARATOR) + menu.AppendMenu(flags, ID_TRYAGAIN, "&Try Again") + charstart, charend = self._obj_.GetSel() + if charstart != charend: + linestart = self._obj_.LineIndex(lineno) + self.sel = line[charstart-linestart:charend-linestart] + menu.AppendMenu(flags, ID_GREP, "&Grep for "+self.sel) + menu.AppendMenu(win32con.MF_SEPARATOR) + menu.AppendMenu(flags, win32ui.ID_EDIT_CUT, 'Cu&t') + menu.AppendMenu(flags, win32ui.ID_EDIT_COPY, '&Copy') + menu.AppendMenu(flags, win32ui.ID_EDIT_PASTE, '&Paste') + menu.AppendMenu(flags, win32con.MF_SEPARATOR); + menu.AppendMenu(flags, win32ui.ID_EDIT_SELECT_ALL, '&Select all') + menu.AppendMenu(flags, win32con.MF_SEPARATOR); + menu.AppendMenu(flags, ID_SAVERESULTS, 'Sa&ve results') + menu.TrackPopupMenu(params[5]) + return 0 + + def OnCmdOpenFile(self, cmd, code): + doc = win32ui.GetApp().OpenDocumentFile(self.fnm) + if doc: + vw = doc.GetFirstView() + #hope you have an editor that implements GotoLine()! + try: + vw.GotoLine(string.atoi(self.lnnum)) + except: + pass + return 0 + + def OnCmdGrep(self, cmd, code): + curparamsstr = self.GetDocument().GetParams() + params = string.split(curparamsstr,'\t') + params[2] = self.sel + greptemplate.setParams(string.join(params,'\t')) + greptemplate.OpenDocumentFile() + return 0 + + def OnTryAgain(self, cmd, code): + greptemplate.setParams(self.GetDocument().GetParams()) + greptemplate.OpenDocumentFile() + return 0 + + def OnCmdSave(self, cmd, code): + flags = win32con.OFN_OVERWRITEPROMPT + dlg = win32ui.CreateFileDialog(0, None, None, flags, "Text Files (*.txt)|*.txt||", self) + dlg.SetOFNTitle("Save Results As") + if dlg.DoModal() == win32con.IDOK: + pn = dlg.GetPathName() + self._obj_.SaveFile(pn) + return 0 + + def Append(self, strng): + numlines = self.GetLineCount() + endpos = self.LineIndex(numlines-1) + len(self.GetLine(numlines-1)) + self.SetSel(endpos, endpos) + self.ReplaceSel(strng) + + +class GrepDialog(dialog.Dialog): + def __init__(self, dp, fp, gp, cs, r, v): + style = win32con.DS_MODALFRAME | win32con.WS_POPUP | win32con.WS_VISIBLE | win32con.WS_CAPTION | win32con.WS_SYSMENU | win32con.DS_SETFONT + CS = win32con.WS_CHILD | win32con.WS_VISIBLE + tmp = [ ["Grep", (0, 0, 210, 90), style, None, (8, "MS Sans Serif")], ] + tmp.append([STATIC, "Grep For:", -1, (7, 7, 50, 9), CS ]) + tmp.append([EDIT, gp, 101, (52, 7, 144, 11), CS | win32con.WS_TABSTOP | win32con.ES_AUTOHSCROLL | win32con.WS_BORDER]) + tmp.append([STATIC, "Directories:", -1, (7, 20, 50, 9), CS ]) + tmp.append([EDIT, dp, 102, (52, 20, 128, 11), CS | win32con.WS_TABSTOP | win32con.ES_AUTOHSCROLL | win32con.WS_BORDER]) + tmp.append([BUTTON, '...', 110, (182,20, 16, 11), CS | win32con.BS_PUSHBUTTON | win32con.WS_TABSTOP]) + tmp.append([STATIC, "File types:", -1, (7, 33, 50, 9), CS ]) + tmp.append([EDIT, fp, 103, (52, 33, 128, 11), CS | win32con.WS_TABSTOP | win32con.ES_AUTOHSCROLL | win32con.WS_BORDER ]) + tmp.append([BUTTON, '...', 111, (182,33, 16, 11), CS | win32con.BS_PUSHBUTTON | win32con.WS_TABSTOP]) + tmp.append([BUTTON,'Case sensitive', 104, (7, 45, 72, 9), CS | win32con.BS_AUTOCHECKBOX | win32con.BS_LEFTTEXT| win32con.WS_TABSTOP]) + tmp.append([BUTTON,'Subdirectories', 105, (7, 56, 72, 9), CS | win32con.BS_AUTOCHECKBOX | win32con.BS_LEFTTEXT| win32con.WS_TABSTOP]) + tmp.append([BUTTON,'Verbose', 106, (7, 67, 72, 9), CS | win32con.BS_AUTOCHECKBOX | win32con.BS_LEFTTEXT| win32con.WS_TABSTOP]) + tmp.append([BUTTON,'OK', win32con.IDOK, (166,53, 32, 12), CS | win32con.BS_DEFPUSHBUTTON| win32con.WS_TABSTOP]) + tmp.append([BUTTON,'Cancel', win32con.IDCANCEL, (166,67, 32, 12), CS | win32con.BS_PUSHBUTTON| win32con.WS_TABSTOP]) + dialog.Dialog.__init__(self, tmp) + self.AddDDX(101,'greppattern') + self.AddDDX(102,'dirpattern') + self.AddDDX(103,'filpattern') + self.AddDDX(104,'casesensitive') + self.AddDDX(105,'recursive') + self.AddDDX(106,'verbose') + self._obj_.data['greppattern'] = gp + self._obj_.data['dirpattern'] = dp + self._obj_.data['filpattern'] = fp + self._obj_.data['casesensitive'] = cs + self._obj_.data['recursive'] = r + self._obj_.data['verbose'] = v + self.HookCommand(self.OnMoreDirectories, 110) + self.HookCommand(self.OnMoreFiles, 111) + + def OnMoreDirectories(self, cmd, code): + self.getMore('Grep\\Directories', 'dirpattern') + + def OnMoreFiles(self, cmd, code): + self.getMore('Grep\\File Types', 'filpattern') + + def getMore(self, section, key): + self.UpdateData(1) + #get the items out of the ini file + ini = win32ui.GetProfileFileName() + secitems = win32api.GetProfileSection(section, ini) + items = [] + for secitem in secitems: + items.append(string.split(secitem,'=')[1]) + dlg = GrepParamsDialog(items) + if dlg.DoModal() == win32con.IDOK: + itemstr = string.join(dlg.getItems(),';') + self._obj_.data[key] = itemstr + #update the ini file with dlg.getNew() + i = 0 + newitems = dlg.getNew() + if newitems: + items = items + newitems + for item in items: + win32api.WriteProfileVal(section, `i`, item, ini) + i = i + 1 + self.UpdateData(0) + + def OnOK(self): + self.UpdateData(1) + for id, name in [(101,'greppattern'), (102,'dirpattern'), (103,'filpattern')]: + if not self[name]: + self.GetDlgItem(id).SetFocus() + win32api.MessageBeep() + win32ui.SetStatusText("Please enter a value") + return + self._obj_.OnOK() + +class GrepParamsDialog(dialog.Dialog): + def __init__(self, items): + self.items = items + self.newitems = [] + style = win32con.DS_MODALFRAME | win32con.WS_POPUP | win32con.WS_VISIBLE | win32con.WS_CAPTION | win32con.WS_SYSMENU | win32con.DS_SETFONT + CS = win32con.WS_CHILD | win32con.WS_VISIBLE + tmp = [ ["Grep Parameters", (0, 0, 205, 100), style, None, (8, "MS Sans Serif")], ] + tmp.append([LISTBOX, '', 107, (7, 7, 150, 72), CS | win32con.LBS_MULTIPLESEL| win32con.LBS_STANDARD | win32con.LBS_HASSTRINGS | win32con.WS_TABSTOP | win32con.LBS_NOTIFY]) + tmp.append([BUTTON,'OK', win32con.IDOK, (167, 7, 32, 12), CS | win32con.BS_DEFPUSHBUTTON| win32con.WS_TABSTOP]) + tmp.append([BUTTON,'Cancel', win32con.IDCANCEL, (167,23, 32, 12), CS | win32con.BS_PUSHBUTTON| win32con.WS_TABSTOP]) + tmp.append([STATIC,'New:', -1, (2, 83, 15, 12), CS]) + tmp.append([EDIT, '', 108, (18, 83, 139, 12), CS | win32con.WS_TABSTOP | win32con.ES_AUTOHSCROLL | win32con.WS_BORDER]) + tmp.append([BUTTON,'Add', 109, (167,83, 32, 12), CS | win32con.BS_PUSHBUTTON| win32con.WS_TABSTOP]) + dialog.Dialog.__init__(self, tmp) + self.HookCommand(self.OnAddItem, 109) + self.HookCommand(self.OnListDoubleClick, 107) + + def OnInitDialog(self): + lb = self.GetDlgItem(107) + for item in self.items: + lb.AddString(item) + return self._obj_.OnInitDialog() + + def OnAddItem(self, cmd, code): + eb = self.GetDlgItem(108) + item = eb.GetLine(0) + self.newitems.append(item) + lb = self.GetDlgItem(107) + i = lb.AddString(item) + lb.SetSel(i, 1) + return 1 + + def OnListDoubleClick(self, cmd, code): + if code == win32con.LBN_DBLCLK: + self.OnOK() + return 1 + + def OnOK(self): + lb = self.GetDlgItem(107) + self.selections = lb.GetSelTextItems() + self._obj_.OnOK() + + def getItems(self): + return self.selections + + def getNew(self): + return self.newitems + +try: + win32ui.GetApp().RemoveDocTemplate(greptemplate) +except NameError: + pass + +greptemplate = GrepTemplate() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/startup.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/startup.py new file mode 100644 index 000000000..759d59279 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/startup.py @@ -0,0 +1,62 @@ +# startup.py +# +"The main application startup code for PythonWin." + +# +# This does the basic command line handling. + +# Keep this as short as possible, cos error output is only redirected if +# this runs OK. Errors in imported modules are much better - the messages go somewhere (not any more :-) + +import sys +import win32ui +import strop + +# You may wish to redirect error output somewhere useful if you have startup errors. +# eg, 'import win32traceutil' will do this for you. +# import win32traceutil # Just uncomment this line to see error output! + +# An old class I used to use - generally only useful if Pythonwin is running under MSVC +#class DebugOutput: +# softspace=1 +# def write(self,message): +# win32ui.OutputDebug(message) +#sys.stderr=sys.stdout=DebugOutput() + +# To fix a problem with Pythonwin when started from the Pythonwin directory, +# we update the pywin path to ensure it is absolute. +# If it is indeed relative, it will be relative to our current directory. +# If its already absolute, then this will have no affect. +import pywin, pywin.framework +pywin.__path__[0] = win32ui.FullPath(pywin.__path__[0]) +pywin.framework.__path__[0] = win32ui.FullPath(pywin.framework.__path__[0]) + +# make a few wierd sys values. This is so later we can clobber sys.argv to trick +# scripts when running under a GUI environment. + +moduleName = "intpyapp" +sys.appargvoffset = 0 +sys.appargv = sys.argv[:] +# Must check for /app param here. +if len(sys.argv)>=2 and strop.lower(sys.argv[0])=='/app': + import cmdline + moduleName = cmdline.FixArgFileName(sys.argv[1]) + sys.appargvoffset = 2 + newargv=sys.argv[sys.appargvoffset:] +# newargv.insert(0, sys.argv[0]) + sys.argv = newargv + +exec "import %s\n" % moduleName + +try: + win32ui.GetApp()._obj_ + # This worked - an app already exists - do nothing more +except (AttributeError, win32ui.error): + # This means either no app object exists at all, or the one + # that does exist does not have a Python class (ie, was created + # by the host .EXE). In this case, we do the "old style" init... + import app + if app.AppBuilder is None: + raise TypeError, "No application object has been registered" + + app.App = app.AppBuilder() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/stdin.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/stdin.py new file mode 100644 index 000000000..e7f227f4e --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/stdin.py @@ -0,0 +1,180 @@ +# Copyright (c) 2000 David Abrahams. Permission to copy, use, modify, sell +# and distribute this software is granted provided this copyright +# notice appears in all copies. This software is provided "as is" without +# express or implied warranty, and with no claim as to its suitability for +# any purpose. +"""Provides a class Stdin which can be used to emulate the regular old +sys.stdin for the PythonWin interactive window. Right now it just pops +up a raw_input() dialog. With luck, someone will integrate it into the +actual PythonWin interactive window someday. + +WARNING: Importing this file automatically replaces sys.stdin with an +instance of Stdin (below). This is useful because you can just open +Stdin.py in PythonWin and hit the import button to get it set up right +if you don't feel like changing PythonWin's source. To put things back +the way they were, simply use this magic incantation: + import sys + sys.stdin = sys.stdin.real_file +""" +import sys +import string + +true = 1 +false = 0 +get_input_line = raw_input + +class Stdin: + def __init__(self): + self.real_file = sys.stdin + self.buffer = "" + + def __getattr__(self, name): + """Forward most functions to the real sys.stdin for absolute realism. + """ + return getattr(self.real_file, name) + + def isatty(self): + """Return 1 if the file is connected to a tty(-like) device, else 0. + """ + return 1 + + def read(self, size = -1): + """Read at most size bytes from the file (less if the read + hits EOF or no more data is immediately available on a pipe, + tty or similar device). If the size argument is negative or + omitted, read all data until EOF is reached. The bytes are + returned as a string object. An empty string is returned when + EOF is encountered immediately. (For certain files, like ttys, + it makes sense to continue reading after an EOF is hit.)""" + if self.closed: + return self.real_file.read(size) + + result_size = self.__get_lines(size) + return self.__extract_from_buffer(result_size) + + + def readline(self, size = -1): + """Read one entire line from the file. A trailing newline + character is kept in the string2.6 (but may be absent when a file ends + with an incomplete line). If the size argument is present and + non-negative, it is a maximum byte count (including the trailing + newline) and an incomplete line may be returned. An empty string is + returned when EOF is hit immediately. Note: unlike stdio's fgets(), + the returned string contains null characters ('\0') if they occurred + in the input. + """ + if self.closed: + return self.real_file.readline(size) + + maximum_result_size = self.__get_lines(size, lambda buffer: '\n' in buffer) + + if '\n' in self.buffer[:maximum_result_size]: + result_size = string.find(self.buffer, '\n', 0, maximum_result_size) + 1 + assert(result_size > 0) + else: + result_size = maximum_result_size + + return self.__extract_from_buffer(result_size) + + def __extract_from_buffer(self, character_count): + """Remove the first character_count characters from the internal buffer and + return them. + """ + result = self.buffer[:character_count] + self.buffer = self.buffer[character_count:] + return result + + def __get_lines(self, desired_size, done_reading = lambda buffer: false): + """Keep adding lines to our internal buffer until done_reading(self.buffer) + is true or EOF has been reached or we have desired_size bytes in the buffer. + If desired_size < 0, we are never satisfied until we reach EOF. If done_reading + is not supplied, it is not consulted. + + If desired_size < 0, returns the length of the internal buffer. Otherwise, + returns desired_size. + """ + while not done_reading(self.buffer) and (desired_size < 0 + or len(self.buffer) < desired_size): + try: + self.__get_line() + except: # deal with cancellation of get_input_line dialog + desired_size = len(self.buffer) # Be satisfied! + pass + if desired_size < 0: + return len(self.buffer) + else: + return desired_size + + def __get_line(self): + """Grab one line from get_input_line() and append it to the buffer. + """ + line = get_input_line() + print '>>>',line # echo input to console + self.buffer = self.buffer + line + '\n' + + def readlines(self, *sizehint): + """Read until EOF using readline() and return a list containing the lines + thus read. If the optional sizehint argument is present, instead of + reading up to EOF, whole lines totalling approximately sizehint bytes + (possibly after rounding up to an internal buffer size) are read. + """ + if self.closed: + return apply(self.real_file.readlines, sizehint) + + result = [] + total_read = 0 + while sizehint == () or total_read < sizehint[0]: + line = self.readline() + if line == '': + break + total_read = total_read + len(line) + result.append(line) + return result + +if __name__ == "__main__": + test_input = r"""this is some test +input that I am hoping +~ +will be very instructive +and when I am done +I will have tested everything. +Twelve and twenty blackbirds +baked in a pie. Patty cake +patty cake so am I. +~ +Thirty-five niggling idiots! +Sell you soul to the devil, baby +""" + + def fake_raw_input(prompt=None): + """Replacement for raw_input() which pulls lines out of global test_input. + For testing only! + """ + global test_input + if '\n' not in test_input: + end_of_line_pos = len(test_input) + else: + end_of_line_pos = string.find(test_input, '\n') + result = test_input[:end_of_line_pos] + test_input = test_input[end_of_line_pos + 1:] + if len(result) == 0 or result[0] == '~': + raise 'EOF' + return result + + get_input_line = fake_raw_input + + # Some completely inadequate tests, just to make sure the code's not totally broken + try: + x = Stdin() + print x.read() + print x.readline() + print x.read(12) + print x.readline(47) + print x.readline(3) + print x.readlines() + finally: + get_input_line = raw_input +else: + import sys + sys.stdin = Stdin() + \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/toolmenu.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/toolmenu.py new file mode 100644 index 000000000..4a982e5ee --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/toolmenu.py @@ -0,0 +1,248 @@ +# toolmenu.py + +import win32ui +import win32con +import win32api +import app +import sys +import string + +tools = {} +idPos = 100 + +# The default items should no tools menu exist in the INI file. +defaultToolMenuItems = [ + ('Browser', 'win32ui.GetApp().OnViewBrowse(0,0)'), + ('Browse PythonPath', 'from pywin.tools import browseProjects;browseProjects.Browse()'), + ('Edit Python Path', 'from pywin.tools import regedit;regedit.EditRegistry()'), + ('COM Makepy utility', 'from win32com.client import makepy;makepy.main()'), + ('COM Browser', 'from win32com.client import combrowse;combrowse.main()'), + ('Trace Collector Debugging tool', 'from pywin.tools import TraceCollector;TraceCollector.MakeOutputWindow()'), +] + +def LoadToolMenuItems(): + # Load from the registry. + items = [] + lookNo = 1 + while 1: + menu = win32ui.GetProfileVal("Tools Menu\\%s" % lookNo, "", "") + if menu=="": + break + cmd = win32ui.GetProfileVal("Tools Menu\\%s" % lookNo, "Command", "") + items.append((menu, cmd)) + lookNo = lookNo + 1 + + if len(items)==0: + items = defaultToolMenuItems + return items + +def WriteToolMenuItems( items ): + # Items is a list of (menu, command) + # Delete the entire registry tree. + try: + mainKey = win32ui.GetAppRegistryKey() + toolKey = win32api.RegOpenKey(mainKey, "Tools Menu") + except win32ui.error: + toolKey = None + if toolKey is not None: + while 1: + try: + subkey = win32api.RegEnumKey(toolKey, 0) + except win32api.error: + break + win32api.RegDeleteKey(toolKey, subkey) + # Keys are now removed - write the new ones. + # But first check if we have the defaults - and if so, dont write anything! + if items==defaultToolMenuItems: + return + itemNo = 1 + for menu, cmd in items: + win32ui.WriteProfileVal("Tools Menu\\%s" % itemNo, "", menu) + win32ui.WriteProfileVal("Tools Menu\\%s" % itemNo, "Command", cmd) + itemNo = itemNo + 1 + +def SetToolsMenu(menu, menuPos = None): + global tools + global idPos + + # todo - check the menu does not already exist. + # Create the new menu + toolsMenu = win32ui.CreatePopupMenu() + + # Load from the ini file. + items = LoadToolMenuItems() + for menuString, cmd in items: + tools[idPos] = (menuString, cmd, menuString) + toolsMenu.AppendMenu(win32con.MF_ENABLED|win32con.MF_STRING,idPos, menuString) + win32ui.GetMainFrame().HookCommand(HandleToolCommand, idPos) + idPos=idPos+1 + + # Find the correct spot to insert the new tools menu. + if menuPos is None: + menuPos = menu.GetMenuItemCount()-2 + if menuPos<0: menuPos=0 + + menu.InsertMenu(menuPos, win32con.MF_BYPOSITION|win32con.MF_ENABLED|win32con.MF_STRING|win32con.MF_POPUP, toolsMenu.GetHandle(), '&Tools') + +def HandleToolCommand(cmd, code): + import traceback + import re + global tools + (menuString, pyCmd, desc) = tools[cmd] + win32ui.SetStatusText("Executing tool %s" % desc, 1) + pyCmd = re.sub('\\\\n','\n', pyCmd) + win32ui.DoWaitCursor(1) + oldFlag = None + try: + oldFlag = sys.stdout.template.writeQueueing + sys.stdout.template.writeQueueing = 0 + except (NameError, AttributeError): + pass + + try: + exec "%s\n" % pyCmd + worked=1 + except SystemExit: + # The program raised a SystemExit - ignore it. + worked = 1 + except: + print "Failed to execute command:\n%s" % pyCmd + traceback.print_exc() + worked=0 + if oldFlag is not None: + sys.stdout.template.writeQueueing = oldFlag + win32ui.DoWaitCursor(0) + if worked: + text = "Completed successfully." + else: + text = "Error executing %s." % desc + win32ui.SetStatusText(text, 1) + +# The property page for maintaing the items on the Tools menu. +import commctrl +from pywin.mfc import dialog + +class ToolMenuPropPage(dialog.PropertyPage): + def __init__(self): + self.bImChangingEditControls = 0 # Am I programatically changing the controls? + dialog.PropertyPage.__init__(self, win32ui.IDD_PP_TOOLMENU) + + def OnInitDialog(self): + self.editMenuCommand = self.GetDlgItem(win32ui.IDC_EDIT2) + self.butNew = self.GetDlgItem(win32ui.IDC_BUTTON3) + + # Now hook the change notification messages for the edit controls. + self.HookCommand(self.OnCommandEditControls, win32ui.IDC_EDIT1) + self.HookCommand(self.OnCommandEditControls, win32ui.IDC_EDIT2) + + self.HookNotify(self.OnNotifyListControl, commctrl.LVN_ITEMCHANGED) + self.HookNotify(self.OnNotifyListControlEndLabelEdit, commctrl.LVN_ENDLABELEDIT) + + # Hook the button clicks. + self.HookCommand(self.OnButtonNew, win32ui.IDC_BUTTON3) # New Item + self.HookCommand(self.OnButtonDelete, win32ui.IDC_BUTTON4) # Delete item + self.HookCommand(self.OnButtonMove, win32ui.IDC_BUTTON1) # Move up + self.HookCommand(self.OnButtonMove, win32ui.IDC_BUTTON2) # Move down + + # Setup the columns in the list control + lc = self.GetDlgItem(win32ui.IDC_LIST1) + rect = lc.GetWindowRect() + cx = rect[2] - rect[0] + colSize = cx/2 - win32api.GetSystemMetrics(win32con.SM_CXBORDER) - 1 + + item = commctrl.LVCFMT_LEFT, colSize, "Menu Text" + lc.InsertColumn(0, item) + + item = commctrl.LVCFMT_LEFT, colSize, "Python Command" + lc.InsertColumn(1, item) + + # Insert the existing tools menu + itemNo = 0 + for desc, cmd in LoadToolMenuItems(): + lc.InsertItem(itemNo, desc) + lc.SetItemText(itemNo, 1, cmd) + itemNo = itemNo + 1 + + self.listControl = lc + return dialog.PropertyPage.OnInitDialog(self) + + def OnOK(self): + # Write the menu back to the registry. + items = [] + itemLook = 0 + while 1: + try: + items.append( ( self.listControl.GetItemText(itemLook, 0), self.listControl.GetItemText(itemLook, 1) ) ) + except win32ui.error: + # no more items! + break + itemLook = itemLook + 1 + WriteToolMenuItems( items ) + return self._obj_.OnOK() + + def OnCommandEditControls(self, id, cmd): +# print "OnEditControls", id, cmd + if cmd==win32con.EN_CHANGE and not self.bImChangingEditControls: + itemNo = self.listControl.GetNextItem(-1, commctrl.LVNI_SELECTED) + newText = self.editMenuCommand.GetWindowText() + self.listControl.SetItemText(itemNo, 1, newText) + + return 0 + + def OnNotifyListControlEndLabelEdit(self, id, cmd): + newText = self.listControl.GetEditControl().GetWindowText() + itemNo = self.listControl.GetNextItem(-1, commctrl.LVNI_SELECTED) + self.listControl.SetItemText(itemNo, 0, newText) + + def OnNotifyListControl(self, id, cmd): +# print id, cmd + try: + itemNo = self.listControl.GetNextItem(-1, commctrl.LVNI_SELECTED) + except win32ui.error: # No selection! + return + + self.bImChangingEditControls = 1 + try: + item = self.listControl.GetItem(itemNo, 1) + self.editMenuCommand.SetWindowText(item[4]) + finally: + self.bImChangingEditControls = 0 + + return 0 # we have handled this! + + def OnButtonNew(self, id, cmd): + if cmd==win32con.BN_CLICKED: + newIndex = self.listControl.GetItemCount() + self.listControl.InsertItem(newIndex, "Click to edit the text") + self.listControl.EnsureVisible(newIndex, 0) + + def OnButtonMove(self, id, cmd): + if cmd==win32con.BN_CLICKED: + try: + itemNo = self.listControl.GetNextItem(-1, commctrl.LVNI_SELECTED) + except win32ui.error: + return + menu = self.listControl.GetItemText(itemNo, 0) + cmd = self.listControl.GetItemText(itemNo, 1) + if id == win32ui.IDC_BUTTON1: + # Move up + if itemNo > 0: + self.listControl.DeleteItem(itemNo) + # reinsert it. + self.listControl.InsertItem(itemNo-1, menu) + self.listControl.SetItemText(itemNo-1, 1, cmd) + else: + # Move down. + if itemNo < self.listControl.GetItemCount()-1: + self.listControl.DeleteItem(itemNo) + # reinsert it. + self.listControl.InsertItem(itemNo+1, menu) + self.listControl.SetItemText(itemNo+1, 1, cmd) + + def OnButtonDelete(self, id, cmd): + if cmd==win32con.BN_CLICKED: + try: + itemNo = self.listControl.GetNextItem(-1, commctrl.LVNI_SELECTED) + except win32ui.error: # No selection! + return + self.listControl.DeleteItem(itemNo) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/window.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/window.py new file mode 100644 index 000000000..d59bd4534 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/window.py @@ -0,0 +1,13 @@ +# Framework Window classes. + +# Most Pythonwin windows should use these classes rather than +# the raw MFC ones if they want Pythonwin specific functionality. +import pywin.mfc.window +import win32con + +class MDIChildWnd(pywin.mfc.window.MDIChildWnd): + def AutoRestore(self): + "If the window is minimised or maximised, restore it." + p = self.GetWindowPlacement() + if p[1]==win32con.SW_MINIMIZE or p[1]==win32con.SW_SHOWMINIMIZED: + self.SetWindowPlacement(p[0], win32con.SW_RESTORE, p[2], p[3], p[4]) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/winout.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/winout.py new file mode 100644 index 000000000..35469c774 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/framework/winout.py @@ -0,0 +1,521 @@ +# winout.py +# +# generic "output window" +# +# This Window will detect itself closing, and recreate next time output is +# written to it. + +# This has the option of writing output at idle time (by hooking the +# idle message, and queueing output) or writing as each +# write is executed. +# Updating the window directly gives a jerky appearance as many writes +# take place between commands, and the windows scrolls, and updates etc +# Updating at idle-time may defer all output of a long process, giving the +# appearence nothing is happening. +# There is a compromise "line" mode, which will output whenever +# a complete line is available. + +# behaviour depends on self.writeQueueing + +# This module is thread safe - output can originate from any thread. If any thread +# other than the main thread attempts to print, it is always queued until next idle time + +import sys, string, re +from pywin.mfc import docview +from pywin.framework import app, window +from pywintypes import UnicodeType +import win32ui, win32api, win32con +import Queue + +debug = lambda msg: None + +##debug=win32ui.OutputDebugString +##import win32trace;win32trace.InitWrite() # for debugging - delete me! +##debug = win32trace.write + +class flags: + # queueing of output. + WQ_NONE = 0 + WQ_LINE = 1 + WQ_IDLE = 2 + +#WindowOutputDocumentParent=docview.RichEditDoc +#WindowOutputDocumentParent=docview.Document +import pywin.scintilla.document +from pywin.scintilla import scintillacon +from pywin import is_platform_unicode, default_platform_encoding, default_scintilla_encoding + +WindowOutputDocumentParent=pywin.scintilla.document.CScintillaDocument +class WindowOutputDocument(WindowOutputDocumentParent): + def SaveModified(self): + return 1 # say it is OK to destroy my document + +class WindowOutputFrame(window.MDIChildWnd): + def __init__(self, wnd = None): + window.MDIChildWnd.__init__(self, wnd) + self.HookMessage(self.OnSizeMove, win32con.WM_SIZE) + self.HookMessage(self.OnSizeMove, win32con.WM_MOVE) + + def LoadFrame( self, idResource, style, wndParent, context ): + self.template = context.template + return self._obj_.LoadFrame(idResource, style, wndParent, context) + + def PreCreateWindow(self, cc): + cc = self._obj_.PreCreateWindow(cc) + if self.template.defSize and self.template.defSize[0] != self.template.defSize[1]: + rect = app.RectToCreateStructRect(self.template.defSize) + cc = cc[0], cc[1], cc[2], cc[3], rect, cc[5], cc[6], cc[7], cc[8] + return cc + def OnSizeMove(self, msg): + # so recreate maintains position. + # Need to map coordinates from the + # frame windows first child. + mdiClient = self.GetParent() + self.template.defSize = mdiClient.ScreenToClient(self.GetWindowRect()) + def OnDestroy(self, message): + self.template.OnFrameDestroy(self) + return 1 + +class WindowOutputViewImpl: + def __init__(self): + self.patErrorMessage=re.compile('\W*File "(.*)", line ([0-9]+)') + self.template = self.GetDocument().GetDocTemplate() + + def HookHandlers(self): + # Hook for the right-click menu. + self.HookMessage(self.OnRClick,win32con.WM_RBUTTONDOWN) + + def OnDestroy(self, msg): + self.template.OnViewDestroy(self) + + def OnInitialUpdate(self): + self.RestoreKillBuffer() + self.SetSel(-2) # end of buffer + + def GetRightMenuItems(self): + ret = [] + flags=win32con.MF_STRING|win32con.MF_ENABLED + ret.append((flags, win32ui.ID_EDIT_COPY, '&Copy')) + ret.append((flags, win32ui.ID_EDIT_SELECT_ALL, '&Select all')) + return ret + + # + # Windows command handlers, virtuals, etc. + # + def OnRClick(self,params): + paramsList = self.GetRightMenuItems() + menu = win32ui.CreatePopupMenu() + for appendParams in paramsList: + if type(appendParams)!=type(()): + appendParams = (appendParams,) + apply(menu.AppendMenu, appendParams) + menu.TrackPopupMenu(params[5]) # track at mouse position. + return 0 + + # as this is often used as an output window, exeptions will often + # be printed. Therefore, we support this functionality at this level. + # Returns TRUE if the current line is an error message line, and will + # jump to it. FALSE if no error (and no action taken) + def HandleSpecialLine(self): + import scriptutils + line = self.GetLine() + if line[:11]=="com_error: ": + # An OLE Exception - pull apart the exception + # and try and locate a help file. + try: + import win32api, win32con + det = eval(string.strip(line[string.find(line,":")+1:])) + win32ui.SetStatusText("Opening help file on OLE error..."); + import help + help.OpenHelpFile(det[2][3],win32con.HELP_CONTEXT, det[2][4]) + return 1 + except win32api.error, details: + try: + msg = details[2] + except: + msg = str(details) + win32ui.SetStatusText("The help file could not be opened - %s" % msg) + return 1 + except: + win32ui.SetStatusText("Line is a COM error, but no WinHelp details can be parsed"); + # Look for a Python traceback. + matchResult = self.patErrorMessage.match(line) + if matchResult is None: + # No match - try the previous line + lineNo = self.LineFromChar() + if lineNo > 0: + line = self.GetLine(lineNo-1) + matchResult = self.patErrorMessage.match(line) + if matchResult is not None: + # we have an error line. + fileName = matchResult.group(1) + if fileName[0]=="<": + win32ui.SetStatusText("Can not load this file") + return 1 # still was an error message. + else: + lineNoString = matchResult.group(2) + # Attempt to locate the file (in case it is a relative spec) + fileNameSpec = fileName + fileName = scriptutils.LocatePythonFile(fileName) + if fileName is None: + # Dont force update, so it replaces the idle prompt. + win32ui.SetStatusText("Cant locate the file '%s'" % (fileNameSpec), 0) + return 1 + + win32ui.SetStatusText("Jumping to line "+lineNoString+" of file "+fileName,1) + if not scriptutils.JumpToDocument(fileName, string.atoi(lineNoString)): + win32ui.SetStatusText("Could not open %s" % fileName) + return 1 # still was an error message. + return 1 + return 0 # not an error line + def write(self, msg): + return self.template.write(msg) + def writelines(self, lines): + for line in lines: + self.write(line) + def flush(self): + self.template.flush() + +class WindowOutputViewRTF(docview.RichEditView, WindowOutputViewImpl): + def __init__(self, doc): + docview.RichEditView.__init__(self, doc) + WindowOutputViewImpl.__init__(self) + + def OnInitialUpdate(self): + WindowOutputViewImpl.OnInitialUpdate(self) + return docview.RichEditView.OnInitialUpdate(self) + + def OnDestroy(self, msg): + WindowOutputViewImpl.OnDestroy(self, msg) + docview.RichEditView.OnDestroy(self, msg) + + def HookHandlers(self): + WindowOutputViewImpl.HookHandlers(self) + # Hook for finding and locating error messages + self.HookMessage(self.OnLDoubleClick,win32con.WM_LBUTTONDBLCLK) +# docview.RichEditView.HookHandlers(self) + + def OnLDoubleClick(self,params): + if self.HandleSpecialLine(): + return 0 # dont pass on + return 1 # pass it on by default. + + def RestoreKillBuffer(self): + if len(self.template.killBuffer): + self.StreamIn(win32con.SF_RTF, self._StreamRTFIn) + self.template.killBuffer = [] + + def SaveKillBuffer(self): + self.StreamOut(win32con.SF_RTFNOOBJS, self._StreamRTFOut) + + def _StreamRTFOut(self, data): + self.template.killBuffer.append(data) + return 1 # keep em coming! + + def _StreamRTFIn(self, bytes): + try: + item = self.template.killBuffer[0] + self.template.killBuffer.remove(item) + if bytes < len(item): + print "Warning - output buffer not big enough!" + return item + except IndexError: + return None + def dowrite(self, str): + self.SetSel(-2) + self.ReplaceSel(str) + +import pywin.scintilla.view +class WindowOutputViewScintilla(pywin.scintilla.view.CScintillaView, WindowOutputViewImpl): + def __init__(self, doc): + pywin.scintilla.view.CScintillaView.__init__(self, doc) + WindowOutputViewImpl.__init__(self) + + def OnInitialUpdate(self): + pywin.scintilla.view.CScintillaView.OnInitialUpdate(self) + self.SCISetMarginWidth(3) + WindowOutputViewImpl.OnInitialUpdate(self) + + def OnDestroy(self, msg): + WindowOutputViewImpl.OnDestroy(self, msg) + pywin.scintilla.view.CScintillaView.OnDestroy(self, msg) + + def HookHandlers(self): + WindowOutputViewImpl.HookHandlers(self) + pywin.scintilla.view.CScintillaView.HookHandlers(self) + self.GetParent().HookNotify(self.OnScintillaDoubleClick, scintillacon.SCN_DOUBLECLICK) +## self.HookMessage(self.OnLDoubleClick,win32con.WM_LBUTTONDBLCLK) + + def OnScintillaDoubleClick(self, std, extra): + self.HandleSpecialLine() + +## def OnLDoubleClick(self,params): +## return 0 # never dont pass on + + def RestoreKillBuffer(self): + assert len(self.template.killBuffer) in [0,1], "Unexpected killbuffer contents" + if self.template.killBuffer: + self.SCIAddText(self.template.killBuffer[0]) + self.template.killBuffer = [] + def SaveKillBuffer(self): + self.template.killBuffer = [self.GetTextRange(0,-1)] + def dowrite(self, str): + end = self.GetTextLength() + atEnd = end==self.GetSel()[0] + self.SCIInsertText(str, end) + if atEnd: + self.SetSel(self.GetTextLength()) + + def SetWordWrap(self, bWrapOn = 1): + if bWrapOn: + wrap_mode = scintillacon.SC_WRAP_WORD + else: + wrap_mode = scintillacon.SC_WRAP_NONE + self.SCISetWrapMode(wrap_mode) + + def _MakeColorizer(self): + return None # No colorizer for me! + +WindowOutputView = WindowOutputViewScintilla +# The WindowOutput class is actually an MFC template. This is a conventient way of +# making sure that my state can exist beyond the life of the windows themselves. +# This is primarily to support the functionality of a WindowOutput window automatically +# being recreated if necessary when written to. +class WindowOutput(docview.DocTemplate): + """ Looks like a general Output Window - text can be written by the 'write' method. + Will auto-create itself on first write, and also on next write after being closed """ + softspace=1 + def __init__(self, title=None, defSize=None, queueing = flags.WQ_LINE, \ + bAutoRestore = 1, style=None, + makeDoc = None, makeFrame = None, makeView = None): + """ init the output window - + Params + title=None -- What is the title of the window + defSize=None -- What is the default size for the window - if this + is a string, the size will be loaded from the ini file. + queueing = flags.WQ_LINE -- When should output be written + bAutoRestore=1 -- Should a minimized window be restored. + style -- Style for Window, or None for default. + makeDoc, makeFrame, makeView -- Classes for frame, view and window respectively. + """ + if makeDoc is None: makeDoc = WindowOutputDocument + if makeFrame is None: makeFrame = WindowOutputFrame + if makeView is None: makeView = WindowOutputViewScintilla + docview.DocTemplate.__init__(self, win32ui.IDR_PYTHONTYPE, \ + makeDoc, makeFrame, makeView) + self.SetDocStrings("\nOutput\n\n\n\n\n\n") + win32ui.GetApp().AddDocTemplate(self) + self.writeQueueing = queueing + self.errorCantRecreate = 0 + self.killBuffer=[] + self.style = style + self.bAutoRestore = bAutoRestore + self.title = title + self.bCreating = 0 + self.interruptCount = 0 + if type(defSize)==type(''): # is a string - maintain size pos from ini file. + self.iniSizeSection = defSize + self.defSize = app.LoadWindowSize(defSize) + self.loadedSize = self.defSize + else: + self.iniSizeSection = None + self.defSize=defSize + self.currentView = None + self.outputQueue = Queue.Queue(-1) + self.mainThreadId = win32api.GetCurrentThreadId() + self.idleHandlerSet = 0 + self.SetIdleHandler() + + def __del__(self): + self.Close() + + def Create(self, title=None, style = None): + self.bCreating = 1 + if title: self.title = title + if style: self.style = style + doc=self.OpenDocumentFile() + if doc is None: return + self.currentView = doc.GetFirstView() + self.bCreating = 0 + if self.title: doc.SetTitle(self.title) + + def Close(self): + self.RemoveIdleHandler() + try: + parent = self.currentView.GetParent() + except (AttributeError, win32ui.error): # Already closed + return + parent.DestroyWindow() + + def SetTitle(self, title): + self.title = title + if self.currentView: self.currentView.GetDocument().SetTitle(self.title) + + def OnViewDestroy(self, view): + self.currentView.SaveKillBuffer() + self.currentView = None + + def OnFrameDestroy(self, frame): + if self.iniSizeSection: + # use GetWindowPlacement(), as it works even when min'd or max'd + newSize = frame.GetWindowPlacement()[4] + if self.loadedSize!=newSize: + app.SaveWindowSize(self.iniSizeSection, newSize) + + def SetIdleHandler(self): + if not self.idleHandlerSet: + debug("Idle handler set\n") + win32ui.GetApp().AddIdleHandler(self.QueueIdleHandler) + self.idleHandlerSet = 1 + + def RemoveIdleHandler(self): + if self.idleHandlerSet: + debug("Idle handler reset\n") + if (win32ui.GetApp().DeleteIdleHandler(self.QueueIdleHandler)==0): + debug('Error deleting idle handler\n') + self.idleHandlerSet = 0 + + def RecreateWindow(self): + if self.errorCantRecreate: + debug("Error = not trying again") + return 0 + try: + # This will fail if app shutting down + win32ui.GetMainFrame().GetSafeHwnd() + self.Create() + return 1 + except (win32ui.error, AttributeError): + self.errorCantRecreate = 1 + debug("Winout can not recreate the Window!\n") + return 0 + + # this handles the idle message, and does the printing. + def QueueIdleHandler(self,handler,count): + try: + bEmpty = self.QueueFlush(20) + # If the queue is empty, then we are back to idle and restart interrupt logic. + if bEmpty: self.interruptCount = 0 + except KeyboardInterrupt: + # First interrupt since idle we just pass on. + # later ones we dump the queue and give up. + self.interruptCount = self.interruptCount + 1 + if self.interruptCount > 1: + # Drop the queue quickly as the user is already annoyed :-) + self.outputQueue = Queue.Queue(-1) + print "Interrupted." + bEmpty = 1 + else: + raise # re-raise the error so the users exception filters up. + return not bEmpty # More to do if not empty. + + # Returns true if the Window needs to be recreated. + def NeedRecreateWindow(self): + try: + if self.currentView is not None and self.currentView.IsWindow(): + return 0 + except (win32ui.error, AttributeError): # Attribute error if the win32ui object has died. + pass + return 1 + + # Returns true if the Window is OK (either cos it was, or because it was recreated + def CheckRecreateWindow(self): + if self.bCreating: return 1 + if not self.NeedRecreateWindow(): + return 1 + if self.bAutoRestore: + if self.RecreateWindow(): + return 1 + return 0 + + def QueueFlush(self, max = sys.maxint): + # Returns true if the queue is empty after the flush +# debug("Queueflush - %d, %d\n" % (max, self.outputQueue.qsize())) + if self.bCreating: return 1 + items = [] + rc = 0 + while max > 0: + try: + item = self.outputQueue.get_nowait() + if is_platform_unicode: + # Note is_platform_unicode is never true any more! + if not isinstance(item, UnicodeType): + item = unicode(item, default_platform_encoding) + item = item.encode(default_scintilla_encoding) # What scintilla uses. + else: + # try and display using mbcs encoding + if isinstance(item, UnicodeType): + item = item.encode("mbcs") + items.append(item) + except Queue.Empty: + rc = 1 + break + max = max - 1 + if len(items) != 0: + if not self.CheckRecreateWindow(): + debug(":Recreate failed!\n") + return 1 # In trouble - so say we have nothing to do. + win32ui.PumpWaitingMessages() # Pump paint messages + self.currentView.dowrite(string.join(items,'')) + return rc + + def HandleOutput(self,message): +# debug("QueueOutput on thread %d, flags %d with '%s'...\n" % (win32api.GetCurrentThreadId(), self.writeQueueing, message )) + self.outputQueue.put(message) + if win32api.GetCurrentThreadId() != self.mainThreadId: + pass +# debug("not my thread - ignoring queue options!\n") + elif self.writeQueueing==flags.WQ_LINE: + pos = string.rfind(message, '\n') + if pos>=0: +# debug("Line queueing - forcing flush\n") + self.QueueFlush() + return + elif self.writeQueueing==flags.WQ_NONE: +# debug("WQ_NONE - flushing!\n") + self.QueueFlush() + return + # Let our idle handler get it - wake it up + try: + win32ui.GetMainFrame().PostMessage(win32con.WM_USER) # Kick main thread off. + except win32ui.error: + # This can happen as the app is shutting down, so we send it to the C++ debugger + win32api.OutputDebugString(message) + + # delegate certain fns to my view. + def writelines(self, lines): + for line in lines: + self.write(line) + + def write(self,message): + self.HandleOutput(message) + + def flush(self): + self.QueueFlush() + + def HandleSpecialLine(self): + self.currentView.HandleSpecialLine() + +def RTFWindowOutput(*args, **kw): + kw['makeView'] = WindowOutputViewRTF + return apply( WindowOutput, args, kw ) + + +def thread_test(o): + for i in range(5): + o.write("Hi from thread %d\n" % (win32api.GetCurrentThreadId())) + win32api.Sleep(100) + +def test(): + w = WindowOutput(queueing=flags.WQ_IDLE) + w.write("First bit of text\n") + import thread + for i in range(5): + w.write("Hello from the main thread\n") + thread.start_new(thread_test, (w,)) + for i in range(2): + w.write("Hello from the main thread\n") + win32api.Sleep(50) + return w + +if __name__=='__main__': + test() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/AutoExpand.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/AutoExpand.py new file mode 100644 index 000000000..850ca8daa --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/AutoExpand.py @@ -0,0 +1,92 @@ +import string +import re + +###$ event <> +###$ win +###$ unix + +class AutoExpand: + + keydefs = { + '<>': [''], + } + + unix_keydefs = { + '<>': [''], + } + + menudefs = [ + ('edit', [ + ('E_xpand word', '<>'), + ]), + ] + + wordchars = string.letters + string.digits + "_" + + def __init__(self, editwin): + self.text = editwin.text + self.text.wordlist = None # XXX what is this? + self.state = None + + def expand_word_event(self, event): + curinsert = self.text.index("insert") + curline = self.text.get("insert linestart", "insert lineend") + if not self.state: + words = self.getwords() + index = 0 + else: + words, index, insert, line = self.state + if insert != curinsert or line != curline: + words = self.getwords() + index = 0 + if not words: + self.text.bell() + return "break" + word = self.getprevword() + self.text.delete("insert - %d chars" % len(word), "insert") + newword = words[index] + index = (index + 1) % len(words) + if index == 0: + self.text.bell() # Warn we cycled around + self.text.insert("insert", newword) + curinsert = self.text.index("insert") + curline = self.text.get("insert linestart", "insert lineend") + self.state = words, index, curinsert, curline + return "break" + + def getwords(self): + word = self.getprevword() + if not word: + return [] + before = self.text.get("1.0", "insert wordstart") + wbefore = re.findall(r"\b" + word + r"\w+\b", before) + del before + after = self.text.get("insert wordend", "end") + wafter = re.findall(r"\b" + word + r"\w+\b", after) + del after + if not wbefore and not wafter: + return [] + words = [] + dict = {} + # search backwards through words before + wbefore.reverse() + for w in wbefore: + if dict.get(w): + continue + words.append(w) + dict[w] = w + # search onwards through words after + for w in wafter: + if dict.get(w): + continue + words.append(w) + dict[w] = w + words.append(word) + return words + + def getprevword(self): + line = self.text.get("insert linestart", "insert") + i = len(line) + while i > 0 and line[i-1] in self.wordchars: + i = i-1 + return line[i:] diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/AutoIndent.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/AutoIndent.py new file mode 100644 index 000000000..cc1abebd8 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/AutoIndent.py @@ -0,0 +1,553 @@ +import string +#from Tkinter import TclError +#import tkMessageBox +#import tkSimpleDialog + +###$ event <> +###$ win +###$ win +###$ unix +###$ unix + +###$ event <> +###$ win +###$ unix +###$ unix + +###$ event <> +###$ win +###$ unix +###$ unix + +###$ event <> +###$ win +###$ unix + +###$ event <> +###$ win +###$ unix + +###$ event <> +###$ win +###$ unix + +###$ event <> +###$ win +###$ unix + +import PyParse + +class AutoIndent: + + menudefs = [ + ('edit', [ + None, + ('_Indent region', '<>'), + ('_Dedent region', '<>'), + ('Comment _out region', '<>'), + ('U_ncomment region', '<>'), + ('Tabify region', '<>'), + ('Untabify region', '<>'), + ('Toggle tabs', '<>'), + ('New indent width', '<>'), + ]), + ] + + keydefs = { + '<>': [''], + '<>': ['', ''], + '<>': [''] + } + + windows_keydefs = { + '<>': [''], + '<>': [''], + '<>': [''], + '<>': [''], + '<>': [''], + '<>': [''], + '<>': [''], + '<>': [''], + } + + unix_keydefs = { + '<>': ['', + '', + ''], + '<>': ['', + '', + ''], + '<>': ['', ''], + '<>': ['', ''], + '<>': ['', ''], + '<>': ['', ''], + '<>': [''], + '<>': [''], + } + + # usetabs true -> literal tab characters are used by indent and + # dedent cmds, possibly mixed with spaces if + # indentwidth is not a multiple of tabwidth + # false -> tab characters are converted to spaces by indent + # and dedent cmds, and ditto TAB keystrokes + # indentwidth is the number of characters per logical indent level. + # tabwidth is the display width of a literal tab character. + # CAUTION: telling Tk to use anything other than its default + # tab setting causes it to use an entirely different tabbing algorithm, + # treating tab stops as fixed distances from the left margin. + # Nobody expects this, so for now tabwidth should never be changed. + usetabs = 1 + indentwidth = 4 + tabwidth = 8 # for IDLE use, must remain 8 until Tk is fixed + + # If context_use_ps1 is true, parsing searches back for a ps1 line; + # else searches for a popular (if, def, ...) Python stmt. + context_use_ps1 = 0 + + # When searching backwards for a reliable place to begin parsing, + # first start num_context_lines[0] lines back, then + # num_context_lines[1] lines back if that didn't work, and so on. + # The last value should be huge (larger than the # of lines in a + # conceivable file). + # Making the initial values larger slows things down more often. + num_context_lines = 50, 500, 5000000 + + def __init__(self, editwin): + self.editwin = editwin + self.text = editwin.text + + def config(self, **options): + for key, value in options.items(): + if key == 'usetabs': + self.usetabs = value + elif key == 'indentwidth': + self.indentwidth = value + elif key == 'tabwidth': + self.tabwidth = value + elif key == 'context_use_ps1': + self.context_use_ps1 = value + else: + raise KeyError, "bad option name: %s" % `key` + + # If ispythonsource and guess are true, guess a good value for + # indentwidth based on file content (if possible), and if + # indentwidth != tabwidth set usetabs false. + # In any case, adjust the Text widget's view of what a tab + # character means. + + def set_indentation_params(self, ispythonsource, guess=1): + if guess and ispythonsource: + i = self.guess_indent() + if 2 <= i <= 8: + self.indentwidth = i + if self.indentwidth != self.tabwidth: + self.usetabs = 0 + + self.editwin.set_tabwidth(self.tabwidth) + + def smart_backspace_event(self, event): + text = self.text + first, last = self.editwin.get_selection_indices() + if first and last: + text.delete(first, last) + text.mark_set("insert", first) + return "break" + # Delete whitespace left, until hitting a real char or closest + # preceding virtual tab stop. + chars = text.get("insert linestart", "insert") + if chars == '': + if text.compare("insert", ">", "1.0"): + # easy: delete preceding newline + text.delete("insert-1c") + else: + text.bell() # at start of buffer + return "break" + if chars[-1] not in " \t": + # easy: delete preceding real char + text.delete("insert-1c") + return "break" + # Ick. It may require *inserting* spaces if we back up over a + # tab character! This is written to be clear, not fast. + expand, tabwidth = string.expandtabs, self.tabwidth + have = len(expand(chars, tabwidth)) + assert have > 0 + want = int((have - 1) / self.indentwidth) * self.indentwidth + ncharsdeleted = 0 + while 1: + chars = chars[:-1] + ncharsdeleted = ncharsdeleted + 1 + have = len(expand(chars, tabwidth)) + if have <= want or chars[-1] not in " \t": + break + text.undo_block_start() + text.delete("insert-%dc" % ncharsdeleted, "insert") + if have < want: + text.insert("insert", ' ' * (want - have)) + text.undo_block_stop() + return "break" + + def smart_indent_event(self, event): + # if intraline selection: + # delete it + # elif multiline selection: + # do indent-region & return + # indent one level + text = self.text + first, last = self.editwin.get_selection_indices() + text.undo_block_start() + try: + if first and last: + if index2line(first) != index2line(last): + return self.indent_region_event(event) + text.delete(first, last) + text.mark_set("insert", first) + prefix = text.get("insert linestart", "insert") + raw, effective = classifyws(prefix, self.tabwidth) + if raw == len(prefix): + # only whitespace to the left + self.reindent_to(effective + self.indentwidth) + else: + if self.usetabs: + pad = '\t' + else: + effective = len(string.expandtabs(prefix, + self.tabwidth)) + n = self.indentwidth + pad = ' ' * (n - effective % n) + text.insert("insert", pad) + text.see("insert") + return "break" + finally: + text.undo_block_stop() + + def newline_and_indent_event(self, event): + text = self.text + first, last = self.editwin.get_selection_indices() + text.undo_block_start() + try: + if first and last: + text.delete(first, last) + text.mark_set("insert", first) + line = text.get("insert linestart", "insert") + i, n = 0, len(line) + while i < n and line[i] in " \t": + i = i+1 + if i == n: + # the cursor is in or at leading indentation; just inject + # an empty line at the start + text.insert("insert linestart", '\n') + return "break" + indent = line[:i] + # strip whitespace before insert point + i = 0 + while line and line[-1] in " \t": + line = line[:-1] + i = i+1 + if i: + text.delete("insert - %d chars" % i, "insert") + # strip whitespace after insert point + while text.get("insert") in " \t": + text.delete("insert") + # start new line + text.insert("insert", '\n') + + # adjust indentation for continuations and block + # open/close first need to find the last stmt + lno = index2line(text.index('insert')) + y = PyParse.Parser(self.indentwidth, self.tabwidth) + for context in self.num_context_lines: + startat = max(lno - context, 1) + startatindex = `startat` + ".0" + rawtext = text.get(startatindex, "insert") + y.set_str(rawtext) + bod = y.find_good_parse_start( + self.context_use_ps1, + self._build_char_in_string_func(startatindex)) + if bod is not None or startat == 1: + break + y.set_lo(bod or 0) + c = y.get_continuation_type() + if c != PyParse.C_NONE: + # The current stmt hasn't ended yet. + if c == PyParse.C_STRING: + # inside a string; just mimic the current indent + text.insert("insert", indent) + elif c == PyParse.C_BRACKET: + # line up with the first (if any) element of the + # last open bracket structure; else indent one + # level beyond the indent of the line with the + # last open bracket + self.reindent_to(y.compute_bracket_indent()) + elif c == PyParse.C_BACKSLASH: + # if more than one line in this stmt already, just + # mimic the current indent; else if initial line + # has a start on an assignment stmt, indent to + # beyond leftmost =; else to beyond first chunk of + # non-whitespace on initial line + if y.get_num_lines_in_stmt() > 1: + text.insert("insert", indent) + else: + self.reindent_to(y.compute_backslash_indent()) + else: + assert 0, "bogus continuation type " + `c` + return "break" + + # This line starts a brand new stmt; indent relative to + # indentation of initial line of closest preceding + # interesting stmt. + indent = y.get_base_indent_string() + text.insert("insert", indent) + if y.is_block_opener(): + self.smart_indent_event(event) + elif indent and y.is_block_closer(): + self.smart_backspace_event(event) + return "break" + finally: + text.see("insert") + text.undo_block_stop() + + auto_indent = newline_and_indent_event + + # Our editwin provides a is_char_in_string function that works + # with a Tk text index, but PyParse only knows about offsets into + # a string. This builds a function for PyParse that accepts an + # offset. + + def _build_char_in_string_func(self, startindex): + def inner(offset, _startindex=startindex, + _icis=self.editwin.is_char_in_string): + return _icis(_startindex + "+%dc" % offset) + return inner + + def indent_region_event(self, event): + head, tail, chars, lines = self.get_region() + for pos in range(len(lines)): + line = lines[pos] + if line: + raw, effective = classifyws(line, self.tabwidth) + effective = effective + self.indentwidth + lines[pos] = self._make_blanks(effective) + line[raw:] + self.set_region(head, tail, chars, lines) + return "break" + + def dedent_region_event(self, event): + head, tail, chars, lines = self.get_region() + for pos in range(len(lines)): + line = lines[pos] + if line: + raw, effective = classifyws(line, self.tabwidth) + effective = max(effective - self.indentwidth, 0) + lines[pos] = self._make_blanks(effective) + line[raw:] + self.set_region(head, tail, chars, lines) + return "break" + + def comment_region_event(self, event): + head, tail, chars, lines = self.get_region() + for pos in range(len(lines) - 1): + line = lines[pos] + lines[pos] = '##' + line + self.set_region(head, tail, chars, lines) + + def uncomment_region_event(self, event): + head, tail, chars, lines = self.get_region() + for pos in range(len(lines)): + line = lines[pos] + if not line: + continue + if line[:2] == '##': + line = line[2:] + elif line[:1] == '#': + line = line[1:] + lines[pos] = line + self.set_region(head, tail, chars, lines) + + def tabify_region_event(self, event): + head, tail, chars, lines = self.get_region() + tabwidth = self._asktabwidth() + for pos in range(len(lines)): + line = lines[pos] + if line: + raw, effective = classifyws(line, tabwidth) + ntabs, nspaces = divmod(effective, tabwidth) + lines[pos] = '\t' * ntabs + ' ' * nspaces + line[raw:] + self.set_region(head, tail, chars, lines) + + def untabify_region_event(self, event): + head, tail, chars, lines = self.get_region() + tabwidth = self._asktabwidth() + for pos in range(len(lines)): + lines[pos] = string.expandtabs(lines[pos], tabwidth) + self.set_region(head, tail, chars, lines) + + def toggle_tabs_event(self, event): + if self.editwin.askyesno( + "Toggle tabs", + "Turn tabs " + ("on", "off")[self.usetabs] + "?", + parent=self.text): + self.usetabs = not self.usetabs + return "break" + + # XXX this isn't bound to anything -- see class tabwidth comments + def change_tabwidth_event(self, event): + new = self._asktabwidth() + if new != self.tabwidth: + self.tabwidth = new + self.set_indentation_params(0, guess=0) + return "break" + + def change_indentwidth_event(self, event): + new = self.editwin.askinteger( + "Indent width", + "New indent width (1-16)", + parent=self.text, + initialvalue=self.indentwidth, + minvalue=1, + maxvalue=16) + if new and new != self.indentwidth: + self.indentwidth = new + return "break" + + def get_region(self): + text = self.text + first, last = self.editwin.get_selection_indices() + if first and last: + head = text.index(first + " linestart") + tail = text.index(last + "-1c lineend +1c") + else: + head = text.index("insert linestart") + tail = text.index("insert lineend +1c") + chars = text.get(head, tail) + lines = string.split(chars, "\n") + return head, tail, chars, lines + + def set_region(self, head, tail, chars, lines): + text = self.text + newchars = string.join(lines, "\n") + if newchars == chars: + text.bell() + return + text.tag_remove("sel", "1.0", "end") + text.mark_set("insert", head) + text.undo_block_start() + text.delete(head, tail) + text.insert(head, newchars) + text.undo_block_stop() + text.tag_add("sel", head, "insert") + + # Make string that displays as n leading blanks. + + def _make_blanks(self, n): + if self.usetabs: + ntabs, nspaces = divmod(n, self.tabwidth) + return '\t' * ntabs + ' ' * nspaces + else: + return ' ' * n + + # Delete from beginning of line to insert point, then reinsert + # column logical (meaning use tabs if appropriate) spaces. + + def reindent_to(self, column): + text = self.text + text.undo_block_start() + if text.compare("insert linestart", "!=", "insert"): + text.delete("insert linestart", "insert") + if column: + text.insert("insert", self._make_blanks(column)) + text.undo_block_stop() + + def _asktabwidth(self): + return self.editwin.askinteger( + "Tab width", + "Spaces per tab?", + parent=self.text, + initialvalue=self.tabwidth, + minvalue=1, + maxvalue=16) or self.tabwidth + + # Guess indentwidth from text content. + # Return guessed indentwidth. This should not be believed unless + # it's in a reasonable range (e.g., it will be 0 if no indented + # blocks are found). + + def guess_indent(self): + opener, indented = IndentSearcher(self.text, self.tabwidth).run() + if opener and indented: + raw, indentsmall = classifyws(opener, self.tabwidth) + raw, indentlarge = classifyws(indented, self.tabwidth) + else: + indentsmall = indentlarge = 0 + return indentlarge - indentsmall + +# "line.col" -> line, as an int +def index2line(index): + return int(float(index)) + +# Look at the leading whitespace in s. +# Return pair (# of leading ws characters, +# effective # of leading blanks after expanding +# tabs to width tabwidth) + +def classifyws(s, tabwidth): + raw = effective = 0 + for ch in s: + if ch == ' ': + raw = raw + 1 + effective = effective + 1 + elif ch == '\t': + raw = raw + 1 + effective = (effective / tabwidth + 1) * tabwidth + else: + break + return raw, effective + +import tokenize +_tokenize = tokenize +del tokenize + +class IndentSearcher: + + # .run() chews over the Text widget, looking for a block opener + # and the stmt following it. Returns a pair, + # (line containing block opener, line containing stmt) + # Either or both may be None. + + def __init__(self, text, tabwidth): + self.text = text + self.tabwidth = tabwidth + self.i = self.finished = 0 + self.blkopenline = self.indentedline = None + + def readline(self): + if self.finished: + return "" + i = self.i = self.i + 1 + mark = `i` + ".0" + if self.text.compare(mark, ">=", "end"): + return "" + return self.text.get(mark, mark + " lineend+1c") + + def tokeneater(self, type, token, start, end, line, + INDENT=_tokenize.INDENT, + NAME=_tokenize.NAME, + OPENERS=('class', 'def', 'for', 'if', 'try', 'while')): + if self.finished: + pass + elif type == NAME and token in OPENERS: + self.blkopenline = line + elif type == INDENT and self.blkopenline: + self.indentedline = line + self.finished = 1 + + def run(self): + save_tabsize = _tokenize.tabsize + _tokenize.tabsize = self.tabwidth + try: + try: + _tokenize.tokenize(self.readline, self.tokeneater) + except (_tokenize.TokenError, IndentationError): + # since we cut off the tokenizer early, we can trigger + # spurious errors + pass + finally: + _tokenize.tabsize = save_tabsize + return self.blkopenline, self.indentedline diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/CallTips.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/CallTips.py new file mode 100644 index 000000000..03dd54bfd --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/CallTips.py @@ -0,0 +1,190 @@ +# CallTips.py - An IDLE extension that provides "Call Tips" - ie, a floating window that +# displays parameter information as you open parens. + +import string +import sys +import types + +class CallTips: + + menudefs = [ + ] + + keydefs = { + '<>': [''], + '<>': [''], + '<>': [''], + '<>': ['', ''], + } + + windows_keydefs = { + } + + unix_keydefs = { + } + + def __init__(self, editwin): + self.editwin = editwin + self.text = editwin.text + self.calltip = None + if hasattr(self.text, "make_calltip_window"): + self._make_calltip_window = self.text.make_calltip_window + else: + self._make_calltip_window = self._make_tk_calltip_window + + def close(self): + self._make_calltip_window = None + + # Makes a Tk based calltip window. Used by IDLE, but not Pythonwin. + # See __init__ above for how this is used. + def _make_tk_calltip_window(self): + import CallTipWindow + return CallTipWindow.CallTip(self.text) + + def _remove_calltip_window(self): + if self.calltip: + self.calltip.hidetip() + self.calltip = None + + def paren_open_event(self, event): + self._remove_calltip_window() + arg_text = get_arg_text(self.get_object_at_cursor()) + if arg_text: + self.calltip_start = self.text.index("insert") + self.calltip = self._make_calltip_window() + self.calltip.showtip(arg_text) + return "" #so the event is handled normally. + + def paren_close_event(self, event): + # Now just hides, but later we should check if other + # paren'd expressions remain open. + self._remove_calltip_window() + return "" #so the event is handled normally. + + def check_calltip_cancel_event(self, event): + if self.calltip: + # If we have moved before the start of the calltip, + # or off the calltip line, then cancel the tip. + # (Later need to be smarter about multi-line, etc) + if self.text.compare("insert", "<=", self.calltip_start) or \ + self.text.compare("insert", ">", self.calltip_start + " lineend"): + self._remove_calltip_window() + return "" #so the event is handled normally. + + def calltip_cancel_event(self, event): + self._remove_calltip_window() + return "" #so the event is handled normally. + + def get_object_at_cursor(self, + wordchars="._" + string.uppercase + string.lowercase + string.digits): + # XXX - This needs to be moved to a better place + # so the "." attribute lookup code can also use it. + text = self.text + chars = text.get("insert linestart", "insert") + i = len(chars) + while i and chars[i-1] in wordchars: + i = i-1 + word = chars[i:] + if word: + # How is this for a hack! + import sys, __main__ + namespace = sys.modules.copy() + namespace.update(__main__.__dict__) + try: + return eval(word, namespace) + except: + pass + return None # Can't find an object. + +def _find_constructor(class_ob): + # Given a class object, return a function object used for the + # constructor (ie, __init__() ) or None if we can't find one. + try: + return class_ob.__init__.im_func + except AttributeError: + for base in class_ob.__bases__: + rc = _find_constructor(base) + if rc is not None: return rc + return None + +def get_arg_text(ob): + # Get a string describing the arguments for the given object. + argText = "" + if ob is not None: + argOffset = 0 + if type(ob)==types.ClassType: + # Look for the highest __init__ in the class chain. + fob = _find_constructor(ob) + if fob is None: + fob = lambda: None + else: + argOffset = 1 + elif type(ob)==types.MethodType: + # bit of a hack for methods - turn it into a function + # but we drop the "self" param. + fob = ob.im_func + argOffset = 1 + else: + fob = ob + # Try and build one for Python defined functions + if type(fob) in [types.FunctionType, types.LambdaType]: + try: + realArgs = fob.func_code.co_varnames[argOffset:fob.func_code.co_argcount] + defaults = fob.func_defaults or [] + defaults = list(map(lambda name: "=%s" % name, defaults)) + defaults = [""] * (len(realArgs)-len(defaults)) + defaults + items = map(lambda arg, dflt: arg+dflt, realArgs, defaults) + if fob.func_code.co_flags & 0x4: + items.append("...") + if fob.func_code.co_flags & 0x8: + items.append("***") + argText = string.join(items , ", ") + argText = "(%s)" % argText + except: + pass + # See if we can use the docstring + if hasattr(ob, "__doc__") and ob.__doc__: + pos = string.find(ob.__doc__, "\n") + if pos<0 or pos>70: pos=70 + if argText: argText = argText + "\n" + argText = argText + ob.__doc__[:pos] + + return argText + +################################################# +# +# Test code +# +if __name__=='__main__': + + def t1(): "()" + def t2(a, b=None): "(a, b=None)" + def t3(a, *args): "(a, ...)" + def t4(*args): "(...)" + def t5(a, *args): "(a, ...)" + def t6(a, b=None, *args, **kw): "(a, b=None, ..., ***)" + + class TC: + "(a=None, ...)" + def __init__(self, a=None, *b): "(a=None, ...)" + def t1(self): "()" + def t2(self, a, b=None): "(a, b=None)" + def t3(self, a, *args): "(a, ...)" + def t4(self, *args): "(...)" + def t5(self, a, *args): "(a, ...)" + def t6(self, a, b=None, *args, **kw): "(a, b=None, ..., ***)" + + def test( tests ): + failed=[] + for t in tests: + expected = t.__doc__ + "\n" + t.__doc__ + if get_arg_text(t) != expected: + failed.append(t) + print "%s - expected %s, but got %s" % (t, `expected`, `get_arg_text(t)`) + print "%d of %d tests failed" % (len(failed), len(tests)) + + tc = TC() + tests = t1, t2, t3, t4, t5, t6, \ + TC, tc.t1, tc.t2, tc.t3, tc.t4, tc.t5, tc.t6 + + test(tests) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/FormatParagraph.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/FormatParagraph.py new file mode 100644 index 000000000..74b52c5a4 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/FormatParagraph.py @@ -0,0 +1,155 @@ +# Extension to format a paragraph + +# Does basic, standard text formatting, and also understands Python +# comment blocks. Thus, for editing Python source code, this +# extension is really only suitable for reformatting these comment +# blocks or triple-quoted strings. + +# Known problems with comment reformatting: +# * If there is a selection marked, and the first line of the +# selection is not complete, the block will probably not be detected +# as comments, and will have the normal "text formatting" rules +# applied. +# * If a comment block has leading whitespace that mixes tabs and +# spaces, they will not be considered part of the same block. +# * Fancy comments, like this bulleted list, arent handled :-) + +import string +import re + +class FormatParagraph: + + menudefs = [ + ('edit', [ + ('Format Paragraph', '<>'), + ]) + ] + + keydefs = { + '<>': [''], + } + + unix_keydefs = { + '<>': [''], + } + + def __init__(self, editwin): + self.editwin = editwin + + def close(self): + self.editwin = None + + def format_paragraph_event(self, event): + text = self.editwin.text + first, last = self.editwin.get_selection_indices() + if first and last: + data = text.get(first, last) + comment_header = '' + else: + first, last, comment_header, data = \ + find_paragraph(text, text.index("insert")) + if comment_header: + # Reformat the comment lines - convert to text sans header. + lines = string.split(data, "\n") + lines = map(lambda st, l=len(comment_header): st[l:], lines) + data = string.join(lines, "\n") + # Reformat to 70 chars or a 20 char width, whichever is greater. + format_width = max(70-len(comment_header), 20) + newdata = reformat_paragraph(data, format_width) + # re-split and re-insert the comment header. + newdata = string.split(newdata, "\n") + # If the block ends in a \n, we dont want the comment + # prefix inserted after it. (Im not sure it makes sense to + # reformat a comment block that isnt made of complete + # lines, but whatever!) Can't think of a clean soltution, + # so we hack away + block_suffix = "" + if not newdata[-1]: + block_suffix = "\n" + newdata = newdata[:-1] + builder = lambda item, prefix=comment_header: prefix+item + newdata = string.join(map(builder, newdata), '\n') + block_suffix + else: + # Just a normal text format + newdata = reformat_paragraph(data) + text.tag_remove("sel", "1.0", "end") + if newdata != data: + text.mark_set("insert", first) + text.undo_block_start() + text.delete(first, last) + text.insert(first, newdata) + text.undo_block_stop() + else: + text.mark_set("insert", last) + text.see("insert") + +def find_paragraph(text, mark): + lineno, col = map(int, string.split(mark, ".")) + line = text.get("%d.0" % lineno, "%d.0 lineend" % lineno) + while text.compare("%d.0" % lineno, "<", "end") and is_all_white(line): + lineno = lineno + 1 + line = text.get("%d.0" % lineno, "%d.0 lineend" % lineno) + first_lineno = lineno + comment_header = get_comment_header(line) + comment_header_len = len(comment_header) + while get_comment_header(line)==comment_header and \ + not is_all_white(line[comment_header_len:]): + lineno = lineno + 1 + line = text.get("%d.0" % lineno, "%d.0 lineend" % lineno) + last = "%d.0" % lineno + # Search back to beginning of paragraph + lineno = first_lineno - 1 + line = text.get("%d.0" % lineno, "%d.0 lineend" % lineno) + while lineno > 0 and \ + get_comment_header(line)==comment_header and \ + not is_all_white(line[comment_header_len:]): + lineno = lineno - 1 + line = text.get("%d.0" % lineno, "%d.0 lineend" % lineno) + first = "%d.0" % (lineno+1) + return first, last, comment_header, text.get(first, last) + +def reformat_paragraph(data, limit=70): + lines = string.split(data, "\n") + i = 0 + n = len(lines) + while i < n and is_all_white(lines[i]): + i = i+1 + if i >= n: + return data + indent1 = get_indent(lines[i]) + if i+1 < n and not is_all_white(lines[i+1]): + indent2 = get_indent(lines[i+1]) + else: + indent2 = indent1 + new = lines[:i] + partial = indent1 + while i < n and not is_all_white(lines[i]): + # XXX Should take double space after period (etc.) into account + words = re.split("(\s+)", lines[i]) + for j in range(0, len(words), 2): + word = words[j] + if not word: + continue # Can happen when line ends in whitespace + if len(string.expandtabs(partial + word)) > limit and \ + partial != indent1: + new.append(string.rstrip(partial)) + partial = indent2 + partial = partial + word + " " + if j+1 < len(words) and words[j+1] != " ": + partial = partial + " " + i = i+1 + new.append(string.rstrip(partial)) + # XXX Should reformat remaining paragraphs as well + new.extend(lines[i:]) + return string.join(new, "\n") + +def is_all_white(line): + return re.match(r"^\s*$", line) is not None + +def get_indent(line): + return re.match(r"^(\s*)", line).group() + +def get_comment_header(line): + m = re.match(r"^(\s*#*)", line) + if m is None: return "" + return m.group(1) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/IdleHistory.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/IdleHistory.py new file mode 100644 index 000000000..0f4c442cc --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/IdleHistory.py @@ -0,0 +1,89 @@ +import string + +class History: + + def __init__(self, text, output_sep = "\n"): + self.text = text + self.history = [] + self.history_prefix = None + self.history_pointer = None + self.output_sep = output_sep + text.bind("<>", self.history_prev) + text.bind("<>", self.history_next) + + def history_next(self, event): + self.history_do(0) + return "break" + + def history_prev(self, event): + self.history_do(1) + return "break" + + def _get_source(self, start, end): + # Get source code from start index to end index. Lines in the + # text control may be separated by sys.ps2 . + lines = string.split(self.text.get(start, end), self.output_sep) + return string.join(lines, "\n") + + def _put_source(self, where, source): + output = string.join(string.split(source, "\n"), self.output_sep) + self.text.insert(where, output) + + def history_do(self, reverse): + nhist = len(self.history) + pointer = self.history_pointer + prefix = self.history_prefix + if pointer is not None and prefix is not None: + if self.text.compare("insert", "!=", "end-1c") or \ + self._get_source("iomark", "end-1c") != self.history[pointer]: + pointer = prefix = None + if pointer is None or prefix is None: + prefix = self._get_source("iomark", "end-1c") + if reverse: + pointer = nhist + else: + pointer = -1 + nprefix = len(prefix) + while 1: + if reverse: + pointer = pointer - 1 + else: + pointer = pointer + 1 + if pointer < 0 or pointer >= nhist: + self.text.bell() + if self._get_source("iomark", "end-1c") != prefix: + self.text.delete("iomark", "end-1c") + self._put_source("iomark", prefix) + pointer = prefix = None + break + item = self.history[pointer] + if item[:nprefix] == prefix and len(item) > nprefix: + self.text.delete("iomark", "end-1c") + self._put_source("iomark", item) + break + self.text.mark_set("insert", "end-1c") + self.text.see("insert") + self.text.tag_remove("sel", "1.0", "end") + self.history_pointer = pointer + self.history_prefix = prefix + + def history_store(self, source): + source = string.strip(source) + if len(source) > 2: + # avoid duplicates + try: + self.history.remove(source) + except ValueError: + pass + self.history.append(source) + self.history_pointer = None + self.history_prefix = None + + def recall(self, s): + s = string.strip(s) + self.text.tag_remove("sel", "1.0", "end") + self.text.delete("iomark", "end-1c") + self.text.mark_set("insert", "end-1c") + self.text.insert("insert", s) + self.text.see("insert") + diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/PyParse.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/PyParse.py new file mode 100644 index 000000000..cad78794b --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/PyParse.py @@ -0,0 +1,588 @@ +import string +import re +import sys + +try: + from types import UnicodeType +except ImportError: + from pywintypes import UnicodeType + +# Reason last stmt is continued (or C_NONE if it's not). +C_NONE, C_BACKSLASH, C_STRING, C_BRACKET = range(4) + +if 0: # for throwaway debugging output + def dump(*stuff): + sys.__stdout__.write(string.join(map(str, stuff), " ") + "\n") + +# Find what looks like the start of a popular stmt. + +_synchre = re.compile(r""" + ^ + [ \t]* + (?: if + | for + | while + | else + | def + | return + | assert + | break + | class + | continue + | elif + | try + | except + | raise + | import + ) + \b +""", re.VERBOSE | re.MULTILINE).search + +# Match blank line or non-indenting comment line. + +_junkre = re.compile(r""" + [ \t]* + (?: \# \S .* )? + \n +""", re.VERBOSE).match + +# Match any flavor of string; the terminating quote is optional +# so that we're robust in the face of incomplete program text. + +_match_stringre = re.compile(r""" + \""" [^"\\]* (?: + (?: \\. | "(?!"") ) + [^"\\]* + )* + (?: \""" )? + +| " [^"\\\n]* (?: \\. [^"\\\n]* )* "? + +| ''' [^'\\]* (?: + (?: \\. | '(?!'') ) + [^'\\]* + )* + (?: ''' )? + +| ' [^'\\\n]* (?: \\. [^'\\\n]* )* '? +""", re.VERBOSE | re.DOTALL).match + +# Match a line that starts with something interesting; +# used to find the first item of a bracket structure. + +_itemre = re.compile(r""" + [ \t]* + [^\s#\\] # if we match, m.end()-1 is the interesting char +""", re.VERBOSE).match + +# Match start of stmts that should be followed by a dedent. + +_closere = re.compile(r""" + \s* + (?: return + | break + | continue + | raise + | pass + ) + \b +""", re.VERBOSE).match + +# Chew up non-special chars as quickly as possible. If match is +# successful, m.end() less 1 is the index of the last boring char +# matched. If match is unsuccessful, the string starts with an +# interesting char. + +_chew_ordinaryre = re.compile(r""" + [^[\](){}#'"\\]+ +""", re.VERBOSE).match + +# Build translation table to map uninteresting chars to "x", open +# brackets to "(", and close brackets to ")". + +_tran = ['x'] * 256 +for ch in "({[": + _tran[ord(ch)] = '(' +for ch in ")}]": + _tran[ord(ch)] = ')' +for ch in "\"'\\\n#": + _tran[ord(ch)] = ch +_tran = string.join(_tran, '') +del ch + +class Parser: + + def __init__(self, indentwidth, tabwidth): + self.indentwidth = indentwidth + self.tabwidth = tabwidth + + def set_str(self, str): + assert len(str) == 0 or str[-1] == '\n', "Oops - have str %r" % (str,) + if type(str) == UnicodeType: + # The parse functions have no idea what to do with Unicode, so + # replace all Unicode characters with "x". This is "safe" + # so long as the only characters germane to parsing the structure + # of Python are 7-bit ASCII. It's *necessary* because Unicode + # strings don't have a .translate() method that supports + # deletechars. + uniphooey = str + str = [] + push = str.append + for raw in map(ord, uniphooey): + push(raw < 127 and chr(raw) or "x") + str = "".join(str) + self.str = str + self.study_level = 0 + + # Return index of a good place to begin parsing, as close to the + # end of the string as possible. This will be the start of some + # popular stmt like "if" or "def". Return None if none found: + # the caller should pass more prior context then, if possible, or + # if not (the entire program text up until the point of interest + # has already been tried) pass 0 to set_lo. + # + # This will be reliable iff given a reliable is_char_in_string + # function, meaning that when it says "no", it's absolutely + # guaranteed that the char is not in a string. + # + # Ack, hack: in the shell window this kills us, because there's + # no way to tell the differences between output, >>> etc and + # user input. Indeed, IDLE's first output line makes the rest + # look like it's in an unclosed paren!: + # Python 1.5.2 (#0, Apr 13 1999, ... + + def find_good_parse_start(self, use_ps1, is_char_in_string=None, + _rfind=string.rfind, + _synchre=_synchre): + str, pos = self.str, None + if use_ps1: + # shell window + ps1 = '\n' + sys.ps1 + i = _rfind(str, ps1) + if i >= 0: + pos = i + len(ps1) + # make it look like there's a newline instead + # of ps1 at the start -- hacking here once avoids + # repeated hackery later + self.str = str[:pos-1] + '\n' + str[pos:] + return pos + + # File window -- real work. + if not is_char_in_string: + # no clue -- make the caller pass everything + return None + + # Peek back from the end for a good place to start, + # but don't try too often; pos will be left None, or + # bumped to a legitimate synch point. + limit = len(str) + for tries in range(5): + i = _rfind(str, ":\n", 0, limit) + if i < 0: + break + i = _rfind(str, '\n', 0, i) + 1 # start of colon line + m = _synchre(str, i, limit) + if m and not is_char_in_string(m.start()): + pos = m.start() + break + limit = i + if pos is None: + # Nothing looks like a block-opener, or stuff does + # but is_char_in_string keeps returning true; most likely + # we're in or near a giant string, the colorizer hasn't + # caught up enough to be helpful, or there simply *aren't* + # any interesting stmts. In any of these cases we're + # going to have to parse the whole thing to be sure, so + # give it one last try from the start, but stop wasting + # time here regardless of the outcome. + m = _synchre(str) + if m and not is_char_in_string(m.start()): + pos = m.start() + return pos + + # Peeking back worked; look forward until _synchre no longer + # matches. + i = pos + 1 + while 1: + m = _synchre(str, i) + if m: + s, i = m.span() + if not is_char_in_string(s): + pos = s + else: + break + return pos + + # Throw away the start of the string. Intended to be called with + # find_good_parse_start's result. + + def set_lo(self, lo): + assert lo == 0 or self.str[lo-1] == '\n' + if lo > 0: + self.str = self.str[lo:] + + # As quickly as humanly possible , find the line numbers (0- + # based) of the non-continuation lines. + # Creates self.{goodlines, continuation}. + + def _study1(self, _replace=string.replace, _find=string.find): + if self.study_level >= 1: + return + self.study_level = 1 + + # Map all uninteresting characters to "x", all open brackets + # to "(", all close brackets to ")", then collapse runs of + # uninteresting characters. This can cut the number of chars + # by a factor of 10-40, and so greatly speed the following loop. + str = self.str + str = string.translate(str, _tran) + str = _replace(str, 'xxxxxxxx', 'x') + str = _replace(str, 'xxxx', 'x') + str = _replace(str, 'xx', 'x') + str = _replace(str, 'xx', 'x') + str = _replace(str, '\nx', '\n') + # note that replacing x\n with \n would be incorrect, because + # x may be preceded by a backslash + + # March over the squashed version of the program, accumulating + # the line numbers of non-continued stmts, and determining + # whether & why the last stmt is a continuation. + continuation = C_NONE + level = lno = 0 # level is nesting level; lno is line number + self.goodlines = goodlines = [0] + push_good = goodlines.append + i, n = 0, len(str) + while i < n: + ch = str[i] + i = i+1 + + # cases are checked in decreasing order of frequency + if ch == 'x': + continue + + if ch == '\n': + lno = lno + 1 + if level == 0: + push_good(lno) + # else we're in an unclosed bracket structure + continue + + if ch == '(': + level = level + 1 + continue + + if ch == ')': + if level: + level = level - 1 + # else the program is invalid, but we can't complain + continue + + if ch == '"' or ch == "'": + # consume the string + quote = ch + if str[i-1:i+2] == quote * 3: + quote = quote * 3 + w = len(quote) - 1 + i = i+w + while i < n: + ch = str[i] + i = i+1 + + if ch == 'x': + continue + + if str[i-1:i+w] == quote: + i = i+w + break + + if ch == '\n': + lno = lno + 1 + if w == 0: + # unterminated single-quoted string + if level == 0: + push_good(lno) + break + continue + + if ch == '\\': + assert i < n + if str[i] == '\n': + lno = lno + 1 + i = i+1 + continue + + # else comment char or paren inside string + + else: + # didn't break out of the loop, so we're still + # inside a string + continuation = C_STRING + continue # with outer loop + + if ch == '#': + # consume the comment + i = _find(str, '\n', i) + assert i >= 0 + continue + + assert ch == '\\' + assert i < n + if str[i] == '\n': + lno = lno + 1 + if i+1 == n: + continuation = C_BACKSLASH + i = i+1 + + # The last stmt may be continued for all 3 reasons. + # String continuation takes precedence over bracket + # continuation, which beats backslash continuation. + if continuation != C_STRING and level > 0: + continuation = C_BRACKET + self.continuation = continuation + + # Push the final line number as a sentinel value, regardless of + # whether it's continued. + assert (continuation == C_NONE) == (goodlines[-1] == lno) + if goodlines[-1] != lno: + push_good(lno) + + def get_continuation_type(self): + self._study1() + return self.continuation + + # study1 was sufficient to determine the continuation status, + # but doing more requires looking at every character. study2 + # does this for the last interesting statement in the block. + # Creates: + # self.stmt_start, stmt_end + # slice indices of last interesting stmt + # self.lastch + # last non-whitespace character before optional trailing + # comment + # self.lastopenbracketpos + # if continuation is C_BRACKET, index of last open bracket + + def _study2(self, _rfind=string.rfind, _find=string.find, + _ws=string.whitespace): + if self.study_level >= 2: + return + self._study1() + self.study_level = 2 + + # Set p and q to slice indices of last interesting stmt. + str, goodlines = self.str, self.goodlines + i = len(goodlines) - 1 + p = len(str) # index of newest line + while i: + assert p + # p is the index of the stmt at line number goodlines[i]. + # Move p back to the stmt at line number goodlines[i-1]. + q = p + for nothing in range(goodlines[i-1], goodlines[i]): + # tricky: sets p to 0 if no preceding newline + p = _rfind(str, '\n', 0, p-1) + 1 + # The stmt str[p:q] isn't a continuation, but may be blank + # or a non-indenting comment line. + if _junkre(str, p): + i = i-1 + else: + break + if i == 0: + # nothing but junk! + assert p == 0 + q = p + self.stmt_start, self.stmt_end = p, q + + # Analyze this stmt, to find the last open bracket (if any) + # and last interesting character (if any). + lastch = "" + stack = [] # stack of open bracket indices + push_stack = stack.append + while p < q: + # suck up all except ()[]{}'"#\\ + m = _chew_ordinaryre(str, p, q) + if m: + # we skipped at least one boring char + newp = m.end() + # back up over totally boring whitespace + i = newp - 1 # index of last boring char + while i >= p and str[i] in " \t\n": + i = i-1 + if i >= p: + lastch = str[i] + p = newp + if p >= q: + break + + ch = str[p] + + if ch in "([{": + push_stack(p) + lastch = ch + p = p+1 + continue + + if ch in ")]}": + if stack: + del stack[-1] + lastch = ch + p = p+1 + continue + + if ch == '"' or ch == "'": + # consume string + # Note that study1 did this with a Python loop, but + # we use a regexp here; the reason is speed in both + # cases; the string may be huge, but study1 pre-squashed + # strings to a couple of characters per line. study1 + # also needed to keep track of newlines, and we don't + # have to. + lastch = ch + p = _match_stringre(str, p, q).end() + continue + + if ch == '#': + # consume comment and trailing newline + p = _find(str, '\n', p, q) + 1 + assert p > 0 + continue + + assert ch == '\\' + p = p+1 # beyond backslash + assert p < q + if str[p] != '\n': + # the program is invalid, but can't complain + lastch = ch + str[p] + p = p+1 # beyond escaped char + + # end while p < q: + + self.lastch = lastch + if stack: + self.lastopenbracketpos = stack[-1] + + # Assuming continuation is C_BRACKET, return the number + # of spaces the next line should be indented. + + def compute_bracket_indent(self, _find=string.find): + self._study2() + assert self.continuation == C_BRACKET + j = self.lastopenbracketpos + str = self.str + n = len(str) + origi = i = string.rfind(str, '\n', 0, j) + 1 + j = j+1 # one beyond open bracket + # find first list item; set i to start of its line + while j < n: + m = _itemre(str, j) + if m: + j = m.end() - 1 # index of first interesting char + extra = 0 + break + else: + # this line is junk; advance to next line + i = j = _find(str, '\n', j) + 1 + else: + # nothing interesting follows the bracket; + # reproduce the bracket line's indentation + a level + j = i = origi + while str[j] in " \t": + j = j+1 + extra = self.indentwidth + return len(string.expandtabs(str[i:j], + self.tabwidth)) + extra + + # Return number of physical lines in last stmt (whether or not + # it's an interesting stmt! this is intended to be called when + # continuation is C_BACKSLASH). + + def get_num_lines_in_stmt(self): + self._study1() + goodlines = self.goodlines + return goodlines[-1] - goodlines[-2] + + # Assuming continuation is C_BACKSLASH, return the number of spaces + # the next line should be indented. Also assuming the new line is + # the first one following the initial line of the stmt. + + def compute_backslash_indent(self): + self._study2() + assert self.continuation == C_BACKSLASH + str = self.str + i = self.stmt_start + while str[i] in " \t": + i = i+1 + startpos = i + + # See whether the initial line starts an assignment stmt; i.e., + # look for an = operator + endpos = string.find(str, '\n', startpos) + 1 + found = level = 0 + while i < endpos: + ch = str[i] + if ch in "([{": + level = level + 1 + i = i+1 + elif ch in ")]}": + if level: + level = level - 1 + i = i+1 + elif ch == '"' or ch == "'": + i = _match_stringre(str, i, endpos).end() + elif ch == '#': + break + elif level == 0 and ch == '=' and \ + (i == 0 or str[i-1] not in "=<>!") and \ + str[i+1] != '=': + found = 1 + break + else: + i = i+1 + + if found: + # found a legit =, but it may be the last interesting + # thing on the line + i = i+1 # move beyond the = + found = re.match(r"\s*\\", str[i:endpos]) is None + + if not found: + # oh well ... settle for moving beyond the first chunk + # of non-whitespace chars + i = startpos + while str[i] not in " \t\n": + i = i+1 + + return len(string.expandtabs(str[self.stmt_start : + i], + self.tabwidth)) + 1 + + # Return the leading whitespace on the initial line of the last + # interesting stmt. + + def get_base_indent_string(self): + self._study2() + i, n = self.stmt_start, self.stmt_end + j = i + str = self.str + while j < n and str[j] in " \t": + j = j + 1 + return str[i:j] + + # Did the last interesting stmt open a block? + + def is_block_opener(self): + self._study2() + return self.lastch == ':' + + # Did the last interesting stmt close a block? + + def is_block_closer(self): + self._study2() + return _closere(self.str, self.stmt_start) is not None + + # index of last open bracket ({[, or None if none + lastopenbracketpos = None + + def get_last_open_bracket_pos(self): + self._study2() + return self.lastopenbracketpos diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/__init__.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/__init__.py new file mode 100644 index 000000000..c9c70df4a --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/idle/__init__.py @@ -0,0 +1 @@ +# This file denotes the directory as a Python package. \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/__init__.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/activex.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/activex.py new file mode 100644 index 000000000..651204eac --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/activex.py @@ -0,0 +1,69 @@ +"""Support for ActiveX control hosting in Pythonwin. +""" +import win32ui, win32uiole, window +import new + +class Control(window.Wnd): + """An ActiveX control base class. A new class must be derived from both + this class and the Events class. See the demos for more details. + """ + def __init__(self): + self.__dict__["_dispobj_"] = None + window.Wnd.__init__(self) + + def _GetControlCLSID( self ): + return self.CLSID + def _GetDispatchClass(self): + return self.default_interface + def _GetEventMap(self): + return self.default_source._dispid_to_func_ + + def CreateControl(self, windowTitle, style, rect, parent, id, lic_string=None): + clsid = str(self._GetControlCLSID()) + self.__dict__["_obj_"] = win32ui.CreateControl(clsid, windowTitle, style, rect, parent, id, None, False, lic_string) + klass = self._GetDispatchClass() + dispobj = klass(win32uiole.GetIDispatchForWindow(self._obj_)) + self.HookOleEvents() + self.__dict__["_dispobj_"] = dispobj + + def HookOleEvents(self): + dict = self._GetEventMap() + for dispid, methodName in dict.items(): + if hasattr(self, methodName): + self._obj_.HookOleEvent( getattr(self, methodName), dispid ) + + def __getattr__(self, attr): + # Delegate attributes to the windows and the Dispatch object for this class + try: + return window.Wnd.__getattr__(self, attr) + except AttributeError: + pass + return getattr(self._dispobj_, attr) + def __setattr__(self, attr, value): + if hasattr(self.__dict__, attr): + self.__dict__[attr] = value + return + try: + if self._dispobj_: + self._dispobj_.__setattr__(attr, value) + return + except AttributeError: + pass + self.__dict__[attr] = value + +def MakeControlClass( controlClass, name = None ): + """Given a CoClass in a generated .py file, this function will return a Class + object which can be used as an OCX control. + + This function is used when you do not want to handle any events from the OCX + control. If you need events, then you should derive a class from both the + activex.Control class and the CoClass + """ + if name is None: + name = controlClass.__name__ + return new.classobj("OCX" + name, (Control, controlClass), {}) + +def MakeControlInstance( controlClass, name = None ): + """As for MakeControlClass(), but returns an instance of the class. + """ + return MakeControlClass(controlClass, name)() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/afxres.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/afxres.py new file mode 100644 index 000000000..b6560a84e --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/afxres.py @@ -0,0 +1,497 @@ +# Generated by h2py from stdin +TCS_MULTILINE = 0x0200 +CBRS_ALIGN_LEFT = 0x1000 +CBRS_ALIGN_TOP = 0x2000 +CBRS_ALIGN_RIGHT = 0x4000 +CBRS_ALIGN_BOTTOM = 0x8000 +CBRS_ALIGN_ANY = 0xF000 +CBRS_BORDER_LEFT = 0x0100 +CBRS_BORDER_TOP = 0x0200 +CBRS_BORDER_RIGHT = 0x0400 +CBRS_BORDER_BOTTOM = 0x0800 +CBRS_BORDER_ANY = 0x0F00 +CBRS_TOOLTIPS = 0x0010 +CBRS_FLYBY = 0x0020 +CBRS_FLOAT_MULTI = 0x0040 +CBRS_BORDER_3D = 0x0080 +CBRS_HIDE_INPLACE = 0x0008 +CBRS_SIZE_DYNAMIC = 0x0004 +CBRS_SIZE_FIXED = 0x0002 +CBRS_FLOATING = 0x0001 +CBRS_GRIPPER = 0x00400000 +CBRS_ORIENT_HORZ = (CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM) +CBRS_ORIENT_VERT = (CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT) +CBRS_ORIENT_ANY = (CBRS_ORIENT_HORZ|CBRS_ORIENT_VERT) +CBRS_ALL = 0xFFFF +CBRS_NOALIGN = 0x00000000 +CBRS_LEFT = (CBRS_ALIGN_LEFT|CBRS_BORDER_RIGHT) +CBRS_TOP = (CBRS_ALIGN_TOP|CBRS_BORDER_BOTTOM) +CBRS_RIGHT = (CBRS_ALIGN_RIGHT|CBRS_BORDER_LEFT) +CBRS_BOTTOM = (CBRS_ALIGN_BOTTOM|CBRS_BORDER_TOP) +SBPS_NORMAL = 0x0000 +SBPS_NOBORDERS = 0x0100 +SBPS_POPOUT = 0x0200 +SBPS_OWNERDRAW = 0x1000 +SBPS_DISABLED = 0x04000000 +SBPS_STRETCH = 0x08000000 +ID_INDICATOR_EXT = 0xE700 +ID_INDICATOR_CAPS = 0xE701 +ID_INDICATOR_NUM = 0xE702 +ID_INDICATOR_SCRL = 0xE703 +ID_INDICATOR_OVR = 0xE704 +ID_INDICATOR_REC = 0xE705 +ID_INDICATOR_KANA = 0xE706 +ID_SEPARATOR = 0 +AFX_IDW_CONTROLBAR_FIRST = 0xE800 +AFX_IDW_CONTROLBAR_LAST = 0xE8FF +AFX_IDW_TOOLBAR = 0xE800 +AFX_IDW_STATUS_BAR = 0xE801 +AFX_IDW_PREVIEW_BAR = 0xE802 +AFX_IDW_RESIZE_BAR = 0xE803 +AFX_IDW_DOCKBAR_TOP = 0xE81B +AFX_IDW_DOCKBAR_LEFT = 0xE81C +AFX_IDW_DOCKBAR_RIGHT = 0xE81D +AFX_IDW_DOCKBAR_BOTTOM = 0xE81E +AFX_IDW_DOCKBAR_FLOAT = 0xE81F +def AFX_CONTROLBAR_MASK(nIDC): return (1L << (nIDC - AFX_IDW_CONTROLBAR_FIRST)) + +AFX_IDW_PANE_FIRST = 0xE900 +AFX_IDW_PANE_LAST = 0xE9ff +AFX_IDW_HSCROLL_FIRST = 0xEA00 +AFX_IDW_VSCROLL_FIRST = 0xEA10 +AFX_IDW_SIZE_BOX = 0xEA20 +AFX_IDW_PANE_SAVE = 0xEA21 +AFX_IDS_APP_TITLE = 0xE000 +AFX_IDS_IDLEMESSAGE = 0xE001 +AFX_IDS_HELPMODEMESSAGE = 0xE002 +AFX_IDS_APP_TITLE_EMBEDDING = 0xE003 +AFX_IDS_COMPANY_NAME = 0xE004 +AFX_IDS_OBJ_TITLE_INPLACE = 0xE005 +ID_FILE_NEW = 0xE100 +ID_FILE_OPEN = 0xE101 +ID_FILE_CLOSE = 0xE102 +ID_FILE_SAVE = 0xE103 +ID_FILE_SAVE_AS = 0xE104 +ID_FILE_PAGE_SETUP = 0xE105 +ID_FILE_PRINT_SETUP = 0xE106 +ID_FILE_PRINT = 0xE107 +ID_FILE_PRINT_DIRECT = 0xE108 +ID_FILE_PRINT_PREVIEW = 0xE109 +ID_FILE_UPDATE = 0xE10A +ID_FILE_SAVE_COPY_AS = 0xE10B +ID_FILE_SEND_MAIL = 0xE10C +ID_FILE_MRU_FIRST = 0xE110 +ID_FILE_MRU_FILE1 = 0xE110 +ID_FILE_MRU_FILE2 = 0xE111 +ID_FILE_MRU_FILE3 = 0xE112 +ID_FILE_MRU_FILE4 = 0xE113 +ID_FILE_MRU_FILE5 = 0xE114 +ID_FILE_MRU_FILE6 = 0xE115 +ID_FILE_MRU_FILE7 = 0xE116 +ID_FILE_MRU_FILE8 = 0xE117 +ID_FILE_MRU_FILE9 = 0xE118 +ID_FILE_MRU_FILE10 = 0xE119 +ID_FILE_MRU_FILE11 = 0xE11A +ID_FILE_MRU_FILE12 = 0xE11B +ID_FILE_MRU_FILE13 = 0xE11C +ID_FILE_MRU_FILE14 = 0xE11D +ID_FILE_MRU_FILE15 = 0xE11E +ID_FILE_MRU_FILE16 = 0xE11F +ID_FILE_MRU_LAST = 0xE11F +ID_EDIT_CLEAR = 0xE120 +ID_EDIT_CLEAR_ALL = 0xE121 +ID_EDIT_COPY = 0xE122 +ID_EDIT_CUT = 0xE123 +ID_EDIT_FIND = 0xE124 +ID_EDIT_PASTE = 0xE125 +ID_EDIT_PASTE_LINK = 0xE126 +ID_EDIT_PASTE_SPECIAL = 0xE127 +ID_EDIT_REPEAT = 0xE128 +ID_EDIT_REPLACE = 0xE129 +ID_EDIT_SELECT_ALL = 0xE12A +ID_EDIT_UNDO = 0xE12B +ID_EDIT_REDO = 0xE12C +ID_WINDOW_NEW = 0xE130 +ID_WINDOW_ARRANGE = 0xE131 +ID_WINDOW_CASCADE = 0xE132 +ID_WINDOW_TILE_HORZ = 0xE133 +ID_WINDOW_TILE_VERT = 0xE134 +ID_WINDOW_SPLIT = 0xE135 +AFX_IDM_WINDOW_FIRST = 0xE130 +AFX_IDM_WINDOW_LAST = 0xE13F +AFX_IDM_FIRST_MDICHILD = 0xFF00 +ID_APP_ABOUT = 0xE140 +ID_APP_EXIT = 0xE141 +ID_HELP_INDEX = 0xE142 +ID_HELP_FINDER = 0xE143 +ID_HELP_USING = 0xE144 +ID_CONTEXT_HELP = 0xE145 +ID_HELP = 0xE146 +ID_DEFAULT_HELP = 0xE147 +ID_NEXT_PANE = 0xE150 +ID_PREV_PANE = 0xE151 +ID_FORMAT_FONT = 0xE160 +ID_OLE_INSERT_NEW = 0xE200 +ID_OLE_EDIT_LINKS = 0xE201 +ID_OLE_EDIT_CONVERT = 0xE202 +ID_OLE_EDIT_CHANGE_ICON = 0xE203 +ID_OLE_EDIT_PROPERTIES = 0xE204 +ID_OLE_VERB_FIRST = 0xE210 +ID_OLE_VERB_LAST = 0xE21F +AFX_ID_PREVIEW_CLOSE = 0xE300 +AFX_ID_PREVIEW_NUMPAGE = 0xE301 +AFX_ID_PREVIEW_NEXT = 0xE302 +AFX_ID_PREVIEW_PREV = 0xE303 +AFX_ID_PREVIEW_PRINT = 0xE304 +AFX_ID_PREVIEW_ZOOMIN = 0xE305 +AFX_ID_PREVIEW_ZOOMOUT = 0xE306 +ID_VIEW_TOOLBAR = 0xE800 +ID_VIEW_STATUS_BAR = 0xE801 +ID_RECORD_FIRST = 0xE900 +ID_RECORD_LAST = 0xE901 +ID_RECORD_NEXT = 0xE902 +ID_RECORD_PREV = 0xE903 +IDC_STATIC = (-1) +AFX_IDS_SCFIRST = 0xEF00 +AFX_IDS_SCSIZE = 0xEF00 +AFX_IDS_SCMOVE = 0xEF01 +AFX_IDS_SCMINIMIZE = 0xEF02 +AFX_IDS_SCMAXIMIZE = 0xEF03 +AFX_IDS_SCNEXTWINDOW = 0xEF04 +AFX_IDS_SCPREVWINDOW = 0xEF05 +AFX_IDS_SCCLOSE = 0xEF06 +AFX_IDS_SCRESTORE = 0xEF12 +AFX_IDS_SCTASKLIST = 0xEF13 +AFX_IDS_MDICHILD = 0xEF1F +AFX_IDS_DESKACCESSORY = 0xEFDA +AFX_IDS_OPENFILE = 0xF000 +AFX_IDS_SAVEFILE = 0xF001 +AFX_IDS_ALLFILTER = 0xF002 +AFX_IDS_UNTITLED = 0xF003 +AFX_IDS_SAVEFILECOPY = 0xF004 +AFX_IDS_PREVIEW_CLOSE = 0xF005 +AFX_IDS_UNNAMED_FILE = 0xF006 +AFX_IDS_ABOUT = 0xF010 +AFX_IDS_HIDE = 0xF011 +AFX_IDP_NO_ERROR_AVAILABLE = 0xF020 +AFX_IDS_NOT_SUPPORTED_EXCEPTION = 0xF021 +AFX_IDS_RESOURCE_EXCEPTION = 0xF022 +AFX_IDS_MEMORY_EXCEPTION = 0xF023 +AFX_IDS_USER_EXCEPTION = 0xF024 +AFX_IDS_PRINTONPORT = 0xF040 +AFX_IDS_ONEPAGE = 0xF041 +AFX_IDS_TWOPAGE = 0xF042 +AFX_IDS_PRINTPAGENUM = 0xF043 +AFX_IDS_PREVIEWPAGEDESC = 0xF044 +AFX_IDS_PRINTDEFAULTEXT = 0xF045 +AFX_IDS_PRINTDEFAULT = 0xF046 +AFX_IDS_PRINTFILTER = 0xF047 +AFX_IDS_PRINTCAPTION = 0xF048 +AFX_IDS_PRINTTOFILE = 0xF049 +AFX_IDS_OBJECT_MENUITEM = 0xF080 +AFX_IDS_EDIT_VERB = 0xF081 +AFX_IDS_ACTIVATE_VERB = 0xF082 +AFX_IDS_CHANGE_LINK = 0xF083 +AFX_IDS_AUTO = 0xF084 +AFX_IDS_MANUAL = 0xF085 +AFX_IDS_FROZEN = 0xF086 +AFX_IDS_ALL_FILES = 0xF087 +AFX_IDS_SAVE_MENU = 0xF088 +AFX_IDS_UPDATE_MENU = 0xF089 +AFX_IDS_SAVE_AS_MENU = 0xF08A +AFX_IDS_SAVE_COPY_AS_MENU = 0xF08B +AFX_IDS_EXIT_MENU = 0xF08C +AFX_IDS_UPDATING_ITEMS = 0xF08D +AFX_IDS_METAFILE_FORMAT = 0xF08E +AFX_IDS_DIB_FORMAT = 0xF08F +AFX_IDS_BITMAP_FORMAT = 0xF090 +AFX_IDS_LINKSOURCE_FORMAT = 0xF091 +AFX_IDS_EMBED_FORMAT = 0xF092 +AFX_IDS_PASTELINKEDTYPE = 0xF094 +AFX_IDS_UNKNOWNTYPE = 0xF095 +AFX_IDS_RTF_FORMAT = 0xF096 +AFX_IDS_TEXT_FORMAT = 0xF097 +AFX_IDS_INVALID_CURRENCY = 0xF098 +AFX_IDS_INVALID_DATETIME = 0xF099 +AFX_IDS_INVALID_DATETIMESPAN = 0xF09A +AFX_IDP_INVALID_FILENAME = 0xF100 +AFX_IDP_FAILED_TO_OPEN_DOC = 0xF101 +AFX_IDP_FAILED_TO_SAVE_DOC = 0xF102 +AFX_IDP_ASK_TO_SAVE = 0xF103 +AFX_IDP_FAILED_TO_CREATE_DOC = 0xF104 +AFX_IDP_FILE_TOO_LARGE = 0xF105 +AFX_IDP_FAILED_TO_START_PRINT = 0xF106 +AFX_IDP_FAILED_TO_LAUNCH_HELP = 0xF107 +AFX_IDP_INTERNAL_FAILURE = 0xF108 +AFX_IDP_COMMAND_FAILURE = 0xF109 +AFX_IDP_FAILED_MEMORY_ALLOC = 0xF10A +AFX_IDP_PARSE_INT = 0xF110 +AFX_IDP_PARSE_REAL = 0xF111 +AFX_IDP_PARSE_INT_RANGE = 0xF112 +AFX_IDP_PARSE_REAL_RANGE = 0xF113 +AFX_IDP_PARSE_STRING_SIZE = 0xF114 +AFX_IDP_PARSE_RADIO_BUTTON = 0xF115 +AFX_IDP_PARSE_BYTE = 0xF116 +AFX_IDP_PARSE_UINT = 0xF117 +AFX_IDP_PARSE_DATETIME = 0xF118 +AFX_IDP_PARSE_CURRENCY = 0xF119 +AFX_IDP_FAILED_INVALID_FORMAT = 0xF120 +AFX_IDP_FAILED_INVALID_PATH = 0xF121 +AFX_IDP_FAILED_DISK_FULL = 0xF122 +AFX_IDP_FAILED_ACCESS_READ = 0xF123 +AFX_IDP_FAILED_ACCESS_WRITE = 0xF124 +AFX_IDP_FAILED_IO_ERROR_READ = 0xF125 +AFX_IDP_FAILED_IO_ERROR_WRITE = 0xF126 +AFX_IDP_STATIC_OBJECT = 0xF180 +AFX_IDP_FAILED_TO_CONNECT = 0xF181 +AFX_IDP_SERVER_BUSY = 0xF182 +AFX_IDP_BAD_VERB = 0xF183 +AFX_IDP_FAILED_TO_NOTIFY = 0xF185 +AFX_IDP_FAILED_TO_LAUNCH = 0xF186 +AFX_IDP_ASK_TO_UPDATE = 0xF187 +AFX_IDP_FAILED_TO_UPDATE = 0xF188 +AFX_IDP_FAILED_TO_REGISTER = 0xF189 +AFX_IDP_FAILED_TO_AUTO_REGISTER = 0xF18A +AFX_IDP_FAILED_TO_CONVERT = 0xF18B +AFX_IDP_GET_NOT_SUPPORTED = 0xF18C +AFX_IDP_SET_NOT_SUPPORTED = 0xF18D +AFX_IDP_ASK_TO_DISCARD = 0xF18E +AFX_IDP_FAILED_TO_CREATE = 0xF18F +AFX_IDP_FAILED_MAPI_LOAD = 0xF190 +AFX_IDP_INVALID_MAPI_DLL = 0xF191 +AFX_IDP_FAILED_MAPI_SEND = 0xF192 +AFX_IDP_FILE_NONE = 0xF1A0 +AFX_IDP_FILE_GENERIC = 0xF1A1 +AFX_IDP_FILE_NOT_FOUND = 0xF1A2 +AFX_IDP_FILE_BAD_PATH = 0xF1A3 +AFX_IDP_FILE_TOO_MANY_OPEN = 0xF1A4 +AFX_IDP_FILE_ACCESS_DENIED = 0xF1A5 +AFX_IDP_FILE_INVALID_FILE = 0xF1A6 +AFX_IDP_FILE_REMOVE_CURRENT = 0xF1A7 +AFX_IDP_FILE_DIR_FULL = 0xF1A8 +AFX_IDP_FILE_BAD_SEEK = 0xF1A9 +AFX_IDP_FILE_HARD_IO = 0xF1AA +AFX_IDP_FILE_SHARING = 0xF1AB +AFX_IDP_FILE_LOCKING = 0xF1AC +AFX_IDP_FILE_DISKFULL = 0xF1AD +AFX_IDP_FILE_EOF = 0xF1AE +AFX_IDP_ARCH_NONE = 0xF1B0 +AFX_IDP_ARCH_GENERIC = 0xF1B1 +AFX_IDP_ARCH_READONLY = 0xF1B2 +AFX_IDP_ARCH_ENDOFFILE = 0xF1B3 +AFX_IDP_ARCH_WRITEONLY = 0xF1B4 +AFX_IDP_ARCH_BADINDEX = 0xF1B5 +AFX_IDP_ARCH_BADCLASS = 0xF1B6 +AFX_IDP_ARCH_BADSCHEMA = 0xF1B7 +AFX_IDS_OCC_SCALEUNITS_PIXELS = 0xF1C0 +AFX_IDS_STATUS_FONT = 0xF230 +AFX_IDS_TOOLTIP_FONT = 0xF231 +AFX_IDS_UNICODE_FONT = 0xF232 +AFX_IDS_MINI_FONT = 0xF233 +AFX_IDP_SQL_FIRST = 0xF280 +AFX_IDP_SQL_CONNECT_FAIL = 0xF281 +AFX_IDP_SQL_RECORDSET_FORWARD_ONLY = 0xF282 +AFX_IDP_SQL_EMPTY_COLUMN_LIST = 0xF283 +AFX_IDP_SQL_FIELD_SCHEMA_MISMATCH = 0xF284 +AFX_IDP_SQL_ILLEGAL_MODE = 0xF285 +AFX_IDP_SQL_MULTIPLE_ROWS_AFFECTED = 0xF286 +AFX_IDP_SQL_NO_CURRENT_RECORD = 0xF287 +AFX_IDP_SQL_NO_ROWS_AFFECTED = 0xF288 +AFX_IDP_SQL_RECORDSET_READONLY = 0xF289 +AFX_IDP_SQL_SQL_NO_TOTAL = 0xF28A +AFX_IDP_SQL_ODBC_LOAD_FAILED = 0xF28B +AFX_IDP_SQL_DYNASET_NOT_SUPPORTED = 0xF28C +AFX_IDP_SQL_SNAPSHOT_NOT_SUPPORTED = 0xF28D +AFX_IDP_SQL_API_CONFORMANCE = 0xF28E +AFX_IDP_SQL_SQL_CONFORMANCE = 0xF28F +AFX_IDP_SQL_NO_DATA_FOUND = 0xF290 +AFX_IDP_SQL_ROW_UPDATE_NOT_SUPPORTED = 0xF291 +AFX_IDP_SQL_ODBC_V2_REQUIRED = 0xF292 +AFX_IDP_SQL_NO_POSITIONED_UPDATES = 0xF293 +AFX_IDP_SQL_LOCK_MODE_NOT_SUPPORTED = 0xF294 +AFX_IDP_SQL_DATA_TRUNCATED = 0xF295 +AFX_IDP_SQL_ROW_FETCH = 0xF296 +AFX_IDP_SQL_INCORRECT_ODBC = 0xF297 +AFX_IDP_SQL_UPDATE_DELETE_FAILED = 0xF298 +AFX_IDP_SQL_DYNAMIC_CURSOR_NOT_SUPPORTED = 0xF299 +AFX_IDP_DAO_FIRST = 0xF2A0 +AFX_IDP_DAO_ENGINE_INITIALIZATION = 0xF2A0 +AFX_IDP_DAO_DFX_BIND = 0xF2A1 +AFX_IDP_DAO_OBJECT_NOT_OPEN = 0xF2A2 +AFX_IDP_DAO_ROWTOOSHORT = 0xF2A3 +AFX_IDP_DAO_BADBINDINFO = 0xF2A4 +AFX_IDP_DAO_COLUMNUNAVAILABLE = 0xF2A5 +AFX_IDC_LISTBOX = 100 +AFX_IDC_CHANGE = 101 +AFX_IDC_PRINT_DOCNAME = 201 +AFX_IDC_PRINT_PRINTERNAME = 202 +AFX_IDC_PRINT_PORTNAME = 203 +AFX_IDC_PRINT_PAGENUM = 204 +ID_APPLY_NOW = 0x3021 +ID_WIZBACK = 0x3023 +ID_WIZNEXT = 0x3024 +ID_WIZFINISH = 0x3025 +AFX_IDC_TAB_CONTROL = 0x3020 +AFX_IDD_FILEOPEN = 28676 +AFX_IDD_FILESAVE = 28677 +AFX_IDD_FONT = 28678 +AFX_IDD_COLOR = 28679 +AFX_IDD_PRINT = 28680 +AFX_IDD_PRINTSETUP = 28681 +AFX_IDD_FIND = 28682 +AFX_IDD_REPLACE = 28683 +AFX_IDD_NEWTYPEDLG = 30721 +AFX_IDD_PRINTDLG = 30722 +AFX_IDD_PREVIEW_TOOLBAR = 30723 +AFX_IDD_PREVIEW_SHORTTOOLBAR = 30731 +AFX_IDD_INSERTOBJECT = 30724 +AFX_IDD_CHANGEICON = 30725 +AFX_IDD_CONVERT = 30726 +AFX_IDD_PASTESPECIAL = 30727 +AFX_IDD_EDITLINKS = 30728 +AFX_IDD_FILEBROWSE = 30729 +AFX_IDD_BUSY = 30730 +AFX_IDD_OBJECTPROPERTIES = 30732 +AFX_IDD_CHANGESOURCE = 30733 +AFX_IDC_CONTEXTHELP = 30977 +AFX_IDC_MAGNIFY = 30978 +AFX_IDC_SMALLARROWS = 30979 +AFX_IDC_HSPLITBAR = 30980 +AFX_IDC_VSPLITBAR = 30981 +AFX_IDC_NODROPCRSR = 30982 +AFX_IDC_TRACKNWSE = 30983 +AFX_IDC_TRACKNESW = 30984 +AFX_IDC_TRACKNS = 30985 +AFX_IDC_TRACKWE = 30986 +AFX_IDC_TRACK4WAY = 30987 +AFX_IDC_MOVE4WAY = 30988 +AFX_IDB_MINIFRAME_MENU = 30994 +AFX_IDB_CHECKLISTBOX_NT = 30995 +AFX_IDB_CHECKLISTBOX_95 = 30996 +AFX_IDR_PREVIEW_ACCEL = 30997 +AFX_IDI_STD_MDIFRAME = 31233 +AFX_IDI_STD_FRAME = 31234 +AFX_IDC_FONTPROP = 1000 +AFX_IDC_FONTNAMES = 1001 +AFX_IDC_FONTSTYLES = 1002 +AFX_IDC_FONTSIZES = 1003 +AFX_IDC_STRIKEOUT = 1004 +AFX_IDC_UNDERLINE = 1005 +AFX_IDC_SAMPLEBOX = 1006 +AFX_IDC_COLOR_BLACK = 1100 +AFX_IDC_COLOR_WHITE = 1101 +AFX_IDC_COLOR_RED = 1102 +AFX_IDC_COLOR_GREEN = 1103 +AFX_IDC_COLOR_BLUE = 1104 +AFX_IDC_COLOR_YELLOW = 1105 +AFX_IDC_COLOR_MAGENTA = 1106 +AFX_IDC_COLOR_CYAN = 1107 +AFX_IDC_COLOR_GRAY = 1108 +AFX_IDC_COLOR_LIGHTGRAY = 1109 +AFX_IDC_COLOR_DARKRED = 1110 +AFX_IDC_COLOR_DARKGREEN = 1111 +AFX_IDC_COLOR_DARKBLUE = 1112 +AFX_IDC_COLOR_LIGHTBROWN = 1113 +AFX_IDC_COLOR_DARKMAGENTA = 1114 +AFX_IDC_COLOR_DARKCYAN = 1115 +AFX_IDC_COLORPROP = 1116 +AFX_IDC_SYSTEMCOLORS = 1117 +AFX_IDC_PROPNAME = 1201 +AFX_IDC_PICTURE = 1202 +AFX_IDC_BROWSE = 1203 +AFX_IDC_CLEAR = 1204 +AFX_IDD_PROPPAGE_COLOR = 32257 +AFX_IDD_PROPPAGE_FONT = 32258 +AFX_IDD_PROPPAGE_PICTURE = 32259 +AFX_IDB_TRUETYPE = 32384 +AFX_IDS_PROPPAGE_UNKNOWN = 0xFE01 +AFX_IDS_COLOR_DESKTOP = 0xFE04 +AFX_IDS_COLOR_APPWORKSPACE = 0xFE05 +AFX_IDS_COLOR_WNDBACKGND = 0xFE06 +AFX_IDS_COLOR_WNDTEXT = 0xFE07 +AFX_IDS_COLOR_MENUBAR = 0xFE08 +AFX_IDS_COLOR_MENUTEXT = 0xFE09 +AFX_IDS_COLOR_ACTIVEBAR = 0xFE0A +AFX_IDS_COLOR_INACTIVEBAR = 0xFE0B +AFX_IDS_COLOR_ACTIVETEXT = 0xFE0C +AFX_IDS_COLOR_INACTIVETEXT = 0xFE0D +AFX_IDS_COLOR_ACTIVEBORDER = 0xFE0E +AFX_IDS_COLOR_INACTIVEBORDER = 0xFE0F +AFX_IDS_COLOR_WNDFRAME = 0xFE10 +AFX_IDS_COLOR_SCROLLBARS = 0xFE11 +AFX_IDS_COLOR_BTNFACE = 0xFE12 +AFX_IDS_COLOR_BTNSHADOW = 0xFE13 +AFX_IDS_COLOR_BTNTEXT = 0xFE14 +AFX_IDS_COLOR_BTNHIGHLIGHT = 0xFE15 +AFX_IDS_COLOR_DISABLEDTEXT = 0xFE16 +AFX_IDS_COLOR_HIGHLIGHT = 0xFE17 +AFX_IDS_COLOR_HIGHLIGHTTEXT = 0xFE18 +AFX_IDS_REGULAR = 0xFE19 +AFX_IDS_BOLD = 0xFE1A +AFX_IDS_ITALIC = 0xFE1B +AFX_IDS_BOLDITALIC = 0xFE1C +AFX_IDS_SAMPLETEXT = 0xFE1D +AFX_IDS_DISPLAYSTRING_FONT = 0xFE1E +AFX_IDS_DISPLAYSTRING_COLOR = 0xFE1F +AFX_IDS_DISPLAYSTRING_PICTURE = 0xFE20 +AFX_IDS_PICTUREFILTER = 0xFE21 +AFX_IDS_PICTYPE_UNKNOWN = 0xFE22 +AFX_IDS_PICTYPE_NONE = 0xFE23 +AFX_IDS_PICTYPE_BITMAP = 0xFE24 +AFX_IDS_PICTYPE_METAFILE = 0xFE25 +AFX_IDS_PICTYPE_ICON = 0xFE26 +AFX_IDS_COLOR_PPG = 0xFE28 +AFX_IDS_COLOR_PPG_CAPTION = 0xFE29 +AFX_IDS_FONT_PPG = 0xFE2A +AFX_IDS_FONT_PPG_CAPTION = 0xFE2B +AFX_IDS_PICTURE_PPG = 0xFE2C +AFX_IDS_PICTURE_PPG_CAPTION = 0xFE2D +AFX_IDS_PICTUREBROWSETITLE = 0xFE30 +AFX_IDS_BORDERSTYLE_0 = 0xFE31 +AFX_IDS_BORDERSTYLE_1 = 0xFE32 +AFX_IDS_VERB_EDIT = 0xFE40 +AFX_IDS_VERB_PROPERTIES = 0xFE41 +AFX_IDP_PICTURECANTOPEN = 0xFE83 +AFX_IDP_PICTURECANTLOAD = 0xFE84 +AFX_IDP_PICTURETOOLARGE = 0xFE85 +AFX_IDP_PICTUREREADFAILED = 0xFE86 +AFX_IDP_E_ILLEGALFUNCTIONCALL = 0xFEA0 +AFX_IDP_E_OVERFLOW = 0xFEA1 +AFX_IDP_E_OUTOFMEMORY = 0xFEA2 +AFX_IDP_E_DIVISIONBYZERO = 0xFEA3 +AFX_IDP_E_OUTOFSTRINGSPACE = 0xFEA4 +AFX_IDP_E_OUTOFSTACKSPACE = 0xFEA5 +AFX_IDP_E_BADFILENAMEORNUMBER = 0xFEA6 +AFX_IDP_E_FILENOTFOUND = 0xFEA7 +AFX_IDP_E_BADFILEMODE = 0xFEA8 +AFX_IDP_E_FILEALREADYOPEN = 0xFEA9 +AFX_IDP_E_DEVICEIOERROR = 0xFEAA +AFX_IDP_E_FILEALREADYEXISTS = 0xFEAB +AFX_IDP_E_BADRECORDLENGTH = 0xFEAC +AFX_IDP_E_DISKFULL = 0xFEAD +AFX_IDP_E_BADRECORDNUMBER = 0xFEAE +AFX_IDP_E_BADFILENAME = 0xFEAF +AFX_IDP_E_TOOMANYFILES = 0xFEB0 +AFX_IDP_E_DEVICEUNAVAILABLE = 0xFEB1 +AFX_IDP_E_PERMISSIONDENIED = 0xFEB2 +AFX_IDP_E_DISKNOTREADY = 0xFEB3 +AFX_IDP_E_PATHFILEACCESSERROR = 0xFEB4 +AFX_IDP_E_PATHNOTFOUND = 0xFEB5 +AFX_IDP_E_INVALIDPATTERNSTRING = 0xFEB6 +AFX_IDP_E_INVALIDUSEOFNULL = 0xFEB7 +AFX_IDP_E_INVALIDFILEFORMAT = 0xFEB8 +AFX_IDP_E_INVALIDPROPERTYVALUE = 0xFEB9 +AFX_IDP_E_INVALIDPROPERTYARRAYINDEX = 0xFEBA +AFX_IDP_E_SETNOTSUPPORTEDATRUNTIME = 0xFEBB +AFX_IDP_E_SETNOTSUPPORTED = 0xFEBC +AFX_IDP_E_NEEDPROPERTYARRAYINDEX = 0xFEBD +AFX_IDP_E_SETNOTPERMITTED = 0xFEBE +AFX_IDP_E_GETNOTSUPPORTEDATRUNTIME = 0xFEBF +AFX_IDP_E_GETNOTSUPPORTED = 0xFEC0 +AFX_IDP_E_PROPERTYNOTFOUND = 0xFEC1 +AFX_IDP_E_INVALIDCLIPBOARDFORMAT = 0xFEC2 +AFX_IDP_E_INVALIDPICTURE = 0xFEC3 +AFX_IDP_E_PRINTERERROR = 0xFEC4 +AFX_IDP_E_CANTSAVEFILETOTEMP = 0xFEC5 +AFX_IDP_E_SEARCHTEXTNOTFOUND = 0xFEC6 +AFX_IDP_E_REPLACEMENTSTOOLONG = 0xFEC7 diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/dialog.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/dialog.py new file mode 100644 index 000000000..993655d1a --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/dialog.py @@ -0,0 +1,237 @@ +""" \ +Base class for Dialogs. Also contains a few useful utility functions +""" +# dialog.py +# Python class for Dialog Boxes in PythonWin. + +import win32ui +import win32con +import window + +def dllFromDll(dllid): + " given a 'dll' (maybe a dll, filename, etc), return a DLL object " + if dllid==None: + return None + elif type('')==type(dllid): + return win32ui.LoadLibrary(dllid) + else: + try: + dllid.GetFileName() + except AttributeError: + raise TypeError, "DLL parameter must be None, a filename or a dll object" + return dllid + +class Dialog(window.Wnd): + " Base class for a dialog" + def __init__( self, id, dllid=None ): + """ id is the resource ID, or a template + dllid may be None, a dll object, or a string with a dll name """ + # must take a reference to the DLL until InitDialog. + self.dll=dllFromDll(dllid) + if type(id)==type([]): # a template + dlg=win32ui.CreateDialogIndirect(id) + else: + dlg=win32ui.CreateDialog(id, self.dll) + window.Wnd.__init__(self, dlg) + self.HookCommands() + self.bHaveInit = None + + def HookCommands(self): + pass + + def OnAttachedObjectDeath(self): + self.data = self._obj_.data + window.Wnd.OnAttachedObjectDeath(self) + + # provide virtuals. + def OnOK(self): + self._obj_.OnOK() + def OnCancel(self): + self._obj_.OnCancel() + def OnInitDialog(self): + self.bHaveInit = 1 + if self._obj_.data: + self._obj_.UpdateData(0) + return 1 # I did NOT set focus to a child window. + def OnDestroy(self,msg): + self.dll = None # theoretically not needed if object destructs normally. + # DDX support + def AddDDX( self, *args ): + self._obj_.datalist.append(args) + # Make a dialog object look like a dictionary for the DDX support + def __nonzero__(self): + return 1 + def __len__(self): return len(self.data) + def __getitem__(self, key): return self.data[key] + def __setitem__(self, key, item): self._obj_.data[key] = item# self.UpdateData(0) + def keys(self): return self.data.keys() + def items(self): return self.data.items() + def values(self): return self.data.values() + def has_key(self, key): return self.data.has_key(key) + +class PrintDialog(Dialog): + " Base class for a print dialog" + def __init__(self, pInfo, dlgID, + printSetupOnly = 0, + flags=(win32ui.PD_ALLPAGES| + win32ui.PD_USEDEVMODECOPIES| + win32ui.PD_NOPAGENUMS| + win32ui.PD_HIDEPRINTTOFILE| + win32ui.PD_NOSELECTION), + parent=None, + dllid=None): + self.dll=dllFromDll(dllid) + if type(dlgID)==type([]): # a template + raise TypeError, "dlgID parameter must be an integer resource ID" + dlg=win32ui.CreatePrintDialog(dlgID, printSetupOnly, + flags, parent, + self.dll) + window.Wnd.__init__(self, dlg) + self.HookCommands() + self.bHaveInit = None + self.pInfo = pInfo + # init values (if PrintSetup is called, values still available) + flags = pInfo.GetFlags() + self['toFile'] = (flags&win32ui.PD_PRINTTOFILE != 0) + self['direct'] = pInfo.GetDirect() + self['preview'] = pInfo.GetPreview() + self['continuePrinting'] = pInfo.GetContinuePrinting() + self['curPage'] = pInfo.GetCurPage() + self['numPreviewPages'] = pInfo.GetNumPreviewPages() + self['userData'] = pInfo.GetUserData() + self['draw'] = pInfo.GetDraw() + self['pageDesc'] = pInfo.GetPageDesc() + self['minPage'] = pInfo.GetMinPage() + self['maxPage'] = pInfo.GetMaxPage() + self['offsetPage'] = pInfo.GetOffsetPage() + self['fromPage'] = pInfo.GetFromPage() + self['toPage'] = pInfo.GetToPage() + # these values updated after OnOK + self['copies'] = 0 + self['deviceName'] = '' + self['driverName'] = '' + self['printAll'] = 0 + self['printCollate'] = 0 + self['printRange'] = 0 + self['printSelection'] = 0 + + def OnInitDialog(self): + self.pInfo.CreatePrinterDC() # This also sets the hDC of the pInfo structure. + return self._obj_.OnInitDialog() + + def OnCancel(self): + del self.pInfo + def OnOK(self): + '''DoModal has finished. Can now access the users choices''' + self._obj_.OnOK() + pInfo = self.pInfo + # user values + flags = pInfo.GetFlags() + self['toFile'] = (flags&win32ui.PD_PRINTTOFILE != 0) + self['direct'] = pInfo.GetDirect() + self['preview'] = pInfo.GetPreview() + self['continuePrinting'] = pInfo.GetContinuePrinting() + self['curPage'] = pInfo.GetCurPage() + self['numPreviewPages'] = pInfo.GetNumPreviewPages() + self['userData'] = pInfo.GetUserData() + self['draw'] = pInfo.GetDraw() + self['pageDesc'] = pInfo.GetPageDesc() + self['minPage'] = pInfo.GetMinPage() + self['maxPage'] = pInfo.GetMaxPage() + self['offsetPage'] = pInfo.GetOffsetPage() + self['fromPage'] = pInfo.GetFromPage() + self['toPage'] = pInfo.GetToPage() + self['copies'] = pInfo.GetCopies() + self['deviceName'] = pInfo.GetDeviceName() + self['driverName'] = pInfo.GetDriverName() + self['printAll'] = pInfo.PrintAll() + self['printCollate'] = pInfo.PrintCollate() + self['printRange'] = pInfo.PrintRange() + self['printSelection'] = pInfo.PrintSelection() + del self.pInfo + +class PropertyPage(Dialog): + " Base class for a Property Page" + def __init__( self, id, dllid=None, caption=0 ): + """ id is the resource ID + dllid may be None, a dll object, or a string with a dll name """ + + self.dll = dllFromDll(dllid) + if self.dll: + oldRes = win32ui.SetResource(self.dll) + if type(id)==type([]): + dlg=win32ui.CreatePropertyPageIndirect(id) + else: + dlg=win32ui.CreatePropertyPage(id, caption) + if self.dll: + win32ui.SetResource(oldRes) + # dont call dialog init! + window.Wnd.__init__(self, dlg) + self.HookCommands() + +class PropertySheet(window.Wnd): + def __init__(self, caption, dll=None, pageList=None ):# parent=None, style,etc): + " Initialize a property sheet. pageList is a list of ID's " + # must take a reference to the DLL until InitDialog. + self.dll=dllFromDll(dll) + self.sheet = win32ui.CreatePropertySheet(caption) + window.Wnd.__init__(self, self.sheet) + if not pageList is None: + self.AddPage(pageList) + + def OnInitDialog(self): + return self._obj_.OnInitDialog() + + def DoModal(self): + if self.dll: + oldRes = win32ui.SetResource(self.dll) + rc = self.sheet.DoModal() + if self.dll: + win32ui.SetResource(oldRes) + return rc + + def AddPage(self, pages): + if self.dll: + oldRes = win32ui.SetResource(self.dll) + try: # try list style access + pages[0] + isSeq = 1 + except (TypeError,KeyError): + isSeq = 0 + if isSeq: + for page in pages: + self.DoAddSinglePage(page) + else: + self.DoAddSinglePage(pages) + if self.dll: + win32ui.SetResource(oldRes) + + def DoAddSinglePage(self, page): + "Page may be page, or int ID. Assumes DLL setup " + if type(page)==type(0): + self.sheet.AddPage(win32ui.CreatePropertyPage(page)) + else: + self.sheet.AddPage(page) + +# define some app utility functions. +def GetSimpleInput(prompt, defValue='', title=None ): + """ displays a dialog, and returns a string, or None if cancelled. + args prompt, defValue='', title=main frames title """ + # uses a simple dialog to return a string object. + if title is None: title=win32ui.GetMainFrame().GetWindowText() + class DlgSimpleInput(Dialog): + def __init__(self, prompt, defValue, title ): + self.title=title + Dialog.__init__(self, win32ui.IDD_SIMPLE_INPUT) + self.AddDDX(win32ui.IDC_EDIT1,'result') + self.AddDDX(win32ui.IDC_PROMPT1, 'prompt') + self._obj_.data['result']=defValue + self._obj_.data['prompt']=prompt + def OnInitDialog(self): + self.SetWindowText(self.title) + return Dialog.OnInitDialog(self) + + dlg=DlgSimpleInput( prompt, defValue, title) + if dlg.DoModal() <> win32con.IDOK: + return None + return dlg['result'] diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/docview.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/docview.py new file mode 100644 index 000000000..4be3985c9 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/docview.py @@ -0,0 +1,122 @@ +# document and view classes for MFC. +import win32ui +import win32con +import object +import window + +class View(window.Wnd): + def __init__(self, initobj): + window.Wnd.__init__(self, initobj) + def OnInitialUpdate(self): + pass + +# Simple control based views. +class CtrlView(View): + def __init__(self, doc, wndclass, style=0): + View.__init__(self, win32ui.CreateCtrlView(doc, wndclass, style)) + +class EditView(CtrlView): + def __init__(self, doc): + View.__init__(self, win32ui.CreateEditView(doc)) + +class RichEditView(CtrlView): + def __init__(self, doc): + View.__init__(self, win32ui.CreateRichEditView(doc)) + +class ListView(CtrlView): + def __init__(self, doc): + View.__init__(self, win32ui.CreateListView(doc)) + +class TreeView(CtrlView): + def __init__(self, doc): + View.__init__(self, win32ui.CreateTreeView(doc)) + +# Other more advanced views. +class ScrollView(View): + def __init__(self, doc): + View.__init__(self, win32ui.CreateView(doc)) + +class FormView(View): + def __init__(self, doc, id): + View.__init__(self, win32ui.CreateFormView(doc, id)) + +class Document(object.CmdTarget): + def __init__(self, template, docobj=None): + if docobj is None: + docobj = template.DoCreateDoc() + object.CmdTarget.__init__(self, docobj) + +class RichEditDoc(object.CmdTarget): + def __init__(self, template): + object.CmdTarget.__init__(self, template.DoCreateRichEditDoc()) + +class CreateContext: + "A transient base class used as a CreateContext" + def __init__(self, template, doc = None): + self.template = template + self.doc = doc + def __del__(self): + self.close() + def close(self): + self.doc = None + self.template = None + +class DocTemplate(object.CmdTarget): + def __init__(self, resourceId=None, MakeDocument=None, MakeFrame=None, MakeView=None): + if resourceId is None: resourceId = win32ui.IDR_PYTHONTYPE + object.CmdTarget.__init__(self, self._CreateDocTemplate(resourceId)) + self.MakeDocument=MakeDocument + self.MakeFrame=MakeFrame + self.MakeView=MakeView + self._SetupSharedMenu_() +# todo - _SetupSharedMenu should be moved to a framework class. + def _SetupSharedMenu_(self): + sharedMenu = self.GetSharedMenu() + from pywin.framework import toolmenu + toolmenu.SetToolsMenu(sharedMenu) + from pywin.framework import help + help.SetHelpMenuOtherHelp(sharedMenu) + + def _CreateDocTemplate(self, resourceId): + return win32ui.CreateDocTemplate(resourceId) + def __del__(self): + object.CmdTarget.__del__(self) + def CreateCreateContext(self, doc=None): + return CreateContext(self, doc) + def CreateNewFrame(self, doc): + makeFrame = self.MakeFrame + if makeFrame is None: makeFrame = window.MDIChildWnd + wnd = makeFrame() + context = self.CreateCreateContext(doc) + wnd.LoadFrame(self.GetResourceID(), -1, None, context) # triggers OnCreateClient... + return wnd + def CreateNewDocument(self): + makeDocument = self.MakeDocument + if makeDocument is None: + makeDocument = Document + return makeDocument(self) + def CreateView(self, frame, context): + makeView = self.MakeView + if makeView is None: makeView = EditView + view = makeView(context.doc) + view.CreateWindow(frame) + +class RichEditDocTemplate(DocTemplate): + def __init__(self, resourceId=None, MakeDocument=None, MakeFrame=None, MakeView=None): + if MakeView is None: MakeView = RichEditView + if MakeDocument is None: MakeDocument = RichEditDoc + DocTemplate.__init__(self, resourceId, MakeDocument, MakeFrame, MakeView) + + def _CreateDocTemplate(self, resourceId): + return win32ui.CreateRichEditDocTemplate(resourceId) + +def t(): + class FormTemplate(DocTemplate): + def CreateView(self, frame, context): + makeView = self.MakeView +# view = FormView(context.doc, win32ui.IDD_PROPDEMO1) + view = ListView(context.doc) + view.CreateWindow(frame) + + t=FormTemplate() + return t.OpenDocumentFile(None) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/object.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/object.py new file mode 100644 index 000000000..99e233aec --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/object.py @@ -0,0 +1,55 @@ +# MFC base classes. +import sys +import win32ui + +class Object: + def __init__(self, initObj = None): + self.__dict__['_obj_'] = initObj +# self._obj_ = initObj + if initObj is not None: initObj.AttachObject(self) + def __del__(self): + self.close() + def __getattr__(self, attr): # Make this object look like the underlying win32ui one. + # During cleanup __dict__ is not available, causing recursive death. + if attr != '__dict__': + try: + o = self.__dict__['_obj_'] + if o is not None: + return getattr(o, attr) + # Only raise this error for non "internal" names - + # Python may be calling __len__, __nonzero__, etc, so + # we dont want this exception + if attr[0]!= '_' and attr[-1] != '_': + raise win32ui.error, "The MFC object has died." + except KeyError: + # No _obj_ at all - dont report MFC object died when there isnt one! + pass + raise AttributeError, attr + + def OnAttachedObjectDeath(self): +# print "object", self.__class__.__name__, "dieing" + self._obj_ = None + def close(self): + if self.__dict__.has_key('_obj_'): + if self._obj_ is not None: + self._obj_.AttachObject(None) + self._obj_ = None + +class CmdTarget(Object): + def __init__(self, initObj): + Object.__init__(self, initObj) + def HookNotifyRange(self, handler, firstID, lastID): + oldhandlers = [] + for i in range(firstID, lastID + 1): + oldhandlers.append(self.HookNotify(handler, i)) + return oldhandlers + def HookCommandRange(self, handler, firstID, lastID): + oldhandlers = [] + for i in range(firstID, lastID + 1): + oldhandlers.append(self.HookCommand(handler, i)) + return oldhandlers + def HookCommandUpdateRange(self, handler, firstID, lastID): + oldhandlers = [] + for i in range(firstID, lastID + 1): + oldhandlers.append(self.HookCommandUpdate(handler, i)) + return oldhandlers diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/thread.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/thread.py new file mode 100644 index 000000000..f11f2d6c8 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/thread.py @@ -0,0 +1,22 @@ +# Thread and application objects + +import object +import win32ui + +class WinThread(object.CmdTarget): + def __init__(self, initObj = None): + if initObj is None: + initObj = win32ui.CreateThread() + object.CmdTarget.__init__(self, initObj) + + def InitInstance(self): + pass # Default None/0 return indicates success for InitInstance() + def ExitInstance(self): + pass + + +class WinApp(WinThread): + def __init__(self, initApp = None): + if initApp is None: + initApp = win32ui.GetApp() + WinThread.__init__(self, initApp) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/window.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/window.py new file mode 100644 index 000000000..599599442 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/mfc/window.py @@ -0,0 +1,41 @@ +# The MFCish window classes. +import object +import win32ui +import win32con + +class Wnd(object.CmdTarget): + def __init__(self, initobj=None): + object.CmdTarget.__init__(self, initobj) + if self._obj_: self._obj_.HookMessage(self.OnDestroy, win32con.WM_DESTROY) + def OnDestroy(self, msg): + pass + +# NOTE NOTE - This facility is currently disabled in Pythonwin!!!!! +# Note - to process all messages for your window, add the following method +# to a derived class. This code provides default message handling (ie, is +# identical, except presumably in speed, as if the method did not exist at +# all, so presumably will be modified to test for specific messages to be +# useful! +# def WindowProc(self, msg, wParam, lParam): +# rc, lResult = self._obj_.OnWndMsg(msg, wParam, lParam) +# if not rc: lResult = self._obj_.DefWindowProc(msg, wParam, lParam) +# return lResult + +class FrameWnd(Wnd): + def __init__(self, wnd): + Wnd.__init__(self, wnd) + +class MDIChildWnd(FrameWnd): + def __init__(self, wnd = None): + if wnd is None: + wnd=win32ui.CreateMDIChild() + FrameWnd.__init__(self, wnd) + def OnCreateClient(self, cp, context): + if context is not None and context.template is not None: + context.template.CreateView(self, context) + +class MDIFrameWnd(FrameWnd): + def __init__(self, wnd = None): + if wnd is None: + wnd=win32ui.CreateMDIFrame() + FrameWnd.__init__(self, wnd) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/IDLEenvironment.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/IDLEenvironment.py new file mode 100644 index 000000000..17491ec0f --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/IDLEenvironment.py @@ -0,0 +1,515 @@ +# Code that allows Pythonwin to pretend it is IDLE +# (at least as far as most IDLE extensions are concerned) + +import string +import win32api +import win32ui +import win32con +import sys + +from pywin.mfc.dialog import GetSimpleInput + +wordchars = string.uppercase + string.lowercase + string.digits + +class TextError(Exception): # When a TclError would normally be raised. + pass + +class EmptyRange(Exception): # Internally raised. + pass + +def GetIDLEModule(module): + try: + # First get it from Pythonwin it is exists. + modname = "pywin.idle." + module + __import__(modname) + except ImportError, details: + msg = "The IDLE extension '%s' can not be located.\r\n\r\n" \ + "Please correct the installation and restart the" \ + " application.\r\n\r\n%s" % (module, details) + win32ui.MessageBox(msg) + return None + mod=sys.modules[modname] + mod.TclError = TextError # A hack that can go soon! + return mod + +# A class that is injected into the IDLE auto-indent extension. +# It allows for decent performance when opening a new file, +# as auto-indent uses the tokenizer module to determine indents. +# The default AutoIndent readline method works OK, but it goes through +# this layer of Tk index indirection for every single line. For large files +# without indents (and even small files with indents :-) it was pretty slow! +def fast_readline(self): + if self.finished: + return "" + if not self.__dict__.has_key("_scint_lines"): + # XXX - note - assumes this is only called once the file is loaded! + self._scint_lines = string.split(self.text.edit.GetTextRange(), "\n") + sl = self._scint_lines + i = self.i = self.i + 1 + if i >= len(sl): + return "" + return sl[i]+"\n" + +try: + GetIDLEModule("AutoIndent").IndentSearcher.readline = fast_readline +except AttributeError: # GetIDLEModule may return None + pass + +# A class that attempts to emulate an IDLE editor window. +# Construct with a Pythonwin view. +class IDLEEditorWindow: + def __init__(self, edit): + self.edit = edit + self.text = TkText(edit) + self.extensions = {} + self.extension_menus = {} + + def close(self): + self.edit = self.text = None + self.extension_menus = None + try: + for ext in self.extensions.values(): + closer = getattr(ext, "close", None) + if closer is not None: + closer() + finally: + self.extensions = {} + + def IDLEExtension(self, extension): + ext = self.extensions.get(extension) + if ext is not None: return ext + mod = GetIDLEModule(extension) + if mod is None: return None + klass = getattr(mod, extension) + ext = self.extensions[extension] = klass(self) + # Find and bind all the events defined in the extension. + events = filter(lambda item: item[-6:]=="_event", dir(klass)) + for event in events: + name = "<<%s>>" % (string.replace(event[:-6], "_", "-"), ) + self.edit.bindings.bind(name, getattr(ext, event)) + return ext + + def GetMenuItems(self, menu_name): + # Get all menu items for the menu name (eg, "edit") + bindings = self.edit.bindings + ret = [] + for ext in self.extensions.values(): + menudefs = getattr(ext, "menudefs", []) + for name, items in menudefs: + if name == menu_name: + for text, event in filter(lambda item: item is not None, items): + text = string.replace(text, "&", "&&") + text = string.replace(text, "_", "&") + ret.append((text, event)) + return ret + + ###################################################################### + # The IDLE "Virtual UI" methods that are exposed to the IDLE extensions. + # + def askinteger(self, caption, prompt, parent=None, initialvalue=0, minvalue=None, maxvalue=None): + while 1: + rc = GetSimpleInput(prompt, str(initialvalue), caption) + if rc is None: return 0 # Correct "cancel" semantics? + err = None + try: + rc = int(rc) + except ValueError: + err = "Please enter an integer" + if not err and minvalue is not None and rc < minvalue: + err = "Please enter an integer greater then or equal to %s" % (minvalue,) + if not err and maxvalue is not None and rc > maxvalue: + err = "Please enter an integer less then or equal to %s" % (maxvalue,) + if err: + win32ui.MessageBox(err, caption, win32con.MB_OK) + continue + return rc + def askyesno(self, caption, prompt, parent=None): + return win32ui.MessageBox(prompt, caption, win32con.MB_YESNO)==win32con.IDYES + + ###################################################################### + # The IDLE "Virtual Text Widget" methods that are exposed to the IDLE extensions. + # + + # Is character at text_index in a Python string? Return 0 for + # "guaranteed no", true for anything else. + def is_char_in_string(self, text_index): + # A helper for the code analyser - we need internal knowledge of + # the colorizer to get this information + # This assumes the colorizer has got to this point! + text_index = self.text._getoffset(text_index) + c = self.text.edit._GetColorizer() + if c and c.GetStringStyle(text_index) is None: + return 0 + return 1 + + # If a selection is defined in the text widget, return + # (start, end) as Tkinter text indices, otherwise return + # (None, None) + def get_selection_indices(self): + try: + first = self.text.index("sel.first") + last = self.text.index("sel.last") + return first, last + except TextError: + return None, None + + def set_tabwidth(self, width ): + self.edit.SCISetTabWidth(width) + + def get_tabwidth(self): + return self.edit.GetTabWidth() + +# A class providing the generic "Call Tips" interface +class CallTips: + def __init__(self, edit): + self.edit = edit + def showtip(self, tip_text): + self.edit.SCICallTipShow(tip_text) + def hidetip(self): + self.edit.SCICallTipCancel() + +######################################## +# +# Helpers for the TkText emulation. +def TkOffsetToIndex(offset, edit): + lineoff = 0 + # May be 1 > actual end if we pretended there was a trailing '\n' + offset = min(offset, edit.GetTextLength()) + line = edit.LineFromChar(offset) + lineIndex = edit.LineIndex(line) + return "%d.%d" % (line+1, offset-lineIndex) + +def _NextTok(str, pos): + # Returns (token, endPos) + end = len(str) + if pos>=end: return None, 0 + while pos < end and str[pos] in string.whitespace: + pos = pos + 1 + # Special case for +- + if str[pos] in '+-': + return str[pos],pos+1 + # Digits also a special case. + endPos = pos + while endPos < end and str[endPos] in string.digits+".": + endPos = endPos + 1 + if pos!=endPos: return str[pos:endPos], endPos + endPos = pos + while endPos < end and str[endPos] not in string.whitespace + string.digits + "+-": + endPos = endPos + 1 + if pos!=endPos: return str[pos:endPos], endPos + return None, 0 + +def TkIndexToOffset(bm, edit, marks): + base, nextTokPos = _NextTok(bm, 0) + if base is None: raise ValueError, "Empty bookmark ID!" + if string.find(base,".")>0: + try: + line, col = string.split(base, ".", 2) + if col=="first" or col=="last": + # Tag name + if line != "sel": raise ValueError, "Tags arent here!" + sel = edit.GetSel() + if sel[0]==sel[1]: + raise EmptyRange + if col=="first": + pos = sel[0] + else: + pos = sel[1] + else: + # Lines are 1 based for tkinter + line = int(line)-1 + if line > edit.GetLineCount(): + pos = edit.GetTextLength()+1 + else: + pos = edit.LineIndex(line) + if pos==-1: pos = edit.GetTextLength() + pos = pos + int(col) + except (ValueError, IndexError): + raise ValueError, "Unexpected literal in '%s'" % base + elif base == 'insert': + pos = edit.GetSel()[0] + elif base=='end': + pos = edit.GetTextLength() + # Pretend there is a trailing '\n' if necessary + if pos and edit.SCIGetCharAt(pos-1) != "\n": + pos = pos+1 + else: + try: + pos = marks[base] + except KeyError: + raise ValueError, "Unsupported base offset or undefined mark '%s'" % base + + while 1: + word, nextTokPos = _NextTok(bm, nextTokPos) + if word is None: break + if word in ['+','-']: + num, nextTokPos = _NextTok(bm, nextTokPos) + if num is None: raise ValueError, "+/- operator needs 2 args" + what, nextTokPos = _NextTok(bm, nextTokPos) + if what is None: raise ValueError, "+/- operator needs 2 args" + if what[0] <> "c": raise ValueError, "+/- only supports chars" + if word=='+': + pos = pos + int(num) + else: + pos = pos - int(num) + elif word=='wordstart': + while pos > 0 and edit.SCIGetCharAt(pos-1) in wordchars: + pos = pos - 1 + elif word=='wordend': + end = edit.GetTextLength() + while pos < end and edit.SCIGetCharAt(pos) in wordchars: + pos = pos + 1 + elif word=='linestart': + while pos > 0 and edit.SCIGetCharAt(pos-1) not in '\n\r': + pos = pos - 1 + elif word=='lineend': + end = edit.GetTextLength() + while pos < end and edit.SCIGetCharAt(pos) not in '\n\r': + pos = pos + 1 + else: + raise ValueError, "Unsupported relative offset '%s'" % word + return max(pos, 0) # Tkinter is tollerant of -ve indexes - we aren't + +# A class that resembles an IDLE (ie, a Tk) text widget. +# Construct with an edit object (eg, an editor view) +class TkText: + def __init__(self, edit): + self.calltips = None + self.edit = edit + self.marks = {} +## def __getattr__(self, attr): +## if attr=="tk": return self # So text.tk.call works. +## if attr=="master": return None # ditto! +## raise AttributeError, attr +## def __getitem__(self, item): +## if item=="tabs": +## size = self.edit.GetTabWidth() +## if size==8: return "" # Tk default +## return size # correct semantics? +## elif item=="font": # Used for measurements we dont need to do! +## return "Dont know the font" +## raise IndexError, "Invalid index '%s'" % item + def make_calltip_window(self): + if self.calltips is None: + self.calltips = CallTips(self.edit) + return self.calltips + def _getoffset(self, index): + return TkIndexToOffset(index, self.edit, self.marks) + def _getindex(self, off): + return TkOffsetToIndex(off, self.edit) + def _fix_eol_indexes(self, start, end): + if start>0 and self.edit.SCIGetCharAt(start)=='\n' and self.edit.SCIGetCharAt(start-1)=='\r': + start = start - 1 + if end < self.edit.GetTextLength() and self.edit.SCIGetCharAt(end-1)=='\r' and self.edit.SCIGetCharAt(end)=='\n': + end = end + 1 + return start, end +## def get_tab_width(self): +## return self.edit.GetTabWidth() +## def call(self, *rest): +## # Crap to support Tk measurement hacks for tab widths +## if rest[0] != "font" or rest[1] != "measure": +## raise ValueError, "Unsupport call type" +## return len(rest[5]) +## def configure(self, **kw): +## for name, val in kw.items(): +## if name=="tabs": +## self.edit.SCISetTabWidth(int(val)) +## else: +## raise ValueError, "Unsupported configuration item %s" % kw + def bind(self, binding, handler): + self.edit.bindings.bind(binding, handler) + def get(self, start, end = None): + try: + start = self._getoffset(start) + if end is None: + end = start+1 + else: + end = self._getoffset(end) + except EmptyRange: + return "" + # Simple semantic checks to conform to the Tk text interface + if end <= start: return "" + max = self.edit.GetTextLength() + checkEnd = 0 + if end > max: + end = max + checkEnd = 1 + start, end = self._fix_eol_indexes(start, end) + ret = self.edit.GetTextRange(start, end) + # pretend a trailing '\n' exists if necessary. + if checkEnd and (not ret or ret[-1] != '\n'): ret = ret + '\n' + return string.replace(ret, "\r", "") + def index(self, spec): + try: + return self._getindex(self._getoffset(spec)) + except EmptyRange: + return "" + def insert(self, pos, text): + try: + pos = self._getoffset(pos) + except EmptyRange: + raise TextError, "Empty range" + self.edit.SetSel((pos, pos)) + # IDLE only deals with "\n" - we will be nicer + bits = string.split(text, '\n') + self.edit.SCIAddText(bits[0]) + for bit in bits[1:]: + self.edit.SCINewline() + self.edit.SCIAddText(bit) + + def delete(self, start, end=None): + try: + start = self._getoffset(start) + if end is not None: end = self._getoffset(end) + except EmptyRange: + raise TextError, "Empty range" + # If end is specified and == start, then we must delete nothing. + if start==end: return + # If end is not specified, delete one char + if end is None: + end = start+1 + else: + # Tk says not to delete in this case, but our control would. + if end=start and old=end: + old = old - (end-start) + self.edit.SetSel(old) + + def bell(self): + win32api.MessageBeep() + + def see(self, pos): + # Most commands we use in Scintilla actually force the selection + # to be seen, making this unnecessary. + pass + + def mark_set(self, name, pos): + try: + pos = self._getoffset(pos) + except EmptyRange: + raise TextError, "Empty range '%s'" % pos + if name == "insert": + self.edit.SetSel( pos ) + else: + self.marks[name]=pos + + def tag_add(self, name, start, end): + if name != "sel": raise ValueError, "Only sel tag is supported" + try: + start = self._getoffset(start) + end = self._getoffset(end) + except EmptyRange: + raise TextError, "Empty range" + self.edit.SetSel( start, end ) + + def tag_remove(self, name, start, end): + if name !="sel" or start != "1.0" or end != "end": + raise ValueError, "Cant remove this tag" + # Turn the sel into a cursor + self.edit.SetSel(self.edit.GetSel()[0]) + + def compare(self, i1, op, i2): + try: + i1=self._getoffset(i1) + except EmptyRange: + i1 = "" + try: + i2=self._getoffset(i2) + except EmptyRange: + i2 = "" + return eval("%d%s%d" % (i1,op,i2)) + + def undo_block_start(self): + self.edit.SCIBeginUndoAction() + + def undo_block_stop(self): + self.edit.SCIEndUndoAction() + +###################################################################### +# +# Test related code. +# +###################################################################### +def TestCheck(index, edit, expected=None): + rc = TkIndexToOffset(index, edit, {}) + if rc != expected: + print "ERROR: Index", index,", expected", expected, "but got", rc + +def TestGet(fr, to, t, expected): + got = t.get(fr, to) + if got != expected: + print "ERROR: get(%s, %s) expected %s, but got %s" % (`fr`, `to`, `expected`, `got`) + +def test(): + import pywin.framework.editor + d=pywin.framework.editor.editorTemplate.OpenDocumentFile(None) + e=d.GetFirstView() + t = TkText(e) + e.SCIAddText("hi there how\nare you today\r\nI hope you are well") + e.SetSel((4,4)) + + skip = """ + TestCheck("insert", e, 4) + TestCheck("insert wordstart", e, 3) + TestCheck("insert wordend", e, 8) + TestCheck("insert linestart", e, 0) + TestCheck("insert lineend", e, 12) + TestCheck("insert + 4 chars", e, 8) + TestCheck("insert +4c", e, 8) + TestCheck("insert - 2 chars", e, 2) + TestCheck("insert -2c", e, 2) + TestCheck("insert-2c", e, 2) + TestCheck("insert-2 c", e, 2) + TestCheck("insert- 2c", e, 2) + TestCheck("1.1", e, 1) + TestCheck("1.0", e, 0) + TestCheck("2.0", e, 13) + try: + TestCheck("sel.first", e, 0) + print "*** sel.first worked with an empty selection" + except TextError: + pass + e.SetSel((4,5)) + TestCheck("sel.first- 2c", e, 2) + TestCheck("sel.last- 2c", e, 3) + """ + # Check EOL semantics + e.SetSel((4,4)) + TestGet("insert lineend", "insert lineend +1c", t, "\n") + e.SetSel((20, 20)) + TestGet("insert lineend", "insert lineend +1c", t, "\n") + e.SetSel((35, 35)) + TestGet("insert lineend", "insert lineend +1c", t, "\n") + +class IDLEWrapper: + def __init__(self, control): + self.text = control + +def IDLETest(extension): + import sys, os + modname = "pywin.idle." + extension + __import__(modname) + mod=sys.modules[modname] + mod.TclError = TextError + klass = getattr(mod, extension) + + # Create a new Scintilla Window. + import pywin.framework.editor + d=pywin.framework.editor.editorTemplate.OpenDocumentFile(None) + v=d.GetFirstView() + fname=os.path.splitext(__file__)[0] + ".py" + v.SCIAddText(open(fname).read()) + d.SetModifiedFlag(0) + r=klass( IDLEWrapper( TkText(v) ) ) + return r + +if __name__=='__main__': + test() \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/__init__.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/__init__.py new file mode 100644 index 000000000..8d8ea4707 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/__init__.py @@ -0,0 +1 @@ +# package init. \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/bindings.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/bindings.py new file mode 100644 index 000000000..a2fb4d8f8 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/bindings.py @@ -0,0 +1,186 @@ +import IDLEenvironment +import string +import win32ui +import win32api +import win32con +import keycodes +import sys + +HANDLER_ARGS_GUESS=0 +HANDLER_ARGS_NATIVE=1 +HANDLER_ARGS_IDLE=2 +HANDLER_ARGS_EXTENSION=3 + +next_id = 5000 + +event_to_commands = {}# dict of integer IDs to event names. +command_to_events = {}# dict of event names to int IDs + +def assign_command_id(event, id = 0): + global next_id + if id == 0: + id = event_to_commands.get(event, 0) + if id == 0: + id = next_id + next_id = next_id + 1 + # Only map the ones we allocated - specified ones are assumed to have a handler + command_to_events[id] = event + event_to_commands[event] = id + return id + +class SendCommandHandler: + def __init__(self, cmd): + self.cmd = cmd + def __call__(self, *args): + win32ui.GetMainFrame().SendMessage(win32con.WM_COMMAND, self.cmd) + +class Binding: + def __init__(self, handler, handler_args_type): + self.handler = handler + self.handler_args_type = handler_args_type + +class BindingsManager: + def __init__(self, parent_view): + self.parent_view = parent_view + self.bindings = {} # dict of Binding instances. + self.keymap = {} + + def prepare_configure(self): + self.keymap = {} + + def complete_configure(self): + for id in command_to_events.keys(): + self.parent_view.HookCommand(self._OnCommand, id) + + def close(self): + self.parent_view = self.bindings = self.keymap = None + + def report_error(self, problem): + try: + win32ui.SetStatusText(problem, 1) + except win32ui.error: + # No status bar! + print problem + + def update_keymap(self, keymap): + self.keymap.update(keymap) + + def bind(self, event, handler, handler_args_type = HANDLER_ARGS_GUESS, cid = 0): + if handler is None: + handler = SendCommandHandler(cid) + self.bindings[event] = self._new_binding(handler, handler_args_type) + self.bind_command(event, cid) + + def bind_command(self, event, id = 0): + "Binds an event to a Windows control/command ID" + id = assign_command_id(event, id) + return id + + def get_command_id(self, event): + id = event_to_commands.get(event) + if id is None: + # See if we even have an event of that name!? + if not self.bindings.has_key(event): + return None + id = self.bind_command(event) + return id + + def _OnCommand(self, id, code): + event = command_to_events.get(id) + if event is None: + self.report_error("No event associated with event ID %d" % id) + return 1 + return self.fire(event) + + def _new_binding(self, event, handler_args_type): + return Binding(event, handler_args_type) + + def _get_IDLE_handler(self, ext, handler): + try: + instance = self.parent_view.idle.IDLEExtension(ext) + name = string.replace(handler, "-", "_") + "_event" + return getattr(instance, name) + except (ImportError, AttributeError): + msg = "Can not find event '%s' in IDLE extension '%s'" % (handler, ext) + self.report_error(msg) + return None + + def fire(self, event, event_param = None): + # Fire the specified event. Result is native Pythonwin result + # (ie, 1==pass one, 0 or None==handled) + + # First look up the event directly - if there, we are set. + binding = self.bindings.get(event) + if binding is None: + # If possible, find it! + # A native method name + handler = getattr(self.parent_view, event + "Event", None) + if handler is None: + # Can't decide if I should report an error?? + self.report_error("The event name '%s' can not be found." % event) + # Either way, just let the default handlers grab it. + return 1 + binding = self._new_binding(handler, HANDLER_ARGS_NATIVE) + # Cache it. + self.bindings[event] = binding + + handler_args_type = binding.handler_args_type + # Now actually fire it. + if handler_args_type==HANDLER_ARGS_GUESS: + # Can't be native, as natives are never added with "guess". + # Must be extension or IDLE. + if event[0]=="<": + handler_args_type = HANDLER_ARGS_IDLE + else: + handler_args_type = HANDLER_ARGS_EXTENSION + try: + if handler_args_type==HANDLER_ARGS_EXTENSION: + args = self.parent_view.idle, event_param + else: + args = (event_param,) + rc = apply(binding.handler, args) + if handler_args_type==HANDLER_ARGS_IDLE: + # Convert to our return code. + if rc in [None, "break"]: + rc = 0 + else: + rc = 1 + except: + import traceback + message = "Firing event '%s' failed." % event + print message + traceback.print_exc() + self.report_error(message) + rc = 1 # Let any default handlers have a go! + return rc + + def fire_key_event(self, msg): + key = msg[2] + keyState = 0 + if win32api.GetKeyState(win32con.VK_CONTROL) & 0x8000: + keyState = keyState | win32con.RIGHT_CTRL_PRESSED | win32con.LEFT_CTRL_PRESSED + if win32api.GetKeyState(win32con.VK_SHIFT) & 0x8000: + keyState = keyState | win32con.SHIFT_PRESSED + if win32api.GetKeyState(win32con.VK_MENU) & 0x8000: + keyState = keyState | win32con.LEFT_ALT_PRESSED | win32con.RIGHT_ALT_PRESSED + keyinfo = key, keyState + # Special hacks for the dead-char key on non-US keyboards. + # (XXX - which do not work :-( + event = self.keymap.get( keyinfo ) + if event is None: +## if key == 220: # Dead key +## return 1 +## # Translate the raw scancode into an Ascii character. +## print "translating", key, "(with state)", keyState, +## key = win32ui.TranslateVirtualKey(key) +## print "Got back key", `key`, +#### if key is None: +#### return 1 # Dead-key - don't handle at all!!! +## if key: +## # Then back to a "normalized" scan-code. +## key = keycodes.get_scan_code(key[0]) +## keyinfo = key, keyState +## event = self.keymap.get( keyinfo ) +## if event is None: + return 1 + return self.fire(event, None) diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/config.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/config.py new file mode 100644 index 000000000..2b44dabef --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/config.py @@ -0,0 +1,313 @@ +# config.py - deals with loading configuration information. + +# Loads config data from a .cfg file. Also caches the compiled +# data back into a .cfc file. + +# If you are wondering how to avoid needing .cfg files (eg, +# if you are freezing Pythonwin etc) I suggest you create a +# .py file, and put the config info in a docstring. Then +# pass a CStringIO file (rather than a filename) to the +# config manager. +import sys +import string +import keycodes +import marshal +import stat +import os +import types +import traceback +import pywin +import glob +import imp + +debugging = 0 +if debugging: + import win32traceutil # Some trace statements fire before the interactive window is open. + def trace(*args): + sys.stderr.write(string.join(map(str, args), " ") + "\n") +else: + trace = lambda *args: None + +compiled_config_version = 2 + +def split_line(line, lineno): + comment_pos = string.find(line, "#") + if comment_pos>=0: line = line[:comment_pos] + sep_pos = string.rfind(line, "=") + if sep_pos == -1: + if string.strip(line): + print "Warning: Line %d: %s is an invalid entry" % (lineno, `line`) + return None, None + return "", "" + return string.strip(line[:sep_pos]), string.strip(line[sep_pos+1:]) + +def get_section_header(line): + # Returns the section if the line is a section header, else None + if line[0] == "[": + end = string.find(line, "]") + if end==-1: end=len(line) + rc = string.lower(line[1:end]) + try: + i = string.index(rc, ":") + return rc[:i], rc[i+1:] + except ValueError: + return rc, "" + return None, None + +def find_config_file(f): + return os.path.join(pywin.__path__[0], f + ".cfg") + +def find_config_files(): + return map( lambda x: os.path.split(x)[1], map( lambda x: os.path.splitext(x)[0], glob.glob(os.path.join(pywin.__path__[0], "*.cfg")))) + +class ConfigManager: + def __init__(self, f): + self.filename = "unknown" + self.last_error = None + self.key_to_events = {} + if hasattr(f, "readline"): + fp = f + self.filename = "" + compiled_name = None + else: + try: + f = find_config_file(f) + src_stat = os.stat(f) + except os.error: + self.report_error("Config file '%s' not found" % f) + return + self.filename = f + self.basename = os.path.basename(f) + trace("Loading configuration", self.basename) + compiled_name = os.path.splitext(f)[0] + ".cfc" + try: + cf = open(compiled_name, "rb") + try: + ver = marshal.load(cf) + ok = compiled_config_version == ver + if ok: + magic = marshal.load(cf) + size = marshal.load(cf) + mtime = marshal.load(cf) + if magic == imp.get_magic() and \ + src_stat[stat.ST_MTIME] == mtime and \ + src_stat[stat.ST_SIZE] == size: + self.cache = marshal.load(cf) + trace("Configuration loaded cached", compiled_name) + return # We are ready to roll! + finally: + cf.close() + except (os.error, IOError, EOFError): + pass + fp = open(f) + self.cache = {} + lineno = 1 + line = fp.readline() + while line: + # Skip to the next section (maybe already there!) + section, subsection = get_section_header(line) + while line and section is None: + line = fp.readline() + if not line: break + lineno = lineno + 1 + section, subsection = get_section_header(line) + if not line: break + + if section=="keys": + line, lineno = self._load_keys(subsection, fp, lineno) + elif section == "extensions": + line, lineno = self._load_extensions(subsection, fp, lineno) + elif section == "idle extensions": + line, lineno = self._load_idle_extensions(subsection, fp, lineno) + elif section == "general": + line, lineno = self._load_general(subsection, fp, lineno) + else: + self.report_error("Unrecognised section header '%s:%s'" % (section,subsection)) + line = fp.readline() + lineno = lineno + 1 + # Check critical data. + if not self.cache.get("keys"): + self.report_error("No keyboard definitions were loaded") + if not self.last_error and compiled_name: + try: + cf = open(compiled_name, "wb") + marshal.dump(compiled_config_version, cf) + marshal.dump(imp.get_magic(), cf) + marshal.dump(src_stat[stat.ST_SIZE], cf) + marshal.dump(src_stat[stat.ST_MTIME], cf) + marshal.dump(self.cache, cf) + cf.close() + except (IOError, EOFError): + pass # Ignore errors - may be read only. + + def configure(self, editor, subsections = None): + # Execute the extension code, and find any events. + # First, we "recursively" connect any we are based on. + if subsections is None: subsections = [] + subsections = [''] + subsections + general = self.get_data("general") + if general: + parents = general.get("based on", []) + for parent in parents: + trace("Configuration based on", parent, "- loading.") + parent = self.__class__(parent) + parent.configure(editor, subsections) + if parent.last_error: + self.report_error(parent.last_error) + + bindings = editor.bindings + codeob = self.get_data("extension code") + if codeob is not None: + ns = {} + try: + exec codeob in ns + except: + traceback.print_exc() + self.report_error("Executing extension code failed") + ns = None + if ns: + num = 0 + for name, func in ns.items(): + if type(func)==types.FunctionType and name[:1] != '_': + bindings.bind(name, func) + num = num + 1 + trace("Configuration Extension code loaded", num, "events") + # Load the idle extensions + for subsection in subsections: + for ext in self.get_data("idle extensions", {}).get(subsection, []): + try: + editor.idle.IDLEExtension(ext) + trace("Loaded IDLE extension", ext) + except: + self.report_error("Can not load the IDLE extension '%s'" % ext) + + # Now bind up the key-map (remembering a reverse map + subsection_keymap = self.get_data("keys") + num_bound = 0 + for subsection in subsections: + keymap = subsection_keymap.get(subsection, {}) + bindings.update_keymap(keymap) + num_bound = num_bound + len(keymap) + trace("Configuration bound", num_bound, "keys") + + def get_key_binding(self, event, subsections = None): + if subsections is None: subsections = [] + subsections = [''] + subsections + + subsection_keymap = self.get_data("keys") + for subsection in subsections: + map = self.key_to_events.get(subsection) + if map is None: # Build it + map = {} + keymap = subsection_keymap.get(subsection, {}) + for key_info, map_event in keymap.items(): + map[map_event] = key_info + self.key_to_events[subsection] = map + + info = map.get(event) + if info is not None: + return keycodes.make_key_name( info[0], info[1] ) + return None + + def report_error(self, msg): + self.last_error = msg + print "Error in %s: %s" % (self.filename, msg) + def report_warning(self, msg): + print "Warning in %s: %s" % (self.filename, msg) + + def _readline(self, fp, lineno, bStripComments = 1): + line = fp.readline() + lineno = lineno + 1 + if line: + bBreak = get_section_header(line)[0] is not None # A new section is starting + if bStripComments and not bBreak: + pos = string.find(line, "#") + if pos>=0: line=line[:pos]+"\n" + else: + bBreak=1 + return line, lineno, bBreak + + def get_data(self, name, default=None): + return self.cache.get(name, default) + + def _save_data(self, name, data): + self.cache[name] = data + return data + + def _load_general(self, sub_section, fp, lineno): + map = {} + while 1: + line, lineno, bBreak = self._readline(fp, lineno) + if bBreak: break + + key, val = split_line(line, lineno) + if not key: continue + key = string.lower(key) + l = map.get(key, []) + l.append(val) + map[key]=l + self._save_data("general", map) + return line, lineno + + def _load_keys(self, sub_section, fp, lineno): + # Builds a nested dictionary of + # (scancode, flags) = event_name + main_map = self.get_data("keys", {}) + map = main_map.get(sub_section, {}) + while 1: + line, lineno, bBreak = self._readline(fp, lineno) + if bBreak: break + + key, event = split_line(line, lineno) + if not event: continue + sc, flag = keycodes.parse_key_name(key) + if sc is None: + self.report_warning("Line %d: Invalid key name '%s'" % (lineno, key)) + else: + map[sc, flag] = event + main_map[sub_section] = map + self._save_data("keys", main_map) + return line, lineno + + def _load_extensions(self, sub_section, fp, lineno): + start_lineno = lineno + lines = [] + while 1: + line, lineno, bBreak = self._readline(fp, lineno, 0) + if bBreak: break + lines.append(line) + try: + c = compile(string.join(lines, ""), self.filename, "exec") + self._save_data("extension code", c) + except SyntaxError, details: + msg = details[0] + errlineno = details[1][1] + start_lineno + # Should handle syntax errors better here, and offset the lineno. + self.report_error("Compiling extension code failed: Line %d: %s" % (errlineno, msg)) + return line, lineno + + def _load_idle_extensions(self, sub_section, fp, lineno): + extension_map = self.get_data("idle extensions") + if extension_map is None: extension_map = {} + extensions = [] + while 1: + line, lineno, bBreak = self._readline(fp, lineno) + if bBreak: break + line = string.strip(line) + if line: + extensions.append(line) + extension_map[sub_section] = extensions + self._save_data("idle extensions", extension_map) + return line, lineno + +def test(): + import time + start = time.clock() + f="default" + cm = ConfigManager(f) + map = cm.get_data("keys") + took = time.clock()-start + print "Loaded %s items in %.4f secs" % (len(map), took) + +if __name__=='__main__': + test() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/configui.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/configui.py new file mode 100644 index 000000000..bb083da19 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/configui.py @@ -0,0 +1,246 @@ +from pywin.mfc import dialog +import win32api +import win32con +import win32ui +import copy +import string +from scintillacon import * + +###################################################### +# Property Page for syntax formatting options + +# The standard 16 color VGA palette should always be possible +paletteVGA = ( ("Black",0,0,0), ("Navy",0,0,128), ("Green",0,128,0), ("Cyan",0,128,128), + ("Maroon",128,0,0), ("Purple",128,0,128), ("Olive",128,128,0), ("Gray",128,128,128), + ("Silver",192,192,192), ("Blue",0,0,255), ("Lime",0,255,0), ("Aqua",0,255,255), + ("Red",255,0,0), ("Fuchsia",255,0,255), ("Yellow",255,255,0), ("White",255,255,255), +# and a few others will generally be possible. + ("DarkGrey", 64,64,64 ), ("PurpleBlue",64,64,192), ("DarkGreen",0,96,0), + ("DarkOlive",128,128,64), ("MediumBlue",0,0,192), ("DarkNavy",0,0,96), + ("Magenta",96,0,96), ("OffWhite", 255,255,220 ), ("LightPurple",220,220,255), +) + +def BGR(b,g,r): # Colors in font definitions are integers made up of Blue, Green, and Red bytes + return b*256*256 + g*256 + r + +class ScintillaFormatPropertyPage(dialog.PropertyPage): + def __init__(self, scintillaClass = None, caption = 0): + self.scintillaClass = scintillaClass + dialog.PropertyPage.__init__(self, win32ui.IDD_PP_FORMAT, caption=caption) + + def OnInitDialog(self): + try: + if self.scintillaClass is None: + import control + sc = control.CScintillaEdit + else: + sc = self.scintillaClass + + self.scintilla = sc() + style = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.ES_MULTILINE + # Convert the rect size + rect = self.MapDialogRect( (5, 5, 120, 75)) + self.scintilla.CreateWindow(style, rect, self, 111) + self.HookNotify(self.OnBraceMatch, SCN_CHECKBRACE) + self.scintilla.HookKeyStroke(self.OnEsc, 27) + self.scintilla.SCISetViewWS(1) + self.pos_bstart = self.pos_bend = self.pos_bbad = 0 + + colorizer = self.scintilla._GetColorizer() + text = colorizer.GetSampleText() + items = string.split(text, '|', 2) + pos = len(items[0]) + self.scintilla.SCIAddText(string.join(items,'')) + self.scintilla.SetSel(pos, pos) + self.scintilla.ApplyFormattingStyles() + self.styles = self.scintilla._GetColorizer().styles + + self.cbo = self.GetDlgItem(win32ui.IDC_COMBO1) + for c in paletteVGA: + self.cbo.AddString(c[0]) + + self.cboBoldItalic = self.GetDlgItem(win32ui.IDC_COMBO2) + for item in ["Bold Italic", "Bold", "Italic", "Regular"]: + self.cboBoldItalic.InsertString(0, item) + + self.butIsDefault = self.GetDlgItem(win32ui.IDC_CHECK1) + self.butIsDefaultBackground = self.GetDlgItem(win32ui.IDC_CHECK2) + self.listbox = self.GetDlgItem(win32ui.IDC_LIST1) + self.HookCommand(self.OnListCommand, win32ui.IDC_LIST1) + names = self.styles.keys() + names.sort() + for name in names: + if self.styles[name].aliased is None: + self.listbox.AddString(name) + self.listbox.SetCurSel(0) + + idc = win32ui.IDC_RADIO1 + if not self.scintilla._GetColorizer().bUseFixed: idc = win32ui.IDC_RADIO2 + self.GetDlgItem(idc).SetCheck(1) + self.UpdateUIForStyle(self.styles[names[0]]) + + self.scintilla.HookFormatter(self) + self.HookCommand(self.OnButDefaultFixedFont, win32ui.IDC_BUTTON1) + self.HookCommand(self.OnButDefaultPropFont, win32ui.IDC_BUTTON2) + self.HookCommand(self.OnButThisFont, win32ui.IDC_BUTTON3) + self.HookCommand(self.OnButUseDefaultFont, win32ui.IDC_CHECK1) + self.HookCommand(self.OnButThisBackground, win32ui.IDC_BUTTON4) + self.HookCommand(self.OnButUseDefaultBackground, win32ui.IDC_CHECK2) + self.HookCommand(self.OnStyleUIChanged, win32ui.IDC_COMBO1) + self.HookCommand(self.OnStyleUIChanged, win32ui.IDC_COMBO2) + self.HookCommand(self.OnButFixedOrDefault, win32ui.IDC_RADIO1) + self.HookCommand(self.OnButFixedOrDefault, win32ui.IDC_RADIO2) + except: + import traceback + traceback.print_exc() + + def OnEsc(self, ch): + self.GetParent().EndDialog(win32con.IDCANCEL) + + def OnBraceMatch(self, std, extra): + import pywin.scintilla.view + pywin.scintilla.view.DoBraceMatch(self.scintilla) + + def GetSelectedStyle(self): + return self.styles[self.listbox.GetText(self.listbox.GetCurSel())] + + def _DoButDefaultFont(self, extra_flags, attr): + baseFormat = getattr(self.scintilla._GetColorizer(), attr) + flags = extra_flags | win32con.CF_SCREENFONTS | win32con.CF_EFFECTS | win32con.CF_FORCEFONTEXIST + d=win32ui.CreateFontDialog(baseFormat, flags, None, self) + if d.DoModal()==win32con.IDOK: + setattr(self.scintilla._GetColorizer(), attr, d.GetCharFormat()) + self.OnStyleUIChanged(0, win32con.BN_CLICKED) + + def OnButDefaultFixedFont(self, id, code): + if code==win32con.BN_CLICKED: + self._DoButDefaultFont(win32con.CF_FIXEDPITCHONLY, "baseFormatFixed") + return 1 + + def OnButDefaultPropFont(self, id, code): + if code==win32con.BN_CLICKED: + self._DoButDefaultFont(win32con.CF_SCALABLEONLY, "baseFormatProp") + return 1 + + def OnButFixedOrDefault(self, id, code): + if code==win32con.BN_CLICKED: + bUseFixed = id == win32ui.IDC_RADIO1 + self.GetDlgItem(win32ui.IDC_RADIO1).GetCheck() != 0 + self.scintilla._GetColorizer().bUseFixed = bUseFixed + self.scintilla.ApplyFormattingStyles(0) + return 1 + + def OnButThisFont(self, id, code): + if code==win32con.BN_CLICKED: + flags = win32con.CF_SCREENFONTS | win32con.CF_EFFECTS | win32con.CF_FORCEFONTEXIST + style = self.GetSelectedStyle() + # If the selected style is based on the default, we need to apply + # the default to it. + def_format = self.scintilla._GetColorizer().GetDefaultFormat() + format = style.GetCompleteFormat(def_format) + d=win32ui.CreateFontDialog(format, flags, None, self) + if d.DoModal()==win32con.IDOK: + style.format = d.GetCharFormat() + self.scintilla.ApplyFormattingStyles(0) + return 1 + + def OnButUseDefaultFont(self, id, code): + if code == win32con.BN_CLICKED: + isDef = self.butIsDefault.GetCheck() + self.GetDlgItem(win32ui.IDC_BUTTON3).EnableWindow(not isDef) + if isDef: # Being reset to the default font. + style = self.GetSelectedStyle() + style.ForceAgainstDefault() + self.UpdateUIForStyle(style) + self.scintilla.ApplyFormattingStyles(0) + else: + # User wants to override default - + # do nothing! + pass + + def OnButThisBackground(self, id, code): + if code==win32con.BN_CLICKED: + style = self.GetSelectedStyle() + bg = win32api.RGB(0xff, 0xff, 0xff) + if style.background is not None: + bg = style.background + d=win32ui.CreateColorDialog(bg, 0, self) + if d.DoModal()==win32con.IDOK: + style.background = d.GetColor() + self.scintilla.ApplyFormattingStyles(0) + return 1 + + def OnButUseDefaultBackground(self, id, code): + if code == win32con.BN_CLICKED: + isDef = self.butIsDefaultBackground.GetCheck() + self.GetDlgItem(win32ui.IDC_BUTTON4).EnableWindow(not isDef) + if isDef: # Being reset to the default color + style = self.GetSelectedStyle() + style.background = None + self.UpdateUIForStyle(style) + self.scintilla.ApplyFormattingStyles(0) + else: + # User wants to override default - + # do nothing! + pass + + + def OnListCommand(self, id, code): + if code==win32con.LBN_SELCHANGE: + style = self.GetSelectedStyle() + self.UpdateUIForStyle(style) + return 1 + + def UpdateUIForStyle(self, style ): + format = style.format + sel = 0 + for c in paletteVGA: + if format[4] == BGR(c[3], c[2], c[1]): +# print "Style", style.name, "is", c[0] + break + sel = sel + 1 + else: + sel = -1 + self.cbo.SetCurSel(sel) + self.butIsDefault.SetCheck(style.IsBasedOnDefault()) + self.GetDlgItem(win32ui.IDC_BUTTON3).EnableWindow(not style.IsBasedOnDefault()) + + self.butIsDefaultBackground.SetCheck(style.background is None) + self.GetDlgItem(win32ui.IDC_BUTTON4).EnableWindow(style.background is not None) + + bold = format[1] & win32con.CFE_BOLD != 0; italic = format[1] & win32con.CFE_ITALIC != 0 + self.cboBoldItalic.SetCurSel( bold*2 + italic ) + + def OnStyleUIChanged(self, id, code): + if code in [win32con.BN_CLICKED, win32con.CBN_SELCHANGE]: + style = self.GetSelectedStyle() + self.ApplyUIFormatToStyle(style) + self.scintilla.ApplyFormattingStyles(0) + return 0 + return 1 + + def ApplyUIFormatToStyle(self, style): + format = style.format + color = paletteVGA[self.cbo.GetCurSel()] + effect = 0 + sel = self.cboBoldItalic.GetCurSel() + if sel==0: + effect = 0 + elif sel==1: + effect = win32con.CFE_ITALIC + elif sel==2: + effect = win32con.CFE_BOLD + else: + effect = win32con.CFE_BOLD | win32con.CFE_ITALIC + maskFlags=format[0]|win32con.CFM_COLOR|win32con.CFM_BOLD|win32con.CFM_ITALIC + style.format = (maskFlags, effect, style.format[2], style.format[3], BGR(color[3], color[2], color[1])) + style.format[5:] + + def OnOK(self): + self.scintilla._GetColorizer().SavePreferences() + return 1 + +def test(): + page = ColorEditorPropertyPage() + sheet = pywin.mfc.dialog.PropertySheet("Test") + sheet.AddPage(page) + sheet.CreateWindow() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/control.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/control.py new file mode 100644 index 000000000..757b2d514 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/control.py @@ -0,0 +1,417 @@ +# An Python interface to the Scintilla control. +# +# Exposes Python classes that allow you to use Scintilla as +# a "standard" MFC edit control (eg, control.GetTextLength(), control.GetSel() +# plus many Scintilla specific features (eg control.SCIAddStyledText()) + +from pywin.mfc import window +import win32con +import win32ui +import win32api +import array +import struct +import string +import os +from scintillacon import * + +# Load Scintilla.dll to get access to the control. +# We expect to find this in the same directory as win32ui.pyd +dllid = None +if win32ui.debug: # If running _d version of Pythonwin... + try: + dllid = win32api.LoadLibrary(os.path.join(os.path.split(win32ui.__file__)[0], "Scintilla_d.DLL")) + except win32api.error: # Not there - we dont _need_ a debug ver, so ignore this error. + pass +if dllid is None: + try: + dllid = win32api.LoadLibrary(os.path.join(os.path.split(win32ui.__file__)[0], "Scintilla.DLL")) + except win32api.error: + pass +if dllid is None: + # Still not there - lets see if Windows can find it by searching? + dllid = win32api.LoadLibrary("Scintilla.DLL") + +EM_GETTEXTRANGE = 1099 +EM_EXLINEFROMCHAR = 1078 +EM_FINDTEXTEX = 1103 +EM_GETSELTEXT = 1086 +EM_EXSETSEL = win32con.WM_USER + 55 + +class ScintillaNotification: + def __init__(self, **args): + self.__dict__.update(args) + +class ScintillaControlInterface: + def SCIUnpackNotifyMessage(self, msg): + format = "iiiiPiiiiiiiii" + bytes = win32ui.GetBytes( msg, struct.calcsize(format) ) + position, ch, modifiers, modificationType, text_ptr, \ + length, linesAdded, msg, wParam, lParam, line, \ + foldLevelNow, foldLevelPrev, margin \ + = struct.unpack(format, bytes) + return ScintillaNotification(position=position,ch=ch, + modifiers=modifiers, modificationType=modificationType, + text_ptr = text_ptr, length=length, linesAdded=linesAdded, + msg = msg, wParam = wParam, lParam = lParam, + line = line, foldLevelNow = foldLevelNow, foldLevelPrev = foldLevelPrev, + margin = margin) + + def SCIAddText(self, text): + self.SendMessage(SCI_ADDTEXT, buffer(text)) + def SCIAddStyledText(self, text, style = None): + # If style is None, text is assumed to be a "native" Scintilla buffer. + # If style is specified, text is a normal string, and the style is + # assumed to apply to the entire string. + if style is not None: + text = map(lambda char, style=style: char+chr(style), text) + text = string.join(text, '') + self.SendMessage(SCI_ADDSTYLEDTEXT, buffer(text)) + def SCIInsertText(self, text, pos=-1): + sma = array.array('c', text+"\0") + (a,l) = sma.buffer_info() + self.SendScintilla(SCI_INSERTTEXT, pos, a) + def SCISetSavePoint(self): + self.SendScintilla(SCI_SETSAVEPOINT) + def SCISetUndoCollection(self, collectFlag): + self.SendScintilla(SCI_SETUNDOCOLLECTION, collectFlag) + def SCIBeginUndoAction(self): + self.SendScintilla(SCI_BEGINUNDOACTION) + def SCIEndUndoAction(self): + self.SendScintilla(SCI_ENDUNDOACTION) + + def SCIGetCurrentPos(self): + return self.SendScintilla(SCI_GETCURRENTPOS) + def SCIGetCharAt(self, pos): + # Must ensure char is unsigned! + return chr(self.SendScintilla(SCI_GETCHARAT, pos) & 0xFF) + def SCIGotoLine(self, line): + self.SendScintilla(SCI_GOTOLINE, line) + def SCIBraceMatch(self, pos, maxReStyle): + return self.SendScintilla(SCI_BRACEMATCH, pos, maxReStyle) + def SCIBraceHighlight(self, pos, posOpposite): + return self.SendScintilla(SCI_BRACEHIGHLIGHT, pos, posOpposite) + def SCIBraceBadHighlight(self, pos): + return self.SendScintilla(SCI_BRACEBADLIGHT, pos) + + #################################### + # Styling +# def SCIColourise(self, start=0, end=-1): +# NOTE - dependent on of we use builtin lexer, so handled below. + def SCIGetEndStyled(self): + return self.SendScintilla(SCI_GETENDSTYLED) + def SCIStyleSetFore(self, num, v): + return self.SendScintilla(SCI_STYLESETFORE, num, v) + def SCIStyleSetBack(self, num, v): + return self.SendScintilla(SCI_STYLESETBACK, num, v) + def SCIStyleSetEOLFilled(self, num, v): + return self.SendScintilla(SCI_STYLESETEOLFILLED, num, v) + def SCIStyleSetFont(self, num, name, characterset=0): + buff = array.array('c', name + "\0") + addressBuffer = buff.buffer_info()[0] + self.SendScintilla(SCI_STYLESETFONT, num, addressBuffer) + self.SendScintilla(SCI_STYLESETCHARACTERSET, num, characterset) + def SCIStyleSetBold(self, num, bBold): + self.SendScintilla(SCI_STYLESETBOLD, num, bBold) + def SCIStyleSetItalic(self, num, bItalic): + self.SendScintilla(SCI_STYLESETITALIC, num, bItalic) + def SCIStyleSetSize(self, num, size): + self.SendScintilla(SCI_STYLESETSIZE, num, size) + def SCIGetViewWS(self): + return self.SendScintilla(SCI_GETVIEWWS) + def SCISetViewWS(self, val): + self.SendScintilla(SCI_SETVIEWWS, not (val==0)) + self.InvalidateRect() + def SCISetIndentationGuides(self, val): + self.SendScintilla(SCI_SETINDENTATIONGUIDES, val) + def SCIGetIndentationGuides(self): + return self.SendScintilla(SCI_GETINDENTATIONGUIDES) + def SCISetIndent(self, val): + self.SendScintilla(SCI_SETINDENT, val) + def SCIGetIndent(self, val): + return self.SendScintilla(SCI_GETINDENT) + + def SCIGetViewEOL(self): + return self.SendScintilla(SCI_GETVIEWEOL) + def SCISetViewEOL(self, val): + self.SendScintilla(SCI_SETVIEWEOL, not(val==0)) + self.InvalidateRect() + def SCISetTabWidth(self, width): + self.SendScintilla(SCI_SETTABWIDTH, width, 0) + def SCIStartStyling(self, pos, mask): + self.SendScintilla(SCI_STARTSTYLING, pos, mask) + def SCISetStyling(self, pos, attr): + self.SendScintilla(SCI_SETSTYLING, pos, attr) + def SCISetStylingEx(self, ray): # ray is an array. + address, length = ray.buffer_info() + self.SendScintilla(SCI_SETSTYLINGEX, length, address) + def SCIGetStyleAt(self, pos): + return self.SendScintilla(SCI_GETSTYLEAT, pos) + def SCISetMarginWidth(self, width): + self.SendScintilla(SCI_SETMARGINWIDTHN, 1, width) + def SCISetMarginWidthN(self, n, width): + self.SendScintilla(SCI_SETMARGINWIDTHN, n, width) + def SCISetFoldFlags(self, flags): + self.SendScintilla(SCI_SETFOLDFLAGS, flags) + # Markers + def SCIMarkerDefineAll(self, markerNum, markerType, fore, back): + self.SCIMarkerDefine(markerNum, markerType) + self.SCIMarkerSetFore(markerNum, fore) + self.SCIMarkerSetBack(markerNum, back) + def SCIMarkerDefine(self, markerNum, markerType): + self.SendScintilla(SCI_MARKERDEFINE, markerNum, markerType) + def SCIMarkerSetFore(self, markerNum, fore): + self.SendScintilla(SCI_MARKERSETFORE, markerNum, fore) + def SCIMarkerSetBack(self, markerNum, back): + self.SendScintilla(SCI_MARKERSETBACK, markerNum, back) + def SCIMarkerAdd(self, lineNo, markerNum): + self.SendScintilla(SCI_MARKERADD, lineNo, markerNum) + def SCIMarkerDelete(self, lineNo, markerNum): + self.SendScintilla(SCI_MARKERDELETE, lineNo, markerNum) + def SCIMarkerDeleteAll(self, markerNum=-1): + self.SendScintilla(SCI_MARKERDELETEALL, markerNum) + def SCIMarkerGet(self, lineNo): + return self.SendScintilla(SCI_MARKERGET, lineNo) + def SCIMarkerNext(self, lineNo, markerNum): + return self.SendScintilla(SCI_MARKERNEXT, lineNo, markerNum) + def SCICancel(self): + self.SendScintilla(SCI_CANCEL) + # AutoComplete + def SCIAutoCShow(self, text): + if type(text) in [type([]), type(())]: + text = string.join(text) + buff = array.array('c', text + "\0") + addressBuffer = buff.buffer_info()[0] + return self.SendScintilla(SCI_AUTOCSHOW, 0, addressBuffer) + def SCIAutoCCancel(self): + self.SendScintilla(SCI_AUTOCCANCEL) + def SCIAutoCActive(self): + return self.SendScintilla(SCI_AUTOCACTIVE) + def SCIAutoCComplete(self): + return self.SendScintilla(SCI_AUTOCCOMPLETE) + def SCIAutoCStops(self, stops): + buff = array.array('c', stops + "\0") + addressBuffer = buff.buffer_info()[0] + self.SendScintilla(SCI_AUTOCSTOPS, 0, addressBuffer) + def SCIAutoCSetAutoHide(self, hide): + self.SendScintilla(SCI_AUTOCSETAUTOHIDE, hide) + def SCIAutoCSetFillups(self, fillups): + self.SendScintilla(SCI_AUTOCSETFILLUPS, fillups) + # Call tips + def SCICallTipShow(self, text, pos=-1): + if pos==-1: pos = self.GetSel()[0] + if isinstance(text, unicode): + # I'm really not sure what the correct encoding + # to use is - but it has gotta be better than total + # failure due to the array module + text = text.encode("mbcs") + buff = array.array('c', text + "\0") + addressBuffer = buff.buffer_info()[0] + self.SendScintilla(SCI_CALLTIPSHOW, pos, addressBuffer) + def SCICallTipCancel(self): + self.SendScintilla(SCI_CALLTIPCANCEL) + def SCICallTipActive(self): + return self.SendScintilla(SCI_CALLTIPACTIVE) + def SCICallTipPosStart(self): + return self.SendScintilla(SCI_CALLTIPPOSSTART) + def SCINewline(self): + self.SendScintilla(SCI_NEWLINE) + # Lexer etc + def SCISetKeywords(self, keywords, kw_list_no = 0): + ar = array.array('c', keywords+"\0") + (a,l) = ar.buffer_info() + self.SendScintilla(SCI_SETKEYWORDS, kw_list_no, a) + def SCISetProperty(self, name, value): + name_buff = array.array('c', name + "\0") + val_buff = array.array("c", str(value) + "\0") + address_name_buffer = name_buff.buffer_info()[0] + address_val_buffer = val_buff.buffer_info()[0] + self.SendScintilla(SCI_SETPROPERTY, address_name_buffer, address_val_buffer) + def SCISetStyleBits(self, nbits): + self.SendScintilla(SCI_SETSTYLEBITS, nbits) + # Folding + def SCIGetFoldLevel(self, lineno): + return self.SendScintilla(SCI_GETFOLDLEVEL, lineno) + def SCIToggleFold(self, lineno): + return self.SendScintilla(SCI_TOGGLEFOLD, lineno) + def SCIEnsureVisible(self, lineno): + self.SendScintilla(SCI_ENSUREVISIBLE, lineno) + def SCIGetFoldExpanded(self, lineno): + return self.SendScintilla(SCI_GETFOLDEXPANDED, lineno) + # right edge + def SCISetEdgeColumn(self, edge): + self.SendScintilla(SCI_SETEDGECOLUMN, edge) + def SCIGetEdgeColumn(self): + return self.SendScintilla(SCI_GETEDGECOLUMN) + def SCISetEdgeMode(self, mode): + self.SendScintilla(SCI_SETEDGEMODE, mode) + def SCIGetEdgeMode(self): + return self.SendScintilla(SCI_GETEDGEMODE) + def SCISetEdgeColor(self, color): + self.SendScintilla(SCI_SETEDGECOLOUR, color) + def SCIGetEdgeColor(self): + return self.SendScintilla(SCI_GETEDGECOLOR) + # Multi-doc + def SCIGetDocPointer(self): + return self.SendScintilla(SCI_GETDOCPOINTER) + def SCISetDocPointer(self, p): + return self.SendScintilla(SCI_SETDOCPOINTER, 0, p) + def SCISetWrapMode(self, mode): + return self.SendScintilla(SCI_SETWRAPMODE, mode) + def SCIGetWrapMode(self): + return self.SendScintilla(SCI_GETWRAPMODE) + +class CScintillaEditInterface(ScintillaControlInterface): + def close(self): + self.colorizer = None + def Clear(self): + self.SendScintilla(win32con.WM_CLEAR) + def Clear(self): + self.SendScintilla(win32con.WM_CLEAR) + def FindText(self, flags, range, findText): + buff = array.array('c', findText + "\0") + addressBuffer = buff.buffer_info()[0] + ft = struct.pack('llLll', range[0], range[1], addressBuffer, 0, 0) + ftBuff = array.array('c', ft) + addressFtBuff = ftBuff.buffer_info()[0] + rc = self.SendScintilla(EM_FINDTEXTEX, flags, addressFtBuff) + ftUnpacked = struct.unpack('llLll', ftBuff.tostring()) + return rc, (ftUnpacked[3], ftUnpacked[4]) + + def GetSel(self): + currentPos = self.SendScintilla(SCI_GETCURRENTPOS) + anchorPos = self.SendScintilla(SCI_GETANCHOR) + if currentPos < anchorPos: + return (currentPos, anchorPos) + else: + return (anchorPos, currentPos) + return currentPos; + + def GetSelText(self): + start, end = self.GetSel() + txtBuf = array.array('c', " " * ((end-start)+1)) + addressTxtBuf = txtBuf.buffer_info()[0] + self.SendScintilla(EM_GETSELTEXT, 0, addressTxtBuf) + return txtBuf.tostring()[:-1] + + def SetSel(self, start=0, end=None): + if type(start)==type(()): + assert end is None, "If you pass a point in the first param, the second must be None" + start, end = start + elif end is None: + end = start + if start < 0: start = self.GetTextLength() + if end < 0: end = self.GetTextLength() + assert start <= self.GetTextLength(), "The start postion is invalid (%d/%d)" % (start, self.GetTextLength()) + assert end <= self.GetTextLength(), "The end postion is invalid (%d/%d)" % (end, self.GetTextLength()) + cr = struct.pack('ll', start, end) + crBuff = array.array('c', cr) + addressCrBuff = crBuff.buffer_info()[0] + rc = self.SendScintilla(EM_EXSETSEL, 0, addressCrBuff) + + def GetLineCount(self): + return self.SendScintilla(win32con.EM_GETLINECOUNT) + + def LineFromChar(self, charPos=-1): + if charPos==-1: charPos = self.GetSel()[0] + assert charPos >= 0 and charPos <= self.GetTextLength(), "The charPos postion (%s) is invalid (max=%s)" % (charPos, self.GetTextLength()) + #return self.SendScintilla(EM_EXLINEFROMCHAR, charPos) + # EM_EXLINEFROMCHAR puts charPos in lParam, not wParam + return self.SendScintilla(EM_EXLINEFROMCHAR, 0, charPos) + + def LineIndex(self, line): + return self.SendScintilla(win32con.EM_LINEINDEX, line) + + def ScrollCaret(self): + return self.SendScintilla(win32con.EM_SCROLLCARET) + + def GetCurLineNumber(self): + return self.LineFromChar(self.SCIGetCurrentPos()) + + def GetTextLength(self): + return self.SendScintilla(win32con.WM_GETTEXTLENGTH) + + def GetTextRange(self, start = 0, end = -1): + if end == -1: end = self.SendScintilla(win32con.WM_GETTEXTLENGTH) + assert end>=start, "Negative index requested (%d/%d)" % (start, end) + assert start >= 0 and start <= self.GetTextLength(), "The start postion is invalid" + assert end >= 0 and end <= self.GetTextLength(), "The end postion is invalid" + initer = "=" * (end - start + 1) + buff = array.array('c', initer) + addressBuffer = buff.buffer_info()[0] + tr = struct.pack('llL', start, end, addressBuffer) + trBuff = array.array('c', tr) + addressTrBuff = trBuff.buffer_info()[0] + numChars = self.SendScintilla(EM_GETTEXTRANGE, 0, addressTrBuff) + return buff.tostring()[:numChars] + + def ReplaceSel(self, str): + buff = array.array('c', str + "\0") + self.SendScintilla(win32con.EM_REPLACESEL, 0, buff.buffer_info()[0]); + buff = None + + def GetLine(self, line=-1): + if line == -1: line = self.GetCurLineNumber() + start = self.LineIndex(line) + end = self.LineIndex(line+1) + return self.GetTextRange(start, end) + + def SetReadOnly(self, flag = 1): + return self.SendScintilla(win32con.EM_SETREADONLY, flag) + + def LineScroll(self, lines, cols=0): + return self.SendScintilla(win32con.EM_LINESCROLL, cols, lines) + + def GetFirstVisibleLine(self): + return self.SendScintilla(win32con.EM_GETFIRSTVISIBLELINE) + + def SetWordWrap(self, mode): + if mode <> win32ui.CRichEditView_WrapNone: + raise ValueError, "We dont support word-wrap (I dont think :-)" + +class CScintillaColorEditInterface(CScintillaEditInterface): + ################################ + # Plug-in colorizer support + def _GetColorizer(self): + if not hasattr(self, "colorizer"): + self.colorizer = self._MakeColorizer() + return self.colorizer + def _MakeColorizer(self): + # Give parent a chance to hook. + parent_func = getattr(self.GetParentFrame(), "_MakeColorizer", None) + if parent_func is not None: + return parent_func() + import formatter +## return formatter.PythonSourceFormatter(self) + return formatter.BuiltinPythonSourceFormatter(self) + + def Colorize(self, start=0, end=-1): + c = self._GetColorizer() + if c is not None: c.Colorize(start, end) + + def ApplyFormattingStyles(self, bReload=1): + c = self._GetColorizer() + if c is not None: c.ApplyFormattingStyles(bReload) + + # The Parent window will normally hook + def HookFormatter(self, parent = None): + c = self._GetColorizer() + if c is not None: # No need if we have no color! + c.HookFormatter(parent) + +class CScintillaEdit(window.Wnd, CScintillaColorEditInterface): + def __init__(self, wnd=None): + if wnd is None: + wnd = win32ui.CreateWnd() + window.Wnd.__init__(self, wnd) + def SendScintilla(self, msg, w=0, l=0): + return self.SendMessage(msg, w, l) + def CreateWindow(self, style, rect, parent, id): + self._obj_.CreateWindow( + "Scintilla", + "Scintilla", + style, + rect, + parent, + id, + None) + diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/document.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/document.py new file mode 100644 index 000000000..9150562d2 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/document.py @@ -0,0 +1,163 @@ +import win32ui +from pywin.mfc import docview +from pywin import is_platform_unicode, default_platform_encoding, default_scintilla_encoding +from scintillacon import * +import win32con +import string +import array + +ParentScintillaDocument=docview.Document +class CScintillaDocument(ParentScintillaDocument): + "A SyntEdit document. " + def DeleteContents(self): + pass + + def OnOpenDocument(self, filename): + # init data members + #print "Opening", filename + self.SetPathName(filename) # Must set this early! + try: + if is_platform_unicode: + # Scintilla in UTF-8 mode - translate accordingly. + import codecs + f = codecs.open(filename, 'rb', default_platform_encoding) + else: + f = open(filename, 'rb') + try: + text = f.read() + finally: + f.close() + if is_platform_unicode: + # Translate from locale-specific (MCBS) encoding to UTF-8 for Scintilla + text = text.encode(default_scintilla_encoding) + except IOError: + win32ui.MessageBox("Could not load the file from %s" % filename) + return 0 + + self._SetLoadedText(text) +## if self.GetFirstView(): +## self.GetFirstView()._SetLoadedText(text) +## self.SetModifiedFlag(0) # No longer dirty + return 1 + + def SaveFile(self, fileName): + view = self.GetFirstView() + ok = view.SaveTextFile(fileName) + if ok: + view.SCISetSavePoint() + return ok + + def ApplyFormattingStyles(self): + self._ApplyOptionalToViews("ApplyFormattingStyles") + + # ##################### + # File related functions + # Helper to transfer text from the MFC document to the control. + def _SetLoadedText(self, text): + view = self.GetFirstView() + if view.IsWindow(): + # Turn off undo collection while loading + view.SendScintilla(SCI_SETUNDOCOLLECTION, 0, 0) + # Make sure the control isnt read-only + view.SetReadOnly(0) + + doc = self + view.SendScintilla(SCI_CLEARALL) + view.SendMessage(SCI_ADDTEXT, buffer(text)) + view.SendScintilla(SCI_SETUNDOCOLLECTION, 1, 0) + view.SendScintilla(win32con.EM_EMPTYUNDOBUFFER, 0, 0) + + def FinalizeViewCreation(self, view): + pass + + def HookViewNotifications(self, view): + parent = view.GetParentFrame() + parent.HookNotify(ViewNotifyDelegate(self, "OnBraceMatch"), SCN_CHECKBRACE) + parent.HookNotify(ViewNotifyDelegate(self, "OnMarginClick"), SCN_MARGINCLICK) + parent.HookNotify(ViewNotifyDelegate(self, "OnNeedShown"), SCN_NEEDSHOWN) + + parent.HookNotify(DocumentNotifyDelegate(self, "OnSavePointReached"), SCN_SAVEPOINTREACHED) + parent.HookNotify(DocumentNotifyDelegate(self, "OnSavePointLeft"), SCN_SAVEPOINTLEFT) + parent.HookNotify(DocumentNotifyDelegate(self, "OnModifyAttemptRO"), SCN_MODIFYATTEMPTRO) + # Tell scintilla what characters should abort auto-complete. + view.SCIAutoCStops(string.whitespace+"()[]:;+-/*=\\?'!#@$%^&,<>\"'|" ) + + if view != self.GetFirstView(): + view.SCISetDocPointer(self.GetFirstView().SCIGetDocPointer()) + + + def OnSavePointReached(self, std, extra): + self.SetModifiedFlag(0) + + def OnSavePointLeft(self, std, extra): + self.SetModifiedFlag(1) + + def OnModifyAttemptRO(self, std, extra): + self.MakeDocumentWritable() + + # All Marker functions are 1 based. + def MarkerAdd( self, lineNo, marker ): + self.GetEditorView().SCIMarkerAdd(lineNo-1, marker) + + def MarkerCheck(self, lineNo, marker ): + v = self.GetEditorView() + lineNo = lineNo - 1 # Make 0 based + markerState = v.SCIMarkerGet(lineNo) + return markerState & (1<= 0: + rc = FOUND_NORMAL + lineno = control.LineFromChar(posFind) + control.SCIEnsureVisible(lineno) + control.SetSel(foundSel) + control.SetFocus() + win32ui.SetStatusText(win32ui.LoadString(afxres.AFX_IDS_IDLEMESSAGE)) + if rc == FOUND_NOTHING and lastSearch.acrossFiles: + # Loop around all documents. First find this document. + try: + try: + doc = control.GetDocument() + except AttributeError: + try: + doc = control.GetParent().GetDocument() + except AttributeError: + print "Cant find a document for the control!" + doc = None + if doc is not None: + template = doc.GetDocTemplate() + alldocs = template.GetDocumentList() + mypos = lookpos = alldocs.index(doc) + while 1: + lookpos = (lookpos+1) % len(alldocs) + if lookpos == mypos: + break + view = alldocs[lookpos].GetFirstView() + posFind, foundSel = view.FindText(flags, (0, view.GetTextLength()), searchParams.findText) + if posFind >= 0: + nChars = foundSel[1]-foundSel[0] + lineNo = view.LineFromChar(posFind) # zero based. + lineStart = view.LineIndex(lineNo) + colNo = posFind - lineStart # zero based. + scriptutils.JumpToDocument(alldocs[lookpos].GetPathName(), lineNo+1, colNo+1, nChars) + rc = FOUND_NEXT_FILE + break + except win32ui.error: + pass + if rc == FOUND_NOTHING: + # Loop around this control - attempt to find from the start of the control. + posFind, foundSel = control.FindText(flags, (0, sel[0]-1), searchParams.findText) + if posFind >= 0: + control.SCIEnsureVisible(control.LineFromChar(foundSel[0])) + control.SetSel(foundSel) + control.SetFocus() + win32ui.SetStatusText("Not found! Searching from the top of the file.") + rc = FOUND_LOOPED_BACK + else: + lastSearch.sel=-1,-1 + win32ui.SetStatusText("Can not find '%s'" % searchParams.findText ) + + if rc != FOUND_NOTHING: + lastSearch.sel = foundSel + + if lastSearch.remember: + defaultSearch = lastSearch + return rc + +def _ReplaceIt(control): + control = _GetControl(control) + statusText = "Can not find '%s'." % lastSearch.findText + rc = FOUND_NOTHING + if control is not None and lastSearch.sel != (-1,-1): + control.ReplaceSel(lastSearch.replaceText) + rc = FindNext() + if rc !=FOUND_NOTHING: + statusText = win32ui.LoadString(afxres.AFX_IDS_IDLEMESSAGE) + win32ui.SetStatusText(statusText) + return rc + +class FindReplaceDialog(dialog.Dialog): + def __init__(self): + dialog.Dialog.__init__(self,self._GetDialogTemplate()) + self.HookCommand(self.OnFindNext, 109) + + def OnInitDialog(self): + self.editFindText = self.GetDlgItem(102) + self.butMatchWords = self.GetDlgItem(105) + self.butMatchCase = self.GetDlgItem(107) + self.butKeepDialogOpen = self.GetDlgItem(115) + self.butAcrossFiles = self.GetDlgItem(116) + self.butRemember = self.GetDlgItem(117) + + self.editFindText.SetWindowText(defaultSearch.findText) + control = _GetControl() + # If we have a selection, default to that. + sel = control.GetSelText() + if (len(sel) != 0): + self.editFindText.SetWindowText(sel) + if (defaultSearch.remember): + defaultSearch.findText = sel + + self.editFindText.SetSel(0, -2) + self.editFindText.SetFocus() + self.butMatchWords.SetCheck(defaultSearch.matchWords) + self.butMatchCase.SetCheck(defaultSearch.matchCase) + self.butKeepDialogOpen.SetCheck(defaultSearch.keepDialogOpen) + self.butAcrossFiles.SetCheck(defaultSearch.acrossFiles) + self.butRemember.SetCheck(defaultSearch.remember) + return dialog.Dialog.OnInitDialog(self) + + def OnDestroy(self, msg): + global curDialog + curDialog = None + return dialog.Dialog.OnDestroy(self, msg) + + def DoFindNext(self): + params = SearchParams() + params.findText = self.editFindText.GetWindowText() + params.matchCase = self.butMatchCase.GetCheck() + params.matchWords = self.butMatchWords.GetCheck() + params.acrossFiles = self.butAcrossFiles.GetCheck() + params.remember = self.butRemember.GetCheck() + return _FindIt(None, params) + + def OnFindNext(self, id, code): + if not self.editFindText.GetWindowText(): + win32api.MessageBeep() + return + if self.DoFindNext() != FOUND_NOTHING and not self.butKeepDialogOpen.GetCheck(): + self.DestroyWindow() + +class FindDialog(FindReplaceDialog): + def _GetDialogTemplate(self): + style = win32con.DS_MODALFRAME | win32con.WS_POPUP | win32con.WS_VISIBLE | win32con.WS_CAPTION | win32con.WS_SYSMENU | win32con.DS_SETFONT + visible = win32con.WS_CHILD | win32con.WS_VISIBLE + dt = [ + ["Find", (0, 2, 240, 75), style, None, (8, "MS Sans Serif")], + ["Static", "Fi&nd What:", 101, (5, 8, 40, 10), visible], + ["Edit", "", 102, (50, 7, 120, 12), visible | win32con.WS_BORDER | win32con.WS_TABSTOP | win32con.ES_AUTOHSCROLL], + ["Button", "Match &whole word only", 105, (5, 23, 100, 10), visible | win32con.BS_AUTOCHECKBOX | win32con.WS_TABSTOP], + ["Button", "Match &case", 107, (5, 33, 100, 10), visible | win32con.BS_AUTOCHECKBOX | win32con.WS_TABSTOP], + ["Button", "Keep &dialog open", 115, (5, 43, 100, 10), visible | win32con.BS_AUTOCHECKBOX | win32con.WS_TABSTOP], + ["Button", "Across &open files", 116, (5, 52, 100, 10), visible | win32con.BS_AUTOCHECKBOX | win32con.WS_TABSTOP], + ["Button", "&Remember as default search", 117, (5, 61, 150, 10), visible | win32con.BS_AUTOCHECKBOX | win32con.WS_TABSTOP], + ["Button", "&Find Next", 109, (185, 5, 50, 14), visible | win32con.BS_DEFPUSHBUTTON | win32con.WS_TABSTOP], + ["Button", "Cancel", win32con.IDCANCEL, (185, 23, 50, 14), visible | win32con.WS_TABSTOP], + ] + return dt + +class ReplaceDialog(FindReplaceDialog): + def _GetDialogTemplate(self): + style = win32con.DS_MODALFRAME | win32con.WS_POPUP | win32con.WS_VISIBLE | win32con.WS_CAPTION | win32con.WS_SYSMENU | win32con.DS_SETFONT + visible = win32con.WS_CHILD | win32con.WS_VISIBLE + dt = [ + ["Replace", (0, 2, 240, 95), style, None, (8, "MS Sans Serif")], + ["Static", "Fi&nd What:", 101, (5, 8, 40, 10), visible], + ["Edit", "", 102, (60, 7, 110, 12), visible | win32con.WS_BORDER | win32con.WS_TABSTOP | win32con.ES_AUTOHSCROLL], + ["Static", "Re&place with:", 103, (5, 25, 50, 10), visible], + ["Edit", "", 104, (60, 24, 110, 12), visible | win32con.WS_BORDER | win32con.WS_TABSTOP | win32con.ES_AUTOHSCROLL], + ["Button", "Match &whole word only", 105, (5, 42, 100, 10), visible | win32con.BS_AUTOCHECKBOX | win32con.WS_TABSTOP], + ["Button", "Match &case", 107, (5, 52, 100, 10), visible | win32con.BS_AUTOCHECKBOX | win32con.WS_TABSTOP], + ["Button", "Keep &dialog open", 115, (5, 62, 100, 10), visible | win32con.BS_AUTOCHECKBOX | win32con.WS_TABSTOP], + ["Button", "Across &open files", 116, (5, 72, 100, 10), visible | win32con.BS_AUTOCHECKBOX | win32con.WS_TABSTOP], + ["Button", "&Remember as default search", 117, (5, 81, 150, 10), visible | win32con.BS_AUTOCHECKBOX | win32con.WS_TABSTOP], + ["Button", "&Find Next", 109, (185, 5, 50, 14), visible | win32con.BS_DEFPUSHBUTTON | win32con.WS_TABSTOP], + ["Button", "&Replace", 110, (185, 23, 50, 14), visible | win32con.WS_TABSTOP], + ["Button", "Replace &All", 111, (185, 41, 50, 14), visible | win32con.WS_TABSTOP], + ["Button", "Cancel", win32con.IDCANCEL, (185, 59, 50, 14), visible | win32con.WS_TABSTOP], + + + ] + return dt + + def OnInitDialog(self): + rc = FindReplaceDialog.OnInitDialog(self) + self.HookCommand(self.OnReplace, 110) + self.HookCommand(self.OnReplaceAll, 111) + self.HookMessage(self.OnActivate, win32con.WM_ACTIVATE) + self.editReplaceText = self.GetDlgItem(104) + self.editReplaceText.SetWindowText(lastSearch.replaceText) + self.editReplaceText.SetSel(0, -2) + self.butReplace = self.GetDlgItem(110) + self.butReplaceAll = self.GetDlgItem(111) + self.CheckButtonStates() + return rc + + def CheckButtonStates(self): + # We can do a "Replace" or "Replace All" if the current selection + # is the same as the search text. + ft = self.editFindText.GetWindowText() + control = _GetControl() +# bCanReplace = len(ft)>0 and control.GetSelText() == ft + bCanReplace = control is not None and lastSearch.sel == control.GetSel() + self.butReplace.EnableWindow(bCanReplace) +# self.butReplaceAll.EnableWindow(bCanReplace) + + def OnActivate(self, msg): + wparam = msg[2] + fActive = win32api.LOWORD(wparam) + if fActive != win32con.WA_INACTIVE: + self.CheckButtonStates() + + def OnFindNext(self, id, code): + self.DoFindNext() + self.CheckButtonStates() + + def OnReplace(self, id, code): + lastSearch.replaceText = self.editReplaceText.GetWindowText() + _ReplaceIt(None) + + def OnReplaceAll(self, id, code): + control = _GetControl(None) + if control is not None: + control.SetSel(0) + num = 0 + if self.DoFindNext() == FOUND_NORMAL: + lastSearch.replaceText = self.editReplaceText.GetWindowText() + while _ReplaceIt(control) == FOUND_NORMAL: + num = num + 1 + + win32ui.SetStatusText("Replaced %d occurrences" % num) + if num > 0 and not self.butKeepDialogOpen.GetCheck(): + self.DestroyWindow() + +if __name__=='__main__': + ShowFindDialog() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/formatter.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/formatter.py new file mode 100644 index 000000000..92561189f --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/formatter.py @@ -0,0 +1,579 @@ +# Does Python source formatting for Scintilla controls. +import win32ui +import win32api +import win32con +import winerror +import string +import array +import scintillacon + +WM_KICKIDLE = 0x036A + +debugging = 0 +if debugging: + # Output must go to another process else the result of + # the printing itself will trigger again trigger a trace. + import sys, win32traceutil, win32trace + def trace(*args): + win32trace.write(string.join(map(str, args), " ") + "\n") +else: + trace = lambda *args: None + +class Style: + """Represents a single format + """ + def __init__(self, name, format, background = None): + self.name = name # Name the format representes eg, "String", "Class" + self.background = background + if type(format)==type(''): + self.aliased = format + self.format = None + else: + self.format = format + self.aliased = None + self.stylenum = None # Not yet registered. + def IsBasedOnDefault(self): + return len(self.format)==5 + # If the currently extended font defintion matches the + # default format, restore the format to the "simple" format. + def NormalizeAgainstDefault(self, defaultFormat): + if self.IsBasedOnDefault(): + return 0 # No more to do, and not changed. + bIsDefault = self.format[7] == defaultFormat[7] and \ + self.format[2] == defaultFormat[2] + if bIsDefault: + self.ForceAgainstDefault() + return bIsDefault + def ForceAgainstDefault(self): + self.format = self.format[:5] + def GetCompleteFormat(self, defaultFormat): + # Get the complete style after applying any relevant defaults. + if len(self.format)==5: # It is a default one + fmt = self.format + defaultFormat[5:] + else: + fmt = self.format + flags = win32con.CFM_BOLD | win32con.CFM_CHARSET | win32con.CFM_COLOR | win32con.CFM_FACE | win32con.CFM_ITALIC | win32con.CFM_SIZE + return (flags,) + fmt[1:] + +# The Formatter interface +# used primarily when the actual formatting is done by Scintilla! +class FormatterBase: + def __init__(self, scintilla): + self.scintilla = scintilla + self.baseFormatFixed = (-402653169, 0, 200, 0, 0, 0, 49, 'Courier New') + self.baseFormatProp = (-402653169, 0, 200, 0, 0, 0, 49, 'Arial') + self.bUseFixed = 1 + self.styles = {} # Indexed by name + self.styles_by_id = {} # Indexed by allocated ID. + # Default Background + self.default_background = None + self._LoadBackground() + + self.SetStyles() + + + def _LoadBackground( self ): + #load default background + bg = int( self.LoadPreference( "Default Background", -1 ) ) + if bg != -1: + self.default_background = bg + if self.default_background is None: + self.default_background = win32api.RGB( 0xff, 0xff, 0xff ) + + def GetDefaultBackground( self ): + return self.default_background + + def HookFormatter(self, parent = None): + raise NotImplementedError + + # Used by the IDLE extensions to quickly determine if a character is a string. + def GetStringStyle(self, pos): + try: + style = self.styles_by_id[self.scintilla.SCIGetStyleAt(pos)] + except KeyError: + # A style we dont know about - probably not even a .py file - can't be a string + return None + if style.name in self.string_style_names: + return style + return None + + def RegisterStyle(self, style, stylenum): + assert stylenum is not None, "We must have a style number" + assert style.stylenum is None, "Style has already been registered" + assert not self.styles.has_key(stylenum), "We are reusing a style number!" + style.stylenum = stylenum + self.styles[style.name] = style + self.styles_by_id[stylenum] = style + + def SetStyles(self): + raise NotImplementedError + + def GetSampleText(self): + return "Sample Text for the Format Dialog" + + def GetDefaultFormat(self): + if self.bUseFixed: + return self.baseFormatFixed + return self.baseFormatProp + + # Update the control with the new style format. + def _ReformatStyle(self, style): + assert style.stylenum is not None, "Unregistered style." + #print "Reformat style", style.name, style.stylenum + scintilla=self.scintilla + stylenum = style.stylenum + # Now we have the style number, indirect for the actual style. + if style.aliased is not None: + style = self.styles[style.aliased] + f=style.format + if style.IsBasedOnDefault(): + baseFormat = self.GetDefaultFormat() + else: baseFormat = f + scintilla.SCIStyleSetFore(stylenum, f[4]) + scintilla.SCIStyleSetFont(stylenum, baseFormat[7], baseFormat[5]) + if f[1] & 1: scintilla.SCIStyleSetBold(stylenum, 1) + else: scintilla.SCIStyleSetBold(stylenum, 0) + if f[1] & 2: scintilla.SCIStyleSetItalic(stylenum, 1) + else: scintilla.SCIStyleSetItalic(stylenum, 0) + scintilla.SCIStyleSetSize(stylenum, int(baseFormat[2]/20)) + if style.background is not None: + scintilla.SCIStyleSetBack(stylenum, style.background) + else: + scintilla.SCIStyleSetBack(stylenum, self.GetDefaultBackground() ) + scintilla.SCIStyleSetEOLFilled(stylenum, 1) # Only needed for unclosed strings. + + def GetStyleByNum(self, stylenum): + return self.styles_by_id[stylenum] + + def ApplyFormattingStyles(self, bReload=1): + if bReload: + self.LoadPreferences() + baseFormat = self.GetDefaultFormat() + defaultStyle = Style("default", baseFormat) + defaultStyle.stylenum = scintillacon.STYLE_DEFAULT + self._ReformatStyle(defaultStyle) + for style in self.styles.values(): + if style.aliased is None: + style.NormalizeAgainstDefault(baseFormat) + self._ReformatStyle(style) + self.scintilla.InvalidateRect() + + # Some functions for loading and saving preferences. By default + # an INI file (well, MFC maps this to the registry) is used. + def LoadPreferences(self): + self.baseFormatFixed = eval(self.LoadPreference("Base Format Fixed", str(self.baseFormatFixed))) + self.baseFormatProp = eval(self.LoadPreference("Base Format Proportional", str(self.baseFormatProp))) + self.bUseFixed = int(self.LoadPreference("Use Fixed", 1)) + + for style in self.styles.values(): + new = self.LoadPreference(style.name, str(style.format)) + try: + style.format = eval(new) + bg = int(self.LoadPreference(style.name + " background", -1)) + if bg != -1: + style.background = bg + if style.background == self.default_background: + style.background = None + + except: + print "Error loading style data for", style.name + + def LoadPreference(self, name, default): + return win32ui.GetProfileVal("Format", name, default) + + def SavePreferences(self): + self.SavePreference("Base Format Fixed", str(self.baseFormatFixed)) + self.SavePreference("Base Format Proportional", str(self.baseFormatProp)) + self.SavePreference("Use Fixed", self.bUseFixed) + for style in self.styles.values(): + if style.aliased is None: + self.SavePreference(style.name, str(style.format)) + if style.background is not None: + bg_name = style.name + " background" + self.SavePreference(bg_name, style.background) # May be None + + def SavePreference(self, name, value): + if value is None: + hkey = win32ui.GetAppRegistryKey() + try: + subkey = win32api.RegOpenKey(hkey, "Format", 0, win32con.KEY_SET_VALUE) + except win32api.error, (rc, fn, msg): + if rc != winerror.ERROR_FILE_NOT_FOUND: + raise + subkey.Close() + else: + win32ui.WriteProfileVal("Format", name, value) + +# An abstract formatter +# For all formatters we actually implement here. +# (as opposed to those formatters built in to Scintilla) +class Formatter(FormatterBase): + def __init__(self, scintilla): + self.bCompleteWhileIdle = 0 + self.bHaveIdleHandler = 0 # Dont currently have an idle handle + self.nextstylenum = 0 + FormatterBase.__init__(self, scintilla) + + def HookFormatter(self, parent = None): + if parent is None: parent = self.scintilla.GetParent() # was GetParentFrame()!? + parent.HookNotify(self.OnStyleNeeded, scintillacon.SCN_STYLENEEDED) + + def OnStyleNeeded(self, std, extra): + notify = self.scintilla.SCIUnpackNotifyMessage(extra) + endStyledChar = self.scintilla.SendScintilla(scintillacon.SCI_GETENDSTYLED) + lineEndStyled = self.scintilla.LineFromChar(endStyledChar) + endStyled = self.scintilla.LineIndex(lineEndStyled) + #print "enPosPaint %d endStyledChar %d lineEndStyled %d endStyled %d" % (endPosPaint, endStyledChar, lineEndStyled, endStyled) + self.Colorize(endStyled, notify.position) + + def ColorSeg(self, start, end, styleName): + end = end+1 +# assert end-start>=0, "Can't have negative styling" + stylenum = self.styles[styleName].stylenum + while start 0: + stylenum = scintilla.SCIGetStyleAt(start - 1) + styleStart = self.GetStyleByNum(stylenum).name + else: + styleStart = None +# trace("Coloring", start, end, end-start, len(stringVal), styleStart, self.scintilla.SCIGetCharAt(start)) + scintilla.SCIStartStyling(start, 31) + self.style_buffer = array.array("c", chr(0)*len(stringVal)) + self.ColorizeString(stringVal, styleStart) + scintilla.SCISetStylingEx(self.style_buffer) + self.style_buffer = None +# trace("After styling, end styled is", self.scintilla.SCIGetEndStyled()) + if self.bCompleteWhileIdle and not self.bHaveIdleHandler and end!=-1 and end < scintilla.GetTextLength(): + self.bHaveIdleHandler = 1 + win32ui.GetApp().AddIdleHandler(self.DoMoreColoring) + # Kicking idle makes the app seem slower when initially repainting! +# win32ui.GetMainFrame().PostMessage(WM_KICKIDLE, 0, 0) + + def DoMoreColoring(self, handler, count): + try: + scintilla = self.scintilla + endStyled = scintilla.SCIGetEndStyled() + lineStartStyled = scintilla.LineFromChar(endStyled) + start = scintilla.LineIndex(lineStartStyled) + end = scintilla.LineIndex(lineStartStyled+1) + textlen = scintilla.GetTextLength() + if end < 0: end = textlen + + finished = end >= textlen + self.Colorize(start, end) + except (win32ui.error, AttributeError): + # Window may have closed before we finished - no big deal! + finished = 1 + + if finished: + self.bHaveIdleHandler = 0 + win32ui.GetApp().DeleteIdleHandler(handler) + return not finished + +# A Formatter that knows how to format Python source +from keyword import iskeyword, kwlist + +wordstarts = '_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' +wordchars = '._0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' +operators = '%^&*()-+=|{}[]:;<>,/?!.~' + +STYLE_DEFAULT = "Whitespace" +STYLE_COMMENT = "Comment" +STYLE_COMMENT_BLOCK = "Comment Blocks" +STYLE_NUMBER = "Number" +STYLE_STRING = "String" +STYLE_SQSTRING = "SQ String" +STYLE_TQSSTRING = "TQS String" +STYLE_TQDSTRING = "TQD String" +STYLE_KEYWORD = "Keyword" +STYLE_CLASS = "Class" +STYLE_METHOD = "Method" +STYLE_OPERATOR = "Operator" +STYLE_IDENTIFIER = "Identifier" +STYLE_BRACE = "Brace/Paren - matching" +STYLE_BRACEBAD = "Brace/Paren - unmatched" +STYLE_STRINGEOL = "String with no terminator" + +STRING_STYLES = [STYLE_STRING, STYLE_SQSTRING, STYLE_TQSSTRING, STYLE_TQDSTRING, STYLE_STRINGEOL] + +# These styles can have any ID - they are not special to scintilla itself. +# However, if we use the built-in lexer, then we must use its style numbers +# so in that case, they _are_ special. +PYTHON_STYLES = [ + (STYLE_DEFAULT, (0, 0, 200, 0, 0x808080), None, scintillacon.SCE_P_DEFAULT ), + (STYLE_COMMENT, (0, 2, 200, 0, 0x008000), None, scintillacon.SCE_P_COMMENTLINE ), + (STYLE_COMMENT_BLOCK,(0, 2, 200, 0, 0x808080), None, scintillacon.SCE_P_COMMENTBLOCK ), + (STYLE_NUMBER, (0, 0, 200, 0, 0x808000), None, scintillacon.SCE_P_NUMBER ), + (STYLE_STRING, (0, 0, 200, 0, 0x008080), None, scintillacon.SCE_P_STRING ), + (STYLE_SQSTRING, STYLE_STRING, None, scintillacon.SCE_P_CHARACTER ), + (STYLE_TQSSTRING, STYLE_STRING, None, scintillacon.SCE_P_TRIPLE ), + (STYLE_TQDSTRING, STYLE_STRING, None, scintillacon.SCE_P_TRIPLEDOUBLE), + (STYLE_STRINGEOL, (0, 0, 200, 0, 0x000000), 0x008080, scintillacon.SCE_P_STRINGEOL), + (STYLE_KEYWORD, (0, 1, 200, 0, 0x800000), None, scintillacon.SCE_P_WORD), + (STYLE_CLASS, (0, 1, 200, 0, 0xFF0000), None, scintillacon.SCE_P_CLASSNAME ), + (STYLE_METHOD, (0, 1, 200, 0, 0x808000), None, scintillacon.SCE_P_DEFNAME), + (STYLE_OPERATOR, (0, 0, 200, 0, 0x000000), None, scintillacon.SCE_P_OPERATOR), + (STYLE_IDENTIFIER, (0, 0, 200, 0, 0x000000), None, scintillacon.SCE_P_IDENTIFIER ), +] + +# These styles _always_ have this specific style number, regardless of +# internal or external formatter. +SPECIAL_STYLES = [ + (STYLE_BRACE, (0, 0, 200, 0, 0x000000), 0xffff80, scintillacon.STYLE_BRACELIGHT), + (STYLE_BRACEBAD, (0, 0, 200, 0, 0x000000), 0x8ea5f2, scintillacon.STYLE_BRACEBAD), +] + +PythonSampleCode = """\ +# Some Python +class Sample(Super): + def Fn(self): +\tself.v = 1024 +dest = 'dest.html' +x = func(a + 1)|) +s = "I forget... +## A large +## comment block""" + +class PythonSourceFormatter(Formatter): + string_style_names = STRING_STYLES + def GetSampleText(self): + return PythonSampleCode + + def LoadStyles(self): + pass + + def SetStyles(self): + for name, format, bg, ignore in PYTHON_STYLES: + self.RegisterStyle( Style(name, format, bg) ) + for name, format, bg, sc_id in SPECIAL_STYLES: + self.RegisterStyle( Style(name, format, bg), sc_id ) + + def ClassifyWord(self, cdoc, start, end, prevWord): + word = cdoc[start:end+1] + attr = STYLE_IDENTIFIER + if prevWord == "class": + attr = STYLE_CLASS + elif prevWord == "def": + attr = STYLE_METHOD + elif cdoc[start] in string.digits: + attr = STYLE_NUMBER + elif iskeyword(word): + attr = STYLE_KEYWORD + self.ColorSeg(start, end, attr) + return word + + def ColorizeString(self, str, styleStart): + if styleStart is None: styleStart = STYLE_DEFAULT + return self.ColorizePythonCode(str, 0, styleStart) + + def ColorizePythonCode(self, cdoc, charStart, styleStart): + # Straight translation of C++, should do better + lengthDoc = len(cdoc) + if lengthDoc <= charStart: return + prevWord = "" + state = styleStart + chPrev = chPrev2 = chPrev3 = ' ' + chNext = cdoc[charStart] + chNext2 = cdoc[charStart] + startSeg = i = charStart + while i < lengthDoc: + ch = chNext + chNext = ' ' + if i+1 < lengthDoc: chNext = cdoc[i+1] + chNext2 = ' ' + if i+2 < lengthDoc: chNext2 = cdoc[i+2] + if state == STYLE_DEFAULT: + if ch in wordstarts: + self.ColorSeg(startSeg, i - 1, STYLE_DEFAULT) + state = STYLE_KEYWORD + startSeg = i + elif ch == '#': + self.ColorSeg(startSeg, i - 1, STYLE_DEFAULT) + if chNext == '#': + state = STYLE_COMMENT_BLOCK + else: + state = STYLE_COMMENT + startSeg = i + elif ch == '\"': + self.ColorSeg(startSeg, i - 1, STYLE_DEFAULT) + startSeg = i + state = STYLE_COMMENT + if chNext == '\"' and chNext2 == '\"': + i = i + 2 + state = STYLE_TQDSTRING + ch = ' ' + chPrev = ' ' + chNext = ' ' + if i+1 < lengthDoc: chNext = cdoc[i+1] + else: + state = STYLE_STRING + elif ch == '\'': + self.ColorSeg(startSeg, i - 1, STYLE_DEFAULT) + startSeg = i + state = STYLE_COMMENT + if chNext == '\'' and chNext2 == '\'': + i = i + 2 + state = STYLE_TQSSTRING + ch = ' ' + chPrev = ' ' + chNext = ' ' + if i+1 < lengthDoc: chNext = cdoc[i+1] + else: + state = STYLE_SQSTRING + elif ch in operators: + self.ColorSeg(startSeg, i - 1, STYLE_DEFAULT) + self.ColorSeg(i, i, STYLE_OPERATOR) + startSeg = i+1 + elif state == STYLE_KEYWORD: + if ch not in wordchars: + prevWord = self.ClassifyWord(cdoc, startSeg, i-1, prevWord) + state = STYLE_DEFAULT + startSeg = i + if ch == '#': + if chNext == '#': + state = STYLE_COMMENT_BLOCK + else: + state = STYLE_COMMENT + elif ch == '\"': + if chNext == '\"' and chNext2 == '\"': + i = i + 2 + state = STYLE_TQDSTRING + ch = ' ' + chPrev = ' ' + chNext = ' ' + if i+1 < lengthDoc: chNext = cdoc[i+1] + else: + state = STYLE_STRING + elif ch == '\'': + if chNext == '\'' and chNext2 == '\'': + i = i + 2 + state = STYLE_TQSSTRING + ch = ' ' + chPrev = ' ' + chNext = ' ' + if i+1 < lengthDoc: chNext = cdoc[i+1] + else: + state = STYLE_SQSTRING + elif ch in operators: + self.ColorSeg(startSeg, i, STYLE_OPERATOR) + startSeg = i+1 + elif state == STYLE_COMMENT or state == STYLE_COMMENT_BLOCK: + if ch == '\r' or ch == '\n': + self.ColorSeg(startSeg, i-1, state) + state = STYLE_DEFAULT + startSeg = i + elif state == STYLE_STRING: + if ch == '\\': + if chNext == '\"' or chNext == '\'' or chNext == '\\': + i = i + 1 + ch = chNext + chNext = ' ' + if i+1 < lengthDoc: chNext = cdoc[i+1] + elif ch == '\"': + self.ColorSeg(startSeg, i, STYLE_STRING) + state = STYLE_DEFAULT + startSeg = i+1 + elif state == STYLE_SQSTRING: + if ch == '\\': + if chNext == '\"' or chNext == '\'' or chNext == '\\': + i = i+1 + ch = chNext + chNext = ' ' + if i+1 < lengthDoc: chNext = cdoc[i+1] + elif ch == '\'': + self.ColorSeg(startSeg, i, STYLE_SQSTRING) + state = STYLE_DEFAULT + startSeg = i+1 + elif state == STYLE_TQSSTRING: + if ch == '\'' and chPrev == '\'' and chPrev2 == '\'' and chPrev3 != '\\': + self.ColorSeg(startSeg, i, STYLE_TQSSTRING) + state = STYLE_DEFAULT + startSeg = i+1 + elif state == STYLE_TQDSTRING and ch == '\"' and chPrev == '\"' and chPrev2 == '\"' and chPrev3 != '\\': + self.ColorSeg(startSeg, i, STYLE_TQDSTRING) + state = STYLE_DEFAULT + startSeg = i+1 + chPrev3 = chPrev2 + chPrev2 = chPrev + chPrev = ch + i = i + 1 + if startSeg < lengthDoc: + if state == STYLE_KEYWORD: + self.ClassifyWord(cdoc, startSeg, lengthDoc-1, prevWord) + else: + self.ColorSeg(startSeg, lengthDoc-1, state) + + +# These taken from the SciTE properties file. +source_formatter_extensions = [ + ( string.split(".py .pys .pyw"), scintillacon.SCLEX_PYTHON ), + ( string.split(".html .htm .asp .shtml"), scintillacon.SCLEX_HTML ), + ( string.split("c .cc .cpp .cxx .h .hh .hpp .hxx .idl .odl .php3 .phtml .inc .js"),scintillacon.SCLEX_CPP ), + ( string.split(".vbs .frm .ctl .cls"), scintillacon.SCLEX_VB ), + ( string.split(".pl .pm .cgi .pod"), scintillacon.SCLEX_PERL ), + ( string.split(".sql .spec .body .sps .spb .sf .sp"), scintillacon.SCLEX_SQL ), + ( string.split(".tex .sty"), scintillacon.SCLEX_LATEX ), + ( string.split(".xml .xul"), scintillacon.SCLEX_XML ), + ( string.split(".err"), scintillacon.SCLEX_ERRORLIST ), + ( string.split(".mak"), scintillacon.SCLEX_MAKEFILE ), + ( string.split(".bat .cmd"), scintillacon.SCLEX_BATCH ), +] + +class BuiltinSourceFormatter(FormatterBase): + # A class that represents a formatter built-in to Scintilla + def __init__(self, scintilla, ext): + self.ext = ext + FormatterBase.__init__(self, scintilla) + + def Colorize(self, start=0, end=-1): + self.scintilla.SendScintilla(scintillacon.SCI_COLOURISE, start, end) + def RegisterStyle(self, style, stylenum = None): + assert style.stylenum is None, "Style has already been registered" + if stylenum is None: + stylenum = self.nextstylenum + self.nextstylenum = self.nextstylenum + 1 + assert self.styles.get(stylenum) is None, "We are reusing a style number!" + style.stylenum = stylenum + self.styles[style.name] = style + self.styles_by_id[stylenum] = style + + def HookFormatter(self, parent = None): + sc = self.scintilla + for exts, formatter in source_formatter_extensions: + if self.ext in exts: + formatter_use = formatter + break + else: + formatter_use = scintillacon.SCLEX_PYTHON + sc.SendScintilla(scintillacon.SCI_SETLEXER, formatter_use) + keywords = string.join(kwlist) + sc.SCISetKeywords(keywords) + +class BuiltinPythonSourceFormatter(BuiltinSourceFormatter): + sci_lexer_name = scintillacon.SCLEX_PYTHON + string_style_names = STRING_STYLES + def __init__(self, sc, ext = ".py"): + BuiltinSourceFormatter.__init__(self, sc, ext) + def SetStyles(self): + for name, format, bg, sc_id in PYTHON_STYLES: + self.RegisterStyle( Style(name, format, bg), sc_id ) + for name, format, bg, sc_id in SPECIAL_STYLES: + self.RegisterStyle( Style(name, format, bg), sc_id ) + def GetSampleText(self): + return PythonSampleCode diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/keycodes.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/keycodes.py new file mode 100644 index 000000000..6bb3ae3ca --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/keycodes.py @@ -0,0 +1,160 @@ +import string +import win32con + +char_ranges = [ + (string.lowercase, -32), + (string.digits, 0), + ("?><:[]\\", 128), + (";", 127), + ("=", 126), + ("/.,", 144), + ("`{}|", 96), + ("_", 94), + ("-+", 144), + ("'", 183), + ('"', 188), + ("~", 66), + ("!",16), + ("#$%&", 18), + ("()", 17), +] + +key_name_to_code = {} +key_code_to_name = {} + +_better_names = [ + ("esc", win32con.VK_ESCAPE), + ("enter", win32con.VK_RETURN), + ("pgup", win32con.VK_BACK), + ("pgdn", win32con.VK_NEXT), +] +def _fillmap(): + # Pull the VK_names from win32con + names = filter(lambda entry: entry[:3]=="VK_", win32con.__dict__.keys()) + for name in names: + n = string.lower(name[3:]) + val = getattr(win32con, name) + key_name_to_code[n] = val + key_code_to_name[val] = n + # Some better named we know about + for name, code in _better_names: + key_name_to_code[name] = code + key_code_to_name[code] = name + # And the char_ranges map above + for chars, offset in char_ranges: + for char in chars: + key_name_to_code[char] = ord(char)+offset + key_code_to_name[ord(char)+offset] = char + +_fillmap() + +def get_scan_code(chardesc): + return key_name_to_code.get(string.lower(chardesc)) + +modifiers = { + "alt" : win32con.LEFT_ALT_PRESSED | win32con.RIGHT_ALT_PRESSED, + "lalt" : win32con.LEFT_ALT_PRESSED, + "ralt" : win32con.RIGHT_ALT_PRESSED, + "ctrl" : win32con.LEFT_CTRL_PRESSED | win32con.RIGHT_CTRL_PRESSED, + "ctl" : win32con.LEFT_CTRL_PRESSED | win32con.RIGHT_CTRL_PRESSED, + "control" : win32con.LEFT_CTRL_PRESSED | win32con.RIGHT_CTRL_PRESSED, + "lctrl" : win32con.LEFT_CTRL_PRESSED, + "lctl" : win32con.LEFT_CTRL_PRESSED, + "rctrl" : win32con.RIGHT_CTRL_PRESSED, + "rctl" : win32con.RIGHT_CTRL_PRESSED, + "shift" : win32con.SHIFT_PRESSED, + "key" : 0, # ignore key tag. +} + +def parse_key_name(name): + name = name + "-" # Add a sentinal + start = pos = 0 + max = len(name) + flags = 0 + scancode = None + while pos" % scancode ) + sep = "+" + if sep in parts: sep = "-" + return string.join(map(string.capitalize, parts), sep) + +def _psc(char): + sc = get_scan_code(char) + print "Char %s -> %d -> %s" % (`char`, sc, key_code_to_name.get(sc)) + +def test1(): + for ch in """aA0/?[{}];:'"`~_-+=\\|,<.>/?""": + _psc(ch) + for code in ["Home", "End", "Left", "Right", "Up", "Down", "Menu", "Next"]: + _psc(code) + +def _pkn(n): + scancode, flags = parse_key_name(n) + print "%s -> %s,%s -> %s" % (n, scancode, flags, make_key_name(scancode, flags)) + +def test2(): + _pkn("ctrl+alt-shift+x") + _pkn("ctrl-home") + _pkn("Shift-+") + _pkn("Shift--") + _pkn("Shift+-") + _pkn("Shift++") + _pkn("LShift-+") + _pkn("ctl+home") + _pkn("ctl+enter") + _pkn("alt+return") + _pkn("Alt+/") + _pkn("Alt+BadKeyName") + _pkn("A") + _pkn("(") + _pkn("Ctrl+(") + _pkn("{") + _pkn("!") + +if __name__=='__main__': + test2() \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/scintillacon.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/scintillacon.py new file mode 100644 index 000000000..9d77cce4d --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/scintillacon.py @@ -0,0 +1,1229 @@ +# Generated by h2py from Include\scintilla.h + +# Included from BaseTsd.h +def HandleToUlong(h): return HandleToULong(h) + +def UlongToHandle(ul): return ULongToHandle(ul) + +def UlongToPtr(ul): return ULongToPtr(ul) + +def UintToPtr(ui): return UIntToPtr(ui) + +INVALID_POSITION = -1 +SCI_START = 2000 +SCI_OPTIONAL_START = 3000 +SCI_LEXER_START = 4000 +SCI_ADDTEXT = 2001 +SCI_ADDSTYLEDTEXT = 2002 +SCI_INSERTTEXT = 2003 +SCI_CLEARALL = 2004 +SCI_CLEARDOCUMENTSTYLE = 2005 +SCI_GETLENGTH = 2006 +SCI_GETCHARAT = 2007 +SCI_GETCURRENTPOS = 2008 +SCI_GETANCHOR = 2009 +SCI_GETSTYLEAT = 2010 +SCI_REDO = 2011 +SCI_SETUNDOCOLLECTION = 2012 +SCI_SELECTALL = 2013 +SCI_SETSAVEPOINT = 2014 +SCI_GETSTYLEDTEXT = 2015 +SCI_CANREDO = 2016 +SCI_MARKERLINEFROMHANDLE = 2017 +SCI_MARKERDELETEHANDLE = 2018 +SCI_GETUNDOCOLLECTION = 2019 +SCWS_INVISIBLE = 0 +SCWS_VISIBLEALWAYS = 1 +SCWS_VISIBLEAFTERINDENT = 2 +SCI_GETVIEWWS = 2020 +SCI_SETVIEWWS = 2021 +SCI_POSITIONFROMPOINT = 2022 +SCI_POSITIONFROMPOINTCLOSE = 2023 +SCI_GOTOLINE = 2024 +SCI_GOTOPOS = 2025 +SCI_SETANCHOR = 2026 +SCI_GETCURLINE = 2027 +SCI_GETENDSTYLED = 2028 +SC_EOL_CRLF = 0 +SC_EOL_CR = 1 +SC_EOL_LF = 2 +SCI_CONVERTEOLS = 2029 +SCI_GETEOLMODE = 2030 +SCI_SETEOLMODE = 2031 +SCI_STARTSTYLING = 2032 +SCI_SETSTYLING = 2033 +SCI_GETBUFFEREDDRAW = 2034 +SCI_SETBUFFEREDDRAW = 2035 +SCI_SETTABWIDTH = 2036 +SCI_GETTABWIDTH = 2121 +SC_CP_UTF8 = 65001 +SC_CP_DBCS = 1 +SCI_SETCODEPAGE = 2037 +SCI_SETUSEPALETTE = 2039 +MARKER_MAX = 31 +SC_MARK_CIRCLE = 0 +SC_MARK_ROUNDRECT = 1 +SC_MARK_ARROW = 2 +SC_MARK_SMALLRECT = 3 +SC_MARK_SHORTARROW = 4 +SC_MARK_EMPTY = 5 +SC_MARK_ARROWDOWN = 6 +SC_MARK_MINUS = 7 +SC_MARK_PLUS = 8 +SC_MARK_VLINE = 9 +SC_MARK_LCORNER = 10 +SC_MARK_TCORNER = 11 +SC_MARK_BOXPLUS = 12 +SC_MARK_BOXPLUSCONNECTED = 13 +SC_MARK_BOXMINUS = 14 +SC_MARK_BOXMINUSCONNECTED = 15 +SC_MARK_LCORNERCURVE = 16 +SC_MARK_TCORNERCURVE = 17 +SC_MARK_CIRCLEPLUS = 18 +SC_MARK_CIRCLEPLUSCONNECTED = 19 +SC_MARK_CIRCLEMINUS = 20 +SC_MARK_CIRCLEMINUSCONNECTED = 21 +SC_MARK_BACKGROUND = 22 +SC_MARK_DOTDOTDOT = 23 +SC_MARK_ARROWS = 24 +SC_MARK_PIXMAP = 25 +SC_MARK_CHARACTER = 10000 +SC_MARKNUM_FOLDEREND = 25 +SC_MARKNUM_FOLDEROPENMID = 26 +SC_MARKNUM_FOLDERMIDTAIL = 27 +SC_MARKNUM_FOLDERTAIL = 28 +SC_MARKNUM_FOLDERSUB = 29 +SC_MARKNUM_FOLDER = 30 +SC_MARKNUM_FOLDEROPEN = 31 +SC_MASK_FOLDERS = (-33554432) +SCI_MARKERDEFINE = 2040 +SCI_MARKERSETFORE = 2041 +SCI_MARKERSETBACK = 2042 +SCI_MARKERADD = 2043 +SCI_MARKERDELETE = 2044 +SCI_MARKERDELETEALL = 2045 +SCI_MARKERGET = 2046 +SCI_MARKERNEXT = 2047 +SCI_MARKERPREVIOUS = 2048 +SCI_MARKERDEFINEPIXMAP = 2049 +SC_MARGIN_SYMBOL = 0 +SC_MARGIN_NUMBER = 1 +SCI_SETMARGINTYPEN = 2240 +SCI_GETMARGINTYPEN = 2241 +SCI_SETMARGINWIDTHN = 2242 +SCI_GETMARGINWIDTHN = 2243 +SCI_SETMARGINMASKN = 2244 +SCI_GETMARGINMASKN = 2245 +SCI_SETMARGINSENSITIVEN = 2246 +SCI_GETMARGINSENSITIVEN = 2247 +STYLE_DEFAULT = 32 +STYLE_LINENUMBER = 33 +STYLE_BRACELIGHT = 34 +STYLE_BRACEBAD = 35 +STYLE_CONTROLCHAR = 36 +STYLE_INDENTGUIDE = 37 +STYLE_LASTPREDEFINED = 39 +STYLE_MAX = 127 +SC_CHARSET_ANSI = 0 +SC_CHARSET_DEFAULT = 1 +SC_CHARSET_BALTIC = 186 +SC_CHARSET_CHINESEBIG5 = 136 +SC_CHARSET_EASTEUROPE = 238 +SC_CHARSET_GB2312 = 134 +SC_CHARSET_GREEK = 161 +SC_CHARSET_HANGUL = 129 +SC_CHARSET_MAC = 77 +SC_CHARSET_OEM = 255 +SC_CHARSET_RUSSIAN = 204 +SC_CHARSET_SHIFTJIS = 128 +SC_CHARSET_SYMBOL = 2 +SC_CHARSET_TURKISH = 162 +SC_CHARSET_JOHAB = 130 +SC_CHARSET_HEBREW = 177 +SC_CHARSET_ARABIC = 178 +SC_CHARSET_VIETNAMESE = 163 +SC_CHARSET_THAI = 222 +SCI_STYLECLEARALL = 2050 +SCI_STYLESETFORE = 2051 +SCI_STYLESETBACK = 2052 +SCI_STYLESETBOLD = 2053 +SCI_STYLESETITALIC = 2054 +SCI_STYLESETSIZE = 2055 +SCI_STYLESETFONT = 2056 +SCI_STYLESETEOLFILLED = 2057 +SCI_STYLERESETDEFAULT = 2058 +SCI_STYLESETUNDERLINE = 2059 +SC_CASE_MIXED = 0 +SC_CASE_UPPER = 1 +SC_CASE_LOWER = 2 +SCI_STYLESETCASE = 2060 +SCI_STYLESETCHARACTERSET = 2066 +SCI_STYLESETHOTSPOT = 2409 +SCI_SETSELFORE = 2067 +SCI_SETSELBACK = 2068 +SCI_SETCARETFORE = 2069 +SCI_ASSIGNCMDKEY = 2070 +SCI_CLEARCMDKEY = 2071 +SCI_CLEARALLCMDKEYS = 2072 +SCI_SETSTYLINGEX = 2073 +SCI_STYLESETVISIBLE = 2074 +SCI_GETCARETPERIOD = 2075 +SCI_SETCARETPERIOD = 2076 +SCI_SETWORDCHARS = 2077 +SCI_BEGINUNDOACTION = 2078 +SCI_ENDUNDOACTION = 2079 +INDIC_MAX = 7 +INDIC_PLAIN = 0 +INDIC_SQUIGGLE = 1 +INDIC_TT = 2 +INDIC_DIAGONAL = 3 +INDIC_STRIKE = 4 +INDIC_HIDDEN = 5 +INDIC_BOX = 6 +INDIC0_MASK = 0x20 +INDIC1_MASK = 0x40 +INDIC2_MASK = 0x80 +INDICS_MASK = 0xE0 +SCI_INDICSETSTYLE = 2080 +SCI_INDICGETSTYLE = 2081 +SCI_INDICSETFORE = 2082 +SCI_INDICGETFORE = 2083 +SCI_SETWHITESPACEFORE = 2084 +SCI_SETWHITESPACEBACK = 2085 +SCI_SETSTYLEBITS = 2090 +SCI_GETSTYLEBITS = 2091 +SCI_SETLINESTATE = 2092 +SCI_GETLINESTATE = 2093 +SCI_GETMAXLINESTATE = 2094 +SCI_GETCARETLINEVISIBLE = 2095 +SCI_SETCARETLINEVISIBLE = 2096 +SCI_GETCARETLINEBACK = 2097 +SCI_SETCARETLINEBACK = 2098 +SCI_STYLESETCHANGEABLE = 2099 +SCI_AUTOCSHOW = 2100 +SCI_AUTOCCANCEL = 2101 +SCI_AUTOCACTIVE = 2102 +SCI_AUTOCPOSSTART = 2103 +SCI_AUTOCCOMPLETE = 2104 +SCI_AUTOCSTOPS = 2105 +SCI_AUTOCSETSEPARATOR = 2106 +SCI_AUTOCGETSEPARATOR = 2107 +SCI_AUTOCSELECT = 2108 +SCI_AUTOCSETCANCELATSTART = 2110 +SCI_AUTOCGETCANCELATSTART = 2111 +SCI_AUTOCSETFILLUPS = 2112 +SCI_AUTOCSETCHOOSESINGLE = 2113 +SCI_AUTOCGETCHOOSESINGLE = 2114 +SCI_AUTOCSETIGNORECASE = 2115 +SCI_AUTOCGETIGNORECASE = 2116 +SCI_USERLISTSHOW = 2117 +SCI_AUTOCSETAUTOHIDE = 2118 +SCI_AUTOCGETAUTOHIDE = 2119 +SCI_AUTOCSETDROPRESTOFWORD = 2270 +SCI_AUTOCGETDROPRESTOFWORD = 2271 +SCI_REGISTERIMAGE = 2405 +SCI_CLEARREGISTEREDIMAGES = 2408 +SCI_AUTOCGETTYPESEPARATOR = 2285 +SCI_AUTOCSETTYPESEPARATOR = 2286 +SCI_SETINDENT = 2122 +SCI_GETINDENT = 2123 +SCI_SETUSETABS = 2124 +SCI_GETUSETABS = 2125 +SCI_SETLINEINDENTATION = 2126 +SCI_GETLINEINDENTATION = 2127 +SCI_GETLINEINDENTPOSITION = 2128 +SCI_GETCOLUMN = 2129 +SCI_SETHSCROLLBAR = 2130 +SCI_GETHSCROLLBAR = 2131 +SCI_SETINDENTATIONGUIDES = 2132 +SCI_GETINDENTATIONGUIDES = 2133 +SCI_SETHIGHLIGHTGUIDE = 2134 +SCI_GETHIGHLIGHTGUIDE = 2135 +SCI_GETLINEENDPOSITION = 2136 +SCI_GETCODEPAGE = 2137 +SCI_GETCARETFORE = 2138 +SCI_GETUSEPALETTE = 2139 +SCI_GETREADONLY = 2140 +SCI_SETCURRENTPOS = 2141 +SCI_SETSELECTIONSTART = 2142 +SCI_GETSELECTIONSTART = 2143 +SCI_SETSELECTIONEND = 2144 +SCI_GETSELECTIONEND = 2145 +SCI_SETPRINTMAGNIFICATION = 2146 +SCI_GETPRINTMAGNIFICATION = 2147 +SC_PRINT_NORMAL = 0 +SC_PRINT_INVERTLIGHT = 1 +SC_PRINT_BLACKONWHITE = 2 +SC_PRINT_COLOURONWHITE = 3 +SC_PRINT_COLOURONWHITEDEFAULTBG = 4 +SCI_SETPRINTCOLOURMODE = 2148 +SCI_GETPRINTCOLOURMODE = 2149 +SCFIND_WHOLEWORD = 2 +SCFIND_MATCHCASE = 4 +SCFIND_WORDSTART = 0x00100000 +SCFIND_REGEXP = 0x00200000 +SCFIND_POSIX = 0x00400000 +SCI_FINDTEXT = 2150 +SCI_FORMATRANGE = 2151 +SCI_GETFIRSTVISIBLELINE = 2152 +SCI_GETLINE = 2153 +SCI_GETLINECOUNT = 2154 +SCI_SETMARGINLEFT = 2155 +SCI_GETMARGINLEFT = 2156 +SCI_SETMARGINRIGHT = 2157 +SCI_GETMARGINRIGHT = 2158 +SCI_GETMODIFY = 2159 +SCI_SETSEL = 2160 +SCI_GETSELTEXT = 2161 +SCI_GETTEXTRANGE = 2162 +SCI_HIDESELECTION = 2163 +SCI_POINTXFROMPOSITION = 2164 +SCI_POINTYFROMPOSITION = 2165 +SCI_LINEFROMPOSITION = 2166 +SCI_POSITIONFROMLINE = 2167 +SCI_LINESCROLL = 2168 +SCI_SCROLLCARET = 2169 +SCI_REPLACESEL = 2170 +SCI_SETREADONLY = 2171 +SCI_NULL = 2172 +SCI_CANPASTE = 2173 +SCI_CANUNDO = 2174 +SCI_EMPTYUNDOBUFFER = 2175 +SCI_UNDO = 2176 +SCI_CUT = 2177 +SCI_COPY = 2178 +SCI_PASTE = 2179 +SCI_CLEAR = 2180 +SCI_SETTEXT = 2181 +SCI_GETTEXT = 2182 +SCI_GETTEXTLENGTH = 2183 +SCI_GETDIRECTFUNCTION = 2184 +SCI_GETDIRECTPOINTER = 2185 +SCI_SETOVERTYPE = 2186 +SCI_GETOVERTYPE = 2187 +SCI_SETCARETWIDTH = 2188 +SCI_GETCARETWIDTH = 2189 +SCI_SETTARGETSTART = 2190 +SCI_GETTARGETSTART = 2191 +SCI_SETTARGETEND = 2192 +SCI_GETTARGETEND = 2193 +SCI_REPLACETARGET = 2194 +SCI_REPLACETARGETRE = 2195 +SCI_SEARCHINTARGET = 2197 +SCI_SETSEARCHFLAGS = 2198 +SCI_GETSEARCHFLAGS = 2199 +SCI_CALLTIPSHOW = 2200 +SCI_CALLTIPCANCEL = 2201 +SCI_CALLTIPACTIVE = 2202 +SCI_CALLTIPPOSSTART = 2203 +SCI_CALLTIPSETHLT = 2204 +SCI_CALLTIPSETBACK = 2205 +SCI_CALLTIPSETFORE = 2206 +SCI_CALLTIPSETFOREHLT = 2207 +SCI_VISIBLEFROMDOCLINE = 2220 +SCI_DOCLINEFROMVISIBLE = 2221 +SC_FOLDLEVELBASE = 0x400 +SC_FOLDLEVELWHITEFLAG = 0x1000 +SC_FOLDLEVELHEADERFLAG = 0x2000 +SC_FOLDLEVELBOXHEADERFLAG = 0x4000 +SC_FOLDLEVELBOXFOOTERFLAG = 0x8000 +SC_FOLDLEVELCONTRACTED = 0x10000 +SC_FOLDLEVELUNINDENT = 0x20000 +SC_FOLDLEVELNUMBERMASK = 0x0FFF +SCI_SETFOLDLEVEL = 2222 +SCI_GETFOLDLEVEL = 2223 +SCI_GETLASTCHILD = 2224 +SCI_GETFOLDPARENT = 2225 +SCI_SHOWLINES = 2226 +SCI_HIDELINES = 2227 +SCI_GETLINEVISIBLE = 2228 +SCI_SETFOLDEXPANDED = 2229 +SCI_GETFOLDEXPANDED = 2230 +SCI_TOGGLEFOLD = 2231 +SCI_ENSUREVISIBLE = 2232 +SC_FOLDFLAG_LINEBEFORE_EXPANDED = 0x0002 +SC_FOLDFLAG_LINEBEFORE_CONTRACTED = 0x0004 +SC_FOLDFLAG_LINEAFTER_EXPANDED = 0x0008 +SC_FOLDFLAG_LINEAFTER_CONTRACTED = 0x0010 +SC_FOLDFLAG_LEVELNUMBERS = 0x0040 +SC_FOLDFLAG_BOX = 0x0001 +SCI_SETFOLDFLAGS = 2233 +SCI_ENSUREVISIBLEENFORCEPOLICY = 2234 +SCI_SETTABINDENTS = 2260 +SCI_GETTABINDENTS = 2261 +SCI_SETBACKSPACEUNINDENTS = 2262 +SCI_GETBACKSPACEUNINDENTS = 2263 +SC_TIME_FOREVER = 10000000 +SCI_SETMOUSEDWELLTIME = 2264 +SCI_GETMOUSEDWELLTIME = 2265 +SCI_WORDSTARTPOSITION = 2266 +SCI_WORDENDPOSITION = 2267 +SC_WRAP_NONE = 0 +SC_WRAP_WORD = 1 +SCI_SETWRAPMODE = 2268 +SCI_GETWRAPMODE = 2269 +SC_CACHE_NONE = 0 +SC_CACHE_CARET = 1 +SC_CACHE_PAGE = 2 +SC_CACHE_DOCUMENT = 3 +SCI_SETLAYOUTCACHE = 2272 +SCI_GETLAYOUTCACHE = 2273 +SCI_SETSCROLLWIDTH = 2274 +SCI_GETSCROLLWIDTH = 2275 +SCI_TEXTWIDTH = 2276 +SCI_SETENDATLASTLINE = 2277 +SCI_GETENDATLASTLINE = 2278 +SCI_TEXTHEIGHT = 2279 +SCI_SETVSCROLLBAR = 2280 +SCI_GETVSCROLLBAR = 2281 +SCI_APPENDTEXT = 2282 +SCI_GETTWOPHASEDRAW = 2283 +SCI_SETTWOPHASEDRAW = 2284 +SCI_TARGETFROMSELECTION = 2287 +SCI_LINESJOIN = 2288 +SCI_LINESSPLIT = 2289 +SCI_SETFOLDMARGINCOLOUR = 2290 +SCI_SETFOLDMARGINHICOLOUR = 2291 +SCI_LINEDOWN = 2300 +SCI_LINEDOWNEXTEND = 2301 +SCI_LINEUP = 2302 +SCI_LINEUPEXTEND = 2303 +SCI_CHARLEFT = 2304 +SCI_CHARLEFTEXTEND = 2305 +SCI_CHARRIGHT = 2306 +SCI_CHARRIGHTEXTEND = 2307 +SCI_WORDLEFT = 2308 +SCI_WORDLEFTEXTEND = 2309 +SCI_WORDRIGHT = 2310 +SCI_WORDRIGHTEXTEND = 2311 +SCI_HOME = 2312 +SCI_HOMEEXTEND = 2313 +SCI_LINEEND = 2314 +SCI_LINEENDEXTEND = 2315 +SCI_DOCUMENTSTART = 2316 +SCI_DOCUMENTSTARTEXTEND = 2317 +SCI_DOCUMENTEND = 2318 +SCI_DOCUMENTENDEXTEND = 2319 +SCI_PAGEUP = 2320 +SCI_PAGEUPEXTEND = 2321 +SCI_PAGEDOWN = 2322 +SCI_PAGEDOWNEXTEND = 2323 +SCI_EDITTOGGLEOVERTYPE = 2324 +SCI_CANCEL = 2325 +SCI_DELETEBACK = 2326 +SCI_TAB = 2327 +SCI_BACKTAB = 2328 +SCI_NEWLINE = 2329 +SCI_FORMFEED = 2330 +SCI_VCHOME = 2331 +SCI_VCHOMEEXTEND = 2332 +SCI_ZOOMIN = 2333 +SCI_ZOOMOUT = 2334 +SCI_DELWORDLEFT = 2335 +SCI_DELWORDRIGHT = 2336 +SCI_LINECUT = 2337 +SCI_LINEDELETE = 2338 +SCI_LINETRANSPOSE = 2339 +SCI_LINEDUPLICATE = 2404 +SCI_LOWERCASE = 2340 +SCI_UPPERCASE = 2341 +SCI_LINESCROLLDOWN = 2342 +SCI_LINESCROLLUP = 2343 +SCI_DELETEBACKNOTLINE = 2344 +SCI_HOMEDISPLAY = 2345 +SCI_HOMEDISPLAYEXTEND = 2346 +SCI_LINEENDDISPLAY = 2347 +SCI_LINEENDDISPLAYEXTEND = 2348 +SCI_HOMEWRAP = 2349 +SCI_HOMEWRAPEXTEND = 2450 +SCI_LINEENDWRAP = 2451 +SCI_LINEENDWRAPEXTEND = 2452 +SCI_VCHOMEWRAP = 2453 +SCI_VCHOMEWRAPEXTEND = 2454 +SCI_LINECOPY = 2455 +SCI_MOVECARETINSIDEVIEW = 2401 +SCI_LINELENGTH = 2350 +SCI_BRACEHIGHLIGHT = 2351 +SCI_BRACEBADLIGHT = 2352 +SCI_BRACEMATCH = 2353 +SCI_GETVIEWEOL = 2355 +SCI_SETVIEWEOL = 2356 +SCI_GETDOCPOINTER = 2357 +SCI_SETDOCPOINTER = 2358 +SCI_SETMODEVENTMASK = 2359 +EDGE_NONE = 0 +EDGE_LINE = 1 +EDGE_BACKGROUND = 2 +SCI_GETEDGECOLUMN = 2360 +SCI_SETEDGECOLUMN = 2361 +SCI_GETEDGEMODE = 2362 +SCI_SETEDGEMODE = 2363 +SCI_GETEDGECOLOUR = 2364 +SCI_SETEDGECOLOUR = 2365 +SCI_SEARCHANCHOR = 2366 +SCI_SEARCHNEXT = 2367 +SCI_SEARCHPREV = 2368 +SCI_LINESONSCREEN = 2370 +SCI_USEPOPUP = 2371 +SCI_SELECTIONISRECTANGLE = 2372 +SCI_SETZOOM = 2373 +SCI_GETZOOM = 2374 +SCI_CREATEDOCUMENT = 2375 +SCI_ADDREFDOCUMENT = 2376 +SCI_RELEASEDOCUMENT = 2377 +SCI_GETMODEVENTMASK = 2378 +SCI_SETFOCUS = 2380 +SCI_GETFOCUS = 2381 +SCI_SETSTATUS = 2382 +SCI_GETSTATUS = 2383 +SCI_SETMOUSEDOWNCAPTURES = 2384 +SCI_GETMOUSEDOWNCAPTURES = 2385 +SC_CURSORNORMAL = -1 +SC_CURSORWAIT = 4 +SCI_SETCURSOR = 2386 +SCI_GETCURSOR = 2387 +SCI_SETCONTROLCHARSYMBOL = 2388 +SCI_GETCONTROLCHARSYMBOL = 2389 +SCI_WORDPARTLEFT = 2390 +SCI_WORDPARTLEFTEXTEND = 2391 +SCI_WORDPARTRIGHT = 2392 +SCI_WORDPARTRIGHTEXTEND = 2393 +VISIBLE_SLOP = 0x01 +VISIBLE_STRICT = 0x04 +SCI_SETVISIBLEPOLICY = 2394 +SCI_DELLINELEFT = 2395 +SCI_DELLINERIGHT = 2396 +SCI_SETXOFFSET = 2397 +SCI_GETXOFFSET = 2398 +SCI_CHOOSECARETX = 2399 +SCI_GRABFOCUS = 2400 +CARET_SLOP = 0x01 +CARET_STRICT = 0x04 +CARET_JUMPS = 0x10 +CARET_EVEN = 0x08 +SCI_SETXCARETPOLICY = 2402 +SCI_SETYCARETPOLICY = 2403 +SCI_SETPRINTWRAPMODE = 2406 +SCI_GETPRINTWRAPMODE = 2407 +SCI_SETHOTSPOTACTIVEFORE = 2410 +SCI_SETHOTSPOTACTIVEBACK = 2411 +SCI_SETHOTSPOTACTIVEUNDERLINE = 2412 +SCI_SETHOTSPOTSINGLELINE = 2421 +SCI_PARADOWN = 2413 +SCI_PARADOWNEXTEND = 2414 +SCI_PARAUP = 2415 +SCI_PARAUPEXTEND = 2416 +SCI_POSITIONBEFORE = 2417 +SCI_POSITIONAFTER = 2418 +SCI_COPYRANGE = 2419 +SCI_COPYTEXT = 2420 +SC_SEL_STREAM = 0 +SC_SEL_RECTANGLE = 1 +SC_SEL_LINES = 2 +SCI_SETSELECTIONMODE = 2422 +SCI_GETSELECTIONMODE = 2423 +SCI_GETLINESELSTARTPOSITION = 2424 +SCI_GETLINESELENDPOSITION = 2425 +SCI_LINEDOWNRECTEXTEND = 2426 +SCI_LINEUPRECTEXTEND = 2427 +SCI_CHARLEFTRECTEXTEND = 2428 +SCI_CHARRIGHTRECTEXTEND = 2429 +SCI_HOMERECTEXTEND = 2430 +SCI_VCHOMERECTEXTEND = 2431 +SCI_LINEENDRECTEXTEND = 2432 +SCI_PAGEUPRECTEXTEND = 2433 +SCI_PAGEDOWNRECTEXTEND = 2434 +SCI_STUTTEREDPAGEUP = 2435 +SCI_STUTTEREDPAGEUPEXTEND = 2436 +SCI_STUTTEREDPAGEDOWN = 2437 +SCI_STUTTEREDPAGEDOWNEXTEND = 2438 +SCI_WORDLEFTEND = 2439 +SCI_WORDLEFTENDEXTEND = 2440 +SCI_WORDRIGHTEND = 2441 +SCI_WORDRIGHTENDEXTEND = 2442 +SCI_SETWHITESPACECHARS = 2443 +SCI_SETCHARSDEFAULT = 2444 +SCI_STARTRECORD = 3001 +SCI_STOPRECORD = 3002 +SCI_SETLEXER = 4001 +SCI_GETLEXER = 4002 +SCI_COLOURISE = 4003 +SCI_SETPROPERTY = 4004 +KEYWORDSET_MAX = 8 +SCI_SETKEYWORDS = 4005 +SCI_SETLEXERLANGUAGE = 4006 +SCI_LOADLEXERLIBRARY = 4007 +SC_MOD_INSERTTEXT = 0x1 +SC_MOD_DELETETEXT = 0x2 +SC_MOD_CHANGESTYLE = 0x4 +SC_MOD_CHANGEFOLD = 0x8 +SC_PERFORMED_USER = 0x10 +SC_PERFORMED_UNDO = 0x20 +SC_PERFORMED_REDO = 0x40 +SC_LASTSTEPINUNDOREDO = 0x100 +SC_MOD_CHANGEMARKER = 0x200 +SC_MOD_BEFOREINSERT = 0x400 +SC_MOD_BEFOREDELETE = 0x800 +SC_MODEVENTMASKALL = 0xF77 +SCEN_CHANGE = 768 +SCEN_SETFOCUS = 512 +SCEN_KILLFOCUS = 256 +SCK_DOWN = 300 +SCK_UP = 301 +SCK_LEFT = 302 +SCK_RIGHT = 303 +SCK_HOME = 304 +SCK_END = 305 +SCK_PRIOR = 306 +SCK_NEXT = 307 +SCK_DELETE = 308 +SCK_INSERT = 309 +SCK_ESCAPE = 7 +SCK_BACK = 8 +SCK_TAB = 9 +SCK_RETURN = 13 +SCK_ADD = 310 +SCK_SUBTRACT = 311 +SCK_DIVIDE = 312 +SCMOD_SHIFT = 1 +SCMOD_CTRL = 2 +SCMOD_ALT = 4 +SCN_STYLENEEDED = 2000 +SCN_CHARADDED = 2001 +SCN_SAVEPOINTREACHED = 2002 +SCN_SAVEPOINTLEFT = 2003 +SCN_MODIFYATTEMPTRO = 2004 +SCN_KEY = 2005 +SCN_DOUBLECLICK = 2006 +SCN_UPDATEUI = 2007 +SCN_MODIFIED = 2008 +SCN_MACRORECORD = 2009 +SCN_MARGINCLICK = 2010 +SCN_NEEDSHOWN = 2011 +SCN_PAINTED = 2013 +SCN_USERLISTSELECTION = 2014 +SCN_URIDROPPED = 2015 +SCN_DWELLSTART = 2016 +SCN_DWELLEND = 2017 +SCN_ZOOM = 2018 +SCN_HOTSPOTCLICK = 2019 +SCN_HOTSPOTDOUBLECLICK = 2020 +SCN_CALLTIPCLICK = 2021 +SCI_SETCARETPOLICY = 2369 +CARET_CENTER = 0x02 +CARET_XEVEN = 0x08 +CARET_XJUMPS = 0x10 +SCN_POSCHANGED = 2012 +SCN_CHECKBRACE = 2007 +# Generated by h2py from Include\scilexer.h +SCLEX_CONTAINER = 0 +SCLEX_NULL = 1 +SCLEX_PYTHON = 2 +SCLEX_CPP = 3 +SCLEX_HTML = 4 +SCLEX_XML = 5 +SCLEX_PERL = 6 +SCLEX_SQL = 7 +SCLEX_VB = 8 +SCLEX_PROPERTIES = 9 +SCLEX_ERRORLIST = 10 +SCLEX_MAKEFILE = 11 +SCLEX_BATCH = 12 +SCLEX_XCODE = 13 +SCLEX_LATEX = 14 +SCLEX_LUA = 15 +SCLEX_DIFF = 16 +SCLEX_CONF = 17 +SCLEX_PASCAL = 18 +SCLEX_AVE = 19 +SCLEX_ADA = 20 +SCLEX_LISP = 21 +SCLEX_RUBY = 22 +SCLEX_EIFFEL = 23 +SCLEX_EIFFELKW = 24 +SCLEX_TCL = 25 +SCLEX_NNCRONTAB = 26 +SCLEX_BULLANT = 27 +SCLEX_VBSCRIPT = 28 +SCLEX_ASP = 29 +SCLEX_PHP = 30 +SCLEX_BAAN = 31 +SCLEX_MATLAB = 32 +SCLEX_SCRIPTOL = 33 +SCLEX_ASM = 34 +SCLEX_CPPNOCASE = 35 +SCLEX_FORTRAN = 36 +SCLEX_F77 = 37 +SCLEX_CSS = 38 +SCLEX_POV = 39 +SCLEX_LOUT = 40 +SCLEX_ESCRIPT = 41 +SCLEX_PS = 42 +SCLEX_NSIS = 43 +SCLEX_MMIXAL = 44 +SCLEX_CLW = 45 +SCLEX_CLWNOCASE = 46 +SCLEX_LOT = 47 +SCLEX_YAML = 48 +SCLEX_TEX = 49 +SCLEX_METAPOST = 50 +SCLEX_POWERBASIC = 51 +SCLEX_FORTH = 52 +SCLEX_ERLANG = 53 +SCLEX_AUTOMATIC = 1000 +SCE_P_DEFAULT = 0 +SCE_P_COMMENTLINE = 1 +SCE_P_NUMBER = 2 +SCE_P_STRING = 3 +SCE_P_CHARACTER = 4 +SCE_P_WORD = 5 +SCE_P_TRIPLE = 6 +SCE_P_TRIPLEDOUBLE = 7 +SCE_P_CLASSNAME = 8 +SCE_P_DEFNAME = 9 +SCE_P_OPERATOR = 10 +SCE_P_IDENTIFIER = 11 +SCE_P_COMMENTBLOCK = 12 +SCE_P_STRINGEOL = 13 +SCE_C_DEFAULT = 0 +SCE_C_COMMENT = 1 +SCE_C_COMMENTLINE = 2 +SCE_C_COMMENTDOC = 3 +SCE_C_NUMBER = 4 +SCE_C_WORD = 5 +SCE_C_STRING = 6 +SCE_C_CHARACTER = 7 +SCE_C_UUID = 8 +SCE_C_PREPROCESSOR = 9 +SCE_C_OPERATOR = 10 +SCE_C_IDENTIFIER = 11 +SCE_C_STRINGEOL = 12 +SCE_C_VERBATIM = 13 +SCE_C_REGEX = 14 +SCE_C_COMMENTLINEDOC = 15 +SCE_C_WORD2 = 16 +SCE_C_COMMENTDOCKEYWORD = 17 +SCE_C_COMMENTDOCKEYWORDERROR = 18 +SCE_C_GLOBALCLASS = 19 +SCE_H_DEFAULT = 0 +SCE_H_TAG = 1 +SCE_H_TAGUNKNOWN = 2 +SCE_H_ATTRIBUTE = 3 +SCE_H_ATTRIBUTEUNKNOWN = 4 +SCE_H_NUMBER = 5 +SCE_H_DOUBLESTRING = 6 +SCE_H_SINGLESTRING = 7 +SCE_H_OTHER = 8 +SCE_H_COMMENT = 9 +SCE_H_ENTITY = 10 +SCE_H_TAGEND = 11 +SCE_H_XMLSTART = 12 +SCE_H_XMLEND = 13 +SCE_H_SCRIPT = 14 +SCE_H_ASP = 15 +SCE_H_ASPAT = 16 +SCE_H_CDATA = 17 +SCE_H_QUESTION = 18 +SCE_H_VALUE = 19 +SCE_H_XCCOMMENT = 20 +SCE_H_SGML_DEFAULT = 21 +SCE_H_SGML_COMMAND = 22 +SCE_H_SGML_1ST_PARAM = 23 +SCE_H_SGML_DOUBLESTRING = 24 +SCE_H_SGML_SIMPLESTRING = 25 +SCE_H_SGML_ERROR = 26 +SCE_H_SGML_SPECIAL = 27 +SCE_H_SGML_ENTITY = 28 +SCE_H_SGML_COMMENT = 29 +SCE_H_SGML_1ST_PARAM_COMMENT = 30 +SCE_H_SGML_BLOCK_DEFAULT = 31 +SCE_HJ_START = 40 +SCE_HJ_DEFAULT = 41 +SCE_HJ_COMMENT = 42 +SCE_HJ_COMMENTLINE = 43 +SCE_HJ_COMMENTDOC = 44 +SCE_HJ_NUMBER = 45 +SCE_HJ_WORD = 46 +SCE_HJ_KEYWORD = 47 +SCE_HJ_DOUBLESTRING = 48 +SCE_HJ_SINGLESTRING = 49 +SCE_HJ_SYMBOLS = 50 +SCE_HJ_STRINGEOL = 51 +SCE_HJ_REGEX = 52 +SCE_HJA_START = 55 +SCE_HJA_DEFAULT = 56 +SCE_HJA_COMMENT = 57 +SCE_HJA_COMMENTLINE = 58 +SCE_HJA_COMMENTDOC = 59 +SCE_HJA_NUMBER = 60 +SCE_HJA_WORD = 61 +SCE_HJA_KEYWORD = 62 +SCE_HJA_DOUBLESTRING = 63 +SCE_HJA_SINGLESTRING = 64 +SCE_HJA_SYMBOLS = 65 +SCE_HJA_STRINGEOL = 66 +SCE_HJA_REGEX = 67 +SCE_HB_START = 70 +SCE_HB_DEFAULT = 71 +SCE_HB_COMMENTLINE = 72 +SCE_HB_NUMBER = 73 +SCE_HB_WORD = 74 +SCE_HB_STRING = 75 +SCE_HB_IDENTIFIER = 76 +SCE_HB_STRINGEOL = 77 +SCE_HBA_START = 80 +SCE_HBA_DEFAULT = 81 +SCE_HBA_COMMENTLINE = 82 +SCE_HBA_NUMBER = 83 +SCE_HBA_WORD = 84 +SCE_HBA_STRING = 85 +SCE_HBA_IDENTIFIER = 86 +SCE_HBA_STRINGEOL = 87 +SCE_HP_START = 90 +SCE_HP_DEFAULT = 91 +SCE_HP_COMMENTLINE = 92 +SCE_HP_NUMBER = 93 +SCE_HP_STRING = 94 +SCE_HP_CHARACTER = 95 +SCE_HP_WORD = 96 +SCE_HP_TRIPLE = 97 +SCE_HP_TRIPLEDOUBLE = 98 +SCE_HP_CLASSNAME = 99 +SCE_HP_DEFNAME = 100 +SCE_HP_OPERATOR = 101 +SCE_HP_IDENTIFIER = 102 +SCE_HPA_START = 105 +SCE_HPA_DEFAULT = 106 +SCE_HPA_COMMENTLINE = 107 +SCE_HPA_NUMBER = 108 +SCE_HPA_STRING = 109 +SCE_HPA_CHARACTER = 110 +SCE_HPA_WORD = 111 +SCE_HPA_TRIPLE = 112 +SCE_HPA_TRIPLEDOUBLE = 113 +SCE_HPA_CLASSNAME = 114 +SCE_HPA_DEFNAME = 115 +SCE_HPA_OPERATOR = 116 +SCE_HPA_IDENTIFIER = 117 +SCE_HPHP_DEFAULT = 118 +SCE_HPHP_HSTRING = 119 +SCE_HPHP_SIMPLESTRING = 120 +SCE_HPHP_WORD = 121 +SCE_HPHP_NUMBER = 122 +SCE_HPHP_VARIABLE = 123 +SCE_HPHP_COMMENT = 124 +SCE_HPHP_COMMENTLINE = 125 +SCE_HPHP_HSTRING_VARIABLE = 126 +SCE_HPHP_OPERATOR = 127 +SCE_PL_DEFAULT = 0 +SCE_PL_ERROR = 1 +SCE_PL_COMMENTLINE = 2 +SCE_PL_POD = 3 +SCE_PL_NUMBER = 4 +SCE_PL_WORD = 5 +SCE_PL_STRING = 6 +SCE_PL_CHARACTER = 7 +SCE_PL_PUNCTUATION = 8 +SCE_PL_PREPROCESSOR = 9 +SCE_PL_OPERATOR = 10 +SCE_PL_IDENTIFIER = 11 +SCE_PL_SCALAR = 12 +SCE_PL_ARRAY = 13 +SCE_PL_HASH = 14 +SCE_PL_SYMBOLTABLE = 15 +SCE_PL_REGEX = 17 +SCE_PL_REGSUBST = 18 +SCE_PL_LONGQUOTE = 19 +SCE_PL_BACKTICKS = 20 +SCE_PL_DATASECTION = 21 +SCE_PL_HERE_DELIM = 22 +SCE_PL_HERE_Q = 23 +SCE_PL_HERE_QQ = 24 +SCE_PL_HERE_QX = 25 +SCE_PL_STRING_Q = 26 +SCE_PL_STRING_QQ = 27 +SCE_PL_STRING_QX = 28 +SCE_PL_STRING_QR = 29 +SCE_PL_STRING_QW = 30 +SCE_B_DEFAULT = 0 +SCE_B_COMMENT = 1 +SCE_B_NUMBER = 2 +SCE_B_KEYWORD = 3 +SCE_B_STRING = 4 +SCE_B_PREPROCESSOR = 5 +SCE_B_OPERATOR = 6 +SCE_B_IDENTIFIER = 7 +SCE_B_DATE = 8 +SCE_PROPS_DEFAULT = 0 +SCE_PROPS_COMMENT = 1 +SCE_PROPS_SECTION = 2 +SCE_PROPS_ASSIGNMENT = 3 +SCE_PROPS_DEFVAL = 4 +SCE_L_DEFAULT = 0 +SCE_L_COMMAND = 1 +SCE_L_TAG = 2 +SCE_L_MATH = 3 +SCE_L_COMMENT = 4 +SCE_LUA_DEFAULT = 0 +SCE_LUA_COMMENT = 1 +SCE_LUA_COMMENTLINE = 2 +SCE_LUA_COMMENTDOC = 3 +SCE_LUA_NUMBER = 4 +SCE_LUA_WORD = 5 +SCE_LUA_STRING = 6 +SCE_LUA_CHARACTER = 7 +SCE_LUA_LITERALSTRING = 8 +SCE_LUA_PREPROCESSOR = 9 +SCE_LUA_OPERATOR = 10 +SCE_LUA_IDENTIFIER = 11 +SCE_LUA_STRINGEOL = 12 +SCE_LUA_WORD2 = 13 +SCE_LUA_WORD3 = 14 +SCE_LUA_WORD4 = 15 +SCE_LUA_WORD5 = 16 +SCE_LUA_WORD6 = 17 +SCE_LUA_WORD7 = 18 +SCE_LUA_WORD8 = 19 +SCE_ERR_DEFAULT = 0 +SCE_ERR_PYTHON = 1 +SCE_ERR_GCC = 2 +SCE_ERR_MS = 3 +SCE_ERR_CMD = 4 +SCE_ERR_BORLAND = 5 +SCE_ERR_PERL = 6 +SCE_ERR_NET = 7 +SCE_ERR_LUA = 8 +SCE_ERR_CTAG = 9 +SCE_ERR_DIFF_CHANGED = 10 +SCE_ERR_DIFF_ADDITION = 11 +SCE_ERR_DIFF_DELETION = 12 +SCE_ERR_DIFF_MESSAGE = 13 +SCE_ERR_PHP = 14 +SCE_ERR_ELF = 15 +SCE_ERR_IFC = 16 +SCE_BAT_DEFAULT = 0 +SCE_BAT_COMMENT = 1 +SCE_BAT_WORD = 2 +SCE_BAT_LABEL = 3 +SCE_BAT_HIDE = 4 +SCE_BAT_COMMAND = 5 +SCE_BAT_IDENTIFIER = 6 +SCE_BAT_OPERATOR = 7 +SCE_MAKE_DEFAULT = 0 +SCE_MAKE_COMMENT = 1 +SCE_MAKE_PREPROCESSOR = 2 +SCE_MAKE_IDENTIFIER = 3 +SCE_MAKE_OPERATOR = 4 +SCE_MAKE_TARGET = 5 +SCE_MAKE_IDEOL = 9 +SCE_DIFF_DEFAULT = 0 +SCE_DIFF_COMMENT = 1 +SCE_DIFF_COMMAND = 2 +SCE_DIFF_HEADER = 3 +SCE_DIFF_POSITION = 4 +SCE_DIFF_DELETED = 5 +SCE_DIFF_ADDED = 6 +SCE_CONF_DEFAULT = 0 +SCE_CONF_COMMENT = 1 +SCE_CONF_NUMBER = 2 +SCE_CONF_IDENTIFIER = 3 +SCE_CONF_EXTENSION = 4 +SCE_CONF_PARAMETER = 5 +SCE_CONF_STRING = 6 +SCE_CONF_OPERATOR = 7 +SCE_CONF_IP = 8 +SCE_CONF_DIRECTIVE = 9 +SCE_AVE_DEFAULT = 0 +SCE_AVE_COMMENT = 1 +SCE_AVE_NUMBER = 2 +SCE_AVE_WORD = 3 +SCE_AVE_STRING = 6 +SCE_AVE_ENUM = 7 +SCE_AVE_STRINGEOL = 8 +SCE_AVE_IDENTIFIER = 9 +SCE_AVE_OPERATOR = 10 +SCE_AVE_WORD1 = 11 +SCE_AVE_WORD2 = 12 +SCE_AVE_WORD3 = 13 +SCE_AVE_WORD4 = 14 +SCE_AVE_WORD5 = 15 +SCE_AVE_WORD6 = 16 +SCE_ADA_DEFAULT = 0 +SCE_ADA_WORD = 1 +SCE_ADA_IDENTIFIER = 2 +SCE_ADA_NUMBER = 3 +SCE_ADA_DELIMITER = 4 +SCE_ADA_CHARACTER = 5 +SCE_ADA_CHARACTEREOL = 6 +SCE_ADA_STRING = 7 +SCE_ADA_STRINGEOL = 8 +SCE_ADA_LABEL = 9 +SCE_ADA_COMMENTLINE = 10 +SCE_ADA_ILLEGAL = 11 +SCE_BAAN_DEFAULT = 0 +SCE_BAAN_COMMENT = 1 +SCE_BAAN_COMMENTDOC = 2 +SCE_BAAN_NUMBER = 3 +SCE_BAAN_WORD = 4 +SCE_BAAN_STRING = 5 +SCE_BAAN_PREPROCESSOR = 6 +SCE_BAAN_OPERATOR = 7 +SCE_BAAN_IDENTIFIER = 8 +SCE_BAAN_STRINGEOL = 9 +SCE_BAAN_WORD2 = 10 +SCE_LISP_DEFAULT = 0 +SCE_LISP_COMMENT = 1 +SCE_LISP_NUMBER = 2 +SCE_LISP_KEYWORD = 3 +SCE_LISP_STRING = 6 +SCE_LISP_STRINGEOL = 8 +SCE_LISP_IDENTIFIER = 9 +SCE_LISP_OPERATOR = 10 +SCE_EIFFEL_DEFAULT = 0 +SCE_EIFFEL_COMMENTLINE = 1 +SCE_EIFFEL_NUMBER = 2 +SCE_EIFFEL_WORD = 3 +SCE_EIFFEL_STRING = 4 +SCE_EIFFEL_CHARACTER = 5 +SCE_EIFFEL_OPERATOR = 6 +SCE_EIFFEL_IDENTIFIER = 7 +SCE_EIFFEL_STRINGEOL = 8 +SCE_NNCRONTAB_DEFAULT = 0 +SCE_NNCRONTAB_COMMENT = 1 +SCE_NNCRONTAB_TASK = 2 +SCE_NNCRONTAB_SECTION = 3 +SCE_NNCRONTAB_KEYWORD = 4 +SCE_NNCRONTAB_MODIFIER = 5 +SCE_NNCRONTAB_ASTERISK = 6 +SCE_NNCRONTAB_NUMBER = 7 +SCE_NNCRONTAB_STRING = 8 +SCE_NNCRONTAB_ENVIRONMENT = 9 +SCE_NNCRONTAB_IDENTIFIER = 10 +SCE_FORTH_DEFAULT = 0 +SCE_FORTH_COMMENT = 1 +SCE_FORTH_COMMENT_ML = 2 +SCE_FORTH_IDENTIFIER = 3 +SCE_FORTH_CONTROL = 4 +SCE_FORTH_KEYWORD = 5 +SCE_FORTH_DEFWORD = 6 +SCE_FORTH_PREWORD1 = 7 +SCE_FORTH_PREWORD2 = 8 +SCE_FORTH_NUMBER = 9 +SCE_FORTH_STRING = 10 +SCE_FORTH_LOCALE = 11 +SCE_MATLAB_DEFAULT = 0 +SCE_MATLAB_COMMENT = 1 +SCE_MATLAB_COMMAND = 2 +SCE_MATLAB_NUMBER = 3 +SCE_MATLAB_KEYWORD = 4 +SCE_MATLAB_STRING = 5 +SCE_MATLAB_OPERATOR = 6 +SCE_MATLAB_IDENTIFIER = 7 +SCE_SCRIPTOL_DEFAULT = 0 +SCE_SCRIPTOL_WHITE = 1 +SCE_SCRIPTOL_COMMENTLINE = 2 +SCE_SCRIPTOL_PERSISTENT = 3 +SCE_SCRIPTOL_CSTYLE = 4 +SCE_SCRIPTOL_COMMENTBLOCK = 5 +SCE_SCRIPTOL_NUMBER = 6 +SCE_SCRIPTOL_STRING = 7 +SCE_SCRIPTOL_CHARACTER = 8 +SCE_SCRIPTOL_STRINGEOL = 9 +SCE_SCRIPTOL_KEYWORD = 10 +SCE_SCRIPTOL_OPERATOR = 11 +SCE_SCRIPTOL_IDENTIFIER = 12 +SCE_SCRIPTOL_TRIPLE = 13 +SCE_SCRIPTOL_CLASSNAME = 14 +SCE_SCRIPTOL_PREPROCESSOR = 15 +SCE_ASM_DEFAULT = 0 +SCE_ASM_COMMENT = 1 +SCE_ASM_NUMBER = 2 +SCE_ASM_STRING = 3 +SCE_ASM_OPERATOR = 4 +SCE_ASM_IDENTIFIER = 5 +SCE_ASM_CPUINSTRUCTION = 6 +SCE_ASM_MATHINSTRUCTION = 7 +SCE_ASM_REGISTER = 8 +SCE_ASM_DIRECTIVE = 9 +SCE_ASM_DIRECTIVEOPERAND = 10 +SCE_ASM_COMMENTBLOCK = 11 +SCE_ASM_CHARACTER = 12 +SCE_ASM_STRINGEOL = 13 +SCE_ASM_EXTINSTRUCTION = 14 +SCE_F_DEFAULT = 0 +SCE_F_COMMENT = 1 +SCE_F_NUMBER = 2 +SCE_F_STRING1 = 3 +SCE_F_STRING2 = 4 +SCE_F_STRINGEOL = 5 +SCE_F_OPERATOR = 6 +SCE_F_IDENTIFIER = 7 +SCE_F_WORD = 8 +SCE_F_WORD2 = 9 +SCE_F_WORD3 = 10 +SCE_F_PREPROCESSOR = 11 +SCE_F_OPERATOR2 = 12 +SCE_F_LABEL = 13 +SCE_F_CONTINUATION = 14 +SCE_CSS_DEFAULT = 0 +SCE_CSS_TAG = 1 +SCE_CSS_CLASS = 2 +SCE_CSS_PSEUDOCLASS = 3 +SCE_CSS_UNKNOWN_PSEUDOCLASS = 4 +SCE_CSS_OPERATOR = 5 +SCE_CSS_IDENTIFIER = 6 +SCE_CSS_UNKNOWN_IDENTIFIER = 7 +SCE_CSS_VALUE = 8 +SCE_CSS_COMMENT = 9 +SCE_CSS_ID = 10 +SCE_CSS_IMPORTANT = 11 +SCE_CSS_DIRECTIVE = 12 +SCE_CSS_DOUBLESTRING = 13 +SCE_CSS_SINGLESTRING = 14 +SCE_POV_DEFAULT = 0 +SCE_POV_COMMENT = 1 +SCE_POV_COMMENTLINE = 2 +SCE_POV_NUMBER = 3 +SCE_POV_OPERATOR = 4 +SCE_POV_IDENTIFIER = 5 +SCE_POV_STRING = 6 +SCE_POV_STRINGEOL = 7 +SCE_POV_DIRECTIVE = 8 +SCE_POV_BADDIRECTIVE = 9 +SCE_POV_WORD2 = 10 +SCE_POV_WORD3 = 11 +SCE_POV_WORD4 = 12 +SCE_POV_WORD5 = 13 +SCE_POV_WORD6 = 14 +SCE_POV_WORD7 = 15 +SCE_POV_WORD8 = 16 +SCE_LOUT_DEFAULT = 0 +SCE_LOUT_COMMENT = 1 +SCE_LOUT_NUMBER = 2 +SCE_LOUT_WORD = 3 +SCE_LOUT_WORD2 = 4 +SCE_LOUT_WORD3 = 5 +SCE_LOUT_WORD4 = 6 +SCE_LOUT_STRING = 7 +SCE_LOUT_OPERATOR = 8 +SCE_LOUT_IDENTIFIER = 9 +SCE_LOUT_STRINGEOL = 10 +SCE_ESCRIPT_DEFAULT = 0 +SCE_ESCRIPT_COMMENT = 1 +SCE_ESCRIPT_COMMENTLINE = 2 +SCE_ESCRIPT_COMMENTDOC = 3 +SCE_ESCRIPT_NUMBER = 4 +SCE_ESCRIPT_WORD = 5 +SCE_ESCRIPT_STRING = 6 +SCE_ESCRIPT_OPERATOR = 7 +SCE_ESCRIPT_IDENTIFIER = 8 +SCE_ESCRIPT_BRACE = 9 +SCE_ESCRIPT_WORD2 = 10 +SCE_ESCRIPT_WORD3 = 11 +SCE_PS_DEFAULT = 0 +SCE_PS_COMMENT = 1 +SCE_PS_DSC_COMMENT = 2 +SCE_PS_DSC_VALUE = 3 +SCE_PS_NUMBER = 4 +SCE_PS_NAME = 5 +SCE_PS_KEYWORD = 6 +SCE_PS_LITERAL = 7 +SCE_PS_IMMEVAL = 8 +SCE_PS_PAREN_ARRAY = 9 +SCE_PS_PAREN_DICT = 10 +SCE_PS_PAREN_PROC = 11 +SCE_PS_TEXT = 12 +SCE_PS_HEXSTRING = 13 +SCE_PS_BASE85STRING = 14 +SCE_PS_BADSTRINGCHAR = 15 +SCE_NSIS_DEFAULT = 0 +SCE_NSIS_COMMENT = 1 +SCE_NSIS_STRINGDQ = 2 +SCE_NSIS_STRINGLQ = 3 +SCE_NSIS_STRINGRQ = 4 +SCE_NSIS_FUNCTION = 5 +SCE_NSIS_VARIABLE = 6 +SCE_NSIS_LABEL = 7 +SCE_NSIS_USERDEFINED = 8 +SCE_NSIS_SECTIONDEF = 9 +SCE_NSIS_SUBSECTIONDEF = 10 +SCE_NSIS_IFDEFINEDEF = 11 +SCE_NSIS_MACRODEF = 12 +SCE_NSIS_STRINGVAR = 13 +SCE_MMIXAL_LEADWS = 0 +SCE_MMIXAL_COMMENT = 1 +SCE_MMIXAL_LABEL = 2 +SCE_MMIXAL_OPCODE = 3 +SCE_MMIXAL_OPCODE_PRE = 4 +SCE_MMIXAL_OPCODE_VALID = 5 +SCE_MMIXAL_OPCODE_UNKNOWN = 6 +SCE_MMIXAL_OPCODE_POST = 7 +SCE_MMIXAL_OPERANDS = 8 +SCE_MMIXAL_NUMBER = 9 +SCE_MMIXAL_REF = 10 +SCE_MMIXAL_CHAR = 11 +SCE_MMIXAL_STRING = 12 +SCE_MMIXAL_REGISTER = 13 +SCE_MMIXAL_HEX = 14 +SCE_MMIXAL_OPERATOR = 15 +SCE_MMIXAL_SYMBOL = 16 +SCE_MMIXAL_INCLUDE = 17 +SCE_CLW_DEFAULT = 0 +SCE_CLW_LABEL = 1 +SCE_CLW_COMMENT = 2 +SCE_CLW_STRING = 3 +SCE_CLW_USER_IDENTIFIER = 4 +SCE_CLW_INTEGER_CONSTANT = 5 +SCE_CLW_REAL_CONSTANT = 6 +SCE_CLW_PICTURE_STRING = 7 +SCE_CLW_KEYWORD = 8 +SCE_CLW_COMPILER_DIRECTIVE = 9 +SCE_CLW_BUILTIN_PROCEDURES_FUNCTION = 10 +SCE_CLW_STRUCTURE_DATA_TYPE = 11 +SCE_CLW_ATTRIBUTE = 12 +SCE_CLW_STANDARD_EQUATE = 13 +SCE_CLW_ERROR = 14 +SCE_LOT_DEFAULT = 0 +SCE_LOT_HEADER = 1 +SCE_LOT_BREAK = 2 +SCE_LOT_SET = 3 +SCE_LOT_PASS = 4 +SCE_LOT_FAIL = 5 +SCE_LOT_ABORT = 6 +SCE_YAML_DEFAULT = 0 +SCE_YAML_COMMENT = 1 +SCE_YAML_IDENTIFIER = 2 +SCE_YAML_KEYWORD = 3 +SCE_YAML_NUMBER = 4 +SCE_YAML_REFERENCE = 5 +SCE_YAML_DOCUMENT = 6 +SCE_YAML_TEXT = 7 +SCE_YAML_ERROR = 8 +SCE_TEX_DEFAULT = 0 +SCE_TEX_SPECIAL = 1 +SCE_TEX_GROUP = 2 +SCE_TEX_SYMBOL = 3 +SCE_TEX_COMMAND = 4 +SCE_TEX_TEXT = 5 +SCE_METAPOST_DEFAULT = 0 +SCE_METAPOST_SPECIAL = 1 +SCE_METAPOST_GROUP = 2 +SCE_METAPOST_SYMBOL = 3 +SCE_METAPOST_COMMAND = 4 +SCE_METAPOST_TEXT = 5 +SCE_METAPOST_EXTRA = 6 +SCE_ERLANG_DEFAULT = 0 +SCE_ERLANG_COMMENT = 1 +SCE_ERLANG_VARIABLE = 2 +SCE_ERLANG_NUMBER = 3 +SCE_ERLANG_KEYWORD = 4 +SCE_ERLANG_STRING = 5 +SCE_ERLANG_OPERATOR = 6 +SCE_ERLANG_ATOM = 7 +SCE_ERLANG_FUNCTION_NAME = 8 +SCE_ERLANG_CHARACTER = 9 +SCE_ERLANG_MACRO = 10 +SCE_ERLANG_RECORD = 11 +SCE_ERLANG_SEPARATOR = 12 +SCE_ERLANG_NODE_NAME = 13 +SCE_ERLANG_UNKNOWN = 31 diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/view.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/view.py new file mode 100644 index 000000000..e2dd9d29a --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/scintilla/view.py @@ -0,0 +1,689 @@ +# A general purpose MFC CCtrlView view that uses Scintilla. + +import control +import IDLEenvironment # IDLE emulation. +from pywin.mfc import docview +from pywin.mfc import dialog +from scintillacon import * +import win32con +import win32ui +import afxres +import string +import array +import sys +import types +import __main__ # for attribute lookup +import bindings +import keycodes +import struct +import re +import os + +from pywin import is_platform_unicode + +PRINTDLGORD = 1538 +IDC_PRINT_MAG_EDIT = 1010 +EM_FORMATRANGE = win32con.WM_USER+57 + +wordbreaks = "._" + string.uppercase + string.lowercase + string.digits + +patImport=re.compile('import (?P.*)') + +_event_commands = [ + # File menu + "win32ui.ID_FILE_LOCATE", "win32ui.ID_FILE_CHECK", "afxres.ID_FILE_CLOSE", + "afxres.ID_FILE_NEW", "afxres.ID_FILE_OPEN", "afxres.ID_FILE_SAVE", + "afxres.ID_FILE_SAVE_AS", "win32ui.ID_FILE_SAVE_ALL", + # Edit menu + "afxres.ID_EDIT_UNDO", "afxres.ID_EDIT_REDO", "afxres.ID_EDIT_CUT", + "afxres.ID_EDIT_COPY", "afxres.ID_EDIT_PASTE", "afxres.ID_EDIT_SELECT_ALL", + "afxres.ID_EDIT_FIND", "afxres.ID_EDIT_REPEAT", "afxres.ID_EDIT_REPLACE", + # View menu + "win32ui.ID_VIEW_WHITESPACE", "win32ui.ID_VIEW_FIXED_FONT", + "win32ui.ID_VIEW_BROWSE", "win32ui.ID_VIEW_INTERACTIVE", + # Window menu + "afxres.ID_WINDOW_ARRANGE", "afxres.ID_WINDOW_CASCADE", + "afxres.ID_WINDOW_NEW", "afxres.ID_WINDOW_SPLIT", + "afxres.ID_WINDOW_TILE_HORZ", "afxres.ID_WINDOW_TILE_VERT", + # Others + "afxres.ID_APP_EXIT", "afxres.ID_APP_ABOUT", +] + +_extra_event_commands = [ + ("EditDelete", afxres.ID_EDIT_CLEAR), + ("LocateModule", win32ui.ID_FILE_LOCATE), + ("GotoLine", win32ui.ID_EDIT_GOTO_LINE), + ("DbgBreakpointToggle", win32ui.IDC_DBG_ADD), + ("DbgGo", win32ui.IDC_DBG_GO), + ("DbgStepOver", win32ui.IDC_DBG_STEPOVER), + ("DbgStep", win32ui.IDC_DBG_STEP), + ("DbgStepOut", win32ui.IDC_DBG_STEPOUT), + ("DbgBreakpointClearAll", win32ui.IDC_DBG_CLEAR), + ("DbgClose", win32ui.IDC_DBG_CLOSE), +] + +event_commands = [] +def _CreateEvents(): + for name in _event_commands: + val = eval(name) + name_parts = string.split(name, "_")[1:] + name_parts = map(string.capitalize, name_parts) + event =string.join(name_parts,'') + event_commands.append((event, val)) + for name, id in _extra_event_commands: + event_commands.append((name, id)) + +_CreateEvents() +del _event_commands; del _extra_event_commands + +command_reflectors = [ + (win32ui.ID_EDIT_UNDO, win32con.WM_UNDO), + (win32ui.ID_EDIT_REDO, SCI_REDO), + (win32ui.ID_EDIT_CUT, win32con.WM_CUT), + (win32ui.ID_EDIT_COPY, win32con.WM_COPY), + (win32ui.ID_EDIT_PASTE, win32con.WM_PASTE), + (win32ui.ID_EDIT_CLEAR, win32con.WM_CLEAR), + (win32ui.ID_EDIT_SELECT_ALL, SCI_SELECTALL), +] + +def DoBraceMatch(control): + curPos = control.SCIGetCurrentPos() + charBefore = ' ' + if curPos: charBefore = control.SCIGetCharAt(curPos-1) + charAt = control.SCIGetCharAt(curPos) + braceAtPos = braceOpposite = -1 + if charBefore in "[](){}": braceAtPos = curPos-1 + if braceAtPos==-1: + if charAt in "[](){}": braceAtPos = curPos + if braceAtPos != -1: + braceOpposite = control.SCIBraceMatch(braceAtPos, 0) + if braceAtPos != -1 and braceOpposite==-1: + control.SCIBraceBadHighlight(braceAtPos) + else: + # either clear them both or set them both. + control.SCIBraceHighlight(braceAtPos, braceOpposite) + +def _get_class_attributes(ob): + # Recurse into base classes looking for attributes + items = [] + try: + items = items + dir(ob) + for i in ob.__bases__: + for item in _get_class_attributes(i): + if item not in items: + items.append(item) + except AttributeError: + pass + return items + +# Supposed to look like an MFC CEditView, but +# also supports IDLE extensions and other source code generic features. +class CScintillaView(docview.CtrlView, control.CScintillaColorEditInterface): + def __init__(self, doc): + docview.CtrlView.__init__(self, doc, "Scintilla", win32con.WS_CHILD | win32con.WS_VSCROLL | win32con.WS_HSCROLL | win32con.WS_CLIPCHILDREN | win32con.WS_VISIBLE) + self._tabWidth = 8 # Mirror of what we send to Scintilla - never change this directly + self.bAutoCompleteAttributes = 1 + self.bShowCallTips = 1 + self.bMatchBraces = 0 # Editor option will default this to true later! + self.bindings = bindings.BindingsManager(self) + + self.idle = IDLEenvironment.IDLEEditorWindow(self) + self.idle.IDLEExtension("AutoExpand") + # SendScintilla is called so frequently it is worth optimizing. + self.SendScintilla = self._obj_.SendMessage + + def OnDestroy(self, msg): + self.SendScintilla = None + return docview.CtrlView.OnDestroy(self, msg) + + def _MakeColorizer(self): + ext = os.path.splitext(self.GetDocument().GetPathName())[1] + import formatter + return formatter.BuiltinPythonSourceFormatter(self, ext) + + +# def SendScintilla(self, msg, w=0, l=0): +# return self._obj_.SendMessage(msg, w, l) + + def SCISetTabWidth(self, width): + # I need to remember the tab-width for the AutoIndent extension. This may go. + self._tabWidth = width + control.CScintillaEditInterface.SCISetTabWidth(self, width) + + def GetTabWidth(self): + return self._tabWidth + + def HookHandlers(self): + # Create events for all the menu names. + for name, val in event_commands: +# handler = lambda id, code, tosend=val, parent=parent: parent.OnCommand(tosend, 0) and 0 + self.bindings.bind(name, None, cid=val) + + # Hook commands that do nothing other than send Scintilla messages. + for command, reflection in command_reflectors: + handler = lambda id, code, ss=self.SendScintilla, tosend=reflection: ss(tosend) and 0 + self.HookCommand(handler, command) + + self.HookCommand(self.OnCmdViewWS, win32ui.ID_VIEW_WHITESPACE) + self.HookCommandUpdate(self.OnUpdateViewWS, win32ui.ID_VIEW_WHITESPACE) + self.HookCommand(self.OnCmdViewIndentationGuides, win32ui.ID_VIEW_INDENTATIONGUIDES) + self.HookCommandUpdate(self.OnUpdateViewIndentationGuides, win32ui.ID_VIEW_INDENTATIONGUIDES) + self.HookCommand(self.OnCmdViewRightEdge, win32ui.ID_VIEW_RIGHT_EDGE) + self.HookCommandUpdate(self.OnUpdateViewRightEdge, win32ui.ID_VIEW_RIGHT_EDGE) + self.HookCommand(self.OnCmdViewEOL, win32ui.ID_VIEW_EOL) + self.HookCommandUpdate(self.OnUpdateViewEOL, win32ui.ID_VIEW_EOL) + self.HookCommand(self.OnCmdViewFixedFont, win32ui.ID_VIEW_FIXED_FONT) + self.HookCommandUpdate(self.OnUpdateViewFixedFont, win32ui.ID_VIEW_FIXED_FONT) + self.HookCommand(self.OnCmdFileLocate, win32ui.ID_FILE_LOCATE) + self.HookCommand(self.OnCmdEditFind, win32ui.ID_EDIT_FIND) + self.HookCommand(self.OnCmdEditRepeat, win32ui.ID_EDIT_REPEAT) + self.HookCommand(self.OnCmdEditReplace, win32ui.ID_EDIT_REPLACE) + self.HookCommand(self.OnCmdGotoLine, win32ui.ID_EDIT_GOTO_LINE) + self.HookCommand(self.OnFilePrint, afxres.ID_FILE_PRINT) + self.HookCommand(self.OnFilePrint, afxres.ID_FILE_PRINT_DIRECT) + self.HookCommand(self.OnFilePrintPreview, + win32ui.ID_FILE_PRINT_PREVIEW) + # Key bindings. + self.HookMessage(self.OnKeyDown, win32con.WM_KEYDOWN) + self.HookMessage(self.OnKeyDown, win32con.WM_SYSKEYDOWN) + # Hook wheeley mouse events +# self.HookMessage(self.OnMouseWheel, win32con.WM_MOUSEWHEEL) + self.HookFormatter() + + def OnInitialUpdate(self): + doc = self.GetDocument() + + # Enable Unicode if we can + if is_platform_unicode: + self.SendScintilla(SCI_SETCODEPAGE, SC_CP_UTF8, 0) + # Create margins + self.SendScintilla(SCI_SETMARGINTYPEN, 1, SC_MARGIN_SYMBOL); + self.SendScintilla(SCI_SETMARGINMASKN, 1, 0xF); + self.SendScintilla(SCI_SETMARGINTYPEN, 2, SC_MARGIN_SYMBOL); + self.SendScintilla(SCI_SETMARGINMASKN, 2, SC_MASK_FOLDERS); + self.SendScintilla(SCI_SETMARGINSENSITIVEN, 2, 1); + + self.GetDocument().HookViewNotifications(self) # is there an MFC way to grab this? + self.HookHandlers() + + # Load the configuration information. + self.OnWinIniChange(None) + + self.SetSel() + + self.GetDocument().FinalizeViewCreation(self) # is there an MFC way to grab this? + + + def _GetSubConfigNames(self): + return None # By default we use only sections without sub-sections. + + def OnWinIniChange(self, section = None): + self.bindings.prepare_configure() + try: + self.DoConfigChange() + finally: + self.bindings.complete_configure() + + def DoConfigChange(self): + # Bit of a hack I dont kow what to do about - these should be "editor options" + from pywin.framework.editor import GetEditorOption + self.bAutoCompleteAttributes = GetEditorOption("Autocomplete Attributes", 1) + self.bShowCallTips = GetEditorOption("Show Call Tips", 1) + # Update the key map and extension data. + configManager.configure(self, self._GetSubConfigNames()) + if configManager.last_error: + win32ui.MessageBox(configManager.last_error, "Configuration Error") + self.bMatchBraces = GetEditorOption("Match Braces", 1) + self.ApplyFormattingStyles(1) + + def OnDestroy(self, msg): + self.bindings.close() + self.bindings = None + self.idle.close() + self.idle = None + control.CScintillaColorEditInterface.close(self) + return docview.CtrlView.OnDestroy(self, msg) + + def OnMouseWheel(self, msg): + zDelta = msg[2] >> 16 + vpos = self.GetScrollPos(win32con.SB_VERT) + vpos = vpos - zDelta/40 # 3 lines per notch + self.SetScrollPos(win32con.SB_VERT, vpos) + self.SendScintilla(win32con.WM_VSCROLL, + (vpos<<16) | win32con.SB_THUMBPOSITION, + 0) + + def OnBraceMatch(self, std, extra): + if not self.bMatchBraces: return + DoBraceMatch(self) + + def OnNeedShown(self, std, extra): + notify = self.SCIUnpackNotifyMessage(extra) + # OnNeedShown is called before an edit operation when + # text is folded (as it is possible the text insertion will happen + # in a folded region.) As this happens _before_ the insert, + # we ignore the length (if we are at EOF, pos + length may + # actually be beyond the end of buffer) + self.EnsureCharsVisible(notify.position) + + def EnsureCharsVisible(self, start, end = None): + if end is None: end = start + lineStart = self.LineFromChar(min(start, end)) + lineEnd = self.LineFromChar(max(start, end)) + while lineStart <= lineEnd: + self.SCIEnsureVisible(lineStart) + lineStart = lineStart + 1 + + # Helper to add an event to a menu. + def AppendMenu(self, menu, text="", event=None, flags = None, checked=0): + if event is None: + assert flags is not None, "No event or custom flags!" + cmdid = 0 + else: + cmdid = self.bindings.get_command_id(event) + if cmdid is None: + # No event of that name - no point displaying it. + print 'View.AppendMenu(): Unknown event "%s" specified for menu text "%s" - ignored' % (event, text) + return + keyname = configManager.get_key_binding( event, self._GetSubConfigNames() ) + if keyname is not None: + text = text + "\t" + keyname + if flags is None: flags = win32con.MF_STRING|win32con.MF_ENABLED + if checked: flags = flags | win32con.MF_CHECKED + menu.AppendMenu(flags, cmdid, text) + + def OnKeyDown(self, msg): + return self.bindings.fire_key_event( msg ) + + def GotoEndOfFileEvent(self, event): + self.SetSel(-1) + + def KeyDotEvent(self, event): + self.SCIAddText(".") + if self.bAutoCompleteAttributes: + self._AutoComplete() + + # View Whitespace/EOL/Indentation UI. + + def OnCmdViewWS(self, cmd, code): # Handle the menu command + viewWS = self.SCIGetViewWS() + self.SCISetViewWS(not viewWS) + def OnUpdateViewWS(self, cmdui): # Update the tick on the UI. + cmdui.SetCheck(self.SCIGetViewWS()) + cmdui.Enable() + def OnCmdViewIndentationGuides(self, cmd, code): # Handle the menu command + viewIG = self.SCIGetIndentationGuides() + self.SCISetIndentationGuides(not viewIG) + def OnUpdateViewIndentationGuides(self, cmdui): # Update the tick on the UI. + cmdui.SetCheck(self.SCIGetIndentationGuides()) + cmdui.Enable() + def OnCmdViewRightEdge(self, cmd, code): # Handle the menu command + if self.SCIGetEdgeMode() == EDGE_NONE: + mode = EDGE_BACKGROUND + else: + mode = EDGE_NONE + self.SCISetEdgeMode(mode) + def OnUpdateViewRightEdge(self, cmdui): # Update the tick on the UI. + cmdui.SetCheck(self.SCIGetEdgeMode() != EDGE_NONE) + cmdui.Enable() + def OnCmdViewEOL(self, cmd, code): # Handle the menu command + viewEOL = self.SCIGetViewEOL() + self.SCISetViewEOL(not viewEOL) + def OnUpdateViewEOL(self, cmdui): # Update the tick on the UI. + cmdui.SetCheck(self.SCIGetViewEOL()) + cmdui.Enable() + + def OnCmdViewFixedFont(self, cmd, code): # Handle the menu command + self._GetColorizer().bUseFixed = not self._GetColorizer().bUseFixed + self.ApplyFormattingStyles(0) + # Ensure the selection is visible! + self.ScrollCaret() + + def OnUpdateViewFixedFont(self, cmdui): # Update the tick on the UI. + c = self._GetColorizer() + if c is not None: cmdui.SetCheck(c.bUseFixed) + cmdui.Enable(c is not None) + + def OnCmdEditFind(self, cmd, code): + import find + find.ShowFindDialog() + def OnCmdEditRepeat(self, cmd, code): + import find + find.FindNext() + def OnCmdEditReplace(self, cmd, code): + import find + find.ShowReplaceDialog() + + def OnCmdFileLocate(self, cmd, id): + line=string.strip(self.GetLine()) + import pywin.framework.scriptutils + m = patImport.match(line) + if m: + # Module name on this line - locate that! + modName = m.group('name') + fileName = pywin.framework.scriptutils.LocatePythonFile(modName) + if fileName is None: + win32ui.SetStatusText("Can't locate module %s" % modName) + return 1 # Let the default get it. + else: + win32ui.GetApp().OpenDocumentFile(fileName) + else: + # Just to a "normal" locate - let the default handler get it. + return 1 + return 0 + + def OnCmdGotoLine(self, cmd, id): + try: + lineNo = string.atoi(raw_input("Enter Line Number"))-1 + except (ValueError, KeyboardInterrupt): + return 0 + self.SCIEnsureVisible(lineNo) + self.SCIGotoLine(lineNo) + return 0 + + def SaveTextFile(self, filename): + doc = self.GetDocument() + s = self.GetTextRange() + if is_platform_unicode: + s = unicode(s,"utf-8").encode("mbcs") + f = open(filename, 'wb') + f.write(s) + f.close() + doc.SetModifiedFlag(0) + return 1 + + def _AutoComplete(self): + def list2dict(l): + ret={} + for i in l: + ret[i] = None + return ret + + self.SCIAutoCCancel() # Cancel old auto-complete lists. + # First try and get an object without evaluating calls + ob = self._GetObjectAtPos(bAllowCalls = 0) + # If that failed, try and process call or indexing to get the object. + if ob is None: + ob = self._GetObjectAtPos(bAllowCalls = 1) + items_dict = {} + if ob is not None: + try: # Catch unexpected errors when fetching attribute names from the object + try: + items_dict.update(list2dict(dir(ob))) + except AttributeError: + pass # object has no __dict__ + if hasattr(ob, "__class__"): + items_dict.update(list2dict(_get_class_attributes(ob.__class__))) + # The object may be a COM object with typelib support - lets see if we can get its props. + # (contributed by Stefan Migowsky) + try: + # Get the automation attributes + items_dict.update(ob.__class__._prop_map_get_) + # See if there is an write only property + # could be optimized + items_dict.update(ob.__class__._prop_map_put_) + # append to the already evaluated list + except AttributeError: + pass + # The object might be a pure COM dynamic dispatch with typelib support - lets see if we can get its props. + if hasattr(ob, "_oleobj_"): + try: + for iTI in xrange(0,ob._oleobj_.GetTypeInfoCount()): + typeInfo = ob._oleobj_.GetTypeInfo(iTI) + typeAttr = typeInfo.GetTypeAttr() + for iFun in xrange(0,typeAttr.cFuncs): + funDesc = typeInfo.GetFuncDesc(iFun) + funName = typeInfo.GetNames(funDesc.memid)[0] + if not items_dict.has_key(funName): + items_dict[funName] = None + except: + pass + except: + win32ui.SetStatusText("Error attempting to get object attributes - %s" % (`sys.exc_info()[0]`,)) + + # ensure all keys are strings. + items = map(str, items_dict.keys()) + # All names that start with "_" go! + items = filter(lambda word: word[0]!='_', items) + + if not items: + # Heuristics a-la AutoExpand + # The idea is to find other usages of the current binding + # and assume, that it refers to the same object (or at least, + # to an object of the same type) + # Contributed by Vadim Chugunov [vadimch@yahoo.com] + left, right = self._GetWordSplit() + if left=="": # Ignore standalone dots + return None + # We limit our search to the current class, if that + # information is available + minline, maxline, curclass = self._GetClassInfoFromBrowser() + endpos = self.LineIndex(maxline) + text = self.GetTextRange(self.LineIndex(minline),endpos) + try: + list = re.findall(r"\b"+left+"\.\w+",text) + except re.error: + # parens etc may make an invalid RE, but this code wouldnt + # benefit even if the RE did work :-) + list = [] + prefix = len(left)+1 + unique = {} + for li in list: + unique[li[prefix:]] = 1 + # Assuming traditional usage of self... + if curclass and left=="self": + self._UpdateWithClassMethods(unique,curclass) + + items = filter(lambda word: word[:2]!='__' or word[-2:]!='__', unique.keys()) + # Ignore the word currently to the right of the dot - probably a red-herring. + try: + items.remove(right[1:]) + except ValueError: + pass + if items: + items.sort() + self.SCIAutoCSetAutoHide(0) + self.SCIAutoCShow(items) + + # TODO: This is kinda slow. Probably need some kind of cache + # here that is flushed upon file save + # Or maybe we don't need the superclass methods at all ? + def _UpdateWithClassMethods(self,dict,classinfo): + if not hasattr(classinfo,"methods"): + # No 'methods' - probably not what we think it is. + return + dict.update(classinfo.methods) + for super in classinfo.super: + if hasattr(super,"methods"): + self._UpdateWithClassMethods(dict,super) + + # Find which class definition caret is currently in and return + # indexes of the the first and the last lines of that class definition + # Data is obtained from module browser (if enabled) + def _GetClassInfoFromBrowser(self,pos=-1): + minline = 0 + maxline = self.GetLineCount()-1 + doc = self.GetParentFrame().GetActiveDocument() + browser = None + try: + if doc is not None: + browser = doc.GetAllViews()[1] + except IndexError: + pass + if browser is None: + return (minline,maxline,None) # Current window has no browser + if not browser.list: return (minline,maxline,None) # Not initialized + path = self.GetDocument().GetPathName() + if not path: return (minline,maxline,None) # No current path + + import pywin.framework.scriptutils + curmodule, path = pywin.framework.scriptutils.GetPackageModuleName(path) + try: + clbrdata = browser.list.root.clbrdata + except AttributeError: + return (minline,maxline,None) # No class data for this module. + curline = self.LineFromChar(pos) + curclass = None + # Find out which class we are in + for item in clbrdata.values(): + if item.module==curmodule: + item_lineno = item.lineno - 1 # Scintilla counts lines from 0, whereas pyclbr - from 1 + if minline < item_lineno <= curline: + minline = item_lineno + curclass = item + if curline < item_lineno < maxline: + maxline = item_lineno + return (minline,maxline,curclass) + + + def _GetObjectAtPos(self, pos = -1, bAllowCalls = 0): + left, right = self._GetWordSplit(pos, bAllowCalls) + if left: # It is an attribute lookup + # How is this for a hack! + namespace = sys.modules.copy() + namespace.update(__main__.__dict__) + # Get the debugger's context. + try: + from pywin.framework import interact + if interact.edit is not None and interact.edit.currentView is not None: + globs, locs = interact.edit.currentView.GetContext()[:2] + if globs: namespace.update(globs) + if locs: namespace.update(locs) + except ImportError: + pass + try: + return eval(left, namespace) + except: + pass + return None + + def _GetWordSplit(self, pos = -1, bAllowCalls = 0): + if pos==-1: pos = self.GetSel()[0]-1 # Character before current one + limit = self.GetTextLength() + before = [] + after = [] + index = pos-1 + wordbreaks_use = wordbreaks + if bAllowCalls: wordbreaks_use = wordbreaks_use + "()[]" + while index>=0: + char = self.SCIGetCharAt(index) + if char not in wordbreaks_use: break + before.insert(0, char) + index = index-1 + index = pos + while index<=limit: + char = self.SCIGetCharAt(index) + if char not in wordbreaks_use: break + after.append(char) + index=index+1 + return string.join(before,''), string.join(after,'') + + def OnPrepareDC (self, dc, pInfo): +# print "OnPrepareDC for page", pInfo.GetCurPage(), "of", pInfo.GetFromPage(), "to", pInfo.GetToPage(), ", starts=", self.starts + if dc.IsPrinting(): + # Check if we are beyond the end. + # (only do this when actually printing, else messes up print preview!) + if not pInfo.GetPreview() and self.starts is not None: + prevPage = pInfo.GetCurPage() - 1 + if prevPage > 0 and self.starts[prevPage] >= self.GetTextLength(): + # All finished. + pInfo.SetContinuePrinting(0) + return + dc.SetMapMode(win32con.MM_TEXT); + + def OnPreparePrinting(self, pInfo): + flags = win32ui.PD_USEDEVMODECOPIES | \ + win32ui.PD_ALLPAGES | \ + win32ui.PD_NOSELECTION # Dont support printing just a selection. +# NOTE: Custom print dialogs are stopping the user's values from coming back :-( +# self.prtDlg = PrintDialog(pInfo, PRINTDLGORD, flags) +# pInfo.SetPrintDialog(self.prtDlg) + pInfo.SetMinPage(1) + # max page remains undefined for now. + pInfo.SetFromPage(1) + pInfo.SetToPage(1) + ret = self.DoPreparePrinting(pInfo) + return ret + + def OnBeginPrinting(self, dc, pInfo): + self.starts = None + return self._obj_.OnBeginPrinting(dc, pInfo) + + def CalculatePageRanges(self, dc, pInfo): + # Calculate page ranges and max page + self.starts = {0:0} + metrics = dc.GetTextMetrics() + left, top, right, bottom = pInfo.GetDraw() + # Leave space at the top for the header. + rc = (left, top + (9*metrics['tmHeight'])/2, right, bottom) + pageStart = 0 + maxPage = 0 + textLen = self.GetTextLength() + while pageStart < textLen: + pageStart = self.FormatRange(dc, pageStart, textLen, rc, 0) + maxPage = maxPage + 1 + self.starts[maxPage] = pageStart + # And a sentinal for one page past the end + self.starts[maxPage+1] = textLen + # When actually printing, maxPage doesnt have any effect at this late state. + # but is needed to make the Print Preview work correctly. + pInfo.SetMaxPage(maxPage) + + def OnFilePrintPreview(self, *arg): + self._obj_.OnFilePrintPreview() + + def OnFilePrint(self, *arg): + self._obj_.OnFilePrint() + + def FormatRange(self, dc, pageStart, lengthDoc, rc, draw): + hdcRender = dc.GetHandleOutput() + hdcFormat = dc.GetHandleAttrib() + fr = struct.pack('LLIIIIIIIIll', hdcRender, hdcFormat, rc[0], rc[1], rc[2], rc[3], rc[0], rc[1], rc[2], rc[3], pageStart, lengthDoc) + frBuff = array.array('c', fr) + addressFrBuff = frBuff.buffer_info()[0] + nextPageStart = self.SendScintilla(EM_FORMATRANGE, draw, addressFrBuff) + return nextPageStart + + def OnPrint(self, dc, pInfo): + metrics = dc.GetTextMetrics() +# print "dev", w, h, l, metrics['tmAscent'], metrics['tmDescent'] + if self.starts is None: + self.CalculatePageRanges(dc, pInfo) + pageNum = pInfo.GetCurPage() - 1 + # Setup the header of the page - docname on left, pagenum on right. + doc = self.GetDocument() + cxChar = metrics['tmAveCharWidth'] + cyChar = metrics['tmHeight'] + left, top, right, bottom = pInfo.GetDraw() + dc.TextOut(0, 2*cyChar, doc.GetTitle()) + pagenum_str = win32ui.LoadString(afxres.AFX_IDS_PRINTPAGENUM) % (pageNum+1,) + dc.SetTextAlign(win32con.TA_RIGHT) + dc.TextOut(right, 2*cyChar, pagenum_str) + dc.SetTextAlign(win32con.TA_LEFT) + top = top + (7*cyChar)/2 + dc.MoveTo(left, top) + dc.LineTo(right, top) + top = top + cyChar + rc = (left, top, right, bottom) + nextPageStart = self.FormatRange(dc, self.starts[pageNum], self.starts[pageNum+1], rc, 1) + +def LoadConfiguration(): + global configManager + # Bit of a hack I dont kow what to do about? + from config import ConfigManager + configName = rc = win32ui.GetProfileVal("Editor", "Keyboard Config", "default") + configManager = ConfigManager(configName) + if configManager.last_error: + bTryDefault = 0 + msg = "Error loading configuration '%s'\n\n%s" % (configName, configManager.last_error) + if configName != "default": + msg = msg + "\n\nThe default configuration will be loaded." + bTryDefault = 1 + win32ui.MessageBox(msg) + if bTryDefault: + configManager = ConfigManager("default") + if configManager.last_error: + win32ui.MessageBox("Error loading configuration 'default'\n\n%s" % (configManager.last_error)) + +configManager = None +LoadConfiguration() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/TraceCollector.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/TraceCollector.py new file mode 100644 index 000000000..889c2297d --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/TraceCollector.py @@ -0,0 +1,66 @@ +# win32traceutil like utility for Pythonwin +import thread +import win32trace, win32event, win32api +from pywin.framework import winout + +outputWindow = None + +def CollectorThread(stopEvent, file): + win32trace.InitRead() + handle = win32trace.GetHandle() + # Run this thread at a lower priority to the main message-loop (and printing output) + # thread can keep up + import win32process + win32process.SetThreadPriority(win32api.GetCurrentThread(), win32process.THREAD_PRIORITY_BELOW_NORMAL) + + try: + while 1: + rc = win32event.WaitForMultipleObjects((handle, stopEvent), 0, win32event.INFINITE) + if rc == win32event.WAIT_OBJECT_0: + # About the only char we can't live with is \0! + file.write(win32trace.read().replace("\0", "")) + else: + # Stop event + break + finally: + win32trace.TermRead() + print "Thread dieing" + +class WindowOutput(winout.WindowOutput): + def __init__(self, *args): + apply(winout.WindowOutput.__init__, (self,)+args) + self.hStopThread = win32event.CreateEvent(None, 0, 0, None) + thread.start_new(CollectorThread, (self.hStopThread, self)) + def _StopThread(self): + win32event.SetEvent(self.hStopThread) + self.hStopThread = None + def Close(self): + self._StopThread() + winout.WindowOutput.Close(self) +# def OnViewDestroy(self, frame): +# return winout.WindowOutput.OnViewDestroy(self, frame) +# def Create(self, title=None, style = None): +# rc = winout.WindowOutput.Create(self, title, style) + return rc + + +def MakeOutputWindow(): + # Note that it will not show until the first string written or + # you pass bShow = 1 + global outputWindow + if outputWindow is None: + title = "Python Trace Collector" + # queueingFlag doesnt matter, as all output will come from new thread + outputWindow = WindowOutput(title, title) + # Let people know what this does! + msg = """\ +# This window will display output from any programs that import win32traceutil +# win32com servers registered with '--debug' are in this category. +""" + outputWindow.write(msg) + # force existing window open + outputWindow.write('') + return outputWindow + +if __name__=='__main__': + MakeOutputWindow() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/__init__.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/__init__.py new file mode 100644 index 000000000..99a809136 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/__init__.py @@ -0,0 +1,2 @@ + + diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/browseProjects.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/browseProjects.py new file mode 100644 index 000000000..35bfc3c4a --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/browseProjects.py @@ -0,0 +1,257 @@ +import hierlist, string, regutil, os +import win32con, win32ui, win32api +import commctrl +from pywin.mfc import dialog +import glob +import pyclbr +import pywin.framework.scriptutils +import afxres + +class HLIErrorItem(hierlist.HierListItem): + def __init__(self, text): + self.text = text + hierlist.HierListItem.__init__(self) + def GetText(self): + return self.text + +class HLICLBRItem(hierlist.HierListItem): + def __init__(self, name, file, lineno, suffix = ""): + # If the 'name' object itself has a .name, use it. Not sure + # how this happens, but seems pyclbr related. + # See PyWin32 bug 817035 + self.name = getattr(name, "name", name) + self.file = file + self.lineno = lineno + self.suffix = suffix + def __cmp__(self, other): + return cmp(self.name, other.name) + def GetText(self): + return self.name + self.suffix + def TakeDefaultAction(self): + if self.file: + pywin.framework.scriptutils.JumpToDocument(self.file, self.lineno, bScrollToTop=1) + else: + win32ui.SetStatusText("The source of this object is unknown") + def PerformItemSelected(self): + if self.file is None: + msg = "%s - source can not be located." % (self.name, ) + else: + msg = "%s defined at line %d of %s" % (self.name, self.lineno, self.file) + win32ui.SetStatusText(msg) + +class HLICLBRClass(HLICLBRItem): + def __init__(self, clbrclass, suffix = ""): + try: + name = clbrclass.name + file = clbrclass.file + lineno = clbrclass.lineno + self.super = clbrclass.super + self.methods = clbrclass.methods + except AttributeError: + name = clbrclass + file = lineno = None + self.super = []; self.methods = {} + HLICLBRItem.__init__(self, name, file, lineno, suffix) + def GetSubList(self): + ret = [] + for c in self.super: + ret.append(HLICLBRClass(c, " (Parent class)")) + for meth, lineno in self.methods.items(): + ret.append(HLICLBRMethod(meth, self.file, lineno, " (method)")) + return ret + def IsExpandable(self): + return len(self.methods) + len(self.super) + def GetBitmapColumn(self): + return 21 + +class HLICLBRFunction(HLICLBRClass): + def GetBitmapColumn(self): + return 22 +class HLICLBRMethod(HLICLBRItem): + def GetBitmapColumn(self): + return 22 + +class HLIModuleItem(hierlist.HierListItem): + def __init__(self, path): + hierlist.HierListItem.__init__(self) + self.path = path + def GetText(self): + return os.path.split(self.path)[1] + " (module)" + def IsExpandable(self): + return 1 + def TakeDefaultAction(self): + win32ui.GetApp().OpenDocumentFile( self.path ) + def GetBitmapColumn(self): + col = 4 # Default + try: + if win32api.GetFileAttributes(self.path) & win32con.FILE_ATTRIBUTE_READONLY: + col = 5 + except win32api.error: + pass + return col + def GetSubList(self): + mod, path = pywin.framework.scriptutils.GetPackageModuleName(self.path) + win32ui.SetStatusText("Building class list - please wait...", 1) + win32ui.DoWaitCursor(1) + try: + try: + reader = pyclbr.readmodule_ex # Post 1.5.2 interface. + extra_msg = " or functions" + except AttributeError: + reader = pyclbr.readmodule + extra_msg = "" + data = reader(mod, [path]) + if data: + ret = [] + for item in data.values(): + if item.__class__ != pyclbr.Class: # ie, it is a pyclbr Function instance (only introduced post 1.5.2) + ret.append(HLICLBRFunction( item, " (function)" ) ) + else: + ret.append(HLICLBRClass( item, " (class)") ) + ret.sort() + return ret + else: + return [HLIErrorItem("No Python classes%s in module." % (extra_msg,))] + finally: + win32ui.DoWaitCursor(0) + win32ui.SetStatusText(win32ui.LoadString(afxres.AFX_IDS_IDLEMESSAGE)) + +def MakePathSubList(path): + ret = [] + for filename in glob.glob(os.path.join(path,'*')): + if os.path.isdir(filename) and os.path.isfile(os.path.join(filename, "__init__.py")): + ret.append(HLIDirectoryItem(filename, os.path.split(filename)[1])) + else: + if string.lower(os.path.splitext(filename)[1]) in ['.py', '.pyw']: + ret.append(HLIModuleItem(filename)) + return ret + +class HLIDirectoryItem(hierlist.HierListItem): + def __init__(self, path, displayName = None, bSubDirs = 0): + hierlist.HierListItem.__init__(self) + self.path = path + self.bSubDirs = bSubDirs + if displayName: + self.displayName = displayName + else: + self.displayName = path + def IsExpandable(self): + return 1 + def GetText(self): + return self.displayName + + def GetSubList(self): + ret = MakePathSubList(self.path) + if os.path.split(self.path)[1] == "win32com": # Complete and utter hack for win32com. + try: + path = win32api.GetFullPathName(os.path.join(self.path, "..\\win32comext")) + ret = ret + MakePathSubList(path) + except win32ui.error: + pass + return ret + +class HLIProjectRoot(hierlist.HierListItem): + def __init__(self, projectName, displayName = None): + hierlist.HierListItem.__init__(self) + self.projectName = projectName + self.displayName = displayName or projectName + def GetText(self): + return self.displayName + def IsExpandable(self): + return 1 + def GetSubList(self): + paths = regutil.GetRegisteredNamedPath(self.projectName) + pathList = string.split(paths,";") + if len(pathList)==1: # Single dir - dont bother putting the dir in + ret = MakePathSubList(pathList[0]) + else: + ret = map( HLIDirectoryItem, pathList ) + return ret + +class HLIRoot(hierlist.HierListItem): + def __init__(self): + hierlist.HierListItem.__init__(self) + def IsExpandable(self): + return 1 + def GetSubList(self): + keyStr = regutil.BuildDefaultPythonKey() + "\\PythonPath" + hKey = win32api.RegOpenKey(regutil.GetRootKey(), keyStr) + try: + ret = [] + ret.append(HLIProjectRoot("", "Standard Python Library")) # The core path. + index = 0 + while 1: + try: + ret.append(HLIProjectRoot(win32api.RegEnumKey(hKey, index))) + index = index + 1 + except win32api.error: + break + return ret + finally: + win32api.RegCloseKey(hKey) + +class dynamic_browser (dialog.Dialog): + style = win32con.WS_OVERLAPPEDWINDOW | win32con.WS_VISIBLE + cs = ( + win32con.WS_CHILD | + win32con.WS_VISIBLE | + commctrl.TVS_HASLINES | + commctrl.TVS_LINESATROOT | + commctrl.TVS_HASBUTTONS + ) + + dt = [ + ["Python Projects", (0, 0, 200, 200), style, None, (8, "MS Sans Serif")], + ["SysTreeView32", None, win32ui.IDC_LIST1, (0, 0, 200, 200), cs] + ] + + def __init__ (self, hli_root): + dialog.Dialog.__init__ (self, self.dt) + self.hier_list = hierlist.HierListWithItems ( + hli_root, + win32ui.IDB_BROWSER_HIER + ) + self.HookMessage (self.on_size, win32con.WM_SIZE) + + def OnInitDialog (self): + self.hier_list.HierInit (self) + return dialog.Dialog.OnInitDialog (self) + + def on_size (self, params): + lparam = params[3] + w = win32api.LOWORD(lparam) + h = win32api.HIWORD(lparam) + self.GetDlgItem (win32ui.IDC_LIST1).MoveWindow((0,0,w,h)) + +def BrowseDialog(): + root = HLIRoot() + if not root.IsExpandable(): + raise TypeError, "Browse() argument must have __dict__ attribute, or be a Browser supported type" + + dlg = dynamic_browser (root) + dlg.CreateWindow() + +def DockableBrowserCreator(parent): + root = HLIRoot() + hl = hierlist.HierListWithItems ( + root, + win32ui.IDB_BROWSER_HIER + ) + + style = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.WS_BORDER | commctrl.TVS_HASLINES | commctrl.TVS_LINESATROOT | commctrl.TVS_HASBUTTONS + + control = win32ui.CreateTreeCtrl() + control.CreateWindow(style, (0, 0, 150, 300), parent, win32ui.IDC_LIST1) + list = hl.HierInit (parent, control) + return control + +def DockablePathBrowser(): + import pywin.docking.DockingBar + bar = pywin.docking.DockingBar.DockingBar() + bar.CreateWindow(win32ui.GetMainFrame(), DockableBrowserCreator, "Path Browser", 0x8e0a) + bar.SetBarStyle( bar.GetBarStyle()|afxres.CBRS_TOOLTIPS|afxres.CBRS_FLYBY|afxres.CBRS_SIZE_DYNAMIC) + bar.EnableDocking(afxres.CBRS_ALIGN_ANY) + win32ui.GetMainFrame().DockControlBar(bar) + +# The "default" entry point +Browse = DockablePathBrowser diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/browser.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/browser.py new file mode 100644 index 000000000..ef62ce5c0 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/browser.py @@ -0,0 +1,424 @@ +# basic module browser. + +# usage: +# >>> import browser +# >>> browser.Browse() +# or +# >>> browser.Browse(your_module) +import __main__ +import string +import win32ui +from pywin.mfc import dialog + +import hierlist +from types import * + + +special_names = [ '__doc__', '__name__', '__self__' ] + +# +# HierList items +class HLIPythonObject(hierlist.HierListItem): + def __init__(self, myobject=None, name=None ): + hierlist.HierListItem.__init__(self) + self.myobject = myobject + self.knownExpandable = None + if name: + self.name=name + else: + try: + self.name=str(myobject.__name__) + except (AttributeError, TypeError): + try: + r = repr(myobject) + if len(r)>20: + r = r[:20] + "..." + self.name=r + except (AttributeError, TypeError): + self.name="???" + def __cmp__(self, other): + rc = cmp(self.name, other.name) + if rc==0: + rc = cmp(self.myobject, other.myobject) + return rc + def __repr__(self): + try: + type = self.GetHLIType() + except: + type = "Generic" + return "HLIPythonObject("+type+") - name: "+ self.name + " object: " + repr(self.myobject) + def GetText(self): + try: + return str(self.name) + ' (' + self.GetHLIType() + ')' + except AttributeError: + return str(self.name) + ' = ' + repr(self.myobject) + def InsertDocString(self, lst): + ob = None + try: + ob = self.myobject.__doc__ + except (AttributeError, TypeError): + pass + if ob: + lst.insert(0, HLIDocString( ob, "Doc" )) + + def GetSubList(self): + ret = [] + try: + for (key, ob) in self.myobject.__dict__.items(): + if key not in special_names: + ret.append(MakeHLI( ob, key ) ) + except (AttributeError, TypeError): + pass + try: + for name in self.myobject.__methods__: + ret.append(HLIMethod( name )) # no MakeHLI, as cant auto detect + except (AttributeError, TypeError): + pass + try: + for member in self.myobject.__members__: + if not member in special_names: + ret.append(MakeHLI(getattr(self.myobject, member), member)) + except (AttributeError, TypeError): + pass + ret.sort() + self.InsertDocString(ret) + return ret + # if the has a dict, it is expandable. + def IsExpandable(self): + if self.knownExpandable is None: + self.knownExpandable = self.CalculateIsExpandable() + return self.knownExpandable + + def CalculateIsExpandable(self): + if hasattr(self.myobject, '__doc__'): + return 1 + try: + for key in self.myobject.__dict__.keys(): + if key not in special_names: + return 1 + except (AttributeError, TypeError): + pass + try: + self.myobject.__methods__ + return 1 + except (AttributeError, TypeError): + pass + try: + for item in self.myobject.__members__: + if item not in special_names: + return 1 + except (AttributeError, TypeError): + pass + return 0 + def GetBitmapColumn(self): + if self.IsExpandable(): + return 0 + else: + return 4 + def TakeDefaultAction(self): + ShowObject(self.myobject, self.name) + + +class HLIDocString(HLIPythonObject): + def GetHLIType(self): + return "DocString" + def GetText(self): + return string.strip(self.myobject) + def IsExpandable(self): + return 0 + def GetBitmapColumn(self): + return 6 + +class HLIModule(HLIPythonObject): + def GetHLIType(self): + return "Module" + +class HLIFrame(HLIPythonObject): + def GetHLIType(self): + return "Stack Frame" + +class HLITraceback(HLIPythonObject): + def GetHLIType(self): + return "Traceback" + +class HLIClass(HLIPythonObject): + def GetHLIType(self): + return "Class" + def GetSubList(self): + ret = [] + for base in self.myobject.__bases__: + ret.append( MakeHLI(base, 'Base class: ' + base.__name__ ) ) + ret = ret + HLIPythonObject.GetSubList(self) + return ret + +class HLIMethod(HLIPythonObject): + # myobject is just a string for methods. + def GetHLIType(self): + return "Method" + def GetText(self): + return "Method: " + self.myobject + '()' + +class HLICode(HLIPythonObject): + def GetHLIType(self): + return "Code" + def IsExpandable(self): + return self.myobject + def GetSubList(self): + ret = [] + ret.append( MakeHLI( self.myobject.co_consts, "Constants (co_consts)" )) + ret.append( MakeHLI( self.myobject.co_names, "Names (co_names)" )) + ret.append( MakeHLI( self.myobject.co_filename, "Filename (co_filename)" )) + ret.append( MakeHLI( self.myobject.co_argcount, "Number of args (co_argcount)")) + ret.append( MakeHLI( self.myobject.co_varnames, "Param names (co_varnames)")) + + return ret + +class HLIInstance(HLIPythonObject): + def GetHLIType(self): + return "Instance" + def GetText(self): + return str(self.name) + ' (Instance of class ' + str(self.myobject.__class__.__name__) + ')' + def IsExpandable(self): + return 1 + def GetSubList(self): + ret = [] + ret.append( MakeHLI( self.myobject.__class__) ) + ret = ret + HLIPythonObject.GetSubList(self) + return ret + + +class HLIBuiltinFunction(HLIPythonObject): + def GetHLIType(self): + return "Builtin Function" + +class HLIFunction(HLIPythonObject): + def GetHLIType(self): + return "Function" + def IsExpandable(self): + return 1 + def GetSubList(self): + ret = [] +# ret.append( MakeHLI( self.myobject.func_argcount, "Arg Count" )) + try: + ret.append( MakeHLI( self.myobject.func_argdefs, "Arg Defs" )) + except AttributeError: + pass + ret.append( MakeHLI( self.myobject.func_code, "Code" )) + ret.append( MakeHLI( self.myobject.func_globals, "Globals" )) + self.InsertDocString(ret) + return ret + +class HLISeq(HLIPythonObject): + def GetHLIType(self): + return "Sequence (abstract!)" + def IsExpandable(self): + return len(self.myobject)>0 + def GetSubList(self): + ret = [] + pos=0 + for item in self.myobject: + ret.append(MakeHLI( item, '['+str(pos)+']' ) ) + pos=pos+1 + self.InsertDocString(ret) + return ret + +class HLIList(HLISeq): + def GetHLIType(self): + return "List" + +class HLITuple(HLISeq): + def GetHLIType(self): + return "Tuple" + +class HLIDict(HLIPythonObject): + def GetHLIType(self): + return "Dict" + def IsExpandable(self): + try: + self.myobject.__doc__ + return 1 + except (AttributeError, TypeError): + return len(self.myobject) > 0 + def GetSubList(self): + ret = [] + keys = self.myobject.keys() + keys.sort() + for key in keys: + ob = self.myobject[key] + ret.append(MakeHLI( ob, str(key) ) ) + self.InsertDocString(ret) + return ret + +# In Python 1.6, strings and Unicode have builtin methods, but we dont really want to see these +class HLIString(HLIPythonObject): + def IsExpandable(self): + return 0 + +TypeMap = { ClassType : HLIClass, + FunctionType: HLIFunction, + TupleType: HLITuple, + DictType: HLIDict, + ListType: HLIList, + ModuleType: HLIModule, + InstanceType : HLIInstance, + CodeType : HLICode, + BuiltinFunctionType : HLIBuiltinFunction, + FrameType : HLIFrame, + TracebackType : HLITraceback, + StringType : HLIString, + } +try: + TypeMap[UnicodeType] = HLIString +except NameError: + pass # Python 1.5 - no Unicode - no problem! + +def MakeHLI( ob, name=None ): + try: + cls = TypeMap[type(ob)] + except KeyError: + if hasattr(ob, '__class__'): # 'new style' class + cls = HLIInstance + else: + cls = HLIPythonObject + return cls( ob, name ) + +######################################### +# +# Dialog related. + + +class DialogShowObject(dialog.Dialog): + def __init__(self, object, title): + self.object = object + self.title = title + dialog.Dialog.__init__(self, win32ui.IDD_LARGE_EDIT) + def OnInitDialog(self): + import re + self.SetWindowText(self.title) + self.edit = self.GetDlgItem(win32ui.IDC_EDIT1) + try: + strval = str(self.object) + except: + t, v, tb = sys.exc_info() + strval = "Exception getting object value\n\n%s:%s" % (t, v) + tb = None + strval = re.sub('\n','\r\n', strval) + self.edit.ReplaceSel(strval) + +def ShowObject(object, title): + dlg = DialogShowObject(object, title) + dlg.DoModal() + +# And some mods for a sizable dialog from Sam Rushing! +import win32con +import win32api +import commctrl + +class dynamic_browser (dialog.Dialog): + style = win32con.WS_OVERLAPPEDWINDOW | win32con.WS_VISIBLE + cs = ( + win32con.WS_CHILD | + win32con.WS_VISIBLE | + commctrl.TVS_HASLINES | + commctrl.TVS_LINESATROOT | + commctrl.TVS_HASBUTTONS + ) + + dt = [ + ["Python Object Browser", (0, 0, 200, 200), style, None, (8, "MS Sans Serif")], + ["SysTreeView32", None, win32ui.IDC_LIST1, (0, 0, 200, 200), cs] + ] + + def __init__ (self, hli_root): + dialog.Dialog.__init__ (self, self.dt) + self.hier_list = hierlist.HierListWithItems ( + hli_root, + win32ui.IDB_BROWSER_HIER + ) + self.HookMessage (self.on_size, win32con.WM_SIZE) + + def OnInitDialog (self): + self.hier_list.HierInit (self) + return dialog.Dialog.OnInitDialog (self) + + def OnOK(self): + self.hier_list.HierTerm() + self.hier_list = None + return self._obj_.OnOK() + def OnCancel(self): + self.hier_list.HierTerm() + self.hier_list = None + return self._obj_.OnCancel() + + def on_size (self, params): + lparam = params[3] + w = win32api.LOWORD(lparam) + h = win32api.HIWORD(lparam) + self.GetDlgItem (win32ui.IDC_LIST1).MoveWindow((0,0,w,h)) + +def Browse (ob=__main__): + " Browse the argument, or the main dictionary " + root = MakeHLI (ob, 'root') + if not root.IsExpandable(): + raise TypeError, "Browse() argument must have __dict__ attribute, or be a Browser supported type" + + dlg = dynamic_browser (root) + dlg.CreateWindow() + +# +# +# Classes for using the browser in an MDI window, rather than a dialog +# +from pywin.mfc import docview +class BrowserTemplate(docview.DocTemplate): + def __init__(self): + docview.DocTemplate.__init__(self, win32ui.IDR_PYTHONTYPE, BrowserDocument, None, BrowserView) + + def OpenObject(self, root): # Use this instead of OpenDocumentFile. + # Look for existing open document + for doc in self.GetDocumentList(): + if doc.root==root: + doc.GetFirstView().ActivateFrame() + return doc + # not found - new one. + doc = BrowserDocument(self, root) + frame = self.CreateNewFrame(doc) + doc.OnNewDocument() + self.InitialUpdateFrame(frame, doc, 1) + return doc + +class BrowserDocument (docview.Document): + def __init__(self, template, root): + docview.Document.__init__(self, template) + self.root = root + self.SetTitle("Browser: " + root.name) + def OnOpenDocument (self, name): + raise TypeError, "This template can not open files" + return 0 + +class BrowserView(docview.TreeView): + def OnInitialUpdate(self): + import commctrl + rc = self._obj_.OnInitialUpdate() + list=hierlist.HierListWithItems( self.GetDocument().root, win32ui.IDB_BROWSER_HIER, win32ui.AFX_IDW_PANE_FIRST) + list.HierInit(self.GetParent()) + list.SetStyle(commctrl.TVS_HASLINES | commctrl.TVS_LINESATROOT | commctrl.TVS_HASBUTTONS) + return rc + +template = None +def MakeTemplate(): + global template + if template is None: + template = BrowserTemplate() #win32ui.IDR_PYTHONTYPE, BrowserDocument, None, BrowserView) + +def BrowseMDI(ob=__main__): + """Browse an object using an MDI window. + """ + + MakeTemplate() + root = MakeHLI(ob, repr(ob)) + if not root.IsExpandable(): + raise TypeError, "Browse() argument must have __dict__ attribute, or be a Browser supported type" + + template.OpenObject(root) + diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/hierlist.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/hierlist.py new file mode 100644 index 000000000..f4932e22c --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/hierlist.py @@ -0,0 +1,296 @@ +# hierlist +# +# IMPORTANT - Please read before using. + +# This module exposes an API for a Hierarchical Tree Control. +# Previously, a custom tree control was included in Pythonwin which +# has an API very similar to this. + +# The current control used is the common "Tree Control". This module exists now +# to provide an API similar to the old control, but for the new Tree control. + +# If you need to use the Tree Control, you may still find this API a reasonable +# choice. However, you should investigate using the tree control directly +# to provide maximum flexibility (but with extra work). + + +import win32ui +import win32con +import win32api +from win32api import RGB + +from pywin.mfc import object, window, docview, dialog +import commctrl + +# helper to get the text of an arbitary item +def GetItemText(item): + if type(item)==type(()) or type(item)==type([]): + use = item[0] + else: + use = item + if type(use)==type(''): + return use + else: + return repr(item) + + +class HierDialog(dialog.Dialog): + def __init__(self, title, hierList, bitmapID = win32ui.IDB_HIERFOLDERS, dlgID = win32ui.IDD_TREE, dll = None, childListBoxID = win32ui.IDC_LIST1): + dialog.Dialog.__init__(self, dlgID, dll ) # reuse this dialog. + self.hierList=hierList + self.dlgID = dlgID + self.title=title +# self.childListBoxID = childListBoxID + def OnInitDialog(self): + self.SetWindowText(self.title) + self.hierList.HierInit(self) + return dialog.Dialog.OnInitDialog(self) + +class HierList(object.Object): + def __init__(self, root, bitmapID = win32ui.IDB_HIERFOLDERS, listBoxId = None, bitmapMask = None): # used to create object. + self.list = None + self.bitmapID = bitmapID + self.root = root + self.listBoxId = listBoxId + self.itemHandleMap = {} + self.filledItemHandlesMap = {} + self.bitmapMask = bitmapMask + def __getattr__(self, attr): + l = self.__dict__['list'] + if l is not None: + return getattr(l, attr) + def ItemFromHandle(self, handle): + return self.itemHandleMap[handle] + def SetStyle(self, newStyle): + hwnd = self.list.GetSafeHwnd() + style = win32api.GetWindowLong(hwnd, win32con.GWL_STYLE); + win32api.SetWindowLong(hwnd, win32con.GWL_STYLE, (style | newStyle) ) + + def HierInit(self, parent, listControl = None ): # Used when window first exists. + # this also calls "Create" on the listbox. + # params - id of listbbox, ID of bitmap, size of bitmaps + if self.bitmapMask is None: + bitmapMask = RGB(0,0,255) + else: + bitmapMask = self.bitmapMask + self.imageList = win32ui.CreateImageList(self.bitmapID, 16, 0, bitmapMask) + if listControl is None: + if self.listBoxId is None: self.listBoxId = win32ui.IDC_LIST1 + self.list = parent.GetDlgItem(self.listBoxId) + else: + self.list = listControl + lbid = listControl.GetDlgCtrlID() + assert self.listBoxId is None or self.listBoxId == lbid, "An invalid listbox control ID has been specified (specified as %s, but exists as %s)" % (self.listBoxId, lbid) + self.listBoxId = lbid + self.list.SetImageList(self.imageList, commctrl.LVSIL_NORMAL) +# self.list.AttachObject(self) + parent.HookNotify(self.OnTreeItemExpanding, commctrl.TVN_ITEMEXPANDING) + parent.HookNotify(self.OnTreeItemSelChanged, commctrl.TVN_SELCHANGED) + parent.HookNotify(self.OnTreeItemDoubleClick, commctrl.NM_DBLCLK) + self.notify_parent = parent + + if self.root: + self.AcceptRoot(self.root) + + def DeleteAllItems(self): + self.list.DeleteAllItems() + self.root = None + self.itemHandleMap = {} + self.filledItemHandlesMap = {} + + def HierTerm(self): + # Dont want notifies as we kill the list. + parent = self.notify_parent # GetParentFrame() + parent.HookNotify(None, commctrl.TVN_ITEMEXPANDING) + parent.HookNotify(None, commctrl.TVN_SELCHANGED) + parent.HookNotify(None, commctrl.NM_DBLCLK) + self.DeleteAllItems() + self.list = None + self.notify_parent = None # Break a possible cycle + + def OnTreeItemDoubleClick(self,(hwndFrom, idFrom, code), extra): + if idFrom != self.listBoxId: return None + item = self.itemHandleMap[self.list.GetSelectedItem()] + self.TakeDefaultAction(item) + return 1 + + def OnTreeItemExpanding(self,(hwndFrom, idFrom, code), extra): + if idFrom != self.listBoxId: return None + action, itemOld, itemNew, pt = extra + itemHandle = itemNew[0] + if not self.filledItemHandlesMap.has_key(itemHandle): + item = self.itemHandleMap[itemHandle] + self.AddSubList(itemHandle, self.GetSubList(item)) + self.filledItemHandlesMap[itemHandle] = None + return 0 + + def OnTreeItemSelChanged(self,(hwndFrom, idFrom, code), extra): + if idFrom != self.listBoxId: return None + action, itemOld, itemNew, pt = extra + itemHandle = itemNew[0] + item = self.itemHandleMap[itemHandle] + self.PerformItemSelected(item) + return 1 + + def AddSubList(self, parentHandle, subItems): + for item in subItems: + self.AddItem(parentHandle, item) + + def AddItem(self, parentHandle, item, hInsertAfter = commctrl.TVI_LAST): + text = self.GetText(item) +# hitem = self.list.InsertItem(text, 0, 1) + if self.IsExpandable(item): + cItems = 1 # Trick it !! + else: + cItems = 0 + bitmapCol = self.GetBitmapColumn(item) + bitmapSel = self.GetSelectedBitmapColumn(item) + if bitmapSel is None: bitmapSel = bitmapCol + hitem = self.list.InsertItem(parentHandle, hInsertAfter, (None, None, None, text, bitmapCol, bitmapSel, cItems, 0)) + self.itemHandleMap[hitem] = item + return hitem + + def _GetChildHandles(self, handle): + ret = [] + try: + handle = self.list.GetChildItem(handle) + while 1: + ret.append(handle) + handle = self.list.GetNextItem(handle, commctrl.TVGN_NEXT) + except win32ui.error: + # out of children + pass + return ret + def ItemFromHandle(self, handle): + return self.itemHandleMap[handle] + + def Refresh(self, hparent = None): + # Attempt to refresh the given item's sub-entries, but maintain the tree state + # (ie, the selected item, expanded items, etc) + if hparent is None: hparent = commctrl.TVI_ROOT + if not self.filledItemHandlesMap.has_key(hparent): + # This item has never been expanded, so no refresh can possibly be required. + return + root_item = self.itemHandleMap[hparent] + old_handles = self._GetChildHandles(hparent) + old_items = map( self.ItemFromHandle, old_handles ) + new_items = self.GetSubList(root_item) + # Now an inefficient technique for synching the items. + inew = 0 + hAfter = commctrl.TVI_FIRST + for iold in range(len(old_items)): + inewlook = inew + matched = 0 + while inewlook < len(new_items): + if old_items[iold] == new_items[inewlook]: + matched = 1 + break + inewlook = inewlook + 1 + if matched: + # Insert the new items. +# print "Inserting after", old_items[iold], old_handles[iold] + for i in range(inew, inewlook): +# print "Inserting index %d (%s)" % (i, new_items[i]) + hAfter = self.AddItem(hparent, new_items[i], hAfter) + + inew = inewlook + 1 + # And recursively refresh iold + hold = old_handles[iold] + if self.filledItemHandlesMap.has_key(hold): + self.Refresh(hold) + else: + # Remove the deleted items. +# print "Deleting %d (%s)" % (iold, old_items[iold]) + hdelete = old_handles[iold] + # First recurse and remove the children from the map. + for hchild in self._GetChildHandles(hdelete): + del self.itemHandleMap[hchild] + if self.filledItemHandlesMap.has_key(hchild): + del self.filledItemHandlesMap[hchild] + self.list.DeleteItem(hdelete) + hAfter = old_handles[iold] + # Fill any remaining new items: + for newItem in new_items[inew:]: +# print "Inserting new item", newItem + self.AddItem(hparent, newItem) + def AcceptRoot(self, root): + self.list.DeleteAllItems() + self.itemHandleMap = {commctrl.TVI_ROOT : root} + self.filledItemHandlesMap = {commctrl.TVI_ROOT : root} + subItems = self.GetSubList(root) + self.AddSubList(0, subItems) + + def GetBitmapColumn(self, item): + if self.IsExpandable(item): + return 0 + else: + return 4 + def GetSelectedBitmapColumn(self, item): + return None # Use standard. + + def GetSelectedBitmapColumn(self, item): + return 0 + + def CheckChangedChildren(self): + return self.list.CheckChangedChildren() + def GetText(self,item): + return GetItemText(item) + def PerformItemSelected(self, item): + try: + win32ui.SetStatusText('Selected ' + self.GetText(item)) + except win32ui.error: # No status bar! + pass + def TakeDefaultAction(self, item): + win32ui.MessageBox('Got item ' + self.GetText(item)) + +########################################################################## +# +# Classes for use with seperate HierListItems. +# +# +class HierListWithItems(HierList): + def __init__(self, root, bitmapID = win32ui.IDB_HIERFOLDERS, listBoxID = None, bitmapMask = None): # used to create object. + HierList.__init__(self, root, bitmapID, listBoxID, bitmapMask ) + def DelegateCall( self, fn): + return fn() + def GetBitmapColumn(self, item): + rc = self.DelegateCall(item.GetBitmapColumn) + if rc is None: + rc = HierList.GetBitmapColumn(self, item) + return rc + def GetSelectedBitmapColumn(self, item): + return self.DelegateCall(item.GetSelectedBitmapColumn) + def IsExpandable(self, item): + return self.DelegateCall( item.IsExpandable) + def GetText(self, item): + return self.DelegateCall( item.GetText ) + def GetSubList(self, item): + return self.DelegateCall(item.GetSubList) + def PerformItemSelected(self, item): + func = getattr(item, "PerformItemSelected", None) + if func is None: + return HierList.PerformItemSelected( self, item ) + else: + return self.DelegateCall(func) + + def TakeDefaultAction(self, item): + func = getattr(item, "TakeDefaultAction", None) + if func is None: + return HierList.TakeDefaultAction( self, item ) + else: + return self.DelegateCall(func) + +# A hier list item - for use with a HierListWithItems +class HierListItem: + def __init__(self): + pass + def GetText(self): + pass + def GetSubList(self): + pass + def IsExpandable(self): + pass + def GetBitmapColumn(self): + return None # indicate he should do it. + def GetSelectedBitmapColumn(self): + return None # same as other diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/regedit.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/regedit.py new file mode 100644 index 000000000..b5ab737b2 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/regedit.py @@ -0,0 +1,329 @@ +# Regedit - a Registry Editor for Python +import win32api, win32ui, win32con, commctrl +from pywin.mfc import window, docview, dialog +import hierlist +import regutil +import string + +def SafeApply( fn, args, err_desc = "" ): + try: + apply(fn, args) + return 1 + except win32api.error, (rc, fn, msg): + msg = "Error " + err_desc + "\r\n\r\n" + msg + win32ui.MessageBox(msg) + return 0 + +class SplitterFrame(window.MDIChildWnd): + def __init__(self): + # call base CreateFrame + self.images = None + window.MDIChildWnd.__init__(self) + + def OnCreateClient(self, cp, context): + splitter = win32ui.CreateSplitter() + doc = context.doc + frame_rect = self.GetWindowRect() + size = ((frame_rect[2] - frame_rect[0]), + (frame_rect[3] - frame_rect[1])/2) + sub_size = (size[0]/3, size[1]) + splitter.CreateStatic (self, 1, 2) + # CTreeControl view + self.keysview = RegistryTreeView(doc) + # CListControl view + self.valuesview = RegistryValueView(doc) + + splitter.CreatePane (self.keysview, 0, 0, (sub_size)) + splitter.CreatePane (self.valuesview, 0, 1, (0,0)) # size ignored. + splitter.SetRowInfo(0, size[1] ,0) + # Setup items in the imagelist + + return 1 + + def OnItemDoubleClick(self,(hwndFrom, idFrom, code), extra): + if idFrom==win32ui.AFX_IDW_PANE_FIRST: + # Tree control + return None + elif idFrom==win32ui.AFX_IDW_PANE_FIRST + 1: + item = self.keysview.SelectedItem() + self.valuesview.EditValue(item) + return 0 + # List control + else: + return None # Pass it on + + def PerformItemSelected(self,item): + return self.valuesview.UpdateForRegItem(item) + + def OnDestroy(self, msg): + window.MDIChildWnd.OnDestroy(self, msg) + if self.images: + self.images.DeleteImageList() + self.images = None + +class RegistryTreeView(docview.TreeView): + def OnInitialUpdate(self): + rc = self._obj_.OnInitialUpdate() + self.frame = self.GetParent().GetParent() + self.hierList = hierlist.HierListWithItems( self.GetHLIRoot(), win32ui.IDB_HIERFOLDERS, win32ui.AFX_IDW_PANE_FIRST) + self.hierList.HierInit(self.frame, self.GetTreeCtrl()) + self.hierList.SetStyle(commctrl.TVS_HASLINES | commctrl.TVS_LINESATROOT | commctrl.TVS_HASBUTTONS) + self.hierList.PerformItemSelected = self.PerformItemSelected + + self.frame.HookNotify(self.frame.OnItemDoubleClick, commctrl.NM_DBLCLK) + self.frame.HookNotify(self.OnItemRightClick, commctrl.NM_RCLICK) +# self.HookMessage(self.OnItemRightClick, win32con.WM_RBUTTONUP) + + def GetHLIRoot(self): + doc = self.GetDocument() + regroot = doc.root + subkey = doc.subkey + return HLIRegistryKey(regroot, subkey, "Root") + + def OnItemRightClick(self, notify_data, extra): + # First select the item we right-clicked on. + pt = self.ScreenToClient(win32api.GetCursorPos()) + flags, hItem = self.HitTest(pt) + if hItem==0 or commctrl.TVHT_ONITEM & flags==0: + return None + self.Select(hItem, commctrl.TVGN_CARET) + + menu = win32ui.CreatePopupMenu() + menu.AppendMenu(win32con.MF_STRING|win32con.MF_ENABLED,1000, "Add Key") + menu.AppendMenu(win32con.MF_STRING|win32con.MF_ENABLED,1001, "Add Value") + menu.AppendMenu(win32con.MF_STRING|win32con.MF_ENABLED,1002, "Delete Key") + self.HookCommand(self.OnAddKey, 1000) + self.HookCommand(self.OnAddValue, 1001) + self.HookCommand(self.OnDeleteKey, 1002) + menu.TrackPopupMenu(win32api.GetCursorPos()) # track at mouse position. + return None + + def OnDeleteKey(self,command, code): + hitem = self.hierList.GetSelectedItem() + item = self.hierList.ItemFromHandle(hitem) + msg = "Are you sure you wish to delete the key '%s'?" % (item.keyName,) + id = win32ui.MessageBox(msg, None, win32con.MB_YESNO) + if id != win32con.IDYES: + return + if SafeApply(win32api.RegDeleteKey, (item.keyRoot, item.keyName), "deleting registry key" ): + # Get the items parent. + try: + hparent = self.GetParentItem(hitem) + except win32ui.error: + hparent = None + self.hierList.Refresh(hparent) + + def OnAddKey(self,command, code): + from pywin.mfc import dialog + val = dialog.GetSimpleInput("New key name", '', "Add new key") + if val is None: return # cancelled. + hitem = self.hierList.GetSelectedItem() + item = self.hierList.ItemFromHandle(hitem) + if SafeApply(win32api.RegCreateKey, (item.keyRoot, item.keyName + "\\" + val)): + self.hierList.Refresh(hitem) + + def OnAddValue(self,command, code): + from pywin.mfc import dialog + val = dialog.GetSimpleInput("New value", "", "Add new value") + if val is None: return # cancelled. + hitem = self.hierList.GetSelectedItem() + item = self.hierList.ItemFromHandle(hitem) + if SafeApply(win32api.RegSetValue, (item.keyRoot, item.keyName, win32con.REG_SZ, val)): + # Simply re-select the current item to refresh the right spitter. + self.PerformItemSelected(item) +# self.Select(hitem, commctrl.TVGN_CARET) + + def PerformItemSelected(self, item): + return self.frame.PerformItemSelected(item) + + def SelectedItem(self): + return self.hierList.ItemFromHandle(self.hierList.GetSelectedItem()) + + def SearchSelectedItem(self): + handle = self.hierList.GetChildItem(0) + while 1: +# print "State is", self.hierList.GetItemState(handle, -1) + if self.hierList.GetItemState(handle, commctrl.TVIS_SELECTED): +# print "Item is ", self.hierList.ItemFromHandle(handle) + return self.hierList.ItemFromHandle(handle) + handle = self.hierList.GetNextSiblingItem(handle) + +class RegistryValueView(docview.ListView): + def OnInitialUpdate(self): + hwnd = self._obj_.GetSafeHwnd() + style = win32api.GetWindowLong(hwnd, win32con.GWL_STYLE); + win32api.SetWindowLong(hwnd, win32con.GWL_STYLE, (style & ~commctrl.LVS_TYPEMASK) | commctrl.LVS_REPORT); + + itemDetails = (commctrl.LVCFMT_LEFT, 100, "Name", 0) + self.InsertColumn(0, itemDetails) + itemDetails = (commctrl.LVCFMT_LEFT, 500, "Data", 0) + self.InsertColumn(1, itemDetails) + + def UpdateForRegItem(self, item): + self.DeleteAllItems() + hkey = win32api.RegOpenKey(item.keyRoot, item.keyName) + try: + valNum = 0 + ret = [] + while 1: + try: + res = win32api.RegEnumValue(hkey, valNum) + except win32api.error: + break + name = res[0] + if not name: name = "(Default)" + self.InsertItem(valNum, name) + self.SetItemText(valNum, 1, str(res[1])) + valNum = valNum + 1 + finally: + win32api.RegCloseKey(hkey) + def EditValue(self, item): + # Edit the current value + class EditDialog(dialog.Dialog): + def __init__(self, item): + self.item = item + dialog.Dialog.__init__(self, win32ui.IDD_LARGE_EDIT) + def OnInitDialog(self): + self.SetWindowText("Enter new value") + self.GetDlgItem(win32con.IDCANCEL).ShowWindow(win32con.SW_SHOW) + self.edit = self.GetDlgItem(win32ui.IDC_EDIT1) + # Modify the edit windows style + style = win32api.GetWindowLong(self.edit.GetSafeHwnd(), win32con.GWL_STYLE) + style = style & (~win32con.ES_WANTRETURN) + win32api.SetWindowLong(self.edit.GetSafeHwnd(), win32con.GWL_STYLE, style) + self.edit.SetWindowText(str(self.item)) + self.edit.SetSel(-1) + return dialog.Dialog.OnInitDialog(self) + def OnDestroy(self,msg): + self.newvalue = self.edit.GetWindowText() + + try: + index = self.GetNextItem(-1, commctrl.LVNI_SELECTED) + except win32ui.error: + return # No item selected. + + if index==0: + keyVal = "" + else: + keyVal = self.GetItemText(index,0) + # Query for a new value. + try: + newVal = self.GetItemsCurrentValue(item, keyVal) + except TypeError, details: + win32ui.MessageBox(details) + return + + d = EditDialog(newVal) + if d.DoModal()==win32con.IDOK: + try: + self.SetItemsCurrentValue(item, keyVal, d.newvalue) + except win32api.error, (rc, fn, desc): + win32ui.MessageBox("Error setting value\r\n\n%s" % desc) + self.UpdateForRegItem(item) + + def GetItemsCurrentValue(self, item, valueName): + hkey = win32api.RegOpenKey(item.keyRoot, item.keyName) + try: + val, type = win32api.RegQueryValueEx(hkey, valueName) + if type != win32con.REG_SZ: + raise TypeError, "Only strings can be edited" + return val + finally: + win32api.RegCloseKey(hkey) + + def SetItemsCurrentValue(self, item, valueName, value): + # ** Assumes already checked is a string. + hkey = win32api.RegOpenKey(item.keyRoot, item.keyName , 0, win32con.KEY_SET_VALUE) + try: + win32api.RegSetValueEx(hkey, valueName, 0, win32con.REG_SZ, value) + finally: + win32api.RegCloseKey(hkey) + + +class RegTemplate(docview.DocTemplate): + def __init__(self): + docview.DocTemplate.__init__(self, win32ui.IDR_PYTHONTYPE, None, SplitterFrame, None) + +# def InitialUpdateFrame(self, frame, doc, makeVisible=1): +# self._obj_.InitialUpdateFrame(frame, doc, makeVisible) # call default handler. +# frame.InitialUpdateFrame(doc, makeVisible) + + def OpenRegistryKey(self, root = None, subkey = None): # Use this instead of OpenDocumentFile. + # Look for existing open document + if root is None: root = regutil.GetRootKey() + if subkey is None: subkey = regutil.BuildDefaultPythonKey() + for doc in self.GetDocumentList(): + if doc.root==root and doc.subkey==subkey: + doc.GetFirstView().ActivateFrame() + return doc + # not found - new one. + doc = RegDocument(self, root, subkey) + frame = self.CreateNewFrame(doc) + doc.OnNewDocument() + self.InitialUpdateFrame(frame, doc, 1) + return doc + +class RegDocument (docview.Document): + def __init__(self, template, root, subkey): + docview.Document.__init__(self, template) + self.root = root + self.subkey = subkey + self.SetTitle("Registry Editor: " + subkey) + + def OnOpenDocument (self, name): + raise TypeError, "This template can not open files" + return 0 + + +class HLIRegistryKey(hierlist.HierListItem): + def __init__( self, keyRoot, keyName, userName ): + self.keyRoot = keyRoot + self.keyName = keyName + self.userName = userName + hierlist.HierListItem.__init__(self) + def __cmp__(self, other): + rc = cmp(self.keyRoot, other.keyRoot) + if rc==0: + rc = cmp(self.keyName, other.keyName) + if rc==0: + rc = cmp(self.userName, other.userName) + return rc + def __repr__(self): + return "<%s with root=%s, key=%s>" % (self.__class__.__name__, self.keyRoot, self.keyName) + def GetText(self): + return self.userName + def IsExpandable(self): + # All keys are expandable, even if they currently have zero children. + return 1 +## hkey = win32api.RegOpenKey(self.keyRoot, self.keyName) +## try: +## keys, vals, dt = win32api.RegQueryInfoKey(hkey) +## return (keys>0) +## finally: +## win32api.RegCloseKey(hkey) + + def GetSubList(self): + hkey = win32api.RegOpenKey(self.keyRoot, self.keyName) + win32ui.DoWaitCursor(1) + try: + keyNum = 0 + ret = [] + while 1: + try: + key = win32api.RegEnumKey(hkey, keyNum) + except win32api.error: + break + ret.append(HLIRegistryKey(self.keyRoot, self.keyName + "\\" + key, key)) + keyNum = keyNum + 1 + finally: + win32api.RegCloseKey(hkey) + win32ui.DoWaitCursor(0) + return ret + +template = RegTemplate() + +def EditRegistry(root = None, key = None): + doc=template.OpenRegistryKey(root, key) + +if __name__=='__main__': + EditRegistry() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/regpy.py b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/regpy.py new file mode 100644 index 000000000..2659417a9 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pythonwin/pywin/tools/regpy.py @@ -0,0 +1,53 @@ +# (sort-of) Registry editor +import win32ui +import dialog +import win32con +import commctrl + +class RegistryControl: + def __init__(self, key): + self.key = key + +class RegEditPropertyPage(dialog.PropertyPage): + IDC_LISTVIEW = 1000 + def GetTemplate(self): + "Return the template used to create this dialog" + + w = 152 # Dialog width + h = 122 # Dialog height + SS_STD = win32con.WS_CHILD | win32con.WS_VISIBLE + FRAMEDLG_STD = win32con.WS_CAPTION | win32con.WS_SYSMENU + style = FRAMEDLG_STD | win32con.WS_VISIBLE | win32con.DS_SETFONT | win32con.WS_MINIMIZEBOX + template = [[self.caption, (0, 0, w, h), style, None, (8, 'Helv')], ] + lvStyle = SS_STD | commctrl.LVS_EDITLABELS | commctrl.LVS_REPORT | commctrl.LVS_AUTOARRANGE | commctrl.LVS_ALIGNLEFT | win32con.WS_BORDER | win32con.WS_TABSTOP + template.append(["SysListView32", "", self.IDC_LISTVIEW, (10, 10, 185, 100), lvStyle]) + return template + +class RegistryPage(RegEditPropertyPage): + def __init__(self): + self.caption="Path" + RegEditPropertyPage.__init__(self, self.GetTemplate()) + def OnInitDialog(self): + self.listview = self.GetDlgItem(self.IDC_LISTVIEW) + RegEditPropertyPage.OnInitDialog(self) + # Setup the listview columns + itemDetails = (commctrl.LVCFMT_LEFT, 100, "App", 0) + self.listview.InsertColumn(0, itemDetails) + itemDetails = (commctrl.LVCFMT_LEFT, 1024, "Paths", 0) + self.listview.InsertColumn(1, itemDetails) + + index = self.listview.InsertItem(0,"App") + self.listview.SetItemText(index, 1, "Path") + + +class RegistrySheet(dialog.PropertySheet): + def __init__(self, title): + dialog.PropertySheet.__init__(self, title) + self.HookMessage(self.OnActivate, win32con.WM_ACTIVATE) + def OnActivate(self, msg): + print "OnAcivate" + +def t(): + ps=RegistrySheet('Registry Settings') + ps.AddPage(RegistryPage()) + ps.DoModal() diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/scintilla.dll b/thirdparty/python25/Lib/site-packages/pythonwin/scintilla.dll new file mode 100644 index 0000000000000000000000000000000000000000..05b1e69370757864df70103adf166d84cd085649 GIT binary patch literal 247808 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�Rbe*H{9TpA5q}w=u=i2H8h@a1 z1eEdH??Nc!yDx9Q_>Xem8B_O(=7-F6?AiyL53qDH!3#ccX?^BQaCeLfN9%3S0{7^{ zq20O%KI+JYfiw62U=a2HYWIiMZ}n_(vBn3Y5BIv5F@*=b5ETL2=@!=gBRmVHuJu5@ zK=_Lch;!m0>eG(1xHB+-j_-(#hS&^AL?xV{g!|H3h=Bnj40R2rd-i_w|E*gYUMSe$fK5G)II(lHixWCua^zsR&62o42p2?w1-Q^Ftc;^{wd zf(C6Sehn(81g^~2lk0X-Q3!Z(>L0j~XVQHmuro$Q=EW`$KSaf*`$te`jf%~SRUp1@ z0h6v=aHork!T+n>H^3VIUuC}0>m#k!egEKVf#xG3X|1QT@zps z820~i*#E1|M|gTm+?Za2ylRlvdZ2_i?Ks>2|INpk(mL5*v!)$qV_*Prnrl={7)nGy z%k_dVbt>T23EG|<5cdBvXuU(=|EnO&y4ahK@T_nskxlCkQ33746iDk73ur#Zgko^_ zvE~QNb(}j{7#J9|PcVP%j!}^SmG9c$TMu*=b97eoln85QL0nny1&VU!|Ap-GnvE7G3hy5Lr0GH{3pmg!F+m#_a;J@ewP&oUj zNCdt(`se@uZqPcL4?&={ATPFp__Cl#@BR_iS)-x@_M!o32krmf5=XTX&T!Bj5G=hW zZr!0A-L5Rm*Q_tpi83F{VhHGTW$AWh0G&4UQAe)Rm7&|0ArKm;Au2N6AJYE2adf+K zbW1TG>psyb*&W5w8OhQe#nBnb(H+Ip8Of8@9VE~j0cyTU1O$Upa9U@ez<*ItGzb3| z1vv`hju>aA5{d9&beY~5XQtO2X~&rv7@7|=ftF#Wb#gZ!W@b`jJB~$nB z&r7>cH9utjyrjEE1tc!eeTex+_hFQ1xv71x^?zq9M`tNd31|3=Xg+Yx16_FCdH^&N z28tUuh#+_@D)NvBIF#Yp|4e9j_s?#2L|BUizKHw{YB7NtGH-XNF)%Qc@P)#B#nS7- zpw=DE(e2N|e8Ku+oiOu3P=LC#fQ>K!g(rJAe{dKgJSDnsr2Tj1=yvDmHex>9eWKH_ zyNIQ;kfpnbqqC5syNIW=5E7mRLTUWlTvS9rVTqIpnvXHHzAcdm4TFSY7|bP*e8U0H zA<&$Ho@}*0x4!Kx=ZNc!=ZP-i41HkcOXw^08d)Cr$Ab#hd{SjTxSTH zenaB}VV#Vfjx3#y9G#9l&{Tgc4pLBq&2K$W0y@YUWGUFOB_DOEwsR`QdIimTulVkmI+|jzTmE`!9NfRafqg=#Tk&a?M9r?mzf; zgtc1wj_8N^dU7C+V+r32XEg?fPIjnicW;1}Ie|TY=FFKe@D<|*V2fF-Kh&uOcgx;j z(UsHw&^sG6Y6@P^1igD80GuZ|{7PR%LtTI7Ojx&hS~s8Zfwab-|Noat@NaixYCgsk z0NbR&(tM1m(>(5QTID=Hk2vDx;b#Y^AJ|fV` z-hDI{W<&EE5l~k@ive;d7PxNE={D%~6Y8x|5$W_%5qVMh|39c5FY}_{|NsA>_zYcR4_yjc2gsgI>i;BW+7ZnAVhUPaM zcV$!%Dw~f8d}DJcso4Q4+PiFUbBGa`XQxM ziS!OuQ2X}xi%oyQEj$UBk3buMT~uUR50psnV1p>>2PyGUkqLyx21vEuE>kG%N}c&Q;udQj*#=&ciKKEjgLX#f9zsRI9Ycc$j! zOaaZunIL}c)&<2wKrpz%er+87;@G$U{{uh=enPyCkOws;0$*I_fTxk>BNDwe?o8n? zCZlQr83wM-Uo1l?=HKoo(CgyP1l}_Mu^OZZ%DqGCgRF4zzv&v}+sGu>_S%FCK$xIa_eNhW)<|T4)Non(KBQ==wFDfEQQ( z{{J5UzJ-IwyYvlc%novVkR#!T+yzgU_w)Mx1JBfpQXIsV3}% z4~F^R(P8MIF?4ym4Sbr@1GI4Y4GZX$Lr~M$;{Vm&5ETPZKi2>h98gwp=}fi8N5Sr-9OSIH+i_0|{zmF$Je}x~O=hb^54yfrNcPS%aguM#ZH2 z!;6fcpq_rI2y8(lvWq|ycg_EpkGrT?fTE#JHH#VSV^F8H`3MIn^m=PlEV@6uPy(A$ zvJ0f6+egL3_QASFig_0m9Z>#l_E9l$X#U3vI@Yo-JBt-$&kf2;3IbUTbTa;2OVP%Iueq9`w37j^O`#ha)L0ZXl*_MYAW*> z|8M@mR+pN^hHh&R*j%Wsmgu%>fMv1R+Vc;|)*r7qp*DgKG0zfsah?_2It1NM2cGo{ z07U?QOBks92VLjxqaqRxI&T29mpDYl0enPCQ1^)!o}d2z2W2uJ6_kkdQL#Z3s7XDq+I@%6tt|s3eF0Cu&m&Uloi5_|AWdUjLcwzVq~ce_gnO?2IaR5oL{4KBl{r`^= zR{X7?6>`wj2wrssIeHtk`$z)XiBtg{;tT3vf)tHrXF%=M z53S!y<+^#nhr9}AOqq|oggXv&oNMf1%NiAtI;HOaAWK2I!@6(0*zgB5C<1EEJA?Z1 z?$$qQ9(3Dv%Yym=#&5$r^*ZxdI`cR>^LYMW?q;(-TEY_mVg&pb1$7X@UidJ8GkhHA zJlEL6pz0m78xi(G4b--R9{e4iu?6Zl@W{6S)NyD2t2!|0%KcZh0h1PB(gaKzfJq%N zsR1Tcz@!40lmU|xU{VB3a)3z|Fv$QW|1g3~{sAVxfXNSF@(q}L0Vbb-$p>Ka4w$?F zCa-|W3t;jLm^=X{kATSoU~&(b+yN%HfXNMDat)YV0VbD#$vq4pm+SzOTfpQ7Fu4Xy zt^kuuz~lljIR{M60FzU|z+?)TOaPNH zU@`(shJeWcFzEv(J;0<3m~;S>0zY-+{;Mtk`(*~0oB}2%fXN;(*#Rb7z+?lMtO1i1 zV6p^E7J$hdFqr`+Q@~^bn2Z6F5nwU|Oa_2SA28_wCSAa!1DLb{lNMmo1WX!$NgXh$ z0VY+zqym_f0h1D7QUpv2fJq)O$pI!=z$62h`~&v;4>0)!Onv~9Z@}aWF!=;bJ^+(< zz~l`uc?C>f0F!6HWCEB>0h1YEG6zf+fXNatSpg<%z+?lMYyp!UV6q2HP5_frz~l@tIR{KG z0Fz6=FnI<{UI3F0)$Ofq~1hd-F)0FyjmQUFYffJq53DFY@IKI_PV`VaqARls}=FsTD3 z4Zx%cn6v0KiCIi4^2$+ljlQCd20ZgWV$qX==111Z=WC@t80FyOf zvH?uCfXNOp*#jmgfXOLfat4^3111-M$t7TN1(;j|CO3e|Enpx1SKR^T?E&-7ocXVM z0L(uE=br%c&w$AbVDbu>ya6WffXN47@(GxH0Vdyo$q!)i3z+-?CjWp*hA-gQ0FxYG zk_Su*fJqTBDFG&Bz@!40Q~{G3U{VK68h}X?FlhlMZNQ`hm~;V?9$?Z3Oa_3-5HJ}5 zCKJG93Yg3QlR03r08EyE$qF!8111~5WDA(=0Fymnasrr~0w!mG$vI$h0hn9?CU=0z zJz(+xm^=a|Pk_lYVDbW(yaFa~fXO>x@&TB90w!O8$v0r~1DN~*CVzm*KVXvKD>#I~ zBnOz}0h0n?QUpv&fJqrJsQ@Nbz@!G4)B%$QVA2FkT7XF#FzEm$UBILVnDhaY0bnu& zOh$mo7%-UtCR4y<2AIqNlLcV11WZ=(047_&WCxh+0h1HJ+wH0h1TNjG_z@!hDOaYS_U@`|x7J$hTFj)a6Yrtd!m}~))6TsvYFgXKEE&!8Dz~l-r zxdu#b0Fzt5o2TUFSlSjbh2{3sEOkMz!SHR>AFnI?|J^+(Xz~l=s`36jW0Fz(9 z;RKJU~&SO zoB}3ifXO*vasilJ0w!00$u(ed1DMx z@&TB90w!O8$v0r~1DN~*CVzm*KVXvK2RQt}BnOz}0h0n?QUpv&fJqrJsQ@Nbz@!G4 z)B%$QVA2FkT7XF#FzEm$UBILVnDhaY0bnu&Oh$mo7%-UtCR4y<2AIqNlLcV11WZ=(047_&WCxh+0h1HJ+wH0h1TN0KiCIi4^2$+ljlQCd20ZgWV$qX==111Z=WC@t80FyOfvH?uCfXNOp*#jmgfXOLf zat4^3111-M$t7TN1(;j|CO3e|Ensp7nA`&<4}i%dVDbc*JOd^#fXORh@&=f^112AU z$tPg)1(OlE+|957h`CQHC%1(>V> zlMP_91x$8;$sRB{0ZdK-lQY2N95A^6OfCVFE5PI$Fu4ItZUK`!z~mkqiv0h1@d z=O!9z90Wc{7 zCMCe6446~^lPX|R15E0GNdqux0wyiMqz#yK0Fy3Y(gRHT{DJhnApNfZuviF~i~y4{ zU@`$rrhv%|Fqs1;3&3Ovn5+PkHDIy9a)3!5Fev~gMZly4n3MsN3Sd$NOlp8h9WZGCCQZPk1(>t}lMZ0g z1x$K?Ngps70477gWDJ;00FxD_JGL=U~&qW zoB<~1fXM}5atWAR0Vdag$t_@V2bkOgCJ%tgBVh6bn7jcd?|{h%VDbr=d;uokfXNSF z@(Y;!0Ve-|Nrr#m5C)SRV3G$+3V=xwFew2hWx%8Ym{b9i8emcfOd5bm6EJB3CT+l^ z1DJFHlOABw2TTTl$q+CZ0VZR>WCEB>0h1YEG6zf+fXNatSpg<%z+?lMYyp!UV6q2H zP5_frz~l@tIR{KG0Fz6==}2+5Coz~TqMG6YOUfXNsznE)nJz+?uP%mI@HV6p^E zR)EPGFxdbmTfk%onCtY^ zwn5`T9AHraFew5iCBUQ%m{b6hDqvCrOzMD112AaO7=P<5{S)|KwBVzT+-t3F*Eih^-3*s+&#|tqfDT83GQ2_H%JGz643>f{0c|h_W}@C%TWcGIl@g=IC}{2{@c3l2HJ1 zYBXr6Ug{r)|GokheBHhr+P*xUz8wEUMP9!Jx#UF|GXn$YU<%haovu&1U7vvb@SxlE zL8C=-aqfc>f#a@sK$C3Uu6IDbdVTuEK4u1nGg&+t4ItD1f@VKcpD=Wn@^l~LU+*fw z=*rOywT)Y|l%pGB)raG*Pe2=X!8U>>zhC@k0$bZ$`-GuX@PDbu|5Abfr9A&jIbJyb z|NsB+ng6OO;NC(G=w>9_3?2iy|D|mIRW~r{%4MYR7|3OSg-TR-UYLM9c!cNh{}L6J z7Z?Bk|Ns4l^nvd;B0UZVcg3i1d^^k(*8Q+)WvkZXT7!j|>b94UGr?|Nmd#d;xSkhe-1!hSxe! zS%~-zi1;mr*Pzw0BHs^zRG03!8KWWr!Y4sDM}Vg4`7Bvwcnsv~^#1dL=;j}c-Mo94 zbmh7^J9%Sx4CG4vGa48`>mMSRKo`VDE(V1SXqEQs%4P+Ig&^KyP?)`tW@2E-5ILwL z_u~A&|NoD(sEAC|m&;(7pfC607b641f3P)?ukBk8l-hu`wH_!jel6V13)0=q*?O{s z{r^RL>1o)_%8}d$jz!CyBH#k4>%m+VaVdim;p*7H$g|BA8-I=jsKms zf4WO~tiPA?SlWX8!r!unfq}vLLkVm1Kc-T{g$Xb3Pg#9n&_H5U_cu7%rtUxeG;foDvzd>Tn{}@a8tdEy+1&4#u((Zr%|66|t z8O~g)2~oJ>A7~o6l)1AOWN?Wv%t|h>G}uB=D(!ZC@>&X%sX4ki0|H-UGBPkkMuKtx zNYePg3ws6z2GBMM3w=ym;& z0=n6g;cz$nqKe4)xagCChqE{`R)7L*1!#sl^$$Z9Ll)zUXt2$%*`dV>$oeei|Drk{ zb>z-i^GaONmn&sF{1TL)&iq$h0xmzY{s%yo`hX7T;(?y?(3zvc)0?Bh69CFvE5Lbc z4Vc^lCU-FD%4P9n>;T!X@&Et-EYXu|tOZlWN}x;)E*)AAlyLvQfa0EJ*C#Bm zuf727Uk80M-r<$zvvCn>gv)z#-%_0i`IP9ku(1AU(^IjH-PD0*AD^zMKwU`T)!B*elY&f zX$mr{l*3+QTN(AwJ810`GmFT#KQ|KF^}5ZRo@ z!qA+?!4P*itoviHpTvt>KSA5eI^7I9-Ap>&EI<_mNXAVf;J;|jM;*CdKZCfJoB#j+ zAKIIv($V;41_J{F*gs*Nt|i?cUu^yV|NjmK1`WB4DGUq@oo*bRZY;g753(2njM?UJvHP?P%D&=UdeZpEK^;)F4_5)+7P;>1Q zmU50#uIAbo3}r0G+;|v!{UnaN2?($=FdTOic>;N)at4bn0Eulu($nkv;H8D` z|NlFVfMjMN$v~{^_WkhkMB(rMI}BFn$-S(?DxdP?|Nk8UEA`}FMq$W<%)g=Y|No8> zkh~R!JlMU<13)2jXO*7ZO9?a;Ap18w1*M7AdU7v+{Xq5YnKK~sD?sL}faGss$bVpqQ*1ro@<6Ni8Q-w^|n+J!6yHWeIx zpYMR(>$6i&?&Wk;C181Wu;B$D=?YY7uzy}K{QJLS3P?5zO%|G8CqvBN0a9X)s-)MK z1L~hUAX!O}e|$f@h=8qVeBXY$sLEPR(|>W|Be|Tk*!~m!Utjh9+2EjWI0d(fx@o{Wc34(bQQWZB)&J_ z28SQZZauk|;iyVL`d<|P{l7y4Bx!{z2`Vo^Wm7RkzYj=>II5CfUkq4L;R*p3f-^yFSvd;taZ3up+7?A4QdnF+1$6(#@BfFpUAF|ha0Baf0Lg9#%YF!W zVFVUS0f{Y!iOGS*IzVFmU>lCSlwSG!|BeSBky@ClA08lgupH8pdzlFndjb~I0EvZy z#C$)z{21`}{|+CJh%;2=K1iehBw`2>aeWZ*Vhvc|6p)zg$N&Gq;eQC!p4b5r;sOal zA`VJ|>W2=M|NnQ~0m;Am0F8F2>>05B7tVkG@8CJ9C-?FcraUMhnXiM>^8t{O<)}(} zeWCFPvPd3e(HoGeMwlva`Z|0KtiR@zp4`iHm<+@TVEOCrpa5C`lJ-EAK7)v>BOqzb z50J9F_3`ijJ6?c9#6cn;M@|A8!gE?r?j`dFl-P#WfN-PWW#kSIkm{@Nkpczm9$|=k zb3n4&k!7Lz;qz6ne}!urMTW!1ec=mnW9}{=Y*5B&mfe39Ap1A^LqlO4w1Afa;ToN5B8?C;&;mdWYmy zupK)NfW$Ao17(2^0WW;rz**o!zzb&(YsVXq>=u};K3GiPte)J<1u!vbkQmq(f*{ro z8<1=h+#ayZ;VaB+t1!jK1>?+h`&0i@*lTa+LG%ZIyy(jUh~J-L@BP^HiG`a%nh9XcTCm2V;G zj}hdg0FcOZkO(OK34skM0f{xg1x5RVm;4}y%>aoMf>il_cq#k$_x~MxKqB!_HLn#w zYHz%Jyabe@K{BpTnTt@FlOP$9OL}rIwV^WGp)%`1G7caaL8#1JsLWK5Ob$rq`x|J~ z7P){tIRPa0_zgS^K-o4!;s5^~TR;-05E9_nfs_w37XACb!{xG`+{;y%@*uB2z66e6 zk!yN#FWXU-fXwFrnQsA-%tDm}rC;9XZGY!GY57mzFuNY?km%LY*7*jxwoe_q2qisYXqAo&E4{4K2V2SD;IAo*Pw@*w|M z$b;J3Ao*Ds^4-2~UcRt|2Kj#{m@B`6SUWmy>B+rJdkslKhb;g9-?0WH5&{wdh2wd! zstX`7hu5HF@c>dsf)nW`u;d?*q%v6Y4wB?lu%yOqJ-L@`Fw+{rVm=_TPp@F%05;0_ zA~?S0JOcH9;8Nfa0?P|S&NZUHJ;+4QK(lBLF0n z_6p*Eo_nBPE=VKkz#?y67Ayqy;o!9cG^6+WLPLE= z2T1XDu;K?Von=AB+<0ld@b~{6TR<{%UqYiJ-L^W$a0_v0Hv=RGXMYYZ~;kMp-Y47YmWK<{_hZZp(poJ3PT=V$-ry79cw@; zKfC}r9~Kc8KtgxHLNMoi0STRY0risLd2kAmc&R7%aw|;m&pEK54M=bSSn~o%672Pz z0b|U8Fm_ac6jh_14Fd5W4^+h*kcvoj6`=ZxBlzF{9S1Li+ z0#x_~faHHYM+$n7^dC!~e-2V~;pJwq%$}Fd2*u05 zLK|KRfE4Gv)02B?^c)&5YwbWuZ30M44kk7eEVczC#sw2=1&iGPiG6zp)msP_`vVet z1QUw|iGlNcFo?B7Gt!T36K(bRnvId}0q24$D{{Mfu zb1tYa3L52wM$-Y10)CJJ-#0I3gS0#WiTr&E8l1`jbyV9xf*fr6axY&zh4=&FT1fq7 zb?5*89XcS{Q)sdf`DKql<8>hURhaUia$DRM6e}tm`f@KjK$iO6dHIFu&;K1BAdxc2 z=*>%|ufPBA$N`C@fJ9t50$$v=0qL6n5(@z9gBC$Mwt$3e!9uVsdjlk-1r~yKoe?>l zg;QVdB_CMs&dVy0%^Dz)KTkkO?9R&!kcbaRjFIPfEOhF<#Ad%@$K*{S!zzZReXL@~C{8t6t2C^dpBv}QP z{1EWst2M}{H6XFHC&)1XN-r2Fz(hEfn6i3~zHv(QXp8^*=6F^GTQI%x4 zOw^Zqp>+l{-v?5kkHq#` zOn9Lq_k!;U$XJjr1kOk>){x7vn4~Y4W$@zm8Ib-9AN1ui9+>FL?KHTmFZbfsw159I z7J&4hdyGZ@1(5y>kbZ|3#+O0*E1rS$vm3}|>@n4q+sScFU+%@$;NSlK2L^UMi z!+Z_7i~}J31}}bs-LLUWUoPW>jjr6z2OzCcAo~x1wECfH1$!dnz-kS-j1Lg~*TMQ3 ze(TF++;GyB+j-zR$p0Yy7eM;?u;||za7$nA#kI@7|7S3~)RBAf>Jh3Rvlucsrs&IM z$z(_{8pvgExa!L7TyaBR?#1NdfB!QcfQ;RatR;&fW5x||WVC@D15%qY0i+8QEiZbf z{`;Tt0i>%DqAO#=2@San1CSL4FH*r;CVbMD%h2)GmD@Q3xt$(& z^yOaMo$~L0h5<((y+|`$R(NOg7e})4{@e+t) z(D`x<89(mo%VjydD7y$s96LA+((CJkpnYQ42CZ0Hmc5q9x;loTglc#5Ay$ zK(LcQ3NsACbmewtJk*za;RVu?0McRy(E~K>GiIr%}M#;6%m*kp7GrVEgZaoeZ|WC018%=Z^dOaxYFz{`Wtl0i=H)HvJDk z`cKRR>tBq}?-K_~&-e7@UUY%C~C@Ote6AV|MdbW z%E10NNCstPko!+f`u9KM07(BnZ2AxAYRY9W%mwQ|i_pIyM^|p=i69514 zzadytF2i6RSpR3ResGf6Q?4twbHP)P|3Ug6fb`p8)4w5CQ!ayJAy_{z*#F@22sJTs2iqUhqbs*F;5jJ%C;t1N z!SG5)?!`V-tq}bmN;Tv%0+xY_07(A0G9Q#bUg*ocNXY;9KSKbdvjwg*!+~2%E@Q=N zeYvcV7qb!e@vHzj^^LyViztwN3Lss6a9v=lz(f{9#*Y^u%~=c?6>s$AG9*A61K#S( zy-);cGyrK7MQF@0kkgXOuvnunmlgAZ8Js^riZkx41cmQweYqE}CV+A=NZUQ|G!57q zIFT^{r2hm+f5eNEVE2OcA6X5G-&gu_FIIu{2Y~d?!>0cONdJtrASb`*N9cE13re3a z_2ph6gQ%UqA!o|8?N_RRrsg z_@^(Iv0xV{mfnN>-w(>)ApQ5i(=u?cgBckQbhYF%5(yr1>uUM$G@_dnwTNbwPf;xlK? zWE2E|!t)E*3P!LMVD~AU0aYPi^yOa60$K3@q^l3E3+y#8kul-Ard-AkkbMe}@H}%x zS8k`mSADq`1|a)BfOLkyb!L2M){@I8*aD6}?h~N!1m{ndTcGs!4b(OQ*~jo&NA86j zTo>3XFp=TVq9vDcU@JKNd_4-%56(6dZiCVf$ktcApj-;lfA1Ey@)4we!8Wk{wdX0j_2l>R~b6+rsuVb$NIC71C6q+jKQCs;o?ylU=&^7{`^`UmMZ0O^mzraxdh zDE(~*+b;^%54OMOA*g)%3GzQkzXM3W95(#|^EBi#et`5Fyy!d$az8jdes~Q^|Gz-# zzvtioi~x}Sd*EpjaInFNjD)kG@Y?}yGC=AVuzrnipj_}9@-28z7wyS^xfL6o7Q5z;$LUP}h>n=-37JFKFB?0DNax2E!jv`}Q9w{r7HAXEGW%wB<4^c7ye=1ebT<{2uUMS8iv+U(hP9ZcwfT>3??vOMDwBg7ojv zm&@{akq_1n4sQzjzh54H9~CJ2@B(5zgp!P0E*F=b}j0svAav1_Az*KkB`8u1RJ6fs3*7c0mu+n_uv0B z1VDyJq8gHM0Hpr`ME`oQeo(6<1EedXCP+_iX9J6Y+zVEaeg%;Jo8Y+-xEnGWj5Opj z5>A5M-w4(ZYL!6rO9bo5?YsaAt)p(g|7RG0^v^`o{{f_b0YtwwSU;#$0nxt&q<;mo zf!vE$kbVb{{zx?a2?iQ+84n=(UmgbeAMACJ5KwwzGmv|s)d|YKAgyw!TETwEP|yVR z_fCP`?|clTADn+Zdi3OWf+Fw5tB!yFGZH}h?}4XTz}nzMhJm(*T!zO*u>R-gK>9(t zGA>NiliTS4x}$CtNPhuH|2%B^7l8DixCGYE2uaV}267n-ChN)V1m9Sf1=8OD(jSLS zzW}H{&A1HKe;izYgKW*Pn5rkY6MUnc7D)dDkbXI^{+$Xu268Xf-u(YRV-`r111t*j z5V(*0GOh6+^iW@LpZ8@Lf)DDxzC7mg8zv9xlfE=V$bye6`f@MR5PVP{<7F6v59%|#bVKktKGk8 z1RvDge%a;>_b({5zx-AY_pinaeYuy%Y~g%RZT#{YLLSt*e0dDPU+`LA?&UTF|HLbO zxtGfje2JI(axbSL_#Z(0HUwYey}sPbG6Wyga(n59upiVWdl`n1U-402?xh=o52~$S znj!cZpY`QlvLW<)e9@PCDTa^-wPapCvw{2X#5aApm*48({10FC)ssmr9A^4y=?PVB( z52~YHx*_|o0(4A~ia4A~jx8L~5MFl1*qWXR5N$&j7lfgwA?FGF?)E+cjZF(Y;cEhBaY2P1X{ zA0u{#7$bIu93ysy8Y6awJ|lL9IY#UZ8;sZ)ju^2sTr*;4cwxlO@X3gs;g1nJgNQLZ zgOo8lgPJirgPt)vLxv$cgPk!ugNHFYLx?duL!2=?LzXc+LzyuMw z4BL#^84eh;Gn_GIXSim}&hW&To#BHqJHszyb_O;Rb_OXEb_NX-b_OdGb_PEac7_xa zc7_TQc7_fUc7{17>xEp`SSEp`SOEp`SrEp~=)n(PcuG}#$0XtFcx(`0AZpvlfKPm`UYPm`UY zL6e=KNRyo*O_QA=LX(}rL6e<9LzA6BK$D%}iv~NxGYxizOB(D9donwhGXjN z3>(zh8D^=oGjyr5GgPRvGo-1rGsLK~Gq|a$k5O%%+SCg z%Fxg*$k4D>kfGs;C_}?;eujq6oD2LF38Ye!Nt&E$HmYPC&AE=!phK~BFfOPjf2C12YFhL!AIagDoFJLlrMW!!<#M1~V>(23szMhGbTThH_Dc20d|x zhS}l_4ISJJ4dpxx4F!x04H--f4J!l~8k*P{8dO9W8g7U(G%OTgXh;N^%gfMU!^6;U zUYMcbf-pnFIbnu|y+RBPoI(r@%)$%}Z-f{c;sh8P>_iwEN(C4i8iW`cq=Xq7o`AxN zouQ$fjiI59jiG^`jiEt8oS`9vjiDisjiDinpP`|Wm7!sZ07HX<2tz{&J43@oVTOig zP&f)OGS)2?FQJf47xtt6Q8Jr9a zft(Bt!JG^YshkWAO&kmjH5?2LpI8|h+9enoZt*cRv`R2E2=X#Cqzf}N1hFzStYK$p zs9w!o|?AgrA`yospp-i3#NMHm{^a5FS8@-j565MpSU z%EQpGfRUl0n~9;Ji=ClCo{gbFmW`o7hK-?N1}{TH6ca;3786552RlQuGG2xTJr;(B{mcvv9DEE7{mcvv28;|17g-q^v>6#1O1T*tl9(A9 z(s&peUNbQ?=rb`iOkrYZSkB1MaGIN;Axe~?;XXe@gES~Fb22pS;$>)v3F? zLxiCrhL@q?85cuCG!H{V94|wI3@bxJ0|!IHG*O0z3}%Lg1W|^Dr~C{JYe9B$Gc=^| zGBoh;F*LaFFf;^;Gc+jhGBjj>$`nu@;bmwD;bmx0<6vmuWMgRP5MXFn&&|*f!^64LTeQ4Vi2V4a#f`4SfO(4Sn1U4fA*y8YVF@G&pfGG`tdHXi(>8XmI9cX!t0` z(C}W2p}~lop}~@yp&@~dpvZXkg}JXy{~TXt=?_&>+ph(2y*~ z&@fq?p&>$?p~0A+p}|O;p}|Ffp@B(^q2WIZLj$WALqjwpL&ISR`BPidoGc*LU zGc<64$|X=a$jH#p&dAW<%gE3WEW*$r#LCc6EWprEC&bY3iJhV077s(iA4Z0TKt6_s zE+K}7T6Ttp7FLFaqg)IP&Abc^9lQ(;sk{sgcR@5GLqicSL&J0yhK6tnhK3d%hK7S| z3=QqP3=O@!3=P*oamdTiAi&Jfz|FU_9h%+=Kurf5Ti!(IvFflanF)=j!2jv+ahK84*a)OVc;X9~| z<6&rs6lZ8?6Juz&&BxH-A-h zjE$k;pCChnt{_9hM-hgG3v3JxC)gMo%-9$jzVI+KXfQD}JYiyJC=_C7*eSr!Fja`5 zfk&93;WHmY!y93ShE6ethO2@M4NJus8aA;qG@KJ{1stnxGBicz`@JVUoU}I=V6<}!aWMycm6J}^|V`XTVD8SJ0jfbJ(852W803$<#5fej$Ca50dV`zxw zV`zxxV`w-bz|asT%+PR>pP^v`KSM(a8$*K)8$-iNZia?`JPZvVKy@Q8LqnVxLxT_# zL&HvHhK3*!h6YU$hK6)Oh6WQ6hK4%=3=Q2v3=K)b3=Kv?3=PwT7#h5U7#bpk7#gMt zF*JAzF*Jk=F*IcGGBhyoF*GppF*N+-WoXEkU}*Tr%+O%W#L&RR$I#FMs>c`^8aP-O z8q8Q28su0Q8hlt78nieW8Wu?~G%S>0Xi(!}Xi(*0XxJ>y&~TWap`nYDpG#uG^}G` zXlQ0^EUJEib z{1;+q_ycMmi!(F?urf4=fZE193=N%(3=Lh33=MC17#b9q7#i$AVaCVMkjTf-V9&?U zU=GR;0t^k8Ky69^hK6EJhK3SOhK3?ehK52;hK3YzhKAGP3=NZ*85&BN7#cj77#ilY zGBnI$WoWPxV`#8sWN5HuWN3IO%+S!l$k3o8!q5=G$IuWW!qA{C!q6~7h@pXUWNvL35Et;5r&2-!VC?Y`57A8c^DeH85tU+#26Ylc^MjhFflYZ@G&%` z@G&&J5NBx6XJKe4;b3Su$jQ*KUW}n3jfhy8uIuU8uIxV z8bo**8pL=R8a#O!8s>8`G_2!eXo%ovXqd{+(7++U&>$?p&>$wj&@hpep&?P6p&?0} zp<%r^Lqm)NLqn_tLqjnuL&G6ahK5Q}hK9BL3=N4K3=Nmr85$Tl85$0XGc;TfWoTH> z&(P4v&(QFblcB*Al;=4a8j=JU8XAQe8V(6CH2eqUd2WV=P!Wa(Ll%YxerAS-ViAUh zLJ@|BFiwVs1WtyAI8KI!7*2+U2u_BEd`^ajWRMx03=O563=Mv43=P|P7#e;tF*NLE zXJ|-fVQ5I^V`$)HWN2VuWoYPRVQBcu#L!^I#L&RX%h0eCWVawgLoPo8}W@uQ=#nAAQlcC`oA49`F zQHF+C5r&355r&3TA%=!_A%=#ZLJSQv_!t@vGBGr~0mUC5L&Hrbh6Y(Ch6X*5-?Zu!22TNoh5%4{7GP-DDag>!Ai&V@Tacka9@IYsl`p~!4aUL@4P~MX z4R)Li4Hr2X8h(SyZ&rqe$Dlq9H$%e>5r&3Y5)2IoSQ#4biZC>=voJKg;$>*?Vqs_~ zW@KpC!NSn6jfJ6MBOgP94HHAd4MB#69Das|6QFWlgrOlrgrT9Bo1vkBouT0eA43D1 zC_{s{1Vh6+VTOiJ%nS|p_!t__i!wAkVrOXJ=U`}fCcx0pBEisb6BO1G3=Qk}85)l9 zGc=S6GBgwmGBkvXGc@eyXK3JMW@yl4WN6@GWN1)lVQ64xWoU5bWN28-&d{)ihoM0a z)D{q6XmDm>Xs}^nX!yg#(6E?=p`j5J-wX^4VQTCQ6}IdQ+f>;Z_NlTnoKR(FxTDI> z@JyAR;g>2q1B)6vgMb=4gOnOOgNhnEgPs~YgP9sTgM%77gO?gRLxLJRLzWslLy;Og zLya0cLzfym!wfZchDB=Z3_H}=8P2G&Gu%>RXLzE<&hST#oqWU}vZ?U}up~KGbOPihHoi;neGi`Q;TiWalXSCTFc4@OStk7m>n5E6m5T?)0P^8Vy zkf6=ZprOysV4}^=prXyrAfnCA@K1}K;e{4E!!<2-h67sc44bsr8J20WGtAOrXXw#l zXQ&TvnUo#BigJHswLc7_#t>9aGi>9aGq>9aGmX|ppJ>9aFb=(01U>9R9~>9R98>9R8z=&~~?>9RA3 z=&~~~>9RApX|pr@&|_z~q63MyPbTaPS4`L$o|r)RR%YxBUS{kJF=p%x1!n9FZD#BY z)6CczmYK0LY%^nLIAzApaKnt9;gcCV1A{p`gM>LdgN`{ngM&FcgP%D&Ly9>&Ly0*% zLyI{(!z6Qdh9&0g4BO1v8IGB=Gu$#~XLx1K&hXEiok75Yok78Zox#9@ox#I`ogvJE zogu@5ouSNvoneXvJHs*yc7|OR>ewWM@#ZWM?q5WM^=* zWM>GoWM|MYV`pfxWM`OS$9BX!lCTn(v1=j2gd#u?R&RDZE+_Pq9cxTPdz+uDApkTw!U|_?} z;AF$j5Maa3z+lGCAZEtSkOOiD0|SGSEjxpgEjz;s8+L{w8+L{tHtYcp%LJ)rVDQiLFG$UE$xklLP0cF-sdI*L ztgKKa6*3a@QgTv@6jJh2ixu+nOB7NoGK)*}82s}I{Zh-}vM6@y`R5_YDd;LBC8j78rIwTy;eu?$r_ zoT+0$2xw<7faurK-1_LKlOjTTo1m)U<~lCiudsJTuSOs5Da{H$SB`CzXLAJh3P*GcR31SE0BhGbcwO zFJHkqJTuR+pg_S>AvrNmp|m(vk%56hHAP=Fg<)jpah;_)atYkJa-i_VhQl3${5<{K z6?7G#q3n@gT;iTnnyQeTUz(EwF4l7L6H^pQGEx;%^Gb>;6$D)E(X=&7>EGW7}eq!FanvElbIA#oLQ2pTacKXotU0l98&IP;VaGgtS`2-#O z=943Dum!*SX(^B1=2)Ny@gJd5_Asw4MlsgB&6r8;uYmg>koSgIp;YpIUhm8Cjz=a%Zoomi?PcW9}O z+@7U6a@&^b$Zc4vBe!a)j@*)^I&$-t>d4Jlsv|dPsg7LFQXRRrr8;sApfU$7oi%7e z!U>kn(8Ezd7a|V}M^fr@X#Nh$OwMpk$t-cnPafHI^hj<8mMznfV-V4m69k=^`v3ob z=7$UnAZ*LPz_7tY182MCji9dF7tlei{}~t@Of}?cK<0odS}4A>Tu1JL4Qf5Q!Bj); z%yR7gh-1r9^X-A&Q)8t|J#0OAWaR%XQ?smg~s1EZ32%TdpI=V4)$WV6Gw8V67o{z)C}|V!4i7 z(Q+NRoaH)lY0Guw5|-=8MJ?Bn3t6rs=eJx(&SSZboYQh0Ih*A=a%RhQBya0rXzP`nU37PWjb;@mg&fCTBaknW|@xMvSm7Q3zq4~&03}-H)WZQ zT;DPsxum^1avjTb@#Un*3LQBe3G8J> zf-UZ{LPlIyE(BUuG}vm$Nv+U5obXzKR!-m;Z*Ww&}7_HEeGjPz5TVSstx4~IM z?t>GgoX}aJBd4}PM@|7GZ>u4vK!UpiY|--L0J)otbRSTZUyxcd3uX zsU!DfrHt50){)z_TSu;KrH)(!Nd0adxpljB@ zw_8UpW2KH<(n=kxgz>d5J=)R9wLsUxSbQb$f|rH-7)N*y`Al{#`9D|O_U zR_e(80p(9m4Y_YCbmTs)(2;w!LPze&3LUw7D|F;;fb#hY9l0|rbmWe$(2+Z^LPu`b z3LUvED|F=6tz`ZomR)!~u5=xf3$Fa{hV2mBr5aIr&A9adMC{|GdD`)S^ni z)bfDDoYayM@YqsOYDiIHUU5!hNvdyZaWSY&^3QY5&&^HD0}V8R#@)el58;`4Df#6L z{&}uNiN&c-+38?u27mBKnM-D3PJTMX4u5Y5?VOmGoC+R$^3Q|X2XP9>SO&P5XE9h5 zG#KWe7oG_+4lIxgnn!Rh$pQNT#12Tz%qwB=&jZb#6fr>k;!>2D?wOpQ$Kam_nIZw% zovGnpRaK?Qkg4JC@9(e4kO=_{{&{}M&WSn6!H{7!1`UnOOifLY*?!3$nI$2q#US&8 zQ%jsni;DA$7&J0LxIK!=MXb8%clvlT5|Zxrv_IIlFBCs z9}RH%^uR|$uE19VTs}<**N`)a(2)BOrXd#)rXjZ=LPO3WQbX=Rq=sBWlm@tb^3U_m z%*g>q3@9ms=BZLkpj>~@@Oe%pgMVI7YH=zkUcqS}o+v?Sttzo7#VIj48x)@~zF%qu zXex;T#&^ri%Ph_Sr2+8t6N7)AZ+>ZUD%ciKY9Oip_xE-3ck+(_*#{jnfVBmJGg4E* z_9mAWm*nSWR;9Y-gQn}Sz5b1p+_qW4V>Bto*>tZdR8Dg=Q=L#tra*W{B44{~R zU_KC)gu7f-P|}qN3Lp>j$Fwq9l5+!I&uctkT}5B?wF8+ zz1_i(i@n`Zkc++D@gNs_yQ3f-d%NR62KIKxgLDl!eo*8iVNknZLLT;Zhd@5|cE^N# z?CI2@0DHSbAP0N9<3j=VcE^Mw?ClPRV(jgX2gTUi9R{V4xIywRoSBfWA?Ki~E4N{l zj@$>dd;n5Z5ThX{P>PyA8e(wgj}I|JJAW7?YREMtVz%e8<&O&qkopo|{s>6YkUNl~ z0nZ;K)jN>+C(tSh&}s<=Xx$T1l$wgnM`nY@v61<1`9-VJ)40j`d1a|ZCCGE1`AJ!+$>4evrWc2L z7iR^8+DtI;*8owP{&?+5EJ`m{&;?KRf>z3aW>7(%PfY4*MZ7g5(AQ z>S^NMk=$;$p`k06fK;EGtVY!5Cp2{BK=(1hcF0>H$?ee4mFqy#=YS-)22IWlNp23B zeLhHXJ!o=4NOI_FloHAyYm_ET(UfbLqA3?#Sq#h9#zvsEA(h3jd=2I^tkIEcs75V! zf34QR*)I9A8g)F7lyQ`It99gFtcHxEJX$?4<0uxZbmW$-(!pq#+*z%IF^+O=wT|3{ z)jD$6%H30|b>xn$){)z{T1RfjY8|;vt99hotk#iRwpvGS!D=13S*vyArmWVH>szfO z*Rfhhu4%Q7T+M17xw6$das{h(#PT}MG3%GOax293X|gBn8W8JWrXdFl}TQ138+ z0tV!#;*z5LN+kvcD<${T5~pnNh?f#53_;i`7%m2KCxQp}Dnws!Vp^&PcmXd+E7WZF z)Dm!DIp>$=mB7U_tzhDwd1?6!49Gl~si1h&01=vCH#4}Tf?bIo-XOhD7lX|~xPk%9 zN7#QY%V8>%kcq%99uv z{7Xwf`8hW=H@~P7wDPh9)Q3pU&nqd)&r!(9%u7`$OUx++j|aM^mcZNy>aT#(8{9Tz zt59tLr$v}Pa32RGKT_8<-&><2moPy??gog4uBkuJg}dLb(2d$}zqE$c%UPo%mj*JkUqcSt_!+}Q?Bizz z6S0qpA3tN5jD7s9VKVmdGlnVH$Ik+Ku#cZL zOu#;VwqXkP@w0$w*vHQprehyJTQD8__}PRRkUjvYY(>Wg-5PQY7P@kv{Ptk(Xnvzb ze!DPRLoQ*ChTMfY8sPp~z+4SEhnX630<$#aHq6qHTQE~Y&SAC&xW7hfe)G=*jo?7W zuORc3&~dDQqRc!{9mN2Wb4pFm%!7;g=eg#kz~%zH!N+dp;p;XQZ%E$W6@5Q%D2(RUtD^p*$lqIYXf&Um+R1&I9a?6lkC^FcgE@t}L8=%SFjFc6 zLr`fR15!|c>I2BuM9^6C2=1dJmvaJ(HRK%Dpq6vU`3<>HfXzCQQVv4&Ksx83f(;ah zpu7eZ2NjFp;xGj=MgyLV^2{qqEy_#GQAjN+$}dvTRY)uWl@ldM89gx%TBw0K)QNct ziAlvJMTyBJ3dxWyqx2ih5~psrf1uA`7tS^{P%lqVJ|6r~oHrWTig zJZ$5apOi(5p`}rr3-iuD`JmpVv0gqQGTuhXfJdgQmwB5Rthx%T>d#h26e?g`l*}z`y`%ZGgh7I5ic#PD~?HlL37NM5GWes{^Wfn<#LPN!8CVWpK3c2*wILCdM>9c3S}2rfLM?{`D`?#- zY-vD#nu3dq6FfrPQ%i8hCCGhAxgnJWsSM!yJt;RlGo>U0%JxXjOwRzX3xKEt%Q=Ap z2NY%yv4EV!yi`z80oCJ_SyCL3S&^E_A$eu0=^_#hCg*_PXcf zCne^9V;ZUptPUKx#c&Y@Xc`5j7zT#$qRf(15EDtBSTXRRFJz7Yt{ak`5a}P5uG~|> z>oq|62cm-k(!PMngW4JpHpnp$xqtv)FbA?y7wi}CP(MoeK-&$-dIKt*AzY~3NF8fs zu+>62kL18M4Y>jvEx8NUTHw9WRckTVRyAM|LpR6ZB&sDjEqdH4SZSf8kx5w611a$h9-#_P%!I9hcg;&d;xRCI5%o$I-pZ6GSez;Ra115GxSSs zp@*LMXX5UogH~WACgr3;+X0|XCa5(yqQ|I6iSvL;=ltAw-^A=x|D06F$~5Q1oE!#c z_=zdGiP`Yb1s#+EinCBp=u|prNQJ=_+|9_$Q-CH81?XlHm>LC;wq(e*5(Q5e1=Ug= z1?T*fR0Y)(hMG((*E~=JGBAMH!Ko$A8L7$HPMDTB3zz|L&7is@wFIIW!UpR`*P0uj=b4w1S^+Wx#CBm|V91Rx@J-Dt1<}E! zNnj?Z-|L*466y(3HFXVZY@#~)nLfS>Qha0{|dj-2^%P)8X&APzeJ2Yxmaq?Q7upVW#HSWyG& zo#y2$z;u9m*+rR2rI2kxBRQRrSpI;5wJ1M_fuT4P(!217H7cO{&Ol3o^GX!pD}@lf zMM%#A8X*kMPNgL!`FXIVL!j&mZqI|-_!zh*6GILX%TP-pYgQ0#)6^0;+Z|R&LCO|L zfdx??TmqV~fr!J|pf)hrWx*wtpbj2r?F%v=)CLCgq5aN)N@vi3p;LZ^o?}W1=782B!7yk*6tpng zC9xzCBnIP$K~`SC+z0YNQho)f!|unAOKx8 zcx@a*FvQV8pfe0%F_Kx630kA#oLH1v0i z2?`TP1O=y-z&LQtnc&4YAYn+PLDhgcFhwBq{XuPS(7Xt|kWU2194xSu zh;V}BJMbbmkUS`Fg2MzN4)P>8AVBNfN>X#deuSzE2JKLVq#=lQ2pgoO7-UCqY7VH` z0OyB5-3gKdNx*2I)I88wCL;5I%nt(XJOq_&(6%rruHbPCE+0U70pTy?Gy&2NQV;V7 zG=9MTfU@EK0PVa0`2!S=(C`JNBe+`;| zT2LPW=3clypVU04R&ag?sRMfok=-&9%ThrjhN&r;B?_RDCX-OU1jh-e=Y!%c2GH72 zh}oIN3MobT1u6OEc{-qO2K=N{47)&MM!~5iuAp{JN@_|d@|Zcb@+Zg+V)6-S@h2!f zq2&u`{DH@55bh+LXCUzgQ3qjzQ$J?<_sPr!?WzWEsKv|+=xHAs?vOZuyA34_A#$M1 z2u@iT`5+^|+@&bLz$L#NbaXDb%??dBAn!BaXj(83-L?oQ%1#9L@6&QmE1_s19aVD6ZnW>4OafJ&m@vzjQ%(TjYd{AEidJ=JB zK|yL_5oo%)BqOs}p)9os)L8)4FTQThpa21xg&xkJvLZ7t6}0aR6sA5fwmWDYYdTyU zbPfwx4QRb6s6O^htN@kk;JVp2GY`%N*#nC^kQz8UGY@1wSUpG$qz-{Jb3lAZ`HbL$ z@?l0|US4WW5O}wmdumBYMrm#mga^)#;Di868}6wkex<7I@e)K*b@(g7OL?MS$WQdo!H) zyaHkf>ux31|=ll!n08gT$aJA!5O) zCBB(?uvr9<7_1{w3~v`98am*n737##26Q)r(gOGZSdbeajWCdH*wlf=Ga&;XnFU}T zY+Mz!e*z0baJmKs9HeXphZ-ntfsQnQ(qNxL*-#&X*Wn}i4$Ox{0HnMH+YC-mP)7t* zqWTJyuE68E0r|zC0bNk|fXhV4ya_mA!qPG<&w%v6*r1JSATtXx^B}!9P?Uk}9>MDi zK<9WOpI3fCK@;yesUHZ)3n=2(Z$LmkfPj1f0r?4N@-pjmaPb6BS%H(@mVYDN3LLm^gG~20YvjT3rGia#sK?p3PGLcZQ+cr9fvEP~0a1_0*92LRN0M zC7_lzbld=`zW`|#rRIS93N>&Zs3ibevl^6Ikdv643LcSx%>xCcCZ_o3-I-rd337*XX$b=&B*1NSH_+19u*_o6G9$3XkbVMK4#o%3kbx-B zdJClfGe`pN0kB+ND$LU$IhbDq5{to;56GbjYG=U$64d?#jTHq{I)gkoqUT7_+gJj6 zsCf?*kDJ!%$Su$vZKvR>XK~dJYoPTjDdiVvd>uS&44&M945=xgOz(hak-;MXpd(bl z7j-Z&Fyufwfc`nqy)B@41J7uH`Vp|Q2{u>=?)O2aOF#ojAhie{bU_Pfju|vz1KElV zE-zqRMeycqkQpEh8fFLej-Y~|K2mB$377{nDbotRG=c%bg2{mTtDt^7WFQF2f=j~e zgKe$`muoQlV1l4NQfdjv1yB*VcJP{YkpEzX30yytAh-yI>I8)YXif^^WmI$E1IZvi zL&FAaZa``gXz&E27i2!j&B5ULozxVtJWM@w-@aoGWTFPtM}&kqOau`*;Qlvw*Enca z0X&Za-<}o01U?zjym+5bXECm`Xf#`rK zg1R@eI1{Q66j%%lnZ+nv2ADArS&;8xW1k=q@Tz3+@czi38KZ0I?5rf+WZ|u-joAgc?v9%d`qgO@SV6RSa4e1?M2t!5sh| z#({+shyzyxDfSq^c^y=lgQl85ljzX787LR7oFUT+q{=5TDK&=y&O%6o-0zxKTw0V0 zZKQxwHi`hUT4-4dK7bXJFF|b|@CG8d2wXL6jWVb$XazfH6&wzkh`FJF{NhZ|IuXd& z6(|5)_~eLFbt9lNGwW(DF#^wDmOslkoIL}KIr<-BA5cmy3s)~E>LWR-17$Q za{@QcK*vm{7v-1cr9f*SuwOy#d89x9iGkaBSOP3KwFE;H7CT@)pp$KoLO3|J1XTp4 z7_`0&WG_+x!|lZpxR5ae$owV33WR~K6$Ri5Lm{;yF}WnCQo$I$POlg=#zaUzq)Fyq z0IL2$X%8|sgf#X85de=2f!Y8d=Yu$)brdBueL1`!_6VjFg>+>%KB}J0-g3=%;(ZeRsKz#6i70?(J$YD?pq)iT4*Y1*9mYJLi zuDg&0-~k9S1G>-%4nh{SAg0SsTC!#U;)_&8kPdl&=7%(!RvkG3=2|B z!T1(N{=$}DKw$-1PXgMT04;VvZ5yoN0GjayU84*d%nME}fhSJTJSI}n1kw*rsE~9H zj_2Ui9LKyAL}mf0LymifU~mHT1g}$pupx;N>0GVR_6Pddcphf^!)(2d+=N`>+aDus z9ue30oWXh>Ij!}iwLL)Xg_5GwRLGJC3diR_r__Q{IF|7_Pd^Z|U_M-(6-cW`VlmjZBGB?tu%E!)eozlEI5R0HGcO&a3S<{(4Nz)D36dzxB2t%laD^bVGofQ`U_;?+nL#|bG6qn(1+9hziGtz`;!qF| zQw_+SkctFU&wz9xL}036<^`kH<)Ag^smUd1qA*RM@ffS%{Gt*>f<)%Qlx1dGxmFZF z?goM|U^1XFIV*_M!DDJ5w;{=a0u1COXzqdbxxqY`D#)54m_l%NfsPL$Mmmu9l!J#< zv5f~;fetS9&qN)?1??@#tU(tnMia?|4-$hMi!vUIxInxhv8Whw=Qj8lA5bF~F*XD9 z4J2QJ+vX6XKy3gJ3$6gtMg#`|XuN>|@3<%|SRl@0jF64aIkx1r%8aMj>-Ya#jhIU$(^pv7z8{snAc2$Ux>v97s;*F&H{$V-7N z@CSt_j13Y;q*_p3g`C6-j%Y}E0V?}IVa5O=kZS^PdmdgRfy*wCT9lFQ6`%BJwTj zcrj|aXJCMob)a|zm1{5>>`iF7iYSL6egLUMD{DdH!6}&~kP&!Tx`L-k2ITS z2)KY2{Daz7i2do%qw8FpLBmbp^+lj^96av?JvTtzUmY?qgyb~PVbqAzYQS^N3dQ-Q zMaiiOF3zA`i%93gJ7tzQ<&?my4Y(a3cLXG&%4KHefXXBA;W02Bpo^ef*74q{^6>?IGixo;T5pHrEh4;uU_$j{6xfwW=4t6so)2D}I+KTScSLZ?zw0qkMWxF{)V!R|p= z!{A?&3AWWKwJI~UC^{rRmVqI$C><#`z$`V^g;)sMT!ZQWTC0b<8Of25u=KZb%gll9 zmVx9`9Qhf1MhtWXBs5+#!Fs``%Ya)1usHO$0^fN76$7O=V$1}o1MSrY9fku*ny`^( zXknoTGe0xa3Y6fDQ@}QW+v0wyiAAZ!kOe}Zwk2o}h%#6`cwPmR{;*+CN(1Fn7!B$Q zfIaG81io_>RHh*71C3oK7Wjfr*MKb%0ry$mQ%ii&#bIWWOT+9<0|Q8(2WA#%4g!4a zmum&QXB4?gv!fB^4$B zvZo{$c8a4Zd$#0m_taFjFEN^(6*5_3Si z(O~9>=B1<-fzHPRmyZy0f=h}@le0m^E`$&6o`6h-y4@$S7(7h~GXrVL3z}a_a-E7& z6SI-@1Z0*ZXE^4ixFzOhf>sK{^n#QGgAWyg*yUfAT9lEPmkyJ6$xP2I$*f9EaV#!K zO)iPRAsz`i0~d6b2ckxUs0EoDlnOr62w4ieUl^9YVKgX@!q}j>j*xs|uILE}=O(hBUa^gM9>gQX>~Ss>3Qf{yH9U?_%2 zfVP{%)PY+-;Py2rf~nNT2F-(&Bxj(vvokX_p>-*^!iF!i0^bRVECh=_q@=|FYPKOI za|TE|o`C_{RD-S|LvBaI`sIkmGh{3P+_YtI2`I_;34q)Y39Z^8?#NFrEe3@dXpFZg zu^ic5pt>8>6ack-VQf%w4`Rcbg^=_NS}&FYN{OJn0M1OV72x%~pdu4=W+*g=fzF#o zw1+_16uEr^wj1ge(7HBIy$5P4Aj%K$*o|{(5op*SzU&D!Rsxx-c1|n+rB(OT5=hYj zEmGioXiLC;5U|Fzw2p=p98qY0BEkeuC zp2gs}23L-dvYCOwC!i$XC4hm!H@_@3B%gu7AG|*wVHAW9a|*<8NI#H)As{oA0hARX z%~%F78`Rndi9t#V(3($_W&r~zx}ez&%!Uq9F~I8=(70J*8R%M6hT!DHoK%QYz`g|Y zVNL;yz{aOwxf{lZEHehh38YN~Yn6cHVKq zXlH`;fcv`;vr9l;1tm+Ex*-1mBT%0h6qk-UndzXe4~!385d$^@$yZ2xNbrKxqxcf3 z?Fd!@YH#Kj<)nlZCFT`_j?)FXAH5C$=Pm~D{5zzq0kiY7Q&FlgkUYGq134O$0m0)1 zATvkszGPDNb7a=|gHPFa$xO`2PY+5h29K>U;6L{n)_G$9m2r6~FkP+{kTYgsd{8h1@#=TY2f%v%CFE*1|9tZ+rS4l z26DInaWRky3JeAY25ez~IARFAT#_L_FQ-zW2y{$ku|i^Aib68z^vb0Ciqv9-#G+IM zM3)hC24)iYls6Q2fySnw!r(C=@X891pn76yNxr&5G3dxRg<^1D1|(cilvh z;iNPbd=frrqi3Q*UTJPpYLOx=4nUsH^sg!Q_h(=L8=RC18BD^Ga253Qz+ z(;4_CmC{s&{F02+BFLzk0Vv_=8baqYK=y$qb3na6P`Y!BJ&+tE+!+}B@?qXq zNU8)GRHBfVn41dT1p_hM*Uec$-7mi+7}m>H2j$CD@XA0?9~(9p3Mo-QW>et|c^4la zM4VlMY%B1iE7t>%EaEP6hRAK>ah{!~%#Rp!O3e;9>ntEB`!yZ&2UT zKhGI-(F!PHto-vp*RMb{K*I{+K4?IJ+V0S31hvP(F$J1OMRFawg-FITK&^z{-37M> zw4VUZft+QQo1X_2$*ifW%B+H=YtZrOPzlJnd#R8!FOl+MKqX3~f!z-}@ZTAs7nU4A zeSc6V0(@a7Xsi(w9^eI@IjQJkxYU7~lb~`0WERMVkjxU$@s;2+4?$wE#g73+scGQw z2lt6VD<<9iU}~}40}2_62j_h7QOyjX{%DE6n;$5GG81z^NBm*CKNLeBsGkA5lN8x& zP&UZ3q(M$d9~BbEaMO|F7}QZhk5BM1qfkMRCqZ!qKI96T?m>Lm z2p*`uw(=|n9YmO&3To)W)OZ%d2k~HWYvoz&l%JCVZqHbG7Q+Yqz-B-TI=EU;hZA%K zGR!;>AJXY`%g-wT?^^?n(!rMT!?dF*1H})rGB6)%EQk&FKB%7wsw$!02FZcF?4DWz z^C|T8LHQEq zdE~HydJ-JAAkQV1rKUKS7MJAbf(-%1D@YDBHV&GXfSpN&l-gjkub>(q)t)1 zx`t+u`4n>Xg5nD5Oa_=2a5xpze}j%WfSnKFBl!ko7P9ZaWo1r&5iFcRtGD184cuji z$q?vMfY$#c<|%+GWYGO6IPQ``X$RnLSD+NX;CsLDwHE>^ol#s08b<~%h|h%7kN$a} zySET`B7^!W(974XKy_F_Y934yev~@=)JbsjQ;)$v4`eD#8R#BK@J%0Z0m%3jXxuC{ zuLN|~V4h!UIb0T8p22u}{>XBm8)One_nnuN7Ud~`$|i6d(Ip>L{DJIbU~tKY(8Sy$ z4?3e8`AjQ@8=7(-#5Cj>g0$p51Zv4G2-K1ToyjoarY8Ix?*thw@VQqBH#Oxz=R~n= z)R8mb(vtgNt^wwQ=mVTua({4~8>PUdC3k6wj@+3gI&#OB=*WFrN&J1p3H(|Eer}Y5 zu$ElINo_g1l{#QQfAG+dWAN0Fo4}_fXR%U8&S<5MoX$!eIklBKa-egMKoI&u$$wd6qMH@5qOCkSZC2{40X5m*7l6x5QF0?|kqH27Q~s3j+fBnDz~fZ8<@ zT5_Tw4iXk%U|>k#(vlNF5(6_s25CeR z7i3^yXb{zsGe;5wF;zi?n3f!xat2TXh-k?*L-{aDAEaJVORfbb z0Ht*q7#KE)X~}`Z2`UDnSQ!`?6r{D}l$by~1eO7XgSeI)xD$sEX5e99U^pNRi5nzg zI5U7tOYXo1T{%$xa1a=o`D22tmK-(n#|0iOaQ-OZ)skc2(?ZD~SsQia1muVh=LUh% zatK>Fl(G>~4#jQMk&D;}DTjhKLdv2+RSpT0SPn^!ymIJ+f|i`eR$YvG+&~t!9!Ia| z4HWRp2M~}iARs>hO&*kg8&rtTzYi3KPyVH5ISI44&npEI2Wj&0UqCSN(3E!JmS}pFSwy4CvZzkEVQ%ZAE!QE8&+FZ~* zi$0l2MTtd~py6n+UQkCBH0BCBv;lniZzA~O-P9D&GG1TEndr!Sr9gU+m4N0EAPe3Y z7#!0oK$!zP2M;<{9qJCq>N!1d`h(92;WGy`9--jj=@%U0=;!RJU{IkNp#%1)f-SiD z3%jEiIyMI$rh(iG8$N)Vpa36Vr2ILM%Qqr0gQb!%ZL<~BC z(juh)jt~Ql3xZeWfo9r4<5Hlz-*a+6JW%w4=5Wd~Q_I1VPVht66d~)+V1uflq8y|c zWES!z=^#FAOc*Th30g;xnFbmP0Tq^3{&}ba7of3Zl<^2il7yL$I(CBa1ITRDF%g8E z6==8uX#fUtv;<7REhjM@bQURimw!nHIE6yyD*bExp(pt{!b1b(Uhtf83MhC$GheVh zM2N8#Nce)rNf2WupuJT2$*_Cj!E03DhJy1(QE>^#M36tx#b%%gHZJg^lYlpp5H)!xeSh2{pXHYcEg&1ufV>V|VcA2AwYjofd$eaR~PgcGlFZa%J!ty^G)xVjV*}4Q z!g30v-UlzN!l?+n2NH4HDyW$Q9yA?$$sf>OwR zqnS1Sc;@OsEiXut0M!eib|J(R(7K4sDv+3!m199cYF-LlJd=UJ3c4{1SqxOyV&Ixg z@SHA49J$?CT$-c{@nZ>O#YO?*oW{(|8nDHgnf^5(2UtOmNrl;k&WEYDvI18vl`wUn zCB!wE{tO{SiOJcB-~i7tBKrt3j{(u;l3J3OoB>)d3pxcBBnH`w3tyuOnzv6afk{9% z`=W}07c+s@u%_mfg62L!TLZx59_-FnPw-`kAR|EQKvOc)pe{ytXF#PhSP^<1iP}Cv znP(aHb2}H@wB!<8wd6qeuTHSnk|QNwfzFKsrDvza6wt~x(E70C49M+IpgBy?rWJ*7 z-*`X&5Kp&A=!&M~{5ec zQc`ASW)x^n7s>|Z6Hp!ljS}ca1zQ+oW-{nj6@%#zusQ~Y%#e@(kpD9?J;3JpfWf^!g z77I=-feAqSx*#p!rT)-$;^4drI@b?P0=!-cWo94J2X+BRHpD*AIXop$0g&CGLyIy~ z%fa;;SPmutwHwrH1YK(mHWs`a0m&RJk{~mkOCd+F!`%rJfST!7nhUiB5 zhZd(6f!0HV${*0W5>R;s_A8PE$X?KX7LXdq)*$fyHPCuIP=FRCmP5hskdB{EtuoAEtATvSd2tq_4;Rg~6$%lx* z!^s1(p9gcNJOcxGtsrbM3#jac+U1;IkeLd-*92rHbax`iYY@BLic(XN1R?De#MVIf zocyH39FQW70?)j(d|kWT_<{fzFqNX0;gVVg8gMAqgpO8NDX8Xv+l++ufwozoYJ<2B zbnYa`Ovo4pSga_sEVT$#j8J%i^abP>l|XbM%mSxV$ngS@FarxXf~#*(I9q}F&iOge z%hVBKkgF0Ae8_H;%zVf`G?0Cu=mEzAXh0+M=?N@VVD{B`8G+cx@G=r~sJ@ zFC{?d%ApkzAbE_^!9BGEUIGLou|Z>5pbQW4JBS9kGci3CobAD*Xizq&oejy{1SRGi6 zAwo?aXtPo(xR+D}-Jt{P7=h}4JnJ9>Aj6QApo$fy1zZpMgA3opbl3$|AP2%QC`>>u zN8dvO(&Ct0l3A7tG7d7%g-so}ErO&lIJE@9gI1iNI04xQwhQV=1ysYpQ?H2%NU;O0 z=WG1I)fZBDB83%nq7~*@NE=@RR`G(Yg_c7anhME@rNyZ!;QPnn-8Ef>%o0#^=VWH5 z=0JDAfF|NV2M~a#K@>_-a|=MVCGyGcIr+(nC7{)!AV1-W6O@<)=UMPDF>3sP+hEXH z1dw?Fp!=*L8+72I2NDN0dBZcS5{ptmZ3{@959+gG+e6`)0@Y7)+u~SI06Fu*%0CZ$#X3lx zm49AfX=+g=Y~zcSe;(AGiOHa|_ThZcNr0fX4@}+->{|xVycW`)8F&yu&GydB$$`WV zWLDOA>}5*k;rz#Yz5tQ4z&)&Tu>N* z_gkc;LY6r}(j(ZRBRMS+8e0n4ggI9S3QP3#giQ>V#-OPyxF9F9q$IV7!5=iik%_bi z9lY2J(bQ51s01I)5f0jPSp;fKz_jWy1m%}Q_73NRuCRlz6jR7AEdkB@79~Qi31o1F zX$j9ufvxg_?7fAhF!0(l(3A?c{c{18&Y+bApzXWKphM3=>xtlNds3hi^$O?QDq1Ss0rlZ!IAT>stb>ue8LS3&Mz^sjP-&4X=^4BXH%+wn2 zeNPi+Xvqmo)xy~KbYME}eNR2BQ1?BxtTh7`?E<$?i;8s*rX%(YLkxKlTA8u_crOs-PoifcWIN3+?h=}a>q95$Q{_E zBe!dlj@*__I&$ka>Bz0vq$9UzlaAb+O*(SZHtEPs*rX%ZwMj=#U=}0|VB5D4FdO^+ zsROgI@1HW5gMI(hf;rgtPc=-%zJJPLI`(}FAEsj8KNT<+`@V$>bFuHA3Ydp||I~zO z*!NFen1y}+6vKS%`==Hxz`lPfU?KMXQw)o+@1Odx2og7-{Dh7RrfSJCJkyo?(61#o zVKMRf%wWRE$!81`wB$hh3-RW&Nm_KxXQZ^(Kx^I+>n^RVl5<2lpan0G+8JEwg6c?k^9i;}2elfvQh@FC2kS^pQOL|IE=f&H0k!WE z6=1r-XFmHwZS+fp93%&sPlGMygse0Lty2Y^R)V^Y6MW9BOMWtJK?}N{LF3vmSy+n^ zG;jgxm%#QhgBHes`aGcVGgwH#Mjb(Gfk1i3A9SEFXw`UTVh-ePPH@wfp{6R+3fV=V zRj(lR;BhCoyNV%mH=vn|#LT?ZB1oeS(xyT9*(Dz$;*y^X-e-+$F33z|zaaSFMmIQ! zKz%0Yp;I6)f!dtG8Hq)yumw_BoDUj5Kywv%90+*nxZiULyos7z}IP!xTa~5=D@e8;PLq131XRy$Q%jvPOD-iGpge zrXH+4iLuWci`lSL1zSFXHZrTnz(Cl2a5KQi3?VxaE(6IF3P?`G8jdi#KzAHK$3m?z z5)@`g;IoFoH?br+1C)6y3&86(V0M5)9K{}Fg{XF*jLt#g8l29cL%}HC8qsTHH*D6C z`>++Y{#*rWXMy(KFVT_vutZ1h)e;@KCrfnX?k&-gi(7_z-@<_<*!Slz*{mZsZ?lfv zjLkZ7lQ!$f^=#IWYul_NH(|4u+=LBUatZ6Tuj-0?2 z9XYNoI&v&qbmabR){*ZH}DP;&M%>%V1k!%OIBOw+B6lLZYWtM>MmIckwXXZhKL1vEVF?$9EhEt&W^E_&K z!L(FI?hl3ShYe@79^H2g8AmectE@*)F1B3bvo_WP3pgB@doViwHmLT&%aZgH~0}s}N#@CfV zv*JaG=}HXXIVDhE0d(elP-<~zRVo96RY-n%dJbq$Up9DkC{#7{Z2Kb6)nYfT_5(EW&2sW5huOD1SHI+zPm<5HBE?vY;vS`G@<1LB9J z7J;U@!F+I*0|`PEf%L$|pbAq!hfZaKPo`r?DF@xh;F6yV=R?Gk+;TDtKzBm94gtrHN}$jM_4z^OIwclC0u8z*23(FJ z34+e<1Qp{@`x&r#1|){;3CJ1{m<|R8H1B}==5QN8^X^b5g2bVkAl^iBE~tEk>j}=t zFNdu>0r@>Rvjp7N1F=D&4x&Mk0E*F+a)|d((<4j_OhbBqpfyzRo*x4Ps(O&KaH|EM zU6)q^k8^*}<(|+ABp;d(K;tXWa~;4-vk;a-BMe$kf(~5+^;04G^dP2y)>?oT=^(8= zK~fW(T7r;3a1iG;Cqnnl=-I@XDaCrAeG8y_ z9-R`4^bp2^(g|qO3#beOFV2KqrwLAz`T03XiAA8{BhU<0qC!c2evU#(CTP?R96TU@ zFhJ(PLFq3Od}6p$W=U=$s2E@X?Q?_hklYTB6VN;+bgc}m?Z5yzCmgB=whb1X*0Grl z^$gL5Be@4*HYgsT*YbeJ-#{xxJYAr6f^J{{pZN?z7?QqwCRe|N9t_8C} z!2!An6_oElY^TH`$a*S-zailZl|;>hsU?tLhpd%?*b5oj1FHjv0&-e|x+yrd1R8qa zbO@S_1UVn12V@P{J&3f;0N&pO4#Ui(B+%+d5F4ZcM1!*#==^Pn?a(-I&d<$F%u5N$ zhp!z2tA#8C0j>4`_hVq?2Q*K@QWUOi$>0of9W;bsgLUBefGz}qIsr``WLE%84s@R~ zczGOD0M$%LsR@;W`UM_?XyzisL0ipoKy?WyUxEsBPz-~Xmw?u5p|~0Orc~G-4(J-F zOe>GflvJ42Xm+7Uf#>$~Qa}q!b2IZ2A>}TrKS04=l3E0n2CbI?#T=-8gRZVPwFp{r zF)(C;4x0rh8fQ?9rh@t(;CO?JL&67B+#@q3B^9z43mgWX#So96xdTNGyh0FRN2V26 z0HTip&HpG;pmSkCB>*JtgHkVO3?I~}LlZ^yD?C?&b%3s+28n>Z3l?EusDYb-5XCeD zAqTm7-Z?kL(*@1Fpw$y#VNhH_mQEBS;@dGL1>$zl+1n{85HA-qFgT{9Ksx&%c48vmlidEGIEAK#r@0v`0}>K5XwU)F8+jJBT}=E8Gz&8eBF(6hc?v zA*Wo>IDdY5F#~d{M2%_Ccsz2-Vqk!!2(VvLQ{a49ih{|*QWA`hVJUhxUCJ!Hb_nb)kSbFXsugGVhK1HARz<}M}!+8VF_0cTKfZ24=S5S za{n5%&II2%R)pjyY|@ZZxTGc5a2aw=R>K9z*+if{-VEXz;B#XyZPk%8V9^GjRSP<= z7j!-^zI7@On6$|{pZCmG9k~g7+5^5$r9n^|>-oF~c(uXj^B&uZIG^{xR>U|v^7*`= zadwHVI&wl=b>x!v>d5Wdsw1~$tB%~dtvYfmw(7_&+NvWrXRD6fG?1US>d19%)sbu2 zsw2lBtSyIaJpBNRHr8``4Oq3Yp3}R4RU7L$y$mwiSkLKgVAIBWPHzH-HrDa<4{X|4 z&*^Ot(Z+gCFN3Hy)^mCrM76P=(>sA(8|yi}3?kZC&*?P~)5dyE?*(yftmpJLNN8g{ zr+0$9Hr8``8x*v`c>z@3pyLTF+Hx5jdU9ghbmRg^$R`_^DbFVY+jQiPt<;e_06GJE zrHoCJZnuuyirqSLWh-^$3PAdH>&RuS)R9YCsUsJ&Qb#UqrH)(x$gJHua?^I}$a$^Q zk#hm*r&2y)+NLA-XRD6fx2=Tp$p>gYd9_tX?#WgixqDl6LXK(>~uUV9}Oaz^x}2v`t5@fP{Rbz(Rh$Q4kt>^^4Co9XV|4v)r~p z>KBJ?I&xOq@YgRU+aUFe-ZmXMjcqz|O4}fH4X7*|h*k4d}APsJ>NW# zqkX>Fz@ja8gHKOx%{Co52M*MB8F*d=$Gr*5wxO=eAm!c!yHz>^-Y&CPr6adwl@7-G z;XA8!!0j?@_aRX}B zM*lp>s$J*Ylu%Cw(D)emh(e;yw?ZELGw!>3m`*i@PSEcnh(2k5H!RNcPr>xJJ9qL(nK3*j19B^7(9jx z4+qDT6wsJFcq|%xqjE(^Wx7OYLTwq@XSadIwUF!X z0Cm*58x+o@tk;08iHGPbNd+HB2-ysv3qE`mypRBXOIJ#2at`PoSn$X!=z>kqF1}*$ zrJwnrUGSZQos5S?CO!SA^<;UKjvAV8t*4`AyF+MkvQx_B3+Ll4FP8G~0ZOd(tc{5TIgh62zbKJg_<*XzNwg6;SB_s8po#Jm!P+{Elu1(+^)$yW^4kH>CI8V-YXblob41V`5Sbbu0a%yq0LRn58M6Dx)AC{S)lUM>eqzs%_xj_3l zKvO2*d0FSgoE&g|K-mESU#I|H&pFl)CApM3)ZWl$-tlit{6bGqMDi@K@ERR z27iCZ>1oITQEcU3T2fG2;*y$Fnhr_04AAvOzAm1S^)U#(GkAZu6=XuoI0dx$r6@lK zHct+k7KYA>`();&g3A|>7-(%85oL-Gp)jlGD}heit^Jkb5g?+a~O(?s~FJ4Ak}9^Vp%F^Ar|Q5 zSB>K0OifTls!?2ArHP{6Gp|G+5)6oi5uo|u;^It(;^JbElaXu#&mkiC_-!f%#RJ$Z z(7n0f2`PxXLHm6`_jZ8%hGYRq7#uvH@U4L?Gzl(Afm#;~DK$ZIps*@{7zMh~8&sHr zO8qj#o^bGO9-wO~Q&aR97>Xem6oBHRv>4hpLSE+u$_daJKhR!&g<|kzmjYPT6Yv&l3xJM7;s}4AXQdzNq#{Acz+&-IUxPua;O;O2=LrLXdWKqitxlt zkmbIx)xXeu1+xLZVAskewYa1xzY<-dxTY${3aT4)NC-GBS-F+w1hNR)H)4&jguPF8Lt$JC_y}gIX9h{-A@o zOA>Q(K&2GulpPSA3T}H~xtkedl{TpUxAH6w&&)G60=W(37Jn4 zN6+-P3eU{*NX;q0vlbmvSAFj~4+KW8idzt<-VO&xL0UNdE|4{Xx$V@pbWpRDV!DWLXKw zT@dvUKIk|S*r7R4@uJe=445A9QVoP2aFoD~>4d5Q#Ya&-$o~-iP(Ead224#!5%~HX z*q%(tnUE0mF3y;4fLj6858;E1gz5n&5zvAM(3)q2`@knlLKK76d4X57fi^utcTvK{ zK+yqn3#bl&Yk}Gax+VlutSA?BHVIrGXjL&(y=QJ>dMdagfw&LE1oiM?YC(Kty&*-Z zsmSsmKC*m3Voquaco7-IJj8_n5I*>*eW=~wBeY@cqWpBwVRp!7BOg%+a}Tl@A`~HJ z!{i{xwL!!{tsL-iN>F=H*wEySY$q(qV+(tj9I}6db23v>p{p!mZiF9A1GN)U{Ug!< zoDa4b;!aS!!SsU$6hNxc_+Zt@V({Sss6CMUk4RI@1!A#fS zqjwl^RF@2>H5P1b7)rAhyaya&I;dRFOM$S#*P<~XYF2PN54;r(dhH%){g7ip0Yn^H zWJ1LtWg@IlM=rp?YtX@qM#0Tvkb21Zu+E7EpmGtp;su2lh@YQa3X%e;b;~bGO)ttX zg*g%==8>3_R+68W>I5!iAnV<*HMc=(k(*B-KDe9*o$Cr|I)d^oSO_EsZDfL4)L=g% znqr`=2eAiU za=@(vuiu8=Uk7GGaxX+Jwgxhy&A`Bb)O=z<>iHnEA1hc>r@Q%fKP0NTi1%~}j}LJ4bB%ZN3$!x`MdgX0}tTtfUqJVSh38NmF2AXhif2#5ekKG@GOAjIFv zF({aU!PCVh-qFcFG{nh20_0v0-zC)7H!>i|KOn%--4!&J?cx#-;<~u{`h)H|0;z%V zjll9w@h+}Tq3-UkLGd1*u0c>S5Yx@y$Hg@$n8DM-Qh+W7Va40>;Y8+ zj_3F=*Pviee?OR5Xo!D&kgJcsBg9^((2x*+KSQt^AZ#NfwlNah1k85!aCP=Jgt#Bf zHbP<>L)remPN0MXa{vifsVxY4~lp8_W?&a z*gc^179Z^4A0F@H>E{Xw2e6o{pQDqHD?*LGU%Y>SD<~MiVxE33u6`l$!JbhNHQug~ zPX3NTF7eL(er}%bU^TvuLGGS@V1xZaeVxFO2=WtD9Api$I$y^iZ@3yC&)^W4Uju^t zeFGrL2do~#hlDwV4GD7y8xrOaHYCi099=wN;R$9#!!yX!-6O=+#oZMYB%!`=zahk- zfdCCZgm|zcD22n)F+$wM)y>lnl;ptf3~_V{@$~hLjQ8^g3xfO(7xVOUf$4{fIYGh= zR4~Pddw7Pp1_wAgL&6s<=IRf+iU({qm=B2r#}H3{Kle~i7gun3;2iH58shKl4{~7$ z+%3+IK0YCyh`bjZ;OPeoUl1FXmO>nzAdw37b7-(DED3?_1@VJ@9fP3J0Tv4j4vzQq z3vqQ1as*rG=@Reh=i=$?7~&rUi+zY+k;I+-ef&aw89ZI$-8_9<IYZr=^Nl51TN1Yaz6gfU`N2r1?MraUm)_qj$zO+LGa@pLFpcu?*k2Ih#06? zj}LYY2@L?{PpBB^fP1JQ%r5X@_DFVt`SAfkuAs<*h<-#^3ynh)X~0|Fq`4K(~feAft1Q27XPhi_0Qm;s4PFf$$|28mNtF-SRq zDh4Sp!1W=t&H?)q z;N%ztD&s-^0*fIfX}B1cBn+1WC3jC3i20zxBHlG3z|jv>?qZ0=JNo#*^?}to`}_Df z20+VyB=s?R2U2uR8 zBn^Oy`*=jX2d)+%e1!iXYWxEtp>Bro!F4P|y&JqNg7Dq_L;S({7LsPc>H{2uVR;+O z4{{A~1vLyjT_AdbTmyU{Wfg=U?CRs{90G9!Obt}b$;TgD4TJm$HY?Q61vJD5=LfmM z`QUT|O-mqoFdx$PiFX23_MR^B!L9+0L7=h*;=dq7BL?jLAZUIIi41U!clHYjiuVNP z2aBsr{hIp^o4Wu~O&C8x&cwtoW7~;c=5(^-+Wtie2 z`H+4;Ha#KvA&EulsU?uEIw(B`xPbBis0ImU2mrN?e0;$5Q-Djni)S#Xi3P4DLi|Cs zAn5FDmv~5{11#*}4?1W+07Wds)i(fc29jEsxQC;k3#cc<0J0Av9}KFy(98mh!StZ3 zg^8n><>Be#3U(FDu>mgNmQ6^we~>q%?F%-?&mZJnzffOLLm#XLlJUWfXfQwAG04x; z&m9^*aMb~zZWE|A4stFeEYR%>at#R$@^f(p`3=g3^yZ*uLBu@4@<_IV-34mpg6db0 z-q2uI7uPUfe-~G0{{T-{aNMAaIr_PPD+_SB7Z4oo8RZo31nNOR*`T_B0m^ps^z#e` z^&6mkXxzHM#eLm^yi+&4ZrB*+!qVe#>e2iF@uzM$$q+|wn*g8?e$0xE8Od_f(V5E$FX)z3Y|Ba#86 z#@XN37u0nG1tEA24>ot5o1apelZtdaC2YQs5B@I6*0K5zZR1W4B zR2F5XXOt)yT3VXu8W|XvDflK9Wh;0j=H}+-fws&tB*WA&FfgR#1_2nWfQO~FTvqDEsz*9r++X@}I4=Z%!UaioPd$K}D&LK-% z?#2ooxx5WJa{o5y$Q@guBj>VIM{Yv3w%ma>Z8_M!N>Gx1vRy}RLNjW(FDSu%E;vIe zdHZ2*tkjWPP&x4XVHhe=_gliwH8iMz?6-ui>%X_1@VSOJwnNS}ytEy0uHl*OkaG=> zZHJs|cwoDZ+^+39a$B}T&NW=O9dfSWitRdbi?-{?HB{l=Po_|ceIMq8QtbOM8OpHl z!*r;@z7MmY4EsJzT<01-D8s%F^Fs~xeK7^K+F18teyGL153`{h`##JA)!6r8E~vx4 zFUFw(`@WbD4cPZ#E@;HQ4|75jByK?Y1RV>MYRi3a)RSAlpd&Y-Z8ZN-ntv2pw87^S zHneJk&nJZEpB8PR@((HNZ*x-9KwTjQaQlXVfuSV7fFUWrq$EEVyoOdoHAP1Ofi)R2 z^HNeP&~8!*sB{KR>_Xd3#R}l{w%~PVuuH?Cx9)*&d}Uz3XD8Gw(3-wX(6WZiOwG)k z9MDQ{P#?wBF~l`EBq-E51ayZ7Xf-By{R5bQsIyWn2A_L?5CVxXFcg+1=73HK%u9sa zH(j0zYS4k!Dnb^AXF&OxC5bti$qWpoc`2zyIiS^i3=9RCCCM4!a}(1Nb2A}#gn=$m zFHS9CfZulx^D20iD0tadT7F)M0@PjwXb6DUyTJ88*Ug}50XY%7dK`8@+>X!!Hy?-k za?pZ!gmQv@P)82{b%bU@cBw-H3P}q=`yg?Hu)`-T-ZRA27kW$v=*mXuB0L4iS$?23 zaV4o0B?_4(skxA~h@jKP;5RT9DM0$aK4H+oahxVW){+rpRtOP`jQ8J^3XW3Q4J84}sUgCV>R<@=L%XATu&j6^L=ahYNMW z)Y-!^2r{t-_Y`!O1_J|V6$N-@6I==u58!2D(70h>$OPr?B=9wcptFBK+dne>tw4id zP*Y1v3vyB!7)lb8K+~?p&_V{AiJ%p>d7u?@U_&x9!Q*hCw1HT+4^1}=3=GgkR0_HZ z3=H6YoQSz%&XVrCBLus#L`hP-^}g+gF$nZ*i7 zlAxsmpmmC%yT|fD3gXw7vfu@CAbYIP`2JQd`2j_#;5CMzEg+yJ z#-R1AAlG0ON0I=o?gNFJi!&(qA@VNRD^98DnR#GqK}LeddeSnBzy}}~B_h`Xpi@Mh zp~VKIe8*~@YhDV%G>AHK%|i|;P?$jO)&Spe0NP^#x|tUd2YH~;AVgFViVx)AMPdiQ z?lZ>>ZP3}`sDb65hw54AMRp9Zn^GXDg8|2#cd+XrKzFy5=0NtIfYzIWM|_;YEgujQ zlqU7S=c0j@|AX3dnpVNdMfo{7A^8FM#hK8}A2pyw@1SZtAQ80SCnVnueBCR9Motb` zAE*te2|m0Hc7Pki5YRDTps_TNC@73!G$^c7%QBNwA$lKk!0Wt1@=FqP zKxTr>^3Q|r=3oG=UBYx6XpK;EVooa9u~1DALs7iO09FU`F-T1@19ZQkQ({puXm5@) zL<=;q{Xv@(APEPwvJfnaJ?|sJAK9ItGg4uTV`1?Ks%yXofz}ljrGpb7yy663dV(;k z27E9r?7CObp>dG4=*8eOL_t}cfdO{sj;BAQ?z3kAtsTrsh48?8?Ld12Km(o(#a5u& zgD8E)iDhtYnB@=56L`uX&tjOnA#33vwu0A#!6d*Qa!)M*nFb1940{l+1?3k+{0CGz zgYVdW`IGamn->v2yl0qFv}8!gU3;wWx|H5|xt8%#54 zZUgDU<~EQx#BH!6;@$FLOP?A1i=p)#k{F?|MDsgbCn)Y<5e@RUe;#Na43V}$H30NF zPAe-^N$4T5MGC09t@J?mA}5xCjt2+l8gQD($uC9-K+azTEsjjh1Km35pNDZj5X=F3 zC~^wA3ZU(#MUbn9KvM#sBZ(PY@<5V;GrSM;He=Oa1C|*R&Aw@+_lxX z&&xZtT1W24Y8|P=*Z36p(7WuT1Rfi4js8kJ9OlFcIe2p?a+~H z*r6lGa0C1KdJRvpkLxNt!9K1#;R*I}-3t$}kLxy^$3CvR;1Z7W_0D4-*KK%+eO#B} zDfV$)gBRGxbthcFKCb)V1@>{>4^Od=>n6O!KCV0AIrec~hDX@Pbw519J+5nTUR&-& zxSkxt8XY-?)2QRR`0|y&N%Hemz%6aL7psR>zPhj)`#E96`g^JO91Zpqwg6`QKLis4*ytZ6KoSxi+9XfIo?xWU6w|3~rT>-T-7#JAd?9h>O zAR(U}I7NPawc-9~J_EG_vDH_gHXkURVLRt?pxS*KM(ZmE9tH*meC@u1^V)I;67}S) zcIwD&cz~ME@U{CAP7|MxOm^zXJz1$EcWs*#K-9P4{hQDHvSU;s!!e%U!RQjZ*=5{?cXrG)s~y^R$GqY zoi@0CgRee;^=||~^$7{_G1^W>CzrX6TqIe5()_)Hx51iXf7v8F;%BKZ8l#5{%6isV%ACH0`S zn&la(Ad%GMQqVb)3ZOA1m_862eC{jqIk1_T;05CvIhqU_RUi!JGJwv4)$sQRuPf5< z_Xi82id8}7KzcNx>cPqwH2k4v!u3JT$%GgPF-He12xfy9po3R0fzP1@t#bvt6}&hV zv|34%p$u{?kb-Kll>%sP9=av~vK%})F%Nv4W)f)AVqRHlQAuiwLRwLNu0o=Ma}d%( zc*p`-(24=y{FKbJOvq|t)MXCf^+vGu2*Yj-1S#nh6wZ*X?9dd1Sou+0keZyCR;iE( z+FOtb-YW@No9P@-30hDAUWNfWc@4@3Ew2Tg3k(usK#0MWf!8ELHi9DUJ4K1ll6(c& z8c+od=kUA~D=WldZ}79A6*aN0#Z!eXh6XPLhpqKb&d)1J%*+F=s7h4u2nU_a66_r0 z@8jd?=jM-l;X9HVT?Hr5qVn9#Jn*XZ+{6m71$n99TkLh=W$ig1U?q$NEZea$ zdxBH)%Rz2S1T9TX1$hB{CMxLc1C)dJ7#J8()PubZ-aefMKci0%au%u^^Z-AEdeDOB zG>|CR{HiJ|w@mnne#qv63ce)Jk=3PnDS8b4{wOLzQG?_LRJBO)0$RtP3_i9qMFEtK z6;d+O(o#VyOchGNNA`h}Hb^@p3>9({3kpDoL?fAjBnvYtu~;Fq1RV6>gKi<$d_b}| zXrDOf@OOw(aG*fT8A$2|-D8|-1rGkil2mXZ0SbSReUO4DGZj|kAc`dLCaOfxt+c6m zB?^#ppCP7#^n$Ax&6-Rr(B(*wgbLb+1zKwhuB^bf-GXj=4oXbP%!lnjfUL;{=>ivC znRzMs<)HK(ke``X0@^!e<&v5PF)g4dKN)(Td@;x{mz;E$%p&m0GXxWnz|hpdw?81% z!h{fdGOZx8!Kpc^$t4U7$UK-T&^ljKbue>K)x$)Q_0?orxfCU)gN~gq03Xv`%m6z# z6XHjtqB#X}{4`SBF)-9*LQj2%s0N?0n+d)k9(vm`TG)ctwnO5Dfguxokg!WmI_S=D z=y`%*txzFQ9Qx%eq<{~h1zluO0?Mz5LxDYAK=*coRxYC$!2r6K9UbVF)Exq1!!FXvLEDLkX}ft0w?Xfe1+W9yi$-X1cT1xh1v;OvkblG*gdrb z!G{Gp`0f?BOh7*LY-H&5^x$&EwF1V2`VShmAlo#++aNSS4J1e~g3j~@wV6QY-h=i@ zSb5~!+L^=vl85*J zQdon}gTQuXc_t_j!Hu*^cmSY_feJW?$7?dJeDlj-MYX?wrj>u5b4d>P=w!&+Y|vH- z*P_JYRHy88(1sAOyZ!S5OH+#~L5UvZ0l0ts^8yk<862`_1I`9zYyZ6PycFN!bg){` zUH6~^v;*>sOOVd8gw)5Vf;AvV1*N7GC6+_{&%nTtp9DGqG#`}4z@;O|Oo)F#Yv~b6 zVaWv|XXOmurxcPOoLrO&KI0pd0MJDtY9Zwp!d%dGkEPdf(vsjC~bq{5WcV_ z0%Rt{abPDwr9s&Sw0{83g*gFSq(DT$B}yhJu7XqZQjp>*vsf8aMu4xdhf9RyyQCH; zr{<+3g4Zj9y^)b$4)G-9d}B~3WaJ~_5|o~5VAn~xB$gzC+zP74VD5!Byc0`O!SxO( zPMqQ84wgM3kU|Dr|NGZuGPr^F>m*|COaSkkg;bj$#lfj17)=rI+4s-`a0?QPL8sP3 zG(hq{s2K^`Xb9d18c^vBRtYNSKqVWrJOH(Lpsh9rMErnNGBEgCLC-C5ab|$CV37a~ z2l!Q6kW*)&4X$DatKf|Ma_7XN)Di{;E04^SR2Unw4F{YJ5ln=k{*b~CwB^(6m1WLE>H(!Se}60A!~%$8!L5;E z1_r}o(mDAE5F6HFL~Tcc%!jClv`P`G7#KkHDsp4er6{o+ zRAe|M7BN7of4G$lu6f8Y3_4dk1zzuh&O`?VM`{Xc0}><-_Bymg1-0{_`_^1Q84ASD zNe6AW0ksand)MHtNr)V%u?cAtBKY8{0(3?>s0aZ^Yby9E0I+_L^FeZu9e9vEau7DO zmjXH~9lSfwzdR3g(+Q|`mzb97QJ$9q(g&$R(A$KNsu3(-QVD4%f%ad)ntmWNDvL`} zbHTQQ-4T*s;FDUGngg{JMGR^)iWtO=5ch`UL(2_N+_}SQS%@4YLR_3dZh^27)iOd1 z5#A6rkRW3~D!v&oTb>MHG4Iq$NK=#n!iScc3`pewxNn2R2bT+;#o*M>fUOmZ)cj;X zYJM_+&x?l)OTpQ&rYKAfk`7ZC5G506UtDrF#AA@VDna4oi&ofzOA+V9f|AlAa9bDZ z5AY6l!e>T1m%%twMt|{U9L%3JYi*5A{8$tqMN1473HAAt)8KTt+R;85odT z#Yjytv=$erO$l#}f!cPEd5`$P5(gM%3P-XriGYskk8LJZPXNX%34b@5b4 z1`SGquEB&)et_F7pzGT};RZSPFfSjh792DRkhFj}e*<)<8DXR(EZck`^^(U7x+N-VI%k;_rrM5*j3N~4;_I=juG=` zikb{o;6@s_u?f1{0(=*g6|8Xr6|wS!v{0d3aN8DL4X8~B!l29qqLJejH0=Nyy-G?f zQUE)nBqOmz0n$bRjXV27j!^-J7P3Cr@hVA)Mc^>1$z)&vwV^@xfq+M&L3>?6V;1hI zC6LSw5kNL05v&k=3I^B=Pz%{9u?Re(1Ik07aS}**f(T)7K?pjR1$2xAQqUl`D?xhE zf(b32L2WwZ6vDuO9=C93!)D(gZ4!h-Abe=>z^`BdwM(F4;2>l0ECyY?0#1euXi){e z3kH!-L3Mp%3OH?p&Q;A%Oo62nkblq$1_sc)A+kJrIt)rh$`BB@B1Z#*e;y*F;rC$Y z=Yd8tof3;6p^P4v0hREQ3S%F>Gwk{?LVXrr7f*QDLdqm~*#J!skaAcLbj}H+&jn70 zE}rmlB8U+Xt^#PVP$8+b1XQws11~%;1zfIy3USCJ3#251l=Tq9VRMM!i4gF37bpSx zTlu6cnjf)VxsMXB&BYoLh_)Sk-+U)==id**?XZE8gc=t4gT zAGAFkRIeh%8mRoooaaDKcc6F%w|)u4Gqi4o*36Ky9+Zx0P(Op51dDkF5C`EtNT~p_ z7n+8^>cD)|sD{kFK%)gj!6OWG1_!8|LYn-6n2PWd=niSv-LuHXqK6$3@q`pFFkg)9 zd&@y>9_RoedhR0ooCI2!2})C-bElrh>d3v0)sb6LrYCoUfq~)we~=6VgU~J=IS7k^ zVM3Xn+#Mu22_(6OGCjE~NOC*2A@rH;(vdq*r6c#jTmybi0z(z<^Mwz^LGl2G;Zm83d z1DS_p3xeGJ&(2SXH6jmbg4c|(%eA5OATWsk*p?+Y}{f7n}IexVK2Fho&PWKKC z*wej0Cw0=jLm&0h{e~JHxf8SX6JN>xaNEj9sNfdjg&5d3gv=sb#-E3U;tfK=L;IogqjU%Z}IHWk(1g3DW^dEGkbL8J|OWy zN}c!W$Q3NqlUuMCq3+>+9l1~Y5&YZ(I&y^v5d6OfbmSNhBKVF6b>v(R>c|O1>TlCX zy(l;v7w0;0*m5?A!)CM<-s9T~3Z!`qA? zzroCNSf~dV2Z@2|=?FA2klq9|v4A}+3@;9`Fen^mVK6z&!r*r;OSRQ9#@IKDM5PO`3A^$iFL-%nO zhPlUC7RH7^F|JFj$>p zVemc0!VrIog`w~i3q$uQ7KT-)SQt*6Vqv&*iiP3bDHaCC(<}^$kiL&G^1hI!{$7&e__VYqOPh2ix%76$I~EDRdwSr|Od zvoK_zXJP0%&%&_sJPX6_^DGSK&$BQ*JkP@L`8*2)?*$eH^$RQvju%)MqA##8Q6 z=(xbbu;Ky>!|4kw3@X`w|Pou1hQoH!ra;yt%}}@b3}}gYab*2DQs9 z3>KGJ7`!gCFvMJDVaU78!Z7VG7E#m6&41ID=Z92S6CQI zudpz5Tw!6DdxeEz(-jtm>sMG9eqLc=khsdiU~!d&A>t|vL&a4VhB;SR7uCp*GU1wo%zRtoB zdYy$K>pBZV$8{El71vo9PF-hVxO1I_;oWr>2BsS<45Bw!7&LCMFu2@cVF*GmhUft`b5wBX(SoW0nHzyajRTUJ8Y0vzAVSR% zBGkMfLJiL{>|ufIW&5o#t7p=JvaYHkpr<_{5S6josmA7p>I5TPc6 z2sJ%KsM&x+jR8_PU%{a!07=ac9BK-X)X1#H?ssH04n(L)Awo?D5o*>Dq2>Y+YQ7Mm zMq&+NzuOR@CV>bwEkvkUL4=w!M5y^dgc^~xg#B(ogqj#4)HD#GW(g5$P7tBy4GuLE zkkY)sI>LT8Awo?A5o&6PP_uvtHAje0^MVL9JnISj-GB%+Aw;ODz@cUXQe4czq2>^h zngcl0+(1(E1c#beNNPAXVE6kUBsDrX)bJgJw3WqgP} zP_>}Ecn62t3s5znyvVTydl)=IQlo=I4Z|@=z6Y5TfJ2SKF-RGq0aXifR|yWa4p229 z^A-@H<_HmLUf@uZfMgfXR_tL=jHJc@hnfjUYC>?RLH1V#5o+cTq2>S)YMv0GhGQFc zzazU@hX^$RM5rktLd^^!)a)Tb%>yFTuxuyncMT%c_z?lA0bI zY6OlW%GV7z)EFSCxq?HDGm@GgIMjq9sgc=*-S6p0Y8-H=sXPuT@0*}%LFIi44z*LE zYCz@v1RQEMAgS4cL(K&wH8*gm`GBP64-Pc~ClKMSup4_A7$B)}!J#JL1SAY1p=v>4 zkby&O4pa>&45r{v(}1LA2M#q0PC)Aa)lhmHR1av}`VI~~2`3T$71)E_zsPD#h)@$j zgqj*6)GQ!E%@G`GEgkaHx?*Qd5CLjUken zIXKj~BB?omLk)6#J;9--0m&SWec1iJ07;Dw4mDel)CAyAa{)x{2T#(eT?8ol+a3nPvIMie!sqw*~rU6M!0S+|_kkm}Uq2>URnjJXQ zTtZTF2Zx$xNNN}kVE6kEBsD5H)GRoIhzk!KY6MOr)a2k$qkI}tX6ZxKg38GWIMljA z)qwK!9vo`Ik<>iEp(gt@q--vMss-7}au9o1OoY0x9Z9VL4z)|6YC!Ib!J%d+l9~n_ zYR*F42bzyW#vJSP<<9*7|Nkw67I-Zn$R3c}LG+%3df<6YP+7m^pdMKM43hbve&Ky2 zyZ<1`!R!F3`HZAS;SlyPVMmI47aVFNkbcezze)O#%^WT8L1yf(SKd zh*0x^2sI){3H#lG2sJT8sA(WV%@QKioFGEY8zR&Q93$*^6C%_^5TT}q2sI0cP;-O` zH7|%z!*iUl-wlXR6GDWV3L@0ZAwtaoBGfz~LJh|W!hY8wLQMb>YD$PuGlK{-_TW%sjHKoP4mGYwYFJKV_j}}7NLVJF zg{%R~KC2@K3eOU#UeM|?4IFwWK-GZ4Bn5|>4M=J_aHzR}q-G5cHIJa~d<|6#a^nRY zY8lQU!uSskH3~>-6wY7|8wVscE;!UAAgRf~p$63M1hqLqG%}uFs0Ck73kpLJo^uA$ zz6JTO=M1EMy9UWzkU3M%LHZJ1P`g2D?;xpx*#T0!0;&dNHpf}){yYXXZx2*0$UGe! zY9Bz=fXs^^LQM@3Y8K#7!*CuEk4JE*Q9x4j0*4w0BsDzeu!jM%8UrHKgy2w8cEF- z9BTfahtyZB7a(N=sI0nyL#_A)h+26hwJevghlL?jttFCL0~~6-p=yJX)W+aYn+jC} zDla>5sA)h_vxW#Y7l=^vg$Okgm$8S%0wnj?;826?<^&?tv=E_Y1rch_5TWJ+5o$!P zVD~$+zbuGQ6GMcW1|rlfAwtawBGkMgLXE&x!hSa)LQMn_YHEm3vw#RSM~G1K0*9Id zNa>m98g{=wKvH8sgqjc{)KuV5!*CH&c7e)-IXKiPAgMWkLygfzNITF5suolhKEa{3 z;1a@4f$P}AAOLC($XzBl)D$48iNK*|0+N~<9BMWosaZgTnj=K0c|n94o*UTxj_e)- zBGiNsp{9ZeHFJnibASjnPl!;%ag(s$b%;={Z zsI`QubwW}raT|NsghADS+~w^YJL!*M&=H7za#t0fe1Az zM5yT?Ld_Z?)LbA!%@-onNZcjtcN-$qBoLvdg$Ok(h){Ee2sIywP$P1Wu-`3+P!mIh zng$}&EFnV82_n?IAwrG7eZqb>Awo?A5o&6PP_uvtHAje0^MVL9JP!!_-GB%+Aw;OD zAVSR?BGeopLd_E*)Nni`>~|d^)C3Trri2JJGl)>LhX^$fh)~1wh_K%^h*0B0gqi{z zYLMF+Q*fw3u6K6eP%{CkUcQ4v%?2bj43Dw<{Q{C26&z|FBdPJgq2?Qsnj9QzI4&dl z9}{q>kwsFo1&0~~BsDj1sBuD4^9P5T5F|AUPq2qi8j>0p9BL{qL)u;qmm%{foltrb zR4-`$Bm;-urI#W7x3y5Upmy659BTJN)qvV!7jUS#jHKoZ4mBT;)JQzV?r(uBh`6#L zLQMh@YFda;vw{dUXNXYqfe1As&j|b7f(SJ+M5t*XLd_B))SMtf%^M=r2s|h3cM~Gi zL=d5-h6ptah){Ec2sJNos4+lF&pa;(``v&DH6cW(slcHo;0mP7h=jTel<()@P@4l) z1IqU&aHy$AQu79fnn_4%1YTkfgXKtSOmL{#19kh+E0D4aM1$Oa4yqSa-bLWh`vIy3 zg*UE3+D{LzLe`(WzN#Y!8ao56 zWq{EjHp3}>xgG!i|G&9cTMks#fH3I%PEeV0<1J+E1RDbb!-}_%wG%Ip>;w-fKav709gqj{A)NCL^ z%@rcl{2)S&%m?g#NA{Nk5o%J1P}4z#nl(hIxj=-PFGQ%3_=w%_8<67N28SBt@JS#- zO$!lfRuG})3=wKR5TQoo6L!BN`^$m|H8Dh}X&^$)5+c-`AVSR>BGd?cChT_;BGg0> zp{9liH4BJPbA$*rFNjdX^M$bA4Tw+^LWG(MBGk+wLd^jp)I1?V4aZl)e%B#FO#l&U zN{CQ1g9tTyh*0wYhZ^K^jO80)ziSYo#)k+s1w^QsLWG(fM5wt#gc^qLg#E5Ugc=Vb z)Z`GMW&#mvwh*D_1`%rh5TQol2jTE>Awo?C5o&sfP_uyuHCKpG^MeRAGCv9X-GK-- zDMYC0AVSR=BGg~|X?)Fcq0riBPKD~M2Yh6ptuh)^T)o3P(4h)@$l zgqj8-)GQ%F%?TpZydgr3z#qbXHz7hz1QBX#h)}bD2sKBDQ1gNaH9UU_``v&DH6cW( zsUSkl93s>lAVSR(BGhpFBkXq_BGd#Bp{9fgH8Y4%vxf*Z4~S61@}IEZHHc8-Lxh?F zBGgPFLd^~$)Z8IL4Fdz>JbUEv4dlL_3K42Nh)|P5gqjINsM$hn>YGjxQ``v*EH7P`>=^#SQ8Y0wOAVSR-BGgDQ6ZX3e z5o!{MP}4$$niWK-IYWe+4@9UDVIk~y3nJ9S5TT}l2sKNHP;-I^HE)PeBfv`7?N;f33Z%9Lhguz|T5}||8*r%gg{lFKOW(nvCLT!* z0~>b#HXx}{!J%dWk{S;jY8Y-p{0DMR4iRc55TRxZ5o&G_q2><}Y82S9hYzy9T!>JU zL4=wfBGhakLd_K-)cnAq<^WQh%5Y%!`xPWL4mi|2LsFB1L(LB)H61wA@Z3P8pEWqt z$Rnw_fJ2SZ4M={ohN=bSw=X!<`a#uz(yRg}_Ap35QsaU{4X8Z@n&$%1$oOyq#4R8( zkR2dg!Kn{Ey9ea13{HLU**zUd=7P+rL9%lPk{rk!5C*B~M^bYKhnj^*Y8be%`)@On z8WkLBj^2RGmz{^I1-ab=huTL_H6Xv1;825{r)ChLW)Bf+9uT31g&TVqAiGC{2sJ)L zs3{;q%@iWk>>xtT9U{~)@DTR93K42Nh)|P5gqjINsM$hn>YGn8b``v*EH7PjMC?K^BIz-7eFAZEnQpk>6);9$hg;A6zj5M#v7 zkYmKoP-Dc-&}YQXFvp0UVS^Dn!x1BPhHFOb3@?n>89o`YGyE}PXAm)FXOJ>xXHYX{ zXV5cdXUH&QXRtG7XYep)X9zK7XNWUqXUH;UXDBmfXXrC#XP9Tq&alduonf0XJHr8E zc7`*?>l2!p`7l!p@Ll!p=}(!p_iP z!p<lP2|L3!6Ly9mLv{uyLv{uuLv{u^Lv{ucLv{u>Lv{uWV|IpD2J8&K3?SiX zrNz#mqs7i3qs7j^rp3TMc&5S5a7lxmVUGqo!x{~Ch8Y^{3==fi8LBkc z8L~9k86q^;8C*2j8H_a88Duor8Td5V85lI!89u4AGdxmfXSk-$&TvefoneDIJHsq> zc7`r>c7_Udc7`-{c7_;rb_O?fc7_lwh`ZklF*GbU^|1sNLF z3Nkc25oKuD&Ck&AnUkSm4>v=Dl`untJP$)dngl~bq$oqf1!jhZ+uRHd*1QZ2T-*!| z*993GEVvjN?6?>j;v^UvQdk)pR74pXwsA2uRERP(Jm6+%xWL8Gz$MPmP|eTKU?9%W zFjt(RL6n=JL7SVQVHP(-Lz5sw!%H592012%hIIlA4ejg<4Qe6`4Yx!Y8kPt!G^7YI zG(2EuXkg}GXs8olXt3pDXsF_4Xt*ZG&|t>J&|u5O(2&f^&`>VQ(4Z&I&@fw^p`nAD zp`o0Ip`n10p&^5bp<#spLqiigLxYM4L&FVGhK7X#3=N4Ob9osWYa%To7hx zI48`|uvdtofm4W~fmxWL;f)YOL!1CZgPjONL#Y5mLxT`QgOo5s!xKVurV|QvN1Gd@iR13vNAMG5nyOg5MgL2VP|N#D9q5%3<^g9h6Zn5 zh6V>Vh6WFidzl#;7BDk3EMaD7Sj5cGu#B0ZA&ZltA&QfsA(xY(A%l~lA&`@yA()e) zA(fM%p^1Z`p@xH@;S(!EL%Re+!!16BhE@rN20>nihICG%OQfXebb3XkcMtXkcSvXb9$GXb2Z(XowbJ zXxJsd&|ogY(2&p0&~Q(Hp`llZp&^8iq2VDfL&F9EhK6|p3=OAP85;Ci85*7oGBkW) zXK2u4V`z{TXK1KmWoY=w%Fu9+hoRvj6GKCh5JSU47KVl{9)^ZKc7_HAPKE|q0fq*9 zPKE{-PKE|2CWeN$q6`gR`578kb22oTF)}p#<7Q~sA;8d3!^zN)$i>ibN}Qp=U5uf@ zO^l%-Muef^z5qkROd*DbcqWF118fWpSGX7&mhdw)q%$%!WbraIbn-GZ)blblyysE8g7OLMqY-76+#RRQ+XH~7BDh2 zbTctDbg?ru$g?pt$g(js$gnXq%;05ch+<-B$YNq>=wN4PmoD2=$IT;!j3NbYF zNH8>P7h-5g5N2q2EX2_8REVLWQ;?w{N|2#ps}Ms&wg5vzhyX*wJ3)qqh78JP=@L=n-OQFcV^Ec+1PsP|3^C zP{7a7P{zy9pvS_{u%DTsfrF2sp`V$d!GMvW;UX(TgEk{WLn${yLlQGXLmCf5!)qpn z27M-mhAB)84a*rB8cuUFG(?FqG~DNBXpjcwWln~MUAznpkvt3y*LWBjeuywM#PBjS zJmX?$h~{Bvh~s5wkYQzLXy9OIm?p~5kipE*kRZy?@RXmSVJ*l`Zia>wUWNu9K86Mt z9)^ZMafSv3UWSGYP?-YCBfJa^A-oI?Y8(s=oNNpY9Rdsu>$w>kVt5!DyqOpp3^^DY z3fUMMEZGjgDx9G!yO)mhSN+8 z4Su`~4e`7T4GVY~8q#-fVq$2}=4WVlBgW7$ zou8q>jGLjsj+>#u1r+z(3=KBi3=N5F3=PbD3=N&^3=KCp7#gHG7#fnr7#b#vGc-hq zGc*|UGc*{9Gc>peFf=fUF*N*VVQ63#V`zwGWN0|d#?Ww*iJ?J}hoRvgBSQnf2t&g< zafSv?F@^>XF@^?d0fvT!{0t3^;tUP-LJSRG*%%rk*clp9*clpJMHm_w*clpZ*clrB zvoSPSvokdOV`FHrVrOVb;$mp{#mCT4$ji`B!NJfVz{Ak6n~R}gCl^D*Aufi758Mn5 z5?l-odpH>yczGEbrid{#ln5|1I)Uf<+h_gjg9GiUk-N>Vy~?KCv@2+~Q$q_`}H15Xi^S&?UssP|MEH z(89{laFmOop_!MVp@Wy9A(fY*;Vy_~WN0YjWoVer!q5;d!O+mc!_aV$jiI5Pm!YAT zm!aW0C=PiU8U&ab8o0R_8tl0k8r--T8cMks8bo*)8m=%iG*ojkH2mjgXvpJWXs7~( zy(mLNiYP2S|DZg>!_e>&R8H_QG<*k@aXbtSk>U&u zZDI@!xA_oRy)$LyV!JmXo2Ok)5Go0y{&)HF1W98{!NNv)CCLjJM&)1`T0`h7HUN4R1sk8a8kku81=<1c@;;)QK}R zqzEuHMDjBlm7zgWgrT8Uf}vp*J3~V%4?{yR z6GMYFH$y`)C@-=xG^7bIG}H?-G&r&{G`O=eG^By*KOTmL_e=~81{@3x1#Aor7HkX+ zsR9fQo~#TFb;1k{ZmbLq69pI=zVR?LJY!;L2w-GrFk)h8&;-?kd<+e-d<+fId<+dI z1Q;5^gc%x6@-sAS;AdzkVPj~pVPj}m$<5I4kB6b*1E_A~WoU>KV`va!VrbaO%+L@d z!qA{8!qAW|$k1RS!q9L>fT5vVh@l}#n4!T)h@oM+5JQ8P5JN+R5JST>A%+G|A%=!< zA%=zwUWNt+K86NHK8A*$ybKNb5)2I=nHd_4nHUf# z8m0*|G+Yy4XsG69Xjsq8&``z6(6E)Cp`nnSpVO&`=@B(C~+yp&>$op}~WTq2Y@tL&GFdhK6`?h6Zt7hK6-43=Pff3=Q$Z z3=NNj7#f}kF*I}tGBiXAGBj)!Vra+`U}#t+#L%!*h@rusm7zgHjG>{1hoK>tiJ_rX zl%b)Yi=m;BhoPZ{k)a`-hoRvPNSu+OVGbWdgNh(SgSP-fLy!PN!)rl?hW|ng4SzuG zV{wLt09J+u5m4KhhoPa9k)ffBk)h!Y4?}|j6GMX?D9rd68WQ;!8tnNP8q7iYL4cv* z5~xinz|c_4$3$5$9$L+(_!t^OL>L;hMHm`p2r)FU^D#68b1*cl;bmx8 z&CAf>FTv2DE5gt)MVO&sGe1K^I}bxcHzPxXlo&$;Coe<84|6h4NA7vc;J z`Ya3$B^(S52RRuU){8MTq;WAcq=5Q7Tnr7oJPZwdpuPqlLqi@PLqk3vLxTt}LxUJE zLxU$TL&JP7hK6-~3=I+d3=LEH85%eQ7#f5H7#hR`7#b$BGBhNLGc+WLGc>FhXK09# zU}%VyU}z|2WoS4g%Fs|L%FwWupP?a3#Zc^Mj(g6tM#XvpPfXb9nAXsG35XlUnSXlUbO zXjsS1(D0O#p&^Wmq2UcDLxUKo@5jZ^a2XU9+zbt?xfmK=axyf0<6~&pC(6(eE5gu_ zC&JK>D#XyxF2vCAQ;4Bq1|LJiK_-TVH=y|AV`#X^#Lyti#L%Dz@;f&}gB&+QgF8P% z!)8!m0T%+OE?O6!6Q4gZ7~8rTFG8r}*pG<*`ehV@*$b(p~9A(VVf#D!#-7Zh7+pn40lx78J?-KGyGCz zXJAodXAn?hXOL23XHZdNXV6n)XE0M^XK+wsXYf*EXGlJHr_@c7|JO>0XsvK0XsvA0Xsv10XsvD0XxGa19pZv2J8%L4A>d=7_c*(Ghk;p zpu^6vMTebXg$_Hz936IsE**A;8Xb0q0v&dS1RZvU5FK^~7aev66CHL26&-d45gm30 z4jp!eU)t;p@3h$&o@ui)+|p)eIHS$ZuuGerVTCq3!z^ufhA@40h9Yfth6HVP1`U07 z1`};|1{G~~1`%y`hJRY@3@^0U8LnxuGaS%jXV|30&ah02one+1J425aJ41~YJHs12 zc7}U;>9R9S(Pd|7(`9FPqQlPcMTeb1 zOrM>BO`n~?O`n~iO`Dy;NS~ddLYJK(O_!Y^OqZR(Ntd0$K$o3CNtc~LM3n8T`!I8B)yI8A{CA8CuNQ877&t zGb}M@XV_-W&T!0}o#B=_JHsn;c7}iE>+WB|C$dB|C$PB|C$eB|C$gB|AfyB|C$L z89PIhB|F0uOLm48mh23BEZG^(S+X-cuw-ZWWXaCJV8zZLV#Us&WyQ{5XT{DCXT{Et zXT{D?XT{FYXT{F2#EP9^j}<$^1uJ%jdsgfWZ>-oE{#mgz@L97nC|I*Im{_wjcv!PD z#96a5B1~D^sh8&PP7#J9oY}px{Y}pxB*swDc*|0PGuwiF722#hsz~JlVY;LIM;^V`x zhAFKmHI;$kK2vUDPELL@1H(s#_|%Hz)Pj=ujKsW@oYW#?1_nds^5o*=f=UL4K!*5u z=ZXrqqQu-(4~RSi19NdfQD$CA8pBb>_=3`+)a1mR90n7Ro}AP?28LNoX~{YH#iB$TX)d*f00|P6_ zgyf7O28QQMxv9CusU-{yzQJM6LFR^fDLFX|dJOg@sYSV&d5I;d4i1ry5fM=g*$naV zDLFa$d8rkdB@8R!|U;Tu|bcnNyNl#4wv7KE60LxwI&=q%uCWs3^Y(7Ss$3 znoOQ~C8XRMGRAzVa$+x zxI9B4NUu*~afvI)T?`C|nRALuijs2+G94MXnA~&nlM-`6^FYpHU|@#wee#pD85n*r zLS!Am$%q{)7o1s@%D~Xe7+P+H=WnpBz|TvC*om+r{GumEINKv90OV@gU-)FO1b zW#**%CFX)ug)s-`q^1@yurUXxmN@6<73b%qhGdrHfaLCjbcAFkXFKPY=9MroID`1k zrA0-lc_knRr4|=^rZ8B7MNxJBhx*bDoNJVsJo7S3G81z$t5ThdGD|X(6LW%7lS?x5 z^B5W#TvBsVOEAP|Ft~zZ7+pC-Ad^pOVi|^V1``HnQ09STHijk4;h+oz@+U(ugL6@8 zVo559c^UJ8s4N)3U%2@7e4#Y};vsYR6msYPj^n9fU11xHJ25yL5vX~C7nC8@a~nYpQs#UQVO zSPb5-L4K}2#zx>Q%)rDHkY9|HLL$NXN|St3^GX>QjxmDL3yAH=un)}kOwP}9WSGPh zoRME1o|%`DU(Uc#4AKMP1mq+pr{<=DQpOUdkfOxo?121&(gKhP3=Hv1!Ko!6rb}vC zVrfo^XGv-<14B4S)Gfa#HN7amG%p2W4g)vHOy|;~;{2k3{9*=%nG7ze#U(}gl~DOU z2A9+{2pg2_92pqYnSxT&GmA@7iy*>?RL=tTV_<0}%%2Pk8C)`p3ld9`GZ3m)f!v!{ zoRe6R3Ke8vumZUP%5!8$fW{cad{9)2!R>U;Nh~gQWMJ3@4kd`g9T~Kkf>Lu*6N^(_ zoEdmPX1O>sTxTkW7W$41kHKjRVxA+zT1L-e2%CZ72!m^0Vp2{jjBm{poSK&ccM7C5 zgGdIYCYLb$2bFWqIhm<>C18FQ$To;P!ykxTVsSAfgWqRxEi6sU0jt{qcCS-rNp50+ zBSRiSmrp*pqiuN*k<`t(Ffs>>o!*fR8{FKbJN{}&*49gik zi$N>~1_q{p)YNQ5$h(5f2}lGLcnk}eLh>DplQT12D;TbWd>EElR8pFlGztoBnkNo^>*9r!PE>JFl#CI`7%#p#1!8yO65~4pABoFq`4sgtX zm`;gB49gfji$SrNnasejnbEU2DnCCrHHCqJpTP-K*Fa1R$q&gd0M(bii3Jdmfc(t7 zl41r221t?%$q!C0N(Hr844ELTkbH;?0|PIEQ)+rEN>z_69kJ2NK-!g&qK4UWkrnPsrxb_S_L5%~;KnZ+fJ3`>!C&iT1X`QW%(1r-fW%}Grz0VRtSC?YVGAejl^ay2-) zC_g91DY1ybmccnAGY48Gx)tT;g2NpY-^n0Xgych`gMmQ<#0RxLApQVnBnF0gjGo0{ z6Bz0lJwVNu#G=#^hF-8O&S17UNFPS&s{;}RB@u=g5DQX|fced!uz&I7iR_rPp06KqSTV)45yqD1_mJpr_2&C z%K~I0LdrKkC6$4X2@;zANm-!6kAWY`4}hAh3$@2NKer&U1eAC{Hh95oaPf4?EGcGC z0GSM7hvd7YmSrZVGJIwXN(DDcU`8<*L(Kv!%uOs{VAul+laSPk65rI4qRixCM}}!2 z5r|_#DhpB>rXu)`3=BF@6A-R}l(!5FULbW44%kKDQX6bhF+%`US8#q#W{Oi$X>kSv zgCrTOykBZ! zQEG9CbAC>K5koIX#5b`39MB90K)kTb)bfJ-q7sM^4EvGATq{aI>G3c~3=-*3RfiBF zP&I)JE&(O^J^>62rx|?$O7dL-7#LDPs$lKM{NhYd0}x~$H-lqQGQ&H@fc%`woXosb z1_nt6=ZyTK6ox4bt~oiG1;wch_Zb5+QyJcZ)uiX=F??eLm34`E={czkcNqf`A?arh z$cBK-iqsqi21AhVq3kUnaZoI}R+NAmub>jm*vOG#CrsQeF&Wh2b!7@JNh~UH$xn7< z@PM!b64O%|K&{afFpGh~F)1Icf`MTgsC;t)^#-4U-Q|>8m6=+^z#s@K1xqp*W`fiN zB$i|_JO|gVU?zh%D0Sv%r#j}PfT~=upbu0G%wbRgx!%1fu^=NexfmQh;F2jkzbGdq zq$n}37}N-4u!5!rxBR>kSQ2q$@PLX2q~^f{8N8ulpim1+&tou!^1z=Q)B>@ zPnmhCAP&P4P}l^e=Q-t9FxZ1!gO)PfT|A*#T^iE%4gmFTLH;iQm8ejjBSS5Ne?e*< zoXZgI=@%T}@9(4M5){V3Aj}w?k(!ee@0VYanN|s^og5kDK($u7V=}0F4Qk33GX#6M z`oNm8?hKx}iRr1JVmRJCwFJz8Gy{x~WE@jc7)((4zKO-zsVNLWNTNZh1)xSO$XbSA zB=O+X5~plP7GZEg5_d-u_dpc~y93nOWMFXi_jL||IhVoT$JH@31R7KfjSK;mu0=)h z!Ko$SE^JY0K?wsx3qlmqVqrK15~)az2Nf}pPUbbHfXaBM(#)Kcu*96wRE84f_<+iI zzx=$^;F6-!TRCHKuD(QC>a+!$y#3MRL5SKP2Qd z7y~N7$pzBPWYB~0{Zh*r7^I;702u)BeIZDHQBk~qax$okmcqc00~LYvu^AZDnF1;y z{)=}khA>5`dT0!}a`skuJQ<<^o_Q&$6;N~MfW$y~0yInlN&CeN3@1RM70L0C1{r81fPtYOBnDCmiX2FG z3(qXc@J_8P&o4?TX1E6`Bis^85_2F%UqhrxuumU>{k(xIeEn;iJ zu;bz#Q&OM~WGDiKPf-!nZ3jWTisbm9(!7$)+*C-AFyw+ni;CjiGs{x*T)|_wnfZCX zpaFu^Vuk{!tRHBM1vFp#gwkOmlS~{Jy4AdaCG+waP)SFVz|s;52{o_ z%D}FPcPuT*cPmOwh3E`)bd3mbbO+h20vbKWp$0UJEWu!JZ-7f4YDPh2d1fA{nkt5c z!Y}YBIB0|xG$V$JvzSC&K_W|h*cm|kW9k?g7(jT3Ejz;oXLg1ap6m#taM( zG#MBa3>X*$m{}Me=rb^ExW&LQVKW1RfCK}>gS89{0^$q|AJmx{97GuyE|fAb1XMFH z6kKOySir-?kl@G6Frk2%!9j|FAz&pF!-o&d3<75v7#L)k7%r$VF*Il~Ff`~gFbKS3 zWGGn2#4te*DyGH2prFmbkWj+_Rs&*#@B}>wAFL0gSBrt+05=Q6g!eGFrk!%;lmXsh6GU9>M=1mEM#E# zu!M;rUPFB7y{NZ zF&tRN#K5qQf#HE91A{{kGeg2$W(J1I%nSk(m>Cw#V`iAJfPo=kDl@}`%}fjoQVa|N zAiN2*5SEESVGc9HfyvAa3=^3d7R+U4m@ti*VSzdmLx3Rzg9A4cgTOonh66eb3I@74E0`EI z=rJ>FkYr#`xW&NmL6U*t!BS?14GWkV0+uo}FnnQVF!;jEQ1FGBf#DZ3gTo(Yh7Dhs z83MjDGfeo(%<$kVGef{vW`+sBnHdy*Gcy=`V`f&{A6Z0@ST}K z;RiEA!w+VL2Va;O1imseeE7}GaN#pE!-3Dt3Fh@0l4G{xUNp{AFf%@Rylk!Fy(gfd9-43ICWG z8vZad2;5>~2+(9^D9~bNSfIhoFhP@^hhKPUc3=h~j7%JYdGidx` zXSncz9lS8pfQ^H}ft!ON;tD&%1tt!L37i}Z8C)C;23Oe`IIgiXaIkYQtYGF~h+ySl z*ulZUP;rx;VZ{x01_?$E28|c&3<_V_89spg%D}uK2Puy!B;gVDV#TQ1D}CnCZvPu+ER2;e;PM z!y`X-21b8&1_^(51`~gF25*0MhID^+hGu_uhFSjX3>*E~8P58%Gd%TYXJ86oXOIkF zXD|(5XYdbTXUGd+XXprEXILJ<&TuS%o#8&>7ncljiKxevqRY#wuQ1YoDXGZ zcoxde@H3R1fjf+yK`V@%!7YrPAu)`dp(>1>VNw`7!@4kbhJ#`340poV8UBZ{Gbn_! zGq{AaGo*#HGqi=XGpr70XE+(o&hRFjoq;EUok1spoxvx9ogpWJouM~^ondVRJHv$t zc81Rp>xRvNPO{WM^QAVrNi^VrOuRVrNK?VrS@y zVrN(p#m;ahik;zE6gvY`G&_StG&_S~G&_SwG&@6VG&@5Qe)W}X2-HKT!>|7_!rC0U>V2G&=SYause>Ofia$)!6KfW zAuFDpVO~5t!@qcT2E_z+2FC<;hPVWFhL!|&hUE$D4CfNq8Ga_PGl(a$GXy2FGju1i zGi*;}XLy>(&LEn^&JdEs&d`*^&af?so#9&&JA-yIJ413ZJ3~)0JHvrwc7`9x>Ff-g8SD)D8SD(f8SD%l8SD&KGT0gTGuau8GT9kYGT9lXX0kJ! z$z*3>&SGaU%VKB9&0=R*k;Tq%JByvcIGddzJe!@NCYzmMS2jDt=WKQcog8+C)Est( zSvl+smvh(|IC9w;Y;)Ne3Ub*Q7Ur@uT+d}^;L2lXu+3vWoHm6V`uO! zV`r!=V`tb@#?J7(jGaNGoSng_oSh-CoSmVtoSk82IXlCpa(0FfUd73>U! z73>VND%cs$RIoE}RkAbaSF$rCSF$rqs$^%_TglGwp^}|Jtcsn%wu+r0wThjgwThi# zSrt3Oxhi&s*H!EclGW@C*469`(ben>Rn_baE2`NUu2i!#{HtbX(5+!-h^%2}Xsuyq z*jU5P@UVuRfxniW!Mc{6A-9&DVMQ%F!;M;Y27x+u2Aeu|hTJ-KhBc7~2d zc80r+>#Lgh!%+BBgT5#LU&hVg_oq?-`ox!4ooguA- zoncA~JHyEqc7`7<>aivNQZ>WoJ-sV`uPgV`nI7V`rGt z#?El0jh*3b8#{woJ3E78J3B*8J3GVlc6Np%?d%Ni+SwVzJJ=blJJ=cGI@lSyJJ=c4 zcd#>D>|kg3)WOam-pS5T(8 zgF1r-gC>I(gEoT>gD!&}gFb@+gCTGLo!1OLn=cWLpnnSLncEOLpDPWLoP!eLq0&42GEuvlwPG%wd?zFpptA!vcnd42u{RGb~|P%CL-K zIl~Hul?|xl;u#aIs z!vTha42KvFGaO+!%5aR~IKv5slMJUAPBWZgILmO3;XK0yhKmfB7%nqhVYte0jo~`O z4ThTxw-|0S++n!OaF5|W!vltg438KdGdy8<%J7WgIl~Kvmkh5MUNgL5c+2pP;XT6# zhK~%N7(O$6Vff1Mjo~}P4~Cx%zZiZq{9*XZ@Q>j?0|O%?BNHPtBMT!dBO4<-BL^cV zBNrn#BM&1lBOfC_qX45IqY$GoqX?rYqZp$&qXeTQqZFewqYR@gqa33=qXMHMqY|Ss zqY9%cqZ*?+qXwfUqZXq!qYk4kqaLF^qXDBKqY;~V;o~VV*+C$V-jOBV+vy`V;W;RV+La;V-{mJV-903V;*BZV*z6! zV-aI9V+ms^V;N&PV+CU+V-;gHV+~_1V|iwtu~BKJUO{CFsIToDP?TSinp~0!nwxYi zC~$BHge>T?w>NMO0FO1eI@z00xwZOoHtsIlOZpIi!BI)oM`2w_aS zTvIYjummGQ7*h*qxE`W~kQ_X+z$;tA^HR_ph7iUy2|V-TlUah;ToOb-pg12pLR`L7B-Jpzw9cPlhBy)JVjThKC|d28$0- zr7-P;EQr9O5m^FLTS!rADi%!$VN5MpltY9tm0|`tSOh~MXxtUD+7PrjDz%~n5^Rug zDb0*eEH2JZMr2q-TwuzfnGII}8?VKp7bbKD64G&xMokircl4k_;pNG!sj&P0(z zWJ*YCf#xLCOa_)RamGyHj*ejl4v31w1e9(ONj=cf6`KN-G>=OSN^1<8DbVB&E`;&O zBeDY)MX-E<-4Q4m1g8>cPQfmZ$THaF5qSrPJUkO&mq*G?*cBkM6?S=){Do5qBBNnf zf|BF#D}m%2>}rtnAa)gq%!pkcpXuQ2iB%i+e2Si4;F%JhVX+tnR|Lzs*wr9sVeBf9 z@-lV>Xqg(jB6#k`;u(+}N;XGR6K{@L8JamcFxcCJWH7siFgesR09h0zZwvi-|vkQ_iB99;mVrT~E2ABePs)Z+Q3>jE@Mv_2I#7M$ODHll;ExCea97{?P zlQW<_T(}!xHU&GPt~UrZaxeh(Wx*N~m2k8le(l}&L0hcbAZP+z| zHy44L`$hRV4gr< zcLV~QTs**W0}cYn@?nrE;DMb~f*}W5_7jrtlb;S+>k6|GVYp*xNn*N>zq^~iAIM^m zMK1Xee}dY0#Cj1)544d^jLrZ@^nn*g@E{8)X(5VFh?_v06C6R^K#-4-MzBI1T_eEZ zH%sT!WU9O zA{@M2D8eJa$pxHaLHq7N>xAKH9;-oU>DkEz6s8zjiHS0pMo2nz1VsioBypvEkR=ec zt`&q;gZ7~&BX*q-G~FG%_Y$<53e=Ya)s9F#JCKvYoS`8Mk_WBTf~S0tN8D3OT$~+B zGvkqB5~9n+88s8aROcsy+yoD72dHZJs2p;!iqPYmn3tHIT7*54L2&~gDR#+EhA9RY zULY6dCqovwL2X717=tWFS%?NL#UYx&^)smUBt;*1&kjff-bi&%EkWN7LyR8x{QMLw zl?$wz@N{wwaEw5&T-;Mj25Sk&(-o2cvR-Jy@=eUl16NtN(-k-tp$-GDI|VJY z2l)ie^PnIMbw;SbmQ&!h7Do99(j8{#5a1XAbs1!G!#y=GwJ0+g9C}?{G!hzIIpnMG*C`2|3>f4~yQ^-BUq3K~wWUd*{JB zyRoaacMP*vafal=5C@kqdzIjlqL8A*%o1NW=Xe(%AF!Bn23V-rIVi-z#lbPe#{mSu zG`NBSTL#%N?dgKG9TMp1>Irv0TqUu^vU_Sta7JQLY6@r*8Yn-abh1H_grl&4mnhh5 z3d7c5LJn|foP%1y0VPEsdyyN@AZx>%kwx(91sUT2P5uxz7WLtIDIlvHB0-Zfn8^v` zB9Fu}=qCRn2P|0;9Qzw2B~tzY*P}R^R*2{Ug*wP@ zAz|?#H{fw(NEk=~+>s^886e9l3sSL`3!#p#_Kx8u&iQ$1nJJ)M84jR64m{gB1UR{X z>ObV34=4}#=Ye*C`K6X)FV#Q`((NH?KrKjoiV9NmU`ZEbBrZpyCUIED1!OpiZer6o zc>faUG!eAe1I^CD+i}>^7g!@^0z=n_nZjTiL6HNGJ*?V5DxlE^)`TUIq3erBPi0_@ z=xGIAS4mIy>AR^lM!?oETxd(8N|2~(QX5!C`k1}ycYPF713Id+HXYb0hKf)x(sDBjA)Bc z=CFy@g))*xvMv%mhTLo*+AhQx9no6A^)qp*v2+#*W}ec_cr5L0T)6?XTOTyO18L?$ zMvbsks+faDpduf$;+Bt$I*Dy6|b#-<_2)j0&+Hb~76ks(%30C->t zq9@)Dq6;(^5bvMooSWiXoDQu^dkia0f8d(Jdn0+1JIx(a*)lHOSM?%^%VL zfVBVP{qrEZp5aD-edFmB;OK>9QDRC;L1IY;NKr%pWW)oiA9R3NQetv8ND8I61&^o@ zQiNm$PJ_U$J3`6QA=1|3iv=N$XW}K zaS_lC9n>Ew`SHm91=YK-o^XI;s3Bwk8KE{6db$|Yq%imrDNvldB$gz?jvs^g3%bP` zq92lg9UvS?J^jIq2kW|8K1Q`J7Cqf%F zSk~)7#ukH9OTc4~&=Y4s)h?_$1P$qds#tU-7|n7#3Xz7N@Tfv7Ly%O00w*yuFSQ8V zy~hjyw77x}69uQ1Ks*86vX7$y=ndM22-<|`0vm`b2Kyhqc1JE?VDkyVsU_HkF9XaR zVI!Derh$P2cqtv|=qvn#8ld4JNSOx8hQUOR4@4jb08}I7AgrQF@6<{h9)}hhp`M@( zqoC9Up9P6@#5PV1O4!hp3!W`NX!HOVP`Gr3dW8GAK=+T@BQ$}|p#o(dY=a|Er-AY# z*4{0+WWg;qi z|Hw)S*^a%I#^+v49VFNn<_sFRCg3QDBGQ5prUyEBM<{^Md!l$e9OevZ6q4jiaOxxI zO|UA$PK78VpbpZ2!0iv{Bpn_FpwSa}HI7pqs44+T#wQkmhM_Q*1)(%pz(D|S3V_c3 z%SOxyf+mo_!#c@1sfl@|1sJ6^tOkL}qcvnfLs($vfF~Y7x^SOv;k5>1-~~)Ru5|2l%y6BuMgTB#i;%q9bGZ9NNR3D38)C6Hlqs<1)L{p$On_LGn}}4@f)YlUp#!c~Avp1X4hlhP=z;ZP zbP_NO0!>3lKswMc9mt6ni+WI2{JH1k0j6QMZ3G1SNb8dD%m;7mkV2iX0knejOMfKeDimIQ&zD9~CM z#AOeD9LaiEeTCmRl<^yaO2La? z931egL$nPExDe4W#BU&CvKPNPqE!3%D6v%rLcx8XeA(lu!Jdv zv~dZz7P*0o-vx-qEde88_G0X@KuT!fDhrQ&@Cpb%&_j%3XhQ`NJ`N5rJJE7D+%yyw zNNsBD3P4Tcw0w9I3{z2VVgabI0%d1J{x%8#FIw?UEC4O$LEGO79um!95*0f%`gg0rz#}8t&`J9k{O}$M8T$&f$TMT*Ct$ zxdRV$svd>Bu=e(vfR;q$79Wk&Yb0V;wn%$2xKi zk9Fh@Jl2t8c%ma`@I*(h;E9ghh9^35A3*%4I&uY1b>tR2)segKR7Z~CnU0*pGab2x zXF75Rp6SRjJlBzPc&;PY@LWgkz;hir22dEh(2+w9(1J>nau9!lh=v@D4Wk9rG~^f= z7#Mi?bmdw=iWnFe8uT^f@|Hr(2)Lq;p$DdySo(~Su3SMq#2%0p7mRe}3~CYl8%DZv z6KW9r7e=~r4vh%@7ZAS*!Dlhnm0N(s7cthA6KF=rs~GFbZ9viwvJ)A@+jOt!xr8MM^&cE{#>B>Do;%7MN$_1=K$d@?j${j%BcYw@aijbe< zq$}sJ9Km1Vq${@piN6J8Ka%@SfcQx6KLfHKNgm{8WDEBva3LY;%JuAIVY1Rq%shz--X!%tU^ z;S56E2|r!A03`kmKV3P23kdlqAbBMI4?kVG3+EB?9R9j;6OiOZ{B`9PAejfU8yUmg zQ4pvr=Wq#OPDP-u+yx|lOQ5b?!exZ~gg{-n4@mqOfx2=9R}k{Zc7WJ$dnzI2-HuRQ zxq{mW^(R7g%)F@z+G^$`yP-sNVt7{}I7I5~(Yf@Cm`c z5~(W}@D0I#0J8rJg8w2?SMI`B1pf<2{~H9KB}!M$0m(liQMz&pKM?XNQMz&mkjyuU z(v?g2j*xeW(v@rYiQor-^#4NeW1@8B9w6~^qIBghAemnR(*GNwz5(Q(zX(2ZT!Gjb zF}iXOkmO5ZbmcbuL#S_w(Umj!kKlKJ)H5K;*(ou)asiA8{(=}?xdTZ2H6VE=g!~?m zJQDvzjINvmGeZ6b$bKaLlNepO4=f1zFChI$?qP}5m7BndkQa#6l`BAUpF*szoB|s{ z-XK<2?f??sCRSH2fgK_55vwaFz=7aL#OlgzK;ox>%;!YNmw?oBA^4y$MaDdFx^fP8 z5#c8jrz>Z`jZm){=iEjW>&x4S+0m&orT|n}@2zg|?K&gZ2 zA=FQZ*Ofbf#GezdE9bzEkY5q6E4KlOza?H*&OiVme;{60ZUGYi42XXpVc!i9Ul5`G zNxZI{022R0ysn(W1BCiNAp4N`JPEpT1`iSPG9bPX!aSV>UAY5De47Maxd35=ybDMk ziSLu3E9W4BkdH{vmD_;CPf5^~OAtlK=OpOLJwW1DfaJvx@(mz)Bz_M_UK}Am17tpu z`B>1gLijf$Nmnl5F@j%$#&1Z{m1B@Z*w+E#KS8LUkfbYj0Es^b zWd2ix{F)?PxeZAA_ay1c8Au__JCUR-ryz~sUr5rGyMV+;b~}j8k*q71AcIgZkgO}W z0f{e>tSe_Ai;!1I)|ESe#0QyyjA8ZNgKS;70%e50581kM2D%9Tk8EAJ2WkjDLyoRo z0TQ1D#8*Mc3*_j^8E7K-Dml7xACTmAa&+Z3Xd~oJa&+YmXdw75Il6KSkn{(D%tKP2 zkfST7poLJM15%H~ugKAr3s6VMH-OAX;`ij}$~hp}Hv{B;RfKxvFaoh*;bf8zX+Ou5 z>dG0IAk?Rn>dGbPBlsnyx^fIw2!2bcu3Uowf#6SRmwAfYe(e_&Y%Ak@#oIbmcDCBjm4?>B=#A$* zeYOaGO1ZAw0!IYDq+D0-f)j$@Qm!j!fW)6tt}7RSlpdCV)KFvLA`R0;E3~A%6hm9whglsn?YgNJYrssMnP%NJ8*m zfb2t({{k`(DSZCa>&iVqGGCxUSI!{=pAVkaF`( zr>xUAl4(#R$F+NI#N%0!V!sLcXL+SMC53zoko8E}$GCKLg|*B>tK%UAck^ zg#3XnT{(tI1pflaeMtN#UAl4#RS5YHUAl4~dJ+6TUAl4&EeJkKx2{}4GlI|4tt*#+ z6dp3&x^fLA2zi}uUAY5w2)<3XuG|G=|96ANs}S-LAoE%g{FH88xd&|senB^AJPN_D z0h!l<;CFz`>qPKpfb=89?+TE7144dFx31gx}i)|GQWGVcP&KeY(;H@bD@6p;M$ z0HnSeA^!&C9wa_PkFH!o4MJX`M_2Ac7lN+>;`bok<5(*}8HLrx5%ZvvuVfmLm8IX6woYY(Vf=%+{4# zunNK715&>l!9O!wSMI@71pfxe{u2oP0}y{Eg8v3&{yGHz&um>egR2O>z#Lt<1#1y} znK`<02QDG_8gq2z3^pS826J@f8j$>JF-KQU;T%HV0i++vzaDdR@a%56YWe`JoX z+=uxH`73jDjM-lox=IY8VIE>&&%+-}+*oWX}%+-}E*o)v-%+-~ffF$2BS641z4?=#%TwOVV zMF{?yxw>)(&LH?Z=IY8h97pgE%+-~&%{*PX2T1AJ zW1g;D0#ba2%+r;-Fb`o~%sgGW4M_2u15&>bA>S}hSI%Jxf%visia;36Buw z?pUrX7w{0lKd@X^Zo*>({|rd}1A>2JxvreRM+E=Ha$UI%Nc=C$b>$eIAmsmm>_g&% z+=7fVR)YHf2=yf^b>$qMBKQp;c_e-hNd6f@e$Gl=xe1>U{530eX)q6mD_;C->_O&PT?0qe#dHExd}*okROooi#57(3;rO~ ze_5j|m+%U~|FcF{?gA2DWUa28!E1!P%357Hg*OPk$y!~x1xWJ9c7fOv7U+TJ$Mis( z(ERdCf=dfP7jCAe!1ozCIDpi_(&L0(x^fAsTJU)=kQ_3Gsgv2OE61RTP^Yn1S1v&t z!AI5uV#DhE0Am1{uazW~WcA>=Sf;{O2o2Z_&eSy#>>8lhg`vaVb~GJ-F28PvZ<@HH;$ z$|a;A_$HTiP`~7guG|JB{tl4+Nb!xF2SIFD{(Eyn zSI!{^Va}Hupm7icpXH{m+=YAup9jRxMer4F>dJj6MDTS$d?fR1ZtBW8Kj1nYZ3Y?0ui8WHL*fYc-LAKccJD`-H-gY+O{Sh~}> zrz@AxhEQj7Pgky?9l`gwrz;oGf#3(+)0KOG#E-eBD_78okk7fNEB673k8CH14YOC_ zp|0G5UW7i4hq`hXCLs7GXnY5d`fh}L07$+M!B2RoE9Zd3&v~dTm(Y)puX(5|XMkiM z$Suei<}Q=hx^e&iK-LGS}!>&hh{@l#&w%6(XZkS}?yD;I#oZ+WdN$FK|` zKLsR@#9#7SSMC53f5&UkxB)`_8IbxF2>zYdx^fN65qxAnfY>m9T=}Xix8Wp0-IK4n zat0?5{10Ds7*_nym16|0 zGh|?3*z!YHj){SRL56{W;lK~b*s=-(1H&1p8Vv>phC5KU1p@=a8z|cYWa>|dIS~vD z3?e@vdJ7mB7!;uF5(Wka11P(Kfq}sS%C2ExU~qu48yFZEe4y+O1_p)*D7%M&fguIT zp1{DsPyn@S3TRCvRD1~o1H*)$5Pz)zxd#cq`K2o-a1{|g48L{d79jBje(TC9+(5`H z{MMB-xQ5^x{MMCAc!uEH{MMCYK;nCV%tKNi0n&dRp*{s9kHjzdtt)o`Nk5WP!OV_- zx^fThA@tAqrz;om0Ks4JPgkx0Nq);eT{(m22>Ap5bmbPjLhvtu^uIvx@BGu1Q+SEs zzxbysx8W{=|K*>q+y^9ihX1;90!Z=#|8?a8ZX?vo{MVIxa38_f0jWoFp9M%glDx}* zUAY5D?ge`qiCDv=Cui^$VcrfVJ-H7^{39U#JB0iNkope@{v9Sgxdll47a;kM2>Bl% z{Yc@-!K^2@0ZCqjSx-*k6GFWTNFIrA!mKA3@EIZR!mKBE0Er*KtS8s-1tFintS9#Y ziJ!x)C%51$LcWAqPfp+)g5LnL4~ahkWZ!p$`~r~r9|-;iW<9wHNc;mJ`JV{+3m|zU z{tJ-&FNFLLkUSEfg+))!;5R~EghfwI;SYkZ!lEZ9@E5^1V9}G?fW$|NN-)!hRZmXg z5kh?gtDaoIKLkIARZs2!l6(!To}2?xc?UKGiGY=p9uj(T6O^>UHe2^Yw3^NzD7Yar*1Z&GJkd6&sN33(1p{ggh0g1msRZnihNre0!RXw>2Nb6$GsOrfj zAdNdc0GVH;0}r1Ms(Nw{7!mffsOialIEdhjsOiZ)KpLM_P}7quK$`zBQPY!aU_`{5 zi<+L?0W}0aL`_d_0W*T1qoyaffepcLP}7qOScTwEQPY!4P(q9&El|^wGx&tyZ&A~e zbNGtjpHS12yKofY-WwqED-iyB0fAkRgS=9C9J{(5q7g5)fyO4*FS5eoK zdvF9HZvx^^M##IU>&Ye9A>1FLt|upe#7_X37l4q@QP-23fV8fz0c0Lhdw+_$o?Jma zLj4AHJvoLZ1pf%gKBRW#6_7j<{{hJS5QO`_faK>R(uaVCo}5D`g0G^XC$|A<-JOMo zp4^4W2>U!h>KPFJkI>MQOOQaAp97M&La46*nTM2*J2dpd6(bBjR5|Q%~*!l6nJ>d;&th zgQlLGK^TG`qNyh*P>#@_ps6Rf0f}FrsVB#Pq`yW}Pi{gfLVb^>p4a#x0OWq8^5X-@{xXF9e?aCV@ddQ>koapr_9OXk56CdporCHTatDyon~jd1oC8vP2I%O?O+Yd~K}SzcAqin$j*gz(2Bh$*0hy2F zz6l^cQg|!@={G~@-vKfoiGK#99?ASGAU;xh1l5_y7}O6z<_|SCto_i?sSTd*0J(nx z5*x%v#x8Dpaz1W)av^Sdaxrdtaw%?layf2#awTqhat&^Ja#P$O^CmEJH~8tvC2T{4 z_W?gWIffkw{uw_#xd$r|{5yVnas^2IHz4^{2>CyLdU6w1BltZ2dU6J95PS)LJ-G!) zd>wy1If1nZc?W+zIfeBIegKHS0l`Q1D~PQVpeLuW5h3pqpeI*=Aq% z`dtWqL4cmz1SEb`#^3) z#u9;gavPBBLzV-v6@v8S7VJitrxTw+PacQ$UjU2-1_gfMi}ske*z_7KHi~ z5Pu(nUjR~n0Ko^@iHtvh%-@P6AFL<$0ZBbiu%4U)Qu_{BFNoa}tS5H>N&lQ+J-GxV z^(%t)1w8U7^L{wy`atHv(zj0;B)wO(>d8&uMbvX0t$K0+d5e!dU6Wx2>BDOdU6T;2>zW`J-H7^{4cF~at{m<@+@t7ata&> zzDS#%oBo?e zdA107mUcZk1uq1jr(I8OffRx-)2=6XK^(!?XxEcFAc^2xwCl-jkU;P~+V$i<$RhYL z?Rs(o(g=PENIeq2pj}U{Kn5Y-(5@$EfTVu{$UFsv{G4_@xd253e+|fdB?Ny@JE)(C z;GbyMlVeau@UMXEL*hRH@#PWnKS1^)*~inNC$~WkA+OM(C-(qJzd;A6--(d7>Cls# z;ECXSbm++ms3Q0=9eQ#HkoY+rdU6hG2>BY2eisD417tr7fP=D_2f2qAk;^IF643K%w2!2JUp4f^?dU6Iq2ziw*P&*UBH|WxnJAfqb(4{B$0I56+>C%&% zV1Q7c(xoSN!4bhP>C%%6a6<4Ky7c54kjjS%Aih6BenFR>+y;FFe+|fdO9cM}$b1U~ z|4Nsh9D@mh|D;P#&cOk}{{b@J9Kq-4)|2~Sgy2hb>&X?^A^0lYdU63s<%tPMJ(9db zx1L;rJwm-lx1QVuB>Muo_2d>HxhJMuPfoxLp+2WuPtL#;!LRAolRMyx;CFQE$!$PV zKL_L%4I){|2}%6~gR@>U4_C%X0I9w70rfYf^;NJ8+xfb^#z_$(9klXECQ@KvVj$uSfn_y$w;A!bCWZ!(yay9Q11o3^7ZXDR8v_GF05d}aCy39& z(7?mMz;J?vp@9#yUX7KZL4bjQ;R7o}!v_Wi1`alchL51NWo!(f4PuV~J41sY z0|SEwJ41sIXssGMLxV7AZ5lg6g9vCX8aqRSC<6mS2RlQ97y|>t0(OQ5aRvs49qbGZ z5)2Fs7uXpZBpDbOUa&JXNP%3(!O$Shz`!8E!O#F&XJ^2{&>+jez~I5b&;Xh=O5k8< zkY`|EsNi5|PyqR#gP}nYHIRoV;;KR6j0YPA^{1h^O)+O!!MG`JWVI<*-X9Jm-7CfPACL~t=Q z2vssL6mT&#h*UB#ba0`Y#}1DF1zeE$-@yfm{|j7@_B1Gc>S+;*}fI z98mi3;AUt5xi5j6p`lWnfuVvM;?4=&3=P%V3=Au{A?`iE&CoDGn}Oj5hB;ykOl%Ac zAGjGBnzb1iICvNuTD2J%6nGdKy0sY?EO;0idbAlB0(cl2dbJrCGI$soCTcT)5>3No zZ3c!JJPZv}v>6yS@GvyY&}Lvb!Nbt7%8G&E0S`mNYAXhYA3O{V2dx+w1b7)54p}iU zXz(&L9JXR$aNuQVIAX=X5W&mPaMX%{p@5g6;g}TzLkBNILysK;!vbE02F3~oh8?^N z4NMgb3>SDA8kj2>7+&zAhl3i!Z%}&TV`$jH#K0iI$I!5xnSsH8kD*~TGXsMMA49_$ zW(I}?K8A+1%nS?_d<+dQnHd-+@G&$naxyTi;A3cD;$&brz{k+Q%*nuTgO8!%C?^BM z2ar4;0|N&?LxUh61A_uTLxT_>1A_%WLxV6M1495mLxTt(149NsLxU(E11PgJi19Hn z%;0BeDCA>c*uc-w(8$NYaDtzqp_z|?;Q>EG!$&>_h9CS44WIZJ7z6|u8W{N*7&HVJ z8kqPQ7#su`8kqSR7$O818d&)m7zzX!8o2lw7&-(P8U*+Ik!0b3L+rD;XFJL>L;BDj66&L>L;BD;XFPM9{;99ULwdB9L&IAOZ=O6(S4` zHQEde2SlLZBf`*7r_I3dL4={99+ZDX(am85=XV7Rab^ZkKC%#nr2ha>NczvfP{#yz zM}sKDz8M(uj0~JC3=A7Ug)b-{K-V)fFhIl);1IunL;L{_@eeq}89;?S7JCJ7h%4X_ zH^3q8fI~b0hj;=G@d6y;;K~Y%`zPQ~zW|5$1{~rCaEM>PA^re|_y-)~44_IDi~9v| zh%4X_H^3q8fI~b0hj;=G@d6y;;6?%#_fNo~egO{g4LHOP;1IunL;L{_@eeq}89KEV;-+)8>01ojBIK&^| z5dVNfoB`aJhj;+e-+;;umm;KfodW0f#sPXpjtx`vq`_E8q|} zz#;B{Lp%V7cmfXb0vzJtK|VD1gSZoLs9%6Xd;<>g131Jl;1GWx&%p3OpM$}Kk%8d} zq(Q@=V#vX;g#p38VTdZvV~i?)z!+8jiwUay3R6`1J7%cz6U|C;_xqgUU|5Ib zzCUL;7+R3bZ#c)n;Di)EM=o(NoI)~h!etJIASCrqu5d71LXzKcm4m?pNuJ?42g4C0 z`6Jgk81^CYTW)YLOhZyHbBlu^2g!XMcQ_b?kmTpw(3z2SWgoyw4L3hBruji>Ijm?Rmz*0GgA5mA5;daWJ?cnaA*g zgJBC&_-%Q^!N7#%pB?Ww82pg<93MFtVvy`h`N+ZGg~Z?Rk%J)*Nxi}s4hGP93NZUO zeBodyK}tU=KR6g%kkn`V;$TQZa^IQX91ORR%wO?`gTW1n|KSg6d>;AB!2mkf0cM}i zKMsZ;NandPa5Ahz(*K2llc5QTU%|+U5?)IfIT9=6!WKcok$FOjs_f4K8rl6 zyaXCw2aWH5#t%W`XQ1(G(D)P3_)F0EJJ9%N(D)C~_+QZY915uZkwN1dpz&SM_z`IQ z95jA|0w=>8r1Y4hjGF#7D04E@BBeJ26;$~W6;71;VT}rE{4+5yF@WZrLG#w2105kV zKn$Rv8Bo&}1ONa3A43d70Cdod0cfI~fq@}`fq~%xXcC-(LGSW_Wwut z*#94pWBz|Yp7H+y#)kg~7!TARV0>VIfbjzaGd!?Az`$UCK!KtDKmo)513wu5AN<4o z|M36+|BwIw|NlJ9&j0`agTe?DW+1nL!VSa+xe>mY0mMPVpfF=^U|?YR!NAaRf`Q?r z2Lr>(3I>Kr9t;f4Cm0wSQWzK-E-^4PYBDf1TQV@TGBPl9G%+wts9|7O00}yVAN33j zKiC-42Plq_ z@D1tz|2qUhas2-u14I3P1_lTpB#y3@fYIc{Gss)W-jvo?>|@$tcC?t1~lNTGhne!AQ~Xj|Nj5~|EK={{~z}M|9=3*w>>C+v0`L3 zU_Btc5L2*{vpe@-P}C2ErgUAPmw2(o5BN zhFJ!q8UHXaFoFgMLAMgSFfcGIVPIekVPHt=VPFVlU;uZxK*FGojUxjCLp@9*ei}>A zV;B0z{Qo})|7V6a&Om(S|NrL{|Nr0d|Ns9+s4$3b`2YVu2xB)1MHIj5hL$Wl13SrW z4P+lO{$OBW1TCHgb=Er=7#K4c7>s5xFo4#Hg8Gvn3~D0UBWZ$_Um*G)I|Bm<|7T}l z0AUdOOgaO@f&UB)2ca0m24RqT5TE+`E%fFxQV zX&aQrk^F{>iIRZuaX@Jhgh6Q%)Sm#+ptK4~v;UO;|3^v7p!5t%+xQHG$l-F=P!wmQ zFwNF6Fo4HWK(PqIQ49Lq)Li}p>ciVJFnj>@ z?c^C4Kzwuzllx&0kq7CcS(-(UR0R$Oh5!);hWVdBEqpKy=7Yr1)e_(nNK)9P?|=XQ zzyC3~m+=qOp9A$aKzxumb{#lH2{>;^NwbqN4uS4L2?GWO4Gjhc|0j^mJRlmx2Z^Jr z1@S>?78yT3&%ki}I0Iw@2xuIG8NvsNBdde4X_jWuGosoF28N(13=H$2X?ETx2p=Sl zo)JMF!-H`qCS(avc?l{{Vddxz^Z);Ql2Owvhz}Bn_FsuDXUXZefcluAz9y*83F>=- z#*{!~OQ10(P(K5NL2Qs1NDib1q!y$Hq!-l31ob~aeNIqc1T@wF8e0PCg9R0c4H5&% zfz*K1g7kp&g4BSF!)YjU|6cbz-aq~0W>BJqCtGH zI7t3P0|UcR1_s6^1_qG3nHd-uoEaFvbE#zv3=E*QMEwB2loH}Z^-}uU*h=xe+pDhv!NE({D3&~XYT76t|u76t|m76$M_D9~7}{U4Anf*4Oop-Mgf|NsBt&;S27 zKK}o|@$mouhnxTZe-0g^_{04F{}1N>|35JQ|Nnp)G8PLOQ$;laD^G-$VFp?SVW7gm zpy9;8pyI^9prpdUpa>eP2BkR%1_lKMNF4y`i_jv>{y+c!|NP8 z(iVz-Z%12wfZbqR^ZU3;VNjD5w{M^_20RQ50bC3W6F3mUZ4=iNZK^VjaiGk!mYW~~*LDZd~`A9rrMsYgB zk``$#gcRktneV^<{}0M%$a$2n!2So1fjkKR;VZDm$de#FxJ`u144W_m-(bFlsR5}2v0>sMH6XPhJs`axGtkw*)c*hfe^`eZ$e;WF{s-kdQ2zU4 zS7ZOf#zr25L2Qs1NbWyK4M;7KVa7?zK02OE3YxEF=VM^tVP;_9U}RvBU~FIzV1Qr{ z8zcsj1E~S2MK%iLJ<>5~6(guE!T?C&%1?C6PT1bfmXmcLa1ml1<$DlN5s0V~WYCvj1`u_i6 zVEF%of#F9X1H%Jm28ILd3=Hk<3=I9p85rarqhgR4NbUe={hT}lcfN1VO_8nLVOtf@(v_MpV?FX3;8pQ>A`Sw{&=Tw15Rbs{}qY7#kaW zadG(o@?u3hJIGm}6TUcl&YV$##tVu&xS0)@jg2{w!UNM*}F9J387S1|l-9i%UgEM>`~OfD>UyM+Yc<{Qu9;0V)p}7$EKdhZN|9!Ve4_ z?P+D!yW2tT;AQ{^2>*X@VF@Xu7&u_@(g9AW4bboac?1*{V7k4d0_0$5`T)BSnP}hu zscQJ*4~mYC24j#~h&#aH0V-8ML0rLMz1tY#jt*{yjt-DJz{wC~Rs+->44^OohX}~L zjs|d)cR<3SqrC$ZW{BVbX+**e5O4qg&ku^w24jN{{LBz{fFq}apMe1+(_YcMd-v}4 zjt=e(44?uPz0zs9~VE0hK@C0EMJ%Q2h;cB~%eX3hE9}r3Fz7 zjt-DD5QD%rfMuGEjX^XxJA&F5pppZ0yd5L7eWAe$(uEDvpnU;%35Y=j4E842>!37; zR6jRBf&pO#SS6%jg-Ai;9TII|Sy1H;3Wtu44$vMDXlh~LXF#fNIU1m?8L$qJdEjyr zWDg`g!{njng6gji9S!WD`T|s{7BIkaCAi*#Hz+t7ptTPuM|}X5*dG`epexEi>9qrD zZUZO}feVKJ|37pzd?;rqFE2oGFF(k=AcuiHh%gsq9>`pfdtvo0$k`x=Hguqw`yc9H zP&hC!fO2LB*uCKN3ewfU0CF!V5J2XE%>BRsu17&R4HUo)pcsIZ9*}|z?B4$$Kmk$E z0X81w@D5PU1vvriT98U`{`mj@1H!!^CMaIO%_fMspeP4h01aPI!xogn!R}>;xEE3n zf}99;56BWwu?cf8w4MXkZ(w^tMH?tnqM8eGc1H(0*oXq8dJPo9pnw49eNZ_KT5|vj z2e1)f=R%53PJq7YV$UO-6@`F7N3RqCN`u_tcp*3)D zfTIi)Y#;_K96(71lzyS^{lE`NFCdrlgG_{!x*+$0>lKhM7&OTg%w=f!z|R12AvgrU8o@@v%KeT8kdHXPsRpc{1JtMoxeQ@0%vm6VAm%op zl=C2!9UUA{b0MlBOXWL2g$O8qIzY7zC|E&h0_0>+1cF=xaxW+>K=BJY^A=J5f@DA# zVlF})6nbFKfRZP;)@1;j4yrpiK;P^Ke* z1v|>iCE#jGpez^-<$^re(GKNcr9i7#K$*LsQ3Az0cZli|C|zC-QdAB$s+|QQS6*HY z(#^mC<`#ezloymklok|9veCX?Iq=Wb?gPtAHe*(n;n~Z zjWF*rFtEcy%^jiz z=7GEhqQMR>2X%PC;nyeuGOv!kp!@+SLUvbIR~MAS%qu8oC@3f>C@&~y5G-$$XfFqa z8|gJAorDn!>_ziumzMZK#8NEyd3O6_VRLA`UANOqzyvD;uB;Z z%ph3!fmF3Kuy+W8%qwRHaY1H+iv&>2fCS3H?gQxrnO6>W7l;Ql7sQ5QaIR`EFNee% zD9u78&?p9I#skwOE|83d;&kLb+GTz3GC$}s7wTvjrhvNGXwx=6pev_=M2O~0*cR^IYVppU>895S~D;( z@IdTi;DK7q0HY7=00Eve+}+*X-3>5zA=E?s1M?TpnFBLHfaeS+h?+oz`c)vnbA}5< zEdaX;tO?BG0h5>n1GoqT#WoL!C@(MPIRjx7z~}=Y_jdD~;Q%>*!x@NsX3pdRyKCl5 z9tM#6W==Q*qtV?BcF(F+JTRI8VSAouLp&QlGg z&(wn)x}5<=9{?Q=v;z^|F!#b}MlfT-83rhQU?u|t!%ReY!`us_nZS$%XBeRL0np(v ztFX8moB(hHILO@~XLh&qR72_GKR_PXPynL|g*U|AGkGBHp2 z0)pWUy2t`lsDQd3pz?`O`UY+ELspNLz7H@k@W8_x)wKv7$lai1ffU}5;sn%S0kOCX z2!=PPnItH1hT#LKpTdAq4uZ2EQhCAz8lF~CK&Xc#7kD{%AT5oj=D^(x2YAjfoWYk) z(83#%uDc74|K{ia|DPKi-aGJ>CvbOz0ukhH28NmV$`iP|q3TyLFswoHl{gP$PhWft?3bj{N`szu@=}P!EP59NrBKkn$UpTfnw4Fo3cKh+f#(b;eJ@~ul!GAk2h!5m%M0#a;5l%BfrkM{fHN>K zfXct}^71p)-TmDE|9?0G3h(dbv94{{i>x0tZYU|7y zkQX5i151Jk@c1c+fr9a>|9}~QIMp9Ga|UOCGk{VQ%vw;y!PvymAR95=fmuC_kdxhoKLxo;h>o z4A%l!azkpDkm5&>T2L(sYKOyUSUVg>qt~A>e}bE_B(%$6{zR`&VeN7l4JzM}>m^iw zBHE20x08aw?JuPE4XoV`qtV+ppspM!c+vd{X%FLW$HVlY`xDYG#@n7h0J0B~^4~px zq%)o~r1%k}7QOums-Ji4z}?;l#V06#V)rNRc0VXSLHe-!6L0&U3#1R^Pvm|8$nB(H z^!NnT=iS}7`v*Av32ATR>?h##C#2oY18sNnVCgTw{RwZ!@|>YKKEeLR)1M&VPn`V< z0{+C;zd-mC6sb^5N?d}}g8hY*KOy}N-2D%bKSAX!M!F@?4*~fTRNi8wTLS$NSUCi0 z|G?w(4CV0&DR*)ASI(SaIIx=m(q5a1RNjKx(V!+Ou6_$h-%JKbyKNN-{TGnFRSaj& z!1@EQehes%NWtjw3CW+h`!{C}Y~TS^pqTLq>ga&_XW$y~45%NEQhy$pzyqp4G2;`| z;Q{s2p!(4IJ7*3o-~m;jFn_}OJ*4;%q!ye`N$3xO{CQvlY}}3be$kl&6L=0xz|=>m ze+2U9fdxFE_(bU^f!t0CCbj=`=D=kRj9Q2smvYTSVwMr^+eG_nb*2np!}`4g%C z1RhJPuU*pqT?!05xRh%$bn+6fhs+9B`wZ6Dq+ub3!)*14B2+9IzUMdqCr%Am`2G zoB;A5WPSsrX2J%r>ItBfb71Do2_T1TfKWR)XHEb)2VxUQF?h5L#F#LXfnmbT37iP` zK+FL4|fA{#30N8McGV3X^90bv&>(dn z-CzfR7*O|snBZlFplCpgFHiyl2@@~}qzvSonG<&J28Yi~u!9f@2xJE?JOQi|O%^nd z1QLRT5GX`Ic7VzQ(B0OcDN|T^0J=W_B!`K~FAu;=VnBupo?Na@^JOAr7;j!f!qx`{||JJHq703AW~RJ?Cu85`GV$t@y+{!tVhP6 z1=s*_x|AFC0dwY3DJCYs$|1*H>tw0s~01_)l6$7~i63mdbOGq98nFk6(#91DY z#YEtX(XoUecmoMY6B&C*uo<^%F=#atT!z_r)v5(tt3Z=GV6j!J78@HcHa0c}^FUJ& zkoDEZ23%l$##T^1RLQDU#>NK5#>SvU_n^(qT&utw0|sLQW)PnlWEhA6y3QMv^}q_C zhED)x31g565CKS`2yy|0&oC3@FlH-bW2gz7v#eGzFmNq~J8vcfNWcot=bXS`wSZyO zVyK42ix)F+Suq$x`Jg_?0tTxEFnO-Uix;n2z-7e+wE*Oa#j6-rEr9Wv4UCN!uLAMG z4g$%81Qx*TgM@_@Gt@c;@TL%B12`A#X=EP5ZtmSEmHr;?GkE#v>KPaqU{M2c5{hMD zAq4RsbgVsNGi=LK`VR&MX3+7TKNuJo{xC2x{9$01xW^#>C%%FIU&90T{|5}1{~zFC z{C|Lr@&5rPhW`!V3<}+v1ZIOy`eFRvz`*?f00aB~4-BCFUyyxWpuJr%4Boo${{KH| z>3lx}!+r(^hW+~?6vKWH6TDA~P+5WSF+LW!Bn0I|s3J(uzP!8wl)FHO6oE>Y|NsAk zivh?Ar1J9r|Nno7$iuaRvpP(^94-%8?1SLrP+t!-59A8=@^Uag4GI!Kn%Wx}>Y$)3 zp}ZWV{y7Xl`Fv3Mx-yOqP!YurlYhouUJr6FOujAw!iUK}PXMcDKp4PY4pNV70EiEF zL0tmKd+DVEBIkHwN{8Ko-C-h!4V` z)8#=JG(8T&pgaP?pc7R<_#XoU0|%log3>ssUIb?| zumzyqfFK^|XfV*mdXON@#|V0~JRdF3A?b9mmFHAW=PN;NXn4A3wghoujcEo3uq;Rj z)TDs4xIvY(<;LA?Y9 zt5skH5dH*ky9K1c0Ax7lOmMpeqyWlawF=a3nK^SNln-gQfV)KuAoD@35{6X^WGT!1h%J|IC1Q_aA@Yyh0Q=_#1?GLT6PQ;mU|?Ph<1@@;U|z+*wF=7Tva&K@SiFGQ3d#q~dNVMug3GV6 zva(vmuy_GXzp=5gmDK{SRm@QJ2FA?BR#vOvd{DXr3BcqbO>E-@aQ8q2n2i~r?gbs} z$PCKDFh2K&-5WsN133S{o&$LKXzD@N9wDn|Fa{eBwht1L2of};fWQn4<>&wWKmY&C zpEGC99Iq*7U}#53o~Qv`s)W#rjRlIh2Mi4C2N)Qbp(ovePPJidU}s=#Vr*b+Vn|?Y zVlZHAVi16cLyj!PV1te_ZEj#V*nEKfVDkZfRQy2xAd1;gGeC9^XuAbmV#7mav^-zH zWd$j0K}9yGv>q+bA!YjDD9=G{b5I){)FOxUh>2^T!&5l94CE0Muo+ySAr>$TN+6A( zKtzy6P{2bwNFyj*pyC;M1jPz%1cljPkdL5raCCrL8W5j?cI=VJCusx)ZVOQiP??H> z4>11!|A6uT{~rwh|M4-@|6yjZ|HE)V{trWf{2vAde&`iIpgrm^EdPOlLH-8=NFC@t zGRFV^8(`=AfzJ4Y;sf^o|387uZo}*ZIZ}W@jlqo}lOcy86~tv=c&NtU$B@cU&cMmw z%uvEm#E`?F&EN-?V|=K_;LlLNkjjw9pa+J?YCz`+FfcGbRAUHcNMtBuNJTLr7;FN| zLztWbgBpV)LowJCJ+K^vV1KB_5WrBxkjaq8Py&@jwgocg&G`_aMggool|hZ6j3E>3 za*#=E4+9v~;N~bW1T&;ElrWSs6hO@csR3a|27!k`45Q0ct@z?Lsteh zh6;vEh7yn#Fb0hWFfaswPHtqNb{MiuP-F06$Y)4qNMtBsNQJr>ITU=rZeW<8#t_6% ziZwQZ7(jO~sxi1Qq%tHilrp4)b*!^eV{m84XW(RTV=x7a^x6f3?I>UX#Rw?WL2`x+ zhG5w>R>-pX45bVuV7-P6pe7IlLzf*Wwo4fD844IU8G;!y7%~~s7)ltlq2@O*wAh6( z5*c!!zG0gXz<^Mp2DMXx0hH>~7(i|UKA+bFC@-8zto#%q{ zbrH1eMlQ2F!5$Z!;0#Vh$qZ@?**HTAbi)EzIp_k=L0%(pf@2+0=9xfCT~~$_cx|Em zP>mrJT#|swT|}Jx}16$$e`XdvRDGeaqZ8o2C5=#K!aPy(lA zQ2ASl5}J?@R0W4!B118_j7K&<46Iw>A*4hD)&8KGh7(+02U{Z(0T}}+d)16m8>8aKyo3d^x~d?E|&z(_sI;|(3l$RwE+VI z*91_R4Jt)IF;vV@01ZQs=T#?wYL*me+Xd8G$b{AdY7FTNr3{%2AUQ}GtpRQ=WHO{P zWH5l*IiNI`&HyU4K(#(7y+Ya>`3yxMqZ#BTs4=*L)2%K;K0_LVE<+A9CKMQQ!L?#G zxb}dUzTFCvPAV8c=7L&Lp!x{ZUTR>#U7vw!U`WjXO8<~L&Pm49Q^MgIqLRYD$pbL7@c7VW2b);#1m2C$@b#T2F#P zo7!#M!B7b9%1{Ze41~Od%+%E+6P(W>@5(Zs7wkb|<2D=ww7pQHO2<_ou*N<#_ z1B1#0Q12Si_XoA-3c&4%RB-=+eh8-nl{Afdi70|Rk&=wKg9M6VG+(wG%)Z@K#X`pS{R^O zP=TQcJZ_%{uC3D<6u>=KNMAR=@c;wp(oqHmF$NU|6NZNjQ$WTu_%c*7fW}l|b0Z84 z9MG{~&^@FK3{2pu5f%m(1`P%d23MB<|C_)wBcR?rXyl-X!3t~+h=8coVPIjXU=U(( z0ILmVsDzFavz-ko1YJ$PzMWFsJXiNt(rh%^B z5v*PbtR6H9o(LWV0QLPrDw&|+A;A#9Ai==N;0X33XpEwWA)g@^9u`atjbQst7y=li z7OSpNS9-DiqyMi4^)g8&03gA>#YP^$(OmN5Nk41Qq!jY#?tagxGd1R9+K>qnls zQey~YfQ;3H@_HrIRm=>F!EQ2VNMZ2z~PAOHb^=JjXS7;=Wf83Gr;uC zWGG~CX5e8E1nWbz6hSFXfdRxXU{Hg)2c(k`YTqgb76u~*J_bexP}=cl@CHeOF(j?5 zVh{z(GlAuu!Lu2lxe3IWBut$qSRDh{e$adkw)s7nT5qsgKB!vc(g+bpEeyI09H47; z|2KhWQPLSexf3+c0UC#b&Begty#bzXn!sWEi5Zq|0vthp1A7T{ZWhCd1{MY-1~G;w z(0t^`fPIFf99$NFay96x5MPF12GFb}C_jPblR)E`pq!ruGZ>_ZfjM9YLmY!DI6OgX zej6B&LlmNvDS(|JfuV{)fZ>`INKF%iBZC6C{apkuQ9$z`pxy{fte63k-xR>50mx2> zENG4iRIY)jIQHVk^1~fCoF&HrLG0XwGvw^__oKry~l%U=btW*J)kKkp3puJEG42KyY zGYbI>kP-kCYOu5b3Qa;G3CT~OyUyhpIHB(F>JO1rEgH~0hMA3;IYeG=xh@wv>df!5NEJu;9}SgR*PExg2p;w z>S1Y=ok0_v=Rx!LP2hR^e1?4R$UZhVYJlB16RR67z;4_HwwI6_Ex>Nv16GUMjf@P8 z;4*7611p0TI6Z>=kDMA|^5S55?D-oJw~#d(jEwWZX#^A+CD2lcg8^TR9ue3Gb_Xj1 z7sFSE3Wfzp{%2rd1YgD7!_W>c53sv|fdS^16Hs-a{EWz10ges~2f%iKoyM?}AqK)= z!0$4U-%f#-4M2|Pe+!*scVWl`_sT)DMuu7jZE$`B2O4PIB{YrkFz_%~GjK562d7C;djhmBAs^a`0?j~z z@*Jop0y}_#8LH2Vfrr72fs^3@SRZJ$0%+bHG^znA;X!Q@P$>@@SApn*0V>5obNryS0SpYxjEdki;mIJyV9ub*@W={LXT$u|!NACn%McAVrvY5Y z6frN;)$I>kD-=94;oLHZh)mH9tI1BSOyM;XW;bY%8IX{^nt*MaiR1;91gau)86l2x<>Q z@~ACCHG?68Cc`D9Jc>wvh73vYb^vHKO%VfZo>PHA1Kf7YXUK-nfP!)^sI`&Ipb2se zydBWTV9j8}z|C+K>=%#^V6&!>91l{=2`!iU7`zyg7`Pd(A*odZuSf#TQ-gdBT2TWU zzXj<+l#v|_@eH}}_zPly&F$(kfXZA@NQ3Om2e)ECIuUs%9h`SwW6e8h;QV`o#JmGb z4}A<74Au4DR4ra!~pPjbST*S2DuV5-5cbs+l0^jGcjx z!IOapoM)OCf*CRys=#yTpc!%n@Y*&|Zw0h=5wS)JlAl3qFu)FBfW<>N1E^-Hai>1%o;RFT)(L9iVkVpxzEB-9lEHfIjj&AUi`kgCo4XgS>hWRE~p2PeAKG5akgpjzSqy8D=r?Ff2q$ z&#<`O3vI7L;@X!XAKU{4wY@-Va-r5k)5TtB+Z7Ur$Z8>>mIqS~SMLaJ>q6oOGP4R< zO9D~|DPQ(71cKGv0mq9ALn;GgR0GyZgq0aWAT10Gj8$Md1RQUm7yzYAP`wonUgHYV zg}f36f2_drBq)AAF*t(D4p^HO7Up~m91L0vykI#{8xvwPsILtvVL;A-g|ja zgAqe80}lhF4F<~H{NcVYLH0>&yYggHiFb0B>r zggKy=ASfL}>MMLJx)ALQb_QpLPYed&wAsJ_NtwFP5sh4EX$2eq;A8M%sAAw@cnbEb z3wS*iC{~KWE0jU?2goO&Hb5Q&Xru{LCV|`pQUj8~j5$ce!NyGZ7$O)l8F(3FObNNq^)xPS-9wUDukB@7854g+Fb3e=;*Us5nIa5_NR8C(op;C9qjus=b& zE?{jH(5wU4U=2 z0|#_W!xKD02Ab0Vxf$#Y==d8ugBVyHWPAgm4irzQ>Ol242LoiR1ECJG`W37)07SAg zn1Rh(2_6$cr~|Eb0Q6= z9~%Q7gDL|D!+x+mpmmX;as*i?WRw~fRz?gw42BFm3|o-G5jKvL51udL$1)xdDZBC+ z#2GXg_!zK{BZ1p4U_Y^e0)XKWbe{<*tr9n02Xn_N23BzWjB7k=6@w&L9=kh0mP6dT zia{5w4${tW0{2Hj;R)&qBjO*X7Se8*3(gCuY7uDwrZyC8E~Jftsuq?G)S+_%%nZy7 z3mD?yZLbh;zaW(XRtiJfUNBLJt6*sZQg%FIhy{5Gyi&8Y<_D=UAuR_)JItIx9BdYHS&A@A2W%Fo zKL~1Hf?B|kePNLC2*}6~qJA@H&}8UgutuuiKnW6(7tVsinTG+AZ`2q-Gu)t&R8UI@ z(Q`wLqn`zbJMMTn%b-iBi~%>7c|lHK_|H%ara|LhMc{THXq7pkx`>%^A-IfgVqj&c zVDMmAYW4qrGuRwNJEw`kkD&rSo`PyVNGT^Yz49|eGMF=PLC1DLqhzpE?}#y6ka|SB zAK6?`$RlRfLFocCng#L$NDr*PXNC%q_i9_t>!`yO&A(g>^fr|lB_F-2GYj?IW zq=LuhA>#%RwXjtLpb-&}YhZq5W`MM%+8DwZj8NKAh;(=eD)$6wtPWvU0obnF;PM;Y zt|SJ1Xl(@Z$6j#KqE+?{Eu%I3X!H*8JHNV z804XCXF_98Ab&&Rhlhcap@@MSI{xAT-N~T<9?L^^38c-dz>o)SY3nk$GlVjDGJw{3 z7BE2C5XfeVFnBX?GeE)%w6hbGPC#lw?T=K33h*viQ27SwGeOFi0LLTH^(d?ioD5P7 z+Zo(Ii4VF<7&#8Q8#O1g`c$C%BBk)lLC97!t0X4BB9G+#Z7FCn58^u-%kL7!H8T87>Ak z1|f#64B;Scpv!;ZGme-(gw5nBNU5#>uk&DKw?Bh0Lp%cq!%2q!@Hslz`W7|@c_gzC?Q=*A5aa=fo&F5+U^C8O zHA5T449J{6XpEzX0pS{$Ioe=zPGL329K{?+34|~K;U9Cb8K;rVfaOs)24`^mU~lII zIJz(}fah>QV<`*_UW@`DFA|6&nAuDWOyDw)Y6Gpn zf~+$DsRCh0x{8CUX9lYWnG70XDg&?B!lu3ls-6+79%K#(L(JL*m170VMKOS8`9b{` z$Y=~m9SB3zzJRJ_!%*uFZu^2%!u&7B2=PAySS@JHP!7@_*Z@Z*2FQ9FP+0;h5kMoc zAi4nD?g5PefyzEe83fuh0vhRn^pGKPp!p*`24%8L0rmS4wPG=}?Fex_CJ9-?iY(5_ zfIK1u8DsTg;9>}7K(xWQP}HEd=+Nar^P-@904fbZ<9`|qS`2y&1q_u8nhab}7OEa% zZ7QI^RmgULW}~pVDTKk5A%Y{EA(XI�RKefSpDFN?VXI71X$tU_jn) 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 b(GVC7fzc2c4S~@R7!85Z5Eu=C0SW;Coa;Ln literal 0 HcmV?d00001 diff --git a/thirdparty/python25/Lib/site-packages/pythonwin/win32uiole.pyd b/thirdparty/python25/Lib/site-packages/pythonwin/win32uiole.pyd new file mode 100644 index 0000000000000000000000000000000000000000..fe7d0603e8285056e32834c1b2fab6e827edf4b6 GIT binary patch literal 25088 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 literal 0 HcmV?d00001 diff --git a/thirdparty/python25/Lib/site-packages/pywin32-210-py2.6.egg-info b/thirdparty/python25/Lib/site-packages/pywin32-210-py2.6.egg-info new file mode 100644 index 000000000..b10fa6212 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pywin32-210-py2.6.egg-info @@ -0,0 +1,13 @@ +Metadata-Version: 1.0 +Name: pywin32 +Version: 210 +Summary: Python for Window Extensions +Home-page: http://sourceforge.net/projects/pywin32/ +Author: Mark Hammond (et al) +Author-email: mhammond@users.sourceforge.net +License: PSA +Description: Python extensions for Microsoft Windows + Provides access to much of the Win32 API, the + ability to create and use COM objects, and the + Pythonwin environment. +Platform: UNKNOWN diff --git a/thirdparty/python25/Lib/site-packages/pywin32.pth b/thirdparty/python25/Lib/site-packages/pywin32.pth new file mode 100644 index 000000000..49ed1b4d3 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pywin32.pth @@ -0,0 +1,4 @@ +# .pth file for the PyWin32 extensions +win32 +win32\lib +Pythonwin diff --git a/thirdparty/python25/Lib/site-packages/pywin32.version.txt b/thirdparty/python25/Lib/site-packages/pywin32.version.txt new file mode 100644 index 000000000..7e0e0b070 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/pywin32.version.txt @@ -0,0 +1 @@ +210 diff --git a/thirdparty/python25/Lib/site-packages/pywin32_system32/pythoncom25.dll b/thirdparty/python25/Lib/site-packages/pywin32_system32/pythoncom25.dll new file mode 100644 index 0000000000000000000000000000000000000000..95ae20759c773dfeef5d24569acf53cdfb7e6a68 GIT binary patch literal 327680 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

    w#{&61HA9j)4DHL5CF|VQKx} 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

  3. &#t~3Ubn1>H;IUfJ=_H_4tZB{v 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

    @GkOsKR*#ayLC%G!MPzA^n0qQT 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 z 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 XU^E0qLtr!nMnhmU1V%%E^bi05A(7eC literal 0 HcmV?d00001 diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/BackupRead_BackupWrite.py b/thirdparty/python25/Lib/site-packages/win32/Demos/BackupRead_BackupWrite.py new file mode 100644 index 000000000..f803e07e7 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/BackupRead_BackupWrite.py @@ -0,0 +1,80 @@ +## demonstrates using BackupRead and BackupWrite to copy all of a file's data streams + +import win32file, win32api, win32con, win32security, ntsecuritycon +from win32com import storagecon +import pythoncom, pywintypes +import struct, traceback + +all_sd_info=win32security.DACL_SECURITY_INFORMATION|win32security.DACL_SECURITY_INFORMATION| \ + win32security.OWNER_SECURITY_INFORMATION|win32security.GROUP_SECURITY_INFORMATION + +tempdir=win32api.GetTempPath() +tempfile=win32api.GetTempFileName(tempdir,'bkr')[0] +outfile=win32api.GetTempFileName(tempdir,'out')[0] +print 'Filename:',tempfile,'Output file:',outfile + +f=open(tempfile,'w') +f.write('some random junk'+'x'*100) +f.close() + +## add a couple of alternate data streams +f=open(tempfile+':streamdata','w') +f.write('data written to alternate stream'+'y'*100) +f.close() + +f=open(tempfile+':anotherstream','w') +f.write('z'*100) +f.close() + +## add Summary Information, which is stored as a separate stream +m=storagecon.STGM_READWRITE | storagecon.STGM_SHARE_EXCLUSIVE |storagecon.STGM_DIRECT +pss=pythoncom.StgOpenStorageEx(tempfile, m, storagecon.STGFMT_FILE, 0 , pythoncom.IID_IPropertySetStorage,None) +ps=pss.Create(pythoncom.FMTID_SummaryInformation,pythoncom.IID_IPropertyStorage,0,storagecon.STGM_READWRITE|storagecon.STGM_SHARE_EXCLUSIVE) +ps.WriteMultiple((storagecon.PIDSI_KEYWORDS,storagecon.PIDSI_COMMENTS),('keywords','comments')) +ps=None +pss=None + +## add a custom security descriptor to make sure we don't +## get a default that would always be the same for both files in temp dir +new_sd=pywintypes.SECURITY_DESCRIPTOR() +sid=win32security.LookupAccountName('','EveryOne')[0] +acl=pywintypes.ACL() +acl.AddAccessAllowedAce(1, win32con.GENERIC_READ, sid) +acl.AddAccessAllowedAce(1, ntsecuritycon.FILE_APPEND_DATA, sid) +acl.AddAccessAllowedAce(1, win32con.GENERIC_WRITE, sid) +acl.AddAccessAllowedAce(1, ntsecuritycon.FILE_ALL_ACCESS, sid) + +new_sd.SetSecurityDescriptorDacl(True, acl, False) +win32security.SetFileSecurity(tempfile,win32security.DACL_SECURITY_INFORMATION,new_sd) + + +sa=pywintypes.SECURITY_ATTRIBUTES() +sa.bInheritHandle=True +h=win32file.CreateFile(tempfile, win32con.GENERIC_ALL ,win32con.FILE_SHARE_READ, + sa, win32con.OPEN_EXISTING, win32file.FILE_FLAG_BACKUP_SEMANTICS , None) + +outh=win32file.CreateFile(outfile, win32con.GENERIC_ALL ,win32con.FILE_SHARE_READ|win32con.FILE_SHARE_WRITE, + sa, win32con.OPEN_EXISTING, win32file.FILE_FLAG_BACKUP_SEMANTICS , None) + +ctxt=0 +outctxt=0 +buf=None +readsize=100 + +while 1: + bytes_read, buf, ctxt=win32file.BackupRead(h, readsize, buf, False, True, ctxt) + if bytes_read==0: + break + bytes_written, outctxt=win32file.BackupWrite(outh, bytes_read, buf, False, True, outctxt) + print 'Written:',bytes_written,'Context:',outctxt +win32file.BackupRead(h, 0, buf, True, True, ctxt) +win32file.BackupWrite(outh, 0, '', True, True, outctxt) +win32file.CloseHandle(h) +win32file.CloseHandle(outh) + +assert open(tempfile).read()==open(outfile).read(),"File contents differ !" +assert open(tempfile+':streamdata').read()==open(outfile+':streamdata').read(),"streamdata contents differ !" +assert open(tempfile+':anotherstream').read()==open(outfile+':anotherstream').read(),"anotherstream contents differ !" +assert buffer(win32security.GetFileSecurity(tempfile,all_sd_info))[:]== \ + buffer(win32security.GetFileSecurity(outfile, all_sd_info))[:], "Security descriptors are different !" +## also should check Summary Info programatically diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/BackupSeek_streamheaders.py b/thirdparty/python25/Lib/site-packages/win32/Demos/BackupSeek_streamheaders.py new file mode 100644 index 000000000..b537afc39 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/BackupSeek_streamheaders.py @@ -0,0 +1,85 @@ +## demonstrates using BackupSeek to enumerate data streams for a file +import win32file, win32api, win32con +from win32com import storagecon +import pythoncom, pywintypes +import struct, traceback + +stream_types={ + win32con.BACKUP_DATA:"Standard data", + win32con.BACKUP_EA_DATA:"Extended attribute data", + win32con.BACKUP_SECURITY_DATA:"Security descriptor data", + win32con.BACKUP_ALTERNATE_DATA:"Alternative data streams", + win32con.BACKUP_LINK:"Hard link information", + win32con.BACKUP_PROPERTY_DATA:"Property data", + win32con.BACKUP_OBJECT_ID:"Objects identifiers", + win32con.BACKUP_REPARSE_DATA:"Reparse points", + win32con.BACKUP_SPARSE_BLOCK:"Sparse file" +} + +tempdir=win32api.GetTempPath() +tempfile=win32api.GetTempFileName(tempdir,'bkr')[0] +print 'Filename:',tempfile + +f=open(tempfile,'w') +f.write('some random junk'+'x'*100) +f.close() + +f=open(tempfile+':streamdata','w') +f.write('data written to alternate stream'+'y'*100) +f.close() + +f=open(tempfile+':anotherstream','w') +f.write('z'*200) +f.close() + +## add Summary Information, which is stored as a separate stream +m=storagecon.STGM_READWRITE | storagecon.STGM_SHARE_EXCLUSIVE |storagecon.STGM_DIRECT +pss=pythoncom.StgOpenStorageEx(tempfile, m, storagecon.STGFMT_FILE, 0 , pythoncom.IID_IPropertySetStorage,None) +ps=pss.Create(pythoncom.FMTID_SummaryInformation,pythoncom.IID_IPropertyStorage,0,storagecon.STGM_READWRITE|storagecon.STGM_SHARE_EXCLUSIVE) +ps.WriteMultiple((storagecon.PIDSI_KEYWORDS,storagecon.PIDSI_COMMENTS),('keywords','comments')) +ps=None +pss=None + +sa=pywintypes.SECURITY_ATTRIBUTES() +sa.bInheritHandle=False +h=win32file.CreateFile(tempfile, win32con.GENERIC_ALL ,win32con.FILE_SHARE_READ, + sa, win32con.OPEN_EXISTING, win32file.FILE_FLAG_BACKUP_SEMANTICS , None) + + +""" stream header: +typedef struct _WIN32_STREAM_ID { + DWORD dwStreamId; DWORD dwStreamAttributes; LARGE_INTEGER Size; + DWORD dwStreamNameSize; WCHAR cStreamName[ANYSIZE_ARRAY]; +} +""" + +win32_stream_id_format="LLQL" +win32_stream_id_size=struct.calcsize(win32_stream_id_format) + +def parse_stream_header(h,ctxt,data): + stream_type, stream_attributes, stream_size, stream_name_size=struct.unpack(win32_stream_id_format,data) + print '\nType:',stream_type,stream_types[stream_type], 'Attributes:', stream_attributes, 'Size:', stream_size, 'Name len:',stream_name_size + if stream_name_size>0: + ## ??? sdk says this size is in characters, but it appears to be number of bytes ??? + bytes_read, stream_name_buf, ctxt=win32file.BackupRead(h, stream_name_size, None, False, True, ctxt) + stream_name=pywintypes.UnicodeFromRaw(stream_name_buf[:]) + else: + stream_name='Unnamed' + print 'Name:'+stream_name + return ctxt, stream_type, stream_attributes, stream_size, stream_name_size, stream_name + +ctxt=0 +win32_stream_id_buf=None ## gets rebound to a writable buffer on first call and reused +while 1: + bytes_read, win32_stream_id_buf, ctxt=win32file.BackupRead(h, win32_stream_id_size, win32_stream_id_buf, False, True, ctxt) + if bytes_read==0: + break + ctxt, stream_type, stream_attributes, stream_size, stream_name_size, stream_name=\ + parse_stream_header(h, ctxt, win32_stream_id_buf[:]) + if stream_size>0: + bytes_moved=win32file.BackupSeek(h, stream_size, ctxt) + print 'Moved: ',bytes_moved + +win32file.BackupRead(h, win32_stream_id_size, win32_stream_id_buf, True, True, ctxt) +win32file.CloseHandle(h) + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/CopyFileEx.py b/thirdparty/python25/Lib/site-packages/win32/Demos/CopyFileEx.py new file mode 100644 index 000000000..9579ba2d9 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/CopyFileEx.py @@ -0,0 +1,30 @@ +import win32file, win32api +import os + + +def ProgressRoutine(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred, + StreamNumber, CallbackReason, SourceFile, DestinationFile, Data): + print Data + print TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred, StreamNumber, CallbackReason, SourceFile, DestinationFile + ##if TotalBytesTransferred > 100000: + ## return win32file.PROGRESS_STOP + return win32file.PROGRESS_CONTINUE + +temp_dir=win32api.GetTempPath() +fsrc=win32api.GetTempFileName(temp_dir,'cfe')[0] +fdst=win32api.GetTempFileName(temp_dir,'cfe')[0] +print fsrc, fdst + +f=open(fsrc,'w') +f.write('xxxxxxxxxxxxxxxx\n'*32768) +f.close() +## add a couple of extra data streams +f=open(fsrc+':stream_y','w') +f.write('yyyyyyyyyyyyyyyy\n'*32768) +f.close() +f=open(fsrc+':stream_z','w') +f.write('zzzzzzzzzzzzzzzz\n'*32768) +f.close() + +operation_desc='Copying '+fsrc+' to '+fdst +win32file.CopyFileEx(fsrc, fdst, ProgressRoutine, operation_desc, False, win32file.COPY_FILE_RESTARTABLE) diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/FileSecurityTest.py b/thirdparty/python25/Lib/site-packages/win32/Demos/FileSecurityTest.py new file mode 100644 index 000000000..77c5b1c29 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/FileSecurityTest.py @@ -0,0 +1,68 @@ +# Contributed by Kelly Kranabetter. +import os, sys +import win32security, ntsecuritycon + +# get security information +#name=r"c:\autoexec.bat" +#name= r"g:\!workgrp\lim" +name=sys.argv[0] + +if not os.path.exists(name): + print name, "does not exist!" + sys.exit() + +print "On file " , name, "\n" + +# get owner SID +print "OWNER" +sd= win32security.GetFileSecurity(name, win32security.OWNER_SECURITY_INFORMATION) +sid= sd.GetSecurityDescriptorOwner() +print " ", win32security.LookupAccountSid(None, sid) + +# get group SID +print "GROUP" +sd= win32security.GetFileSecurity(name, win32security.GROUP_SECURITY_INFORMATION) +sid= sd.GetSecurityDescriptorGroup() +print " ", win32security.LookupAccountSid(None, sid) + +# get ACEs +sd= win32security.GetFileSecurity(name, win32security.DACL_SECURITY_INFORMATION) +dacl= sd.GetSecurityDescriptorDacl() +if dacl == None: + print "No Discretionary ACL" +else: + for ace_no in range(0, dacl.GetAceCount()): + ace= dacl.GetAce(ace_no) + print "ACE", ace_no + + print " -Type" + for i in ("ACCESS_ALLOWED_ACE_TYPE", "ACCESS_DENIED_ACE_TYPE", "SYSTEM_AUDIT_ACE_TYPE", "SYSTEM_ALARM_ACE_TYPE"): + if getattr(ntsecuritycon, i) == ace[0][0]: + print " ", i + + print " -Flags", hex(ace[0][1]) + for i in ("OBJECT_INHERIT_ACE", "CONTAINER_INHERIT_ACE", "NO_PROPAGATE_INHERIT_ACE", "INHERIT_ONLY_ACE", "SUCCESSFUL_ACCESS_ACE_FLAG", "FAILED_ACCESS_ACE_FLAG"): + if getattr(ntsecuritycon, i) & ace[0][1] == getattr(ntsecuritycon, i): + print " ", i + + print " -mask", hex(ace[1]) + + # files and directories do permissions differently + permissions_file= ("DELETE", "READ_CONTROL", "WRITE_DAC", "WRITE_OWNER", "SYNCHRONIZE", "FILE_GENERIC_READ", "FILE_GENERIC_WRITE", "FILE_GENERIC_EXECUTE", "FILE_DELETE_CHILD") + permissions_dir= ("DELETE", "READ_CONTROL", "WRITE_DAC", "WRITE_OWNER", "SYNCHRONIZE", "FILE_ADD_SUBDIRECTORY", "FILE_ADD_FILE", "FILE_DELETE_CHILD", "FILE_LIST_DIRECTORY", "FILE_TRAVERSE", "FILE_READ_ATTRIBUTES", "FILE_WRITE_ATTRIBUTES", "FILE_READ_EA", "FILE_WRITE_EA") + permissions_dir_inherit= ("DELETE", "READ_CONTROL", "WRITE_DAC", "WRITE_OWNER", "SYNCHRONIZE", "GENERIC_READ", "GENERIC_WRITE", "GENERIC_EXECUTE", "GENERIC_ALL") + if os.path.isfile(name): + permissions= permissions_file + else: + permissions= permissions_dir + # directories also contain an ACE that is inherited by children (files) within them + if ace[0][1] & ntsecuritycon.OBJECT_INHERIT_ACE == ntsecuritycon.OBJECT_INHERIT_ACE and ace[0][1] & ntsecuritycon.INHERIT_ONLY_ACE == ntsecuritycon.INHERIT_ONLY_ACE: + permissions= permissions_dir_inherit + + calc_mask= 0 # calculate the mask so we can see if we are printing all of the permissions + for i in permissions: + if getattr(ntsecuritycon, i) & ace[1] == getattr(ntsecuritycon, i): + calc_mask= calc_mask | getattr(ntsecuritycon, i) + print " ", i + print " ", "Calculated Check Mask=", hex(calc_mask) + print " -SID\n ", win32security.LookupAccountSid(None, ace[2]) diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/GetSaveFileName.py b/thirdparty/python25/Lib/site-packages/win32/Demos/GetSaveFileName.py new file mode 100644 index 000000000..14985f201 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/GetSaveFileName.py @@ -0,0 +1,36 @@ +import win32gui, win32con, os + +filter='Python Scripts\0*.py;*.pyw;*.pys\0Text files\0*.txt\0' +customfilter='Other file types\0*.*\0' + +fname, customfilter, flags=win32gui.GetSaveFileNameW( + InitialDir=os.environ['temp'], + Flags=win32con.OFN_ALLOWMULTISELECT|win32con.OFN_EXPLORER, + File='somefilename', DefExt='py', + Title='GetSaveFileNameW', + Filter=filter, + CustomFilter=customfilter, + FilterIndex=1) + +print 'save file names:', repr(fname) +print 'filter used:', repr(customfilter) +print 'Flags:', flags +for k,v in win32con.__dict__.items(): + if k.startswith('OFN_') and flags & v: + print '\t'+k + +fname, customfilter, flags=win32gui.GetOpenFileNameW( + InitialDir=os.environ['temp'], + Flags=win32con.OFN_ALLOWMULTISELECT|win32con.OFN_EXPLORER, + File='somefilename', DefExt='py', + Title='GetOpenFileNameW', + Filter=filter, + CustomFilter=customfilter, + FilterIndex=0) + +print 'open file names:', repr(fname) +print 'filter used:', repr(customfilter) +print 'Flags:', flags +for k,v in win32con.__dict__.items(): + if k.startswith('OFN_') and flags & v: + print '\t'+k diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/OpenEncryptedFileRaw.py b/thirdparty/python25/Lib/site-packages/win32/Demos/OpenEncryptedFileRaw.py new file mode 100644 index 000000000..0e45ab7d3 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/OpenEncryptedFileRaw.py @@ -0,0 +1,64 @@ +import win32file, win32api, winerror +import os + +def ReadCallback(input_buffer, data, buflen): + fnamein, fnameout, f = data + ## print fnamein, fnameout, buflen + f.write(input_buffer) + ## python 2.3 throws an error if return value is a plain int + return long(winerror.ERROR_SUCCESS) + +def WriteCallback(output_buffer, data, buflen): + fnamebackup, fnameout, f = data + file_data=f.read(buflen) + ## returning 0 as len terminates WriteEncryptedFileRaw + output_len=len(file_data) + output_buffer[:output_len]=file_data + return winerror.ERROR_SUCCESS, output_len + + +tmp_dir=win32api.GetTempPath() +dst_dir=win32api.GetTempFileName(tmp_dir,'oef')[0] +os.remove(dst_dir) +os.mkdir(dst_dir) +print 'Destination dir:', dst_dir + +## create an encrypted file +fname=win32api.GetTempFileName(dst_dir,'ref')[0] +print 'orig file:',fname +f=open(fname,'w') +f.write('xxxxxxxxxxxxxxxx\n'*32768) +f.close() +## add a couple of extra data streams +f=open(fname+':stream_y','w') +f.write('yyyyyyyyyyyyyyyy\n'*32768) +f.close() +f=open(fname+':stream_z','w') +f.write('zzzzzzzzzzzzzzzz\n'*32768) +f.close() +win32file.EncryptFile(fname) + +## backup raw data of encrypted file +bkup_fname=win32api.GetTempFileName(dst_dir,'bef')[0] +print 'backup file:', bkup_fname +f=open(bkup_fname,'wb') +ctxt=win32file.OpenEncryptedFileRaw(fname,0) +try: + win32file.ReadEncryptedFileRaw(ReadCallback, (fname,bkup_fname,f), ctxt) +finally: + ## if context is not closed, file remains locked even if calling process is killed + win32file.CloseEncryptedFileRaw(ctxt) + f.close() + +## restore data from backup to new encrypted file +dst_fname=win32api.GetTempFileName(dst_dir,'wef')[0] +print 'restored file:', dst_fname +f=open(bkup_fname,'rb') +ctxtout=win32file.OpenEncryptedFileRaw(dst_fname, win32file.CREATE_FOR_IMPORT) +try: + win32file.WriteEncryptedFileRaw(WriteCallback, (bkup_fname,dst_fname,f), ctxtout) +finally: + win32file.CloseEncryptedFileRaw(ctxtout) + f.close() + + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/SystemParametersInfo.py b/thirdparty/python25/Lib/site-packages/win32/Demos/SystemParametersInfo.py new file mode 100644 index 000000000..9e0ca2d0a --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/SystemParametersInfo.py @@ -0,0 +1,173 @@ +import win32gui, win32con, win32api, time, os, glob +## some of these tests will fail for systems prior to XP + +for pname in( + ## Set actions all take an unsigned int in pvParam + "SPI_GETMOUSESPEED", "SPI_GETACTIVEWNDTRKTIMEOUT", "SPI_GETCARETWIDTH", + "SPI_GETFOREGROUNDFLASHCOUNT", "SPI_GETFOREGROUNDLOCKTIMEOUT", + ## Set actions all take an unsigned int in uiParam + "SPI_GETWHEELSCROLLLINES", "SPI_GETKEYBOARDDELAY", + "SPI_GETKEYBOARDSPEED", "SPI_GETMOUSEHOVERHEIGHT", "SPI_GETMOUSEHOVERWIDTH", + "SPI_GETMOUSEHOVERTIME", "SPI_GETSCREENSAVETIMEOUT", "SPI_GETMENUSHOWDELAY", + "SPI_GETLOWPOWERTIMEOUT", "SPI_GETPOWEROFFTIMEOUT", "SPI_GETBORDER", + ## below are winxp only: + "SPI_GETFONTSMOOTHINGCONTRAST", "SPI_GETFONTSMOOTHINGTYPE", "SPI_GETFOCUSBORDERHEIGHT", + "SPI_GETFOCUSBORDERWIDTH", "SPI_GETMOUSECLICKLOCKTIME"): + print pname + cget=getattr(win32con,pname) + cset=getattr(win32con,pname.replace('_GET','_SET')) + orig_value=win32gui.SystemParametersInfo(cget) + print '\toriginal setting:',orig_value + win32gui.SystemParametersInfo(cset, orig_value+1) + new_value=win32gui.SystemParametersInfo(cget) + print '\tnew value:',new_value + assert new_value==orig_value+1 + win32gui.SystemParametersInfo(cset, orig_value) + assert win32gui.SystemParametersInfo(cget)==orig_value + + + +# these take a boolean value in pvParam +# change to opposite, check that it was changed and change back +for pname in ("SPI_GETFLATMENU","SPI_GETDROPSHADOW","SPI_GETKEYBOARDCUES","SPI_GETMENUFADE", + "SPI_GETCOMBOBOXANIMATION", "SPI_GETCURSORSHADOW", "SPI_GETGRADIENTCAPTIONS", "SPI_GETHOTTRACKING", + "SPI_GETLISTBOXSMOOTHSCROLLING", "SPI_GETMENUANIMATION", "SPI_GETSELECTIONFADE", + "SPI_GETTOOLTIPANIMATION", "SPI_GETTOOLTIPFADE", "SPI_GETUIEFFECTS", "SPI_GETACTIVEWINDOWTRACKING", + "SPI_GETACTIVEWNDTRKZORDER"): + print pname + cget=getattr(win32con,pname) + cset=getattr(win32con,pname.replace('_GET','_SET')) + orig_value=win32gui.SystemParametersInfo(cget) + print orig_value + win32gui.SystemParametersInfo(cset, not orig_value) + new_value=win32gui.SystemParametersInfo(cget) + print new_value + assert orig_value!=new_value + win32gui.SystemParametersInfo(cset, orig_value) + assert win32gui.SystemParametersInfo(cget)==orig_value + + + +# these take a boolean in uiParam +# could combine with above section now that SystemParametersInfo only takes a single parameter +for pname in ("SPI_GETFONTSMOOTHING","SPI_GETICONTITLEWRAP","SPI_GETBEEP","SPI_GETBLOCKSENDINPUTRESETS", + "SPI_GETKEYBOARDPREF","SPI_GETSCREENSAVEACTIVE","SPI_GETMENUDROPALIGNMENT", + "SPI_GETDRAGFULLWINDOWS", "SPI_GETSHOWIMEUI"): + print pname + cget=getattr(win32con,pname) + cset=getattr(win32con,pname.replace('_GET','_SET')) + orig_value=win32gui.SystemParametersInfo(cget) + print orig_value + win32gui.SystemParametersInfo(cset, not orig_value) + new_value=win32gui.SystemParametersInfo(cget) + print new_value + assert orig_value!=new_value + win32gui.SystemParametersInfo(cset, orig_value) + assert win32gui.SystemParametersInfo(cget)==orig_value + + + +print "SPI_GETICONTITLELOGFONT" +lf=win32gui.SystemParametersInfo(win32con.SPI_GETICONTITLELOGFONT) +orig_height=lf.lfHeight +orig_italic=lf.lfItalic +print 'Height:', orig_height, 'Italic:',orig_italic +lf.lfHeight+=2 +lf.lfItalic=not lf.lfItalic +win32gui.SystemParametersInfo(win32con.SPI_SETICONTITLELOGFONT, lf) +new_lf=win32gui.SystemParametersInfo(win32con.SPI_GETICONTITLELOGFONT) +print 'New Height:', new_lf.lfHeight, 'New Italic:',new_lf.lfItalic +assert new_lf.lfHeight==orig_height+2 +assert new_lf.lfItalic!=orig_italic + +lf.lfHeight=orig_height +lf.lfItalic=orig_italic +win32gui.SystemParametersInfo(win32con.SPI_SETICONTITLELOGFONT, lf) +new_lf=win32gui.SystemParametersInfo(win32con.SPI_GETICONTITLELOGFONT) +assert new_lf.lfHeight==orig_height +assert new_lf.lfItalic==orig_italic + + + +print "SPI_GETMOUSEHOVERWIDTH, SPI_GETMOUSEHOVERHEIGHT, SPI_GETMOUSEHOVERTIME" +w=win32gui.SystemParametersInfo(win32con.SPI_GETMOUSEHOVERWIDTH) +h=win32gui.SystemParametersInfo(win32con.SPI_GETMOUSEHOVERHEIGHT) +t=win32gui.SystemParametersInfo(win32con.SPI_GETMOUSEHOVERTIME) +print 'w,h,t:', w,h,t + +win32gui.SystemParametersInfo(win32con.SPI_SETMOUSEHOVERWIDTH,w+1) +win32gui.SystemParametersInfo(win32con.SPI_SETMOUSEHOVERHEIGHT,h+2) +win32gui.SystemParametersInfo(win32con.SPI_SETMOUSEHOVERTIME,t+3) +new_w=win32gui.SystemParametersInfo(win32con.SPI_GETMOUSEHOVERWIDTH) +new_h=win32gui.SystemParametersInfo(win32con.SPI_GETMOUSEHOVERHEIGHT) +new_t=win32gui.SystemParametersInfo(win32con.SPI_GETMOUSEHOVERTIME) +print 'new w,h,t:', new_w, new_h, new_t +assert new_w==w+1 +assert new_h==h+2 +assert new_t==t+3 + +win32gui.SystemParametersInfo(win32con.SPI_SETMOUSEHOVERWIDTH,w) +win32gui.SystemParametersInfo(win32con.SPI_SETMOUSEHOVERHEIGHT,h) +win32gui.SystemParametersInfo(win32con.SPI_SETMOUSEHOVERTIME,t) +new_w=win32gui.SystemParametersInfo(win32con.SPI_GETMOUSEHOVERWIDTH) +new_h=win32gui.SystemParametersInfo(win32con.SPI_GETMOUSEHOVERHEIGHT) +new_t=win32gui.SystemParametersInfo(win32con.SPI_GETMOUSEHOVERTIME) +assert new_w==w +assert new_h==h +assert new_t==t + + + +print "SPI_SETDOUBLECLKWIDTH, SPI_SETDOUBLECLKHEIGHT" +x=win32api.GetSystemMetrics(win32con.SM_CXDOUBLECLK) +y=win32api.GetSystemMetrics(win32con.SM_CYDOUBLECLK) +print 'x,y:', x, y +win32gui.SystemParametersInfo(win32con.SPI_SETDOUBLECLKWIDTH, x+1) +win32gui.SystemParametersInfo(win32con.SPI_SETDOUBLECLKHEIGHT, y+2) +new_x=win32api.GetSystemMetrics(win32con.SM_CXDOUBLECLK) +new_y=win32api.GetSystemMetrics(win32con.SM_CYDOUBLECLK) +print 'new x,y:', new_x, new_y +assert new_x==x+1 +assert new_y==y+2 +win32gui.SystemParametersInfo(win32con.SPI_SETDOUBLECLKWIDTH, x) +win32gui.SystemParametersInfo(win32con.SPI_SETDOUBLECLKHEIGHT, y) +new_x=win32api.GetSystemMetrics(win32con.SM_CXDOUBLECLK) +new_y=win32api.GetSystemMetrics(win32con.SM_CYDOUBLECLK) +assert new_x==x +assert new_y==y + + + +print "SPI_SETDRAGWIDTH, SPI_SETDRAGHEIGHT" +dw=win32api.GetSystemMetrics(win32con.SM_CXDRAG) +dh=win32api.GetSystemMetrics(win32con.SM_CYDRAG) +print 'dw,dh:', dw, dh +win32gui.SystemParametersInfo(win32con.SPI_SETDRAGWIDTH,dw+1) +win32gui.SystemParametersInfo(win32con.SPI_SETDRAGHEIGHT,dh+2) +new_dw=win32api.GetSystemMetrics(win32con.SM_CXDRAG) +new_dh=win32api.GetSystemMetrics(win32con.SM_CYDRAG) +print 'new dw,dh:', new_dw, new_dh +assert new_dw==dw+1 +assert new_dh==dh+2 +win32gui.SystemParametersInfo(win32con.SPI_SETDRAGWIDTH,dw) +win32gui.SystemParametersInfo(win32con.SPI_SETDRAGHEIGHT,dh) +new_dw=win32api.GetSystemMetrics(win32con.SM_CXDRAG) +new_dh=win32api.GetSystemMetrics(win32con.SM_CYDRAG) +assert new_dw==dw +assert new_dh==dh + + + +orig_wallpaper=win32gui.SystemParametersInfo(Action=win32con.SPI_GETDESKWALLPAPER) +print 'Original: ',orig_wallpaper +for bmp in glob.glob(os.path.join(os.environ['windir'],'*.bmp')): + print bmp + win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, Param=bmp) + print win32gui.SystemParametersInfo(Action=win32con.SPI_GETDESKWALLPAPER) + time.sleep(1) + +win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, Param=orig_wallpaper) + + + + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/c_extension/README.txt b/thirdparty/python25/Lib/site-packages/win32/Demos/c_extension/README.txt new file mode 100644 index 000000000..21b7358d4 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/c_extension/README.txt @@ -0,0 +1,6 @@ +This directory contains a sample Python extension module which +includes PyWinTypes.h and links against PyWinTypesXX.lib The same technique +can be used to include and extend pythoncom. + +The sample does nothing useful other than to show how to compile and link +such an extension using a standard pywin32 installation. diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/c_extension/setup.py b/thirdparty/python25/Lib/site-packages/win32/Demos/c_extension/setup.py new file mode 100644 index 000000000..3766f57f0 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/c_extension/setup.py @@ -0,0 +1,23 @@ +# A sample distutils script to show to build your own +# extension module which extends pywintypes or pythoncom. +# +# Use 'python setup.py build' to build this extension. +import os +from distutils.core import setup, Extension +from distutils.sysconfig import get_python_lib + +sources = ["win32_extension.cpp"] + +# Specify the directory where the PyWin32 .h and .lib files are installed. +# If you are doing a win32com extension, you will also need to add +# win32com\Include and win32com\Libs. +ext = Extension("win32_extension", sources, + include_dirs = [os.path.join(get_python_lib(), "win32", "Include")], + library_dirs = [os.path.join(get_python_lib(), "win32", "Libs")], + ) + +setup( + name="win32 extension sample", + version="0.1", + ext_modules=[ext], +) diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/c_extension/win32_extension.cpp b/thirdparty/python25/Lib/site-packages/win32/Demos/c_extension/win32_extension.cpp new file mode 100644 index 000000000..36439f476 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/c_extension/win32_extension.cpp @@ -0,0 +1,21 @@ +// Note: this sample does nothing useful other than to show you how +// your own Python extension can link with and use the functions from +// pywintypesxx.dll +#include "Python.h" +#include "PyWinTypes.h" + +static struct PyMethodDef win32extension_functions[] = { + 0 +}; + +extern "C" __declspec(dllexport) +void initwin32_extension(void) +{ + // Initialize PyWin32 globals (such as error objects etc) + PyWinGlobals_Ensure(); + + PyObject *module; + module = Py_InitModule("win32_extension", win32extension_functions); + if (!module) + return; +} diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/cerapi.py b/thirdparty/python25/Lib/site-packages/win32/Demos/cerapi.py new file mode 100644 index 000000000..9618c1a6a --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/cerapi.py @@ -0,0 +1,212 @@ +# A demo of the Windows CE Remote API +# +# This connects to a CE device, and interacts with it. + +import wincerapi +import win32event +import win32api +import win32con +import os +import sys +import getopt +from repr import repr + + +def DumpPythonRegistry(): + try: + h = wincerapi.CeRegOpenKeyEx(win32con.HKEY_LOCAL_MACHINE, "Software\\Python\\PythonCore\\%s\\PythonPath" % sys.winver) + except win32api.error: + print "The remote device does not appear to have Python installed" + return 0 + path, typ = wincerapi.CeRegQueryValueEx(h, None) + print "The remote PythonPath is '%s'" % (str(path), ) + h.Close() + return 1 + +def DumpRegistry(root, level=0): + # A recursive dump of the remote registry to test most functions. + h = wincerapi.CeRegOpenKeyEx(win32con.HKEY_LOCAL_MACHINE, None) + level_prefix = " " * level + index = 0 + # Enumerate values. + while 1: + try: + name, data, typ = wincerapi.CeRegEnumValue(root, index) + except win32api.error: + break + print "%s%s=%s" % (level_prefix, name, repr(str(data))) + index = index+1 + # Now enumerate all keys. + index=0 + while 1: + try: + name, klass = wincerapi.CeRegEnumKeyEx(root, index) + except win32api.error: + break + print "%s%s\\" % (level_prefix, name) + subkey = wincerapi.CeRegOpenKeyEx(root, name) + DumpRegistry(subkey, level+1) + index = index+1 + +def DemoCopyFile(): + # Create a file on the device, and write a string. + cefile = wincerapi.CeCreateFile("TestPython", win32con.GENERIC_WRITE, 0, None, win32con.OPEN_ALWAYS, 0, None) + wincerapi.CeWriteFile(cefile, "Hello from Python") + cefile.Close() + # reopen the file and check the data. + cefile = wincerapi.CeCreateFile("TestPython", win32con.GENERIC_READ, 0, None, win32con.OPEN_EXISTING, 0, None) + if wincerapi.CeReadFile(cefile, 100) != "Hello from Python": + print "Couldnt read the data from the device!" + cefile.Close() + # Delete the test file + wincerapi.CeDeleteFile("TestPython") + print "Created, wrote to, read from and deleted a test file!" + +def DemoCreateProcess(): + try: + hp, ht, pid, tid = wincerapi.CeCreateProcess("Windows\\Python.exe", "", None, None, 0, 0, None, "", None) + + # Not necessary, except to see if handle closing raises an exception + # (if auto-closed, the error is suppressed) + hp.Close() + ht.Close() + print "Python is running on the remote device!" + except win32api.error, (hr, fn, msg): + print "Couldnt execute remote process -", msg + +def DumpRemoteMachineStatus(): + ACLineStatus, BatteryFlag, BatteryLifePercent, BatteryLifeTime, BatteryFullLifeTime, BackupBatteryFlag, BackupBatteryLifePercent, BackupBatteryLifeTime, BackupBatteryLifeTime = \ + wincerapi.CeGetSystemPowerStatusEx() + if ACLineStatus: + power = "AC" + else: + power = "battery" + if BatteryLifePercent==255: + batPerc = "unknown" + else: + batPerc = BatteryLifePercent + print "The batteries are at %s%%, and is currently being powered by %s" % (batPerc, power) + + memLoad, totalPhys, availPhys, totalPage, availPage, totalVirt, availVirt = \ + wincerapi.CeGlobalMemoryStatus() + + print "The memory is %d%% utilized." % (memLoad) + print "%-20s%-10s%-10s" % ("", "Total", "Avail") + print "%-20s%-10s%-10s" % ("Physical Memory", totalPhys, availPhys) + print "%-20s%-10s%-10s" % ("Virtual Memory", totalVirt, availVirt) + print "%-20s%-10s%-10s" % ("Paging file", totalPage, availPage) + + + storeSize, freeSize = wincerapi.CeGetStoreInformation() + print "%-20s%-10s%-10s" % ("File store", storeSize, freeSize) + + print "The CE temp path is", wincerapi.CeGetTempPath() + print "The system info for the device is", wincerapi.CeGetSystemInfo() + +def DumpRemoteFolders(): + # Dump all special folders possible. + for name, val in wincerapi.__dict__.items(): + if name[:6]=="CSIDL_": + try: + loc = str(wincerapi.CeGetSpecialFolderPath(val)) + print "Folder %s is at %s" % (name, loc) + except win32api.error, details: + pass + + # Get the shortcut targets for the "Start Menu" + print "Dumping start menu shortcuts..." + try: + startMenu = str(wincerapi.CeGetSpecialFolderPath(wincerapi.CSIDL_STARTMENU)) + except win32api.error, details: + print "This device has no start menu!", details + startMenu = None + + if startMenu: + for fileAttr in wincerapi.CeFindFiles(os.path.join(startMenu, "*")): + fileName = fileAttr[8] + fullPath = os.path.join(startMenu, str(fileName)) + try: + resolved = wincerapi.CeSHGetShortcutTarget(fullPath) + except win32api.error, (rc, fn, msg): + resolved = "#Error - %s" % msg + print "%s->%s" % (fileName, resolved) + + # print "The start menu is at", + # print wincerapi.CeSHGetShortcutTarget("\\Windows\\Start Menu\\Shortcut to Python.exe.lnk") + +def usage(): + print "Options:" + print "-a - Execute all demos" + print "-p - Execute Python process on remote device" + print "-r - Dump the remote registry" + print "-f - Dump all remote special folder locations" + print "-s - Dont dump machine status" + print "-y - Perform asynch init of CE connection" + +def main(): + async_init = bStartPython = bDumpRegistry = bDumpFolders = 0 + bDumpStatus = 1 + try: + opts, args = getopt.getopt(sys.argv[1:], "apr") + except getopt.error, why: + print "Invalid usage:", why + usage() + return + + for o, v in opts: + if o=="-a": + bStartPython = bDumpRegistry = bDumpStatus = bDumpFolders = asynch_init = 1 + if o=="-p": + bStartPython=1 + if o=="-r": + bDumpRegistry=1 + if o=="-s": + bDumpStatus=0 + if o=="-f": + bDumpFolders = 1 + if o=="-y": + print "Doing asynch init of CE connection" + async_init = 1 + + if async_init: + event, rc = wincerapi.CeRapiInitEx() + while 1: + rc = win32event.WaitForSingleObject(event, 500) + if rc==win32event.WAIT_OBJECT_0: + # We connected. + break + else: + print "Waiting for Initialize to complete (picture a Cancel button here :)" + else: + wincerapi.CeRapiInit() + print "Connected to remote CE device." + try: + verinfo = wincerapi.CeGetVersionEx() + print "The device is running windows CE version %d.%d - %s" % (verinfo[0], verinfo[1], verinfo[4]) + + if bDumpStatus: + print "Dumping remote machine status" + DumpRemoteMachineStatus() + + if bDumpRegistry: + print "Dumping remote registry..." + DumpRegistry(win32con.HKEY_LOCAL_MACHINE) + + if bDumpFolders: + print "Dumping remote folder information" + DumpRemoteFolders() + + DemoCopyFile() + if bStartPython: + print "Starting remote Python process" + if DumpPythonRegistry(): + DemoCreateProcess() + else: + print "Not trying to start Python, as it's not installed" + + finally: + wincerapi.CeRapiUninit() + print "Disconnected" + +if __name__=='__main__': + main() diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/dde/ddeclient.py b/thirdparty/python25/Lib/site-packages/win32/Demos/dde/ddeclient.py new file mode 100644 index 000000000..7bbe5192c --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/dde/ddeclient.py @@ -0,0 +1,19 @@ +# 'Request' example added jjk 11/20/98 + +import win32ui +import dde + +server = dde.CreateServer() +server.Create("TestClient") + +conversation = dde.CreateConversation(server) + +conversation.ConnectTo("RunAny", "RunAnyCommand") +conversation.Exec("DoSomething") +conversation.Exec("DoSomethingElse") + +conversation.ConnectTo("RunAny", "ComputeStringLength") +s = 'abcdefghi' +sl = conversation.Request(s) +print 'length of "%s" is %s'%(s,sl) + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/dde/ddeserver.py b/thirdparty/python25/Lib/site-packages/win32/Demos/dde/ddeserver.py new file mode 100644 index 000000000..c78178fa4 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/dde/ddeserver.py @@ -0,0 +1,38 @@ +# 'Request' example added jjk 11/20/98 + +import win32ui +from pywin.mfc import object +import dde + +class MySystemTopic(object.Object): + def __init__(self): + object.Object.__init__(self, dde.CreateServerSystemTopic()) + + def Exec(self, cmd): + print "System Topic asked to exec", cmd + +class MyOtherTopic(object.Object): + def __init__(self, topicName): + object.Object.__init__(self, dde.CreateTopic(topicName)) + + def Exec(self, cmd): + print "Other Topic asked to exec", cmd + +class MyRequestTopic(object.Object): + def __init__(self, topicName): + topic = dde.CreateTopic(topicName) + topic.AddItem(dde.CreateStringItem("")) + object.Object.__init__(self, topic) + + def Request(self, aString): + print "Request Topic asked to compute length of:", aString + return(str(len(aString))) + +server = dde.CreateServer() +server.AddTopic(MySystemTopic()) +server.AddTopic(MyOtherTopic("RunAnyCommand")) +server.AddTopic(MyRequestTopic("ComputeStringLength")) +server.Create('RunAny') + +while 1: + win32ui.PumpWaitingMessages(0, -1) diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/desktopmanager.py b/thirdparty/python25/Lib/site-packages/win32/Demos/desktopmanager.py new file mode 100644 index 000000000..e01ef1949 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/desktopmanager.py @@ -0,0 +1,164 @@ +# Demonstrates using a taskbar icon to create and navigate between desktops + +import win32api, win32con, win32gui, win32service, win32process +import pywintypes +import traceback, thread, time, cStringIO + +## "Shell_TrayWnd" is class of system tray window, broadcasts "TaskbarCreated" when initialized + +def desktop_name_dlgproc(hwnd,msg,wparam,lparam): + """ Handles messages from the desktop name dialog box """ + if msg in (win32con.WM_CLOSE,win32con.WM_DESTROY): + win32gui.DestroyWindow(hwnd) + elif msg == win32con.WM_COMMAND: + if wparam == win32con.IDOK: + desktop_name=win32gui.GetDlgItemText(hwnd, 72) + print 'new desktop name: ',desktop_name + win32gui.DestroyWindow(hwnd) + create_desktop(desktop_name) + + elif wparam == win32con.IDCANCEL: + win32gui.DestroyWindow(hwnd) + +def get_new_desktop_name(parent_hwnd): + """ Create a dialog box to ask the user for name of desktop to be created """ + msgs={win32con.WM_COMMAND:desktop_name_dlgproc, + win32con.WM_CLOSE:desktop_name_dlgproc, + win32con.WM_DESTROY:desktop_name_dlgproc} + # dlg item [type, caption, id, (x,y,cx,cy), style, ex style + style=win32con.WS_BORDER|win32con.WS_VISIBLE|win32con.WS_CAPTION|win32con.WS_SYSMENU ## |win32con.DS_SYSMODAL + h=win32gui.CreateDialogIndirect( + win32api.GetModuleHandle(None), + [['One ugly dialog box !',(100,100,200,100),style,0], + ['Button','Create', win32con.IDOK, (10,10,30,20),win32con.WS_VISIBLE|win32con.WS_TABSTOP|win32con.BS_HOLLOW|win32con.BS_DEFPUSHBUTTON], + ['Button','Never mind', win32con.IDCANCEL, (45,10,50,20),win32con.WS_VISIBLE|win32con.WS_TABSTOP|win32con.BS_HOLLOW], + ['Static','Desktop name:',71,(10,40,70,10),win32con.WS_VISIBLE], + ['Edit','',72,(75,40,90,10),win32con.WS_VISIBLE]], + parent_hwnd, msgs) ## parent_hwnd, msgs) + + win32gui.EnableWindow(h,True) + hcontrol=win32gui.GetDlgItem(h,72) + win32gui.EnableWindow(hcontrol,True) + win32gui.SetFocus(hcontrol) + +def new_icon(hdesk,desktop_name): + """ Runs as a thread on each desktop to create a new tray icon and handle its messages """ + global id + id=id+1 + hdesk.SetThreadDesktop() + ## apparently the threads can't use same hinst, so each needs its own window class + windowclassname='PythonDesktopManager'+desktop_name + wc = win32gui.WNDCLASS() + wc.hInstance = win32api.GetModuleHandle(None) + wc.lpszClassName = windowclassname + wc.style = win32con.CS_VREDRAW | win32con.CS_HREDRAW | win32con.CS_GLOBALCLASS + wc.hCursor = win32gui.LoadCursor( 0, win32con.IDC_ARROW ) + wc.hbrBackground = win32con.COLOR_WINDOW + wc.lpfnWndProc = icon_wndproc + windowclass = win32gui.RegisterClass(wc) + style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU + hwnd = win32gui.CreateWindow(windowclass, 'dm_'+desktop_name, win32con.WS_SYSMENU, + 0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, + 0, 0, wc.hInstance, None) + win32gui.UpdateWindow(hwnd) + flags = win32gui.NIF_ICON | win32gui.NIF_MESSAGE | win32gui.NIF_TIP + notify_info = (hwnd, id, flags, win32con.WM_USER+20, hicon, 'Desktop Manager (%s)' %desktop_name) + window_info[hwnd]=notify_info + ## wait for explorer to initialize system tray for new desktop + tray_found=0 + while not tray_found: + try: + tray_found=win32gui.FindWindow("Shell_TrayWnd",None) + except win32gui.error: + traceback.print_exc + time.sleep(.5) + win32gui.Shell_NotifyIcon(win32gui.NIM_ADD, notify_info) + win32gui.PumpMessages() + +def create_desktop(desktop_name, start_explorer=1): + """ Creates a new desktop and spawns a thread running on it + Will also start a new icon thread on an existing desktop + """ + sa=pywintypes.SECURITY_ATTRIBUTES() + sa.bInheritHandle=1 + + try: + hdesk=win32service.CreateDesktop(desktop_name, 0, win32con.MAXIMUM_ALLOWED, sa) + except win32service.error: + traceback.print_exc() + errbuf=cStringIO.StringIO() + traceback.print_exc(None,errbuf) + win32api.MessageBox(0, errbuf.getvalue(), 'Desktop creation failed') + return + if start_explorer: + s=win32process.STARTUPINFO() + s.lpDesktop=desktop_name + prc_info=win32process.CreateProcess(None, "Explorer.exe",None,None,True,win32con.CREATE_NEW_CONSOLE,None,'c:\\',s) + + th=thread.start_new_thread(new_icon,(hdesk,desktop_name)) + hdesk.SwitchDesktop() + +def icon_wndproc(hwnd, msg, wp, lp): + """ Window proc for the tray icons """ + if lp==win32con.WM_LBUTTONDOWN: + ## popup menu won't disappear if you don't do this + win32gui.SetForegroundWindow(hwnd) + + curr_desktop=win32service.OpenInputDesktop(0,True,win32con.MAXIMUM_ALLOWED) + curr_desktop_name=win32service.GetUserObjectInformation(curr_desktop,win32con.UOI_NAME) + winsta=win32service.GetProcessWindowStation() + desktops=winsta.EnumDesktops() + m=win32gui.CreatePopupMenu() + desktop_cnt=len(desktops) + ## *don't* create an item 0 + for d in range(1, desktop_cnt+1): + mf_flags=win32con.MF_STRING + ## if you switch to winlogon yourself, there's nothing there and you're stuck + if desktops[d-1].lower() in ('winlogon','disconnect'): + mf_flags=mf_flags|win32con.MF_GRAYED|win32con.MF_DISABLED + if desktops[d-1]==curr_desktop_name: + mf_flags=mf_flags|win32con.MF_CHECKED + win32gui.AppendMenu(m, mf_flags, d, desktops[d-1]) + win32gui.AppendMenu(m, win32con.MF_STRING, desktop_cnt+1, 'Create new ...') + win32gui.AppendMenu(m, win32con.MF_STRING, desktop_cnt+2, 'Exit') + + x,y=win32gui.GetCursorPos() + d=win32gui.TrackPopupMenu(m,win32con.TPM_LEFTBUTTON|win32con.TPM_RETURNCMD|win32con.TPM_NONOTIFY, + x,y, 0, hwnd, None) + win32gui.PumpWaitingMessages() + if d==desktop_cnt+1: ## Create new + get_new_desktop_name(hwnd) + elif d==desktop_cnt+2: ## Exit + win32gui.PostQuitMessage(0) + win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, window_info[hwnd]) + del window_info[hwnd] + origin_desktop.SwitchDesktop() + elif d>0: + hdesk=win32service.OpenDesktop(desktops[d-1],0,0,win32con.MAXIMUM_ALLOWED) + hdesk.SwitchDesktop() + return 0 + else: + return win32gui.DefWindowProc(hwnd, msg, wp, lp) + +window_info={} +origin_desktop=win32service.OpenInputDesktop(0, True, win32con.MAXIMUM_ALLOWED) +origin_desktop_name=win32service.GetUserObjectInformation(origin_desktop, win32service.UOI_NAME) + +hinst=win32api.GetModuleHandle(None) +try: + hicon=win32gui.LoadIcon(hinst, 1) ## python.exe and pythonw.exe +except win32gui.error: + hicon=win32gui.LoadIcon(hinst, 135) ## pythonwin's icon +id=0 + +create_desktop(str(origin_desktop_name),0) + +## wait for first thread to initialize its icon +while not window_info: + time.sleep(1) + +## exit when last tray icon goes away +while window_info: + win32gui.PumpWaitingMessages() + time.sleep(3) + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/eventLogDemo.py b/thirdparty/python25/Lib/site-packages/win32/Demos/eventLogDemo.py new file mode 100644 index 000000000..aa9307f48 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/eventLogDemo.py @@ -0,0 +1,94 @@ +import win32evtlog, traceback +import win32api, win32con +import win32security # To translate NT Sids to account names. + +from win32evtlogutil import * + +def ReadLog(computer, logType="Application", dumpEachRecord = 0): + # read the entire log back. + h=win32evtlog.OpenEventLog(computer, logType) + numRecords = win32evtlog.GetNumberOfEventLogRecords(h) +# print "There are %d records" % numRecords + + num=0 + while 1: + objects = win32evtlog.ReadEventLog(h, win32evtlog.EVENTLOG_BACKWARDS_READ|win32evtlog.EVENTLOG_SEQUENTIAL_READ, 0) + if not objects: + break + for object in objects: + # get it for testing purposes, but dont print it. + msg = SafeFormatMessage(object, logType).encode("mbcs") + if object.Sid is not None: + try: + domain, user, typ = win32security.LookupAccountSid(computer, object.Sid) + sidDesc = "%s/%s" % (domain, user) + except win32security.error: + sidDesc = str(object.Sid) + user_desc = "Event associated with user %s" % (sidDesc,) + else: + user_desc = None + if dumpEachRecord: + if user_desc: + print user_desc + print msg + num = num + len(objects) + + if numRecords == num: + print "Successfully read all", numRecords, "records" + else: + print "Couldn't get all records - reported %d, but found %d" % (numRecords, num) + print "(Note that some other app may have written records while we were running!)" + win32evtlog.CloseEventLog(h) + +def Usage(): + print "Writes an event to the event log." + print "-w : Dont write any test records." + print "-r : Dont read the event log" + print "-c : computerName : Process the log on the specified computer" + print "-v : Verbose" + print "-t : LogType - Use the specified log - default = 'Application'" + + +def test(): + # check if running on Windows NT, if not, display notice and terminate + if win32api.GetVersion() & 0x80000000: + print "This sample only runs on NT" + return + + import sys, getopt + opts, args = getopt.getopt(sys.argv[1:], "rwh?c:t:v") + computer = None + do_read = do_write = 1 + + logType = "Application" + verbose = 0 + + if len(args)>0: + print "Invalid args" + usage() + return 1 + for opt, val in opts: + if opt == '-t': + logType = val + if opt == '-c': + computer = val + if opt in ['-h', '-?']: + Usage() + return + if opt=='-r': + do_read = 0 + if opt=='-w': + do_write = 0 + if opt=='-v': + verbose = verbose + 1 + if do_write: + ReportEvent(logType, 2, strings=["The message text for event 2"], data = "Raw\0Data") + ReportEvent(logType, 1, eventType=win32evtlog.EVENTLOG_WARNING_TYPE, strings=["A warning"], data = "Raw\0Data") + ReportEvent(logType, 1, eventType=win32evtlog.EVENTLOG_INFORMATION_TYPE, strings=["An info"], data = "Raw\0Data") + print "Successfully wrote 3 records to the log" + + if do_read: + ReadLog(computer, logType, verbose > 0) + +if __name__=='__main__': + test() diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/getfilever.py b/thirdparty/python25/Lib/site-packages/win32/Demos/getfilever.py new file mode 100644 index 000000000..d893d416a --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/getfilever.py @@ -0,0 +1,24 @@ +import os, win32api + +ver_strings=('Comments','InternalName','ProductName', + 'CompanyName','LegalCopyright','ProductVersion', + 'FileDescription','LegalTrademarks','PrivateBuild', + 'FileVersion','OriginalFilename','SpecialBuild') +fname = os.environ["comspec"] +d=win32api.GetFileVersionInfo(fname, '\\') +## backslash as parm returns dictionary of numeric info corresponding to VS_FIXEDFILEINFO struc +for n, v in d.items(): + print n, v + +pairs=win32api.GetFileVersionInfo(fname, '\\VarFileInfo\\Translation') +## \VarFileInfo\Translation returns list of available (language, codepage) pairs that can be used to retreive string info +## any other must be of the form \StringfileInfo\%04X%04X\parm_name, middle two are language/codepage pair returned from above +for lang, codepage in pairs: + print 'lang: ', lang, 'codepage:', codepage + for ver_string in ver_strings: + str_info=u'\\StringFileInfo\\%04X%04X\\%s' %(lang,codepage,ver_string) + ## print str_info + print ver_string, win32api.GetFileVersionInfo(fname, str_info) + + + \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/images/frowny.bmp b/thirdparty/python25/Lib/site-packages/win32/Demos/images/frowny.bmp new file mode 100644 index 0000000000000000000000000000000000000000..43e7621e2e081bc6200523f459f6d803d3133eaa GIT binary patch literal 3126 zcmZ?rHRE9b12YB&1`P%V1_dZ)WRL)hGeG4b90>XP(&1r`7#KJ~h+B+-Ta1B$kAZ-#sJub=T-p?2?<=A9ebx2`fUh%zvU;`ar_e1`x3$*=;y`D_dVYzzX@|Njg9 z|IhjVKY3PY-@3}gz{SMCh3N~3`6~baQ)mS)^Vu21*crt1{{M$tA;Tak!yw7PDGfpl zybK^D$iN`Tz$FGk4BQM1+&T;jIt&UZDT+;*flV3H{Sfob|Nn$rY z9wyk*$CS6c>XK7lV*61BWmJ2PDz5FbJ_Q2r)2lFfef7%6h`= z(!%W05cfmO&;9=&s};!RLlP~r`M9zkviVF5EKCe6W&i(UwStF%g@=KKn~8y&i2)K& z!XWPmF>nbma0%eb-3$zh3=E18_e0EY`2QcP70Bj8vL3SexC#(t^BI^}7?@Z(|NqBo z1p}811D6au(L$_X`2Sy&fkTvm16LWvz{tnI$Omyh#QaJB|6{cRVm>^&;fWSvKCWUA z#e7a)22S4D|Nq0SU}BJGVvsjwkTGSDfhSr_D;WO&*I|&Sh=rb@t z-48Z@$^ZXwE0E2{nrPv^KsFyaE|ATK*kZuIZot3}w*qTiKyo)`TtM;#BrX`(xER>5 zl%Ejuk$pj)6}Zf25Eo$(7g_uNKZRCkF$ice2tdLFnS_|X?f-uYt-xhI#I7JlfgnZ! z@~mJ06-q)7b8wLm^U3oCG3G<;Wnf`uU||+!U=wCw!=IuUSY#MjWLOxuSg_T(5YsS8 pWb^SyH+kkG+Xyb^8O#|#NQ{A9jDekjjR%Cl?NVfwXP(&1r`7#KJ~h+B+-Ta1B$kAZLDt|Nj}tvjVp- zAm*$5|4*qEIDEm*AjZxhruY9px)oscI0?)Y#iq=_ri>X%5cAFd|3|k1r_o>u%tVV} zJ`a;H50h}v|Nox<|2zEu54QrWpMgMJKonv60xS;k1;qU5|Nqgf04rf25Zw?(n7#mu zL(FGjU}IolOZopFZUtD90X?Abq$r36WM6Bi{~vAzSdsxAP=r$yL<6!fz#i(g*meMkWeyUU^if3hgbp8g&f@w5oBLLM4%*ceE}ANn2Ah6%!l{_tb_qM zx*;OSzJQ28N#v{t7D6@|!e$T`VGtKt`~N@03beR@XFX&q&`VmdFSHm0v={^+W+Iai z^SAx~PoWjK%!k+o_8bFwRzUPZ%)v!M)R5;3h+bSKBa1VzFoO_S10+S^%6beeG9Uz2 ziEILXHpp-mX0Rp({Lu|EoJ9tr62F*v$ "OpenPort" +stateMap = {} +for name, val in win32ras.__dict__.items(): + if name[:6]=="RASCS_": + stateMap[val] = name[6:] + +# Use a lock so the callback can tell the main thread when it is finished. +import win32event +callbackEvent = win32event.CreateEvent(None, 0, 0, None) + +def Callback( hras, msg, state, error, exterror): +# print "Callback called with ", hras, msg, state, error, exterror + stateName = stateMap.get(state, "Unknown state?") + print "Status is %s (%04lx), error code is %d" % (stateName, state, error) + finished = state in [win32ras.RASCS_Connected] + if finished: + win32event.SetEvent(callbackEvent) + if error != 0 or int( state ) == win32ras.RASCS_Disconnected: + # we know for sure this is a good place to hangup.... + print "Detected call failure: %s" % win32ras.GetErrorString( error ) + HangUp( hras ) + win32event.SetEvent(callbackEvent) + +def ShowConnections(): + print "All phone-book entries:" + for (name,) in win32ras.EnumEntries(): + print " ", name + print "Current Connections:" + for con in win32ras.EnumConnections(): + print " ", con + +def EditEntry(entryName): + try: + win32ras.EditPhonebookEntry(0,None,entryName) + except win32ras.error, (rc, function, msg): + print "Can not edit/find the RAS entry -", msg + +def HangUp( hras ): + # trap potential, irrelevant errors from win32ras.... + try: + win32ras.HangUp( hras ) + except: + print "Tried to hang up gracefully on error, but didn't work...." + return None + +def Connect(entryName, bUseCallback): + if bUseCallback: + theCallback = Callback + win32event.ResetEvent(callbackEvent) + else: + theCallback = None + # in order to *use* the username/password of a particular dun entry, one must + # explicitly get those params under win95.... + try: + dp, b = win32ras.GetEntryDialParams( None, entryName ) + except: + print "Couldn't find DUN entry: %s" % entryName + else: + hras, rc = win32ras.Dial(None, None, (entryName, "", "", dp[ 3 ], dp[ 4 ], ""),theCallback) + # hras, rc = win32ras.Dial(None, None, (entryName, ),theCallback) + # print hras, rc + if not bUseCallback and rc <> 0: + print "Could not dial the RAS connection:", win32ras.GetErrorString(rc) + hras = HangUp( hras ) + # don't wait here if there's no need to.... + elif bUseCallback and win32event.WaitForSingleObject(callbackEvent, 60000)!=win32event.WAIT_OBJECT_0: + print "Gave up waiting for the process to complete!" + # sdk docs state one must explcitly hangup, even if there's an error.... + try: + cs = win32ras.GetConnectStatus( hras ) + except: + # on error, attempt a hang up anyway.... + hras = HangUp( hras ) + else: + if int( cs[ 0 ] ) == win32ras.RASCS_Disconnected: + hras = HangUp( hras ) + return hras, rc + +def Disconnect( rasEntry ): + # Need to find the entry + name = string.lower( rasEntry ) + for hcon, entryName, devName, devType in win32ras.EnumConnections(): + if string.lower( entryName ) == name: + win32ras.HangUp( hcon ) + print "Disconnected from", rasEntry + break + else: + print "Could not find an open connection to", entryName + +usage = """ +Usage: %s [-s] [-l] [-c connection] [-d connection] +-l : List phone-book entries and current connections. +-s : Show status while connecting/disconnecting (uses callbacks) +-c : Connect to the specified phonebook name. +-d : Disconnect from the specified phonebook name. +-e : Edit the specified phonebook entry. +""" + +def main(): + import getopt + try: + opts, args = getopt.getopt(sys.argv[1:], "slc:d:e:") + except getopt.error, why: + print why + print usage % (os.path.basename(sys.argv[0],)) + return + + bCallback = 0 + if args or not opts: + print usage % (os.path.basename(sys.argv[0],)) + return + for opt, val in opts: + if opt=="-s": + bCallback = 1 + if opt=="-l": + ShowConnections() + if opt=="-c": + hras, rc = Connect(val, bCallback) + if hras != None: + print "hras: 0x%8lx, rc: 0x%04x" % ( hras, rc ) + if opt=="-d": + Disconnect(val) + if opt=="-e": + EditEntry(val) + +if __name__=='__main__': + main() diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/account_rights.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/account_rights.py new file mode 100644 index 000000000..49b3a768b --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/account_rights.py @@ -0,0 +1,31 @@ +import win32security,win32file,win32api,ntsecuritycon,win32con +from security_enums import TRUSTEE_TYPE,TRUSTEE_FORM,ACE_FLAGS,ACCESS_MODE + +new_privs = ((win32security.LookupPrivilegeValue('',ntsecuritycon.SE_SECURITY_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',ntsecuritycon.SE_CREATE_PERMANENT_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('','SeEnableDelegationPrivilege'),win32con.SE_PRIVILEGE_ENABLED) ##doesn't seem to be in ntsecuritycon.py ? + ) + +ph = win32api.GetCurrentProcess() +th = win32security.OpenProcessToken(ph,win32security.TOKEN_ALL_ACCESS) ##win32con.TOKEN_ADJUST_PRIVILEGES) +win32security.AdjustTokenPrivileges(th,0,new_privs) + +policy_handle = win32security.GetPolicyHandle('',win32security.POLICY_ALL_ACCESS) +tmp_sid = win32security.LookupAccountName('','tmp')[0] + +privs=[ntsecuritycon.SE_DEBUG_NAME,ntsecuritycon.SE_TCB_NAME,ntsecuritycon.SE_RESTORE_NAME,ntsecuritycon.SE_REMOTE_SHUTDOWN_NAME] +win32security.LsaAddAccountRights(policy_handle,tmp_sid,privs) + +privlist=win32security.LsaEnumerateAccountRights(policy_handle,tmp_sid) +for priv in privlist: + print priv + +privs=[ntsecuritycon.SE_DEBUG_NAME,ntsecuritycon.SE_TCB_NAME] +win32security.LsaRemoveAccountRights(policy_handle,tmp_sid,0,privs) + +privlist=win32security.LsaEnumerateAccountRights(policy_handle,tmp_sid) +for priv in privlist: + print priv + +win32security.LsaClose(policy_handle) + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/explicit_entries.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/explicit_entries.py new file mode 100644 index 000000000..d0007e952 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/explicit_entries.py @@ -0,0 +1,144 @@ +import os +import win32security,win32file,win32api,ntsecuritycon,win32con +from security_enums import TRUSTEE_TYPE,TRUSTEE_FORM,ACE_FLAGS,ACCESS_MODE + +fname = os.path.join(win32api.GetTempPath(), "win32security_test.txt") +f=open(fname, "w") +f.write("Hello from Python\n"); +f.close() +print "Testing on file", fname + +new_privs = ((win32security.LookupPrivilegeValue('',ntsecuritycon.SE_SECURITY_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',ntsecuritycon.SE_SHUTDOWN_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',ntsecuritycon.SE_RESTORE_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',ntsecuritycon.SE_TAKE_OWNERSHIP_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',ntsecuritycon.SE_CREATE_PERMANENT_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('','SeEnableDelegationPrivilege'),win32con.SE_PRIVILEGE_ENABLED) ##doesn't seem to be in ntsecuritycon.py ? + ) + +ph = win32api.GetCurrentProcess() +th = win32security.OpenProcessToken(ph,win32security.TOKEN_ALL_ACCESS) ##win32con.TOKEN_ADJUST_PRIVILEGES) +win32security.AdjustTokenPrivileges(th,0,new_privs) + +all_security_info = \ + win32security.OWNER_SECURITY_INFORMATION|win32security.GROUP_SECURITY_INFORMATION| \ + win32security.DACL_SECURITY_INFORMATION|win32security.SACL_SECURITY_INFORMATION + +sd=win32security.GetFileSecurity(fname,all_security_info) + +old_sacl=sd.GetSecurityDescriptorSacl() +if old_sacl==None: + old_sacl=win32security.ACL() +old_dacl=sd.GetSecurityDescriptorDacl() +if old_dacl==None: + old_dacl=win32security.ACL() + +my_sid = win32security.GetTokenInformation(th,ntsecuritycon.TokenUser)[0] +tmp_sid = win32security.LookupAccountName('','tmp')[0] +pwr_sid = win32security.LookupAccountName('','Power Users')[0] + + +## MultipleTrustee,MultipleTrusteeOperation,TrusteeForm,TrusteeType,Identifier +## first two are ignored +my_trustee = {} +my_trustee['MultipleTrustee']=None +my_trustee['MultipleTrusteeOperation']=0 +my_trustee['TrusteeForm']=TRUSTEE_FORM.TRUSTEE_IS_SID +my_trustee['TrusteeType']=TRUSTEE_TYPE.TRUSTEE_IS_USER +my_trustee['Identifier']=my_sid + +tmp_trustee = {} +tmp_trustee['MultipleTrustee']=None +tmp_trustee['MultipleTrusteeOperation']=0 +tmp_trustee['TrusteeForm']=TRUSTEE_FORM.TRUSTEE_IS_NAME +tmp_trustee['TrusteeType']=TRUSTEE_TYPE.TRUSTEE_IS_USER +tmp_trustee['Identifier']='rupole\\tmp' + +pwr_trustee = {} +pwr_trustee['MultipleTrustee']=None +pwr_trustee['MultipleTrusteeOperation']=0 +pwr_trustee['TrusteeForm']=TRUSTEE_FORM.TRUSTEE_IS_SID +pwr_trustee['TrusteeType']=TRUSTEE_TYPE.TRUSTEE_IS_USER +pwr_trustee['Identifier']=pwr_sid + +expl_list=[] +expl_list.append( + { + 'Trustee':my_trustee, + 'Inheritance':ACE_FLAGS.NO_INHERITANCE, + 'AccessMode':ACCESS_MODE.SET_AUDIT_SUCCESS, ##|ACCESS_MODE.SET_AUDIT_FAILURE, + 'AccessPermissions':win32con.GENERIC_ALL + } + ) + +expl_list.append( + { + 'Trustee':my_trustee, + 'Inheritance':ACE_FLAGS.NO_INHERITANCE, + 'AccessMode':ACCESS_MODE.SET_AUDIT_FAILURE, + 'AccessPermissions':win32con.GENERIC_ALL + } + ) + +expl_list.append( + { + 'Trustee':tmp_trustee, + 'Inheritance':ACE_FLAGS.NO_INHERITANCE, + 'AccessMode':ACCESS_MODE.SET_AUDIT_SUCCESS, + 'AccessPermissions':win32con.GENERIC_ALL + } + ) + +expl_list.append( + { + 'Trustee':tmp_trustee, + 'Inheritance':ACE_FLAGS.NO_INHERITANCE, + 'AccessMode':ACCESS_MODE.SET_AUDIT_FAILURE, + 'AccessPermissions':win32con.GENERIC_ALL + } + ) +old_sacl.SetEntriesInAcl(expl_list) + +expl_list=[] +expl_list.append( + { + 'Trustee':tmp_trustee, + 'Inheritance':ACE_FLAGS.NO_INHERITANCE, + 'AccessMode':ACCESS_MODE.DENY_ACCESS, + 'AccessPermissions':win32con.DELETE + } + ) + +expl_list.append( + { + 'Trustee':tmp_trustee, + 'Inheritance':ACE_FLAGS.NO_INHERITANCE, + 'AccessMode':ACCESS_MODE.GRANT_ACCESS, + 'AccessPermissions':win32con.WRITE_OWNER + } + ) +expl_list.append( + { + 'Trustee':pwr_trustee, + 'Inheritance':ACE_FLAGS.NO_INHERITANCE, + 'AccessMode':ACCESS_MODE.GRANT_ACCESS, + 'AccessPermissions':win32con.GENERIC_READ + } + ) +expl_list.append( + { + 'Trustee':my_trustee, + 'Inheritance':ACE_FLAGS.NO_INHERITANCE, + 'AccessMode':ACCESS_MODE.GRANT_ACCESS, + 'AccessPermissions':win32con.GENERIC_ALL + } + ) + +old_dacl.SetEntriesInAcl(expl_list) +sd.SetSecurityDescriptorSacl(1,old_sacl,1) +sd.SetSecurityDescriptorDacl(1,old_dacl,1) +sd.SetSecurityDescriptorOwner(pwr_sid,1) + +win32security.SetFileSecurity(fname, + all_security_info, + sd) diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/get_policy_info.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/get_policy_info.py new file mode 100644 index 000000000..1d7b4fcfb --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/get_policy_info.py @@ -0,0 +1,23 @@ +import win32security,win32file,win32api,ntsecuritycon,win32con +policy_handle = win32security.GetPolicyHandle('rupole',win32security.POLICY_ALL_ACCESS) + +## mod_nbr, mod_time = win32security.LsaQueryInformationPolicy(policy_handle,win32security.PolicyModificationInformation) +## print mod_nbr, mod_time + +domain_name,dns_domain_name, dns_forest_name, domain_guid, domain_sid = \ + win32security.LsaQueryInformationPolicy(policy_handle,win32security.PolicyDnsDomainInformation) +print domain_name, dns_domain_name, dns_forest_name, domain_guid, domain_sid + +event_audit_info=win32security.LsaQueryInformationPolicy(policy_handle,win32security.PolicyAuditEventsInformation) +print event_audit_info + +domain_name,sid =win32security.LsaQueryInformationPolicy(policy_handle,win32security.PolicyPrimaryDomainInformation) +print domain_name, sid + +domain_name,sid =win32security.LsaQueryInformationPolicy(policy_handle,win32security.PolicyAccountDomainInformation) +print domain_name, sid + +server_role = win32security.LsaQueryInformationPolicy(policy_handle,win32security.PolicyLsaServerRoleInformation) +print 'server role: ',server_role + +win32security.LsaClose(policy_handle) diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/list_rights.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/list_rights.py new file mode 100644 index 000000000..8a0c3e6e9 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/list_rights.py @@ -0,0 +1,20 @@ +import win32security,win32file,win32api,ntsecuritycon,win32con +from security_enums import TRUSTEE_TYPE,TRUSTEE_FORM,ACE_FLAGS,ACCESS_MODE + +new_privs = ((win32security.LookupPrivilegeValue('',ntsecuritycon.SE_SECURITY_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',ntsecuritycon.SE_CREATE_PERMANENT_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('','SeEnableDelegationPrivilege'),win32con.SE_PRIVILEGE_ENABLED) ##doesn't seem to be in ntsecuritycon.py ? + ) + +ph = win32api.GetCurrentProcess() +th = win32security.OpenProcessToken(ph,win32security.TOKEN_ALL_ACCESS) ##win32con.TOKEN_ADJUST_PRIVILEGES) +win32security.AdjustTokenPrivileges(th,0,new_privs) + +policy_handle = win32security.GetPolicyHandle('',win32security.POLICY_ALL_ACCESS) + +sidlist=win32security.LsaEnumerateAccountsWithUserRight(policy_handle,ntsecuritycon.SE_RESTORE_NAME) +for sid in sidlist: + print win32security.LookupAccountSid('',sid) + +win32security.LsaClose(policy_handle) + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/localized_names.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/localized_names.py new file mode 100644 index 000000000..df5549181 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/localized_names.py @@ -0,0 +1,61 @@ +# A Python port of the MS knowledge base article Q157234 +# "How to deal with localized and renamed user and group names" +# http://support.microsoft.com/default.aspx?kbid=157234 + +import sys +from win32net import NetUserModalsGet +from win32security import LookupAccountSid +import pywintypes +from ntsecuritycon import * + +def LookupAliasFromRid(TargetComputer, Rid): + # Sid is the same regardless of machine, since the well-known + # BUILTIN domain is referenced. + sid = pywintypes.SID() + sid.Initialize(SECURITY_NT_AUTHORITY, 2) + + for i, r in enumerate((SECURITY_BUILTIN_DOMAIN_RID, Rid)): + sid.SetSubAuthority(i, r) + + name, domain, typ = LookupAccountSid(TargetComputer, sid) + return name + +def LookupUserGroupFromRid(TargetComputer, Rid): + # get the account domain Sid on the target machine + # note: if you were looking up multiple sids based on the same + # account domain, only need to call this once. + umi2 = NetUserModalsGet(TargetComputer, 2) + domain_sid = umi2['domain_id'] + + SubAuthorityCount = domain_sid.GetSubAuthorityCount() + + # create and init new sid with acct domain Sid + acct Rid + sid = pywintypes.SID() + sid.Initialize(domain_sid.GetSidIdentifierAuthority(), + SubAuthorityCount+1) + + # copy existing subauthorities from account domain Sid into + # new Sid + for i in range(SubAuthorityCount): + sid.SetSubAuthority(i, domain_sid.GetSubAuthority(i)) + + # append Rid to new Sid + sid.SetSubAuthority(SubAuthorityCount, Rid) + + name, domain, typ = LookupAccountSid(TargetComputer, sid) + return name + +def main(): + if len(sys.argv) == 2: + targetComputer = sys.argv[1] + else: + targetComputer = None + + name = LookupUserGroupFromRid(targetComputer, DOMAIN_USER_RID_ADMIN) + print "'Administrator' user name = %s" % (name,) + + name = LookupAliasFromRid(targetComputer, DOMAIN_ALIAS_RID_ADMINS) + print "'Administrators' local group/alias name = %s" % (name,) + +if __name__=='__main__': + main() diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/lsaregevent.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/lsaregevent.py new file mode 100644 index 000000000..6112d1d7a --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/lsaregevent.py @@ -0,0 +1,8 @@ +import win32security, win32event +evt = win32event.CreateEvent(None,0,0,None) +win32security.LsaRegisterPolicyChangeNotification(win32security.PolicyNotifyAuditEventsInformation, evt) +print "Waiting for you change Audit policy in Management console ..." +ret_code=win32event.WaitForSingleObject(evt,1000000000) +## should come back when you change Audit policy in Management console ... +print ret_code +win32security.LsaUnregisterPolicyChangeNotification(win32security.PolicyNotifyAuditEventsInformation, evt) diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/lsastore.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/lsastore.py new file mode 100644 index 000000000..685e40162 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/lsastore.py @@ -0,0 +1,11 @@ +import win32security +policy_handle = win32security.GetPolicyHandle('',win32security.POLICY_ALL_ACCESS) +privatedata='some sensitive data' +keyname='tmp' +win32security.LsaStorePrivateData(policy_handle,keyname,privatedata) +retrieveddata=win32security.LsaRetrievePrivateData(policy_handle,keyname) +assert retrieveddata==privatedata + +## passing None deletes key +win32security.LsaStorePrivateData(policy_handle,keyname,None) +win32security.LsaClose(policy_handle) diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/query_information.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/query_information.py new file mode 100644 index 000000000..33563dd40 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/query_information.py @@ -0,0 +1,25 @@ +from ntsecuritycon import * +import win32api, win32security, winerror + +# This is a Python implementation of win32api.GetDomainName() +def GetDomainName(): + try: + tok = win32security.OpenThreadToken(win32api.GetCurrentThread(), + TOKEN_QUERY, 1) + except win32api.error, details: + if details[0] != winerror.ERROR_NO_TOKEN: + raise + # attempt to open the process token, since no thread token + # exists + tok = win32security.OpenProcessToken(win32api.GetCurrentProcess(), + TOKEN_QUERY) + sid, attr = win32security.GetTokenInformation(tok, TokenUser) + win32api.CloseHandle(tok) + + name, dom, typ = win32security.LookupAccountSid(None, sid) + return dom + +if __name__=='__main__': + print "Domain name is", GetDomainName() + + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/regsave_sa.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/regsave_sa.py new file mode 100644 index 000000000..100451441 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/regsave_sa.py @@ -0,0 +1,37 @@ +fname='h:\\tmp.reg' + +import win32api, win32con, win32security, ntsecuritycon, pywintypes,os +## regsave will not overwrite a file +if os.path.isfile(fname): + os.remove(fname) + +new_privs = ((win32security.LookupPrivilegeValue('',ntsecuritycon.SE_SECURITY_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',ntsecuritycon.SE_TCB_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',ntsecuritycon.SE_BACKUP_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',ntsecuritycon.SE_RESTORE_NAME),win32con.SE_PRIVILEGE_ENABLED) + + ) +ph = win32api.GetCurrentProcess() +th = win32security.OpenProcessToken(ph,win32security.TOKEN_ALL_ACCESS|win32con.TOKEN_ADJUST_PRIVILEGES) +win32security.AdjustTokenPrivileges(th,0,new_privs) +my_sid = win32security.GetTokenInformation(th,ntsecuritycon.TokenUser)[0] + +hklm=win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE,None,0,win32con.KEY_ALL_ACCESS) +skey=win32api.RegOpenKey(hklm,'SYSTEM',0,win32con.KEY_ALL_ACCESS) + +sa=pywintypes.SECURITY_ATTRIBUTES() +sd=pywintypes.SECURITY_DESCRIPTOR() +sa.SECURITY_DESCRIPTOR=sd +acl=pywintypes.ACL() + +pwr_sid = win32security.LookupAccountName('','Power Users')[0] +acl.AddAccessAllowedAce(win32con.ACL_REVISION,win32con.GENERIC_READ|win32con.ACCESS_SYSTEM_SECURITY,my_sid) +sd.SetSecurityDescriptorDacl(1,acl,0) +sd.SetSecurityDescriptorOwner(pwr_sid,0) +sa.bInheritHandle=1 +assert sa.SECURITY_DESCRIPTOR is sd + +win32api.RegSaveKey(skey,fname,sa) + + + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/regsecurity.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/regsecurity.py new file mode 100644 index 000000000..8320a61e9 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/regsecurity.py @@ -0,0 +1,20 @@ +import win32api, win32con, win32security, ntsecuritycon + +new_privs = ((win32security.LookupPrivilegeValue('',ntsecuritycon.SE_SECURITY_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',ntsecuritycon.SE_TCB_NAME),win32con.SE_PRIVILEGE_ENABLED) + ) +ph = win32api.GetCurrentProcess() +th = win32security.OpenProcessToken(ph,win32security.TOKEN_ALL_ACCESS|win32con.TOKEN_ADJUST_PRIVILEGES) + +win32security.AdjustTokenPrivileges(th,0,new_privs) +hkey=win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE,None,0,win32con.KEY_ALL_ACCESS) +win32api.RegCreateKey(hkey,'SYSTEM\\NOTMP') +notmpkey=win32api.RegOpenKey(hkey,'SYSTEM\\notmp',0,win32con.ACCESS_SYSTEM_SECURITY) + +tmp_sid = win32security.LookupAccountName('','tmp')[0] +sacl=win32security.ACL() +sacl.AddAuditAccessAce(win32security.ACL_REVISION,win32con.GENERIC_ALL,tmp_sid,1,1) + +sd=win32security.SECURITY_DESCRIPTOR() +sd.SetSecurityDescriptorSacl(1,sacl,1) +win32api.RegSetKeySecurity(notmpkey,win32con.SACL_SECURITY_INFORMATION,sd) diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/sa_inherit.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/sa_inherit.py new file mode 100644 index 000000000..8ade8868c --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/sa_inherit.py @@ -0,0 +1,7 @@ +import pywintypes, win32security +sa=pywintypes.SECURITY_ATTRIBUTES() +tmp_sid=win32security.LookupAccountName('','tmp')[0] +sa.SetSecurityDescriptorOwner(tmp_sid,0) +sid=sa.SECURITY_DESCRIPTOR.GetSecurityDescriptorOwner() +print win32security.LookupAccountSid('',sid) + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/security_enums.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/security_enums.py new file mode 100644 index 000000000..df53cde03 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/security_enums.py @@ -0,0 +1,228 @@ +import win32security +class Enum: + def __init__(self,*consts): + for const in consts: + setattr(self,const,getattr(win32security,const)) + +TOKEN_INFORMATION_CLASS = Enum( + 'TokenDefaultDacl', + 'TokenGroups', + 'TokenGroupsAndPrivileges', + 'TokenImpersonationLevel', + 'TokenOwner', + 'TokenPrimaryGroup', + 'TokenPrivileges', + 'TokenRestrictedSids', + 'TokenSandBoxInert', + 'TokenSessionId', + 'TokenSource', + 'TokenStatistics', + 'TokenType', + 'TokenUser') + +TOKEN_TYPE = Enum( + 'TokenPrimary', + 'TokenImpersonation') + +POLICY_AUDIT_EVENT_TYPE = Enum( + 'AuditCategorySystem', + 'AuditCategoryLogon', + 'AuditCategoryObjectAccess', + 'AuditCategoryPrivilegeUse', + 'AuditCategoryDetailedTracking', + 'AuditCategoryPolicyChange', + 'AuditCategoryAccountManagement', + 'AuditCategoryDirectoryServiceAccess', + 'AuditCategoryAccountLogon') + +POLICY_INFORMATION_CLASS = Enum( + 'PolicyAuditLogInformation', + 'PolicyAuditEventsInformation', + 'PolicyPrimaryDomainInformation', + 'PolicyPdAccountInformation', + 'PolicyAccountDomainInformation', + 'PolicyLsaServerRoleInformation', + 'PolicyReplicaSourceInformation', + 'PolicyDefaultQuotaInformation', + 'PolicyModificationInformation', + 'PolicyAuditFullSetInformation', + 'PolicyAuditFullQueryInformation', + 'PolicyDnsDomainInformation') + +POLICY_LSA_SERVER_ROLE = Enum( + 'PolicyServerRoleBackup', + 'PolicyServerRolePrimary') + +## access modes for opening a policy handle - this is not a real enum +POLICY_ACCESS_MODES = Enum( + 'POLICY_VIEW_LOCAL_INFORMATION', + 'POLICY_VIEW_AUDIT_INFORMATION', + 'POLICY_GET_PRIVATE_INFORMATION', + 'POLICY_TRUST_ADMIN', + 'POLICY_CREATE_ACCOUNT', + 'POLICY_CREATE_SECRET', + 'POLICY_CREATE_PRIVILEGE', + 'POLICY_SET_DEFAULT_QUOTA_LIMITS', + 'POLICY_SET_AUDIT_REQUIREMENTS', + 'POLICY_AUDIT_LOG_ADMIN', + 'POLICY_SERVER_ADMIN', + 'POLICY_LOOKUP_NAMES', + 'POLICY_NOTIFICATION', + 'POLICY_ALL_ACCESS', + 'POLICY_READ', + 'POLICY_WRITE', + 'POLICY_EXECUTE') + +## EventAuditingOptions flags - not a real enum +POLICY_AUDIT_EVENT_OPTIONS_FLAGS = Enum( + 'POLICY_AUDIT_EVENT_UNCHANGED', + 'POLICY_AUDIT_EVENT_SUCCESS', + 'POLICY_AUDIT_EVENT_FAILURE', + 'POLICY_AUDIT_EVENT_NONE') + +# AceType in ACE_HEADER - not a real enum +ACE_TYPE = Enum( + 'ACCESS_ALLOWED_ACE_TYPE', + 'ACCESS_ALLOWED_OBJECT_ACE_TYPE', + 'ACCESS_DENIED_ACE_TYPE', + 'ACCESS_DENIED_OBJECT_ACE_TYPE', + 'SYSTEM_AUDIT_ACE_TYPE', + 'SYSTEM_AUDIT_OBJECT_ACE_TYPE') + +#bit flags for AceFlags - not a real enum +ACE_FLAGS = Enum( + 'CONTAINER_INHERIT_ACE', + 'FAILED_ACCESS_ACE_FLAG', + 'INHERIT_ONLY_ACE', + 'INHERITED_ACE', + 'NO_PROPAGATE_INHERIT_ACE', + 'OBJECT_INHERIT_ACE', + 'SUCCESSFUL_ACCESS_ACE_FLAG', + 'NO_INHERITANCE', + 'SUB_CONTAINERS_AND_OBJECTS_INHERIT', + 'SUB_CONTAINERS_ONLY_INHERIT', + 'SUB_OBJECTS_ONLY_INHERIT') + +# used in SetEntriesInAcl - very similar to ACE_TYPE +ACCESS_MODE = Enum( + 'NOT_USED_ACCESS', + 'GRANT_ACCESS', + 'SET_ACCESS', + 'DENY_ACCESS', + 'REVOKE_ACCESS', + 'SET_AUDIT_SUCCESS', + 'SET_AUDIT_FAILURE') + +# Bit flags in PSECURITY_DESCRIPTOR->Control - not a real enum +SECURITY_DESCRIPTOR_CONTROL_FLAGS = Enum( + 'SE_DACL_AUTO_INHERITED', ## win2k and up + 'SE_SACL_AUTO_INHERITED', ## win2k and up + 'SE_DACL_PROTECTED', ## win2k and up + 'SE_SACL_PROTECTED', ## win2k and up + 'SE_DACL_DEFAULTED', + 'SE_DACL_PRESENT', + 'SE_GROUP_DEFAULTED', + 'SE_OWNER_DEFAULTED', + 'SE_SACL_PRESENT', + 'SE_SELF_RELATIVE', + 'SE_SACL_DEFAULTED') + +# types of SID +SID_NAME_USE = Enum( + 'SidTypeUser', + 'SidTypeGroup', + 'SidTypeDomain', + 'SidTypeAlias', + 'SidTypeWellKnownGroup', + 'SidTypeDeletedAccount', + 'SidTypeInvalid', + 'SidTypeUnknown', + 'SidTypeComputer') + +## bit flags, not a real enum +TOKEN_ACCESS_PRIVILEGES = Enum( + 'TOKEN_ADJUST_DEFAULT', + 'TOKEN_ADJUST_GROUPS', + 'TOKEN_ADJUST_PRIVILEGES', + 'TOKEN_ALL_ACCESS', + 'TOKEN_ASSIGN_PRIMARY', + 'TOKEN_DUPLICATE', + 'TOKEN_EXECUTE', + 'TOKEN_IMPERSONATE', + 'TOKEN_QUERY', + 'TOKEN_QUERY_SOURCE', + 'TOKEN_READ', + 'TOKEN_WRITE') + +SECURITY_IMPERSONATION_LEVEL = Enum( + 'SecurityAnonymous', + 'SecurityIdentification', + 'SecurityImpersonation', + 'SecurityDelegation') + +POLICY_SERVER_ENABLE_STATE = Enum( + 'PolicyServerEnabled', + 'PolicyServerDisabled') + +POLICY_NOTIFICATION_INFORMATION_CLASS = Enum( + 'PolicyNotifyAuditEventsInformation', + 'PolicyNotifyAccountDomainInformation', + 'PolicyNotifyServerRoleInformation', + 'PolicyNotifyDnsDomainInformation', + 'PolicyNotifyDomainEfsInformation', + 'PolicyNotifyDomainKerberosTicketInformation', + 'PolicyNotifyMachineAccountPasswordInformation') + +TRUSTED_INFORMATION_CLASS = Enum( + 'TrustedDomainNameInformation', + 'TrustedControllersInformation', + 'TrustedPosixOffsetInformation', + 'TrustedPasswordInformation', + 'TrustedDomainInformationBasic', + 'TrustedDomainInformationEx', + 'TrustedDomainAuthInformation', + 'TrustedDomainFullInformation', + 'TrustedDomainAuthInformationInternal', + 'TrustedDomainFullInformationInternal', + 'TrustedDomainInformationEx2Internal', + 'TrustedDomainFullInformation2Internal') + +TRUSTEE_FORM = Enum( + 'TRUSTEE_IS_SID', + 'TRUSTEE_IS_NAME', + 'TRUSTEE_BAD_FORM', + 'TRUSTEE_IS_OBJECTS_AND_SID', + 'TRUSTEE_IS_OBJECTS_AND_NAME') + +TRUSTEE_TYPE = Enum( + 'TRUSTEE_IS_UNKNOWN', + 'TRUSTEE_IS_USER', + 'TRUSTEE_IS_GROUP', + 'TRUSTEE_IS_DOMAIN', + 'TRUSTEE_IS_ALIAS', + 'TRUSTEE_IS_WELL_KNOWN_GROUP', + 'TRUSTEE_IS_DELETED', + 'TRUSTEE_IS_INVALID', + 'TRUSTEE_IS_COMPUTER') + +## SE_OBJECT_TYPE - securable objects +SE_OBJECT_TYPE = Enum( + 'SE_UNKNOWN_OBJECT_TYPE', + 'SE_FILE_OBJECT', + 'SE_SERVICE', + 'SE_PRINTER', + 'SE_REGISTRY_KEY', + 'SE_LMSHARE', + 'SE_KERNEL_OBJECT', + 'SE_WINDOW_OBJECT', + 'SE_DS_OBJECT', + 'SE_DS_OBJECT_ALL', + 'SE_PROVIDER_DEFINED_OBJECT', + 'SE_WMIGUID_OBJECT', + 'SE_REGISTRY_WOW64_32KEY') + +PRIVILEGE_FLAGS = Enum( + 'SE_PRIVILEGE_ENABLED_BY_DEFAULT', + 'SE_PRIVILEGE_ENABLED', + 'SE_PRIVILEGE_USED_FOR_ACCESS') + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/set_file_audit.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/set_file_audit.py new file mode 100644 index 000000000..0c2096258 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/set_file_audit.py @@ -0,0 +1,58 @@ +import win32security,win32file,win32api,ntsecuritycon,win32con, os +from win32security import ACL_REVISION_DS, CONTAINER_INHERIT_ACE, OBJECT_INHERIT_ACE, \ + PROTECTED_DACL_SECURITY_INFORMATION, DACL_SECURITY_INFORMATION, SACL_SECURITY_INFORMATION, \ + OWNER_SECURITY_INFORMATION, GROUP_SECURITY_INFORMATION, SE_FILE_OBJECT + +## SE_SECURITY_NAME needed to access SACL, SE_RESTORE_NAME needed to change owner to someone other than yourself +new_privs = ((win32security.LookupPrivilegeValue('',ntsecuritycon.SE_SECURITY_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',ntsecuritycon.SE_RESTORE_NAME),win32con.SE_PRIVILEGE_ENABLED), + ) +ph = win32api.GetCurrentProcess() +th = win32security.OpenProcessToken(ph,win32security.TOKEN_ALL_ACCESS|win32con.TOKEN_ADJUST_PRIVILEGES) +modified_privs=win32security.AdjustTokenPrivileges(th,0,new_privs) + +## look up a few sids that should be available on most systems +my_sid = win32security.GetTokenInformation(th,ntsecuritycon.TokenUser)[0] +pwr_sid = win32security.LookupAccountName('','Power Users')[0] +admin_sid = win32security.LookupAccountName('','Administrators')[0] +everyone_sid=win32security.LookupAccountName('','EveryOne')[0] + +## create a dir and set security so Everyone has read permissions, and all files and subdirs inherit its ACLs +temp_dir=win32api.GetTempPath() +dir_name=win32api.GetTempFileName(temp_dir,'sfa')[0] +os.remove(dir_name) +os.mkdir(dir_name) +dir_dacl=win32security.ACL() +dir_dacl.AddAccessAllowedAceEx(ACL_REVISION_DS, CONTAINER_INHERIT_ACE|OBJECT_INHERIT_ACE, win32con.GENERIC_READ, everyone_sid) +## make sure current user has permissions on dir +dir_dacl.AddAccessAllowedAceEx(ACL_REVISION_DS, CONTAINER_INHERIT_ACE|OBJECT_INHERIT_ACE, win32con.GENERIC_ALL, my_sid) +## keep dir from inheriting any permissions so it only has ACEs explicitely set here +win32security.SetNamedSecurityInfo(dir_name, SE_FILE_OBJECT, + OWNER_SECURITY_INFORMATION|GROUP_SECURITY_INFORMATION|DACL_SECURITY_INFORMATION|PROTECTED_DACL_SECURITY_INFORMATION, + pwr_sid, pwr_sid, dir_dacl, None) + +## Create a file in the dir and add some specific permissions to it +fname=win32api.GetTempFileName(dir_name,'sfa')[0] +print fname +file_sd=win32security.GetNamedSecurityInfo(fname, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION|SACL_SECURITY_INFORMATION) +file_dacl=file_sd.GetSecurityDescriptorDacl() +file_sacl=file_sd.GetSecurityDescriptorSacl() + +if file_dacl is None: + file_dacl=win32security.ACL() +if file_sacl is None: + file_sacl=win32security.ACL() + +file_dacl.AddAccessDeniedAce(file_dacl.GetAclRevision(),win32con.DELETE,admin_sid) +file_dacl.AddAccessDeniedAce(file_dacl.GetAclRevision(),win32con.DELETE,my_sid) +file_dacl.AddAccessAllowedAce(file_dacl.GetAclRevision(),win32con.GENERIC_ALL,pwr_sid) +file_sacl.AddAuditAccessAce(file_dacl.GetAclRevision(),win32con.GENERIC_ALL,my_sid,True,True) + +win32security.SetNamedSecurityInfo(fname, SE_FILE_OBJECT, + DACL_SECURITY_INFORMATION|SACL_SECURITY_INFORMATION, + None, None, file_dacl, file_sacl) + +win32security.AdjustTokenPrivileges(th, 0, modified_privs) + + + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/set_file_owner.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/set_file_owner.py new file mode 100644 index 000000000..7de7a84ee --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/set_file_owner.py @@ -0,0 +1,38 @@ +fname=r'h:\tmp.txt' + +import win32security,win32file,win32api,ntsecuritycon,win32con + +new_privs = ((win32security.LookupPrivilegeValue('',ntsecuritycon.SE_SECURITY_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',ntsecuritycon.SE_SHUTDOWN_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',ntsecuritycon.SE_TCB_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',ntsecuritycon.SE_RESTORE_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',ntsecuritycon.SE_TAKE_OWNERSHIP_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',ntsecuritycon.SE_CREATE_PERMANENT_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('','SeEnableDelegationPrivilege'),win32con.SE_PRIVILEGE_ENABLED) ##doesn't seem to be in ntsecuritycon.py ? + ) + +ph = win32api.GetCurrentProcess() +th = win32security.OpenProcessToken(ph,win32security.TOKEN_ALL_ACCESS|win32con.TOKEN_ADJUST_PRIVILEGES) +win32security.AdjustTokenPrivileges(th,0,new_privs) + +all_security_info = \ + win32security.OWNER_SECURITY_INFORMATION|win32security.GROUP_SECURITY_INFORMATION| \ + win32security.DACL_SECURITY_INFORMATION|win32security.SACL_SECURITY_INFORMATION + +sd=win32security.GetFileSecurity(fname,all_security_info) +old_dacl=sd.GetSecurityDescriptorDacl() +old_sacl=sd.GetSecurityDescriptorSacl() +old_group=sd.GetSecurityDescriptorGroup() + +new_sd=win32security.SECURITY_DESCRIPTOR() +print "relative, valid, size: ",new_sd.IsSelfRelative(), new_sd.IsValid(), new_sd.GetLength() + +my_sid = win32security.GetTokenInformation(th,ntsecuritycon.TokenUser)[0] +tmp_sid = win32security.LookupAccountName('','tmp')[0] + +new_sd.SetSecurityDescriptorSacl(1,old_sacl,1) +new_sd.SetSecurityDescriptorDacl(1,old_dacl,1) +new_sd.SetSecurityDescriptorOwner(tmp_sid,0) +new_sd.SetSecurityDescriptorGroup(old_group,0) + +win32security.SetFileSecurity(fname,all_security_info,new_sd) diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/set_policy_info.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/set_policy_info.py new file mode 100644 index 000000000..e41b63fba --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/set_policy_info.py @@ -0,0 +1,17 @@ +import win32security,win32file,win32api,ntsecuritycon,win32con +policy_handle = win32security.GetPolicyHandle('rupole',win32security.POLICY_ALL_ACCESS) + +event_audit_info=win32security.LsaQueryInformationPolicy(policy_handle,win32security.PolicyAuditEventsInformation) +print event_audit_info + +new_audit_info=list(event_audit_info[1]) +new_audit_info[win32security.AuditCategoryPolicyChange]= \ + win32security.POLICY_AUDIT_EVENT_SUCCESS|win32security.POLICY_AUDIT_EVENT_FAILURE +new_audit_info[win32security.AuditCategoryAccountLogon]= \ + win32security.POLICY_AUDIT_EVENT_SUCCESS|win32security.POLICY_AUDIT_EVENT_FAILURE +new_audit_info[win32security.AuditCategoryLogon]= \ + win32security.POLICY_AUDIT_EVENT_SUCCESS|win32security.POLICY_AUDIT_EVENT_FAILURE + +win32security.LsaSetInformationPolicy(policy_handle, win32security.PolicyAuditEventsInformation, (1,new_audit_info)) + +win32security.LsaClose(policy_handle) diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/setkernelobjectsecurity.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/setkernelobjectsecurity.py new file mode 100644 index 000000000..4d89bc67b --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/setkernelobjectsecurity.py @@ -0,0 +1,67 @@ +import win32security,win32api,win32con, win32process +## You need SE_RESTORE_NAME to be able to set the owner of a security descriptor to anybody +## other than yourself or your primary group. Most admin logins don't have it by default, so +## enabling it may fail +new_privs = ((win32security.LookupPrivilegeValue('',win32security.SE_SECURITY_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_TCB_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_SHUTDOWN_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_RESTORE_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_TAKE_OWNERSHIP_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_CREATE_PERMANENT_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_ENABLE_DELEGATION_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_CHANGE_NOTIFY_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_DEBUG_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_PROF_SINGLE_PROCESS_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_SYSTEM_PROFILE_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_LOCK_MEMORY_NAME),win32con.SE_PRIVILEGE_ENABLED) + ) + +all_info=win32security.OWNER_SECURITY_INFORMATION|win32security.GROUP_SECURITY_INFORMATION| \ + win32security.DACL_SECURITY_INFORMATION|win32security.SACL_SECURITY_INFORMATION + +pid=win32api.GetCurrentProcessId() +ph=win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS,0,pid) +## PROCESS_ALL_ACCESS does not contain ACCESS_SYSTEM_SECURITY (neccessy to do SACLs) +th = win32security.OpenProcessToken(ph,win32security.TOKEN_ALL_ACCESS) ##win32con.TOKEN_ADJUST_PRIVILEGES) +old_privs=win32security.AdjustTokenPrivileges(th,0,new_privs) +my_sid = win32security.GetTokenInformation(th,win32security.TokenUser)[0] +pwr_sid=win32security.LookupAccountName('','Power Users')[0] +## reopen process with ACCESS_SYSTEM_SECURITY now that sufficent privs are enabled +ph=win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS|win32con.ACCESS_SYSTEM_SECURITY,0,pid) + +sd=win32security.GetKernelObjectSecurity(ph,all_info) +dacl=sd.GetSecurityDescriptorDacl() +if dacl is None: + dacl=win32security.ACL() +sacl=sd.GetSecurityDescriptorSacl() +if sacl is None: + sacl=win32security.ACL() + +dacl_ace_cnt=dacl.GetAceCount() +sacl_ace_cnt=sacl.GetAceCount() + +dacl.AddAccessAllowedAce(dacl.GetAclRevision(),win32con.ACCESS_SYSTEM_SECURITY|win32con.WRITE_DAC,my_sid) +sacl.AddAuditAccessAce(sacl.GetAclRevision(),win32con.GENERIC_ALL,my_sid,1,1) +sd.SetSecurityDescriptorDacl(1,dacl,0) +sd.SetSecurityDescriptorSacl(1,sacl,0) +sd.SetSecurityDescriptorGroup(pwr_sid,0) +sd.SetSecurityDescriptorOwner(pwr_sid,0) + +win32security.SetKernelObjectSecurity(ph,all_info,sd) +new_sd=win32security.GetKernelObjectSecurity(ph,all_info) + +if new_sd.GetSecurityDescriptorDacl().GetAceCount()!=dacl_ace_cnt+1: + print 'New dacl doesn''t contain extra ace ????' +if new_sd.GetSecurityDescriptorSacl().GetAceCount()!=sacl_ace_cnt+1: + print 'New Sacl doesn''t contain extra ace ????' +if win32security.LookupAccountSid('',new_sd.GetSecurityDescriptorOwner())[0]!='Power Users': + print 'Owner not successfully set to Power Users !!!!!' +if win32security.LookupAccountSid('',new_sd.GetSecurityDescriptorGroup())[0]!='Power Users': + print 'Group not successfully set to Power Users !!!!!' + +sd.SetSecurityDescriptorSacl(0,None,0) +win32security.SetKernelObjectSecurity(ph, win32security.SACL_SECURITY_INFORMATION, sd) +new_sd_1=win32security.GetKernelObjectSecurity(ph,win32security.SACL_SECURITY_INFORMATION) +if new_sd_1.GetSecurityDescriptorSacl() is not None: + print 'Unable to set Sacl to NULL !!!!!!!!' + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/setnamedsecurityinfo.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/setnamedsecurityinfo.py new file mode 100644 index 000000000..45a32e62e --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/setnamedsecurityinfo.py @@ -0,0 +1,60 @@ +import win32security,win32api,win32con, win32process +fname, tmp = win32api.GetTempFileName(win32api.GetTempPath(),'tmp') +print fname +## You need SE_RESTORE_NAME to be able to set the owner of a security descriptor to anybody +## other than yourself or your primary group. Most admin logins don't have it by default, so +## enabling it may fail +new_privs = ((win32security.LookupPrivilegeValue('',win32security.SE_SECURITY_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_TCB_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_SHUTDOWN_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_RESTORE_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_TAKE_OWNERSHIP_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_CREATE_PERMANENT_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_ENABLE_DELEGATION_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_CHANGE_NOTIFY_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_DEBUG_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_PROF_SINGLE_PROCESS_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_SYSTEM_PROFILE_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_LOCK_MEMORY_NAME),win32con.SE_PRIVILEGE_ENABLED) + ) + +all_info=win32security.OWNER_SECURITY_INFORMATION|win32security.GROUP_SECURITY_INFORMATION| \ + win32security.DACL_SECURITY_INFORMATION|win32security.SACL_SECURITY_INFORMATION + +ph=win32process.GetCurrentProcess() +th = win32security.OpenProcessToken(ph,win32security.TOKEN_ALL_ACCESS) ##win32con.TOKEN_ADJUST_PRIVILEGES) +win32security.AdjustTokenPrivileges(th,0,new_privs) +my_sid = win32security.GetTokenInformation(th,win32security.TokenUser)[0] +pwr_sid=win32security.LookupAccountName('','Power Users')[0] + +sd=win32security.GetNamedSecurityInfo(fname,win32security.SE_FILE_OBJECT,all_info) +dacl=sd.GetSecurityDescriptorDacl() +if dacl is None: + dacl=win32security.ACL() +sacl=sd.GetSecurityDescriptorSacl() +if sacl is None: + sacl=win32security.ACL() + +dacl_ace_cnt=dacl.GetAceCount() +sacl_ace_cnt=sacl.GetAceCount() + +dacl.AddAccessAllowedAce(dacl.GetAclRevision(),win32con.ACCESS_SYSTEM_SECURITY|win32con.WRITE_DAC,my_sid) +sacl.AddAuditAccessAce(sacl.GetAclRevision(),win32con.GENERIC_ALL,my_sid,1,1) + +win32security.SetNamedSecurityInfo(fname,win32security.SE_FILE_OBJECT,all_info,pwr_sid, pwr_sid, dacl, sacl) +new_sd=win32security.GetNamedSecurityInfo(fname,win32security.SE_FILE_OBJECT,all_info) + +## could do additional checking to make sure added ACE contains expected info +if new_sd.GetSecurityDescriptorDacl().GetAceCount()!=dacl_ace_cnt+1: + print 'New dacl doesn''t contain extra ace ????' +if new_sd.GetSecurityDescriptorSacl().GetAceCount()!=sacl_ace_cnt+1: + print 'New Sacl doesn''t contain extra ace ????' +if win32security.LookupAccountSid('',new_sd.GetSecurityDescriptorOwner())[0]!='Power Users': + print 'Owner not successfully set to Power Users !!!!!' +if win32security.LookupAccountSid('',new_sd.GetSecurityDescriptorGroup())[0]!='Power Users': + print 'Group not successfully set to Power Users !!!!!' + +win32security.SetNamedSecurityInfo(fname,win32security.SE_FILE_OBJECT,win32security.SACL_SECURITY_INFORMATION, None, None, None, None) +new_sd_1=win32security.GetNamedSecurityInfo(fname,win32security.SE_FILE_OBJECT,win32security.SACL_SECURITY_INFORMATION) +if new_sd_1.GetSecurityDescriptorSacl() is not None: + print 'Unable to set Sacl to NULL !!!!!!!!' diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/setsecurityinfo.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/setsecurityinfo.py new file mode 100644 index 000000000..ece1988be --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/setsecurityinfo.py @@ -0,0 +1,61 @@ +import win32security,win32api,win32con, win32process +## You need SE_RESTORE_NAME to be able to set the owner of a security descriptor to anybody +## other than yourself or your primary group. Most admin logins don't have it by default, so +## enabling it may fail +new_privs = ((win32security.LookupPrivilegeValue('',win32security.SE_SECURITY_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_TCB_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_SHUTDOWN_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_RESTORE_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_TAKE_OWNERSHIP_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_CREATE_PERMANENT_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_ENABLE_DELEGATION_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_CHANGE_NOTIFY_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_DEBUG_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_PROF_SINGLE_PROCESS_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_SYSTEM_PROFILE_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_LOCK_MEMORY_NAME),win32con.SE_PRIVILEGE_ENABLED) + ) + +all_info=win32security.OWNER_SECURITY_INFORMATION|win32security.GROUP_SECURITY_INFORMATION| \ + win32security.DACL_SECURITY_INFORMATION|win32security.SACL_SECURITY_INFORMATION + +pid=win32api.GetCurrentProcessId() +ph=win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS,0,pid) +## PROCESS_ALL_ACCESS does not contain ACCESS_SYSTEM_SECURITY (neccessy to do SACLs) +th = win32security.OpenProcessToken(ph,win32security.TOKEN_ALL_ACCESS) ##win32con.TOKEN_ADJUST_PRIVILEGES) +old_privs=win32security.AdjustTokenPrivileges(th,0,new_privs) +my_sid = win32security.GetTokenInformation(th,win32security.TokenUser)[0] +pwr_sid=win32security.LookupAccountName('','Power Users')[0] +## reopen process with ACCESS_SYSTEM_SECURITY now that sufficent privs are enabled +ph=win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS|win32con.ACCESS_SYSTEM_SECURITY,0,pid) + +sd=win32security.GetSecurityInfo(ph,win32security.SE_KERNEL_OBJECT,all_info) +dacl=sd.GetSecurityDescriptorDacl() +if dacl is None: + dacl=win32security.ACL() +sacl=sd.GetSecurityDescriptorSacl() +if sacl is None: + sacl=win32security.ACL() + +dacl_ace_cnt=dacl.GetAceCount() +sacl_ace_cnt=sacl.GetAceCount() + +dacl.AddAccessAllowedAce(dacl.GetAclRevision(),win32con.ACCESS_SYSTEM_SECURITY|win32con.WRITE_DAC,my_sid) +sacl.AddAuditAccessAce(sacl.GetAclRevision(),win32con.GENERIC_ALL,my_sid,1,1) + +win32security.SetSecurityInfo(ph,win32security.SE_KERNEL_OBJECT,all_info,pwr_sid, pwr_sid, dacl, sacl) +new_sd=win32security.GetSecurityInfo(ph,win32security.SE_KERNEL_OBJECT,all_info) + +if new_sd.GetSecurityDescriptorDacl().GetAceCount()!=dacl_ace_cnt+1: + print 'New dacl doesn''t contain extra ace ????' +if new_sd.GetSecurityDescriptorSacl().GetAceCount()!=sacl_ace_cnt+1: + print 'New Sacl doesn''t contain extra ace ????' +if win32security.LookupAccountSid('',new_sd.GetSecurityDescriptorOwner())[0]!='Power Users': + print 'Owner not successfully set to Power Users !!!!!' +if win32security.LookupAccountSid('',new_sd.GetSecurityDescriptorGroup())[0]!='Power Users': + print 'Group not successfully set to Power Users !!!!!' + +win32security.SetSecurityInfo(ph,win32security.SE_KERNEL_OBJECT,win32security.SACL_SECURITY_INFORMATION, None, None, None, None) +new_sd_1=win32security.GetSecurityInfo(ph,win32security.SE_KERNEL_OBJECT,win32security.SACL_SECURITY_INFORMATION) +if new_sd_1.GetSecurityDescriptorSacl() is not None: + print 'Unable to set Sacl to NULL !!!!!!!!' diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/setuserobjectsecurity.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/setuserobjectsecurity.py new file mode 100644 index 000000000..96841f25b --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/setuserobjectsecurity.py @@ -0,0 +1,42 @@ +import win32security,win32api,win32con, win32process +new_privs = ((win32security.LookupPrivilegeValue('',win32security.SE_SECURITY_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_TCB_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_SHUTDOWN_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_RESTORE_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_TAKE_OWNERSHIP_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_CREATE_PERMANENT_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_ENABLE_DELEGATION_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_CHANGE_NOTIFY_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_DEBUG_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_PROF_SINGLE_PROCESS_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_SYSTEM_PROFILE_NAME),win32con.SE_PRIVILEGE_ENABLED), + (win32security.LookupPrivilegeValue('',win32security.SE_LOCK_MEMORY_NAME),win32con.SE_PRIVILEGE_ENABLED) + ) + +all_info=win32security.OWNER_SECURITY_INFORMATION|win32security.GROUP_SECURITY_INFORMATION| \ + win32security.DACL_SECURITY_INFORMATION|win32security.SACL_SECURITY_INFORMATION +info=win32security.OWNER_SECURITY_INFORMATION|win32security.GROUP_SECURITY_INFORMATION|win32security.DACL_SECURITY_INFORMATION + +ph=win32process.GetCurrentProcess() +th = win32security.OpenProcessToken(ph,win32security.TOKEN_ALL_ACCESS) ##win32con.TOKEN_ADJUST_PRIVILEGES) +win32security.AdjustTokenPrivileges(th,0,new_privs) +my_sid = win32security.GetTokenInformation(th,win32security.TokenUser)[0] +pwr_sid=win32security.LookupAccountName('','Power Users')[0] + +h=win32process.GetProcessWindowStation() +sd=win32security.GetUserObjectSecurity(h,info) +dacl=sd.GetSecurityDescriptorDacl() +ace_cnt=dacl.GetAceCount() + +dacl.AddAccessAllowedAce(dacl.GetAclRevision(),win32con.ACCESS_SYSTEM_SECURITY|win32con.WRITE_DAC,my_sid) +sd.SetSecurityDescriptorDacl(1,dacl,0) +sd.SetSecurityDescriptorGroup(pwr_sid,0) +sd.SetSecurityDescriptorOwner(pwr_sid,0) + +win32security.SetUserObjectSecurity(h,info,sd) +new_sd=win32security.GetUserObjectSecurity(h,info) +assert new_sd.GetSecurityDescriptorDacl().GetAceCount()==ace_cnt+1,'Did not add an ace to the Dacl !!!!!!' +assert win32security.LookupAccountSid('',new_sd.GetSecurityDescriptorOwner())[0]=='Power Users','Owner not successfully set to Power Users !!!!!' +assert win32security.LookupAccountSid('',new_sd.GetSecurityDescriptorGroup())[0]=='Power Users','Group not successfully set to Power Users !!!!!' + + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/.#fetch_url.py.1.1 b/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/.#fetch_url.py.1.1 new file mode 100644 index 000000000..272497e67 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/.#fetch_url.py.1.1 @@ -0,0 +1,246 @@ +""" +Fetches a URL from a web-server supporting NTLM authentication +eg, IIS. + +If no arguments are specified, a default of http://localhost/localstart.asp +is used. This script does follow simple 302 redirections, so pointing at the +root of an IIS server is should work. +""" + +import sys +import urllib +import httplib +import urlparse +from base64 import encodestring, decodestring +import re +import win32security, sspicon + +from sspi import ClientAuth + +import optparse # sorry, this demo needs 2.3+ + +options = None # set to optparse options object + +def open_url(host, url): + h = httplib.HTTPConnection(host) + h.set_debuglevel(9) + h.putrequest('GET', url) + h.endheaders() + resp = h.getresponse() + print "Initial response is", resp.status, resp.reason + body = resp.read() + if resp.status == 302: # object moved + url = "/" + resp.msg["location"] + resp.close() + h.putrequest('GET', url) + h.endheaders() + resp = h.getresponse() + print "After redirect response is", resp.status, resp.reason + if options.show_headers: + print "Initial response headers:" + for name, val in resp.msg.items(): + print " %s: %s" % (name, val) + if options.show_body: + print body + if resp.status == 401: + # 401: Unauthorized - here is where the real work starts + auth_info = None + if options.user or options.domain or options.password: + auth_info = options.user, options.domain, options.password + for auth_hdr in resp.msg.getheaders("WWW-Authenticate"): + # Eeek - this regex doesn't handle quoted quote chars! + m = re.match('[ \t]*([^ \t]+)', auth_hdr) + params = {} + scheme = "" + if m is not None: + scheme = m.group(1).lower() + rest = auth_hdr[m.span()[1]:] + auth_value = rest + while rest: + m = re.match('[ \t]*,?[ \t]*([^ \t]+)[ \t]*=[ \t]*"([^ \t]+)"', rest) + if m is None: + break + params[m.group(1)] = m.group(2) + rest = rest[m.span()[1]:] + + #sl = scheme.lower() + if scheme.lower() in ["negotiate", "ntlm"]: + # If I pass 'negotiate' to ClientAuth here, it appears to + # perform the auth without the full NTLM dance?? + ca = ClientAuth("NTLM", auth_info=auth_info) + break + if scheme.lower() in ["digest"]: + ca = ClientAuth("WDigest", auth_info=auth_info) + break + + else: + raise RuntimeError, "Don't handle any offered auth schemes" + auth_scheme = ca.pkg_info['Name'] + + + credentials, \ + credentials_expiry=win32security.AcquireCredentialsHandle( + None, auth_scheme, + sspicon.SECPKG_CRED_OUTBOUND, + None, None) + + + #data = decodestring(params["nonce"]) + data = "Digest" + auth_value + context = None + last = False + while 1: + + context_in = context + if context is None: + context = win32security.CtxtHandleType() + + ISC_REQ_HTTP = 0x10000000 + scflags = ISC_REQ_HTTP | sspicon.ISC_RET_REPLAY_DETECT + # sspicon.ISC_REQ_SEQUENCE_DETECT|\ + # sspicon.ISC_REQ_REPLAY_DETECT|ISC_REQ_HTTP #|sspicon.ISC_REQ_ALLOCATE_MEMORY + # docs say can't use sspicon.ISC_REQ_CONFIDENTIALITY with ISC_REQ_HTTP + # sspicon.ISC_REQ_INTEGRITY|?? + + print "The data is", data + + sec_buffer_new=win32security.SecBufferDescType() + # 0 SECBUFFER_TOKEN Empty + tokenbuf=win32security.SecBufferType(ca.pkg_info['MaxToken'], + sspicon.SECBUFFER_TOKEN) + tokenbuf.Buffer = data + sec_buffer_new.append(tokenbuf) + + # 1 SECBUFFER_PKG_PARAMS Method + val = "GET" + tokenbuf=win32security.SecBufferType(len(val)+1, + sspicon.SECBUFFER_PKG_PARAMS) + tokenbuf.Buffer = val + sec_buffer_new.append(tokenbuf) + + # 2 SECBUFFER_PKG_PARAMS Hentity. + # as if... + import md5 + val = md5.new('').hexdigest() + #val = '' + tokenbuf=win32security.SecBufferType(len(val)+1, + sspicon.SECBUFFER_PKG_PARAMS) + tokenbuf.Buffer = val + sec_buffer_new.append(tokenbuf) + + # NOT filled in by sspi due to ISC_REQ_ALLOCATE_MEMORY flag + sec_buffer_out=win32security.SecBufferDescType() + tokenbuf=win32security.SecBufferType(ca.pkg_info['MaxToken'], + sspicon.SECBUFFER_TOKEN) + sec_buffer_out.append(tokenbuf) + + err, attr, exp=win32security.InitializeSecurityContext( + credentials, + context_in, + url, + scflags, + 0, + sec_buffer_new, + context, + sec_buffer_out) + + print "InitializeSecurityContext returned", err, attr, exp +# print "Buffer has", len(sec_buffer_out) +# print sec_buffer_out[0].Buffer + + data = sec_buffer_out[0].Buffer + print "challenge response is", data + if last: + print "LAst one - breaking!" + break + h.putrequest('GET', url) + h.putheader('Authorization', 'Digest ' + data) + h.putheader('Content-Length', '0') + h.endheaders() + resp = h.getresponse() + if options.show_headers: + print "Token dance headers:" + for name, val in resp.msg.items(): + print " %s: %s" % (name, val) + + if err==0: + print "Err - 0 - flagging as last" + last = True + else: + if resp.status != 401: + print "Eeek - got response", resp.status + cl = resp.msg.get("content-length") + if cl: + got = resp.read(int(cl)) + if options.show_body: + print repr(got) + else: + print "" + else: + print "no content!" + + assert resp.status == 401, resp.status + +# assert not resp.will_close, "NTLM is per-connection - must not close" + #if scheme.lower() in ["ntlm", "negotiate"]: + + data = resp.msg.get("WWW-Authenticate", "") + + resp.read() + print "Final response status is", resp.status, resp.reason + if resp.status == 200: + # Worked! + # Check we can read it again without re-authenticating. + if resp.will_close: + print "EEEK - response will close, but NTLM is per connection - it must stay open" + body = resp.read() + if options.show_body: + print "Final response body:" + print body + h.putrequest('GET', url) + h.endheaders() + resp = h.getresponse() + print "Second fetch response is", resp.status, resp.reason + if options.show_headers: + print "Second response headers:" + for name, val in resp.msg.items(): + print " %s: %s" % (name, val) + + resp.read(int(resp.msg.get("content-length", 0))) + elif resp.status == 500: + print "Error text" + print resp.read() + else: + if options.show_body: + cl = resp.msg.get("content-length") + print resp.read(int(cl)) + +if __name__=='__main__': + parser = optparse.OptionParser(description=__doc__) + + parser.add_option("", "--show-body", action="store_true", + help="print the body of each response as it is received") + + parser.add_option("", "--show-headers", action="store_true", + help="print the headers of each response as it is received") + + parser.add_option("", "--user", action="store", + help="The username to login with") + + parser.add_option("", "--password", action="store", + help="The password to login with") + + parser.add_option("", "--domain", action="store", + help="The domain to login to") + + options, args = parser.parse_args() + if not args: + print "Run with --help for usage details" + args = ["http://localhost/localstart.asp"] + for url in args: + scheme, netloc, path, params, query, fragment = urlparse.urlparse(url) + if (scheme != "http") or params or query or fragment: + parser.error("Scheme must be http, URL must be simple") + + print "Opening '%s' from '%s'" % (path, netloc) + r = open_url(netloc, path) diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/fetch_url.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/fetch_url.py new file mode 100644 index 000000000..fc69b9d91 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/fetch_url.py @@ -0,0 +1,146 @@ +""" +Fetches a URL from a web-server supporting NTLM authentication +eg, IIS. + +If no arguments are specified, a default of http://localhost/localstart.asp +is used. This script does follow simple 302 redirections, so pointing at the +root of an IIS server is should work. +""" + +import sys +import urllib +import httplib +import urlparse +from base64 import encodestring, decodestring + +from sspi import ClientAuth + +import optparse # sorry, this demo needs 2.3+ + +options = None # set to optparse options object + +def open_url(host, url): + h = httplib.HTTPConnection(host) +# h.set_debuglevel(9) + h.putrequest('GET', url) + h.endheaders() + resp = h.getresponse() + print "Initial response is", resp.status, resp.reason + body = resp.read() + if resp.status == 302: # object moved + url = "/" + resp.msg["location"] + resp.close() + h.putrequest('GET', url) + h.endheaders() + resp = h.getresponse() + print "After redirect response is", resp.status, resp.reason + if options.show_headers: + print "Initial response headers:" + for name, val in resp.msg.items(): + print " %s: %s" % (name, val) + if options.show_body: + print body + if resp.status == 401: + # 401: Unauthorized - here is where the real work starts + auth_info = None + if options.user or options.domain or options.password: + auth_info = options.user, options.domain, options.password + ca = ClientAuth("NTLM", auth_info=auth_info) + auth_scheme = ca.pkg_info['Name'] + data = None + while 1: + err, out_buf = ca.authorize(data) + data = out_buf[0].Buffer + # Encode it as base64 as required by HTTP + auth = encodestring(data).replace("\012", "") + h.putrequest('GET', url) + h.putheader('Authorization', auth_scheme + ' ' + auth) + h.putheader('Content-Length', '0') + h.endheaders() + resp = h.getresponse() + if options.show_headers: + print "Token dance headers:" + for name, val in resp.msg.items(): + print " %s: %s" % (name, val) + + if err==0: + break + else: + if resp.status != 401: + print "Eeek - got response", resp.status + cl = resp.msg.get("content-length") + if cl: + print repr(resp.read(int(cl))) + else: + print "no content!" + + assert resp.status == 401, resp.status + + assert not resp.will_close, "NTLM is per-connection - must not close" + schemes = [s.strip() for s in resp.msg.get("WWW-Authenticate", "").split(",")] + for scheme in schemes: + if scheme.startswith(auth_scheme): + data = decodestring(scheme[len(auth_scheme)+1:]) + break + else: + print "Could not find scheme '%s' in schemes %r" % (auth_scheme, schemes) + break + + resp.read() + print "Final response status is", resp.status, resp.reason + if resp.status == 200: + # Worked! + # Check we can read it again without re-authenticating. + if resp.will_close: + print "EEEK - response will close, but NTLM is per connection - it must stay open" + body = resp.read() + if options.show_body: + print "Final response body:" + print body + h.putrequest('GET', url) + h.endheaders() + resp = h.getresponse() + print "Second fetch response is", resp.status, resp.reason + if options.show_headers: + print "Second response headers:" + for name, val in resp.msg.items(): + print " %s: %s" % (name, val) + + resp.read(int(resp.msg.get("content-length", 0))) + elif resp.status == 500: + print "Error text" + print resp.read() + else: + if options.show_body: + cl = resp.msg.get("content-length") + print resp.read(int(cl)) + +if __name__=='__main__': + parser = optparse.OptionParser(description=__doc__) + + parser.add_option("", "--show-body", action="store_true", + help="print the body of each response as it is received") + + parser.add_option("", "--show-headers", action="store_true", + help="print the headers of each response as it is received") + + parser.add_option("", "--user", action="store", + help="The username to login with") + + parser.add_option("", "--password", action="store", + help="The password to login with") + + parser.add_option("", "--domain", action="store", + help="The domain to login to") + + options, args = parser.parse_args() + if not args: + print "Run with --help for usage details" + args = ["http://localhost/localstart.asp"] + for url in args: + scheme, netloc, path, params, query, fragment = urlparse.urlparse(url) + if (scheme != "http") or params or query or fragment: + parser.error("Scheme must be http, URL must be simple") + + print "Opening '%s' from '%s'" % (path, netloc) + r = open_url(netloc, path) diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/fetch_url_digest.patch b/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/fetch_url_digest.patch new file mode 100644 index 000000000..1b37a723d --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/fetch_url_digest.patch @@ -0,0 +1,160 @@ +Index: fetch_url.py +=================================================================== +RCS file: /cvsroot/pywin32/pywin32/win32/Demos/security/sspi/fetch_url.py,v +retrieving revision 1.1 +diff -r1.1 fetch_url.py +14a15,16 +> import re +> import win32security, sspicon +24c26 +< # h.set_debuglevel(9) +--- +> h.set_debuglevel(9) +48c50,77 +< ca = ClientAuth("NTLM", auth_info=auth_info) +--- +> for auth_hdr in resp.msg.getheaders("WWW-Authenticate"): +> # Eeek - this regex doesn't handle quoted quote chars! +> m = re.match('[ \t]*([^ \t]+)', auth_hdr) +> params = {} +> scheme = "" +> if m is not None: +> scheme = m.group(1).lower() +> rest = auth_hdr[m.span()[1]:] +> auth_value = rest +> while rest: +> m = re.match('[ \t]*,?[ \t]*([^ \t]+)[ \t]*=[ \t]*"([^ \t]+)"', rest) +> if m is None: +> break +> params[m.group(1)] = m.group(2) +> rest = rest[m.span()[1]:] +> +> #sl = scheme.lower() +> if scheme.lower() in ["negotiate", "ntlm"]: +> # If I pass 'negotiate' to ClientAuth here, it appears to +> # perform the auth without the full NTLM dance?? +> ca = ClientAuth("NTLM", auth_info=auth_info) +> break +> if scheme.lower() in ["digest"]: +> ca = ClientAuth("WDigest", auth_info=auth_info) +> break +> +> else: +> raise RuntimeError, "Don't handle any offered auth schemes" +50c79,91 +< data = None +--- +> +> +> credentials, \ +> credentials_expiry=win32security.AcquireCredentialsHandle( +> None, auth_scheme, +> sspicon.SECPKG_CRED_OUTBOUND, +> None, None) +> +> +> #data = decodestring(params["nonce"]) +> data = "Digest" + auth_value +> context = None +> last = False +52,55c93,155 +< err, out_buf = ca.authorize(data) +< data = out_buf[0].Buffer +< # Encode it as base64 as required by HTTP +< auth = encodestring(data).replace("\012", "") +--- +> +> context_in = context +> if context is None: +> context = win32security.CtxtHandleType() +> +> ISC_REQ_HTTP = 0x10000000 +> scflags = ISC_REQ_HTTP | sspicon.ISC_RET_REPLAY_DETECT +> # sspicon.ISC_REQ_SEQUENCE_DETECT|\ +> # sspicon.ISC_REQ_REPLAY_DETECT|ISC_REQ_HTTP #|sspicon.ISC_REQ_ALLOCATE_MEMORY +> # docs say can't use sspicon.ISC_REQ_CONFIDENTIALITY with ISC_REQ_HTTP +> # sspicon.ISC_REQ_INTEGRITY|?? +> +> print "The data is", data +> +> sec_buffer_new=win32security.SecBufferDescType() +> # 0 SECBUFFER_TOKEN Empty +> tokenbuf=win32security.SecBufferType(ca.pkg_info['MaxToken'], +> sspicon.SECBUFFER_TOKEN) +> tokenbuf.Buffer = data +> sec_buffer_new.append(tokenbuf) +> +> # 1 SECBUFFER_PKG_PARAMS Method +> val = "GET" +> tokenbuf=win32security.SecBufferType(len(val)+1, +> sspicon.SECBUFFER_PKG_PARAMS) +> tokenbuf.Buffer = val +> sec_buffer_new.append(tokenbuf) +> +> # 2 SECBUFFER_PKG_PARAMS Hentity. +> # as if... +> import md5 +> val = md5.new('').hexdigest() +> #val = '' +> tokenbuf=win32security.SecBufferType(len(val)+1, +> sspicon.SECBUFFER_PKG_PARAMS) +> tokenbuf.Buffer = val +> sec_buffer_new.append(tokenbuf) +> +> # NOT filled in by sspi due to ISC_REQ_ALLOCATE_MEMORY flag +> sec_buffer_out=win32security.SecBufferDescType() +> tokenbuf=win32security.SecBufferType(ca.pkg_info['MaxToken'], +> sspicon.SECBUFFER_TOKEN) +> sec_buffer_out.append(tokenbuf) +> +> err, attr, exp=win32security.InitializeSecurityContext( +> credentials, +> context_in, +> url, +> scflags, +> 0, +> sec_buffer_new, +> context, +> sec_buffer_out) +> +> print "InitializeSecurityContext returned", err, attr, exp +> # print "Buffer has", len(sec_buffer_out) +> # print sec_buffer_out[0].Buffer +> +> data = sec_buffer_out[0].Buffer +> print "challenge response is", data +> if last: +> print "LAst one - breaking!" +> break +57c157 +< h.putheader('Authorization', auth_scheme + ' ' + auth) +--- +> h.putheader('Authorization', 'Digest ' + data) +67c167,168 +< break +--- +> print "Err - 0 - flagging as last" +> last = True +73c174,178 +< print repr(resp.read(int(cl))) +--- +> got = resp.read(int(cl)) +> if options.show_body: +> print repr(got) +> else: +> print "" +79,87c184,187 +< assert not resp.will_close, "NTLM is per-connection - must not close" +< schemes = [s.strip() for s in resp.msg.get("WWW-Authenticate", "").split(",")] +< for scheme in schemes: +< if scheme.startswith(auth_scheme): +< data = decodestring(scheme[len(auth_scheme)+1:]) +< break +< else: +< print "Could not find scheme '%s' in schemes %r" % (auth_scheme, schemes) +< break +--- +> # assert not resp.will_close, "NTLM is per-connection - must not close" +> #if scheme.lower() in ["ntlm", "negotiate"]: +> +> data = resp.msg.get("WWW-Authenticate", "") diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/simple_auth.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/simple_auth.py new file mode 100644 index 000000000..d383b94e9 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/simple_auth.py @@ -0,0 +1,71 @@ +# A demo of basic SSPI authentication. +# There is a 'client' context and a 'server' context - typically these will +# be on different machines (here they are in the same process, but the same +# concepts apply) +import sspi +import win32security, sspicon, win32api + +def lookup_ret_code(err): + for k,v in sspicon.__dict__.items(): + if k[0:6] in ('SEC_I_','SEC_E_') and v==err: + return k + + +""" +pkg_name='Kerberos' +sspiclient=SSPIClient(pkg_name, win32api.GetUserName(), ## target spn is ourself + None, None, ## use none for client name and authentication information for current context + ## u'username', (u'username',u'domain.com',u'passwd'), + sspicon.ISC_REQ_INTEGRITY|sspicon.ISC_REQ_SEQUENCE_DETECT|sspicon.ISC_REQ_REPLAY_DETECT| \ + sspicon.ISC_REQ_DELEGATE|sspicon.ISC_REQ_CONFIDENTIALITY|sspicon.ISC_REQ_USE_SESSION_KEY) +sspiserver=SSPIServer(pkg_name, None, + sspicon.ASC_REQ_INTEGRITY|sspicon.ASC_REQ_SEQUENCE_DETECT|sspicon.ASC_REQ_REPLAY_DETECT| \ + sspicon.ASC_REQ_DELEGATE|sspicon.ASC_REQ_CONFIDENTIALITY|sspicon.ASC_REQ_STREAM|sspicon.ASC_REQ_USE_SESSION_KEY) +""" + +pkg_name='NTLM' + +# Setup the 2 contexts. +sspiclient=sspi.ClientAuth(pkg_name) +sspiserver=sspi.ServerAuth(pkg_name) + +# Perform the authentication dance, each loop exchanging more information +# on the way to completing authentication. +sec_buffer=None +while 1: + err, sec_buffer = sspiclient.authorize(sec_buffer) + err, sec_buffer = sspiserver.authorize(sec_buffer) + if err==0: + break + +# The server can now impersonate the client. In this demo the 2 users will +# always be the same. +sspiserver.ctxt.ImpersonateSecurityContext() +print 'Impersonated user: ',win32api.GetUserNameEx(win32api.NameSamCompatible) +sspiserver.ctxt.RevertSecurityContext() +print 'Reverted to self: ',win32api.GetUserName() + +pkg_size_info=sspiclient.ctxt.QueryContextAttributes(sspicon.SECPKG_ATTR_SIZES) +# Now sign some data +msg='some data to be encrypted ......' + +sigsize=pkg_size_info['MaxSignature'] +sigbuf=win32security.PySecBufferDescType() +sigbuf.append(win32security.PySecBufferType(len(msg), sspicon.SECBUFFER_DATA)) +sigbuf.append(win32security.PySecBufferType(sigsize, sspicon.SECBUFFER_TOKEN)) +sigbuf[0].Buffer=msg +sspiclient.ctxt.MakeSignature(0,sigbuf,1) +sspiserver.ctxt.VerifySignature(sigbuf,1) + +# And finally encrypt some. +trailersize=pkg_size_info['SecurityTrailer'] +encbuf=win32security.PySecBufferDescType() +encbuf.append(win32security.PySecBufferType(len(msg), sspicon.SECBUFFER_DATA)) +encbuf.append(win32security.PySecBufferType(trailersize, sspicon.SECBUFFER_TOKEN)) +encbuf[0].Buffer=msg +sspiclient.ctxt.EncryptMessage(0,encbuf,1) +print 'Encrypted data:',repr(encbuf[0].Buffer) +sspiserver.ctxt.DecryptMessage(encbuf,1) +print 'Unencrypted data:',encbuf[0].Buffer + + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/socket_server.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/socket_server.py new file mode 100644 index 000000000..70befacc4 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/socket_server.py @@ -0,0 +1,178 @@ +"""A sample socket server and client using SSPI authentication and encryption. + +You must run with either 'client' or 'server' as arguments. A server must be +running before a client can connect. + +To use with Kerberos you should include in the client options +--target-spn=username, where 'username' is the user under which the server is +being run. + +Running either the client or server as a different user can be informative. +A command-line such as the following may be useful: +`runas /user:{user} {fqp}\python.exe {fqp}\socket_server.py --wait client|server` + +{fqp} should specify the relevant fully-qualified path names. + +To use 'runas' with Kerberos, the client program will need to +specify --target-spn with the username under which the *server* is running. + +See the SSPI documentation for more details. +""" + + +import sys +import struct +import SocketServer +import win32api +import httplib +import traceback + +import win32security +import sspi, sspicon + +import optparse # sorry, this demo needs 2.3+ + +options = None # set to optparse object. + +def GetUserName(): + try: + return win32api.GetUserName() + except win32api.error, details: + # Seeing 'access denied' errors here for non-local users (presumably + # without permission to login locally). Get the fully-qualified + # username, although a side-effect of these permission-denied errors + # is a lack of Python codecs - so printing the Unicode value fails. + # So just return the repr(), and avoid codecs completely. + return repr(win32api.GetUserNameEx(win32api.NameSamCompatible)) + +# Send a simple "message" over a socket - send the number of bytes first, +# then the string. Ditto for receive. +def _send_msg(s, m): + s.send(struct.pack("i", len(m))) + s.send(m) + +def _get_msg(s): + size_data = s.recv(struct.calcsize("i")) + if not size_data: + return None + cb = struct.unpack("i", size_data)[0] + return s.recv(cb) + +class SSPISocketServer(SocketServer.TCPServer): + def __init__(self, *args, **kw): + SocketServer.TCPServer.__init__(self, *args, **kw) + self.sa = sspi.ServerAuth(options.package) + + def verify_request(self, sock, ca): + # Do the sspi auth dance + self.sa.reset() + while 1: + data = _get_msg(sock) + if data is None: + return False + try: + err, sec_buffer = self.sa.authorize(data) + except sspi.error, details: + print "FAILED to authorize client:", details + return False + + if err==0: + break + _send_msg(sock, sec_buffer[0].Buffer) + return True + + def process_request(self, request, client_address): + # An example using the connection once it is established. + print "The server is running as user", GetUserName() + self.sa.ctxt.ImpersonateSecurityContext() + try: + print "Having conversation with client as user", GetUserName() + while 1: + # we need to grab 2 bits of data - the encrypted data, and the + # 'key' + data = _get_msg(request) + key = _get_msg(request) + if data is None or key is None: + break + data = self.sa.decrypt(data, key) + print "Client sent:", repr(data) + finally: + self.sa.ctxt.RevertSecurityContext() + self.close_request(request) + print "The server is back to user", GetUserName() + +def serve(): + s = SSPISocketServer(("localhost", options.port), None) + print "Running test server..." + s.serve_forever() + +def sspi_client(): + c = httplib.HTTPConnection("localhost", options.port) + c.connect() + # Do the auth dance. + ca = sspi.ClientAuth(options.package, targetspn=options.target_spn) + data = None + while 1: + err, out_buf = ca.authorize(data) + _send_msg(c.sock, out_buf[0].Buffer) + if err==0: + break + data = _get_msg(c.sock) + print "Auth dance complete - sending a few encryted messages" + # Assume out data is sensitive - encrypt the message. + for data in "Hello from the client".split(): + blob, key = ca.encrypt(data) + _send_msg(c.sock, blob) + _send_msg(c.sock, key) + c.sock.close() + print "Client completed." + +if __name__=='__main__': + parser = optparse.OptionParser("%prog [options] client|server", + description=__doc__) + + parser.add_option("", "--package", action="store", default="NTLM", + help="The SSPI package to use (eg, Kerberos) - default is NTLM") + + parser.add_option("", "--target-spn", action="store", + help="""The target security provider name to use. The + string contents are security-package specific. For + example, 'Kerberos' or 'Negotiate' require the server + principal name (SPN) (ie, the username) of the remote + process. For NTLM this must be blank.""") + + parser.add_option("", "--port", action="store", default="8181", + help="The port number to use (default=8181)") + + parser.add_option("", "--wait", action="store_true", + help="""Cause the program to wait for input just before + terminating. Useful when using via runas to see + any error messages before termination. + """) + + options, args = parser.parse_args() + try: + options.port = int(options.port) + except (ValueError, TypeError): + parser.error("--port must be an integer") + + try: + try: + if not args: + args = [''] + if args[0]=="client": + sspi_client() + elif args[0]=="server": + serve() + else: + parser.error("You must supply 'client' or 'server' - " \ + "use --help for details") + except KeyboardInterrupt: + pass + except SystemExit: + pass + except: + traceback.print_exc() + finally: + if options.wait: + raw_input("Press enter to continue") diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/validate_password.py b/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/validate_password.py new file mode 100644 index 000000000..6779697b8 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/security/sspi/validate_password.py @@ -0,0 +1,38 @@ +# Demonstrates how to validate a password. +# See also MSKB article Q180548 +# +# To use with Kerberos you need to jump through the 'targetspn' hoops. + +import win32security +import sys +from sspi import ClientAuth, ServerAuth + +def validate(username, password, domain = ""): + auth_info = username, domain, password + ca = ClientAuth("NTLM", auth_info = auth_info) + sa = ServerAuth("NTLM") + + data = err = None + while err != 0: + err, data = ca.authorize(data) + err, data = sa.authorize(data) + # If we get here without exception, we worked! + +if __name__=='__main__': + if len(sys.argv) not in [2,3,4]: + print "Usage: %s username [password [domain]]" % (__file__,) + sys.exit(1) + + # password and domain are optional! + password = None + if len(sys.argv)>=3: + password = sys.argv[2] + domain = "" + if len(sys.argv)>=4: + domain = sys.argv[3] + try: + validate(sys.argv[1], password, domain) + print "Validated OK" + except win32security.error, details: + hr, func, msg = details + print "Validation failed: %s (%d)" % (msg, hr) diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/service/install/perf_install.h b/thirdparty/python25/Lib/site-packages/win32/Demos/service/install/perf_install.h new file mode 100644 index 000000000..9ec630a31 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/service/install/perf_install.h @@ -0,0 +1,9 @@ +# All these simply list the counters in order. +# Important that you add these in this order in +# the Python code. + +#define SERVICE 0 +#define HEARTBEAT 2 +#define READ 4 +#define WRITE 6 +#define THREAD 8 diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/service/install/perf_install.ini b/thirdparty/python25/Lib/site-packages/win32/Demos/service/install/perf_install.ini new file mode 100644 index 000000000..ba391e452 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/service/install/perf_install.ini @@ -0,0 +1,18 @@ +[info] +drivername=PipeServicePerf +symbolfile=perf_install.h + +[languages] +009=English + +[text] +SERVICE_009_NAME=Python Demo Service +SERVICE_009_HELP=Shows performance statistics for the sample Python service +HEARTBEAT_009_NAME=Heartbeat pulse +HEARTBEAT_009_HELP=Regular counter to indicate the service is alive. Useful so system monitors can detect health even under low loads. +READ_009_NAME=Bytes read/sec +READ_009_HELP=Number of bytes read in total +WRITE_009_NAME=Bytes written/sec +WRITE_009_HELP=Number of bytes written in total +THREADS_009_NAME=Number of threads +THREADS_009_HELP=Number of threads currently servicing client connections diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/service/install/readme.txt b/thirdparty/python25/Lib/site-packages/win32/Demos/service/install/readme.txt new file mode 100644 index 000000000..85cf331e7 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/service/install/readme.txt @@ -0,0 +1,12 @@ +This directory contains stuff needed to install the Performance +Monitoring counters for the test service. + +This stuff is only needed at install time, and not used at runtime. + +This sample code does attempt to install this information at runtime +when the sample service is installed. However, if you use a setup +program for example this is not needed in the runtime environment. + +The NT API's require a .h and a .ini. These are not used by the Python +runtime at all. It is your programs responsibility to create counters +in your Python code which correspond to the entries here. \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/service/pipeTestService.py b/thirdparty/python25/Lib/site-packages/win32/Demos/service/pipeTestService.py new file mode 100644 index 000000000..414b7939f --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/service/pipeTestService.py @@ -0,0 +1,161 @@ +# A Demo of services and named pipes. + +# A multi-threaded service that simply echos back its input. + +# * Install as a service using "pipeTestService.py install" +# * Use Control Panel to change the user name of the service +# to a real user name (ie, NOT the SystemAccount) +# * Start the service. +# * Run the "pipeTestServiceClient.py" program as the client pipe side. + +import win32serviceutil, win32service +import pywintypes, win32con, winerror +# Use "import *" to keep this looking as much as a "normal" service +# as possible. Real code shouldn't do this. +from win32event import * +from win32file import * +from win32pipe import * +from win32api import * +from ntsecuritycon import * + +# Old versions of the service framework would not let you import this +# module at the top-level. Now you can, and can check 'Debugging()' and +# 'RunningAsService()' to check your context. +import servicemanager + +import traceback +import thread + +def ApplyIgnoreError(fn, args): + try: + return apply(fn, args) + except error: # Ignore win32api errors. + return None + +class TestPipeService(win32serviceutil.ServiceFramework): + _svc_name_ = "PyPipeTestService" + _svc_display_name_ = "Python Pipe Test Service" + _svc_description_ = "Tests Python service framework by receiving and echoing messages over a named pipe" + + def __init__(self, args): + win32serviceutil.ServiceFramework.__init__(self, args) + self.hWaitStop = CreateEvent(None, 0, 0, None) + self.overlapped = pywintypes.OVERLAPPED() + self.overlapped.hEvent = CreateEvent(None,0,0,None) + self.thread_handles = [] + + def CreatePipeSecurityObject(self): + # Create a security object giving World read/write access, + # but only "Owner" modify access. + sa = pywintypes.SECURITY_ATTRIBUTES() + sidEveryone = pywintypes.SID() + sidEveryone.Initialize(SECURITY_WORLD_SID_AUTHORITY,1) + sidEveryone.SetSubAuthority(0, SECURITY_WORLD_RID) + sidCreator = pywintypes.SID() + sidCreator.Initialize(SECURITY_CREATOR_SID_AUTHORITY,1) + sidCreator.SetSubAuthority(0, SECURITY_CREATOR_OWNER_RID) + + acl = pywintypes.ACL() + acl.AddAccessAllowedAce(FILE_GENERIC_READ|FILE_GENERIC_WRITE, sidEveryone) + acl.AddAccessAllowedAce(FILE_ALL_ACCESS, sidCreator) + + sa.SetSecurityDescriptorDacl(1, acl, 0) + return sa + + # The functions executed in their own thread to process a client request. + def DoProcessClient(self, pipeHandle, tid): + try: + try: + # Create a loop, reading large data. If we knew the data stream was + # was small, a simple ReadFile would do. + d = '' + hr = winerror.ERROR_MORE_DATA + while hr==winerror.ERROR_MORE_DATA: + hr, thisd = ReadFile(pipeHandle, 256) + d = d + thisd + print "Read", d + ok = 1 + except error: + # Client disconnection - do nothing + ok = 0 + + # A secure service would handle (and ignore!) errors writing to the + # pipe, but for the sake of this demo we dont (if only to see what errors + # we can get when our clients break at strange times :-) + if ok: WriteFile(pipeHandle,"%s (on thread %d) sent me %s" % (GetNamedPipeHandleState(pipeHandle)[4],tid, d)) + finally: + ApplyIgnoreError( DisconnectNamedPipe, (pipeHandle,) ) + ApplyIgnoreError( CloseHandle, (pipeHandle,) ) + + def ProcessClient(self, pipeHandle): + try: + procHandle = GetCurrentProcess() + th = DuplicateHandle(procHandle, GetCurrentThread(), procHandle, 0, 0, win32con.DUPLICATE_SAME_ACCESS) + try: + self.thread_handles.append(th) + try: + return self.DoProcessClient(pipeHandle, th) + except: + traceback.print_exc() + finally: + self.thread_handles.remove(th) + except: + traceback.print_exc() + + def SvcStop(self): + self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) + SetEvent(self.hWaitStop) + + def SvcDoRun(self): + # Write an event log record - in debug mode we will also + # see this message printed. + servicemanager.LogMsg( + servicemanager.EVENTLOG_INFORMATION_TYPE, + servicemanager.PYS_SERVICE_STARTED, + (self._svc_name_, '') + ) + + num_connections = 0 + while 1: + pipeHandle = CreateNamedPipe("\\\\.\\pipe\\PyPipeTest", + PIPE_ACCESS_DUPLEX| FILE_FLAG_OVERLAPPED, + PIPE_TYPE_MESSAGE | PIPE_READMODE_BYTE, + PIPE_UNLIMITED_INSTANCES, # max instances + 0, 0, 6000, + self.CreatePipeSecurityObject()) + try: + hr = ConnectNamedPipe(pipeHandle, self.overlapped) + except error, details: + print "Error connecting pipe!", details + CloseHandle(pipeHandle) + break + if hr==winerror.ERROR_PIPE_CONNECTED: + # Client is already connected - signal event + SetEvent(self.overlapped.hEvent) + rc = WaitForMultipleObjects((self.hWaitStop, self.overlapped.hEvent), 0, INFINITE) + if rc==WAIT_OBJECT_0: + # Stop event + break + else: + # Pipe event - spawn thread to deal with it. + thread.start_new_thread(self.ProcessClient, (pipeHandle,)) + num_connections = num_connections + 1 + + # Sleep to ensure that any new threads are in the list, and then + # wait for all current threads to finish. + # What is a better way? + Sleep(500) + while self.thread_handles: + self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING, 5000) + print "Waiting for %d threads to finish..." % (len(self.thread_handles)) + WaitForMultipleObjects(self.thread_handles, 1, 3000) + # Write another event log record. + servicemanager.LogMsg( + servicemanager.EVENTLOG_INFORMATION_TYPE, + servicemanager.PYS_SERVICE_STOPPED, + (self._svc_name_, " after processing %d connections" % (num_connections,)) + ) + + +if __name__=='__main__': + win32serviceutil.HandleCommandLine(TestPipeService) diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/service/pipeTestService.py.bak b/thirdparty/python25/Lib/site-packages/win32/Demos/service/pipeTestService.py.bak new file mode 100644 index 000000000..7e66cf7f5 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/service/pipeTestService.py.bak @@ -0,0 +1,155 @@ +# A Demo of services and named pipes. + +# A multi-threaded service that simply echos back its input. + +# * Install as a service using "pipeTestService.py install" +# * Use Control Panel to change the user name of the service +# to a real user name (ie, NOT the SystemAccount) +# * Start the service. +# * Run the "pipeTestServiceClient.py" program as the client pipe side. + +import win32serviceutil, win32service +import pywintypes, win32con, winerror +# Use "import *" to keep this looking as much as a "normal" service +# as possible. Real code shouldn't do this. +from win32event import * +from win32file import * +from win32pipe import * +from win32api import * +from ntsecuritycon import * + +import traceback +import thread + +def ApplyIgnoreError(fn, args): + try: + return apply(fn, args) + except error: # Ignore win32api errors. + return None + +class TestPipeService(win32serviceutil.ServiceFramework): + _svc_name_ = "PyPipeTestService" + _svc_display_name_ = "Python Pipe Test Service" + def __init__(self, args): + win32serviceutil.ServiceFramework.__init__(self, args) + self.hWaitStop = CreateEvent(None, 0, 0, None) + self.overlapped = pywintypes.OVERLAPPED() + self.overlapped.hEvent = CreateEvent(None,0,0,None) + self.thread_handles = [] + + def CreatePipeSecurityObject(self): + # Create a security object giving World read/write access, + # but only "Owner" modify access. + sa = pywintypes.SECURITY_ATTRIBUTES() + sidEveryone = pywintypes.SID() + sidEveryone.Initialize(SECURITY_WORLD_SID_AUTHORITY,1) + sidEveryone.SetSubAuthority(0, SECURITY_WORLD_RID) + sidCreator = pywintypes.SID() + sidCreator.Initialize(SECURITY_CREATOR_SID_AUTHORITY,1) + sidCreator.SetSubAuthority(0, SECURITY_CREATOR_OWNER_RID) + + acl = pywintypes.ACL() + acl.AddAccessAllowedAce(FILE_GENERIC_READ|FILE_GENERIC_WRITE, sidEveryone) + acl.AddAccessAllowedAce(FILE_ALL_ACCESS, sidCreator) + + sa.SetSecurityDescriptorDacl(1, acl, 0) + return sa + + # The functions executed in their own thread to process a client request. + def DoProcessClient(self, pipeHandle, tid): + try: + try: + # Create a loop, reading large data. If we knew the data stream was + # was small, a simple ReadFile would do. + d = '' + hr = winerror.ERROR_MORE_DATA + while hr==winerror.ERROR_MORE_DATA: + hr, thisd = ReadFile(pipeHandle, 256) + d = d + thisd + print "Read", d + ok = 1 + except error: + # Client disconnection - do nothing + ok = 0 + + # A secure service would handle (and ignore!) errors writing to the + # pipe, but for the sake of this demo we dont (if only to see what errors + # we can get when our clients break at strange times :-) + if ok: WriteFile(pipeHandle,"%s (on thread %d) sent me %s" % (GetNamedPipeHandleState(pipeHandle)[4],tid, d)) + finally: + ApplyIgnoreError( DisconnectNamedPipe, (pipeHandle,) ) + ApplyIgnoreError( CloseHandle, (pipeHandle,) ) + + def ProcessClient(self, pipeHandle): + try: + procHandle = GetCurrentProcess() + th = DuplicateHandle(procHandle, GetCurrentThread(), procHandle, 0, 0, win32con.DUPLICATE_SAME_ACCESS) + try: + self.thread_handles.append(th) + try: + return self.DoProcessClient(pipeHandle, th) + except: + traceback.print_exc() + finally: + self.thread_handles.remove(th) + except: + traceback.print_exc() + + def SvcStop(self): + self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) + SetEvent(self.hWaitStop) + + def SvcDoRun(self): + # Write an event log record - in debug mode we will also + # see this message printed. + import servicemanager + servicemanager.LogMsg( + servicemanager.EVENTLOG_INFORMATION_TYPE, + servicemanager.PYS_SERVICE_STARTED, + (self._svc_name_, '') + ) + + num_connections = 0 + while 1: + pipeHandle = CreateNamedPipe("\\\\.\\pipe\\PyPipeTest", + PIPE_ACCESS_DUPLEX| FILE_FLAG_OVERLAPPED, + PIPE_TYPE_MESSAGE | PIPE_READMODE_BYTE, + PIPE_UNLIMITED_INSTANCES, # max instances + 0, 0, 6000, + self.CreatePipeSecurityObject()) + try: + hr = ConnectNamedPipe(pipeHandle, self.overlapped) + except error, details: + print "Error connecting pipe!", details + CloseHandle(pipeHandle) + break + if hr==winerror.ERROR_PIPE_CONNECTED: + # Client is already connected - signal event + SetEvent(self.overlapped.hEvent) + rc = WaitForMultipleObjects((self.hWaitStop, self.overlapped.hEvent), 0, INFINITE) + if rc==WAIT_OBJECT_0: + # Stop event + break + else: + # Pipe event - spawn thread to deal with it. + thread.start_new_thread(self.ProcessClient, (pipeHandle,)) + num_connections = num_connections + 1 + + # Sleep to ensure that any new threads are in the list, and then + # wait for all current threads to finish. + # What is a better way? + Sleep(500) + while self.thread_handles: + self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING, 5000) + print "Waiting for %d threads to finish..." % (len(self.thread_handles)) + WaitForMultipleObjects(self.thread_handles, 1, 3000) + # Write another event log record. + servicemanager.LogMsg( + servicemanager.EVENTLOG_INFORMATION_TYPE, + servicemanager.PYS_SERVICE_STOPPED, + (self._svc_name_, " after processing %d connections" % (num_connections,)) + ) + + +if __name__=='__main__': + win32serviceutil.HandleCommandLine(TestPipeService) diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/service/pipeTestServiceClient.py b/thirdparty/python25/Lib/site-packages/win32/Demos/service/pipeTestServiceClient.py new file mode 100644 index 000000000..5392a95af --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/service/pipeTestServiceClient.py @@ -0,0 +1,121 @@ +# A Test Program for pipeTestService.py +# +# Install and start the Pipe Test service, then run this test +# either from the same machine, or from another using the "-s" param. +# +# Eg: pipeTestServiceClient.py -s server_name Hi There +# Should work. + +from win32pipe import * +from win32file import * +from win32event import * +import pywintypes +import win32api +import winerror +import sys, os, traceback + +verbose = 0 + +#def ReadFromPipe(pipeName): + # Could (Should?) use CallNamedPipe, but this technique allows variable size + # messages (whereas you must supply a buffer size for CallNamedPipe! +# hPipe = CreateFile(pipeName, GENERIC_WRITE, 0, None, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) +# more = 1 +# while more: +# hr = ReadFile(hPipe, 256) +# if hr==0: +# more = 0 +# except win32api.error (hr, fn, desc): +# if hr==winerror.ERROR_MORE_DATA: +# data = dat +# + +def CallPipe(fn, args): + ret = None + retryCount = 0 + while retryCount < 8: # Keep looping until user cancels. + retryCount = retryCount + 1 + try: + return apply(fn, args) + except win32api.error, (rc, fnerr, msg): + if rc==winerror.ERROR_PIPE_BUSY: + win32api.Sleep(5000) + continue + else: + raise win32api.error, (rc, fnerr, msg) + + raise RuntimeError, "Could not make a connection to the server" + +def testClient(server,msg): + if verbose: + print "Sending", msg + data = CallPipe(CallNamedPipe, ("\\\\%s\\pipe\\PyPipeTest" % server, msg, 256, NMPWAIT_WAIT_FOREVER)) + if verbose: + print "Server sent back '%s'" % data + print "Sent and received a message!" + +def testLargeMessage(server, size = 4096): + if verbose: + print "Sending message of size %d" % (size) + msg = "*" * size + data = CallPipe(CallNamedPipe, ("\\\\%s\\pipe\\PyPipeTest" % server, msg, 512, NMPWAIT_WAIT_FOREVER)) + if len(data)-size: + print "Sizes are all wrong - send %d, got back %d" % (size, len(data)) + +def stressThread(server, numMessages, wait): + try: + try: + for i in xrange(numMessages): + r = CallPipe(CallNamedPipe, ("\\\\%s\\pipe\\PyPipeTest" % server, "#" * 512, 1024, NMPWAIT_WAIT_FOREVER)) + except: + traceback.print_exc() + print "Failed after %d messages" % i + finally: + SetEvent(wait) + +def stressTestClient(server, numThreads, numMessages): + import thread + thread_waits = [] + for t_num in xrange(numThreads): + # Note I could just wait on thread handles (after calling DuplicateHandle) + # See the service itself for an example of waiting for the clients... + wait = CreateEvent(None, 0, 0, None) + thread_waits.append(wait) + thread.start_new_thread(stressThread, (server,numMessages, wait)) + # Wait for all threads to finish. + WaitForMultipleObjects(thread_waits, 1, INFINITE) + +def main(): + import sys, getopt, string + server = "." + thread_count = 0 + msg_count = 500 + try: + opts, args = getopt.getopt(sys.argv[1:], 's:t:m:vl') + for o,a in opts: + if o=='-s': + server = a + if o=='-m': + msg_count = string.atoi(a) + if o=='-t': + thread_count = string.atoi(a) + if o=='-v': + global verbose + verbose = 1 + if o=='-l': + testLargeMessage(server) + msg = string.join(args) + except getopt.error, msg: + print msg + my_name = os.path.split(sys.argv[0])[1] + print "Usage: %s [-v] [-s server] [-t thread_count=0] [-m msg_count=500] msg ..." % my_name + print " -v = verbose" + print " Specifying a value for -t will stress test using that many threads." + return + testClient(server, msg) + if thread_count > 0: + print "Spawning %d threads each sending %d messages..." % (thread_count, msg_count) + stressTestClient(server, thread_count, msg_count) + +if __name__=='__main__': + main() diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/service/pipeTestServiceClient.py.bak b/thirdparty/python25/Lib/site-packages/win32/Demos/service/pipeTestServiceClient.py.bak new file mode 100644 index 000000000..cbd1a3a09 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/service/pipeTestServiceClient.py.bak @@ -0,0 +1,119 @@ +# A Test Program for pipeTestService.py +# +# Install and start the Pipe Test service, then run this test +# either from the same machine, or from another using the "-s" param. +# +# Eg: pipeTestServiceClient.py -s server_name Hi There +# Should work. + +from win32pipe import * +from win32file import * +from win32event import * +import pywintypes +import win32api +import winerror +import sys, os, traceback + +verbose = 0 + +#def ReadFromPipe(pipeName): + # Could (Should?) use CallNamedPipe, but this technique allows variable size + # messages (whereas you must supply a buffer size for CallNamedPipe! +# hPipe = CreateFile(pipeName, GENERIC_WRITE, 0, None, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) +# more = 1 +# while more: +# hr = ReadFile(hPipe, 256) +# if hr==0: +# more = 0 +# except win32api.error (hr, fn, desc): +# if hr==winerror.ERROR_MORE_DATA: +# data = dat +# + +def CallPipe(fn, args): + ret = None + retryCount = 0 + while retryCount < 8: # Keep looping until user cancels. + retryCount = retryCount + 1 + try: + return apply(fn, args) + except win32api.error, (rc, fnerr, msg): + if rc==winerror.ERROR_PIPE_BUSY: + win32api.Sleep(5000) + continue + else: + raise win32api.error, (rc, fnerr, msg) + + raise RuntimeError, "Could not make a connection to the server" + +def testClient(server,msg): + if verbose: + print "Sending", msg + data = CallPipe(CallNamedPipe, ("\\\\%s\\pipe\\PyPipeTest" % server, msg, 256, NMPWAIT_WAIT_FOREVER)) + if verbose: + print "Server sent back '%s'" % data + +def testLargeMessage(server, size = 4096): + if verbose: + print "Sending message of size %d" % (size) + msg = "*" * size + data = CallPipe(CallNamedPipe, ("\\\\%s\\pipe\\PyPipeTest" % server, msg, 512, NMPWAIT_WAIT_FOREVER)) + if len(data)-size: + print "Sizes are all wrong - send %d, got back %d" % (size, len(data)) + +def stressThread(server, numMessages, wait): + try: + try: + for i in xrange(numMessages): + r = CallPipe(CallNamedPipe, ("\\\\%s\\pipe\\PyPipeTest" % server, "#" * 512, 1024, NMPWAIT_WAIT_FOREVER)) + except: + traceback.print_exc() + print "Failed after %d messages" % i + finally: + SetEvent(wait) + +def stressTestClient(server, numThreads, numMessages): + import thread + thread_waits = [] + for t_num in xrange(numThreads): + # Note I could just wait on thread handles (after calling DuplicateHandle) + # See the service itself for an example of waiting for the clients... + wait = CreateEvent(None, 0, 0, None) + thread_waits.append(wait) + thread.start_new_thread(stressThread, (server,numMessages, wait)) + # Wait for all threads to finish. + WaitForMultipleObjects(thread_waits, 1, INFINITE) + +def main(): + import sys, getopt, string + server = "." + thread_count = 0 + msg_count = 500 + try: + opts, args = getopt.getopt(sys.argv[1:], 's:t:m:vl') + for o,a in opts: + if o=='-s': + server = a + if o=='-m': + msg_count = string.atoi(a) + if o=='-t': + thread_count = string.atoi(a) + if o=='-v': + global verbose + verbose = 1 + if o=='-l': + testLargeMessage(server) + msg = string.join(args) + except getopt.error, msg: + print msg + my_name = os.path.split(sys.argv[0])[1] + print "Usage: %s [-v] [-s server] [-t thread_count=0] [-m msg_count=500] msg ..." % my_name + print " -v = verbose" + print " Specifying a value for -t will stress test using that many threads." + testClient(server, msg) + if thread_count > 0: + print "Spawning %d threads each sending %d messages..." % (thread_count, msg_count) + stressTestClient(server, thread_count, msg_count) + +if __name__=='__main__': + main() diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/timer_demo.py b/thirdparty/python25/Lib/site-packages/win32/Demos/timer_demo.py new file mode 100644 index 000000000..d9f2a00d9 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/timer_demo.py @@ -0,0 +1,68 @@ +# -*- Mode: Python; tab-width: 4 -*- +# + +# This module, and the timer.pyd core timer support, were written by +# Sam Rushing (rushing@nightmare.com) + +import timer +import time + +# Timers are based on Windows messages. So we need +# to do the event-loop thing! +import win32event, win32gui + +# glork holds a simple counter for us. + +class glork: + + def __init__ (self, delay=1000, max=10): + self.x = 0 + self.max = max + self.id = timer.set_timer (delay, self.increment) + # Could use the threading module, but this is + # a win32 extension test after all! :-) + self.event = win32event.CreateEvent(None, 0, 0, None) + + def increment (self, id, time): + print 'x = %d' % self.x + self.x = self.x + 1 + # if we've reached the max count, + # kill off the timer. + if self.x > self.max: + # we could have used 'self.id' here, too + timer.kill_timer (id) + win32event.SetEvent(self.event) + +# create a counter that will count from '1' thru '10', incrementing +# once a second, and then stop. + +def demo (delay=1000, stop=10): + g = glork(delay, stop) + # Timers are message based - so we need + # To run a message loop while waiting for our timers + # to expire. + start_time = time.time() + while 1: + # We can't simply give a timeout of 30 seconds, as + # we may continouusly be recieving other input messages, + # and therefore never expire. + rc = win32event.MsgWaitForMultipleObjects( + (g.event,), # list of objects + 0, # wait all + 500, # timeout + win32event.QS_ALLEVENTS, # type of input + ) + if rc == win32event.WAIT_OBJECT_0: + # Event signalled. + break + elif rc == win32event.WAIT_OBJECT_0+1: + # Message waiting. + if win32gui.PumpWaitingMessages(): + raise RuntimeError, "We got an unexpected WM_QUIT message!" + else: + # This wait timed-out. + if time.time()-start_time > 30: + raise RuntimeError, "We timed out waiting for the timers to expire!" + +if __name__=='__main__': + demo() diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/win32clipboardDemo.py b/thirdparty/python25/Lib/site-packages/win32/Demos/win32clipboardDemo.py new file mode 100644 index 000000000..3f1dcbff7 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/win32clipboardDemo.py @@ -0,0 +1,129 @@ +# win32clipboardDemo.py +# +# Demo/test of the win32clipboard module. +from win32clipboard import * +import win32con +import types + +if not __debug__: + print "WARNING: The test code in this module uses assert" + print "This instance of Python has asserts disabled, so many tests will be skipped" + +cf_names = {} +# Build map of CF_* constants to names. +for name, val in win32con.__dict__.items(): + if name[:3]=="CF_" and name != "CF_SCREENFONTS": # CF_SCREEN_FONTS==CF_TEXT!?!? + cf_names[val] = name + +def TestEmptyClipboard(): + OpenClipboard() + try: + EmptyClipboard() + assert EnumClipboardFormats(0)==0, "Clipboard formats were available after emptying it!" + finally: + CloseClipboard() + +def TestText(): + OpenClipboard() + try: + text = "Hello from Python" + SetClipboardText(text) + got = GetClipboardData(win32con.CF_TEXT) + assert got == text, "Didnt get the correct result back - '%r'." % (got,) + # Win32 documentation says I can get the result back as CF_UNICODE or CF_OEMTEXT. + # But it appears I need to close the clipboard for this to kick-in. + # but if I attempt to, it fails! + finally: + CloseClipboard() + + OpenClipboard() + try: + got = GetClipboardData(win32con.CF_UNICODETEXT) + assert got == text, "Didnt get the correct result back - '%r'." % (got,) + assert type(got)==types.UnicodeType, "Didnt get the correct result back - '%r'." % (got,) + + got = GetClipboardData(win32con.CF_OEMTEXT) + assert got == text, "Didnt get the correct result back - '%r'." % (got,) + + # Unicode tests + EmptyClipboard() + text = u"Hello from Python unicode" + # Now set the Unicode value + SetClipboardData(win32con.CF_UNICODETEXT, text) + # Get it in Unicode. + got = GetClipboardData(win32con.CF_UNICODETEXT) + assert got == text, "Didnt get the correct result back - '%r'." % (got,) + assert type(got)==types.UnicodeType, "Didnt get the correct result back - '%r'." % (got,) + + # Close and open the clipboard to ensure auto-conversions take place. + finally: + CloseClipboard() + + OpenClipboard() + try: + + # Make sure I can still get the text. + got = GetClipboardData(win32con.CF_TEXT) + assert got == text, "Didnt get the correct result back - '%r'." % (got,) + # Make sure we get back the correct types. + got = GetClipboardData(win32con.CF_UNICODETEXT) + assert type(got)==types.UnicodeType, "Didnt get the correct result back - '%r'." % (got,) + got = GetClipboardData(win32con.CF_OEMTEXT) + assert got == text, "Didnt get the correct result back - '%r'." % (got,) + print "Clipboard text tests worked correctly" + finally: + CloseClipboard() + +def TestClipboardEnum(): + OpenClipboard() + try: + # Enumerate over the clipboard types + enum = 0 + while 1: + enum = EnumClipboardFormats(enum) + if enum==0: + break + assert IsClipboardFormatAvailable(enum), "Have format, but clipboard says it is not available!" + n = cf_names.get(enum,"") + if not n: + try: + n = GetClipboardFormatName(enum) + except error: + n = "unknown (%s)" % (enum,) + + print "Have format", n + print "Clipboard enumerator tests worked correctly" + finally: + CloseClipboard() + +class Foo: + def __init__(self, **kw): + self.__dict__.update(kw) + def __cmp__(self, other): + return cmp(self.__dict__, other.__dict__) + +def TestCustomFormat(): + OpenClipboard() + try: + # Just for the fun of it pickle Python objects through the clipboard + fmt = RegisterClipboardFormat("Python Pickle Format") + import cPickle + pickled_object = Foo(a=1, b=2, Hi=3) + SetClipboardData(fmt, cPickle.dumps( pickled_object ) ) + # Now read it back. + data = GetClipboardData(fmt) + loaded_object = cPickle.loads(data) + assert cPickle.loads(data) == pickled_object, "Didnt get the correct data!" + + print "Clipboard custom format tests worked correctly" + finally: + CloseClipboard() + + +if __name__=='__main__': + TestEmptyClipboard() + TestText() + TestCustomFormat() + TestClipboardEnum() + # And leave it empty at the end! + TestEmptyClipboard() diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/win32comport_demo.py b/thirdparty/python25/Lib/site-packages/win32/Demos/win32comport_demo.py new file mode 100644 index 000000000..76776176f --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/win32comport_demo.py @@ -0,0 +1,133 @@ +# This is a simple serial port terminal demo. +# +# Its primary purpose is to demonstrate the native serial port access offered via +# win32file. + +# It uses 3 threads: +# - The main thread, which cranks up the other 2 threads, then simply waits for them to exit. +# - The user-input thread - blocks waiting for a keyboard character, and when found sends it +# out the COM port. If the character is Ctrl+C, it stops, signalling the COM port thread to stop. +# - The COM port thread is simply listening for input on the COM port, and prints it to the screen. + +# This demo uses userlapped IO, so that none of the read or write operations actually block (however, +# in this sample, the very next thing we do _is_ block - so it shows off the concepts even though it +# doesnt exploit them. + +from win32file import * # The base COM port and file IO functions. +from win32event import * # We use events and the WaitFor[Multiple]Objects functions. +import win32con # constants. +import msvcrt # For the getch() function. + +import threading +import sys + +def FindModem(): + # Snoop over the comports, seeing if it is likely we have a modem. + for i in range(1,5): + port = "COM%d" % (i,) + try: + handle = CreateFile(port, + win32con.GENERIC_READ | win32con.GENERIC_WRITE, + 0, # exclusive access + None, # no security + win32con.OPEN_EXISTING, + win32con.FILE_ATTRIBUTE_NORMAL, + None) + # It appears that an available COM port will always success here, + # just return 0 for the status flags. We only care that it has _any_ status + # flags (and therefore probably a real modem) + if GetCommModemStatus(handle) != 0: + return port + except error: + pass # No port, or modem status failed. + return None + +# A basic synchronous COM port file-like object +class SerialTTY: + def __init__(self, port): + if type(port)==type(0): + port = "COM%d" % (port,) + self.handle = CreateFile(port, + win32con.GENERIC_READ | win32con.GENERIC_WRITE, + 0, # exclusive access + None, # no security + win32con.OPEN_EXISTING, + win32con.FILE_ATTRIBUTE_NORMAL | win32con.FILE_FLAG_OVERLAPPED, + None) + # Tell the port we want a notification on each char. + SetCommMask(self.handle, EV_RXCHAR) + # Setup a 4k buffer + SetupComm(self.handle, 4096, 4096) + # Remove anything that was there + PurgeComm(self.handle, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR ) + # Setup for overlapped IO. + timeouts = 0xFFFFFFFF, 0, 1000, 0, 1000 + SetCommTimeouts(self.handle, timeouts) + # Setup the connection info. + dcb = GetCommState( self.handle ) + dcb.BaudRate = CBR_115200 + dcb.ByteSize = 8 + dcb.Parity = NOPARITY + dcb.StopBits = ONESTOPBIT + SetCommState(self.handle, dcb) + print "Connected to %s at %s baud" % (port, dcb.BaudRate) + + def _UserInputReaderThread(self): + overlapped = OVERLAPPED() + overlapped.hEvent = CreateEvent(None, 1, 0, None) + try: + while 1: + ch = msvcrt.getch() + if ord(ch)==3: + break + WriteFile(self.handle, ch, overlapped) + # Wait for the write to complete. + WaitForSingleObject(overlapped.hEvent, INFINITE) + finally: + SetEvent(self.eventStop) + + def _ComPortThread(self): + overlapped = OVERLAPPED() + overlapped.hEvent = CreateEvent(None, 1, 0, None) + while 1: + # XXX - note we could _probably_ just use overlapped IO on the win32file.ReadFile() statement + # XXX but this tests the COM stuff! + rc, mask = WaitCommEvent(self.handle, overlapped) + if rc == 0: # Character already ready! + SetEvent(overlapped.hEvent) + rc = WaitForMultipleObjects([overlapped.hEvent, self.eventStop], 0, INFINITE) + if rc == WAIT_OBJECT_0: + # Some input - read and print it + flags, comstat = ClearCommError( self.handle ) + rc, data = ReadFile(self.handle, comstat.cbInQue, overlapped) + WaitForSingleObject(overlapped.hEvent, INFINITE) + sys.stdout.write(data) + else: + # Stop the thread! + # Just incase the user input thread uis still going, close it + sys.stdout.close() + break + + def Run(self): + self.eventStop = CreateEvent(None, 0, 0, None) + # Start the reader and writer threads. + user_thread = threading.Thread(target = self._UserInputReaderThread) + user_thread.start() + com_thread = threading.Thread(target = self._ComPortThread) + com_thread.start() + user_thread.join() + com_thread.join() + +if __name__=='__main__': + print "Serial port terminal demo - press Ctrl+C to exit" + if len(sys.argv)<=1: + port = FindModem() + if port is None: + print "No COM port specified, and no modem could be found" + print "Please re-run this script with the name of a COM port (eg COM3)" + sys.exit(1) + else: + port = sys.argv[1] + + tty = SerialTTY(port) + tty.Run() diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/win32console_demo.py b/thirdparty/python25/Lib/site-packages/win32/Demos/win32console_demo.py new file mode 100644 index 000000000..2e1e17e0c --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/win32console_demo.py @@ -0,0 +1,103 @@ +import win32console, win32con +import traceback, time + +virtual_keys={} +for k,v in win32con.__dict__.items(): + if k.startswith('VK_'): + virtual_keys[v]=k + +free_console=True +try: + win32console.AllocConsole() +except win32console.error, err_tuple: + if err_tuple[0]!=5: + raise + ## only free console if one was created successfully + free_console=False + +stdout=win32console.GetStdHandle(win32console.STD_OUTPUT_HANDLE) +stdin=win32console.GetStdHandle(win32console.STD_INPUT_HANDLE) +newbuffer=win32console.CreateConsoleScreenBuffer() +newbuffer.SetConsoleActiveScreenBuffer() +newbuffer.SetConsoleTextAttribute(win32console.FOREGROUND_RED|win32console.FOREGROUND_INTENSITY + |win32console.BACKGROUND_GREEN|win32console.BACKGROUND_INTENSITY) +newbuffer.WriteConsole('This is a new screen buffer\n') + +## test setting screen buffer and window size +## screen buffer size cannot be smaller than window size +window_size=newbuffer.GetConsoleScreenBufferInfo()['Window'] +coord=win32console.PyCOORDType(X=window_size.Right+20, Y=window_size.Bottom+20) +newbuffer.SetConsoleScreenBufferSize(coord) + +window_size.Right+=10 +window_size.Bottom+=10 +newbuffer.SetConsoleWindowInfo(Absolute=True,ConsoleWindow=window_size) + +## write some records to the input queue +x=win32console.PyINPUT_RECORDType(win32console.KEY_EVENT) +x.Char=u'X' +x.KeyDown=True +x.RepeatCount=1 +x.VirtualKeyCode=0x58 +x.ControlKeyState=win32con.SHIFT_PRESSED + +z=win32console.PyINPUT_RECORDType(win32console.KEY_EVENT) +z.Char=u'Z' +z.KeyDown=True +z.RepeatCount=1 +z.VirtualKeyCode=0x5a +z.ControlKeyState=win32con.SHIFT_PRESSED + +stdin.WriteConsoleInput([x,z,x]) + +newbuffer.SetConsoleTextAttribute(win32console.FOREGROUND_RED|win32console.FOREGROUND_INTENSITY + |win32console.BACKGROUND_GREEN|win32console.BACKGROUND_INTENSITY) +newbuffer.WriteConsole('Press some keys, click some characters with the mouse\n') + +newbuffer.SetConsoleTextAttribute(win32console.FOREGROUND_BLUE|win32console.FOREGROUND_INTENSITY + |win32console.BACKGROUND_RED|win32console.BACKGROUND_INTENSITY) +newbuffer.WriteConsole('Hit "End" key to quit\n') + +breakout=False +while not breakout: + input_records=stdin.ReadConsoleInput(10) + for input_record in input_records: + if input_record.EventType==win32console.KEY_EVENT: + if input_record.KeyDown: + if input_record.Char=='\0': + newbuffer.WriteConsole(virtual_keys.get(input_record.VirtualKeyCode, 'VirtualKeyCode: %s' %input_record.VirtualKeyCode)) + else: + newbuffer.WriteConsole(input_record.Char) + if input_record.VirtualKeyCode==win32con.VK_END: + breakout=True + break + elif input_record.EventType==win32console.MOUSE_EVENT: + if input_record.EventFlags==0: ## 0 indicates a button event + if input_record.ButtonState!=0: ## exclude button releases + pos=input_record.MousePosition + # switch the foreground and background colors of the character that was clicked + attr=newbuffer.ReadConsoleOutputAttribute(Length=1, ReadCoord=pos)[0] + new_attr=attr + if attr&win32console.FOREGROUND_BLUE: + new_attr=(new_attr&~win32console.FOREGROUND_BLUE)|win32console.BACKGROUND_BLUE + if attr&win32console.FOREGROUND_RED: + new_attr=(new_attr&~win32console.FOREGROUND_RED)|win32console.BACKGROUND_RED + if attr&win32console.FOREGROUND_GREEN: + new_attr=(new_attr&~win32console.FOREGROUND_GREEN)|win32console.BACKGROUND_GREEN + + if attr&win32console.BACKGROUND_BLUE: + new_attr=(new_attr&~win32console.BACKGROUND_BLUE)|win32console.FOREGROUND_BLUE + if attr&win32console.BACKGROUND_RED: + new_attr=(new_attr&~win32console.BACKGROUND_RED)|win32console.FOREGROUND_RED + if attr&win32console.BACKGROUND_GREEN: + new_attr=(new_attr&~win32console.BACKGROUND_GREEN)|win32console.FOREGROUND_GREEN + newbuffer.WriteConsoleOutputAttribute((new_attr,),pos) + else: + newbuffer.WriteConsole(str(input_record)) + time.sleep(0.1) + +stdout.SetConsoleActiveScreenBuffer() +newbuffer.Close() +if free_console: + win32console.FreeConsole() + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/win32cred_demo.py b/thirdparty/python25/Lib/site-packages/win32/Demos/win32cred_demo.py new file mode 100644 index 000000000..7c933c757 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/win32cred_demo.py @@ -0,0 +1,52 @@ +""" +Demonstrates prompting for credentials, saving, and loggging on with marshalled credential. +Also shows how to load user's profile +""" + +import win32net, win32security, win32api, win32con +import win32profile, win32cred + +## Prompt for a username/pwd for local computer +uiinfo={'MessageText':'Enter credentials for local machine','CaptionText':'win32cred_demo.py'} +target, pwd, save=win32cred.CredUIPromptForCredentials(TargetName=win32api.GetComputerName(), AuthError=0, + Flags=win32cred.CREDUI_FLAGS_DO_NOT_PERSIST|win32cred.CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX, + Save=False, UiInfo=uiinfo) + +attrs=[ + {'Keyword':'attr1', 'Flags':0, 'Value':u'unicode data'}, + {'Keyword':'attr2', 'Flags':0, 'Value':'character data'} + ] +cred={'Comment':'Created by win32cred_demo.py', 'UserName':target, 'TargetAlias': None, + 'TargetName':target,'CredentialBlob':pwd, 'Flags':win32cred.CRED_FLAGS_USERNAME_TARGET, + 'Persist':win32cred.CRED_PERSIST_ENTERPRISE,'Type':win32cred.CRED_TYPE_DOMAIN_PASSWORD, + 'Attributes':attrs} +win32cred.CredWrite(cred) +pwd=None +print win32cred.CredRead(target, win32cred.CRED_TYPE_DOMAIN_PASSWORD) + +## Marshal saved credential and use it to log on +mc=win32cred.CredMarshalCredential(win32cred.UsernameTargetCredential, target) +th=win32security.LogonUser(mc,None,'',win32con.LOGON32_LOGON_INTERACTIVE, win32con.LOGON32_PROVIDER_DEFAULT) +win32security.ImpersonateLoggedOnUser(th) +print 'GetUserName:',win32api.GetUserName() +win32security.RevertToSelf() + +## Load user's profile. (first check if user has a roaming profile) +username, domain=win32cred.CredUIParseUserName(target) +user_info_4=win32net.NetUserGetInfo(None, username, 4) +profilepath=user_info_4['profile'] +## LoadUserProfile apparently doesn't like an empty string +if not profilepath: + profilepath=None + +## leave Flags in since 2.3 still chokes on some types of optional keyword args +hk=win32profile.LoadUserProfile(th, {'UserName':username, 'Flags':0, 'ProfilePath':profilepath}) +## Get user's environment variables in a form that can be passed to win32process.CreateProcessAsUser +env=win32profile.CreateEnvironmentBlock(th,False) + + +## Cleanup should probably be in a finally block +win32profile.UnloadUserProfile(th, hk) +th.Close() + + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/win32fileDemo.py b/thirdparty/python25/Lib/site-packages/win32/Demos/win32fileDemo.py new file mode 100644 index 000000000..c7f4e570a --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/win32fileDemo.py @@ -0,0 +1,35 @@ +# This is a "demo" of win32file - it used to be more a test case than a +# demo, so has been moved to the test directory. + +# Please contribute your favourite simple little demo. +import win32file, win32api, win32con +import os + +# A very simple demo - note that this does no more than you can do with +# builtin Python file objects, so for something as simple as this, you +# generally *should* use builtin Python objects. Only use win32file etc +# when you need win32 specific features not available in Python. +def SimpleFileDemo(): + testName = os.path.join( win32api.GetTempPath(), "win32file_demo_test_file") + if os.path.exists(testName): os.unlink(testName) + # Open the file for writing. + handle = win32file.CreateFile(testName, + win32file.GENERIC_WRITE, + 0, + None, + win32con.CREATE_NEW, + 0, + None) + test_data = "Hello\0there" + win32file.WriteFile(handle, test_data) + handle.Close() + # Open it for reading. + handle = win32file.CreateFile(testName, win32file.GENERIC_READ, 0, None, win32con.OPEN_EXISTING, 0, None) + rc, data = win32file.ReadFile(handle, 1024) + handle.Close() + if data == test_data: + print "Successfully wrote and read a file" + os.unlink(testName) + +if __name__=='__main__': + SimpleFileDemo() diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/win32gui_demo.py b/thirdparty/python25/Lib/site-packages/win32/Demos/win32gui_demo.py new file mode 100644 index 000000000..542341bd2 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/win32gui_demo.py @@ -0,0 +1,21 @@ +# The start of a win32gui generic demo. +# Feel free to contribute more demos back ;-) + +import win32gui + +def _MyCallback( hwnd, extra ): + hwnds, classes = extra + hwnds.append(hwnd) + classes[win32gui.GetClassName(hwnd)] = 1 + +def TestEnumWindows(): + windows = [] + classes = {} + win32gui.EnumWindows(_MyCallback, (windows, classes)) + print "Enumerated a total of %d windows with %d classes" % (len(windows),len(classes)) + if not classes.has_key("tooltips_class32"): + print "Hrmmmm - I'm very surprised to not find a 'tooltips_class32' class." + +print "Enumerating all windows..." +TestEnumWindows() +print "All tests done!" diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/win32gui_dialog.py b/thirdparty/python25/Lib/site-packages/win32/Demos/win32gui_dialog.py new file mode 100644 index 000000000..6840fe1c0 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/win32gui_dialog.py @@ -0,0 +1,377 @@ +# A demo of a fairly complex dialog. +# +# Features: +# * Uses a "dynamic dialog resource" to build the dialog. +# * Uses a ListView control. +# * Dynamically resizes content. +# * Uses a second worker thread to fill the list. +# * Demostrates support for windows XP themes. + +# If you are on Windows XP, and specify a '--noxp' argument, you will see: +# * alpha-blend issues with icons +# * The buttons are "old" style, rather than based on the XP theme. +# Hence, using: +# import winxpgui as win32gui +# is recommened. +# Please report any problems. +import sys +if "--noxp" in sys.argv: + import win32gui +else: + import winxpgui as win32gui +import win32api +import win32con +import struct, array +import commctrl +import Queue +import os + +IDC_SEARCHTEXT = 1024 +IDC_BUTTON_SEARCH = 1025 +IDC_BUTTON_DISPLAY = 1026 +IDC_LISTBOX = 1027 + +WM_SEARCH_RESULT = win32con.WM_USER + 512 +WM_SEARCH_FINISHED = win32con.WM_USER + 513 + +g_registeredClass = 0 + +g_iconPathName = os.path.abspath(os.path.join( os.path.split(sys.executable)[0], "pyc.ico" )) +if not os.path.isfile(g_iconPathName): + # Look in the source tree. + g_iconPathName = os.path.abspath(os.path.join( os.path.split(sys.executable)[0], "..\\PC\\pyc.ico" )) + if not os.path.isfile(g_iconPathName): + print "Can't find the icon file" + g_iconPathName = None + +class _WIN32MASKEDSTRUCT: + def __init__(self, **kw): + full_fmt = "" + for name, fmt, default, mask in self._struct_items_: + self.__dict__[name] = None + if fmt == "z": + full_fmt += "pi" + else: + full_fmt += fmt + for name, val in kw.items(): + if not self.__dict__.has_key(name): + raise ValueError, "LVITEM structures do not have an item '%s'" % (name,) + self.__dict__[name] = val + + def __setattr__(self, attr, val): + if not attr.startswith("_") and not self.__dict__.has_key(attr): + raise AttributeError, attr + self.__dict__[attr] = val + + def toparam(self): + self._buffs = [] + full_fmt = "" + vals = [] + mask = 0 + # calc the mask + for name, fmt, default, this_mask in self._struct_items_: + if this_mask is not None and self.__dict__.get(name) is not None: + mask |= this_mask + self.mask = mask + for name, fmt, default, this_mask in self._struct_items_: + val = self.__dict__[name] + if fmt == "z": + fmt = "Pi" + if val is None: + vals.append(0) + vals.append(0) + else: + str_buf = array.array("c", val+'\0') + vals.append(str_buf.buffer_info()[0]) + vals.append(len(val)) + self._buffs.append(str_buf) # keep alive during the call. + else: + if val is None: + val = default + vals.append(val) + full_fmt += fmt + return apply(struct.pack, (full_fmt,) + tuple(vals) ) + + +# NOTE: See the win32gui_struct module for an alternative way of dealing +# with these structures +class LVITEM(_WIN32MASKEDSTRUCT): + _struct_items_ = [ + ("mask", "I", 0, None), + ("iItem", "i", 0, None), + ("iSubItem", "i", 0, None), + ("state", "I", 0, commctrl.LVIF_STATE), + ("stateMask", "I", 0, None), + ("text", "z", None, commctrl.LVIF_TEXT), + ("iImage", "i", 0, commctrl.LVIF_IMAGE), + ("lParam", "i", 0, commctrl.LVIF_PARAM), + ("iIdent", "i", 0, None), + ] + +class LVCOLUMN(_WIN32MASKEDSTRUCT): + _struct_items_ = [ + ("mask", "I", 0, None), + ("fmt", "i", 0, commctrl.LVCF_FMT), + ("cx", "i", 0, commctrl.LVCF_WIDTH), + ("text", "z", None, commctrl.LVCF_TEXT), + ("iSubItem", "i", 0, commctrl.LVCF_SUBITEM), + ("iImage", "i", 0, commctrl.LVCF_IMAGE), + ("iOrder", "i", 0, commctrl.LVCF_ORDER), + ] + +class DemoWindowBase: + def __init__(self): + win32gui.InitCommonControls() + self.hinst = win32gui.dllhandle + self.list_data = {} + + def _RegisterWndClass(self): + className = "PythonDocSearch" + global g_registeredClass + if not g_registeredClass: + message_map = {} + wc = win32gui.WNDCLASS() + wc.SetDialogProc() # Make it a dialog class. + wc.hInstance = self.hinst + wc.lpszClassName = className + wc.style = win32con.CS_VREDRAW | win32con.CS_HREDRAW + wc.hCursor = win32gui.LoadCursor( 0, win32con.IDC_ARROW ) + wc.hbrBackground = win32con.COLOR_WINDOW + 1 + wc.lpfnWndProc = message_map # could also specify a wndproc. + # C code: wc.cbWndExtra = DLGWINDOWEXTRA + sizeof(HBRUSH) + (sizeof(COLORREF)); + wc.cbWndExtra = win32con.DLGWINDOWEXTRA + struct.calcsize("Pi") + icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE + wc.hIcon = win32gui.LoadImage(self.hinst, g_iconPathName, win32con.IMAGE_ICON, 0, 0, icon_flags) + classAtom = win32gui.RegisterClass(wc) + g_registeredClass = 1 + return className + + def _GetDialogTemplate(self, dlgClassName): + style = win32con.WS_THICKFRAME | win32con.WS_POPUP | win32con.WS_VISIBLE | win32con.WS_CAPTION | win32con.WS_SYSMENU | win32con.DS_SETFONT | win32con.WS_MINIMIZEBOX + cs = win32con.WS_CHILD | win32con.WS_VISIBLE + title = "Dynamic Dialog Demo" + + # Window frame and title + dlg = [ [title, (0, 0, 210, 250), style, None, (8, "MS Sans Serif"), None, dlgClassName], ] + + # ID label and text box + dlg.append([130, "Enter something", -1, (5, 5, 200, 9), cs | win32con.SS_LEFT]) + s = cs | win32con.WS_TABSTOP | win32con.WS_BORDER + dlg.append(['EDIT', None, IDC_SEARCHTEXT, (5, 15, 200, 12), s]) + + # Search/Display Buttons + # (x positions don't matter here) + s = cs | win32con.WS_TABSTOP + dlg.append([128, "Fill List", IDC_BUTTON_SEARCH, (5, 35, 50, 14), s | win32con.BS_DEFPUSHBUTTON]) + s = win32con.BS_PUSHBUTTON | s + dlg.append([128, "Display", IDC_BUTTON_DISPLAY, (100, 35, 50, 14), s]) + + # List control. + # Can't make this work :( +## s = cs | win32con.WS_TABSTOP +## dlg.append(['SysListView32', "Title", IDC_LISTBOX, (5, 505, 200, 200), s]) + + return dlg + + def _DoCreate(self, fn): + message_map = { + win32con.WM_SIZE: self.OnSize, + win32con.WM_COMMAND: self.OnCommand, + win32con.WM_NOTIFY: self.OnNotify, + win32con.WM_INITDIALOG: self.OnInitDialog, + win32con.WM_CLOSE: self.OnClose, + win32con.WM_DESTROY: self.OnDestroy, + WM_SEARCH_RESULT: self.OnSearchResult, + WM_SEARCH_FINISHED: self.OnSearchFinished, + } + dlgClassName = self._RegisterWndClass() + template = self._GetDialogTemplate(dlgClassName) + return fn(self.hinst, template, 0, message_map) + + def _SetupList(self): + child_style = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.WS_BORDER | win32con.WS_HSCROLL | win32con.WS_VSCROLL + child_style |= commctrl.LVS_SINGLESEL | commctrl.LVS_SHOWSELALWAYS | commctrl.LVS_REPORT + self.hwndList = win32gui.CreateWindow("SysListView32", None, child_style, 0, 0, 100, 100, self.hwnd, IDC_LISTBOX, self.hinst, None) + + child_ex_style = win32gui.SendMessage(self.hwndList, commctrl.LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0) + child_ex_style |= commctrl.LVS_EX_FULLROWSELECT + win32gui.SendMessage(self.hwndList, commctrl.LVM_SETEXTENDEDLISTVIEWSTYLE, 0, child_ex_style) + + # Add an image list - use the builtin shell folder icon - this + # demonstrates the problem with alpha-blending of icons on XP if + # winxpgui is not used in place of win32gui. + il = win32gui.ImageList_Create( + win32api.GetSystemMetrics(win32con.SM_CXSMICON), + win32api.GetSystemMetrics(win32con.SM_CYSMICON), + commctrl.ILC_COLOR32 | commctrl.ILC_MASK, + 1, # initial size + 0) # cGrow + + shell_dll = os.path.join(win32api.GetSystemDirectory(), "shell32.dll") + large, small = win32gui.ExtractIconEx(shell_dll, 4, 1) + win32gui.ImageList_ReplaceIcon(il, -1, small[0]) + win32gui.DestroyIcon(small[0]) + win32gui.DestroyIcon(large[0]) + win32gui.SendMessage(self.hwndList, commctrl.LVM_SETIMAGELIST, + commctrl.LVSIL_SMALL, il) + + # Setup the list control columns. + lvc = LVCOLUMN(mask = commctrl.LVCF_FMT | commctrl.LVCF_WIDTH | commctrl.LVCF_TEXT | commctrl.LVCF_SUBITEM) + lvc.fmt = commctrl.LVCFMT_LEFT + lvc.iSubItem = 1 + lvc.text = "Title" + lvc.cx = 200 + win32gui.SendMessage(self.hwndList, commctrl.LVM_INSERTCOLUMN, 0, lvc.toparam()) + lvc.iSubItem = 0 + lvc.text = "Order" + lvc.cx = 50 + win32gui.SendMessage(self.hwndList, commctrl.LVM_INSERTCOLUMN, 0, lvc.toparam()) + + win32gui.UpdateWindow(self.hwnd) + + def ClearListItems(self): + win32gui.SendMessage(self.hwndList, commctrl.LVM_DELETEALLITEMS) + self.list_data = {} + + def AddListItem(self, data, *columns): + num_items = win32gui.SendMessage(self.hwndList, commctrl.LVM_GETITEMCOUNT) + item = LVITEM(text=columns[0], iItem = num_items) + new_index = win32gui.SendMessage(self.hwndList, commctrl.LVM_INSERTITEM, 0, item.toparam()) + col_no = 1 + for col in columns[1:]: + item = LVITEM(text=col, iItem = new_index, iSubItem = col_no) + win32gui.SendMessage(self.hwndList, commctrl.LVM_SETITEM, 0, item.toparam()) + col_no += 1 + self.list_data[new_index] = data + + def OnInitDialog(self, hwnd, msg, wparam, lparam): + self.hwnd = hwnd + # centre the dialog + desktop = win32gui.GetDesktopWindow() + l,t,r,b = win32gui.GetWindowRect(self.hwnd) + dt_l, dt_t, dt_r, dt_b = win32gui.GetWindowRect(desktop) + centre_x, centre_y = win32gui.ClientToScreen( desktop, ( (dt_r-dt_l)/2, (dt_b-dt_t)/2) ) + win32gui.MoveWindow(hwnd, centre_x-(r/2), centre_y-(b/2), r-l, b-t, 0) + self._SetupList() + l,t,r,b = win32gui.GetClientRect(self.hwnd) + self._DoSize(r-l,b-t, 1) + + def _DoSize(self, cx, cy, repaint = 1): + # right-justify the textbox. + ctrl = win32gui.GetDlgItem(self.hwnd, IDC_SEARCHTEXT) + l, t, r, b = win32gui.GetWindowRect(ctrl) + l, t = win32gui.ScreenToClient(self.hwnd, (l,t) ) + r, b = win32gui.ScreenToClient(self.hwnd, (r,b) ) + win32gui.MoveWindow(ctrl, l, t, cx-l-5, b-t, repaint) + # The button. + ctrl = win32gui.GetDlgItem(self.hwnd, IDC_BUTTON_DISPLAY) + l, t, r, b = win32gui.GetWindowRect(ctrl) + l, t = win32gui.ScreenToClient(self.hwnd, (l,t) ) + r, b = win32gui.ScreenToClient(self.hwnd, (r,b) ) + list_y = b + 10 + w = r - l + win32gui.MoveWindow(ctrl, cx - 5 - w, t, w, b-t, repaint) + + # The list control + win32gui.MoveWindow(self.hwndList, 0, list_y, cx, cy-list_y, repaint) + # The last column of the list control. + new_width = cx - win32gui.SendMessage(self.hwndList, commctrl.LVM_GETCOLUMNWIDTH, 0) + win32gui.SendMessage(self.hwndList, commctrl.LVM_SETCOLUMNWIDTH, 1, new_width) + + def OnSize(self, hwnd, msg, wparam, lparam): + x = win32api.LOWORD(lparam) + y = win32api.HIWORD(lparam) + self._DoSize(x,y) + return 1 + + def OnSearchResult(self, hwnd, msg, wparam, lparam): + try: + while 1: + params = self.result_queue.get(0) + apply(self.AddListItem, params) + except Queue.Empty: + pass + + def OnSearchFinished(self, hwnd, msg, wparam, lparam): + print "OnSearchFinished" + + def OnNotify(self, hwnd, msg, wparam, lparam): + format = "iiiiiiiiiii" + buf = win32gui.PyMakeBuffer(struct.calcsize(format), lparam) + hwndFrom, idFrom, code, iItem, iSubItem, uNewState, uOldState, uChanged, actionx, actiony, lParam \ + = struct.unpack(format, buf) + # *sigh* - work around a problem with old commctrl modules, which had a + # bad value for PY_OU, which therefore cause most "control notification" + # messages to be wrong. + # Code that needs to work with both pre and post pywin32-204 must do + # this too. + code += commctrl.PY_0U + if code == commctrl.NM_DBLCLK: + print "Double click on item", iItem+1 + return 1 + + def OnCommand(self, hwnd, msg, wparam, lparam): + id = win32api.LOWORD(wparam) + if id == IDC_BUTTON_SEARCH: + self.ClearListItems() + def fill_slowly(q, hwnd): + import time + for i in range(20): + q.put(("whatever", str(i+1), "Search result " + str(i) )) + win32gui.PostMessage(hwnd, WM_SEARCH_RESULT, 0, 0) + time.sleep(.25) + win32gui.PostMessage(hwnd, WM_SEARCH_FINISHED, 0, 0) + + import threading + self.result_queue = Queue.Queue() + thread = threading.Thread(target = fill_slowly, args=(self.result_queue, self.hwnd) ) + thread.start() + elif id == IDC_BUTTON_DISPLAY: + print "Display button selected" + sel = win32gui.SendMessage(self.hwndList, commctrl.LVM_GETNEXTITEM, -1, commctrl.LVNI_SELECTED) + print "The selected item is", sel+1 + + # These function differ based on how the window is used, so may be overridden + def OnClose(self, hwnd, msg, wparam, lparam): + raise NotImplementedError + + def OnDestroy(self, hwnd, msg, wparam, lparam): + pass + +# An implementation suitable for use with the Win32 Window functions (ie, not +# a true dialog) +class DemoWindow(DemoWindowBase): + def CreateWindow(self): + # Create the window via CreateDialogBoxIndirect - it can then + # work as a "normal" window, once a message loop is established. + self._DoCreate(win32gui.CreateDialogIndirect) + + def OnClose(self, hwnd, msg, wparam, lparam): + win32gui.DestroyWindow(hwnd) + + # We need to arrange to a WM_QUIT message to be sent to our + # PumpMessages() loop. + def OnDestroy(self, hwnd, msg, wparam, lparam): + win32gui.PostQuitMessage(0) # Terminate the app. + +# An implementation suitable for use with the Win32 Dialog functions. +class DemoDialog(DemoWindowBase): + def DoModal(self): + return self._DoCreate(win32gui.DialogBoxIndirect) + + def OnClose(self, hwnd, msg, wparam, lparam): + win32gui.EndDialog(hwnd, 0) + +def DemoModal(): + w=DemoDialog() + w.DoModal() + +def DemoCreateWindow(): + w=DemoWindow() + w.CreateWindow() + # PumpMessages runs until PostQuitMessage() is called by someone. + win32gui.PumpMessages() + +if __name__=='__main__': + DemoModal() + DemoCreateWindow() diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/win32gui_menu.py b/thirdparty/python25/Lib/site-packages/win32/Demos/win32gui_menu.py new file mode 100644 index 000000000..3a0017eb8 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/win32gui_menu.py @@ -0,0 +1,335 @@ +# Demonstrates some advanced menu concepts using win32gui. +# This creates a taskbar icon which has some fancy menus (but note that +# selecting the menu items does nothing useful - see win32gui_taskbar.py +# for examples of this. + +# NOTE: This is a work in progress. Todo: +# * The "Checked" menu items don't work correctly - I'm not sure why. +# * No support for GetMenuItemInfo. + +# Based on Andy McKay's demo code. +from win32api import * +# Try and use XP features, so we get alpha-blending etc. +try: + from winxpgui import * +except ImportError: + from win32gui import * +from win32gui_struct import * +import win32con +import sys, os +import struct +import array + +this_dir = os.path.split(sys.argv[0])[0] + +class MainWindow: + def __init__(self): + message_map = { + win32con.WM_DESTROY: self.OnDestroy, + win32con.WM_COMMAND: self.OnCommand, + win32con.WM_USER+20 : self.OnTaskbarNotify, + # owner-draw related handlers. + win32con.WM_MEASUREITEM: self.OnMeasureItem, + win32con.WM_DRAWITEM: self.OnDrawItem, + } + # Register the Window class. + wc = WNDCLASS() + hinst = wc.hInstance = GetModuleHandle(None) + wc.lpszClassName = "PythonTaskbarDemo" + wc.lpfnWndProc = message_map # could also specify a wndproc. + classAtom = RegisterClass(wc) + # Create the Window. + style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU + self.hwnd = CreateWindow( classAtom, "Taskbar Demo", style, \ + 0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, \ + 0, 0, hinst, None) + UpdateWindow(self.hwnd) + iconPathName = os.path.abspath(os.path.join( sys.prefix, "pyc.ico" )) + if not os.path.isfile(iconPathName): + # Look in the source tree. + iconPathName = os.path.abspath(os.path.join( os.path.split(sys.executable)[0], "..\\PC\\pyc.ico" )) + if os.path.isfile(iconPathName): + icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE + hicon = LoadImage(hinst, iconPathName, win32con.IMAGE_ICON, 0, 0, icon_flags) + else: + iconPathName = None + print "Can't find a Python icon file - using default" + hicon = LoadIcon(0, win32con.IDI_APPLICATION) + self.iconPathName = iconPathName + + # Load up some information about menus needed by our owner-draw code. + # The font to use on the menu. + ncm = SystemParametersInfo(win32con.SPI_GETNONCLIENTMETRICS) + self.font_menu = CreateFontIndirect(ncm['lfMenuFont']) + # spacing for our ownerdraw menus - not sure exactly what constants + # should be used (and if you owner-draw all items on the menu, it + # doesn't matter!) + self.menu_icon_height = GetSystemMetrics(win32con.SM_CYMENU) - 4 + self.menu_icon_width = self.menu_icon_height + self.icon_x_pad = 8 # space from end of icon to start of text. + # A map we use to stash away data we need for ownerdraw. Keyed + # by integer ID - that ID will be set in dwTypeData of the menu item. + self.menu_item_map = {} + + # Finally, create the menu + self.createMenu() + + flags = NIF_ICON | NIF_MESSAGE | NIF_TIP + nid = (self.hwnd, 0, flags, win32con.WM_USER+20, hicon, "Python Demo") + Shell_NotifyIcon(NIM_ADD, nid) + print "Please right-click on the Python icon in the taskbar" + + def createMenu(self): + self.hmenu = menu = CreatePopupMenu() + # Create our 'Exit' item with the standard, ugly 'close' icon. + item, extras = PackMENUITEMINFO(text = "Exit", + hbmpItem=win32con.HBMMENU_MBAR_CLOSE, + wID=1000) + InsertMenuItem(menu, 0, 1, item) + # Create a 'text only' menu via InsertMenuItem rather then + # AppendMenu, just to prove we can! + item, extras = PackMENUITEMINFO(text = "Text only item", + wID=1001) + InsertMenuItem(menu, 0, 1, item) + + load_bmp_flags=win32con.LR_LOADFROMFILE | \ + win32con.LR_LOADTRANSPARENT + # These images are "over sized", so we load them scaled. + hbmp = LoadImage(0, os.path.join(this_dir, "images/smiley.bmp"), + win32con.IMAGE_BITMAP, 20, 20, load_bmp_flags) + + # Create a top-level menu with a bitmap + item, extras = PackMENUITEMINFO(text="Menu with bitmap", + hbmpItem=hbmp, + wID=1002) + InsertMenuItem(menu, 0, 1, item) + + # Owner-draw menus mainly from: + # http://windowssdk.msdn.microsoft.com/en-us/library/ms647558.aspx + # and: + # http://www.codeguru.com/cpp/controls/menu/bitmappedmenus/article.php/c165 + + # Create one with an icon - this is *lots* more work - we do it + # owner-draw! The primary reason is to handle transparency better - + # converting to a bitmap causes the background to be incorrect when + # the menu item is selected. I can't see a simpler way. + # First, load the icon we want to use. + ico_x = GetSystemMetrics(win32con.SM_CXSMICON) + ico_y = GetSystemMetrics(win32con.SM_CYSMICON) + if self.iconPathName: + hicon = LoadImage(0, self.iconPathName, win32con.IMAGE_ICON, ico_x, ico_y, win32con.LR_LOADFROMFILE) + else: + shell_dll = os.path.join(GetSystemDirectory(), "shell32.dll") + large, small = win32gui.ExtractIconEx(shell_dll, 4, 1) + hicon = small[0] + DestroyIcon(large[0]) + + # Stash away the text and hicon in our map, and add the owner-draw + # item to the menu. + index = 0 + self.menu_item_map[index] = (hicon, "Menu with owner-draw icon") + item, extras = PackMENUITEMINFO(fType=win32con.MFT_OWNERDRAW, + dwItemData=index, + wID=1009) + InsertMenuItem(menu, 0, 1, item) + + # Add another icon-based icon - but this time using HBMMENU_CALLBACK + # in the hbmpItem elt, so we only need to draw the icon (ie, not the + # text or checkmark) + index = 1 + self.menu_item_map[index] = (hicon, None) + item, extras = PackMENUITEMINFO(text="Menu with o-d icon 2", + dwItemData=index, + hbmpItem=win32con.HBMMENU_CALLBACK, + wID=1010) + InsertMenuItem(menu, 0, 1, item) + + # Add another icon-based icon - this time by converting + # via bitmap. Note the icon background when selected is ugly :( + hdcBitmap = CreateCompatibleDC(0) + hdcScreen = GetDC(0) + hbm = CreateCompatibleBitmap(hdcScreen, ico_x, ico_y) + hbmOld = SelectObject(hdcBitmap, hbm) + SetBkMode(hdcBitmap, win32con.TRANSPARENT) + # Fill the background. + brush = GetSysColorBrush(win32con.COLOR_MENU) + FillRect(hdcBitmap, (0, 0, 16, 16), brush) + # unclear if brush needs to be freed. Best clue I can find is: + # "GetSysColorBrush returns a cached brush instead of allocating a new + # one." - implies no DeleteObject. + # draw the icon + DrawIconEx(hdcBitmap, 0, 0, hicon, ico_x, ico_y, 0, 0, win32con.DI_NORMAL) + SelectObject(hdcBitmap, hbmOld) + DeleteDC(hdcBitmap) + item, extras = PackMENUITEMINFO(text="Menu with icon", + hbmpItem=hbm, + wID=1011) + InsertMenuItem(menu, 0, 1, item) + + # Create a sub-menu, and put a few funky ones there. + self.sub_menu = sub_menu = CreatePopupMenu() + # A 'checkbox' menu. + item, extras = PackMENUITEMINFO(fState=win32con.MFS_CHECKED, + text="Checkbox menu", + hbmpItem=hbmp, + wID=1003) + InsertMenuItem(sub_menu, 0, 1, item) + # A 'radio' menu. + InsertMenu(sub_menu, 0, win32con.MF_BYPOSITION, win32con.MF_SEPARATOR, None) + item, extras = PackMENUITEMINFO(fType=win32con.MFT_RADIOCHECK, + fState=win32con.MFS_CHECKED, + text="Checkbox menu - bullet 1", + hbmpItem=hbmp, + wID=1004) + InsertMenuItem(sub_menu, 0, 1, item) + item, extras = PackMENUITEMINFO(fType=win32con.MFT_RADIOCHECK, + fState=win32con.MFS_UNCHECKED, + text="Checkbox menu - bullet 2", + hbmpItem=hbmp, + wID=1005) + InsertMenuItem(sub_menu, 0, 1, item) + # And add the sub-menu to the top-level menu. + item, extras = PackMENUITEMINFO(text="Sub-Menu", + hSubMenu=sub_menu) + InsertMenuItem(menu, 0, 1, item) + + # Set 'Exit' as the default option. + SetMenuDefaultItem(menu, 1000, 0) + + + def OnDestroy(self, hwnd, msg, wparam, lparam): + nid = (self.hwnd, 0) + Shell_NotifyIcon(NIM_DELETE, nid) + PostQuitMessage(0) # Terminate the app. + + def OnTaskbarNotify(self, hwnd, msg, wparam, lparam): + if lparam==win32con.WM_RBUTTONUP: + print "You right clicked me." + # display the menu at the cursor pos. + pos = GetCursorPos() + SetForegroundWindow(self.hwnd) + TrackPopupMenu(self.hmenu, win32con.TPM_LEFTALIGN, pos[0], pos[1], 0, self.hwnd, None) + PostMessage(self.hwnd, win32con.WM_NULL, 0, 0) + elif lparam==win32con.WM_LBUTTONDBLCLK: + print "You double-clicked me" + # find the default menu item and fire it. + cmd = GetMenuDefaultItem(self.hmenu, False, 0) + if cmd == -1: + print "Can't find a default!" + # and just pretend it came from the menu + self.OnCommand(hwnd, win32con.WM_COMMAND, cmd, 0) + return 1 + + def OnCommand(self, hwnd, msg, wparam, lparam): + id = LOWORD(wparam) + if id == 1000: + print "Goodbye" + DestroyWindow(self.hwnd) + elif id in (1003, 1004, 1005): + # Our 'checkbox' and 'radio' items + state = GetMenuState(self.sub_menu, id, win32con.MF_BYCOMMAND) + if state==-1: + raise RuntimeError, "No item found" + if state & win32con.MF_CHECKED: + check_flags = win32con.MF_UNCHECKED + print "Menu was checked - unchecking" + else: + check_flags = win32con.MF_CHECKED + print "Menu was unchecked - checking" + + if id == 1003: + # simple checkbox + rc = CheckMenuItem(self.sub_menu, id, + win32con.MF_BYCOMMAND | check_flags) + else: + # radio button - must pass the first and last IDs in the + # "group", and the ID in the group that is to be selected. + rc = CheckMenuRadioItem(self.sub_menu, 1004, 1005, id, + win32con.MF_BYCOMMAND) + new_state = GetMenuState(self.sub_menu, id, win32con.MF_BYCOMMAND) + if new_state & win32con.MF_CHECKED != check_flags: + raise RuntimeError, "The new item didn't get the new checked state!" + else: + print "OnCommand for ID", id + + # Owner-draw related functions. We only have 1 owner-draw item, but + # we pretend we have more than that :) + def OnMeasureItem(self, hwnd, msg, wparam, lparam): + fmt = "6i" + buf = PyMakeBuffer(struct.calcsize(fmt), lparam) + data = struct.unpack(fmt, buf) + ctlType, ctlID, itemID, itemWidth, itemHeight, itemData = data + + hicon, text = self.menu_item_map[itemData] + if text is None: + # Only drawing icon due to HBMMENU_CALLBACK + cx = self.menu_icon_width + cy = self.menu_icon_height + else: + # drawing the lot! + dc = GetDC(hwnd) + oldFont = SelectObject(dc, self.font_menu) + cx, cy = GetTextExtentPoint32(dc, text) + SelectObject(dc, oldFont) + ReleaseDC(hwnd, dc) + + cx += GetSystemMetrics(win32con.SM_CXMENUCHECK) + cx += self.menu_icon_width + self.icon_x_pad + + cy = GetSystemMetrics(win32con.SM_CYMENU) + + new_data = struct.pack(fmt, ctlType, ctlID, itemID, cx, cy, itemData) + PySetMemory(lparam, new_data) + return True + + def OnDrawItem(self, hwnd, msg, wparam, lparam): + fmt = "12i" + data = struct.unpack(fmt, PyGetString(lparam, struct.calcsize(fmt))) + ctlType, ctlID, itemID, itemAction, itemState, hwndItem, \ + hDC, left, top, right, bot, itemData = data + + rect = left, top, right, bot + hicon, text = self.menu_item_map[itemData] + + if text is None: + # This means the menu-item had HBMMENU_CALLBACK - so all we + # draw is the icon. rect is the entire area we should use. + DrawIconEx(hDC, left, top, hicon, right-left, bot-top, + 0, 0, win32con.DI_NORMAL) + else: + # If the user has selected the item, use the selected + # text and background colors to display the item. + selected = itemState & win32con.ODS_SELECTED + if selected: + crText = SetTextColor(hDC, GetSysColor(win32con.COLOR_HIGHLIGHTTEXT)) + crBkgnd = SetBkColor(hDC, GetSysColor(win32con.COLOR_HIGHLIGHT)) + + each_pad = self.icon_x_pad / 2 + x_icon = left + GetSystemMetrics(win32con.SM_CXMENUCHECK) + each_pad + x_text = x_icon + self.menu_icon_width + each_pad + + # Draw text first, specifying a complete rect to fill - this sets + # up the background (but overwrites anything else already there!) + # Select the font, draw it, and restore the previous font. + hfontOld = SelectObject(hDC, self.font_menu) + ExtTextOut(hDC, x_text, top+2, win32con.ETO_OPAQUE, rect, text) + SelectObject(hDC, hfontOld) + + # Icon image next. Icons are transparent - no need to handle + # selection specially. + DrawIconEx(hDC, x_icon, top+2, hicon, + self.menu_icon_width, self.menu_icon_height, + 0, 0, win32con.DI_NORMAL) + + # Return the text and background colors to their + # normal state (not selected). + if selected: + SetTextColor(hDC, crText) + SetBkColor(hDC, crBkgnd) + +def main(): + w=MainWindow() + PumpMessages() + +if __name__=='__main__': + main() diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/win32gui_taskbar.py b/thirdparty/python25/Lib/site-packages/win32/Demos/win32gui_taskbar.py new file mode 100644 index 000000000..f18319b13 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/win32gui_taskbar.py @@ -0,0 +1,103 @@ +# Creates a task-bar icon. Run from Python.exe to see the +# messages printed. +from win32api import * +from win32gui import * +import win32con +import sys, os + +class MainWindow: + def __init__(self): + msg_TaskbarRestart = RegisterWindowMessage("TaskbarCreated"); + message_map = { + msg_TaskbarRestart: self.OnRestart, + win32con.WM_DESTROY: self.OnDestroy, + win32con.WM_COMMAND: self.OnCommand, + win32con.WM_USER+20 : self.OnTaskbarNotify, + } + # Register the Window class. + wc = WNDCLASS() + hinst = wc.hInstance = GetModuleHandle(None) + wc.lpszClassName = "PythonTaskbarDemo" + wc.style = win32con.CS_VREDRAW | win32con.CS_HREDRAW; + wc.hCursor = LoadCursor( 0, win32con.IDC_ARROW ) + wc.hbrBackground = win32con.COLOR_WINDOW + wc.lpfnWndProc = message_map # could also specify a wndproc. + classAtom = RegisterClass(wc) + # Create the Window. + style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU + self.hwnd = CreateWindow( classAtom, "Taskbar Demo", style, \ + 0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, \ + 0, 0, hinst, None) + UpdateWindow(self.hwnd) + self._DoCreateIcons() + def _DoCreateIcons(self): + # Try and find a custom icon + hinst = GetModuleHandle(None) + iconPathName = os.path.abspath(os.path.join( os.path.split(sys.executable)[0], "pyc.ico" )) + if not os.path.isfile(iconPathName): + # Look in the source tree. + iconPathName = os.path.abspath(os.path.join( os.path.split(sys.executable)[0], "..\\PC\\pyc.ico" )) + if os.path.isfile(iconPathName): + icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE + hicon = LoadImage(hinst, iconPathName, win32con.IMAGE_ICON, 0, 0, icon_flags) + else: + print "Can't find a Python icon file - using default" + hicon = LoadIcon(0, win32con.IDI_APPLICATION) + + flags = NIF_ICON | NIF_MESSAGE | NIF_TIP + nid = (self.hwnd, 0, flags, win32con.WM_USER+20, hicon, "Python Demo") + try: + Shell_NotifyIcon(NIM_ADD, nid) + except error: + # This is common when windows is starting, and this code is hit + # before the taskbar has been created. + print "Failed to add the taskbar icon - is explorer running?" + # but keep running anyway - when explorer starts, we get the + # TaskbarCreated message. + + def OnRestart(self, hwnd, msg, wparam, lparam): + self._DoCreateIcons() + + def OnDestroy(self, hwnd, msg, wparam, lparam): + nid = (self.hwnd, 0) + Shell_NotifyIcon(NIM_DELETE, nid) + PostQuitMessage(0) # Terminate the app. + + def OnTaskbarNotify(self, hwnd, msg, wparam, lparam): + if lparam==win32con.WM_LBUTTONUP: + print "You clicked me." + elif lparam==win32con.WM_LBUTTONDBLCLK: + print "You double-clicked me - goodbye" + DestroyWindow(self.hwnd) + elif lparam==win32con.WM_RBUTTONUP: + print "You right clicked me." + menu = CreatePopupMenu() + AppendMenu( menu, win32con.MF_STRING, 1023, "Display Dialog") + AppendMenu( menu, win32con.MF_STRING, 1024, "Say Hello") + AppendMenu( menu, win32con.MF_STRING, 1025, "Exit program" ) + pos = GetCursorPos() + # See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/menus_0hdi.asp + SetForegroundWindow(self.hwnd) + TrackPopupMenu(menu, win32con.TPM_LEFTALIGN, pos[0], pos[1], 0, self.hwnd, None) + PostMessage(self.hwnd, win32con.WM_NULL, 0, 0) + return 1 + + def OnCommand(self, hwnd, msg, wparam, lparam): + id = LOWORD(wparam) + if id == 1023: + import win32gui_dialog + win32gui_dialog.DemoModal() + elif id == 1024: + print "Hello" + elif id == 1025: + print "Goodbye" + DestroyWindow(self.hwnd) + else: + print "Unknown command -", id + +def main(): + w=MainWindow() + PumpMessages() + +if __name__=='__main__': + main() diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/win32netdemo.py b/thirdparty/python25/Lib/site-packages/win32/Demos/win32netdemo.py new file mode 100644 index 000000000..a1db3748b --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/win32netdemo.py @@ -0,0 +1,231 @@ +import sys +import win32api +import win32net +import win32netcon +import win32security +import getopt +import traceback + +verbose_level = 0 + +server = None # Run on local machine. + +def verbose(msg): + if verbose_level: + print msg + +def CreateUser(): + "Creates a new test user, then deletes the user" + testName = "PyNetTestUser" + try: + win32net.NetUserDel(server, testName) + print "Warning - deleted user before creating it!" + except win32net.error: + pass + + d = {} + d['name'] = testName + d['password'] = 'deleteme' + d['priv'] = win32netcon.USER_PRIV_USER + d['comment'] = "Delete me - created by Python test code" + d['flags'] = win32netcon.UF_NORMAL_ACCOUNT | win32netcon.UF_SCRIPT + win32net.NetUserAdd(server, 1, d) + try: + try: + win32net.NetUserChangePassword(server, testName, "wrong", "new") + print "ERROR: NetUserChangePassword worked with a wrong password!" + except win32net.error: + pass + win32net.NetUserChangePassword(server, testName, "deleteme", "new") + finally: + win32net.NetUserDel(server, testName) + print "Created a user, changed their password, and deleted them!" + +def UserEnum(): + "Enumerates all the local users" + resume = 0 + nuser = 0 + while 1: + data, total, resume = win32net.NetUserEnum(server, 3, win32netcon.FILTER_NORMAL_ACCOUNT, resume) + verbose("Call to NetUserEnum obtained %d entries of %d total" % (len(data), total)) + for user in data: + verbose("Found user %s" % user['name']) + nuser = nuser + 1 + if not resume: + break + assert nuser, "Could not find any users!" + print "Enumerated all the local users" + +def GroupEnum(): + "Enumerates all the domain groups" + nmembers = 0 + resume = 0 + while 1: + data, total, resume = win32net.NetGroupEnum(server, 1, resume) +# print "Call to NetGroupEnum obtained %d entries of %d total" % (len(data), total) + for group in data: + verbose("Found group %(name)s:%(comment)s " % group) + memberresume = 0 + while 1: + memberdata, total, memberresume = win32net.NetGroupGetUsers(server, group['name'], 0, resume) + for member in memberdata: + verbose(" Member %(name)s" % member) + nmembers = nmembers + 1 + if memberresume==0: + break + if not resume: + break + assert nmembers, "Couldnt find a single member in a single group!" + print "Enumerated all the groups" + +def LocalGroupEnum(): + "Enumerates all the local groups" + resume = 0 + nmembers = 0 + while 1: + data, total, resume = win32net.NetLocalGroupEnum(server, 1, resume) + for group in data: + verbose("Found group %(name)s:%(comment)s " % group) + memberresume = 0 + while 1: + memberdata, total, memberresume = win32net.NetLocalGroupGetMembers(server, group['name'], 2, resume) + for member in memberdata: + # Just for the sake of it, we convert the SID to a username + username, domain, type = win32security.LookupAccountSid(server, member['sid']) + nmembers = nmembers + 1 + verbose(" Member %s (%s)" % (username, member['domainandname'])) + if memberresume==0: + break + if not resume: + break + assert nmembers, "Couldnt find a single member in a single group!" + print "Enumerated all the local groups" + +def ServerEnum(): + "Enumerates all servers on the network" + resume = 0 + while 1: + data, total, resume = win32net.NetServerEnum(server, 100, win32netcon.SV_TYPE_ALL, None, resume) + for s in data: + verbose("Found server %s" % s['name']) + # Now loop over the shares. + shareresume=0 + while 1: + sharedata, total, shareresume = win32net.NetShareEnum(server, 2, shareresume) + for share in sharedata: + verbose(" %(netname)s (%(path)s):%(remark)s - in use by %(current_uses)d users" % share) + if not shareresume: + break + if not resume: + break + print "Enumerated all the servers on the network" + +def LocalGroup(uname=None): + "Creates a local group, adds some members, deletes them, then removes the group" + level = 3 + if uname is None: uname=win32api.GetUserName() + if uname.find("\\")<0: + uname = win32api.GetDomainName() + "\\" + uname + group = 'python_test_group' + # delete the group if it already exists + try: + win32net.NetLocalGroupDel(server, group) + print "WARNING: existing local group '%s' has been deleted." + except win32net.error: + pass + group_data = {'name': group} + win32net.NetLocalGroupAdd(server, 1, group_data) + try: + u={'domainandname': uname} + win32net.NetLocalGroupAddMembers(server, group, level, [u]) + mem, tot, res = win32net.NetLocalGroupGetMembers(server, group, level) + print "members are", mem + if mem[0]['domainandname'] != uname: + print "ERROR: LocalGroup just added %s, but members are %r" % (uname, mem) + # Convert the list of dicts to a list of strings. + win32net.NetLocalGroupDelMembers(server, group, [m['domainandname'] for m in mem]) + finally: + win32net.NetLocalGroupDel(server, group) + print "Created a local group, added and removed members, then deleted the group" + +def GetInfo(userName=None): + "Dumps level 3 information about the current user" + if userName is None: userName=win32api.GetUserName() + print "Dumping level 3 information about user" + info = win32net.NetUserGetInfo(server, userName, 3) + for key, val in info.items(): + verbose("%s=%s" % (key,val)) + +def SetInfo(userName=None): + "Attempts to change the current users comment, then set it back" + if userName is None: userName=win32api.GetUserName() + oldData = win32net.NetUserGetInfo(server, userName, 3) + try: + d = oldData.copy() + d["usr_comment"] = "Test comment" + win32net.NetUserSetInfo(server, userName, 3, d) + new = win32net.NetUserGetInfo(server, userName, 3)['usr_comment'] + if str(new) != "Test comment": + raise RuntimeError, "Could not read the same comment back - got %s" % new + print "Changed the data for the user" + finally: + win32net.NetUserSetInfo(server, userName, 3, oldData) + +def SetComputerInfo(): + "Doesnt actually change anything, just make sure we could ;-)" + info = win32net.NetWkstaGetInfo(None, 502) + # *sob* - but we can't! Why not!!! + # win32net.NetWkstaSetInfo(None, 502, info) + +def usage(tests): + import os + print "Usage: %s [-s server ] [-v] [Test ...]" % os.path.basename(sys.argv[0]) + print " -v : Verbose - print more information" + print " -s : server - execute the tests against the named server" + print "where Test is one of:" + for t in tests: + print t.__name__,":", t.__doc__ + print + print "If not tests are specified, all tests are run" + sys.exit(1) + +def main(): + tests = [] + for ob in globals().values(): + if type(ob)==type(main) and ob.__doc__: + tests.append(ob) + opts, args = getopt.getopt(sys.argv[1:], "s:hv") + for opt, val in opts: + if opt=="-s": + global server + server = val + if opt=="-h": + usage(tests) + if opt=="-v": + global verbose_level + verbose_level = verbose_level + 1 + + if len(args)==0: + print "Running all tests - use '-h' to see command-line options..." + dotests = tests + else: + dotests = [] + for arg in args: + for t in tests: + if t.__name__==arg: + dotests.append(t) + break + else: + print "Test '%s' unknown - skipping" % arg + if not len(dotests): + print "Nothing to do!" + usage(tests) + for test in dotests: + try: + test() + except: + print "Test %s failed" % test.__name__ + traceback.print_exc() + +if __name__=='__main__': + main() diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/win32rcparser_demo.py b/thirdparty/python25/Lib/site-packages/win32/Demos/win32rcparser_demo.py new file mode 100644 index 000000000..dcee0d610 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/win32rcparser_demo.py @@ -0,0 +1,83 @@ +# A demo of the win32rcparser module and using win32gui + +import win32gui +import win32api +import win32con +import win32rcparser +import commctrl +import sys, os + +# We use the .rc file in our 'test' directory. +try: + __file__ +except NameError: # pre 2.3 + __file__ = sys.argv[0] + +this_dir = os.path.abspath(os.path.dirname(__file__)) +g_rcname = os.path.abspath( + os.path.join( this_dir, "..", "test", "win32rcparser", "test.rc")) + +if not os.path.isfile(g_rcname): + raise RuntimeError, "Can't locate test.rc (should be at '%s')" % (g_rcname,) + +class DemoWindow: + def __init__(self, dlg_template): + self.dlg_template = dlg_template + + def CreateWindow(self): + self._DoCreate(win32gui.CreateDialogIndirect) + + def DoModal(self): + return self._DoCreate(win32gui.DialogBoxIndirect) + + def _DoCreate(self, fn): + message_map = { + win32con.WM_INITDIALOG: self.OnInitDialog, + win32con.WM_CLOSE: self.OnClose, + win32con.WM_DESTROY: self.OnDestroy, + win32con.WM_COMMAND: self.OnCommand, + } + return fn(0, self.dlg_template, 0, message_map) + + def OnInitDialog(self, hwnd, msg, wparam, lparam): + self.hwnd = hwnd + # centre the dialog + desktop = win32gui.GetDesktopWindow() + l,t,r,b = win32gui.GetWindowRect(self.hwnd) + dt_l, dt_t, dt_r, dt_b = win32gui.GetWindowRect(desktop) + centre_x, centre_y = win32gui.ClientToScreen( desktop, ( (dt_r-dt_l)/2, (dt_b-dt_t)/2) ) + win32gui.MoveWindow(hwnd, centre_x-(r/2), centre_y-(b/2), r-l, b-t, 0) + + def OnCommand(self, hwnd, msg, wparam, lparam): + # Needed to make OK/Cancel work - no other controls are handled. + id = win32api.LOWORD(wparam) + if id in [win32con.IDOK, win32con.IDCANCEL]: + win32gui.EndDialog(hwnd, id) + + def OnClose(self, hwnd, msg, wparam, lparam): + win32gui.EndDialog(hwnd, 0) + + def OnDestroy(self, hwnd, msg, wparam, lparam): + pass + +def DemoModal(): + # Load the .rc file. + resources = win32rcparser.Parse(g_rcname) + for id, ddef in resources.dialogs.items(): + print "Displaying dialog", id + w=DemoWindow(ddef) + w.DoModal() + +if __name__=='__main__': + flags = 0 + for flag in """ICC_DATE_CLASSES ICC_ANIMATE_CLASS ICC_ANIMATE_CLASS + ICC_BAR_CLASSES ICC_COOL_CLASSES ICC_DATE_CLASSES + ICC_HOTKEY_CLASS ICC_INTERNET_CLASSES ICC_LISTVIEW_CLASSES + ICC_PAGESCROLLER_CLASS ICC_PROGRESS_CLASS ICC_TAB_CLASSES + ICC_TREEVIEW_CLASSES ICC_UPDOWN_CLASS ICC_USEREX_CLASSES + ICC_WIN95_CLASSES """.split(): + flags |= getattr(commctrl, flag) + win32gui.InitCommonControlsEx(flags) + # Need to do this go get rich-edit working. + win32api.LoadLibrary("riched20.dll") + DemoModal() diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/win32servicedemo.py b/thirdparty/python25/Lib/site-packages/win32/Demos/win32servicedemo.py new file mode 100644 index 000000000..8aa93eaf7 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/win32servicedemo.py @@ -0,0 +1,23 @@ +import win32service +import win32con + + +def EnumServices(): + resume = 0 + accessSCM = win32con.GENERIC_READ + accessSrv = win32service.SC_MANAGER_ALL_ACCESS + + #Open Service Control Manager + hscm = win32service.OpenSCManager(None, None, accessSCM) + + #Enumerate Service Control Manager DB + + typeFilter = win32service.SERVICE_WIN32 + stateFilter = win32service.SERVICE_STATE_ALL + + statuses = win32service.EnumServicesStatus(hscm, typeFilter, stateFilter) + for (short_name, desc, status) in statuses: + print short_name, desc, status + + +EnumServices() diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/win32ts_logoff_disconnected.py b/thirdparty/python25/Lib/site-packages/win32/Demos/win32ts_logoff_disconnected.py new file mode 100644 index 000000000..6fa8c5909 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/win32ts_logoff_disconnected.py @@ -0,0 +1,13 @@ +""" Finds any disconnected terminal service sessions and logs them off""" +import win32ts +sessions=win32ts.WTSEnumerateSessions(win32ts.WTS_CURRENT_SERVER_HANDLE) +for session in sessions: + """ + WTS_CONNECTSTATE_CLASS: WTSActive,WTSConnected,WTSConnectQuery,WTSShadow,WTSDisconnected, + WTSIdle,WTSListen,WTSReset,WTSDown,WTSInit + """ + if session['State']==win32ts.WTSDisconnected: + sessionid=session['SessionId'] + username=win32ts.WTSQuerySessionInformation(win32ts.WTS_CURRENT_SERVER_HANDLE, sessionid, win32ts.WTSUserName) + print 'Logging off disconnected user:',username + win32ts.WTSLogoffSession(win32ts.WTS_CURRENT_SERVER_HANDLE, sessionid, True) diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/win32wnet/netresource.htm b/thirdparty/python25/Lib/site-packages/win32/Demos/win32wnet/netresource.htm new file mode 100644 index 000000000..d774c5f2a --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/win32wnet/netresource.htm @@ -0,0 +1,238 @@ + + + + + +WIN32WNET + + + + +

    WIN32WNET

    + +

    PyNETRESOURCE

    + +

    The PyNETRESOURCE object is the Python +encapsulation of the Win32 NETRESOURCE structure used with +WNetXXX networking functions and other Win32 APIs. The +implementation can be compiled for Ascii or Unicode and has been +tested on Python 1.5.1.

    + +
    PyNETRESOURCE Object Members:
    + +
      +
    • NETRESOURCE m_nr -- the actual NETRESOURCE + data structure
    • +
    • TCHAR szLName -- local storage for the + lpLocalName member of the NETRESOURCE structure.
      + The names are stored locally and are not stored as native + Python strings.String length is 256 TCHARs maximum.
    • +
    + +
      +
    • TCHAR szRName -- lpRemoteName storage. See + szLName.
    • +
    • TCHAR szProv -- lpProvider storage. See + szLName.
    • +
    • TCHAR szComment -- lpComment storage. See + szLName.
    • +
    + +
    Relevant Python Methods:
    + +
      +
    • x = win32wnet.NETRESOURCE() will + instantiate a new PyNETRESOURCE Object
    • +
    • x.dwScope, x.dwType, x.dwDisplayType, + x.dwUsage -- Integer attributes corresponding to the + NETRESOURCE structure members. Attributes are both + readable and writeable using standard Python attribute + semantics.
    • +
    • X.lpLocalName, x.lpRemoteName, + x.lpComment, x.lpProvider -- String pointers in the + NETRESOURCE structure. They are wrapped to point to + szLName, etc.... These strings are not stored as Python + strings and are therefore both readable and writeable. + Using standard Python attribute semantics, the attributes + return Python strings upon query and take python strings + as input.
    • +
    + +
    'C' Programming Interface:
    + +
      +
    • BOOL PyWinObject_AsNETRESOURCE(PyObject + *ob, NETRESOURCE **ppNetresource, BOOL bNoneOK = TRUE);
    • +
    • PyObject + *PyWinObject_FromNETRESOURCE(const NETRESOURCE + *pNetresource
    • +
    + +

    WIN32WNET Functions

    + +

    win32wnet.py is the Python extension +providing access to the WNetXXX Win32APIs. This module is fully +compilable for both Ascii and Unicode and contains conditional, +if untested as of this writing, compiles for Windows CE. This +module has been tested with Python 1.5.1 and Windows NT +workstation 4.0 SP3.

    + +
    +
    WNetAddConnection2 (
    +
    +
    +
    +
    INTEGER Type, - + RESOURCETYPE_DISK, + RESOURCETYPE_PRINT, or + RESOURCETYPE_ANY
    + STRING LocalName, - String or + None
    + STRING RemoteName, - String + (required to be in network format
    + STRING ProviderName, - String or + None
    + STRING Username,
    + STRING Password
    +
    )
    +
    Returns: PyNone
    +
    +
    +
    +
    +
    The WNetAddConnection2 function + makes a connection to a network resource. The + function can redirect a local device to the + network resource. This function was written + before the PyNETRESOURCE object was created and + thus does not use PyNETRESOURCE in this release + (this will be updated at a later date). The first + four parameters correspond to the NETRESOURCE + object that is being constructed for the Win32API + call. UserName and Password are obvious. Passing + None for UserName and Password will attempt a + NULL session connection. NOTE: when compiled for + Windows CE, this function is conditionally + compiled to call the WNetAddConnection3 + API interface with a NULL hwnd parameter, making + it functionally equivalent to WNetAddConnection2. + WNetAddConnection3 is the only interface + supported by Windows CE.
    +
    +
    +
    + +
    +
    WNetCancelConnection2 (
    +
    +
    +
    +
    STRING Name,
    + INTEGER Flags,
    + INTEGER Force
    +
    )
    +
    Returns: PyNone
    +
    +
    +
    +
    +
    The WNetCancelConnection2 function + breaks an existing network connection. It can + also be used to remove remembered network + connections that are not currently connected. The + Python parameters correspond directly to the + Win32API call parameters. The Name string is the + name of the connection you wish to drop (i.e. O:, + \\bexar\support, + etc...). The Flags parameter indicates wether the + permanent connection information should be + updated or not. A value of zero indicates that no + stored information about the connection should be + updated. A value of CONNECT_UPDATE_PROFILE + indicates that the persistent connection + information for this connection should be updated + (deleted). the Force parameter is a boolean + indicated whether connection termination should + be forced (i.e. open files and connects ignored).
    +
    +
    +
    + +
    +
    WNetOpenEnum (
    +
    +
    +
    INTEGER Scope, - Specifies the scope of + the enumeration.
    + INTEGER Type, - Specifies the resource + types to enumerate.
    + INTEGER Usage, - Specifies the resource + usage to be enumerated.
    + OBJECT NetResource - Python PyNETRESOURCE + object.
    +
    )
    +
    +
    Returns: PyHANDLE
    +
    +
    +
    The WNetOpenEnum function starts + an enumeration of network resources or existing + connections. For full documentation, see the + Win32API references.
    +
    +
    +
    + +
    +
    WNetCloseEnum (
    +
    +
    +
    OBJECT Handle - PyHANDLE object returned + from a previous WNetOpenEnum call.
    + )
    +
    Returns: PyNone
    +
    +
    +
    Closes a PyHANDLE that represents an Open + Enumeration (from WNetOpenEnum)
    +
    +
    +
    + +
    +
    WNetEnumResource (
    +
    +
    +
    OBJECT Handle, - HANDLE (in form of + PyHANDLE) to an open Enumeration Object + (from WNetOpenEnum)
    + OPTIONAL INTEGER - how many items to try + to recieve---0 will default to 64.
    +
    )
    +
    Returns: PyList
    +
    The list contains PyNETRESOURCE objects. + The total number of PyNETRESOURCE objects + will be <= number requested (excepting + the default behavior of requesting 0, + which returns up to 64)
    +
    +
    +
    Implements the WNetEnumResource + Win32 API call. Successive calls to + WNetEnumResource will enumerate starting where + the previous call stopped. That is, the + enumeration is not reset on successive calls + UNLESS the enumeration handle is closed and + reopened. This lets you process an enumeration in + small chunks (as small as 1 item at a time) and + still fully enumerate a network object! Network + resources are not guaranteed to be returned in + any particular order.
    +
    +
    +
    +
    + + diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/win32wnet/testwnet.py b/thirdparty/python25/Lib/site-packages/win32/Demos/win32wnet/testwnet.py new file mode 100644 index 000000000..36396f0fb --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/win32wnet/testwnet.py @@ -0,0 +1,74 @@ +import win32wnet +import sys +from winnetwk import * +import os + +possible_shares = [] + +def _doDumpHandle(handle, level = 0): + indent = " " * level + while 1: + items = win32wnet.WNetEnumResource(handle, 0) + if len(items)==0: + break + for item in items: + try: + if item.dwDisplayType == RESOURCEDISPLAYTYPE_SHARE: + print indent + "Have share with name:", item.lpRemoteName + possible_shares.append(item) + elif item.dwDisplayType == RESOURCEDISPLAYTYPE_GENERIC: + print indent + "Have generic resource with name:", item.lpRemoteName + else: + # Try generic! + print indent + "Enumerating " + item.lpRemoteName, + k = win32wnet.WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,0,item) + print + _doDumpHandle(k, level + 1) + win32wnet.WNetCloseEnum(k) # could do k.Close(), but this is a good test! + except win32wnet.error, details: + print indent + "Couldn't enumerate this resource: " + details[2] + +def TestOpenEnum(): + print "Enumerating all resources on the network - this may take some time..." + handle = win32wnet.WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,None) + + try: + _doDumpHandle(handle) + finally: + handle.Close() + print "Finished dumping all resources." + +def TestConnection(): + if len(possible_shares)==0: + print "Couldn't find any potential shares to connect to" + return + localName = "Z:" # need better way! + for share in possible_shares: + print "Attempting connection of", localName, "to", share.lpRemoteName + try: + win32wnet.WNetAddConnection2(share.dwType, localName, share.lpRemoteName) + except win32wnet.error, details: + print "Couldn't connect: " + details[2] + continue + # Have a connection. + try: + fname = os.path.join(localName + "\\", os.listdir(localName + "\\")[0]) + try: + print "Universal name of '%s' is '%s'" % (fname, win32wnet.WNetGetUniversalName(fname)) + except win32wnet.error, details: + print "Couldn't get universal name of '%s': %s" % (fname, details[2]) + print "User name for this connection is", win32wnet.WNetGetUser(localName) + finally: + win32wnet.WNetCancelConnection2(localName, 0, 0) + # Only do the first share that succeeds. + break + +def TestGetUser(): + u = win32wnet.WNetGetUser() + print "Current global user is", `u` + if u != win32wnet.WNetGetUser(None): + raise RuntimeError, "Default value didnt seem to work!" + +TestGetUser() +TestOpenEnum() +TestConnection() diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/win32wnet/winnetwk.py b/thirdparty/python25/Lib/site-packages/win32/Demos/win32wnet/winnetwk.py new file mode 100644 index 000000000..df3e7cebc --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/win32wnet/winnetwk.py @@ -0,0 +1,98 @@ +# Generated by h2py from d:\mssdk\include\winnetwk.h +WNNC_NET_MSNET = 0x00010000 +WNNC_NET_LANMAN = 0x00020000 +WNNC_NET_NETWARE = 0x00030000 +WNNC_NET_VINES = 0x00040000 +WNNC_NET_10NET = 0x00050000 +WNNC_NET_LOCUS = 0x00060000 +WNNC_NET_SUN_PC_NFS = 0x00070000 +WNNC_NET_LANSTEP = 0x00080000 +WNNC_NET_9TILES = 0x00090000 +WNNC_NET_LANTASTIC = 0x000A0000 +WNNC_NET_AS400 = 0x000B0000 +WNNC_NET_FTP_NFS = 0x000C0000 +WNNC_NET_PATHWORKS = 0x000D0000 +WNNC_NET_LIFENET = 0x000E0000 +WNNC_NET_POWERLAN = 0x000F0000 +WNNC_NET_BWNFS = 0x00100000 +WNNC_NET_COGENT = 0x00110000 +WNNC_NET_FARALLON = 0x00120000 +WNNC_NET_APPLETALK = 0x00130000 +WNNC_NET_INTERGRAPH = 0x00140000 +WNNC_NET_SYMFONET = 0x00150000 +WNNC_NET_CLEARCASE = 0x00160000 +WNNC_NET_FRONTIER = 0x00170000 +WNNC_NET_BMC = 0x00180000 +WNNC_NET_DCE = 0x00190000 +WNNC_NET_DECORB = 0x00200000 +WNNC_NET_PROTSTOR = 0x00210000 +WNNC_NET_FJ_REDIR = 0x00220000 +WNNC_NET_DISTINCT = 0x00230000 +WNNC_NET_TWINS = 0x00240000 +WNNC_NET_RDR2SAMPLE = 0x00250000 +RESOURCE_CONNECTED = 0x00000001 +RESOURCE_GLOBALNET = 0x00000002 +RESOURCE_REMEMBERED = 0x00000003 +RESOURCE_RECENT = 0x00000004 +RESOURCE_CONTEXT = 0x00000005 +RESOURCETYPE_ANY = 0x00000000 +RESOURCETYPE_DISK = 0x00000001 +RESOURCETYPE_PRINT = 0x00000002 +RESOURCETYPE_RESERVED = 0x00000008 +RESOURCETYPE_UNKNOWN = 0xFFFFFFFF +RESOURCEUSAGE_CONNECTABLE = 0x00000001 +RESOURCEUSAGE_CONTAINER = 0x00000002 +RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004 +RESOURCEUSAGE_SIBLING = 0x00000008 +RESOURCEUSAGE_ATTACHED = 0x00000010 +RESOURCEUSAGE_ALL = (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED) +RESOURCEUSAGE_RESERVED = 0x80000000 +RESOURCEDISPLAYTYPE_GENERIC = 0x00000000 +RESOURCEDISPLAYTYPE_DOMAIN = 0x00000001 +RESOURCEDISPLAYTYPE_SERVER = 0x00000002 +RESOURCEDISPLAYTYPE_SHARE = 0x00000003 +RESOURCEDISPLAYTYPE_FILE = 0x00000004 +RESOURCEDISPLAYTYPE_GROUP = 0x00000005 +RESOURCEDISPLAYTYPE_NETWORK = 0x00000006 +RESOURCEDISPLAYTYPE_ROOT = 0x00000007 +RESOURCEDISPLAYTYPE_SHAREADMIN = 0x00000008 +RESOURCEDISPLAYTYPE_DIRECTORY = 0x00000009 +RESOURCEDISPLAYTYPE_TREE = 0x0000000A +RESOURCEDISPLAYTYPE_NDSCONTAINER = 0x0000000B +NETPROPERTY_PERSISTENT = 1 +CONNECT_UPDATE_PROFILE = 0x00000001 +CONNECT_UPDATE_RECENT = 0x00000002 +CONNECT_TEMPORARY = 0x00000004 +CONNECT_INTERACTIVE = 0x00000008 +CONNECT_PROMPT = 0x00000010 +CONNECT_NEED_DRIVE = 0x00000020 +CONNECT_REFCOUNT = 0x00000040 +CONNECT_REDIRECT = 0x00000080 +CONNECT_LOCALDRIVE = 0x00000100 +CONNECT_CURRENT_MEDIA = 0x00000200 +CONNECT_DEFERRED = 0x00000400 +CONNECT_RESERVED = 0xFF000000 +CONNDLG_RO_PATH = 0x00000001 +CONNDLG_CONN_POINT = 0x00000002 +CONNDLG_USE_MRU = 0x00000004 +CONNDLG_HIDE_BOX = 0x00000008 +CONNDLG_PERSIST = 0x00000010 +CONNDLG_NOT_PERSIST = 0x00000020 +DISC_UPDATE_PROFILE = 0x00000001 +DISC_NO_FORCE = 0x00000040 +UNIVERSAL_NAME_INFO_LEVEL = 0x00000001 +REMOTE_NAME_INFO_LEVEL = 0x00000002 +WNFMT_MULTILINE = 0x01 +WNFMT_ABBREVIATED = 0x02 +WNFMT_INENUM = 0x10 +WNFMT_CONNECTION = 0x20 +NETINFO_DLL16 = 0x00000001 +NETINFO_DISKRED = 0x00000004 +NETINFO_PRINTERRED = 0x00000008 +RP_LOGON = 0x01 +RP_INIFILE = 0x02 +PP_DISPLAYERRORS = 0x01 +WNCON_FORNETCARD = 0x00000001 +WNCON_NOTROUTED = 0x00000002 +WNCON_SLOWLINK = 0x00000004 +WNCON_DYNAMIC = 0x00000008 diff --git a/thirdparty/python25/Lib/site-packages/win32/Demos/winprocess.py b/thirdparty/python25/Lib/site-packages/win32/Demos/winprocess.py new file mode 100644 index 000000000..772c2be0e --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/Demos/winprocess.py @@ -0,0 +1,195 @@ +""" +Windows Process Control + +winprocess.run launches a child process and returns the exit code. +Optionally, it can: + redirect stdin, stdout & stderr to files + run the command as another user + limit the process's running time + control the process window (location, size, window state, desktop) +Works on Windows NT, 2000 & XP. Requires Mark Hammond's win32 +extensions. + +This code is free for any purpose, with no warranty of any kind. +-- John B. Dell'Aquila +""" + +import win32api, win32process, win32security +import win32event, win32con, msvcrt, win32gui + + +def logonUser(loginString): + """ + Login as specified user and return handle. + loginString: 'Domain\nUser\nPassword'; for local + login use . or empty string as domain + e.g. '.\nadministrator\nsecret_password' + """ + domain, user, passwd = loginString.split('\n') + return win32security.LogonUser( + user, + domain, + passwd, + win32con.LOGON32_LOGON_INTERACTIVE, + win32con.LOGON32_PROVIDER_DEFAULT + ) + + +class Process: + """ + A Windows process. + """ + + def __init__(self, cmd, login=None, + hStdin=None, hStdout=None, hStderr=None, + show=1, xy=None, xySize=None, + desktop=None): + """ + Create a Windows process. + cmd: command to run + login: run as user 'Domain\nUser\nPassword' + hStdin, hStdout, hStderr: + handles for process I/O; default is caller's stdin, + stdout & stderr + show: wShowWindow (0=SW_HIDE, 1=SW_NORMAL, ...) + xy: window offset (x, y) of upper left corner in pixels + xySize: window size (width, height) in pixels + desktop: lpDesktop - name of desktop e.g. 'winsta0\\default' + None = inherit current desktop + '' = create new desktop if necessary + + User calling login requires additional privileges: + Act as part of the operating system [not needed on Windows XP] + Increase quotas + Replace a process level token + Login string must EITHER be an administrator's account + (ordinary user can't access current desktop - see Microsoft + Q165194) OR use desktop='' to run another desktop invisibly + (may be very slow to startup & finalize). + """ + si = win32process.STARTUPINFO() + si.dwFlags = (win32con.STARTF_USESTDHANDLES ^ + win32con.STARTF_USESHOWWINDOW) + if hStdin is None: + si.hStdInput = win32api.GetStdHandle(win32api.STD_INPUT_HANDLE) + else: + si.hStdInput = hStdin + if hStdout is None: + si.hStdOutput = win32api.GetStdHandle(win32api.STD_OUTPUT_HANDLE) + else: + si.hStdOutput = hStdout + if hStderr is None: + si.hStdError = win32api.GetStdHandle(win32api.STD_ERROR_HANDLE) + else: + si.hStdError = hStderr + si.wShowWindow = show + if xy is not None: + si.dwX, si.dwY = xy + si.dwFlags ^= win32con.STARTF_USEPOSITION + if xySize is not None: + si.dwXSize, si.dwYSize = xySize + si.dwFlags ^= win32con.STARTF_USESIZE + if desktop is not None: + si.lpDesktop = desktop + procArgs = (None, # appName + cmd, # commandLine + None, # processAttributes + None, # threadAttributes + 1, # bInheritHandles + win32process.CREATE_NEW_CONSOLE, # dwCreationFlags + None, # newEnvironment + None, # currentDirectory + si) # startupinfo + if login is not None: + hUser = logonUser(login) + win32security.ImpersonateLoggedOnUser(hUser) + procHandles = win32process.CreateProcessAsUser(hUser, *procArgs) + win32security.RevertToSelf() + else: + procHandles = win32process.CreateProcess(*procArgs) + self.hProcess, self.hThread, self.PId, self.TId = procHandles + + def wait(self, mSec=None): + """ + Wait for process to finish or for specified number of + milliseconds to elapse. + """ + if mSec is None: + mSec = win32event.INFINITE + return win32event.WaitForSingleObject(self.hProcess, mSec) + + def kill(self, gracePeriod=5000): + """ + Kill process. Try for an orderly shutdown via WM_CLOSE. If + still running after gracePeriod (5 sec. default), terminate. + """ + win32gui.EnumWindows(self.__close__, 0) + if self.wait(gracePeriod) != win32event.WAIT_OBJECT_0: + win32process.TerminateProcess(self.hProcess, 0) + win32api.Sleep(100) # wait for resources to be released + + def __close__(self, hwnd, dummy): + """ + EnumWindows callback - sends WM_CLOSE to any window + owned by this process. + """ + TId, PId = win32process.GetWindowThreadProcessId(hwnd) + if PId == self.PId: + win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0) + + def exitCode(self): + """ + Return process exit code. + """ + return win32process.GetExitCodeProcess(self.hProcess) + + +def run(cmd, mSec=None, stdin=None, stdout=None, stderr=None, **kw): + """ + Run cmd as a child process and return exit code. + mSec: terminate cmd after specified number of milliseconds + stdin, stdout, stderr: + file objects for child I/O (use hStdin etc. to attach + handles instead of files); default is caller's stdin, + stdout & stderr; + kw: see Process.__init__ for more keyword options + """ + if stdin is not None: + kw['hStdin'] = msvcrt.get_osfhandle(stdin.fileno()) + if stdout is not None: + kw['hStdout'] = msvcrt.get_osfhandle(stdout.fileno()) + if stderr is not None: + kw['hStderr'] = msvcrt.get_osfhandle(stderr.fileno()) + child = Process(cmd, **kw) + if child.wait(mSec) != win32event.WAIT_OBJECT_0: + child.kill() + raise WindowsError, 'process timeout exceeded' + return child.exitCode() + + +if __name__ == '__main__': + + # Pipe commands to a shell and display the output in notepad + print 'Testing winprocess.py...' + + import tempfile + + timeoutSeconds = 15 + cmdString = """\ +REM Test of winprocess.py piping commands to a shell.\r +REM This window will close in %d seconds.\r +vol\r +net user\r +_this_is_a_test_of_stderr_\r +""" % timeoutSeconds + + cmd, out = tempfile.TemporaryFile(), tempfile.TemporaryFile() + cmd.write(cmdString) + cmd.seek(0) + print 'CMD.EXE exit code:', run('cmd.exe', show=0, stdin=cmd, + stdout=out, stderr=out) + cmd.close() + print 'NOTEPAD exit code:', run('notepad.exe %s' % out.file.name, + show=win32con.SW_MAXIMIZE, + mSec=timeoutSeconds*1000) + out.close() diff --git a/thirdparty/python25/Lib/site-packages/win32/_win32sysloader.pyd b/thirdparty/python25/Lib/site-packages/win32/_win32sysloader.pyd new file mode 100644 index 0000000000000000000000000000000000000000..44d5d3e0f0c9398b2ef2c047bd05537921c57bbd GIT binary patch literal 5632 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 U@WkMQ!517oXHbqE#e*RP04~V26#xJL literal 0 HcmV?d00001 diff --git a/thirdparty/python25/Lib/site-packages/win32/dbi.pyd b/thirdparty/python25/Lib/site-packages/win32/dbi.pyd new file mode 100644 index 0000000000000000000000000000000000000000..da0295694459eb60f0871c5576703b79833a2d0c GIT binary patch literal 8192 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 0x01060000) +#define PYWIN_USE_PYUNICODE +#endif + +// *** NOTE *** FREEZE_PYWINTYPES is deprecated. It used to be used +// by the 'freeze' tool, but now py2exe etc do a far better job, and +// don't require a custom built pywintypes DLL. +#ifdef FREEZE_PYWINTYPES + /* The pywintypes module is being included in a frozen .EXE/.DLL */ +# define PYWINTYPES_EXPORT +#else +# ifdef BUILD_PYWINTYPES + /* We are building pywintypesxx.dll */ +# define PYWINTYPES_EXPORT __declspec(dllexport) +#else + /* This module uses pywintypesxx.dll */ +# define PYWINTYPES_EXPORT __declspec(dllimport) +# if defined(_MSC_VER) +# if defined(DEBUG) || defined(_DEBUG) +# pragma comment(lib,"pywintypes_d.lib") +# else +# pragma comment(lib,"pywintypes.lib") +# endif // DEBUG/_DEBUG +# endif // _MSC_VER +# endif // BUILD_PYWINTYPES +#endif // FREEZE_PYWINTYPES + +#include +#ifdef MS_WINCE +// These macros caused grief on CE once (do they still?) +# ifndef IN +# define IN +# endif +# ifdef OUT +# undef OUT +# endif +# ifndef OUT +# define OUT +# endif +// Having trouble making these work for Palm PCs?? +// NOTE: These are old - for Windows CE 1 devices, and well +// before the PPC platform. It is unlikely recent CE toolkits +// still need all this magic. +# ifndef PYWIN_HPC /* Palm PC */ +# define NO_PYWINTYPES_TIME +# define NO_PYWINTYPES_IID +# define NO_PYWINTYPES_BSTR +# endif +#endif // MS_WINCE +/* +** Error/Exception handling +*/ +extern PYWINTYPES_EXPORT PyObject *PyWinExc_ApiError; +// Register a Windows DLL that contains the messages in the specified range. +extern PYWINTYPES_EXPORT BOOL PyWin_RegisterErrorMessageModule(DWORD first, DWORD last, HINSTANCE hmod); +// Get the previously registered hmodule for an error code. +extern PYWINTYPES_EXPORT HINSTANCE PyWin_GetErrorMessageModule(DWORD err); + + +/* A global function that sets an API style error (ie, (code, fn, errTest)) */ +PYWINTYPES_EXPORT PyObject *PyWin_SetAPIError(char *fnName, long err = 0); + +/* Basic COM Exception handling. The main COM exception object + is actually defined here. However, the most useful functions + for raising the exception are still in the COM package. Therefore, + you can use the fn below to raise a basic COM exception - no fancy error + messages available, just the HRESULT. It will, however, _be_ a COM + exception, and therefore trappable like any other COM exception +*/ +extern PYWINTYPES_EXPORT PyObject *PyWinExc_COMError; +PYWINTYPES_EXPORT PyObject *PyWin_SetBasicCOMError(HRESULT hr); + +/* +** String/UniCode support +*/ +#ifdef PYWIN_USE_PYUNICODE + /* Python has built-in Unicode String support */ +#define PyUnicodeType PyUnicode_Type +// PyUnicode_Check is defined. + +#else + +/* If a Python Unicode object exists, disable it. */ +#ifdef PyUnicode_Check +#undef PyUnicode_Check +#define PyUnicode_Check(ob) ((ob)->ob_type == &PyUnicodeType) +#endif /* PyUnicode_Check */ + + /* Need our custom Unicode object */ +extern PYWINTYPES_EXPORT PyTypeObject PyUnicodeType; // the Type for PyUnicode +#define PyUnicode_Check(ob) ((ob)->ob_type == &PyUnicodeType) + + +// PyUnicode_AsUnicode clashes with the standard Python name - +// so if we are not using Python Unicode objects, we hide the +// name with a #define. +#define PyUnicode_AsUnicode(op) (((PyUnicode *)op)->m_bstrValue) +//extern PYWINTYPES_EXPORT WCHAR *PyUnicode_AsUnicode(PyObject *op); + +#endif /* PYWIN_USE_PYUNICODE */ + +extern PYWINTYPES_EXPORT int PyUnicode_Size(PyObject *op); + +#ifndef NO_PYWINTYPES_BSTR +// Given a PyObject (string, Unicode, etc) create a "BSTR" with the value +PYWINTYPES_EXPORT BOOL PyWinObject_AsBstr(PyObject *stringObject, BSTR *pResult, BOOL bNoneOK = FALSE, DWORD *pResultLen = NULL); +// And free it when finished. +PYWINTYPES_EXPORT void PyWinObject_FreeBstr(BSTR pResult); + +PYWINTYPES_EXPORT PyObject *PyWinObject_FromBstr(const BSTR bstr, BOOL takeOwnership=FALSE); + +// Convert a "char *" to a BSTR - free via ::SysFreeString() +PYWINTYPES_EXPORT BSTR PyWin_String_AsBstr(const char *str); + +#endif // NO_PYWINTYPES_BSTR + +// Given a string or Unicode object, get WCHAR characters. +PYWINTYPES_EXPORT BOOL PyWinObject_AsWCHAR(PyObject *stringObject, WCHAR **pResult, BOOL bNoneOK = FALSE, DWORD *pResultLen = NULL); +// And free it when finished. +PYWINTYPES_EXPORT void PyWinObject_FreeWCHAR(BSTR pResult); + +// Given a PyObject (string, Unicode, etc) create a "char *" with the value +// if pResultLen != NULL, it will be set to the result size NOT INCLUDING +// TERMINATOR (to be in line with SysStringLen, PyString_*, etc) +PYWINTYPES_EXPORT BOOL PyWinObject_AsString(PyObject *stringObject, char **pResult, BOOL bNoneOK = FALSE, DWORD *pResultLen = NULL); +// And free it when finished. +PYWINTYPES_EXPORT void PyWinObject_FreeString(char *pResult); +PYWINTYPES_EXPORT void PyWinObject_FreeString(WCHAR *pResult); + +/* ANSI/Unicode Support */ +/* If UNICODE defined, will be a BSTR - otherwise a char * + Either way - PyWinObject_FreeTCHAR() must be called +*/ + +#ifdef UNICODE +#define PyWinObject_AsTCHAR PyWinObject_AsWCHAR +#define PyWinObject_FreeTCHAR PyWinObject_FreeWCHAR +#define PyWinObject_FromTCHAR PyWinObject_FromOLECHAR +#define PyString_FromTCHAR PyString_FromUnicode +#else /* not UNICODE */ +#define PyWinObject_AsTCHAR PyWinObject_AsString +#define PyWinObject_FreeTCHAR PyWinObject_FreeString +inline PyObject *PyWinObject_FromTCHAR( TCHAR *str ) {return PyString_FromString(str);} +inline PyObject *PyWinObject_FromTCHAR( TCHAR *str, int numChars ) {return PyString_FromStringAndSize(str, numChars);} +#define PyString_FromTCHAR PyString_FromString +#endif + +#define PyWinObject_FromWCHAR PyWinObject_FromOLECHAR + +PYWINTYPES_EXPORT PyObject *PyString_FromUnicode( const OLECHAR *str ); +PYWINTYPES_EXPORT PyObject *PyUnicodeObject_FromString(const char *string); +PYWINTYPES_EXPORT PyObject *PyWinObject_FromOLECHAR(const OLECHAR * str); +PYWINTYPES_EXPORT PyObject *PyWinObject_FromOLECHAR(const OLECHAR * str, int numChars); + +#ifndef MS_WINCE +// String support for buffers allocated via a function of your choice. +PYWINTYPES_EXPORT BOOL PyWinObject_AsPfnAllocatedWCHAR(PyObject *stringObject, + void *(*pfnAllocator)(ULONG), + WCHAR **ppResult, + BOOL bNoneOK = FALSE, + DWORD *pResultLen = NULL); + +// String support for buffers allocated via CoTaskMemAlloc and CoTaskMemFree +PYWINTYPES_EXPORT BOOL PyWinObject_AsTaskAllocatedWCHAR(PyObject *stringObject, WCHAR **ppResult, BOOL bNoneOK /*= FALSE*/,DWORD *pResultLen /*= NULL*/); +PYWINTYPES_EXPORT void PyWinObject_FreeTaskAllocatedWCHAR(WCHAR * str); +#endif // MS_WINCE +// String conversion - These must also be freed with PyWinObject_FreeString +PYWINTYPES_EXPORT BOOL PyWin_WCHAR_AsString(WCHAR *input, DWORD inLen, char **pResult); +PYWINTYPES_EXPORT BOOL PyWin_Bstr_AsString(BSTR input, char **pResult); +PYWINTYPES_EXPORT BOOL PyWin_String_AsWCHAR(char *input, DWORD inLen, WCHAR **pResult); + +PYWINTYPES_EXPORT void PyWinObject_FreeString(char *str); +PYWINTYPES_EXPORT void PyWinObject_FreeString(WCHAR *str); + +/* +** LARGE_INTEGER objects +*/ +#ifdef LONG_LONG + // Python got its own support for 64 bit ints as of Python 1.5.2. + // However, for 1.5.2 we stick without it - we use it for 1.6 and on. +# if (PY_VERSION_HEX < 0x01060000) +# define PYWIN_NO_PYTHON_LONG_LONG +# endif +#else + // If LONG_LONG is undefined, we are still building pre 1.5.2, so + // we have no choice but to define it. +# define PYWIN_NO_PYTHON_LONG_LONG +#endif + +// These need to be renamed. For now, the old names still appear in the DLL. +PYWINTYPES_EXPORT BOOL PyLong_AsTwoInts(PyObject *ob, int *hiint, unsigned *loint); +PYWINTYPES_EXPORT PyObject *PyLong_FromTwoInts(int hidword, unsigned lodword); + +// These seem (to MH anyway :) to be better names than using "int". +inline BOOL PyLong_AsTwoI32(PyObject *ob, int *hiint, unsigned *loint) {return PyLong_AsTwoInts(ob, hiint, loint);} +inline PyObject *PyLong_FromTwoI32(int hidword, unsigned lodword) {return PyLong_FromTwoInts(hidword, lodword);} + +//AsLARGE_INTEGER takes either PyInteger, PyLong, (PyInteger, PyInteger) +PYWINTYPES_EXPORT BOOL PyWinObject_AsLARGE_INTEGER(PyObject *ob, LARGE_INTEGER *pResult); +PYWINTYPES_EXPORT BOOL PyWinObject_AsULARGE_INTEGER(PyObject *ob, ULARGE_INTEGER *pResult); +PYWINTYPES_EXPORT PyObject *PyWinObject_FromLARGE_INTEGER(LARGE_INTEGER &val); +PYWINTYPES_EXPORT PyObject *PyWinObject_FromULARGE_INTEGER(ULARGE_INTEGER &val); +#define PyLong_FromLARGE_INTEGER PyWinObject_FromLARGE_INTEGER +#define PyLong_FromULARGE_INTEGER PyWinObject_FromULARGE_INTEGER + +PyObject *PyLong_FromI64(__int64 ival); +BOOL PyLong_AsI64(PyObject *val, __int64 *lval); + +// Some boolean helpers for Python 2.2 and earlier +#if (PY_VERSION_HEX < 0x02030000 && !defined(PYWIN_NO_BOOL_FROM_LONG)) +// PyBool_FromLong only in 2.3 and later +inline PyObject *PyBool_FromLong(long v) +{ + PyObject *ret= v ? Py_True : Py_False; + Py_INCREF(ret); + return ret; +} +#endif + +/* +** OVERLAPPED Object and API +*/ +class PyOVERLAPPED; // forward declare +extern PYWINTYPES_EXPORT PyTypeObject PyOVERLAPPEDType; // the Type for PyOVERLAPPED +#define PyOVERLAPPED_Check(ob) ((ob)->ob_type == &PyOVERLAPPEDType) +PYWINTYPES_EXPORT BOOL PyWinObject_AsOVERLAPPED(PyObject *ob, OVERLAPPED **ppOverlapped, BOOL bNoneOK = TRUE); +PYWINTYPES_EXPORT BOOL PyWinObject_AsPyOVERLAPPED(PyObject *ob, PyOVERLAPPED **ppOverlapped, BOOL bNoneOK = TRUE); +PYWINTYPES_EXPORT PyObject *PyWinObject_FromOVERLAPPED(const OVERLAPPED *pOverlapped); + +// A global function that can work as a module method for making an OVERLAPPED object. +PYWINTYPES_EXPORT PyObject *PyWinMethod_NewOVERLAPPED(PyObject *self, PyObject *args); + +#ifndef NO_PYWINTYPES_IID +/* +** IID/GUID support +*/ + +extern PYWINTYPES_EXPORT PyTypeObject PyIIDType; // the Type for PyIID +#define PyIID_Check(ob) ((ob)->ob_type == &PyIIDType) + +// Given an object repring a CLSID (either PyIID or string), fill the CLSID. +PYWINTYPES_EXPORT BOOL PyWinObject_AsIID(PyObject *obCLSID, CLSID *clsid); + +// return a native PyIID object representing an IID +PYWINTYPES_EXPORT PyObject *PyWinObject_FromIID(const IID &riid); + +// return a string/Unicode object representing an IID +PYWINTYPES_EXPORT PyObject *PyWinStringObject_FromIID(const IID &riid); +PYWINTYPES_EXPORT PyObject *PyWinUnicodeObject_FromIID(const IID &riid); + +// A global function that can work as a module method for making an IID object. +PYWINTYPES_EXPORT PyObject *PyWinMethod_NewIID( PyObject *self, PyObject *args); +#endif /*NO_PYWINTYPES_IID */ + +/* +** TIME support +*/ +PYWINTYPES_EXPORT PyObject *PyWinObject_FromSYSTEMTIME(const SYSTEMTIME &t); +PYWINTYPES_EXPORT PyObject *PyWinObject_FromFILETIME(const FILETIME &t); + +// Converts a TimeStamp, which is in 100 nanosecond units like a FILETIME +// TimeStamp is actually defined as a LARGE_INTEGER, so this function will also +// accept Windows security "TimeStamp" objects directly - however, we use a +// LARGE_INTEGER prototype to avoid pulling in the windows security headers. +PYWINTYPES_EXPORT PyObject *PyWinObject_FromTimeStamp(const LARGE_INTEGER &t); + +PYWINTYPES_EXPORT BOOL PyWinObject_AsDATE(PyObject *ob, DATE *pDate); +PYWINTYPES_EXPORT BOOL PyWinObject_AsFILETIME(PyObject *ob, FILETIME *pDate); +PYWINTYPES_EXPORT BOOL PyWinObject_AsSYSTEMTIME(PyObject *ob, SYSTEMTIME *pDate); + +#ifndef NO_PYWINTYPES_TIME + +extern PYWINTYPES_EXPORT PyTypeObject PyTimeType; // the Type for PyTime +#define PyTime_Check(ob) ((ob)->ob_type == &PyTimeType) + +PYWINTYPES_EXPORT PyObject *PyWinObject_FromDATE(DATE t); +PYWINTYPES_EXPORT PyObject *PyWinTimeObject_FromLong(long t); + +// A global function that can work as a module method for making a time object. +PYWINTYPES_EXPORT PyObject *PyWinMethod_NewTime( PyObject *self, PyObject *args); + +#endif // NO_PYWINTYPES_TIME + +// functions to return WIN32_FIND_DATA tuples, used in shell, win32api, and win32file +PYWINTYPES_EXPORT PyObject *PyObject_FromWIN32_FIND_DATAA(WIN32_FIND_DATAA *pData); +PYWINTYPES_EXPORT PyObject *PyObject_FromWIN32_FIND_DATAW(WIN32_FIND_DATAW *pData); +#ifdef UNICODE +#define PyObject_FromWIN32_FIND_DATA PyObject_FromWIN32_FIND_DATAW +#else +#define PyObject_FromWIN32_FIND_DATA PyObject_FromWIN32_FIND_DATAA +#endif + +// POINT tuple, used in win32api_display.cpp and win32gui.i +PYWINTYPES_EXPORT BOOL PyWinObject_AsPOINT(PyObject *obpoint, LPPOINT ppoint); + +// IO_COUNTERS dict, used in win32process and win32job +PYWINTYPES_EXPORT PyObject *PyWinObject_FromIO_COUNTERS(PIO_COUNTERS pioc); + +/* +** SECURITY_ATTRIBUTES support +*/ +extern PYWINTYPES_EXPORT PyTypeObject PySECURITY_ATTRIBUTESType; +#define PySECURITY_ATTRIBUTES_Check(ob) ((ob)->ob_type == &PySECURITY_ATTRIBUTESType) +extern PYWINTYPES_EXPORT PyTypeObject PyDEVMODEType; + +PYWINTYPES_EXPORT PyObject *PyWinMethod_NewSECURITY_ATTRIBUTES(PyObject *self, PyObject *args); +PYWINTYPES_EXPORT BOOL PyWinObject_AsSECURITY_ATTRIBUTES(PyObject *ob, SECURITY_ATTRIBUTES **ppSECURITY_ATTRIBUTES, BOOL bNoneOK = TRUE); +PYWINTYPES_EXPORT PyObject *PyWinObject_FromSECURITY_ATTRIBUTES(const SECURITY_ATTRIBUTES &sa); +PYWINTYPES_EXPORT BOOL PyWinObject_AsDEVMODE(PyObject *ob, PDEVMODE * ppDEVMODE, BOOL bNoneOK = TRUE); +PYWINTYPES_EXPORT PyObject *PyWinObject_FromDEVMODE(PDEVMODE); + +/* +** WAVEFORMATEX support +*/ + +PYWINTYPES_EXPORT PyObject *PyWinMethod_NewWAVEFORMATEX(PyObject *self, PyObject *args); +PYWINTYPES_EXPORT PyObject *PyWinObject_FromWAVEFROMATEX(const WAVEFORMATEX &wfx); +PYWINTYPES_EXPORT BOOL PyWinObject_AsWAVEFORMATEX(PyObject *ob, WAVEFORMATEX **ppWAVEFORMATEX, BOOL bNoneOK = TRUE); +extern PYWINTYPES_EXPORT PyTypeObject PyWAVEFORMATEXType; +#define PyWAVEFORMATEX_Check(ob) ((ob)->ob_type == &PyWAVEFORMATEXType) + + +/* +** SECURITY_DESCRIPTOR support +*/ +#ifndef MS_WINCE /* These are not available on Windows CE */ + +extern PYWINTYPES_EXPORT PyTypeObject PySECURITY_DESCRIPTORType; +#define PySECURITY_DESCRIPTOR_Check(ob) ((ob)->ob_type == &PySECURITY_DESCRIPTORType) + +PYWINTYPES_EXPORT PyObject *PyWinMethod_NewSECURITY_DESCRIPTOR(PyObject *self, PyObject *args); +PYWINTYPES_EXPORT BOOL PyWinObject_AsSECURITY_DESCRIPTOR(PyObject *ob, PSECURITY_DESCRIPTOR *ppSECURITY_DESCRIPTOR, BOOL bNoneOK = TRUE); +PYWINTYPES_EXPORT PyObject *PyWinObject_FromSECURITY_DESCRIPTOR(PSECURITY_DESCRIPTOR psd); + +/* +** SID support +*/ +extern PYWINTYPES_EXPORT PyTypeObject PySIDType; +#define PySID_Check(ob) ((ob)->ob_type == &PySIDType) + +PYWINTYPES_EXPORT PyObject *PyWinMethod_NewSID(PyObject *self, PyObject *args); +PYWINTYPES_EXPORT BOOL PyWinObject_AsSID(PyObject *ob, PSID *ppSID, BOOL bNoneOK = FALSE); +PYWINTYPES_EXPORT PyObject *PyWinObject_FromSID(PSID pSID); + +/* +** ACL support +*/ +extern PYWINTYPES_EXPORT PyTypeObject PyACLType; +#define PyACL_Check(ob) ((ob)->ob_type == &PyACLType) + +PYWINTYPES_EXPORT PyObject *PyWinMethod_NewACL(PyObject *self, PyObject *args); +PYWINTYPES_EXPORT BOOL PyWinObject_AsACL(PyObject *ob, PACL *ppACL, BOOL bNoneOK = FALSE); + +#endif /* MS_WINCE */ + +/* +** Win32 HANDLE wrapper - any handle closable by "CloseHandle()" +*/ +extern PYWINTYPES_EXPORT PyTypeObject PyHANDLEType; // the Type for PyHANDLE +#define PyHANDLE_Check(ob) ((ob)->ob_type == &PyHANDLEType) + +PYWINTYPES_EXPORT BOOL PyWinObject_AsHANDLE(PyObject *ob, HANDLE *pRes, BOOL bNoneOK = FALSE); +PYWINTYPES_EXPORT PyObject *PyWinObject_FromHANDLE(HANDLE h); + +// A global function that can work as a module method for making a HANDLE object. +PYWINTYPES_EXPORT PyObject *PyWinMethod_NewHANDLE( PyObject *self, PyObject *args); + +// A global function that does the right thing wrt closing a "handle". +// The object can be either a PyHANDLE or an integer. +// If result is FALSE, a Python error is all setup (cf PyHANDLE::Close(), which doesnt set the Python error) +PYWINTYPES_EXPORT BOOL PyWinObject_CloseHANDLE(PyObject *obHandle); + +PYWINTYPES_EXPORT BOOL PyWinObject_AsHKEY(PyObject *ob, HKEY *pRes, BOOL bNoneOK = FALSE); +PYWINTYPES_EXPORT PyObject *PyWinObject_FromHKEY(HKEY h); +PYWINTYPES_EXPORT BOOL PyWinObject_CloseHKEY(PyObject *obHandle); + +#include "winsock.h" +/* +** SOCKET support. +*/ +PYWINTYPES_EXPORT +BOOL PySocket_AsSOCKET +//------------------------------------------------------------------------- +// Helper function for dealing with socket arguments. +( + PyObject *obSocket, + // [in] Python object being converted into a SOCKET handle. + SOCKET *ps + // [out] Returned socket handle +); + + + +/* +** Other Utilities +*/ +#ifndef NO_PYWINTYPES_BSTR +// ---------------------------------------------------------------------- +// WARNING - NEVER EVER USE new() ON THIS CLASS +// This class can be used as a local variable, typically in a Python/C +// function, and can be passed whereever a TCHAR/WCHAR is expected. +// Typical Usage: +// PyWin_AutoFreeBstr arg; +// PyArg_ParseTuple("O", &obStr); +// PyWinObject_AsAutoFreeBstr(obStr, &arg); +// CallTheFunction(arg); // Will correctly pass BSTR/OLECHAR +// -- when the function goes out of scope, the string owned by "arg" will +// -- automatically be freed. +// ---------------------------------------------------------------------- +class PYWINTYPES_EXPORT PyWin_AutoFreeBstr { +public: + PyWin_AutoFreeBstr( BSTR bstr = NULL ); + ~PyWin_AutoFreeBstr(); + void SetBstr( BSTR bstr ); + operator BSTR() {return m_bstr;} +private: + BSTR m_bstr; +}; + +inline BOOL PyWinObject_AsAutoFreeBstr(PyObject *stringObject, PyWin_AutoFreeBstr *pResult, BOOL bNoneOK = FALSE) +{ + if (bNoneOK && stringObject == Py_None) { + pResult->SetBstr(NULL); + return TRUE; + } + BSTR bs; + if (!PyWinObject_AsBstr(stringObject, &bs, bNoneOK)) + return FALSE; + pResult->SetBstr(bs); + return TRUE; +} +#endif // NO_PYWINTYPES_BSTR + +// ---------------------------------------------------------------------- +// +// THREAD MANAGEMENT +// + +// ### need to rename the PYCOM_ stuff soon... + +// We have 2 discrete locks in use (when no free-threaded is used, anyway). +// The first type of lock is the global Python lock. This is the standard lock +// in use by Python, and must be used as documented by Python. Specifically, no +// 2 threads may _ever_ call _any_ Python code (including INCREF/DECREF) without +// first having this thread lock. +// +// The second type of lock is a "global framework lock". This lock is simply a +// critical section, and used whenever 2 threads of C code need access to global +// data. This is different than the Python lock - this lock is used when no Python +// code can ever be called by the threads, but the C code still needs thread-safety. + +// We also supply helper classes which make the usage of these locks a one-liner. + +// The "framework" lock, implemented as a critical section. +PYWINTYPES_EXPORT void PyWin_AcquireGlobalLock(void); +PYWINTYPES_EXPORT void PyWin_ReleaseGlobalLock(void); + +// Helper class for the DLL global lock. +// +// This class magically waits for the Win32/COM framework global lock, and releases it +// when finished. +// NEVER new one of these objects - only use on the stack! +class CEnterLeaveFramework { +public: + CEnterLeaveFramework() {PyWin_AcquireGlobalLock();} + ~CEnterLeaveFramework() {PyWin_ReleaseGlobalLock();} +}; + +// Python thread-lock stuff. Free-threading patches use different semantics, but +// these are abstracted away here... +#ifndef FORCE_NO_FREE_THREAD +# ifdef WITH_FREE_THREAD +# define PYCOM_USE_FREE_THREAD +# endif +#endif +#ifdef PYCOM_USE_FREE_THREAD +# include +#else +# include +#endif + + +// Helper class for Enter/Leave Python +// +// This class magically waits for the Python global lock, and releases it +// when finished. + +// Nested invocations will deadlock, so be careful. + +// NEVER new one of these objects - only use on the stack! +#ifndef PYCOM_USE_FREE_THREAD +extern PYWINTYPES_EXPORT PyInterpreterState *PyWin_InterpreterState; +extern PYWINTYPES_EXPORT BOOL PyWinThreadState_Ensure(); +extern PYWINTYPES_EXPORT void PyWinThreadState_Free(); +extern PYWINTYPES_EXPORT void PyWinThreadState_Clear(); +extern PYWINTYPES_EXPORT void PyWinInterpreterLock_Acquire(); +extern PYWINTYPES_EXPORT void PyWinInterpreterLock_Release(); + +extern PYWINTYPES_EXPORT void PyWinGlobals_Ensure(); +extern PYWINTYPES_EXPORT void PyWinGlobals_Free(); +#else +#define PyWinThreadState_Ensure PyThreadState_Ensure +#define PyWinThreadState_Free PyThreadState_Free +#define PyWinThreadState_Clear PyThreadState_ClearExc + +#endif + +extern PYWINTYPES_EXPORT void PyWin_MakePendingCalls(); + +// For 2.3, use the PyGILState_ calls +#if (PY_VERSION_HEX >= 0x02030000) +#define PYWIN_USE_GILSTATE +#endif + +#ifndef PYWIN_USE_GILSTATE + +class CEnterLeavePython { +public: + CEnterLeavePython() { + acquired = FALSE; + acquire(); + } + void acquire() { + if (acquired) + return; + created = PyWinThreadState_Ensure(); +#ifndef PYCOM_USE_FREE_THREAD + PyWinInterpreterLock_Acquire(); +#endif + if (created) { + // If pending python calls are waiting as we enter Python, + // it will generally mean an asynch signal handler, etc. + // We can either call it here, or wait for Python to call it + // as part of its "every 'n' opcodes" check. If we wait for + // Python to check it and the pending call raises an exception, + // then it is _our_ code that will fail - this is unfair, + // as the signal was raised before we were entered - indeed, + // we may be directly responding to the signal! + // Thus, we flush all the pending calls here, and report any + // exceptions via our normal exception reporting mechanism. + // (of which we don't have, but not to worry... :) + // We can then execute our code in the knowledge that only + // signals raised _while_ we are executing will cause exceptions. + PyWin_MakePendingCalls(); + } + acquired = TRUE; + } + ~CEnterLeavePython() { + if (acquired) + release(); + } + void release() { + // The interpreter state must be cleared + // _before_ we release the lock, as some of + // the sys. attributes cleared (eg, the current exception) + // may need the lock to invoke their destructors - + // specifically, when exc_value is a class instance, and + // the exception holds the last reference! + if ( !acquired ) + return; + if ( created ) + PyWinThreadState_Clear(); +#ifndef PYCOM_USE_FREE_THREAD + PyWinInterpreterLock_Release(); +#endif + if ( created ) + PyWinThreadState_Free(); + acquired = FALSE; + } +private: + BOOL created; + BOOL acquired; +}; + +#else // PYWIN_USE_GILSTATE + +class CEnterLeavePython { +public: + CEnterLeavePython() { + acquire(); + } + void acquire(void) { + state = PyGILState_Ensure(); + released = FALSE; + } + ~CEnterLeavePython() { + release(); + } + void release(void) { + if (!released) { + PyGILState_Release(state); + released = TRUE; + } + } +private: + PyGILState_STATE state; + BOOL released; +}; +#endif // PYWIN_USE_GILSTATE + +// A helper for simple exception handling. +// try/__try +#ifdef MAINWIN +#define PYWINTYPES_TRY try +#else +#define PYWINTYPES_TRY __try +#endif /* MAINWIN */ + +// catch/__except +#if defined(__MINGW32__) || defined(MAINWIN) +#define PYWINTYPES_EXCEPT catch(...) +#else +#define PYWINTYPES_EXCEPT __except( EXCEPTION_EXECUTE_HANDLER ) +#endif +// End of exception helper macros. + +#endif // __PYWINTYPES_H__ + + diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/afxres.py b/thirdparty/python25/Lib/site-packages/win32/lib/afxres.py new file mode 100644 index 000000000..b6560a84e --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/afxres.py @@ -0,0 +1,497 @@ +# Generated by h2py from stdin +TCS_MULTILINE = 0x0200 +CBRS_ALIGN_LEFT = 0x1000 +CBRS_ALIGN_TOP = 0x2000 +CBRS_ALIGN_RIGHT = 0x4000 +CBRS_ALIGN_BOTTOM = 0x8000 +CBRS_ALIGN_ANY = 0xF000 +CBRS_BORDER_LEFT = 0x0100 +CBRS_BORDER_TOP = 0x0200 +CBRS_BORDER_RIGHT = 0x0400 +CBRS_BORDER_BOTTOM = 0x0800 +CBRS_BORDER_ANY = 0x0F00 +CBRS_TOOLTIPS = 0x0010 +CBRS_FLYBY = 0x0020 +CBRS_FLOAT_MULTI = 0x0040 +CBRS_BORDER_3D = 0x0080 +CBRS_HIDE_INPLACE = 0x0008 +CBRS_SIZE_DYNAMIC = 0x0004 +CBRS_SIZE_FIXED = 0x0002 +CBRS_FLOATING = 0x0001 +CBRS_GRIPPER = 0x00400000 +CBRS_ORIENT_HORZ = (CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM) +CBRS_ORIENT_VERT = (CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT) +CBRS_ORIENT_ANY = (CBRS_ORIENT_HORZ|CBRS_ORIENT_VERT) +CBRS_ALL = 0xFFFF +CBRS_NOALIGN = 0x00000000 +CBRS_LEFT = (CBRS_ALIGN_LEFT|CBRS_BORDER_RIGHT) +CBRS_TOP = (CBRS_ALIGN_TOP|CBRS_BORDER_BOTTOM) +CBRS_RIGHT = (CBRS_ALIGN_RIGHT|CBRS_BORDER_LEFT) +CBRS_BOTTOM = (CBRS_ALIGN_BOTTOM|CBRS_BORDER_TOP) +SBPS_NORMAL = 0x0000 +SBPS_NOBORDERS = 0x0100 +SBPS_POPOUT = 0x0200 +SBPS_OWNERDRAW = 0x1000 +SBPS_DISABLED = 0x04000000 +SBPS_STRETCH = 0x08000000 +ID_INDICATOR_EXT = 0xE700 +ID_INDICATOR_CAPS = 0xE701 +ID_INDICATOR_NUM = 0xE702 +ID_INDICATOR_SCRL = 0xE703 +ID_INDICATOR_OVR = 0xE704 +ID_INDICATOR_REC = 0xE705 +ID_INDICATOR_KANA = 0xE706 +ID_SEPARATOR = 0 +AFX_IDW_CONTROLBAR_FIRST = 0xE800 +AFX_IDW_CONTROLBAR_LAST = 0xE8FF +AFX_IDW_TOOLBAR = 0xE800 +AFX_IDW_STATUS_BAR = 0xE801 +AFX_IDW_PREVIEW_BAR = 0xE802 +AFX_IDW_RESIZE_BAR = 0xE803 +AFX_IDW_DOCKBAR_TOP = 0xE81B +AFX_IDW_DOCKBAR_LEFT = 0xE81C +AFX_IDW_DOCKBAR_RIGHT = 0xE81D +AFX_IDW_DOCKBAR_BOTTOM = 0xE81E +AFX_IDW_DOCKBAR_FLOAT = 0xE81F +def AFX_CONTROLBAR_MASK(nIDC): return (1L << (nIDC - AFX_IDW_CONTROLBAR_FIRST)) + +AFX_IDW_PANE_FIRST = 0xE900 +AFX_IDW_PANE_LAST = 0xE9ff +AFX_IDW_HSCROLL_FIRST = 0xEA00 +AFX_IDW_VSCROLL_FIRST = 0xEA10 +AFX_IDW_SIZE_BOX = 0xEA20 +AFX_IDW_PANE_SAVE = 0xEA21 +AFX_IDS_APP_TITLE = 0xE000 +AFX_IDS_IDLEMESSAGE = 0xE001 +AFX_IDS_HELPMODEMESSAGE = 0xE002 +AFX_IDS_APP_TITLE_EMBEDDING = 0xE003 +AFX_IDS_COMPANY_NAME = 0xE004 +AFX_IDS_OBJ_TITLE_INPLACE = 0xE005 +ID_FILE_NEW = 0xE100 +ID_FILE_OPEN = 0xE101 +ID_FILE_CLOSE = 0xE102 +ID_FILE_SAVE = 0xE103 +ID_FILE_SAVE_AS = 0xE104 +ID_FILE_PAGE_SETUP = 0xE105 +ID_FILE_PRINT_SETUP = 0xE106 +ID_FILE_PRINT = 0xE107 +ID_FILE_PRINT_DIRECT = 0xE108 +ID_FILE_PRINT_PREVIEW = 0xE109 +ID_FILE_UPDATE = 0xE10A +ID_FILE_SAVE_COPY_AS = 0xE10B +ID_FILE_SEND_MAIL = 0xE10C +ID_FILE_MRU_FIRST = 0xE110 +ID_FILE_MRU_FILE1 = 0xE110 +ID_FILE_MRU_FILE2 = 0xE111 +ID_FILE_MRU_FILE3 = 0xE112 +ID_FILE_MRU_FILE4 = 0xE113 +ID_FILE_MRU_FILE5 = 0xE114 +ID_FILE_MRU_FILE6 = 0xE115 +ID_FILE_MRU_FILE7 = 0xE116 +ID_FILE_MRU_FILE8 = 0xE117 +ID_FILE_MRU_FILE9 = 0xE118 +ID_FILE_MRU_FILE10 = 0xE119 +ID_FILE_MRU_FILE11 = 0xE11A +ID_FILE_MRU_FILE12 = 0xE11B +ID_FILE_MRU_FILE13 = 0xE11C +ID_FILE_MRU_FILE14 = 0xE11D +ID_FILE_MRU_FILE15 = 0xE11E +ID_FILE_MRU_FILE16 = 0xE11F +ID_FILE_MRU_LAST = 0xE11F +ID_EDIT_CLEAR = 0xE120 +ID_EDIT_CLEAR_ALL = 0xE121 +ID_EDIT_COPY = 0xE122 +ID_EDIT_CUT = 0xE123 +ID_EDIT_FIND = 0xE124 +ID_EDIT_PASTE = 0xE125 +ID_EDIT_PASTE_LINK = 0xE126 +ID_EDIT_PASTE_SPECIAL = 0xE127 +ID_EDIT_REPEAT = 0xE128 +ID_EDIT_REPLACE = 0xE129 +ID_EDIT_SELECT_ALL = 0xE12A +ID_EDIT_UNDO = 0xE12B +ID_EDIT_REDO = 0xE12C +ID_WINDOW_NEW = 0xE130 +ID_WINDOW_ARRANGE = 0xE131 +ID_WINDOW_CASCADE = 0xE132 +ID_WINDOW_TILE_HORZ = 0xE133 +ID_WINDOW_TILE_VERT = 0xE134 +ID_WINDOW_SPLIT = 0xE135 +AFX_IDM_WINDOW_FIRST = 0xE130 +AFX_IDM_WINDOW_LAST = 0xE13F +AFX_IDM_FIRST_MDICHILD = 0xFF00 +ID_APP_ABOUT = 0xE140 +ID_APP_EXIT = 0xE141 +ID_HELP_INDEX = 0xE142 +ID_HELP_FINDER = 0xE143 +ID_HELP_USING = 0xE144 +ID_CONTEXT_HELP = 0xE145 +ID_HELP = 0xE146 +ID_DEFAULT_HELP = 0xE147 +ID_NEXT_PANE = 0xE150 +ID_PREV_PANE = 0xE151 +ID_FORMAT_FONT = 0xE160 +ID_OLE_INSERT_NEW = 0xE200 +ID_OLE_EDIT_LINKS = 0xE201 +ID_OLE_EDIT_CONVERT = 0xE202 +ID_OLE_EDIT_CHANGE_ICON = 0xE203 +ID_OLE_EDIT_PROPERTIES = 0xE204 +ID_OLE_VERB_FIRST = 0xE210 +ID_OLE_VERB_LAST = 0xE21F +AFX_ID_PREVIEW_CLOSE = 0xE300 +AFX_ID_PREVIEW_NUMPAGE = 0xE301 +AFX_ID_PREVIEW_NEXT = 0xE302 +AFX_ID_PREVIEW_PREV = 0xE303 +AFX_ID_PREVIEW_PRINT = 0xE304 +AFX_ID_PREVIEW_ZOOMIN = 0xE305 +AFX_ID_PREVIEW_ZOOMOUT = 0xE306 +ID_VIEW_TOOLBAR = 0xE800 +ID_VIEW_STATUS_BAR = 0xE801 +ID_RECORD_FIRST = 0xE900 +ID_RECORD_LAST = 0xE901 +ID_RECORD_NEXT = 0xE902 +ID_RECORD_PREV = 0xE903 +IDC_STATIC = (-1) +AFX_IDS_SCFIRST = 0xEF00 +AFX_IDS_SCSIZE = 0xEF00 +AFX_IDS_SCMOVE = 0xEF01 +AFX_IDS_SCMINIMIZE = 0xEF02 +AFX_IDS_SCMAXIMIZE = 0xEF03 +AFX_IDS_SCNEXTWINDOW = 0xEF04 +AFX_IDS_SCPREVWINDOW = 0xEF05 +AFX_IDS_SCCLOSE = 0xEF06 +AFX_IDS_SCRESTORE = 0xEF12 +AFX_IDS_SCTASKLIST = 0xEF13 +AFX_IDS_MDICHILD = 0xEF1F +AFX_IDS_DESKACCESSORY = 0xEFDA +AFX_IDS_OPENFILE = 0xF000 +AFX_IDS_SAVEFILE = 0xF001 +AFX_IDS_ALLFILTER = 0xF002 +AFX_IDS_UNTITLED = 0xF003 +AFX_IDS_SAVEFILECOPY = 0xF004 +AFX_IDS_PREVIEW_CLOSE = 0xF005 +AFX_IDS_UNNAMED_FILE = 0xF006 +AFX_IDS_ABOUT = 0xF010 +AFX_IDS_HIDE = 0xF011 +AFX_IDP_NO_ERROR_AVAILABLE = 0xF020 +AFX_IDS_NOT_SUPPORTED_EXCEPTION = 0xF021 +AFX_IDS_RESOURCE_EXCEPTION = 0xF022 +AFX_IDS_MEMORY_EXCEPTION = 0xF023 +AFX_IDS_USER_EXCEPTION = 0xF024 +AFX_IDS_PRINTONPORT = 0xF040 +AFX_IDS_ONEPAGE = 0xF041 +AFX_IDS_TWOPAGE = 0xF042 +AFX_IDS_PRINTPAGENUM = 0xF043 +AFX_IDS_PREVIEWPAGEDESC = 0xF044 +AFX_IDS_PRINTDEFAULTEXT = 0xF045 +AFX_IDS_PRINTDEFAULT = 0xF046 +AFX_IDS_PRINTFILTER = 0xF047 +AFX_IDS_PRINTCAPTION = 0xF048 +AFX_IDS_PRINTTOFILE = 0xF049 +AFX_IDS_OBJECT_MENUITEM = 0xF080 +AFX_IDS_EDIT_VERB = 0xF081 +AFX_IDS_ACTIVATE_VERB = 0xF082 +AFX_IDS_CHANGE_LINK = 0xF083 +AFX_IDS_AUTO = 0xF084 +AFX_IDS_MANUAL = 0xF085 +AFX_IDS_FROZEN = 0xF086 +AFX_IDS_ALL_FILES = 0xF087 +AFX_IDS_SAVE_MENU = 0xF088 +AFX_IDS_UPDATE_MENU = 0xF089 +AFX_IDS_SAVE_AS_MENU = 0xF08A +AFX_IDS_SAVE_COPY_AS_MENU = 0xF08B +AFX_IDS_EXIT_MENU = 0xF08C +AFX_IDS_UPDATING_ITEMS = 0xF08D +AFX_IDS_METAFILE_FORMAT = 0xF08E +AFX_IDS_DIB_FORMAT = 0xF08F +AFX_IDS_BITMAP_FORMAT = 0xF090 +AFX_IDS_LINKSOURCE_FORMAT = 0xF091 +AFX_IDS_EMBED_FORMAT = 0xF092 +AFX_IDS_PASTELINKEDTYPE = 0xF094 +AFX_IDS_UNKNOWNTYPE = 0xF095 +AFX_IDS_RTF_FORMAT = 0xF096 +AFX_IDS_TEXT_FORMAT = 0xF097 +AFX_IDS_INVALID_CURRENCY = 0xF098 +AFX_IDS_INVALID_DATETIME = 0xF099 +AFX_IDS_INVALID_DATETIMESPAN = 0xF09A +AFX_IDP_INVALID_FILENAME = 0xF100 +AFX_IDP_FAILED_TO_OPEN_DOC = 0xF101 +AFX_IDP_FAILED_TO_SAVE_DOC = 0xF102 +AFX_IDP_ASK_TO_SAVE = 0xF103 +AFX_IDP_FAILED_TO_CREATE_DOC = 0xF104 +AFX_IDP_FILE_TOO_LARGE = 0xF105 +AFX_IDP_FAILED_TO_START_PRINT = 0xF106 +AFX_IDP_FAILED_TO_LAUNCH_HELP = 0xF107 +AFX_IDP_INTERNAL_FAILURE = 0xF108 +AFX_IDP_COMMAND_FAILURE = 0xF109 +AFX_IDP_FAILED_MEMORY_ALLOC = 0xF10A +AFX_IDP_PARSE_INT = 0xF110 +AFX_IDP_PARSE_REAL = 0xF111 +AFX_IDP_PARSE_INT_RANGE = 0xF112 +AFX_IDP_PARSE_REAL_RANGE = 0xF113 +AFX_IDP_PARSE_STRING_SIZE = 0xF114 +AFX_IDP_PARSE_RADIO_BUTTON = 0xF115 +AFX_IDP_PARSE_BYTE = 0xF116 +AFX_IDP_PARSE_UINT = 0xF117 +AFX_IDP_PARSE_DATETIME = 0xF118 +AFX_IDP_PARSE_CURRENCY = 0xF119 +AFX_IDP_FAILED_INVALID_FORMAT = 0xF120 +AFX_IDP_FAILED_INVALID_PATH = 0xF121 +AFX_IDP_FAILED_DISK_FULL = 0xF122 +AFX_IDP_FAILED_ACCESS_READ = 0xF123 +AFX_IDP_FAILED_ACCESS_WRITE = 0xF124 +AFX_IDP_FAILED_IO_ERROR_READ = 0xF125 +AFX_IDP_FAILED_IO_ERROR_WRITE = 0xF126 +AFX_IDP_STATIC_OBJECT = 0xF180 +AFX_IDP_FAILED_TO_CONNECT = 0xF181 +AFX_IDP_SERVER_BUSY = 0xF182 +AFX_IDP_BAD_VERB = 0xF183 +AFX_IDP_FAILED_TO_NOTIFY = 0xF185 +AFX_IDP_FAILED_TO_LAUNCH = 0xF186 +AFX_IDP_ASK_TO_UPDATE = 0xF187 +AFX_IDP_FAILED_TO_UPDATE = 0xF188 +AFX_IDP_FAILED_TO_REGISTER = 0xF189 +AFX_IDP_FAILED_TO_AUTO_REGISTER = 0xF18A +AFX_IDP_FAILED_TO_CONVERT = 0xF18B +AFX_IDP_GET_NOT_SUPPORTED = 0xF18C +AFX_IDP_SET_NOT_SUPPORTED = 0xF18D +AFX_IDP_ASK_TO_DISCARD = 0xF18E +AFX_IDP_FAILED_TO_CREATE = 0xF18F +AFX_IDP_FAILED_MAPI_LOAD = 0xF190 +AFX_IDP_INVALID_MAPI_DLL = 0xF191 +AFX_IDP_FAILED_MAPI_SEND = 0xF192 +AFX_IDP_FILE_NONE = 0xF1A0 +AFX_IDP_FILE_GENERIC = 0xF1A1 +AFX_IDP_FILE_NOT_FOUND = 0xF1A2 +AFX_IDP_FILE_BAD_PATH = 0xF1A3 +AFX_IDP_FILE_TOO_MANY_OPEN = 0xF1A4 +AFX_IDP_FILE_ACCESS_DENIED = 0xF1A5 +AFX_IDP_FILE_INVALID_FILE = 0xF1A6 +AFX_IDP_FILE_REMOVE_CURRENT = 0xF1A7 +AFX_IDP_FILE_DIR_FULL = 0xF1A8 +AFX_IDP_FILE_BAD_SEEK = 0xF1A9 +AFX_IDP_FILE_HARD_IO = 0xF1AA +AFX_IDP_FILE_SHARING = 0xF1AB +AFX_IDP_FILE_LOCKING = 0xF1AC +AFX_IDP_FILE_DISKFULL = 0xF1AD +AFX_IDP_FILE_EOF = 0xF1AE +AFX_IDP_ARCH_NONE = 0xF1B0 +AFX_IDP_ARCH_GENERIC = 0xF1B1 +AFX_IDP_ARCH_READONLY = 0xF1B2 +AFX_IDP_ARCH_ENDOFFILE = 0xF1B3 +AFX_IDP_ARCH_WRITEONLY = 0xF1B4 +AFX_IDP_ARCH_BADINDEX = 0xF1B5 +AFX_IDP_ARCH_BADCLASS = 0xF1B6 +AFX_IDP_ARCH_BADSCHEMA = 0xF1B7 +AFX_IDS_OCC_SCALEUNITS_PIXELS = 0xF1C0 +AFX_IDS_STATUS_FONT = 0xF230 +AFX_IDS_TOOLTIP_FONT = 0xF231 +AFX_IDS_UNICODE_FONT = 0xF232 +AFX_IDS_MINI_FONT = 0xF233 +AFX_IDP_SQL_FIRST = 0xF280 +AFX_IDP_SQL_CONNECT_FAIL = 0xF281 +AFX_IDP_SQL_RECORDSET_FORWARD_ONLY = 0xF282 +AFX_IDP_SQL_EMPTY_COLUMN_LIST = 0xF283 +AFX_IDP_SQL_FIELD_SCHEMA_MISMATCH = 0xF284 +AFX_IDP_SQL_ILLEGAL_MODE = 0xF285 +AFX_IDP_SQL_MULTIPLE_ROWS_AFFECTED = 0xF286 +AFX_IDP_SQL_NO_CURRENT_RECORD = 0xF287 +AFX_IDP_SQL_NO_ROWS_AFFECTED = 0xF288 +AFX_IDP_SQL_RECORDSET_READONLY = 0xF289 +AFX_IDP_SQL_SQL_NO_TOTAL = 0xF28A +AFX_IDP_SQL_ODBC_LOAD_FAILED = 0xF28B +AFX_IDP_SQL_DYNASET_NOT_SUPPORTED = 0xF28C +AFX_IDP_SQL_SNAPSHOT_NOT_SUPPORTED = 0xF28D +AFX_IDP_SQL_API_CONFORMANCE = 0xF28E +AFX_IDP_SQL_SQL_CONFORMANCE = 0xF28F +AFX_IDP_SQL_NO_DATA_FOUND = 0xF290 +AFX_IDP_SQL_ROW_UPDATE_NOT_SUPPORTED = 0xF291 +AFX_IDP_SQL_ODBC_V2_REQUIRED = 0xF292 +AFX_IDP_SQL_NO_POSITIONED_UPDATES = 0xF293 +AFX_IDP_SQL_LOCK_MODE_NOT_SUPPORTED = 0xF294 +AFX_IDP_SQL_DATA_TRUNCATED = 0xF295 +AFX_IDP_SQL_ROW_FETCH = 0xF296 +AFX_IDP_SQL_INCORRECT_ODBC = 0xF297 +AFX_IDP_SQL_UPDATE_DELETE_FAILED = 0xF298 +AFX_IDP_SQL_DYNAMIC_CURSOR_NOT_SUPPORTED = 0xF299 +AFX_IDP_DAO_FIRST = 0xF2A0 +AFX_IDP_DAO_ENGINE_INITIALIZATION = 0xF2A0 +AFX_IDP_DAO_DFX_BIND = 0xF2A1 +AFX_IDP_DAO_OBJECT_NOT_OPEN = 0xF2A2 +AFX_IDP_DAO_ROWTOOSHORT = 0xF2A3 +AFX_IDP_DAO_BADBINDINFO = 0xF2A4 +AFX_IDP_DAO_COLUMNUNAVAILABLE = 0xF2A5 +AFX_IDC_LISTBOX = 100 +AFX_IDC_CHANGE = 101 +AFX_IDC_PRINT_DOCNAME = 201 +AFX_IDC_PRINT_PRINTERNAME = 202 +AFX_IDC_PRINT_PORTNAME = 203 +AFX_IDC_PRINT_PAGENUM = 204 +ID_APPLY_NOW = 0x3021 +ID_WIZBACK = 0x3023 +ID_WIZNEXT = 0x3024 +ID_WIZFINISH = 0x3025 +AFX_IDC_TAB_CONTROL = 0x3020 +AFX_IDD_FILEOPEN = 28676 +AFX_IDD_FILESAVE = 28677 +AFX_IDD_FONT = 28678 +AFX_IDD_COLOR = 28679 +AFX_IDD_PRINT = 28680 +AFX_IDD_PRINTSETUP = 28681 +AFX_IDD_FIND = 28682 +AFX_IDD_REPLACE = 28683 +AFX_IDD_NEWTYPEDLG = 30721 +AFX_IDD_PRINTDLG = 30722 +AFX_IDD_PREVIEW_TOOLBAR = 30723 +AFX_IDD_PREVIEW_SHORTTOOLBAR = 30731 +AFX_IDD_INSERTOBJECT = 30724 +AFX_IDD_CHANGEICON = 30725 +AFX_IDD_CONVERT = 30726 +AFX_IDD_PASTESPECIAL = 30727 +AFX_IDD_EDITLINKS = 30728 +AFX_IDD_FILEBROWSE = 30729 +AFX_IDD_BUSY = 30730 +AFX_IDD_OBJECTPROPERTIES = 30732 +AFX_IDD_CHANGESOURCE = 30733 +AFX_IDC_CONTEXTHELP = 30977 +AFX_IDC_MAGNIFY = 30978 +AFX_IDC_SMALLARROWS = 30979 +AFX_IDC_HSPLITBAR = 30980 +AFX_IDC_VSPLITBAR = 30981 +AFX_IDC_NODROPCRSR = 30982 +AFX_IDC_TRACKNWSE = 30983 +AFX_IDC_TRACKNESW = 30984 +AFX_IDC_TRACKNS = 30985 +AFX_IDC_TRACKWE = 30986 +AFX_IDC_TRACK4WAY = 30987 +AFX_IDC_MOVE4WAY = 30988 +AFX_IDB_MINIFRAME_MENU = 30994 +AFX_IDB_CHECKLISTBOX_NT = 30995 +AFX_IDB_CHECKLISTBOX_95 = 30996 +AFX_IDR_PREVIEW_ACCEL = 30997 +AFX_IDI_STD_MDIFRAME = 31233 +AFX_IDI_STD_FRAME = 31234 +AFX_IDC_FONTPROP = 1000 +AFX_IDC_FONTNAMES = 1001 +AFX_IDC_FONTSTYLES = 1002 +AFX_IDC_FONTSIZES = 1003 +AFX_IDC_STRIKEOUT = 1004 +AFX_IDC_UNDERLINE = 1005 +AFX_IDC_SAMPLEBOX = 1006 +AFX_IDC_COLOR_BLACK = 1100 +AFX_IDC_COLOR_WHITE = 1101 +AFX_IDC_COLOR_RED = 1102 +AFX_IDC_COLOR_GREEN = 1103 +AFX_IDC_COLOR_BLUE = 1104 +AFX_IDC_COLOR_YELLOW = 1105 +AFX_IDC_COLOR_MAGENTA = 1106 +AFX_IDC_COLOR_CYAN = 1107 +AFX_IDC_COLOR_GRAY = 1108 +AFX_IDC_COLOR_LIGHTGRAY = 1109 +AFX_IDC_COLOR_DARKRED = 1110 +AFX_IDC_COLOR_DARKGREEN = 1111 +AFX_IDC_COLOR_DARKBLUE = 1112 +AFX_IDC_COLOR_LIGHTBROWN = 1113 +AFX_IDC_COLOR_DARKMAGENTA = 1114 +AFX_IDC_COLOR_DARKCYAN = 1115 +AFX_IDC_COLORPROP = 1116 +AFX_IDC_SYSTEMCOLORS = 1117 +AFX_IDC_PROPNAME = 1201 +AFX_IDC_PICTURE = 1202 +AFX_IDC_BROWSE = 1203 +AFX_IDC_CLEAR = 1204 +AFX_IDD_PROPPAGE_COLOR = 32257 +AFX_IDD_PROPPAGE_FONT = 32258 +AFX_IDD_PROPPAGE_PICTURE = 32259 +AFX_IDB_TRUETYPE = 32384 +AFX_IDS_PROPPAGE_UNKNOWN = 0xFE01 +AFX_IDS_COLOR_DESKTOP = 0xFE04 +AFX_IDS_COLOR_APPWORKSPACE = 0xFE05 +AFX_IDS_COLOR_WNDBACKGND = 0xFE06 +AFX_IDS_COLOR_WNDTEXT = 0xFE07 +AFX_IDS_COLOR_MENUBAR = 0xFE08 +AFX_IDS_COLOR_MENUTEXT = 0xFE09 +AFX_IDS_COLOR_ACTIVEBAR = 0xFE0A +AFX_IDS_COLOR_INACTIVEBAR = 0xFE0B +AFX_IDS_COLOR_ACTIVETEXT = 0xFE0C +AFX_IDS_COLOR_INACTIVETEXT = 0xFE0D +AFX_IDS_COLOR_ACTIVEBORDER = 0xFE0E +AFX_IDS_COLOR_INACTIVEBORDER = 0xFE0F +AFX_IDS_COLOR_WNDFRAME = 0xFE10 +AFX_IDS_COLOR_SCROLLBARS = 0xFE11 +AFX_IDS_COLOR_BTNFACE = 0xFE12 +AFX_IDS_COLOR_BTNSHADOW = 0xFE13 +AFX_IDS_COLOR_BTNTEXT = 0xFE14 +AFX_IDS_COLOR_BTNHIGHLIGHT = 0xFE15 +AFX_IDS_COLOR_DISABLEDTEXT = 0xFE16 +AFX_IDS_COLOR_HIGHLIGHT = 0xFE17 +AFX_IDS_COLOR_HIGHLIGHTTEXT = 0xFE18 +AFX_IDS_REGULAR = 0xFE19 +AFX_IDS_BOLD = 0xFE1A +AFX_IDS_ITALIC = 0xFE1B +AFX_IDS_BOLDITALIC = 0xFE1C +AFX_IDS_SAMPLETEXT = 0xFE1D +AFX_IDS_DISPLAYSTRING_FONT = 0xFE1E +AFX_IDS_DISPLAYSTRING_COLOR = 0xFE1F +AFX_IDS_DISPLAYSTRING_PICTURE = 0xFE20 +AFX_IDS_PICTUREFILTER = 0xFE21 +AFX_IDS_PICTYPE_UNKNOWN = 0xFE22 +AFX_IDS_PICTYPE_NONE = 0xFE23 +AFX_IDS_PICTYPE_BITMAP = 0xFE24 +AFX_IDS_PICTYPE_METAFILE = 0xFE25 +AFX_IDS_PICTYPE_ICON = 0xFE26 +AFX_IDS_COLOR_PPG = 0xFE28 +AFX_IDS_COLOR_PPG_CAPTION = 0xFE29 +AFX_IDS_FONT_PPG = 0xFE2A +AFX_IDS_FONT_PPG_CAPTION = 0xFE2B +AFX_IDS_PICTURE_PPG = 0xFE2C +AFX_IDS_PICTURE_PPG_CAPTION = 0xFE2D +AFX_IDS_PICTUREBROWSETITLE = 0xFE30 +AFX_IDS_BORDERSTYLE_0 = 0xFE31 +AFX_IDS_BORDERSTYLE_1 = 0xFE32 +AFX_IDS_VERB_EDIT = 0xFE40 +AFX_IDS_VERB_PROPERTIES = 0xFE41 +AFX_IDP_PICTURECANTOPEN = 0xFE83 +AFX_IDP_PICTURECANTLOAD = 0xFE84 +AFX_IDP_PICTURETOOLARGE = 0xFE85 +AFX_IDP_PICTUREREADFAILED = 0xFE86 +AFX_IDP_E_ILLEGALFUNCTIONCALL = 0xFEA0 +AFX_IDP_E_OVERFLOW = 0xFEA1 +AFX_IDP_E_OUTOFMEMORY = 0xFEA2 +AFX_IDP_E_DIVISIONBYZERO = 0xFEA3 +AFX_IDP_E_OUTOFSTRINGSPACE = 0xFEA4 +AFX_IDP_E_OUTOFSTACKSPACE = 0xFEA5 +AFX_IDP_E_BADFILENAMEORNUMBER = 0xFEA6 +AFX_IDP_E_FILENOTFOUND = 0xFEA7 +AFX_IDP_E_BADFILEMODE = 0xFEA8 +AFX_IDP_E_FILEALREADYOPEN = 0xFEA9 +AFX_IDP_E_DEVICEIOERROR = 0xFEAA +AFX_IDP_E_FILEALREADYEXISTS = 0xFEAB +AFX_IDP_E_BADRECORDLENGTH = 0xFEAC +AFX_IDP_E_DISKFULL = 0xFEAD +AFX_IDP_E_BADRECORDNUMBER = 0xFEAE +AFX_IDP_E_BADFILENAME = 0xFEAF +AFX_IDP_E_TOOMANYFILES = 0xFEB0 +AFX_IDP_E_DEVICEUNAVAILABLE = 0xFEB1 +AFX_IDP_E_PERMISSIONDENIED = 0xFEB2 +AFX_IDP_E_DISKNOTREADY = 0xFEB3 +AFX_IDP_E_PATHFILEACCESSERROR = 0xFEB4 +AFX_IDP_E_PATHNOTFOUND = 0xFEB5 +AFX_IDP_E_INVALIDPATTERNSTRING = 0xFEB6 +AFX_IDP_E_INVALIDUSEOFNULL = 0xFEB7 +AFX_IDP_E_INVALIDFILEFORMAT = 0xFEB8 +AFX_IDP_E_INVALIDPROPERTYVALUE = 0xFEB9 +AFX_IDP_E_INVALIDPROPERTYARRAYINDEX = 0xFEBA +AFX_IDP_E_SETNOTSUPPORTEDATRUNTIME = 0xFEBB +AFX_IDP_E_SETNOTSUPPORTED = 0xFEBC +AFX_IDP_E_NEEDPROPERTYARRAYINDEX = 0xFEBD +AFX_IDP_E_SETNOTPERMITTED = 0xFEBE +AFX_IDP_E_GETNOTSUPPORTEDATRUNTIME = 0xFEBF +AFX_IDP_E_GETNOTSUPPORTED = 0xFEC0 +AFX_IDP_E_PROPERTYNOTFOUND = 0xFEC1 +AFX_IDP_E_INVALIDCLIPBOARDFORMAT = 0xFEC2 +AFX_IDP_E_INVALIDPICTURE = 0xFEC3 +AFX_IDP_E_PRINTERERROR = 0xFEC4 +AFX_IDP_E_CANTSAVEFILETOTEMP = 0xFEC5 +AFX_IDP_E_SEARCHTEXTNOTFOUND = 0xFEC6 +AFX_IDP_E_REPLACEMENTSTOOLONG = 0xFEC7 diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/commctrl.py b/thirdparty/python25/Lib/site-packages/win32/lib/commctrl.py new file mode 100644 index 000000000..5101ca370 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/commctrl.py @@ -0,0 +1,1549 @@ +# Generated by h2py from COMMCTRL.H +WM_USER = 1024 +ICC_LISTVIEW_CLASSES = 1 # listview, header +ICC_TREEVIEW_CLASSES = 2 # treeview, tooltips +ICC_BAR_CLASSES = 4 # toolbar, statusbar, trackbar, tooltips +ICC_TAB_CLASSES = 8 # tab, tooltips +ICC_UPDOWN_CLASS = 16 # updown +ICC_PROGRESS_CLASS = 32 # progress +ICC_HOTKEY_CLASS = 64 # hotkey +ICC_ANIMATE_CLASS = 128 # animate +ICC_WIN95_CLASSES = 255 +ICC_DATE_CLASSES = 256 # month picker, date picker, time picker, updown +ICC_USEREX_CLASSES = 512 # comboex +ICC_COOL_CLASSES = 1024 # rebar (coolbar) control +ICC_INTERNET_CLASSES = 2048 +ICC_PAGESCROLLER_CLASS = 4096 # page scroller +ICC_NATIVEFNTCTL_CLASS = 8192 # native font control +ODT_HEADER = 100 +ODT_TAB = 101 +ODT_LISTVIEW = 102 +PY_0U = 0 +NM_FIRST = (PY_0U) # generic to all controls +NM_LAST = (PY_0U- 99) +LVN_FIRST = (PY_0U-100) # listview +LVN_LAST = (PY_0U-199) +HDN_FIRST = (PY_0U-300) # header +HDN_LAST = (PY_0U-399) +TVN_FIRST = (PY_0U-400) # treeview +TVN_LAST = (PY_0U-499) +TTN_FIRST = (PY_0U-520) # tooltips +TTN_LAST = (PY_0U-549) +TCN_FIRST = (PY_0U-550) # tab control +TCN_LAST = (PY_0U-580) +CDN_FIRST = (PY_0U-601) # common dialog (new) +CDN_LAST = (PY_0U-699) +TBN_FIRST = (PY_0U-700) # toolbar +TBN_LAST = (PY_0U-720) +UDN_FIRST = (PY_0U-721) # updown +UDN_LAST = (PY_0U-740) +MCN_FIRST = (PY_0U-750) # monthcal +MCN_LAST = (PY_0U-759) +DTN_FIRST = (PY_0U-760) # datetimepick +DTN_LAST = (PY_0U-799) +CBEN_FIRST = (PY_0U-800) # combo box ex +CBEN_LAST = (PY_0U-830) +RBN_FIRST = (PY_0U-831) # rebar +RBN_LAST = (PY_0U-859) +IPN_FIRST = (PY_0U-860) # internet address +IPN_LAST = (PY_0U-879) # internet address +SBN_FIRST = (PY_0U-880) # status bar +SBN_LAST = (PY_0U-899) +PGN_FIRST = (PY_0U-900) # Pager Control +PGN_LAST = (PY_0U-950) +LVM_FIRST = 4096 # ListView messages +TV_FIRST = 4352 # TreeView messages +HDM_FIRST = 4608 # Header messages +TCM_FIRST = 4864 # Tab control messages +PGM_FIRST = 5120 # Pager control messages +CCM_FIRST = 8192 # Common control shared messages +CCM_SETBKCOLOR = (CCM_FIRST + 1) # lParam is bkColor +CCM_SETCOLORSCHEME = (CCM_FIRST + 2) # lParam is color scheme +CCM_GETCOLORSCHEME = (CCM_FIRST + 3) # fills in COLORSCHEME pointed to by lParam +CCM_GETDROPTARGET = (CCM_FIRST + 4) +CCM_SETUNICODEFORMAT = (CCM_FIRST + 5) +CCM_GETUNICODEFORMAT = (CCM_FIRST + 6) +INFOTIPSIZE = 1024 +NM_OUTOFMEMORY = (NM_FIRST-1) +NM_CLICK = (NM_FIRST-2) # uses NMCLICK struct +NM_DBLCLK = (NM_FIRST-3) +NM_RETURN = (NM_FIRST-4) +NM_RCLICK = (NM_FIRST-5) # uses NMCLICK struct +NM_RDBLCLK = (NM_FIRST-6) +NM_SETFOCUS = (NM_FIRST-7) +NM_KILLFOCUS = (NM_FIRST-8) +NM_CUSTOMDRAW = (NM_FIRST-12) +NM_HOVER = (NM_FIRST-13) +NM_NCHITTEST = (NM_FIRST-14) # uses NMMOUSE struct +NM_KEYDOWN = (NM_FIRST-15) # uses NMKEY struct +NM_RELEASEDCAPTURE = (NM_FIRST-16) +NM_SETCURSOR = (NM_FIRST-17) # uses NMMOUSE struct +NM_CHAR = (NM_FIRST-18) # uses NMCHAR struct +MSGF_COMMCTRL_BEGINDRAG = 16896 +MSGF_COMMCTRL_SIZEHEADER = 16897 +MSGF_COMMCTRL_DRAGSELECT = 16898 +MSGF_COMMCTRL_TOOLBARCUST = 16899 +CDRF_DODEFAULT = 0 +CDRF_NEWFONT = 2 +CDRF_SKIPDEFAULT = 4 +CDRF_NOTIFYPOSTPAINT = 16 +CDRF_NOTIFYITEMDRAW = 32 +CDRF_NOTIFYSUBITEMDRAW = 32 # flags are the same, we can distinguish by context +CDRF_NOTIFYPOSTERASE = 64 +CDDS_PREPAINT = 1 +CDDS_POSTPAINT = 2 +CDDS_PREERASE = 3 +CDDS_POSTERASE = 4 +CDDS_ITEM = 65536 +CDDS_ITEMPREPAINT = (CDDS_ITEM | CDDS_PREPAINT) +CDDS_ITEMPOSTPAINT = (CDDS_ITEM | CDDS_POSTPAINT) +CDDS_ITEMPREERASE = (CDDS_ITEM | CDDS_PREERASE) +CDDS_ITEMPOSTERASE = (CDDS_ITEM | CDDS_POSTERASE) +CDDS_SUBITEM = 131072 +CDIS_SELECTED = 1 +CDIS_GRAYED = 2 +CDIS_DISABLED = 4 +CDIS_CHECKED = 8 +CDIS_FOCUS = 16 +CDIS_DEFAULT = 32 +CDIS_HOT = 64 +CDIS_MARKED = 128 +CDIS_INDETERMINATE = 256 +CLR_NONE = 0xFFFFFFFFL +CLR_DEFAULT = 0xFF000000L +ILC_MASK = 1 +ILC_COLOR = 0 +ILC_COLORDDB = 254 +ILC_COLOR4 = 4 +ILC_COLOR8 = 8 +ILC_COLOR16 = 16 +ILC_COLOR24 = 24 +ILC_COLOR32 = 32 +ILC_PALETTE = 2048 # (not implemented) +ILD_NORMAL = 0 +ILD_TRANSPARENT = 1 +ILD_MASK = 16 +ILD_IMAGE = 32 +ILD_ROP = 64 +ILD_BLEND25 = 2 +ILD_BLEND50 = 4 +ILD_OVERLAYMASK = 3840 +ILD_SELECTED = ILD_BLEND50 +ILD_FOCUS = ILD_BLEND25 +ILD_BLEND = ILD_BLEND50 +CLR_HILIGHT = CLR_DEFAULT +ILCF_MOVE = (0) +ILCF_SWAP = (1) +WC_HEADERA = "SysHeader32" +WC_HEADER = WC_HEADERA +HDS_HORZ = 0 +HDS_BUTTONS = 2 +HDS_HOTTRACK = 4 +HDS_HIDDEN = 8 +HDS_DRAGDROP = 64 +HDS_FULLDRAG = 128 +HDI_WIDTH = 1 +HDI_HEIGHT = HDI_WIDTH +HDI_TEXT = 2 +HDI_FORMAT = 4 +HDI_LPARAM = 8 +HDI_BITMAP = 16 +HDI_IMAGE = 32 +HDI_DI_SETITEM = 64 +HDI_ORDER = 128 +HDF_LEFT = 0 +HDF_RIGHT = 1 +HDF_CENTER = 2 +HDF_JUSTIFYMASK = 3 +HDF_RTLREADING = 4 +HDF_OWNERDRAW = 32768 +HDF_STRING = 16384 +HDF_BITMAP = 8192 +HDF_BITMAP_ON_RIGHT = 4096 +HDF_IMAGE = 2048 +HDM_GETITEMCOUNT = (HDM_FIRST + 0) +HDM_INSERTITEMA = (HDM_FIRST + 1) +HDM_INSERTITEMW = (HDM_FIRST + 10) +HDM_INSERTITEM = HDM_INSERTITEMA +HDM_DELETEITEM = (HDM_FIRST + 2) +HDM_GETITEMA = (HDM_FIRST + 3) +HDM_GETITEMW = (HDM_FIRST + 11) +HDM_GETITEM = HDM_GETITEMA +HDM_SETITEMA = (HDM_FIRST + 4) +HDM_SETITEMW = (HDM_FIRST + 12) +HDM_SETITEM = HDM_SETITEMA +HDM_LAYOUT = (HDM_FIRST + 5) +HHT_NOWHERE = 1 +HHT_ONHEADER = 2 +HHT_ONDIVIDER = 4 +HHT_ONDIVOPEN = 8 +HHT_ABOVE = 256 +HHT_BELOW = 512 +HHT_TORIGHT = 1024 +HHT_TOLEFT = 2048 +HDM_HITTEST = (HDM_FIRST + 6) +HDM_GETITEMRECT = (HDM_FIRST + 7) +HDM_SETIMAGELIST = (HDM_FIRST + 8) +HDM_GETIMAGELIST = (HDM_FIRST + 9) +HDM_ORDERTOINDEX = (HDM_FIRST + 15) +HDM_CREATEDRAGIMAGE = (HDM_FIRST + 16) # wparam = which item (by index) +HDM_GETORDERARRAY = (HDM_FIRST + 17) +HDM_SETORDERARRAY = (HDM_FIRST + 18) +HDM_SETHOTDIVIDER = (HDM_FIRST + 19) +HDM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT +HDM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT +HDN_ITEMCHANGINGA = (HDN_FIRST-0) +HDN_ITEMCHANGINGW = (HDN_FIRST-20) +HDN_ITEMCHANGEDA = (HDN_FIRST-1) +HDN_ITEMCHANGEDW = (HDN_FIRST-21) +HDN_ITEMCLICKA = (HDN_FIRST-2) +HDN_ITEMCLICKW = (HDN_FIRST-22) +HDN_ITEMDBLCLICKA = (HDN_FIRST-3) +HDN_ITEMDBLCLICKW = (HDN_FIRST-23) +HDN_DIVIDERDBLCLICKA = (HDN_FIRST-5) +HDN_DIVIDERDBLCLICKW = (HDN_FIRST-25) +HDN_BEGINTRACKA = (HDN_FIRST-6) +HDN_BEGINTRACKW = (HDN_FIRST-26) +HDN_ENDTRACKA = (HDN_FIRST-7) +HDN_ENDTRACKW = (HDN_FIRST-27) +HDN_TRACKA = (HDN_FIRST-8) +HDN_TRACKW = (HDN_FIRST-28) +HDN_GETDISPINFOA = (HDN_FIRST-9) +HDN_GETDISPINFOW = (HDN_FIRST-29) +HDN_BEGINDRAG = (HDN_FIRST-10) +HDN_ENDDRAG = (HDN_FIRST-11) +HDN_ITEMCHANGING = HDN_ITEMCHANGINGA +HDN_ITEMCHANGED = HDN_ITEMCHANGEDA +HDN_ITEMCLICK = HDN_ITEMCLICKA +HDN_ITEMDBLCLICK = HDN_ITEMDBLCLICKA +HDN_DIVIDERDBLCLICK = HDN_DIVIDERDBLCLICKA +HDN_BEGINTRACK = HDN_BEGINTRACKA +HDN_ENDTRACK = HDN_ENDTRACKA +HDN_TRACK = HDN_TRACKA +HDN_GETDISPINFO = HDN_GETDISPINFOA +TOOLBARCLASSNAMEA = "ToolbarWindow32" +TOOLBARCLASSNAME = TOOLBARCLASSNAMEA +CMB_MASKED = 2 +TBSTATE_CHECKED = 1 +TBSTATE_PRESSED = 2 +TBSTATE_ENABLED = 4 +TBSTATE_HIDDEN = 8 +TBSTATE_INDETERMINATE = 16 +TBSTATE_WRAP = 32 +TBSTATE_ELLIPSES = 64 +TBSTATE_MARKED = 128 +TBSTYLE_BUTTON = 0 +TBSTYLE_SEP = 1 +TBSTYLE_CHECK = 2 +TBSTYLE_GROUP = 4 +TBSTYLE_CHECKGROUP = (TBSTYLE_GROUP | TBSTYLE_CHECK) +TBSTYLE_DROPDOWN = 8 +TBSTYLE_AUTOSIZE = 16 # automatically calculate the cx of the button +TBSTYLE_NOPREFIX = 32 # if this button should not have accel prefix +TBSTYLE_TOOLTIPS = 256 +TBSTYLE_WRAPABLE = 512 +TBSTYLE_ALTDRAG = 1024 +TBSTYLE_FLAT = 2048 +TBSTYLE_LIST = 4096 +TBSTYLE_CUSTOMERASE = 8192 +TBSTYLE_REGISTERDROP = 16384 +TBSTYLE_TRANSPARENT = 32768 +TBSTYLE_EX_DRAWDDARROWS = 1 +BTNS_BUTTON = TBSTYLE_BUTTON +BTNS_SEP = TBSTYLE_SEP # 0x0001 +BTNS_CHECK = TBSTYLE_CHECK # 0x0002 +BTNS_GROUP = TBSTYLE_GROUP # 0x0004 +BTNS_CHECKGROUP = TBSTYLE_CHECKGROUP # (TBSTYLE_GROUP | TBSTYLE_CHECK) +BTNS_DROPDOWN = TBSTYLE_DROPDOWN # 0x0008 +BTNS_AUTOSIZE = TBSTYLE_AUTOSIZE # 0x0010; automatically calculate the cx of the button +BTNS_NOPREFIX = TBSTYLE_NOPREFIX # 0x0020; this button should not have accel prefix +BTNS_SHOWTEXT = 64 # 0x0040 // ignored unless TBSTYLE_EX_MIXEDBUTTONS is set +BTNS_WHOLEDROPDOWN = 128 # 0x0080 // draw drop-down arrow, but without split arrow section +TBCDRF_NOEDGES = 65536 # Don't draw button edges +TBCDRF_HILITEHOTTRACK = 131072 # Use color of the button bk when hottracked +TBCDRF_NOOFFSET = 262144 # Don't offset button if pressed +TBCDRF_NOMARK = 524288 # Don't draw default highlight of image/text for TBSTATE_MARKED +TBCDRF_NOETCHEDEFFECT = 1048576 # Don't draw etched effect for disabled items +TB_ENABLEBUTTON = (WM_USER + 1) +TB_CHECKBUTTON = (WM_USER + 2) +TB_PRESSBUTTON = (WM_USER + 3) +TB_HIDEBUTTON = (WM_USER + 4) +TB_INDETERMINATE = (WM_USER + 5) +TB_MARKBUTTON = (WM_USER + 6) +TB_ISBUTTONENABLED = (WM_USER + 9) +TB_ISBUTTONCHECKED = (WM_USER + 10) +TB_ISBUTTONPRESSED = (WM_USER + 11) +TB_ISBUTTONHIDDEN = (WM_USER + 12) +TB_ISBUTTONINDETERMINATE = (WM_USER + 13) +TB_ISBUTTONHIGHLIGHTED = (WM_USER + 14) +TB_SETSTATE = (WM_USER + 17) +TB_GETSTATE = (WM_USER + 18) +TB_ADDBITMAP = (WM_USER + 19) +HINST_COMMCTRL = -1 +IDB_STD_SMALL_COLOR = 0 +IDB_STD_LARGE_COLOR = 1 +IDB_VIEW_SMALL_COLOR = 4 +IDB_VIEW_LARGE_COLOR = 5 +IDB_HIST_SMALL_COLOR = 8 +IDB_HIST_LARGE_COLOR = 9 +STD_CUT = 0 +STD_COPY = 1 +STD_PASTE = 2 +STD_UNDO = 3 +STD_REDOW = 4 +STD_DELETE = 5 +STD_FILENEW = 6 +STD_FILEOPEN = 7 +STD_FILESAVE = 8 +STD_PRINTPRE = 9 +STD_PROPERTIES = 10 +STD_HELP = 11 +STD_FIND = 12 +STD_REPLACE = 13 +STD_PRINT = 14 +VIEW_LARGEICONS = 0 +VIEW_SMALLICONS = 1 +VIEW_LIST = 2 +VIEW_DETAILS = 3 +VIEW_SORTNAME = 4 +VIEW_SORTSIZE = 5 +VIEW_SORTDATE = 6 +VIEW_SORTTYPE = 7 +VIEW_PARENTFOLDER = 8 +VIEW_NETCONNECT = 9 +VIEW_NETDISCONNECT = 10 +VIEW_NEWFOLDER = 11 +VIEW_VIEWMENU = 12 +HIST_BACK = 0 +HIST_FORWARD = 1 +HIST_FAVORITES = 2 +HIST_ADDTOFAVORITES = 3 +HIST_VIEWTREE = 4 +TB_ADDBUTTONSA = (WM_USER + 20) +TB_INSERTBUTTONA = (WM_USER + 21) +TB_ADDBUTTONS = (WM_USER + 20) +TB_INSERTBUTTON = (WM_USER + 21) +TB_DELETEBUTTON = (WM_USER + 22) +TB_GETBUTTON = (WM_USER + 23) +TB_BUTTONCOUNT = (WM_USER + 24) +TB_COMMANDTOINDEX = (WM_USER + 25) +TB_SAVERESTOREA = (WM_USER + 26) +TB_SAVERESTOREW = (WM_USER + 76) +TB_CUSTOMIZE = (WM_USER + 27) +TB_ADDSTRINGA = (WM_USER + 28) +TB_ADDSTRINGW = (WM_USER + 77) +TB_GETITEMRECT = (WM_USER + 29) +TB_BUTTONSTRUCTSIZE = (WM_USER + 30) +TB_SETBUTTONSIZE = (WM_USER + 31) +TB_SETBITMAPSIZE = (WM_USER + 32) +TB_AUTOSIZE = (WM_USER + 33) +TB_GETTOOLTIPS = (WM_USER + 35) +TB_SETTOOLTIPS = (WM_USER + 36) +TB_SETPARENT = (WM_USER + 37) +TB_SETROWS = (WM_USER + 39) +TB_GETROWS = (WM_USER + 40) +TB_SETCMDID = (WM_USER + 42) +TB_CHANGEBITMAP = (WM_USER + 43) +TB_GETBITMAP = (WM_USER + 44) +TB_GETBUTTONTEXTA = (WM_USER + 45) +TB_GETBUTTONTEXTW = (WM_USER + 75) +TB_REPLACEBITMAP = (WM_USER + 46) +TB_SETINDENT = (WM_USER + 47) +TB_SETIMAGELIST = (WM_USER + 48) +TB_GETIMAGELIST = (WM_USER + 49) +TB_LOADIMAGES = (WM_USER + 50) +TB_GETRECT = (WM_USER + 51) # wParam is the Cmd instead of index +TB_SETHOTIMAGELIST = (WM_USER + 52) +TB_GETHOTIMAGELIST = (WM_USER + 53) +TB_SETDISABLEDIMAGELIST = (WM_USER + 54) +TB_GETDISABLEDIMAGELIST = (WM_USER + 55) +TB_SETSTYLE = (WM_USER + 56) +TB_GETSTYLE = (WM_USER + 57) +TB_GETBUTTONSIZE = (WM_USER + 58) +TB_SETBUTTONWIDTH = (WM_USER + 59) +TB_SETMAXTEXTROWS = (WM_USER + 60) +TB_GETTEXTROWS = (WM_USER + 61) +TB_GETBUTTONTEXT = TB_GETBUTTONTEXTW +TB_SAVERESTORE = TB_SAVERESTOREW +TB_ADDSTRING = TB_ADDSTRINGW +TB_GETBUTTONTEXT = TB_GETBUTTONTEXTA +TB_SAVERESTORE = TB_SAVERESTOREA +TB_ADDSTRING = TB_ADDSTRINGA +TB_GETOBJECT = (WM_USER + 62) # wParam == IID, lParam void **ppv +TB_GETHOTITEM = (WM_USER + 71) +TB_SETHOTITEM = (WM_USER + 72) # wParam == iHotItem +TB_SETANCHORHIGHLIGHT = (WM_USER + 73) # wParam == TRUE/FALSE +TB_GETANCHORHIGHLIGHT = (WM_USER + 74) +TB_MAPACCELERATORA = (WM_USER + 78) # wParam == ch, lParam int * pidBtn +TBIMHT_AFTER = 1 # TRUE = insert After iButton, otherwise before +TBIMHT_BACKGROUND = 2 # TRUE iff missed buttons completely +TB_GETINSERTMARK = (WM_USER + 79) # lParam == LPTBINSERTMARK +TB_SETINSERTMARK = (WM_USER + 80) # lParam == LPTBINSERTMARK +TB_INSERTMARKHITTEST = (WM_USER + 81) # wParam == LPPOINT lParam == LPTBINSERTMARK +TB_MOVEBUTTON = (WM_USER + 82) +TB_GETMAXSIZE = (WM_USER + 83) # lParam == LPSIZE +TB_SETEXTENDEDSTYLE = (WM_USER + 84) # For TBSTYLE_EX_* +TB_GETEXTENDEDSTYLE = (WM_USER + 85) # For TBSTYLE_EX_* +TB_GETPADDING = (WM_USER + 86) +TB_SETPADDING = (WM_USER + 87) +TB_SETINSERTMARKCOLOR = (WM_USER + 88) +TB_GETINSERTMARKCOLOR = (WM_USER + 89) +TB_SETCOLORSCHEME = CCM_SETCOLORSCHEME # lParam is color scheme +TB_GETCOLORSCHEME = CCM_GETCOLORSCHEME # fills in COLORSCHEME pointed to by lParam +TB_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT +TB_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT +TB_MAPACCELERATORW = (WM_USER + 90) # wParam == ch, lParam int * pidBtn +TB_MAPACCELERATOR = TB_MAPACCELERATORW +TB_MAPACCELERATOR = TB_MAPACCELERATORA +TBBF_LARGE = 1 +TB_GETBITMAPFLAGS = (WM_USER + 41) +TBIF_IMAGE = 1 +TBIF_TEXT = 2 +TBIF_STATE = 4 +TBIF_STYLE = 8 +TBIF_LPARAM = 16 +TBIF_COMMAND = 32 +TBIF_SIZE = 64 +TB_GETBUTTONINFOW = (WM_USER + 63) +TB_SETBUTTONINFOW = (WM_USER + 64) +TB_GETBUTTONINFOA = (WM_USER + 65) +TB_SETBUTTONINFOA = (WM_USER + 66) +TB_INSERTBUTTONW = (WM_USER + 67) +TB_ADDBUTTONSW = (WM_USER + 68) +TB_HITTEST = (WM_USER + 69) +TB_SETDRAWTEXTFLAGS = (WM_USER + 70) # wParam == mask lParam == bit values +TBN_GETBUTTONINFOA = (TBN_FIRST-0) +TBN_GETBUTTONINFOW = (TBN_FIRST-20) +TBN_BEGINDRAG = (TBN_FIRST-1) +TBN_ENDDRAG = (TBN_FIRST-2) +TBN_BEGINADJUST = (TBN_FIRST-3) +TBN_ENDADJUST = (TBN_FIRST-4) +TBN_RESET = (TBN_FIRST-5) +TBN_QUERYINSERT = (TBN_FIRST-6) +TBN_QUERYDELETE = (TBN_FIRST-7) +TBN_TOOLBARCHANGE = (TBN_FIRST-8) +TBN_CUSTHELP = (TBN_FIRST-9) +TBN_DROPDOWN = (TBN_FIRST - 10) +TBN_GETOBJECT = (TBN_FIRST - 12) +HICF_OTHER = 0 +HICF_MOUSE = 1 # Triggered by mouse +HICF_ARROWKEYS = 2 # Triggered by arrow keys +HICF_ACCELERATOR = 4 # Triggered by accelerator +HICF_DUPACCEL = 8 # This accelerator is not unique +HICF_ENTERING = 16 # idOld is invalid +HICF_LEAVING = 32 # idNew is invalid +HICF_RESELECT = 64 # hot item reselected +TBN_HOTITEMCHANGE = (TBN_FIRST - 13) +TBN_DRAGOUT = (TBN_FIRST - 14) # this is sent when the user clicks down on a button then drags off the button +TBN_DELETINGBUTTON = (TBN_FIRST - 15) # uses TBNOTIFY +TBN_GETDISPINFOA = (TBN_FIRST - 16) # This is sent when the toolbar needs some display information +TBN_GETDISPINFOW = (TBN_FIRST - 17) # This is sent when the toolbar needs some display information +TBN_GETINFOTIPA = (TBN_FIRST - 18) +TBN_GETINFOTIPW = (TBN_FIRST - 19) +TBN_GETINFOTIP = TBN_GETINFOTIPA +TBNF_IMAGE = 1 +TBNF_TEXT = 2 +TBNF_DI_SETITEM = 268435456 +TBN_GETDISPINFO = TBN_GETDISPINFOA +TBDDRET_DEFAULT = 0 +TBDDRET_NODEFAULT = 1 +TBDDRET_TREATPRESSED = 2 # Treat as a standard press button +TBN_GETBUTTONINFO = TBN_GETBUTTONINFOA +REBARCLASSNAMEA = "ReBarWindow32" +REBARCLASSNAME = REBARCLASSNAMEA +RBIM_IMAGELIST = 1 +RBS_TOOLTIPS = 256 +RBS_VARHEIGHT = 512 +RBS_BANDBORDERS = 1024 +RBS_FIXEDORDER = 2048 +RBS_REGISTERDROP = 4096 +RBS_AUTOSIZE = 8192 +RBS_VERTICALGRIPPER = 16384 # this always has the vertical gripper (default for horizontal mode) +RBS_DBLCLKTOGGLE = 32768 +RBS_TOOLTIPS = 256 +RBS_VARHEIGHT = 512 +RBS_BANDBORDERS = 1024 +RBS_FIXEDORDER = 2048 +RBBS_BREAK = 1 # break to new line +RBBS_FIXEDSIZE = 2 # band can't be sized +RBBS_CHILDEDGE = 4 # edge around top & bottom of child window +RBBS_HIDDEN = 8 # don't show +RBBS_NOVERT = 16 # don't show when vertical +RBBS_FIXEDBMP = 32 # bitmap doesn't move during band resize +RBBS_VARIABLEHEIGHT = 64 # allow autosizing of this child vertically +RBBS_GRIPPERALWAYS = 128 # always show the gripper +RBBS_NOGRIPPER = 256 # never show the gripper +RBBIM_STYLE = 1 +RBBIM_COLORS = 2 +RBBIM_TEXT = 4 +RBBIM_IMAGE = 8 +RBBIM_CHILD = 16 +RBBIM_CHILDSIZE = 32 +RBBIM_SIZE = 64 +RBBIM_BACKGROUND = 128 +RBBIM_ID = 256 +RBBIM_IDEALSIZE = 512 +RBBIM_LPARAM = 1024 +RB_INSERTBANDA = (WM_USER + 1) +RB_DELETEBAND = (WM_USER + 2) +RB_GETBARINFO = (WM_USER + 3) +RB_SETBARINFO = (WM_USER + 4) +RB_GETBANDINFO = (WM_USER + 5) +RB_SETBANDINFOA = (WM_USER + 6) +RB_SETPARENT = (WM_USER + 7) +RB_HITTEST = (WM_USER + 8) +RB_GETRECT = (WM_USER + 9) +RB_INSERTBANDW = (WM_USER + 10) +RB_SETBANDINFOW = (WM_USER + 11) +RB_GETBANDCOUNT = (WM_USER + 12) +RB_GETROWCOUNT = (WM_USER + 13) +RB_GETROWHEIGHT = (WM_USER + 14) +RB_IDTOINDEX = (WM_USER + 16) # wParam == id +RB_GETTOOLTIPS = (WM_USER + 17) +RB_SETTOOLTIPS = (WM_USER + 18) +RB_SETBKCOLOR = (WM_USER + 19) # sets the default BK color +RB_GETBKCOLOR = (WM_USER + 20) # defaults to CLR_NONE +RB_SETTEXTCOLOR = (WM_USER + 21) +RB_GETTEXTCOLOR = (WM_USER + 22) # defaults to 0x00000000 +RB_SIZETORECT = (WM_USER + 23) # resize the rebar/break bands and such to this rect (lparam) +RB_SETCOLORSCHEME = CCM_SETCOLORSCHEME # lParam is color scheme +RB_GETCOLORSCHEME = CCM_GETCOLORSCHEME # fills in COLORSCHEME pointed to by lParam +RB_INSERTBAND = RB_INSERTBANDA +RB_SETBANDINFO = RB_SETBANDINFOA +RB_BEGINDRAG = (WM_USER + 24) +RB_ENDDRAG = (WM_USER + 25) +RB_DRAGMOVE = (WM_USER + 26) +RB_GETBARHEIGHT = (WM_USER + 27) +RB_GETBANDINFOW = (WM_USER + 28) +RB_GETBANDINFOA = (WM_USER + 29) +RB_GETBANDINFO = RB_GETBANDINFOA +RB_MINIMIZEBAND = (WM_USER + 30) +RB_MAXIMIZEBAND = (WM_USER + 31) +RB_GETDROPTARGET = (CCM_GETDROPTARGET) +RB_GETBANDBORDERS = (WM_USER + 34) # returns in lparam = lprc the amount of edges added to band wparam +RB_SHOWBAND = (WM_USER + 35) # show/hide band +RB_SETPALETTE = (WM_USER + 37) +RB_GETPALETTE = (WM_USER + 38) +RB_MOVEBAND = (WM_USER + 39) +RB_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT +RB_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT +RBN_HEIGHTCHANGE = (RBN_FIRST - 0) +RBN_GETOBJECT = (RBN_FIRST - 1) +RBN_LAYOUTCHANGED = (RBN_FIRST - 2) +RBN_AUTOSIZE = (RBN_FIRST - 3) +RBN_BEGINDRAG = (RBN_FIRST - 4) +RBN_ENDDRAG = (RBN_FIRST - 5) +RBN_DELETINGBAND = (RBN_FIRST - 6) # Uses NMREBAR +RBN_DELETEDBAND = (RBN_FIRST - 7) # Uses NMREBAR +RBN_CHILDSIZE = (RBN_FIRST - 8) +RBNM_ID = 1 +RBNM_STYLE = 2 +RBNM_LPARAM = 4 +RBHT_NOWHERE = 1 +RBHT_CAPTION = 2 +RBHT_CLIENT = 3 +RBHT_GRABBER = 4 +TOOLTIPS_CLASSA = "tooltips_class32" +TOOLTIPS_CLASS = TOOLTIPS_CLASSA +TTS_ALWAYSTIP = 1 +TTS_NOPREFIX = 2 +TTF_IDISHWND = 1 +TTF_CENTERTIP = 2 +TTF_RTLREADING = 4 +TTF_SUBCLASS = 16 +TTF_TRACK = 32 +TTF_ABSOLUTE = 128 +TTF_TRANSPARENT = 256 +TTF_DI_SETITEM = 32768 # valid only on the TTN_NEEDTEXT callback +TTDT_AUTOMATIC = 0 +TTDT_RESHOW = 1 +TTDT_AUTOPOP = 2 +TTDT_INITIAL = 3 +TTM_ACTIVATE = (WM_USER + 1) +TTM_SETDELAYTIME = (WM_USER + 3) +TTM_ADDTOOLA = (WM_USER + 4) +TTM_ADDTOOLW = (WM_USER + 50) +TTM_DELTOOLA = (WM_USER + 5) +TTM_DELTOOLW = (WM_USER + 51) +TTM_NEWTOOLRECTA = (WM_USER + 6) +TTM_NEWTOOLRECTW = (WM_USER + 52) +TTM_RELAYEVENT = (WM_USER + 7) +TTM_GETTOOLINFOA = (WM_USER + 8) +TTM_GETTOOLINFOW = (WM_USER + 53) +TTM_SETTOOLINFOA = (WM_USER + 9) +TTM_SETTOOLINFOW = (WM_USER + 54) +TTM_HITTESTA = (WM_USER +10) +TTM_HITTESTW = (WM_USER +55) +TTM_GETTEXTA = (WM_USER +11) +TTM_GETTEXTW = (WM_USER +56) +TTM_UPDATETIPTEXTA = (WM_USER +12) +TTM_UPDATETIPTEXTW = (WM_USER +57) +TTM_GETTOOLCOUNT = (WM_USER +13) +TTM_ENUMTOOLSA = (WM_USER +14) +TTM_ENUMTOOLSW = (WM_USER +58) +TTM_GETCURRENTTOOLA = (WM_USER + 15) +TTM_GETCURRENTTOOLW = (WM_USER + 59) +TTM_WINDOWFROMPOINT = (WM_USER + 16) +TTM_TRACKACTIVATE = (WM_USER + 17) # wParam = TRUE/FALSE start end lparam = LPTOOLINFO +TTM_TRACKPOSITION = (WM_USER + 18) # lParam = dwPos +TTM_SETTIPBKCOLOR = (WM_USER + 19) +TTM_SETTIPTEXTCOLOR = (WM_USER + 20) +TTM_GETDELAYTIME = (WM_USER + 21) +TTM_GETTIPBKCOLOR = (WM_USER + 22) +TTM_GETTIPTEXTCOLOR = (WM_USER + 23) +TTM_SETMAXTIPWIDTH = (WM_USER + 24) +TTM_GETMAXTIPWIDTH = (WM_USER + 25) +TTM_SETMARGIN = (WM_USER + 26) # lParam = lprc +TTM_GETMARGIN = (WM_USER + 27) # lParam = lprc +TTM_POP = (WM_USER + 28) +TTM_UPDATE = (WM_USER + 29) +TTM_ADDTOOL = TTM_ADDTOOLA +TTM_DELTOOL = TTM_DELTOOLA +TTM_NEWTOOLRECT = TTM_NEWTOOLRECTA +TTM_GETTOOLINFO = TTM_GETTOOLINFOA +TTM_SETTOOLINFO = TTM_SETTOOLINFOA +TTM_HITTEST = TTM_HITTESTA +TTM_GETTEXT = TTM_GETTEXTA +TTM_UPDATETIPTEXT = TTM_UPDATETIPTEXTA +TTM_ENUMTOOLS = TTM_ENUMTOOLSA +TTM_GETCURRENTTOOL = TTM_GETCURRENTTOOLA +TTN_GETDISPINFOA = (TTN_FIRST - 0) +TTN_GETDISPINFOW = (TTN_FIRST - 10) +TTN_SHOW = (TTN_FIRST - 1) +TTN_POP = (TTN_FIRST - 2) +TTN_GETDISPINFO = TTN_GETDISPINFOA +TTN_NEEDTEXT = TTN_GETDISPINFO +TTN_NEEDTEXTA = TTN_GETDISPINFOA +TTN_NEEDTEXTW = TTN_GETDISPINFOW +SBARS_SIZEGRIP = 256 +SBARS_TOOLTIPS = 2048 +STATUSCLASSNAMEA = "msctls_statusbar32" +STATUSCLASSNAME = STATUSCLASSNAMEA +SB_SETTEXTA = (WM_USER+1) +SB_SETTEXTW = (WM_USER+11) +SB_GETTEXTA = (WM_USER+2) +SB_GETTEXTW = (WM_USER+13) +SB_GETTEXTLENGTHA = (WM_USER+3) +SB_GETTEXTLENGTHW = (WM_USER+12) +SB_GETTEXT = SB_GETTEXTA +SB_SETTEXT = SB_SETTEXTA +SB_GETTEXTLENGTH = SB_GETTEXTLENGTHA +SB_SETPARTS = (WM_USER+4) +SB_GETPARTS = (WM_USER+6) +SB_GETBORDERS = (WM_USER+7) +SB_SETMINHEIGHT = (WM_USER+8) +SB_SIMPLE = (WM_USER+9) +SB_GETRECT = (WM_USER+10) +SB_ISSIMPLE = (WM_USER+14) +SB_SETICON = (WM_USER+15) +SB_SETTIPTEXTA = (WM_USER+16) +SB_SETTIPTEXTW = (WM_USER+17) +SB_GETTIPTEXTA = (WM_USER+18) +SB_GETTIPTEXTW = (WM_USER+19) +SB_GETICON = (WM_USER+20) +SB_SETTIPTEXT = SB_SETTIPTEXTA +SB_GETTIPTEXT = SB_GETTIPTEXTA +SB_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT +SB_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT +SBT_OWNERDRAW = 4096 +SBT_NOBORDERS = 256 +SBT_POPOUT = 512 +SBT_RTLREADING = 1024 +SBT_NOTABPARSING = 2048 +SBT_TOOLTIPS = 2048 +SB_SETBKCOLOR = CCM_SETBKCOLOR # lParam = bkColor +SBN_SIMPLEMODECHANGE = (SBN_FIRST - 0) +TRACKBAR_CLASSA = "msctls_trackbar32" +TRACKBAR_CLASS = TRACKBAR_CLASSA +TBS_AUTOTICKS = 1 +TBS_VERT = 2 +TBS_HORZ = 0 +TBS_TOP = 4 +TBS_BOTTOM = 0 +TBS_LEFT = 4 +TBS_RIGHT = 0 +TBS_BOTH = 8 +TBS_NOTICKS = 16 +TBS_ENABLESELRANGE = 32 +TBS_FIXEDLENGTH = 64 +TBS_NOTHUMB = 128 +TBS_TOOLTIPS = 256 +TBM_GETPOS = (WM_USER) +TBM_GETRANGEMIN = (WM_USER+1) +TBM_GETRANGEMAX = (WM_USER+2) +TBM_GETTIC = (WM_USER+3) +TBM_SETTIC = (WM_USER+4) +TBM_SETPOS = (WM_USER+5) +TBM_SETRANGE = (WM_USER+6) +TBM_SETRANGEMIN = (WM_USER+7) +TBM_SETRANGEMAX = (WM_USER+8) +TBM_CLEARTICS = (WM_USER+9) +TBM_SETSEL = (WM_USER+10) +TBM_SETSELSTART = (WM_USER+11) +TBM_SETSELEND = (WM_USER+12) +TBM_GETPTICS = (WM_USER+14) +TBM_GETTICPOS = (WM_USER+15) +TBM_GETNUMTICS = (WM_USER+16) +TBM_GETSELSTART = (WM_USER+17) +TBM_GETSELEND = (WM_USER+18) +TBM_CLEARSEL = (WM_USER+19) +TBM_SETTICFREQ = (WM_USER+20) +TBM_SETPAGESIZE = (WM_USER+21) +TBM_GETPAGESIZE = (WM_USER+22) +TBM_SETLINESIZE = (WM_USER+23) +TBM_GETLINESIZE = (WM_USER+24) +TBM_GETTHUMBRECT = (WM_USER+25) +TBM_GETCHANNELRECT = (WM_USER+26) +TBM_SETTHUMBLENGTH = (WM_USER+27) +TBM_GETTHUMBLENGTH = (WM_USER+28) +TBM_SETTOOLTIPS = (WM_USER+29) +TBM_GETTOOLTIPS = (WM_USER+30) +TBM_SETTIPSIDE = (WM_USER+31) +TBTS_TOP = 0 +TBTS_LEFT = 1 +TBTS_BOTTOM = 2 +TBTS_RIGHT = 3 +TBM_SETBUDDY = (WM_USER+32) # wparam = BOOL fLeft; (or right) +TBM_GETBUDDY = (WM_USER+33) # wparam = BOOL fLeft; (or right) +TBM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT +TBM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT +TB_LINEUP = 0 +TB_LINEDOWN = 1 +TB_PAGEUP = 2 +TB_PAGEDOWN = 3 +TB_THUMBPOSITION = 4 +TB_THUMBTRACK = 5 +TB_TOP = 6 +TB_BOTTOM = 7 +TB_ENDTRACK = 8 +TBCD_TICS = 1 +TBCD_THUMB = 2 +TBCD_CHANNEL = 3 +DL_BEGINDRAG = (WM_USER+133) +DL_DRAGGING = (WM_USER+134) +DL_DROPPED = (WM_USER+135) +DL_CANCELDRAG = (WM_USER+136) +DL_CURSORSET = 0 +DL_STOPCURSOR = 1 +DL_COPYCURSOR = 2 +DL_MOVECURSOR = 3 +DRAGLISTMSGSTRING = "commctrl_DragListMsg" +UPDOWN_CLASSA = "msctls_updown32" +UPDOWN_CLASS = UPDOWN_CLASSA +UD_MAXVAL = 32767 +UD_MINVAL = (-UD_MAXVAL) +UDS_WRAP = 1 +UDS_SETBUDDYINT = 2 +UDS_ALIGNRIGHT = 4 +UDS_ALIGNLEFT = 8 +UDS_AUTOBUDDY = 16 +UDS_ARROWKEYS = 32 +UDS_HORZ = 64 +UDS_NOTHOUSANDS = 128 +UDS_HOTTRACK = 256 +UDM_SETRANGE = (WM_USER+101) +UDM_GETRANGE = (WM_USER+102) +UDM_SETPOS = (WM_USER+103) +UDM_GETPOS = (WM_USER+104) +UDM_SETBUDDY = (WM_USER+105) +UDM_GETBUDDY = (WM_USER+106) +UDM_SETACCEL = (WM_USER+107) +UDM_GETACCEL = (WM_USER+108) +UDM_SETBASE = (WM_USER+109) +UDM_GETBASE = (WM_USER+110) +UDM_SETRANGE32 = (WM_USER+111) +UDM_GETRANGE32 = (WM_USER+112) # wParam & lParam are LPINT +UDM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT +UDM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT +UDN_DELTAPOS = (UDN_FIRST - 1) +PROGRESS_CLASSA = "msctls_progress32" +PROGRESS_CLASS = PROGRESS_CLASSA +PBS_SMOOTH = 1 +PBS_VERTICAL = 4 +PBM_SETRANGE = (WM_USER+1) +PBM_SETPOS = (WM_USER+2) +PBM_DELTAPOS = (WM_USER+3) +PBM_SETSTEP = (WM_USER+4) +PBM_STEPIT = (WM_USER+5) +PBM_SETRANGE32 = (WM_USER+6) # lParam = high, wParam = low +PBM_GETRANGE = (WM_USER+7) # wParam = return (TRUE ? low : high). lParam = PPBRANGE or NULL +PBM_GETPOS = (WM_USER+8) +PBM_SETBARCOLOR = (WM_USER+9) # lParam = bar color +PBM_SETBKCOLOR = CCM_SETBKCOLOR # lParam = bkColor +HOTKEYF_SHIFT = 1 +HOTKEYF_CONTROL = 2 +HOTKEYF_ALT = 4 +HOTKEYF_EXT = 128 +HOTKEYF_EXT = 8 +HKCOMB_NONE = 1 +HKCOMB_S = 2 +HKCOMB_C = 4 +HKCOMB_A = 8 +HKCOMB_SC = 16 +HKCOMB_SA = 32 +HKCOMB_CA = 64 +HKCOMB_SCA = 128 +HKM_SETHOTKEY = (WM_USER+1) +HKM_GETHOTKEY = (WM_USER+2) +HKM_SETRULES = (WM_USER+3) +HOTKEY_CLASSA = "msctls_hotkey32" +HOTKEY_CLASS = HOTKEY_CLASSA +CCS_TOP = 0x00000001L +CCS_NOMOVEY = 0x00000002L +CCS_BOTTOM = 0x00000003L +CCS_NORESIZE = 0x00000004L +CCS_NOPARENTALIGN = 0x00000008L +CCS_ADJUSTABLE = 0x00000020L +CCS_NODIVIDER = 0x00000040L +CCS_VERT = 0x00000080L +CCS_LEFT = (CCS_VERT | CCS_TOP) +CCS_RIGHT = (CCS_VERT | CCS_BOTTOM) +CCS_NOMOVEX = (CCS_VERT | CCS_NOMOVEY) +WC_LISTVIEWA = "SysListView32" +WC_LISTVIEW = WC_LISTVIEWA +LVS_ICON = 0 +LVS_REPORT = 1 +LVS_SMALLICON = 2 +LVS_LIST = 3 +LVS_TYPEMASK = 3 +LVS_SINGLESEL = 4 +LVS_SHOWSELALWAYS = 8 +LVS_SORTASCENDING = 16 +LVS_SORTDESCENDING = 32 +LVS_SHAREIMAGELISTS = 64 +LVS_NOLABELWRAP = 128 +LVS_AUTOARRANGE = 256 +LVS_EDITLABELS = 512 +LVS_OWNERDATA = 4096 +LVS_NOSCROLL = 8192 +LVS_TYPESTYLEMASK = 64512 +LVS_ALIGNTOP = 0 +LVS_ALIGNLEFT = 2048 +LVS_ALIGNMASK = 3072 +LVS_OWNERDRAWFIXED = 1024 +LVS_NOCOLUMNHEADER = 16384 +LVS_NOSORTHEADER = 32768 +LVM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT +LVM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT +LVM_GETBKCOLOR = (LVM_FIRST + 0) +LVM_SETBKCOLOR = (LVM_FIRST + 1) +LVM_GETIMAGELIST = (LVM_FIRST + 2) +LVSIL_NORMAL = 0 +LVSIL_SMALL = 1 +LVSIL_STATE = 2 +LVM_SETIMAGELIST = (LVM_FIRST + 3) +LVM_GETITEMCOUNT = (LVM_FIRST + 4) +LVIF_TEXT = 1 +LVIF_IMAGE = 2 +LVIF_PARAM = 4 +LVIF_STATE = 8 +LVIF_INDENT = 16 +LVIF_NORECOMPUTE = 2048 +LVIS_FOCUSED = 1 +LVIS_SELECTED = 2 +LVIS_CUT = 4 +LVIS_DROPHILITED = 8 +LVIS_ACTIVATING = 32 +LVIS_OVERLAYMASK = 3840 +LVIS_STATEIMAGEMASK = 61440 +I_INDENTCALLBACK = (-1) +LPSTR_TEXTCALLBACKA = -1 +LPSTR_TEXTCALLBACK = LPSTR_TEXTCALLBACKA +I_IMAGECALLBACK = (-1) +LVM_GETITEMA = (LVM_FIRST + 5) +LVM_GETITEMW = (LVM_FIRST + 75) +LVM_GETITEM = LVM_GETITEMW +LVM_GETITEM = LVM_GETITEMA +LVM_SETITEMA = (LVM_FIRST + 6) +LVM_SETITEMW = (LVM_FIRST + 76) +LVM_SETITEM = LVM_SETITEMW +LVM_SETITEM = LVM_SETITEMA +LVM_INSERTITEMA = (LVM_FIRST + 7) +LVM_INSERTITEMW = (LVM_FIRST + 77) +LVM_INSERTITEM = LVM_INSERTITEMA +LVM_DELETEITEM = (LVM_FIRST + 8) +LVM_DELETEALLITEMS = (LVM_FIRST + 9) +LVM_GETCALLBACKMASK = (LVM_FIRST + 10) +LVM_SETCALLBACKMASK = (LVM_FIRST + 11) +LVNI_ALL = 0 +LVNI_FOCUSED = 1 +LVNI_SELECTED = 2 +LVNI_CUT = 4 +LVNI_DROPHILITED = 8 +LVNI_ABOVE = 256 +LVNI_BELOW = 512 +LVNI_TOLEFT = 1024 +LVNI_TORIGHT = 2048 +LVM_GETNEXTITEM = (LVM_FIRST + 12) +LVFI_PARAM = 1 +LVFI_STRING = 2 +LVFI_PARTIAL = 8 +LVFI_WRAP = 32 +LVFI_NEARESTXY = 64 +LVM_FINDITEMA = (LVM_FIRST + 13) +LVM_FINDITEMW = (LVM_FIRST + 83) +LVM_FINDITEM = LVM_FINDITEMA +LVIR_BOUNDS = 0 +LVIR_ICON = 1 +LVIR_LABEL = 2 +LVIR_SELECTBOUNDS = 3 +LVM_GETITEMRECT = (LVM_FIRST + 14) +LVM_SETITEMPOSITION = (LVM_FIRST + 15) +LVM_GETITEMPOSITION = (LVM_FIRST + 16) +LVM_GETSTRINGWIDTHA = (LVM_FIRST + 17) +LVM_GETSTRINGWIDTHW = (LVM_FIRST + 87) +LVM_GETSTRINGWIDTH = LVM_GETSTRINGWIDTHA +LVHT_NOWHERE = 1 +LVHT_ONITEMICON = 2 +LVHT_ONITEMLABEL = 4 +LVHT_ONITEMSTATEICON = 8 +LVHT_ONITEM = (LVHT_ONITEMICON | LVHT_ONITEMLABEL | LVHT_ONITEMSTATEICON) +LVHT_ABOVE = 8 +LVHT_BELOW = 16 +LVHT_TORIGHT = 32 +LVHT_TOLEFT = 64 +LVM_HITTEST = (LVM_FIRST + 18) +LVM_ENSUREVISIBLE = (LVM_FIRST + 19) +LVM_SCROLL = (LVM_FIRST + 20) +LVM_REDRAWITEMS = (LVM_FIRST + 21) +LVA_DEFAULT = 0 +LVA_ALIGNLEFT = 1 +LVA_ALIGNTOP = 2 +LVA_SNAPTOGRID = 5 +LVM_ARRANGE = (LVM_FIRST + 22) +LVM_EDITLABELA = (LVM_FIRST + 23) +LVM_EDITLABELW = (LVM_FIRST + 118) +LVM_EDITLABEL = LVM_EDITLABELW +LVM_EDITLABEL = LVM_EDITLABELA +LVM_GETEDITCONTROL = (LVM_FIRST + 24) +LVCF_FMT = 1 +LVCF_WIDTH = 2 +LVCF_TEXT = 4 +LVCF_SUBITEM = 8 +LVCF_IMAGE = 16 +LVCF_ORDER = 32 +LVCFMT_LEFT = 0 +LVCFMT_RIGHT = 1 +LVCFMT_CENTER = 2 +LVCFMT_JUSTIFYMASK = 3 +LVCFMT_IMAGE = 2048 +LVCFMT_BITMAP_ON_RIGHT = 4096 +LVCFMT_COL_HAS_IMAGES = 32768 +LVM_GETCOLUMNA = (LVM_FIRST + 25) +LVM_GETCOLUMNW = (LVM_FIRST + 95) +LVM_GETCOLUMN = LVM_GETCOLUMNA +LVM_SETCOLUMNA = (LVM_FIRST + 26) +LVM_SETCOLUMNW = (LVM_FIRST + 96) +LVM_SETCOLUMN = LVM_SETCOLUMNA +LVM_INSERTCOLUMNA = (LVM_FIRST + 27) +LVM_INSERTCOLUMNW = (LVM_FIRST + 97) +LVM_INSERTCOLUMN = LVM_INSERTCOLUMNA +LVM_DELETECOLUMN = (LVM_FIRST + 28) +LVM_GETCOLUMNWIDTH = (LVM_FIRST + 29) +LVSCW_AUTOSIZE = -1 +LVSCW_AUTOSIZE_USEHEADER = -2 +LVM_SETCOLUMNWIDTH = (LVM_FIRST + 30) +LVM_GETHEADER = (LVM_FIRST + 31) +LVM_CREATEDRAGIMAGE = (LVM_FIRST + 33) +LVM_GETVIEWRECT = (LVM_FIRST + 34) +LVM_GETTEXTCOLOR = (LVM_FIRST + 35) +LVM_SETTEXTCOLOR = (LVM_FIRST + 36) +LVM_GETTEXTBKCOLOR = (LVM_FIRST + 37) +LVM_SETTEXTBKCOLOR = (LVM_FIRST + 38) +LVM_GETTOPINDEX = (LVM_FIRST + 39) +LVM_GETCOUNTPERPAGE = (LVM_FIRST + 40) +LVM_GETORIGIN = (LVM_FIRST + 41) +LVM_UPDATE = (LVM_FIRST + 42) +LVM_SETITEMSTATE = (LVM_FIRST + 43) +LVM_GETITEMSTATE = (LVM_FIRST + 44) +LVM_GETITEMTEXTA = (LVM_FIRST + 45) +LVM_GETITEMTEXTW = (LVM_FIRST + 115) +LVM_GETITEMTEXT = LVM_GETITEMTEXTW +LVM_GETITEMTEXT = LVM_GETITEMTEXTA +LVM_SETITEMTEXTA = (LVM_FIRST + 46) +LVM_SETITEMTEXTW = (LVM_FIRST + 116) +LVM_SETITEMTEXT = LVM_SETITEMTEXTW +LVM_SETITEMTEXT = LVM_SETITEMTEXTA +LVSICF_NOINVALIDATEALL = 1 +LVSICF_NOSCROLL = 2 +LVM_SETITEMCOUNT = (LVM_FIRST + 47) +LVM_SORTITEMS = (LVM_FIRST + 48) +LVM_SETITEMPOSITION32 = (LVM_FIRST + 49) +LVM_GETSELECTEDCOUNT = (LVM_FIRST + 50) +LVM_GETITEMSPACING = (LVM_FIRST + 51) +LVM_GETISEARCHSTRINGA = (LVM_FIRST + 52) +LVM_GETISEARCHSTRINGW = (LVM_FIRST + 117) +LVM_GETISEARCHSTRING = LVM_GETISEARCHSTRINGA +LVM_SETICONSPACING = (LVM_FIRST + 53) +LVM_SETEXTENDEDLISTVIEWSTYLE = (LVM_FIRST + 54) # optional wParam == mask +LVM_GETEXTENDEDLISTVIEWSTYLE = (LVM_FIRST + 55) +LVS_EX_GRIDLINES = 1 +LVS_EX_SUBITEMIMAGES = 2 +LVS_EX_CHECKBOXES = 4 +LVS_EX_TRACKSELECT = 8 +LVS_EX_HEADERDRAGDROP = 16 +LVS_EX_FULLROWSELECT = 32 # applies to report mode only +LVS_EX_ONECLICKACTIVATE = 64 +LVS_EX_TWOCLICKACTIVATE = 128 +LVS_EX_FLATSB = 256 +LVS_EX_REGIONAL = 512 +LVS_EX_INFOTIP = 1024 # listview does InfoTips for you +LVS_EX_UNDERLINEHOT = 2048 +LVS_EX_UNDERLINECOLD = 4096 +LVS_EX_MULTIWORKAREAS = 8192 +LVM_GETSUBITEMRECT = (LVM_FIRST + 56) +LVM_SUBITEMHITTEST = (LVM_FIRST + 57) +LVM_SETCOLUMNORDERARRAY = (LVM_FIRST + 58) +LVM_GETCOLUMNORDERARRAY = (LVM_FIRST + 59) +LVM_SETHOTITEM = (LVM_FIRST + 60) +LVM_GETHOTITEM = (LVM_FIRST + 61) +LVM_SETHOTCURSOR = (LVM_FIRST + 62) +LVM_GETHOTCURSOR = (LVM_FIRST + 63) +LVM_APPROXIMATEVIEWRECT = (LVM_FIRST + 64) +LV_MAX_WORKAREAS = 16 +LVM_SETWORKAREAS = (LVM_FIRST + 65) +LVM_GETWORKAREAS = (LVM_FIRST + 70) +LVM_GETNUMBEROFWORKAREAS = (LVM_FIRST + 73) +LVM_GETSELECTIONMARK = (LVM_FIRST + 66) +LVM_SETSELECTIONMARK = (LVM_FIRST + 67) +LVM_SETHOVERTIME = (LVM_FIRST + 71) +LVM_GETHOVERTIME = (LVM_FIRST + 72) +LVM_SETTOOLTIPS = (LVM_FIRST + 74) +LVM_GETTOOLTIPS = (LVM_FIRST + 78) +LVBKIF_SOURCE_NONE = 0 +LVBKIF_SOURCE_HBITMAP = 1 +LVBKIF_SOURCE_URL = 2 +LVBKIF_SOURCE_MASK = 3 +LVBKIF_STYLE_NORMAL = 0 +LVBKIF_STYLE_TILE = 16 +LVBKIF_STYLE_MASK = 16 +LVM_SETBKIMAGEA = (LVM_FIRST + 68) +LVM_SETBKIMAGEW = (LVM_FIRST + 138) +LVM_GETBKIMAGEA = (LVM_FIRST + 69) +LVM_GETBKIMAGEW = (LVM_FIRST + 139) +LVKF_ALT = 1 +LVKF_CONTROL = 2 +LVKF_SHIFT = 4 +LVN_ITEMCHANGING = (LVN_FIRST-0) +LVN_ITEMCHANGED = (LVN_FIRST-1) +LVN_INSERTITEM = (LVN_FIRST-2) +LVN_DELETEITEM = (LVN_FIRST-3) +LVN_DELETEALLITEMS = (LVN_FIRST-4) +LVN_BEGINLABELEDITA = (LVN_FIRST-5) +LVN_BEGINLABELEDITW = (LVN_FIRST-75) +LVN_ENDLABELEDITA = (LVN_FIRST-6) +LVN_ENDLABELEDITW = (LVN_FIRST-76) +LVN_COLUMNCLICK = (LVN_FIRST-8) +LVN_BEGINDRAG = (LVN_FIRST-9) +LVN_BEGINRDRAG = (LVN_FIRST-11) +LVN_ODCACHEHINT = (LVN_FIRST-13) +LVN_ODFINDITEMA = (LVN_FIRST-52) +LVN_ODFINDITEMW = (LVN_FIRST-79) +LVN_ITEMACTIVATE = (LVN_FIRST-14) +LVN_ODSTATECHANGED = (LVN_FIRST-15) +LVN_ODFINDITEM = LVN_ODFINDITEMA +LVN_HOTTRACK = (LVN_FIRST-21) +LVN_GETDISPINFOA = (LVN_FIRST-50) +LVN_GETDISPINFOW = (LVN_FIRST-77) +LVN_SETDISPINFOA = (LVN_FIRST-51) +LVN_SETDISPINFOW = (LVN_FIRST-78) +LVN_BEGINLABELEDIT = LVN_BEGINLABELEDITA +LVN_ENDLABELEDIT = LVN_ENDLABELEDITA +LVN_GETDISPINFO = LVN_GETDISPINFOA +LVN_SETDISPINFO = LVN_SETDISPINFOA +LVIF_DI_SETITEM = 4096 +LVN_KEYDOWN = (LVN_FIRST-55) +LVN_MARQUEEBEGIN = (LVN_FIRST-56) +LVGIT_UNFOLDED = 1 +LVN_GETINFOTIPA = (LVN_FIRST-57) +LVN_GETINFOTIPW = (LVN_FIRST-58) +LVN_GETINFOTIP = LVN_GETINFOTIPA +WC_TREEVIEWA = "SysTreeView32" +WC_TREEVIEW = WC_TREEVIEWA +TVS_HASBUTTONS = 1 +TVS_HASLINES = 2 +TVS_LINESATROOT = 4 +TVS_EDITLABELS = 8 +TVS_DISABLEDRAGDROP = 16 +TVS_SHOWSELALWAYS = 32 +TVS_RTLREADING = 64 +TVS_NOTOOLTIPS = 128 +TVS_CHECKBOXES = 256 +TVS_TRACKSELECT = 512 +TVS_SINGLEEXPAND = 1024 +TVS_INFOTIP = 2048 +TVS_FULLROWSELECT = 4096 +TVS_NOSCROLL = 8192 +TVS_NONEVENHEIGHT = 16384 +TVIF_TEXT = 1 +TVIF_IMAGE = 2 +TVIF_PARAM = 4 +TVIF_STATE = 8 +TVIF_HANDLE = 16 +TVIF_SELECTEDIMAGE = 32 +TVIF_CHILDREN = 64 +TVIF_INTEGRAL = 128 +TVIS_SELECTED = 2 +TVIS_CUT = 4 +TVIS_DROPHILITED = 8 +TVIS_BOLD = 16 +TVIS_EXPANDED = 32 +TVIS_EXPANDEDONCE = 64 +TVIS_EXPANDPARTIAL = 128 +TVIS_OVERLAYMASK = 3840 +TVIS_STATEIMAGEMASK = 61440 +TVIS_USERMASK = 61440 +I_CHILDRENCALLBACK = (-1) +TVI_ROOT = -65536 +TVI_FIRST = -65535 +TVI_LAST = -65534 +TVI_SORT = -65533 +TVM_INSERTITEMA = (TV_FIRST + 0) +TVM_INSERTITEMW = (TV_FIRST + 50) +TVM_INSERTITEM = TVM_INSERTITEMW +TVM_INSERTITEM = TVM_INSERTITEMA +TVM_DELETEITEM = (TV_FIRST + 1) +TVM_EXPAND = (TV_FIRST + 2) +TVE_COLLAPSE = 1 +TVE_EXPAND = 2 +TVE_TOGGLE = 3 +TVE_EXPANDPARTIAL = 16384 +TVE_COLLAPSERESET = 32768 +TVM_GETITEMRECT = (TV_FIRST + 4) +TVM_GETCOUNT = (TV_FIRST + 5) +TVM_GETINDENT = (TV_FIRST + 6) +TVM_SETINDENT = (TV_FIRST + 7) +TVM_GETIMAGELIST = (TV_FIRST + 8) +TVSIL_NORMAL = 0 +TVSIL_STATE = 2 +TVM_SETIMAGELIST = (TV_FIRST + 9) +TVM_GETNEXTITEM = (TV_FIRST + 10) +TVGN_ROOT = 0 +TVGN_NEXT = 1 +TVGN_PREVIOUS = 2 +TVGN_PARENT = 3 +TVGN_CHILD = 4 +TVGN_FIRSTVISIBLE = 5 +TVGN_NEXTVISIBLE = 6 +TVGN_PREVIOUSVISIBLE = 7 +TVGN_DROPHILITE = 8 +TVGN_CARET = 9 +TVGN_LASTVISIBLE = 10 +TVM_SELECTITEM = (TV_FIRST + 11) +TVM_GETITEMA = (TV_FIRST + 12) +TVM_GETITEMW = (TV_FIRST + 62) +TVM_GETITEM = TVM_GETITEMW +TVM_GETITEM = TVM_GETITEMA +TVM_SETITEMA = (TV_FIRST + 13) +TVM_SETITEMW = (TV_FIRST + 63) +TVM_SETITEM = TVM_SETITEMW +TVM_SETITEM = TVM_SETITEMA +TVM_EDITLABELA = (TV_FIRST + 14) +TVM_EDITLABELW = (TV_FIRST + 65) +TVM_EDITLABEL = TVM_EDITLABELW +TVM_EDITLABEL = TVM_EDITLABELA +TVM_GETEDITCONTROL = (TV_FIRST + 15) +TVM_GETVISIBLECOUNT = (TV_FIRST + 16) +TVM_HITTEST = (TV_FIRST + 17) +TVHT_NOWHERE = 1 +TVHT_ONITEMICON = 2 +TVHT_ONITEMLABEL = 4 +TVHT_ONITEMINDENT = 8 +TVHT_ONITEMBUTTON = 16 +TVHT_ONITEMRIGHT = 32 +TVHT_ONITEMSTATEICON = 64 +TVHT_ABOVE = 256 +TVHT_BELOW = 512 +TVHT_TORIGHT = 1024 +TVHT_TOLEFT = 2048 +TVHT_ONITEM = (TVHT_ONITEMICON | TVHT_ONITEMLABEL | TVHT_ONITEMSTATEICON) +TVM_CREATEDRAGIMAGE = (TV_FIRST + 18) +TVM_SORTCHILDREN = (TV_FIRST + 19) +TVM_ENSUREVISIBLE = (TV_FIRST + 20) +TVM_SORTCHILDRENCB = (TV_FIRST + 21) +TVM_ENDEDITLABELNOW = (TV_FIRST + 22) +TVM_GETISEARCHSTRINGA = (TV_FIRST + 23) +TVM_GETISEARCHSTRINGW = (TV_FIRST + 64) +TVM_GETISEARCHSTRING = TVM_GETISEARCHSTRINGA +TVM_SETTOOLTIPS = (TV_FIRST + 24) +TVM_GETTOOLTIPS = (TV_FIRST + 25) +TVM_SETINSERTMARK = (TV_FIRST + 26) +TVM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT +TVM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT +TVM_SETITEMHEIGHT = (TV_FIRST + 27) +TVM_GETITEMHEIGHT = (TV_FIRST + 28) +TVM_SETBKCOLOR = (TV_FIRST + 29) +TVM_SETTEXTCOLOR = (TV_FIRST + 30) +TVM_GETBKCOLOR = (TV_FIRST + 31) +TVM_GETTEXTCOLOR = (TV_FIRST + 32) +TVM_SETSCROLLTIME = (TV_FIRST + 33) +TVM_GETSCROLLTIME = (TV_FIRST + 34) +TVM_SETINSERTMARKCOLOR = (TV_FIRST + 37) +TVM_GETINSERTMARKCOLOR = (TV_FIRST + 38) +TVN_SELCHANGINGA = (TVN_FIRST-1) +TVN_SELCHANGINGW = (TVN_FIRST-50) +TVN_SELCHANGEDA = (TVN_FIRST-2) +TVN_SELCHANGEDW = (TVN_FIRST-51) +TVC_UNKNOWN = 0 +TVC_BYMOUSE = 1 +TVC_BYKEYBOARD = 2 +TVN_GETDISPINFOA = (TVN_FIRST-3) +TVN_GETDISPINFOW = (TVN_FIRST-52) +TVN_SETDISPINFOA = (TVN_FIRST-4) +TVN_SETDISPINFOW = (TVN_FIRST-53) +TVIF_DI_SETITEM = 4096 +TVN_ITEMEXPANDINGA = (TVN_FIRST-5) +TVN_ITEMEXPANDINGW = (TVN_FIRST-54) +TVN_ITEMEXPANDEDA = (TVN_FIRST-6) +TVN_ITEMEXPANDEDW = (TVN_FIRST-55) +TVN_BEGINDRAGA = (TVN_FIRST-7) +TVN_BEGINDRAGW = (TVN_FIRST-56) +TVN_BEGINRDRAGA = (TVN_FIRST-8) +TVN_BEGINRDRAGW = (TVN_FIRST-57) +TVN_DELETEITEMA = (TVN_FIRST-9) +TVN_DELETEITEMW = (TVN_FIRST-58) +TVN_BEGINLABELEDITA = (TVN_FIRST-10) +TVN_BEGINLABELEDITW = (TVN_FIRST-59) +TVN_ENDLABELEDITA = (TVN_FIRST-11) +TVN_ENDLABELEDITW = (TVN_FIRST-60) +TVN_KEYDOWN = (TVN_FIRST-12) +TVN_GETINFOTIPA = (TVN_FIRST-13) +TVN_GETINFOTIPW = (TVN_FIRST-14) +TVN_SINGLEEXPAND = (TVN_FIRST-15) +TVN_SELCHANGING = TVN_SELCHANGINGA +TVN_SELCHANGED = TVN_SELCHANGEDA +TVN_GETDISPINFO = TVN_GETDISPINFOA +TVN_SETDISPINFO = TVN_SETDISPINFOA +TVN_ITEMEXPANDING = TVN_ITEMEXPANDINGA +TVN_ITEMEXPANDED = TVN_ITEMEXPANDEDA +TVN_BEGINDRAG = TVN_BEGINDRAGA +TVN_BEGINRDRAG = TVN_BEGINRDRAGA +TVN_DELETEITEM = TVN_DELETEITEMA +TVN_BEGINLABELEDIT = TVN_BEGINLABELEDITA +TVN_ENDLABELEDIT = TVN_ENDLABELEDITA +TVN_GETINFOTIP = TVN_GETINFOTIPA +TVCDRF_NOIMAGES = 65536 +WC_COMBOBOXEXA = "ComboBoxEx32" +WC_COMBOBOXEX = WC_COMBOBOXEXA +CBEIF_TEXT = 1 +CBEIF_IMAGE = 2 +CBEIF_SELECTEDIMAGE = 4 +CBEIF_OVERLAY = 8 +CBEIF_INDENT = 16 +CBEIF_LPARAM = 32 +CBEIF_DI_SETITEM = 268435456 +CBEM_INSERTITEMA = (WM_USER + 1) +CBEM_SETIMAGELIST = (WM_USER + 2) +CBEM_GETIMAGELIST = (WM_USER + 3) +CBEM_GETITEMA = (WM_USER + 4) +CBEM_SETITEMA = (WM_USER + 5) +#CBEM_DELETEITEM = CB_DELETESTRING +CBEM_GETCOMBOCONTROL = (WM_USER + 6) +CBEM_GETEDITCONTROL = (WM_USER + 7) +CBEM_SETEXSTYLE = (WM_USER + 8) # use SETEXTENDEDSTYLE instead +CBEM_SETEXTENDEDSTYLE = (WM_USER + 14) # lparam == new style, wParam (optional) == mask +CBEM_GETEXSTYLE = (WM_USER + 9) # use GETEXTENDEDSTYLE instead +CBEM_GETEXTENDEDSTYLE = (WM_USER + 9) +CBEM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT +CBEM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT +CBEM_SETEXSTYLE = (WM_USER + 8) +CBEM_GETEXSTYLE = (WM_USER + 9) +CBEM_HASEDITCHANGED = (WM_USER + 10) +CBEM_INSERTITEMW = (WM_USER + 11) +CBEM_SETITEMW = (WM_USER + 12) +CBEM_GETITEMW = (WM_USER + 13) +CBEM_INSERTITEM = CBEM_INSERTITEMA +CBEM_SETITEM = CBEM_SETITEMA +CBEM_GETITEM = CBEM_GETITEMA +CBES_EX_NOEDITIMAGE = 1 +CBES_EX_NOEDITIMAGEINDENT = 2 +CBES_EX_PATHWORDBREAKPROC = 4 +CBES_EX_NOSIZELIMIT = 8 +CBES_EX_CASESENSITIVE = 16 +CBEN_GETDISPINFO = (CBEN_FIRST - 0) +CBEN_GETDISPINFOA = (CBEN_FIRST - 0) +CBEN_INSERTITEM = (CBEN_FIRST - 1) +CBEN_DELETEITEM = (CBEN_FIRST - 2) +CBEN_BEGINEDIT = (CBEN_FIRST - 4) +CBEN_ENDEDITA = (CBEN_FIRST - 5) +CBEN_ENDEDITW = (CBEN_FIRST - 6) +CBEN_GETDISPINFOW = (CBEN_FIRST - 7) +CBEN_DRAGBEGINA = (CBEN_FIRST - 8) +CBEN_DRAGBEGINW = (CBEN_FIRST - 9) +CBEN_DRAGBEGIN = CBEN_DRAGBEGINA +CBEN_ENDEDIT = CBEN_ENDEDITA +CBENF_KILLFOCUS = 1 +CBENF_RETURN = 2 +CBENF_ESCAPE = 3 +CBENF_DROPDOWN = 4 +CBEMAXSTRLEN = 260 +WC_TABCONTROLA = "SysTabControl32" +WC_TABCONTROL = WC_TABCONTROLA +TCS_SCROLLOPPOSITE = 1 # assumes multiline tab +TCS_BOTTOM = 2 +TCS_RIGHT = 2 +TCS_MULTISELECT = 4 # allow multi-select in button mode +TCS_FLATBUTTONS = 8 +TCS_FORCEICONLEFT = 16 +TCS_FORCELABELLEFT = 32 +TCS_HOTTRACK = 64 +TCS_VERTICAL = 128 +TCS_TABS = 0 +TCS_BUTTONS = 256 +TCS_SINGLELINE = 0 +TCS_MULTILINE = 512 +TCS_RIGHTJUSTIFY = 0 +TCS_FIXEDWIDTH = 1024 +TCS_RAGGEDRIGHT = 2048 +TCS_FOCUSONBUTTONDOWN = 4096 +TCS_OWNERDRAWFIXED = 8192 +TCS_TOOLTIPS = 16384 +TCS_FOCUSNEVER = 32768 +TCS_EX_FLATSEPARATORS = 1 +TCS_EX_REGISTERDROP = 2 +TCM_GETIMAGELIST = (TCM_FIRST + 2) +TCM_SETIMAGELIST = (TCM_FIRST + 3) +TCM_GETITEMCOUNT = (TCM_FIRST + 4) +TCIF_TEXT = 1 +TCIF_IMAGE = 2 +TCIF_RTLREADING = 4 +TCIF_PARAM = 8 +TCIF_STATE = 16 +TCIS_BUTTONPRESSED = 1 +TCIS_HIGHLIGHTED = 2 +TCM_GETITEMA = (TCM_FIRST + 5) +TCM_GETITEMW = (TCM_FIRST + 60) +TCM_GETITEM = TCM_GETITEMA +TCM_SETITEMA = (TCM_FIRST + 6) +TCM_SETITEMW = (TCM_FIRST + 61) +TCM_SETITEM = TCM_SETITEMA +TCM_INSERTITEMA = (TCM_FIRST + 7) +TCM_INSERTITEMW = (TCM_FIRST + 62) +TCM_INSERTITEM = TCM_INSERTITEMA +TCM_DELETEITEM = (TCM_FIRST + 8) +TCM_DELETEALLITEMS = (TCM_FIRST + 9) +TCM_GETITEMRECT = (TCM_FIRST + 10) +TCM_GETCURSEL = (TCM_FIRST + 11) +TCM_SETCURSEL = (TCM_FIRST + 12) +TCHT_NOWHERE = 1 +TCHT_ONITEMICON = 2 +TCHT_ONITEMLABEL = 4 +TCHT_ONITEM = (TCHT_ONITEMICON | TCHT_ONITEMLABEL) +TCM_HITTEST = (TCM_FIRST + 13) +TCM_SETITEMEXTRA = (TCM_FIRST + 14) +TCM_ADJUSTRECT = (TCM_FIRST + 40) +TCM_SETITEMSIZE = (TCM_FIRST + 41) +TCM_REMOVEIMAGE = (TCM_FIRST + 42) +TCM_SETPADDING = (TCM_FIRST + 43) +TCM_GETROWCOUNT = (TCM_FIRST + 44) +TCM_GETTOOLTIPS = (TCM_FIRST + 45) +TCM_SETTOOLTIPS = (TCM_FIRST + 46) +TCM_GETCURFOCUS = (TCM_FIRST + 47) +TCM_SETCURFOCUS = (TCM_FIRST + 48) +TCM_SETMINTABWIDTH = (TCM_FIRST + 49) +TCM_DESELECTALL = (TCM_FIRST + 50) +TCM_HIGHLIGHTITEM = (TCM_FIRST + 51) +TCM_SETEXTENDEDSTYLE = (TCM_FIRST + 52) # optional wParam == mask +TCM_GETEXTENDEDSTYLE = (TCM_FIRST + 53) +TCM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT +TCM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT +TCN_KEYDOWN = (TCN_FIRST - 0) +ANIMATE_CLASSA = "SysAnimate32" +ANIMATE_CLASS = ANIMATE_CLASSA +ACS_CENTER = 1 +ACS_TRANSPARENT = 2 +ACS_AUTOPLAY = 4 +ACS_TIMER = 8 # don't use threads... use timers +ACM_OPENA = (WM_USER+100) +ACM_OPENW = (WM_USER+103) +ACM_OPEN = ACM_OPENW +ACM_OPEN = ACM_OPENA +ACM_PLAY = (WM_USER+101) +ACM_STOP = (WM_USER+102) +ACN_START = 1 +ACN_STOP = 2 +MONTHCAL_CLASSA = "SysMonthCal32" +MONTHCAL_CLASS = MONTHCAL_CLASSA +MCM_FIRST = 4096 +MCM_GETCURSEL = (MCM_FIRST + 1) +MCM_SETCURSEL = (MCM_FIRST + 2) +MCM_GETMAXSELCOUNT = (MCM_FIRST + 3) +MCM_SETMAXSELCOUNT = (MCM_FIRST + 4) +MCM_GETSELRANGE = (MCM_FIRST + 5) +MCM_SETSELRANGE = (MCM_FIRST + 6) +MCM_GETMONTHRANGE = (MCM_FIRST + 7) +MCM_SETDAYSTATE = (MCM_FIRST + 8) +MCM_GETMINREQRECT = (MCM_FIRST + 9) +MCM_SETCOLOR = (MCM_FIRST + 10) +MCM_GETCOLOR = (MCM_FIRST + 11) +MCSC_BACKGROUND = 0 # the background color (between months) +MCSC_TEXT = 1 # the dates +MCSC_TITLEBK = 2 # background of the title +MCSC_TITLETEXT = 3 +MCSC_MONTHBK = 4 # background within the month cal +MCSC_TRAILINGTEXT = 5 # the text color of header & trailing days +MCM_SETTODAY = (MCM_FIRST + 12) +MCM_GETTODAY = (MCM_FIRST + 13) +MCM_HITTEST = (MCM_FIRST + 14) +MCHT_TITLE = 65536 +MCHT_CALENDAR = 131072 +MCHT_TODAYLINK = 196608 +MCHT_NEXT = 16777216 # these indicate that hitting +MCHT_PREV = 33554432 # here will go to the next/prev month +MCHT_NOWHERE = 0 +MCHT_TITLEBK = (MCHT_TITLE) +MCHT_TITLEMONTH = (MCHT_TITLE | 1) +MCHT_TITLEYEAR = (MCHT_TITLE | 2) +MCHT_TITLEBTNNEXT = (MCHT_TITLE | MCHT_NEXT | 3) +MCHT_TITLEBTNPREV = (MCHT_TITLE | MCHT_PREV | 3) +MCHT_CALENDARBK = (MCHT_CALENDAR) +MCHT_CALENDARDATE = (MCHT_CALENDAR | 1) +MCHT_CALENDARDATENEXT = (MCHT_CALENDARDATE | MCHT_NEXT) +MCHT_CALENDARDATEPREV = (MCHT_CALENDARDATE | MCHT_PREV) +MCHT_CALENDARDAY = (MCHT_CALENDAR | 2) +MCHT_CALENDARWEEKNUM = (MCHT_CALENDAR | 3) +MCM_SETFIRSTDAYOFWEEK = (MCM_FIRST + 15) +MCM_GETFIRSTDAYOFWEEK = (MCM_FIRST + 16) +MCM_GETRANGE = (MCM_FIRST + 17) +MCM_SETRANGE = (MCM_FIRST + 18) +MCM_GETMONTHDELTA = (MCM_FIRST + 19) +MCM_SETMONTHDELTA = (MCM_FIRST + 20) +MCM_GETMAXTODAYWIDTH = (MCM_FIRST + 21) +MCM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT +MCM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT +MCN_SELCHANGE = (MCN_FIRST + 1) +MCN_GETDAYSTATE = (MCN_FIRST + 3) +MCN_SELECT = (MCN_FIRST + 4) +MCS_DAYSTATE = 1 +MCS_MULTISELECT = 2 +MCS_WEEKNUMBERS = 4 +MCS_NOTODAYCIRCLE = 8 +MCS_NOTODAY = 16 +MCS_NOTODAY = 8 +GMR_VISIBLE = 0 # visible portion of display +GMR_DAYSTATE = 1 # above plus the grayed out parts of +DATETIMEPICK_CLASSA = "SysDateTimePick32" +DATETIMEPICK_CLASS = DATETIMEPICK_CLASSA +DTM_FIRST = 4096 +DTM_GETSYSTEMTIME = (DTM_FIRST + 1) +DTM_SETSYSTEMTIME = (DTM_FIRST + 2) +DTM_GETRANGE = (DTM_FIRST + 3) +DTM_SETRANGE = (DTM_FIRST + 4) +DTM_SETFORMATA = (DTM_FIRST + 5) +DTM_SETFORMATW = (DTM_FIRST + 50) +DTM_SETFORMAT = DTM_SETFORMATW +DTM_SETFORMAT = DTM_SETFORMATA +DTM_SETMCCOLOR = (DTM_FIRST + 6) +DTM_GETMCCOLOR = (DTM_FIRST + 7) +DTM_GETMONTHCAL = (DTM_FIRST + 8) +DTM_SETMCFONT = (DTM_FIRST + 9) +DTM_GETMCFONT = (DTM_FIRST + 10) +DTS_UPDOWN = 1 # use UPDOWN instead of MONTHCAL +DTS_SHOWNONE = 2 # allow a NONE selection +DTS_SHORTDATEFORMAT = 0 # use the short date format (app must forward WM_WININICHANGE messages) +DTS_LONGDATEFORMAT = 4 # use the long date format (app must forward WM_WININICHANGE messages) +DTS_TIMEFORMAT = 9 # use the time format (app must forward WM_WININICHANGE messages) +DTS_APPCANPARSE = 16 # allow user entered strings (app MUST respond to DTN_USERSTRING) +DTS_RIGHTALIGN = 32 # right-align popup instead of left-align it +DTN_DATETIMECHANGE = (DTN_FIRST + 1) # the systemtime has changed +DTN_USERSTRINGA = (DTN_FIRST + 2) # the user has entered a string +DTN_USERSTRINGW = (DTN_FIRST + 15) +DTN_USERSTRING = DTN_USERSTRINGW +DTN_WMKEYDOWNA = (DTN_FIRST + 3) # modify keydown on app format field (X) +DTN_WMKEYDOWNW = (DTN_FIRST + 16) +DTN_WMKEYDOWN = DTN_WMKEYDOWNA +DTN_FORMATA = (DTN_FIRST + 4) # query display for app format field (X) +DTN_FORMATW = (DTN_FIRST + 17) +DTN_FORMAT = DTN_FORMATA +DTN_FORMATQUERYA = (DTN_FIRST + 5) # query formatting info for app format field (X) +DTN_FORMATQUERYW = (DTN_FIRST + 18) +DTN_FORMATQUERY = DTN_FORMATQUERYA +DTN_DROPDOWN = (DTN_FIRST + 6) # MonthCal has dropped down +DTN_CLOSEUP = (DTN_FIRST + 7) # MonthCal is popping up +GDTR_MIN = 1 +GDTR_MAX = 2 +GDT_ERROR = -1 +GDT_VALID = 0 +GDT_NONE = 1 +IPM_CLEARADDRESS = (WM_USER+100) # no parameters +IPM_SETADDRESS = (WM_USER+101) # lparam = TCP/IP address +IPM_GETADDRESS = (WM_USER+102) # lresult = # of non black fields. lparam = LPDWORD for TCP/IP address +IPM_SETRANGE = (WM_USER+103) # wparam = field, lparam = range +IPM_SETFOCUS = (WM_USER+104) # wparam = field +IPM_ISBLANK = (WM_USER+105) # no parameters +WC_IPADDRESSA = "SysIPAddress32" +WC_IPADDRESS = WC_IPADDRESSA +IPN_FIELDCHANGED = (IPN_FIRST - 0) +WC_PAGESCROLLERA = "SysPager" +WC_PAGESCROLLER = WC_PAGESCROLLERA +PGS_VERT = 0 +PGS_HORZ = 1 +PGS_AUTOSCROLL = 2 +PGS_DRAGNDROP = 4 +PGF_INVISIBLE = 0 # Scroll button is not visible +PGF_NORMAL = 1 # Scroll button is in normal state +PGF_GRAYED = 2 # Scroll button is in grayed state +PGF_DEPRESSED = 4 # Scroll button is in depressed state +PGF_HOT = 8 # Scroll button is in hot state +PGB_TOPORLEFT = 0 +PGB_BOTTOMORRIGHT = 1 +PGM_SETCHILD = (PGM_FIRST + 1) # lParam == hwnd +PGM_RECALCSIZE = (PGM_FIRST + 2) +PGM_FORWARDMOUSE = (PGM_FIRST + 3) +PGM_SETBKCOLOR = (PGM_FIRST + 4) +PGM_GETBKCOLOR = (PGM_FIRST + 5) +PGM_SETBORDER = (PGM_FIRST + 6) +PGM_GETBORDER = (PGM_FIRST + 7) +PGM_SETPOS = (PGM_FIRST + 8) +PGM_GETPOS = (PGM_FIRST + 9) +PGM_SETBUTTONSIZE = (PGM_FIRST + 10) +PGM_GETBUTTONSIZE = (PGM_FIRST + 11) +PGM_GETBUTTONSTATE = (PGM_FIRST + 12) +PGM_GETDROPTARGET = CCM_GETDROPTARGET +PGN_SCROLL = (PGN_FIRST-1) +PGF_SCROLLUP = 1 +PGF_SCROLLDOWN = 2 +PGF_SCROLLLEFT = 4 +PGF_SCROLLRIGHT = 8 +PGK_SHIFT = 1 +PGK_CONTROL = 2 +PGK_MENU = 4 +PGN_CALCSIZE = (PGN_FIRST-2) +PGF_CALCWIDTH = 1 +PGF_CALCHEIGHT = 2 +WC_NATIVEFONTCTLA = "NativeFontCtl" +WC_NATIVEFONTCTL = WC_NATIVEFONTCTLA +NFS_EDIT = 1 +NFS_STATIC = 2 +NFS_LISTCOMBO = 4 +NFS_BUTTON = 8 +NFS_ALL = 16 +WM_MOUSEHOVER = 673 +WM_MOUSELEAVE = 675 +TME_HOVER = 1 +TME_LEAVE = 2 +TME_QUERY = 1073741824 +TME_CANCEL = -2147483648 +HOVER_DEFAULT = -1 +WSB_PROP_CYVSCROLL = 0x00000001L +WSB_PROP_CXHSCROLL = 0x00000002L +WSB_PROP_CYHSCROLL = 0x00000004L +WSB_PROP_CXVSCROLL = 0x00000008L +WSB_PROP_CXHTHUMB = 0x00000010L +WSB_PROP_CYVTHUMB = 0x00000020L +WSB_PROP_VBKGCOLOR = 0x00000040L +WSB_PROP_HBKGCOLOR = 0x00000080L +WSB_PROP_VSTYLE = 0x00000100L +WSB_PROP_HSTYLE = 0x00000200L +WSB_PROP_WINSTYLE = 0x00000400L +WSB_PROP_PALETTE = 0x00000800L +WSB_PROP_MASK = 0x00000FFFL +FSB_FLAT_MODE = 2 +FSB_ENCARTA_MODE = 1 +FSB_REGULAR_MODE = 0 + +def INDEXTOOVERLAYMASK(i): + return i << 8 + +def INDEXTOSTATEIMAGEMASK(i): + return i << 12 diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/mmsystem.py b/thirdparty/python25/Lib/site-packages/win32/lib/mmsystem.py new file mode 100644 index 000000000..a99cb2d41 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/mmsystem.py @@ -0,0 +1,867 @@ +# Generated by h2py from d:/msdev/include/mmsystem.h +MAXPNAMELEN = 32 +MAXERRORLENGTH = 256 +MAX_JOYSTICKOEMVXDNAME = 260 +MM_MICROSOFT = 1 +MM_MIDI_MAPPER = 1 +MM_WAVE_MAPPER = 2 +MM_SNDBLST_MIDIOUT = 3 +MM_SNDBLST_MIDIIN = 4 +MM_SNDBLST_SYNTH = 5 +MM_SNDBLST_WAVEOUT = 6 +MM_SNDBLST_WAVEIN = 7 +MM_ADLIB = 9 +MM_MPU401_MIDIOUT = 10 +MM_MPU401_MIDIIN = 11 +MM_PC_JOYSTICK = 12 +TIME_MS = 0x0001 +TIME_SAMPLES = 0x0002 +TIME_BYTES = 0x0004 +TIME_SMPTE = 0x0008 +TIME_MIDI = 0x0010 +TIME_TICKS = 0x0020 +MM_JOY1MOVE = 0x3A0 +MM_JOY2MOVE = 0x3A1 +MM_JOY1ZMOVE = 0x3A2 +MM_JOY2ZMOVE = 0x3A3 +MM_JOY1BUTTONDOWN = 0x3B5 +MM_JOY2BUTTONDOWN = 0x3B6 +MM_JOY1BUTTONUP = 0x3B7 +MM_JOY2BUTTONUP = 0x3B8 +MM_MCINOTIFY = 0x3B9 +MM_WOM_OPEN = 0x3BB +MM_WOM_CLOSE = 0x3BC +MM_WOM_DONE = 0x3BD +MM_WIM_OPEN = 0x3BE +MM_WIM_CLOSE = 0x3BF +MM_WIM_DATA = 0x3C0 +MM_MIM_OPEN = 0x3C1 +MM_MIM_CLOSE = 0x3C2 +MM_MIM_DATA = 0x3C3 +MM_MIM_LONGDATA = 0x3C4 +MM_MIM_ERROR = 0x3C5 +MM_MIM_LONGERROR = 0x3C6 +MM_MOM_OPEN = 0x3C7 +MM_MOM_CLOSE = 0x3C8 +MM_MOM_DONE = 0x3C9 +MM_STREAM_OPEN = 0x3D4 +MM_STREAM_CLOSE = 0x3D5 +MM_STREAM_DONE = 0x3D6 +MM_STREAM_ERROR = 0x3D7 +MM_MOM_POSITIONCB = 0x3CA +MM_MIM_MOREDATA = 0x3CC +MM_MIXM_LINE_CHANGE = 0x3D0 +MM_MIXM_CONTROL_CHANGE = 0x3D1 +MMSYSERR_BASE = 0 +WAVERR_BASE = 32 +MIDIERR_BASE = 64 +TIMERR_BASE = 96 +JOYERR_BASE = 160 +MCIERR_BASE = 256 +MIXERR_BASE = 1024 +MCI_STRING_OFFSET = 512 +MCI_VD_OFFSET = 1024 +MCI_CD_OFFSET = 1088 +MCI_WAVE_OFFSET = 1152 +MCI_SEQ_OFFSET = 1216 +MMSYSERR_NOERROR = 0 +MMSYSERR_ERROR = (MMSYSERR_BASE + 1) +MMSYSERR_BADDEVICEID = (MMSYSERR_BASE + 2) +MMSYSERR_NOTENABLED = (MMSYSERR_BASE + 3) +MMSYSERR_ALLOCATED = (MMSYSERR_BASE + 4) +MMSYSERR_INVALHANDLE = (MMSYSERR_BASE + 5) +MMSYSERR_NODRIVER = (MMSYSERR_BASE + 6) +MMSYSERR_NOMEM = (MMSYSERR_BASE + 7) +MMSYSERR_NOTSUPPORTED = (MMSYSERR_BASE + 8) +MMSYSERR_BADERRNUM = (MMSYSERR_BASE + 9) +MMSYSERR_INVALFLAG = (MMSYSERR_BASE + 10) +MMSYSERR_INVALPARAM = (MMSYSERR_BASE + 11) +MMSYSERR_HANDLEBUSY = (MMSYSERR_BASE + 12) +MMSYSERR_INVALIDALIAS = (MMSYSERR_BASE + 13) +MMSYSERR_BADDB = (MMSYSERR_BASE + 14) +MMSYSERR_KEYNOTFOUND = (MMSYSERR_BASE + 15) +MMSYSERR_READERROR = (MMSYSERR_BASE + 16) +MMSYSERR_WRITEERROR = (MMSYSERR_BASE + 17) +MMSYSERR_DELETEERROR = (MMSYSERR_BASE + 18) +MMSYSERR_VALNOTFOUND = (MMSYSERR_BASE + 19) +MMSYSERR_NODRIVERCB = (MMSYSERR_BASE + 20) +MMSYSERR_LASTERROR = (MMSYSERR_BASE + 20) +DRV_LOAD = 0x0001 +DRV_ENABLE = 0x0002 +DRV_OPEN = 0x0003 +DRV_CLOSE = 0x0004 +DRV_DISABLE = 0x0005 +DRV_FREE = 0x0006 +DRV_CONFIGURE = 0x0007 +DRV_QUERYCONFIGURE = 0x0008 +DRV_INSTALL = 0x0009 +DRV_REMOVE = 0x000A +DRV_EXITSESSION = 0x000B +DRV_POWER = 0x000F +DRV_RESERVED = 0x0800 +DRV_USER = 0x4000 +DRVCNF_CANCEL = 0x0000 +DRVCNF_OK = 0x0001 +DRVCNF_RESTART = 0x0002 +DRV_CANCEL = DRVCNF_CANCEL +DRV_OK = DRVCNF_OK +DRV_RESTART = DRVCNF_RESTART +DRV_MCI_FIRST = DRV_RESERVED +DRV_MCI_LAST = (DRV_RESERVED + 0xFFF) +CALLBACK_TYPEMASK = 0x00070000l +CALLBACK_NULL = 0x00000000l +CALLBACK_WINDOW = 0x00010000l +CALLBACK_TASK = 0x00020000l +CALLBACK_FUNCTION = 0x00030000l +CALLBACK_THREAD = (CALLBACK_TASK) +CALLBACK_EVENT = 0x00050000l +SND_SYNC = 0x0000 +SND_ASYNC = 0x0001 +SND_NODEFAULT = 0x0002 +SND_MEMORY = 0x0004 +SND_LOOP = 0x0008 +SND_NOSTOP = 0x0010 +SND_NOWAIT = 0x00002000L +SND_ALIAS = 0x00010000L +SND_ALIAS_ID = 0x00110000L +SND_FILENAME = 0x00020000L +SND_RESOURCE = 0x00040004L +SND_PURGE = 0x0040 +SND_APPLICATION = 0x0080 +SND_ALIAS_START = 0 +WAVERR_BADFORMAT = (WAVERR_BASE + 0) +WAVERR_STILLPLAYING = (WAVERR_BASE + 1) +WAVERR_UNPREPARED = (WAVERR_BASE + 2) +WAVERR_SYNC = (WAVERR_BASE + 3) +WAVERR_LASTERROR = (WAVERR_BASE + 3) +WOM_OPEN = MM_WOM_OPEN +WOM_CLOSE = MM_WOM_CLOSE +WOM_DONE = MM_WOM_DONE +WIM_OPEN = MM_WIM_OPEN +WIM_CLOSE = MM_WIM_CLOSE +WIM_DATA = MM_WIM_DATA +WAVE_MAPPER = 0xFFFFFFFFL +WAVE_FORMAT_QUERY = 0x0001 +WAVE_ALLOWSYNC = 0x0002 +WAVE_MAPPED = 0x0004 +WAVE_FORMAT_DIRECT = 0x0008 +WAVE_FORMAT_DIRECT_QUERY = (WAVE_FORMAT_QUERY | WAVE_FORMAT_DIRECT) +WHDR_DONE = 0x00000001 +WHDR_PREPARED = 0x00000002 +WHDR_BEGINLOOP = 0x00000004 +WHDR_ENDLOOP = 0x00000008 +WHDR_INQUEUE = 0x00000010 +WAVECAPS_PITCH = 0x0001 +WAVECAPS_PLAYBACKRATE = 0x0002 +WAVECAPS_VOLUME = 0x0004 +WAVECAPS_LRVOLUME = 0x0008 +WAVECAPS_SYNC = 0x0010 +WAVECAPS_SAMPLEACCURATE = 0x0020 +WAVECAPS_DIRECTSOUND = 0x0040 +WAVE_INVALIDFORMAT = 0x00000000 +WAVE_FORMAT_1M08 = 0x00000001 +WAVE_FORMAT_1S08 = 0x00000002 +WAVE_FORMAT_1M16 = 0x00000004 +WAVE_FORMAT_1S16 = 0x00000008 +WAVE_FORMAT_2M08 = 0x00000010 +WAVE_FORMAT_2S08 = 0x00000020 +WAVE_FORMAT_2M16 = 0x00000040 +WAVE_FORMAT_2S16 = 0x00000080 +WAVE_FORMAT_4M08 = 0x00000100 +WAVE_FORMAT_4S08 = 0x00000200 +WAVE_FORMAT_4M16 = 0x00000400 +WAVE_FORMAT_4S16 = 0x00000800 +WAVE_FORMAT_PCM = 1 +WAVE_FORMAT_IEEE_FLOAT = 3 +MIDIERR_UNPREPARED = (MIDIERR_BASE + 0) +MIDIERR_STILLPLAYING = (MIDIERR_BASE + 1) +MIDIERR_NOMAP = (MIDIERR_BASE + 2) +MIDIERR_NOTREADY = (MIDIERR_BASE + 3) +MIDIERR_NODEVICE = (MIDIERR_BASE + 4) +MIDIERR_INVALIDSETUP = (MIDIERR_BASE + 5) +MIDIERR_BADOPENMODE = (MIDIERR_BASE + 6) +MIDIERR_DONT_CONTINUE = (MIDIERR_BASE + 7) +MIDIERR_LASTERROR = (MIDIERR_BASE + 7) +MIDIPATCHSIZE = 128 +MIM_OPEN = MM_MIM_OPEN +MIM_CLOSE = MM_MIM_CLOSE +MIM_DATA = MM_MIM_DATA +MIM_LONGDATA = MM_MIM_LONGDATA +MIM_ERROR = MM_MIM_ERROR +MIM_LONGERROR = MM_MIM_LONGERROR +MOM_OPEN = MM_MOM_OPEN +MOM_CLOSE = MM_MOM_CLOSE +MOM_DONE = MM_MOM_DONE +MIM_MOREDATA = MM_MIM_MOREDATA +MOM_POSITIONCB = MM_MOM_POSITIONCB +MIDI_IO_STATUS = 0x00000020L +MIDI_CACHE_ALL = 1 +MIDI_CACHE_BESTFIT = 2 +MIDI_CACHE_QUERY = 3 +MIDI_UNCACHE = 4 +MOD_MIDIPORT = 1 +MOD_SYNTH = 2 +MOD_SQSYNTH = 3 +MOD_FMSYNTH = 4 +MOD_MAPPER = 5 +MIDICAPS_VOLUME = 0x0001 +MIDICAPS_LRVOLUME = 0x0002 +MIDICAPS_CACHE = 0x0004 +MIDICAPS_STREAM = 0x0008 +MHDR_DONE = 0x00000001 +MHDR_PREPARED = 0x00000002 +MHDR_INQUEUE = 0x00000004 +MHDR_ISSTRM = 0x00000008 +MEVT_F_SHORT = 0x00000000L +MEVT_F_LONG = 0x80000000L +MEVT_F_CALLBACK = 0x40000000L +def MEVT_EVENTTYPE(x): return ((BYTE)(((x)>>24)&0xFF)) + +def MEVT_EVENTPARM(x): return ((DWORD)((x)&0x00FFFFFFL)) + +MIDISTRM_ERROR = (-2) +MIDIPROP_SET = 0x80000000L +MIDIPROP_GET = 0x40000000L +MIDIPROP_TIMEDIV = 0x00000001L +MIDIPROP_TEMPO = 0x00000002L +AUXCAPS_CDAUDIO = 1 +AUXCAPS_AUXIN = 2 +AUXCAPS_VOLUME = 0x0001 +AUXCAPS_LRVOLUME = 0x0002 +MIXER_SHORT_NAME_CHARS = 16 +MIXER_LONG_NAME_CHARS = 64 +MIXERR_INVALLINE = (MIXERR_BASE + 0) +MIXERR_INVALCONTROL = (MIXERR_BASE + 1) +MIXERR_INVALVALUE = (MIXERR_BASE + 2) +MIXERR_LASTERROR = (MIXERR_BASE + 2) +MIXER_OBJECTF_HANDLE = 0x80000000L +MIXER_OBJECTF_MIXER = 0x00000000L +MIXER_OBJECTF_HMIXER = (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIXER) +MIXER_OBJECTF_WAVEOUT = 0x10000000L +MIXER_OBJECTF_HWAVEOUT = (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEOUT) +MIXER_OBJECTF_WAVEIN = 0x20000000L +MIXER_OBJECTF_HWAVEIN = (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEIN) +MIXER_OBJECTF_MIDIOUT = 0x30000000L +MIXER_OBJECTF_HMIDIOUT = (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIOUT) +MIXER_OBJECTF_MIDIIN = 0x40000000L +MIXER_OBJECTF_HMIDIIN = (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIIN) +MIXER_OBJECTF_AUX = 0x50000000L +MIXERLINE_LINEF_ACTIVE = 0x00000001L +MIXERLINE_LINEF_DISCONNECTED = 0x00008000L +MIXERLINE_LINEF_SOURCE = 0x80000000L +MIXERLINE_COMPONENTTYPE_DST_FIRST = 0x00000000L +MIXERLINE_COMPONENTTYPE_DST_UNDEFINED = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 0) +MIXERLINE_COMPONENTTYPE_DST_DIGITAL = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 1) +MIXERLINE_COMPONENTTYPE_DST_LINE = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 2) +MIXERLINE_COMPONENTTYPE_DST_MONITOR = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 3) +MIXERLINE_COMPONENTTYPE_DST_SPEAKERS = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 4) +MIXERLINE_COMPONENTTYPE_DST_HEADPHONES = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 5) +MIXERLINE_COMPONENTTYPE_DST_TELEPHONE = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 6) +MIXERLINE_COMPONENTTYPE_DST_WAVEIN = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 7) +MIXERLINE_COMPONENTTYPE_DST_VOICEIN = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8) +MIXERLINE_COMPONENTTYPE_DST_LAST = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8) +MIXERLINE_COMPONENTTYPE_SRC_FIRST = 0x00001000L +MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 0) +MIXERLINE_COMPONENTTYPE_SRC_DIGITAL = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 1) +MIXERLINE_COMPONENTTYPE_SRC_LINE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2) +MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3) +MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 4) +MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 5) +MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 6) +MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 7) +MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 8) +MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 9) +MIXERLINE_COMPONENTTYPE_SRC_ANALOG = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10) +MIXERLINE_COMPONENTTYPE_SRC_LAST = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10) +MIXERLINE_TARGETTYPE_UNDEFINED = 0 +MIXERLINE_TARGETTYPE_WAVEOUT = 1 +MIXERLINE_TARGETTYPE_WAVEIN = 2 +MIXERLINE_TARGETTYPE_MIDIOUT = 3 +MIXERLINE_TARGETTYPE_MIDIIN = 4 +MIXERLINE_TARGETTYPE_AUX = 5 +MIXER_GETLINEINFOF_DESTINATION = 0x00000000L +MIXER_GETLINEINFOF_SOURCE = 0x00000001L +MIXER_GETLINEINFOF_LINEID = 0x00000002L +MIXER_GETLINEINFOF_COMPONENTTYPE = 0x00000003L +MIXER_GETLINEINFOF_TARGETTYPE = 0x00000004L +MIXER_GETLINEINFOF_QUERYMASK = 0x0000000FL +MIXERCONTROL_CONTROLF_UNIFORM = 0x00000001L +MIXERCONTROL_CONTROLF_MULTIPLE = 0x00000002L +MIXERCONTROL_CONTROLF_DISABLED = 0x80000000L +MIXERCONTROL_CT_CLASS_MASK = 0xF0000000L +MIXERCONTROL_CT_CLASS_CUSTOM = 0x00000000L +MIXERCONTROL_CT_CLASS_METER = 0x10000000L +MIXERCONTROL_CT_CLASS_SWITCH = 0x20000000L +MIXERCONTROL_CT_CLASS_NUMBER = 0x30000000L +MIXERCONTROL_CT_CLASS_SLIDER = 0x40000000L +MIXERCONTROL_CT_CLASS_FADER = 0x50000000L +MIXERCONTROL_CT_CLASS_TIME = 0x60000000L +MIXERCONTROL_CT_CLASS_LIST = 0x70000000L +MIXERCONTROL_CT_SUBCLASS_MASK = 0x0F000000L +MIXERCONTROL_CT_SC_SWITCH_BOOLEAN = 0x00000000L +MIXERCONTROL_CT_SC_SWITCH_BUTTON = 0x01000000L +MIXERCONTROL_CT_SC_METER_POLLED = 0x00000000L +MIXERCONTROL_CT_SC_TIME_MICROSECS = 0x00000000L +MIXERCONTROL_CT_SC_TIME_MILLISECS = 0x01000000L +MIXERCONTROL_CT_SC_LIST_SINGLE = 0x00000000L +MIXERCONTROL_CT_SC_LIST_MULTIPLE = 0x01000000L +MIXERCONTROL_CT_UNITS_MASK = 0x00FF0000L +MIXERCONTROL_CT_UNITS_CUSTOM = 0x00000000L +MIXERCONTROL_CT_UNITS_BOOLEAN = 0x00010000L +MIXERCONTROL_CT_UNITS_SIGNED = 0x00020000L +MIXERCONTROL_CT_UNITS_UNSIGNED = 0x00030000L +MIXERCONTROL_CT_UNITS_DECIBELS = 0x00040000L +MIXERCONTROL_CT_UNITS_PERCENT = 0x00050000L +MIXERCONTROL_CONTROLTYPE_CUSTOM = (MIXERCONTROL_CT_CLASS_CUSTOM | MIXERCONTROL_CT_UNITS_CUSTOM) +MIXERCONTROL_CONTROLTYPE_BOOLEANMETER = (MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_BOOLEAN) +MIXERCONTROL_CONTROLTYPE_SIGNEDMETER = (MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_SIGNED) +MIXERCONTROL_CONTROLTYPE_PEAKMETER = (MIXERCONTROL_CONTROLTYPE_SIGNEDMETER + 1) +MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER = (MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_UNSIGNED) +MIXERCONTROL_CONTROLTYPE_BOOLEAN = (MIXERCONTROL_CT_CLASS_SWITCH | MIXERCONTROL_CT_SC_SWITCH_BOOLEAN | MIXERCONTROL_CT_UNITS_BOOLEAN) +MIXERCONTROL_CONTROLTYPE_ONOFF = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 1) +MIXERCONTROL_CONTROLTYPE_MUTE = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 2) +MIXERCONTROL_CONTROLTYPE_MONO = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 3) +MIXERCONTROL_CONTROLTYPE_LOUDNESS = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 4) +MIXERCONTROL_CONTROLTYPE_STEREOENH = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 5) +MIXERCONTROL_CONTROLTYPE_BUTTON = (MIXERCONTROL_CT_CLASS_SWITCH | MIXERCONTROL_CT_SC_SWITCH_BUTTON | MIXERCONTROL_CT_UNITS_BOOLEAN) +MIXERCONTROL_CONTROLTYPE_DECIBELS = (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_DECIBELS) +MIXERCONTROL_CONTROLTYPE_SIGNED = (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_SIGNED) +MIXERCONTROL_CONTROLTYPE_UNSIGNED = (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_UNSIGNED) +MIXERCONTROL_CONTROLTYPE_PERCENT = (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_PERCENT) +MIXERCONTROL_CONTROLTYPE_SLIDER = (MIXERCONTROL_CT_CLASS_SLIDER | MIXERCONTROL_CT_UNITS_SIGNED) +MIXERCONTROL_CONTROLTYPE_PAN = (MIXERCONTROL_CONTROLTYPE_SLIDER + 1) +MIXERCONTROL_CONTROLTYPE_QSOUNDPAN = (MIXERCONTROL_CONTROLTYPE_SLIDER + 2) +MIXERCONTROL_CONTROLTYPE_FADER = (MIXERCONTROL_CT_CLASS_FADER | MIXERCONTROL_CT_UNITS_UNSIGNED) +MIXERCONTROL_CONTROLTYPE_VOLUME = (MIXERCONTROL_CONTROLTYPE_FADER + 1) +MIXERCONTROL_CONTROLTYPE_BASS = (MIXERCONTROL_CONTROLTYPE_FADER + 2) +MIXERCONTROL_CONTROLTYPE_TREBLE = (MIXERCONTROL_CONTROLTYPE_FADER + 3) +MIXERCONTROL_CONTROLTYPE_EQUALIZER = (MIXERCONTROL_CONTROLTYPE_FADER + 4) +MIXERCONTROL_CONTROLTYPE_SINGLESELECT = (MIXERCONTROL_CT_CLASS_LIST | MIXERCONTROL_CT_SC_LIST_SINGLE | MIXERCONTROL_CT_UNITS_BOOLEAN) +MIXERCONTROL_CONTROLTYPE_MUX = (MIXERCONTROL_CONTROLTYPE_SINGLESELECT + 1) +MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT = (MIXERCONTROL_CT_CLASS_LIST | MIXERCONTROL_CT_SC_LIST_MULTIPLE | MIXERCONTROL_CT_UNITS_BOOLEAN) +MIXERCONTROL_CONTROLTYPE_MIXER = (MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT + 1) +MIXERCONTROL_CONTROLTYPE_MICROTIME = (MIXERCONTROL_CT_CLASS_TIME | MIXERCONTROL_CT_SC_TIME_MICROSECS | MIXERCONTROL_CT_UNITS_UNSIGNED) +MIXERCONTROL_CONTROLTYPE_MILLITIME = (MIXERCONTROL_CT_CLASS_TIME | MIXERCONTROL_CT_SC_TIME_MILLISECS | MIXERCONTROL_CT_UNITS_UNSIGNED) +MIXER_GETLINECONTROLSF_ALL = 0x00000000L +MIXER_GETLINECONTROLSF_ONEBYID = 0x00000001L +MIXER_GETLINECONTROLSF_ONEBYTYPE = 0x00000002L +MIXER_GETLINECONTROLSF_QUERYMASK = 0x0000000FL +MIXER_GETCONTROLDETAILSF_VALUE = 0x00000000L +MIXER_GETCONTROLDETAILSF_LISTTEXT = 0x00000001L +MIXER_GETCONTROLDETAILSF_QUERYMASK = 0x0000000FL +MIXER_SETCONTROLDETAILSF_VALUE = 0x00000000L +MIXER_SETCONTROLDETAILSF_CUSTOM = 0x00000001L +MIXER_SETCONTROLDETAILSF_QUERYMASK = 0x0000000FL +TIMERR_NOERROR = (0) +TIMERR_NOCANDO = (TIMERR_BASE+1) +TIMERR_STRUCT = (TIMERR_BASE+33) +TIME_ONESHOT = 0x0000 +TIME_PERIODIC = 0x0001 +TIME_CALLBACK_FUNCTION = 0x0000 +TIME_CALLBACK_EVENT_SET = 0x0010 +TIME_CALLBACK_EVENT_PULSE = 0x0020 +JOYERR_NOERROR = (0) +JOYERR_PARMS = (JOYERR_BASE+5) +JOYERR_NOCANDO = (JOYERR_BASE+6) +JOYERR_UNPLUGGED = (JOYERR_BASE+7) +JOY_BUTTON1 = 0x0001 +JOY_BUTTON2 = 0x0002 +JOY_BUTTON3 = 0x0004 +JOY_BUTTON4 = 0x0008 +JOY_BUTTON1CHG = 0x0100 +JOY_BUTTON2CHG = 0x0200 +JOY_BUTTON3CHG = 0x0400 +JOY_BUTTON4CHG = 0x0800 +JOY_BUTTON5 = 0x00000010l +JOY_BUTTON6 = 0x00000020l +JOY_BUTTON7 = 0x00000040l +JOY_BUTTON8 = 0x00000080l +JOY_BUTTON9 = 0x00000100l +JOY_BUTTON10 = 0x00000200l +JOY_BUTTON11 = 0x00000400l +JOY_BUTTON12 = 0x00000800l +JOY_BUTTON13 = 0x00001000l +JOY_BUTTON14 = 0x00002000l +JOY_BUTTON15 = 0x00004000l +JOY_BUTTON16 = 0x00008000l +JOY_BUTTON17 = 0x00010000l +JOY_BUTTON18 = 0x00020000l +JOY_BUTTON19 = 0x00040000l +JOY_BUTTON20 = 0x00080000l +JOY_BUTTON21 = 0x00100000l +JOY_BUTTON22 = 0x00200000l +JOY_BUTTON23 = 0x00400000l +JOY_BUTTON24 = 0x00800000l +JOY_BUTTON25 = 0x01000000l +JOY_BUTTON26 = 0x02000000l +JOY_BUTTON27 = 0x04000000l +JOY_BUTTON28 = 0x08000000l +JOY_BUTTON29 = 0x10000000l +JOY_BUTTON30 = 0x20000000l +JOY_BUTTON31 = 0x40000000l +JOY_BUTTON32 = 0x80000000l +JOY_POVFORWARD = 0 +JOY_POVRIGHT = 9000 +JOY_POVBACKWARD = 18000 +JOY_POVLEFT = 27000 +JOY_RETURNX = 0x00000001l +JOY_RETURNY = 0x00000002l +JOY_RETURNZ = 0x00000004l +JOY_RETURNR = 0x00000008l +JOY_RETURNU = 0x00000010l +JOY_RETURNV = 0x00000020l +JOY_RETURNPOV = 0x00000040l +JOY_RETURNBUTTONS = 0x00000080l +JOY_RETURNRAWDATA = 0x00000100l +JOY_RETURNPOVCTS = 0x00000200l +JOY_RETURNCENTERED = 0x00000400l +JOY_USEDEADZONE = 0x00000800l +JOY_RETURNALL = (JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ | \ + JOY_RETURNR | JOY_RETURNU | JOY_RETURNV | \ + JOY_RETURNPOV | JOY_RETURNBUTTONS) +JOY_CAL_READALWAYS = 0x00010000l +JOY_CAL_READXYONLY = 0x00020000l +JOY_CAL_READ3 = 0x00040000l +JOY_CAL_READ4 = 0x00080000l +JOY_CAL_READXONLY = 0x00100000l +JOY_CAL_READYONLY = 0x00200000l +JOY_CAL_READ5 = 0x00400000l +JOY_CAL_READ6 = 0x00800000l +JOY_CAL_READZONLY = 0x01000000l +JOY_CAL_READRONLY = 0x02000000l +JOY_CAL_READUONLY = 0x04000000l +JOY_CAL_READVONLY = 0x08000000l +JOYSTICKID1 = 0 +JOYSTICKID2 = 1 +JOYCAPS_HASZ = 0x0001 +JOYCAPS_HASR = 0x0002 +JOYCAPS_HASU = 0x0004 +JOYCAPS_HASV = 0x0008 +JOYCAPS_HASPOV = 0x0010 +JOYCAPS_POV4DIR = 0x0020 +JOYCAPS_POVCTS = 0x0040 +MMIOERR_BASE = 256 +MMIOERR_FILENOTFOUND = (MMIOERR_BASE + 1) +MMIOERR_OUTOFMEMORY = (MMIOERR_BASE + 2) +MMIOERR_CANNOTOPEN = (MMIOERR_BASE + 3) +MMIOERR_CANNOTCLOSE = (MMIOERR_BASE + 4) +MMIOERR_CANNOTREAD = (MMIOERR_BASE + 5) +MMIOERR_CANNOTWRITE = (MMIOERR_BASE + 6) +MMIOERR_CANNOTSEEK = (MMIOERR_BASE + 7) +MMIOERR_CANNOTEXPAND = (MMIOERR_BASE + 8) +MMIOERR_CHUNKNOTFOUND = (MMIOERR_BASE + 9) +MMIOERR_UNBUFFERED = (MMIOERR_BASE + 10) +MMIOERR_PATHNOTFOUND = (MMIOERR_BASE + 11) +MMIOERR_ACCESSDENIED = (MMIOERR_BASE + 12) +MMIOERR_SHARINGVIOLATION = (MMIOERR_BASE + 13) +MMIOERR_NETWORKERROR = (MMIOERR_BASE + 14) +MMIOERR_TOOMANYOPENFILES = (MMIOERR_BASE + 15) +MMIOERR_INVALIDFILE = (MMIOERR_BASE + 16) +CFSEPCHAR = ord('+') +MMIO_RWMODE = 0x00000003 +MMIO_SHAREMODE = 0x00000070 +MMIO_CREATE = 0x00001000 +MMIO_PARSE = 0x00000100 +MMIO_DELETE = 0x00000200 +MMIO_EXIST = 0x00004000 +MMIO_ALLOCBUF = 0x00010000 +MMIO_GETTEMP = 0x00020000 +MMIO_DIRTY = 0x10000000 +MMIO_READ = 0x00000000 +MMIO_WRITE = 0x00000001 +MMIO_READWRITE = 0x00000002 +MMIO_COMPAT = 0x00000000 +MMIO_EXCLUSIVE = 0x00000010 +MMIO_DENYWRITE = 0x00000020 +MMIO_DENYREAD = 0x00000030 +MMIO_DENYNONE = 0x00000040 +MMIO_FHOPEN = 0x0010 +MMIO_EMPTYBUF = 0x0010 +MMIO_TOUPPER = 0x0010 +MMIO_INSTALLPROC = 0x00010000 +MMIO_GLOBALPROC = 0x10000000 +MMIO_REMOVEPROC = 0x00020000 +MMIO_UNICODEPROC = 0x01000000 +MMIO_FINDPROC = 0x00040000 +MMIO_FINDCHUNK = 0x0010 +MMIO_FINDRIFF = 0x0020 +MMIO_FINDLIST = 0x0040 +MMIO_CREATERIFF = 0x0020 +MMIO_CREATELIST = 0x0040 +MMIOM_READ = MMIO_READ +MMIOM_WRITE = MMIO_WRITE +MMIOM_SEEK = 2 +MMIOM_OPEN = 3 +MMIOM_CLOSE = 4 +MMIOM_WRITEFLUSH = 5 +MMIOM_RENAME = 6 +MMIOM_USER = 0x8000 +SEEK_SET = 0 +SEEK_CUR = 1 +SEEK_END = 2 +MMIO_DEFAULTBUFFER = 8192 +MCIERR_INVALID_DEVICE_ID = (MCIERR_BASE + 1) +MCIERR_UNRECOGNIZED_KEYWORD = (MCIERR_BASE + 3) +MCIERR_UNRECOGNIZED_COMMAND = (MCIERR_BASE + 5) +MCIERR_HARDWARE = (MCIERR_BASE + 6) +MCIERR_INVALID_DEVICE_NAME = (MCIERR_BASE + 7) +MCIERR_OUT_OF_MEMORY = (MCIERR_BASE + 8) +MCIERR_DEVICE_OPEN = (MCIERR_BASE + 9) +MCIERR_CANNOT_LOAD_DRIVER = (MCIERR_BASE + 10) +MCIERR_MISSING_COMMAND_STRING = (MCIERR_BASE + 11) +MCIERR_PARAM_OVERFLOW = (MCIERR_BASE + 12) +MCIERR_MISSING_STRING_ARGUMENT = (MCIERR_BASE + 13) +MCIERR_BAD_INTEGER = (MCIERR_BASE + 14) +MCIERR_PARSER_INTERNAL = (MCIERR_BASE + 15) +MCIERR_DRIVER_INTERNAL = (MCIERR_BASE + 16) +MCIERR_MISSING_PARAMETER = (MCIERR_BASE + 17) +MCIERR_UNSUPPORTED_FUNCTION = (MCIERR_BASE + 18) +MCIERR_FILE_NOT_FOUND = (MCIERR_BASE + 19) +MCIERR_DEVICE_NOT_READY = (MCIERR_BASE + 20) +MCIERR_INTERNAL = (MCIERR_BASE + 21) +MCIERR_DRIVER = (MCIERR_BASE + 22) +MCIERR_CANNOT_USE_ALL = (MCIERR_BASE + 23) +MCIERR_MULTIPLE = (MCIERR_BASE + 24) +MCIERR_EXTENSION_NOT_FOUND = (MCIERR_BASE + 25) +MCIERR_OUTOFRANGE = (MCIERR_BASE + 26) +MCIERR_FLAGS_NOT_COMPATIBLE = (MCIERR_BASE + 28) +MCIERR_FILE_NOT_SAVED = (MCIERR_BASE + 30) +MCIERR_DEVICE_TYPE_REQUIRED = (MCIERR_BASE + 31) +MCIERR_DEVICE_LOCKED = (MCIERR_BASE + 32) +MCIERR_DUPLICATE_ALIAS = (MCIERR_BASE + 33) +MCIERR_BAD_CONSTANT = (MCIERR_BASE + 34) +MCIERR_MUST_USE_SHAREABLE = (MCIERR_BASE + 35) +MCIERR_MISSING_DEVICE_NAME = (MCIERR_BASE + 36) +MCIERR_BAD_TIME_FORMAT = (MCIERR_BASE + 37) +MCIERR_NO_CLOSING_QUOTE = (MCIERR_BASE + 38) +MCIERR_DUPLICATE_FLAGS = (MCIERR_BASE + 39) +MCIERR_INVALID_FILE = (MCIERR_BASE + 40) +MCIERR_NULL_PARAMETER_BLOCK = (MCIERR_BASE + 41) +MCIERR_UNNAMED_RESOURCE = (MCIERR_BASE + 42) +MCIERR_NEW_REQUIRES_ALIAS = (MCIERR_BASE + 43) +MCIERR_NOTIFY_ON_AUTO_OPEN = (MCIERR_BASE + 44) +MCIERR_NO_ELEMENT_ALLOWED = (MCIERR_BASE + 45) +MCIERR_NONAPPLICABLE_FUNCTION = (MCIERR_BASE + 46) +MCIERR_ILLEGAL_FOR_AUTO_OPEN = (MCIERR_BASE + 47) +MCIERR_FILENAME_REQUIRED = (MCIERR_BASE + 48) +MCIERR_EXTRA_CHARACTERS = (MCIERR_BASE + 49) +MCIERR_DEVICE_NOT_INSTALLED = (MCIERR_BASE + 50) +MCIERR_GET_CD = (MCIERR_BASE + 51) +MCIERR_SET_CD = (MCIERR_BASE + 52) +MCIERR_SET_DRIVE = (MCIERR_BASE + 53) +MCIERR_DEVICE_LENGTH = (MCIERR_BASE + 54) +MCIERR_DEVICE_ORD_LENGTH = (MCIERR_BASE + 55) +MCIERR_NO_INTEGER = (MCIERR_BASE + 56) +MCIERR_WAVE_OUTPUTSINUSE = (MCIERR_BASE + 64) +MCIERR_WAVE_SETOUTPUTINUSE = (MCIERR_BASE + 65) +MCIERR_WAVE_INPUTSINUSE = (MCIERR_BASE + 66) +MCIERR_WAVE_SETINPUTINUSE = (MCIERR_BASE + 67) +MCIERR_WAVE_OUTPUTUNSPECIFIED = (MCIERR_BASE + 68) +MCIERR_WAVE_INPUTUNSPECIFIED = (MCIERR_BASE + 69) +MCIERR_WAVE_OUTPUTSUNSUITABLE = (MCIERR_BASE + 70) +MCIERR_WAVE_SETOUTPUTUNSUITABLE = (MCIERR_BASE + 71) +MCIERR_WAVE_INPUTSUNSUITABLE = (MCIERR_BASE + 72) +MCIERR_WAVE_SETINPUTUNSUITABLE = (MCIERR_BASE + 73) +MCIERR_SEQ_DIV_INCOMPATIBLE = (MCIERR_BASE + 80) +MCIERR_SEQ_PORT_INUSE = (MCIERR_BASE + 81) +MCIERR_SEQ_PORT_NONEXISTENT = (MCIERR_BASE + 82) +MCIERR_SEQ_PORT_MAPNODEVICE = (MCIERR_BASE + 83) +MCIERR_SEQ_PORT_MISCERROR = (MCIERR_BASE + 84) +MCIERR_SEQ_TIMER = (MCIERR_BASE + 85) +MCIERR_SEQ_PORTUNSPECIFIED = (MCIERR_BASE + 86) +MCIERR_SEQ_NOMIDIPRESENT = (MCIERR_BASE + 87) +MCIERR_NO_WINDOW = (MCIERR_BASE + 90) +MCIERR_CREATEWINDOW = (MCIERR_BASE + 91) +MCIERR_FILE_READ = (MCIERR_BASE + 92) +MCIERR_FILE_WRITE = (MCIERR_BASE + 93) +MCIERR_NO_IDENTITY = (MCIERR_BASE + 94) +MCIERR_CUSTOM_DRIVER_BASE = (MCIERR_BASE + 256) +MCI_FIRST = DRV_MCI_FIRST +MCI_OPEN = 0x0803 +MCI_CLOSE = 0x0804 +MCI_ESCAPE = 0x0805 +MCI_PLAY = 0x0806 +MCI_SEEK = 0x0807 +MCI_STOP = 0x0808 +MCI_PAUSE = 0x0809 +MCI_INFO = 0x080A +MCI_GETDEVCAPS = 0x080B +MCI_SPIN = 0x080C +MCI_SET = 0x080D +MCI_STEP = 0x080E +MCI_RECORD = 0x080F +MCI_SYSINFO = 0x0810 +MCI_BREAK = 0x0811 +MCI_SAVE = 0x0813 +MCI_STATUS = 0x0814 +MCI_CUE = 0x0830 +MCI_REALIZE = 0x0840 +MCI_WINDOW = 0x0841 +MCI_PUT = 0x0842 +MCI_WHERE = 0x0843 +MCI_FREEZE = 0x0844 +MCI_UNFREEZE = 0x0845 +MCI_LOAD = 0x0850 +MCI_CUT = 0x0851 +MCI_COPY = 0x0852 +MCI_PASTE = 0x0853 +MCI_UPDATE = 0x0854 +MCI_RESUME = 0x0855 +MCI_DELETE = 0x0856 +MCI_USER_MESSAGES = (DRV_MCI_FIRST + 0x400) +MCI_LAST = 0x0FFF +MCI_DEVTYPE_VCR = 513 +MCI_DEVTYPE_VIDEODISC = 514 +MCI_DEVTYPE_OVERLAY = 515 +MCI_DEVTYPE_CD_AUDIO = 516 +MCI_DEVTYPE_DAT = 517 +MCI_DEVTYPE_SCANNER = 518 +MCI_DEVTYPE_ANIMATION = 519 +MCI_DEVTYPE_DIGITAL_VIDEO = 520 +MCI_DEVTYPE_OTHER = 521 +MCI_DEVTYPE_WAVEFORM_AUDIO = 522 +MCI_DEVTYPE_SEQUENCER = 523 +MCI_DEVTYPE_FIRST = MCI_DEVTYPE_VCR +MCI_DEVTYPE_LAST = MCI_DEVTYPE_SEQUENCER +MCI_DEVTYPE_FIRST_USER = 0x1000 +MCI_MODE_NOT_READY = (MCI_STRING_OFFSET + 12) +MCI_MODE_STOP = (MCI_STRING_OFFSET + 13) +MCI_MODE_PLAY = (MCI_STRING_OFFSET + 14) +MCI_MODE_RECORD = (MCI_STRING_OFFSET + 15) +MCI_MODE_SEEK = (MCI_STRING_OFFSET + 16) +MCI_MODE_PAUSE = (MCI_STRING_OFFSET + 17) +MCI_MODE_OPEN = (MCI_STRING_OFFSET + 18) +MCI_FORMAT_MILLISECONDS = 0 +MCI_FORMAT_HMS = 1 +MCI_FORMAT_MSF = 2 +MCI_FORMAT_FRAMES = 3 +MCI_FORMAT_SMPTE_24 = 4 +MCI_FORMAT_SMPTE_25 = 5 +MCI_FORMAT_SMPTE_30 = 6 +MCI_FORMAT_SMPTE_30DROP = 7 +MCI_FORMAT_BYTES = 8 +MCI_FORMAT_SAMPLES = 9 +MCI_FORMAT_TMSF = 10 +def MCI_MSF_MINUTE(msf): return ((BYTE)(msf)) + +def MCI_MSF_SECOND(msf): return ((BYTE)(((WORD)(msf)) >> 8)) + +def MCI_MSF_FRAME(msf): return ((BYTE)((msf)>>16)) + +def MCI_TMSF_TRACK(tmsf): return ((BYTE)(tmsf)) + +def MCI_TMSF_MINUTE(tmsf): return ((BYTE)(((WORD)(tmsf)) >> 8)) + +def MCI_TMSF_SECOND(tmsf): return ((BYTE)((tmsf)>>16)) + +def MCI_TMSF_FRAME(tmsf): return ((BYTE)((tmsf)>>24)) + +def MCI_HMS_HOUR(hms): return ((BYTE)(hms)) + +def MCI_HMS_MINUTE(hms): return ((BYTE)(((WORD)(hms)) >> 8)) + +def MCI_HMS_SECOND(hms): return ((BYTE)((hms)>>16)) + +MCI_NOTIFY_SUCCESSFUL = 0x0001 +MCI_NOTIFY_SUPERSEDED = 0x0002 +MCI_NOTIFY_ABORTED = 0x0004 +MCI_NOTIFY_FAILURE = 0x0008 +MCI_NOTIFY = 0x00000001L +MCI_WAIT = 0x00000002L +MCI_FROM = 0x00000004L +MCI_TO = 0x00000008L +MCI_TRACK = 0x00000010L +MCI_OPEN_SHAREABLE = 0x00000100L +MCI_OPEN_ELEMENT = 0x00000200L +MCI_OPEN_ALIAS = 0x00000400L +MCI_OPEN_ELEMENT_ID = 0x00000800L +MCI_OPEN_TYPE_ID = 0x00001000L +MCI_OPEN_TYPE = 0x00002000L +MCI_SEEK_TO_START = 0x00000100L +MCI_SEEK_TO_END = 0x00000200L +MCI_STATUS_ITEM = 0x00000100L +MCI_STATUS_START = 0x00000200L +MCI_STATUS_LENGTH = 0x00000001L +MCI_STATUS_POSITION = 0x00000002L +MCI_STATUS_NUMBER_OF_TRACKS = 0x00000003L +MCI_STATUS_MODE = 0x00000004L +MCI_STATUS_MEDIA_PRESENT = 0x00000005L +MCI_STATUS_TIME_FORMAT = 0x00000006L +MCI_STATUS_READY = 0x00000007L +MCI_STATUS_CURRENT_TRACK = 0x00000008L +MCI_INFO_PRODUCT = 0x00000100L +MCI_INFO_FILE = 0x00000200L +MCI_INFO_MEDIA_UPC = 0x00000400L +MCI_INFO_MEDIA_IDENTITY = 0x00000800L +MCI_INFO_NAME = 0x00001000L +MCI_INFO_COPYRIGHT = 0x00002000L +MCI_GETDEVCAPS_ITEM = 0x00000100L +MCI_GETDEVCAPS_CAN_RECORD = 0x00000001L +MCI_GETDEVCAPS_HAS_AUDIO = 0x00000002L +MCI_GETDEVCAPS_HAS_VIDEO = 0x00000003L +MCI_GETDEVCAPS_DEVICE_TYPE = 0x00000004L +MCI_GETDEVCAPS_USES_FILES = 0x00000005L +MCI_GETDEVCAPS_COMPOUND_DEVICE = 0x00000006L +MCI_GETDEVCAPS_CAN_EJECT = 0x00000007L +MCI_GETDEVCAPS_CAN_PLAY = 0x00000008L +MCI_GETDEVCAPS_CAN_SAVE = 0x00000009L +MCI_SYSINFO_QUANTITY = 0x00000100L +MCI_SYSINFO_OPEN = 0x00000200L +MCI_SYSINFO_NAME = 0x00000400L +MCI_SYSINFO_INSTALLNAME = 0x00000800L +MCI_SET_DOOR_OPEN = 0x00000100L +MCI_SET_DOOR_CLOSED = 0x00000200L +MCI_SET_TIME_FORMAT = 0x00000400L +MCI_SET_AUDIO = 0x00000800L +MCI_SET_VIDEO = 0x00001000L +MCI_SET_ON = 0x00002000L +MCI_SET_OFF = 0x00004000L +MCI_SET_AUDIO_ALL = 0x00000000L +MCI_SET_AUDIO_LEFT = 0x00000001L +MCI_SET_AUDIO_RIGHT = 0x00000002L +MCI_BREAK_KEY = 0x00000100L +MCI_BREAK_HWND = 0x00000200L +MCI_BREAK_OFF = 0x00000400L +MCI_RECORD_INSERT = 0x00000100L +MCI_RECORD_OVERWRITE = 0x00000200L +MCI_SAVE_FILE = 0x00000100L +MCI_LOAD_FILE = 0x00000100L +MCI_VD_MODE_PARK = (MCI_VD_OFFSET + 1) +MCI_VD_MEDIA_CLV = (MCI_VD_OFFSET + 2) +MCI_VD_MEDIA_CAV = (MCI_VD_OFFSET + 3) +MCI_VD_MEDIA_OTHER = (MCI_VD_OFFSET + 4) +MCI_VD_FORMAT_TRACK = 0x4001 +MCI_VD_PLAY_REVERSE = 0x00010000L +MCI_VD_PLAY_FAST = 0x00020000L +MCI_VD_PLAY_SPEED = 0x00040000L +MCI_VD_PLAY_SCAN = 0x00080000L +MCI_VD_PLAY_SLOW = 0x00100000L +MCI_VD_SEEK_REVERSE = 0x00010000L +MCI_VD_STATUS_SPEED = 0x00004002L +MCI_VD_STATUS_FORWARD = 0x00004003L +MCI_VD_STATUS_MEDIA_TYPE = 0x00004004L +MCI_VD_STATUS_SIDE = 0x00004005L +MCI_VD_STATUS_DISC_SIZE = 0x00004006L +MCI_VD_GETDEVCAPS_CLV = 0x00010000L +MCI_VD_GETDEVCAPS_CAV = 0x00020000L +MCI_VD_SPIN_UP = 0x00010000L +MCI_VD_SPIN_DOWN = 0x00020000L +MCI_VD_GETDEVCAPS_CAN_REVERSE = 0x00004002L +MCI_VD_GETDEVCAPS_FAST_RATE = 0x00004003L +MCI_VD_GETDEVCAPS_SLOW_RATE = 0x00004004L +MCI_VD_GETDEVCAPS_NORMAL_RATE = 0x00004005L +MCI_VD_STEP_FRAMES = 0x00010000L +MCI_VD_STEP_REVERSE = 0x00020000L +MCI_VD_ESCAPE_STRING = 0x00000100L +MCI_CDA_STATUS_TYPE_TRACK = 0x00004001L +MCI_CDA_TRACK_AUDIO = (MCI_CD_OFFSET + 0) +MCI_CDA_TRACK_OTHER = (MCI_CD_OFFSET + 1) +MCI_WAVE_PCM = (MCI_WAVE_OFFSET + 0) +MCI_WAVE_MAPPER = (MCI_WAVE_OFFSET + 1) +MCI_WAVE_OPEN_BUFFER = 0x00010000L +MCI_WAVE_SET_FORMATTAG = 0x00010000L +MCI_WAVE_SET_CHANNELS = 0x00020000L +MCI_WAVE_SET_SAMPLESPERSEC = 0x00040000L +MCI_WAVE_SET_AVGBYTESPERSEC = 0x00080000L +MCI_WAVE_SET_BLOCKALIGN = 0x00100000L +MCI_WAVE_SET_BITSPERSAMPLE = 0x00200000L +MCI_WAVE_INPUT = 0x00400000L +MCI_WAVE_OUTPUT = 0x00800000L +MCI_WAVE_STATUS_FORMATTAG = 0x00004001L +MCI_WAVE_STATUS_CHANNELS = 0x00004002L +MCI_WAVE_STATUS_SAMPLESPERSEC = 0x00004003L +MCI_WAVE_STATUS_AVGBYTESPERSEC = 0x00004004L +MCI_WAVE_STATUS_BLOCKALIGN = 0x00004005L +MCI_WAVE_STATUS_BITSPERSAMPLE = 0x00004006L +MCI_WAVE_STATUS_LEVEL = 0x00004007L +MCI_WAVE_SET_ANYINPUT = 0x04000000L +MCI_WAVE_SET_ANYOUTPUT = 0x08000000L +MCI_WAVE_GETDEVCAPS_INPUTS = 0x00004001L +MCI_WAVE_GETDEVCAPS_OUTPUTS = 0x00004002L +MCI_SEQ_DIV_PPQN = (0 + MCI_SEQ_OFFSET) +MCI_SEQ_DIV_SMPTE_24 = (1 + MCI_SEQ_OFFSET) +MCI_SEQ_DIV_SMPTE_25 = (2 + MCI_SEQ_OFFSET) +MCI_SEQ_DIV_SMPTE_30DROP = (3 + MCI_SEQ_OFFSET) +MCI_SEQ_DIV_SMPTE_30 = (4 + MCI_SEQ_OFFSET) +MCI_SEQ_FORMAT_SONGPTR = 0x4001 +MCI_SEQ_FILE = 0x4002 +MCI_SEQ_MIDI = 0x4003 +MCI_SEQ_SMPTE = 0x4004 +MCI_SEQ_NONE = 65533 +MCI_SEQ_MAPPER = 65535 +MCI_SEQ_STATUS_TEMPO = 0x00004002L +MCI_SEQ_STATUS_PORT = 0x00004003L +MCI_SEQ_STATUS_SLAVE = 0x00004007L +MCI_SEQ_STATUS_MASTER = 0x00004008L +MCI_SEQ_STATUS_OFFSET = 0x00004009L +MCI_SEQ_STATUS_DIVTYPE = 0x0000400AL +MCI_SEQ_STATUS_NAME = 0x0000400BL +MCI_SEQ_STATUS_COPYRIGHT = 0x0000400CL +MCI_SEQ_SET_TEMPO = 0x00010000L +MCI_SEQ_SET_PORT = 0x00020000L +MCI_SEQ_SET_SLAVE = 0x00040000L +MCI_SEQ_SET_MASTER = 0x00080000L +MCI_SEQ_SET_OFFSET = 0x01000000L +MCI_ANIM_OPEN_WS = 0x00010000L +MCI_ANIM_OPEN_PARENT = 0x00020000L +MCI_ANIM_OPEN_NOSTATIC = 0x00040000L +MCI_ANIM_PLAY_SPEED = 0x00010000L +MCI_ANIM_PLAY_REVERSE = 0x00020000L +MCI_ANIM_PLAY_FAST = 0x00040000L +MCI_ANIM_PLAY_SLOW = 0x00080000L +MCI_ANIM_PLAY_SCAN = 0x00100000L +MCI_ANIM_STEP_REVERSE = 0x00010000L +MCI_ANIM_STEP_FRAMES = 0x00020000L +MCI_ANIM_STATUS_SPEED = 0x00004001L +MCI_ANIM_STATUS_FORWARD = 0x00004002L +MCI_ANIM_STATUS_HWND = 0x00004003L +MCI_ANIM_STATUS_HPAL = 0x00004004L +MCI_ANIM_STATUS_STRETCH = 0x00004005L +MCI_ANIM_INFO_TEXT = 0x00010000L +MCI_ANIM_GETDEVCAPS_CAN_REVERSE = 0x00004001L +MCI_ANIM_GETDEVCAPS_FAST_RATE = 0x00004002L +MCI_ANIM_GETDEVCAPS_SLOW_RATE = 0x00004003L +MCI_ANIM_GETDEVCAPS_NORMAL_RATE = 0x00004004L +MCI_ANIM_GETDEVCAPS_PALETTES = 0x00004006L +MCI_ANIM_GETDEVCAPS_CAN_STRETCH = 0x00004007L +MCI_ANIM_GETDEVCAPS_MAX_WINDOWS = 0x00004008L +MCI_ANIM_REALIZE_NORM = 0x00010000L +MCI_ANIM_REALIZE_BKGD = 0x00020000L +MCI_ANIM_WINDOW_HWND = 0x00010000L +MCI_ANIM_WINDOW_STATE = 0x00040000L +MCI_ANIM_WINDOW_TEXT = 0x00080000L +MCI_ANIM_WINDOW_ENABLE_STRETCH = 0x00100000L +MCI_ANIM_WINDOW_DISABLE_STRETCH = 0x00200000L +MCI_ANIM_WINDOW_DEFAULT = 0x00000000L +MCI_ANIM_RECT = 0x00010000L +MCI_ANIM_PUT_SOURCE = 0x00020000L +MCI_ANIM_PUT_DESTINATION = 0x00040000L +MCI_ANIM_WHERE_SOURCE = 0x00020000L +MCI_ANIM_WHERE_DESTINATION = 0x00040000L +MCI_ANIM_UPDATE_HDC = 0x00020000L +MCI_OVLY_OPEN_WS = 0x00010000L +MCI_OVLY_OPEN_PARENT = 0x00020000L +MCI_OVLY_STATUS_HWND = 0x00004001L +MCI_OVLY_STATUS_STRETCH = 0x00004002L +MCI_OVLY_INFO_TEXT = 0x00010000L +MCI_OVLY_GETDEVCAPS_CAN_STRETCH = 0x00004001L +MCI_OVLY_GETDEVCAPS_CAN_FREEZE = 0x00004002L +MCI_OVLY_GETDEVCAPS_MAX_WINDOWS = 0x00004003L +MCI_OVLY_WINDOW_HWND = 0x00010000L +MCI_OVLY_WINDOW_STATE = 0x00040000L +MCI_OVLY_WINDOW_TEXT = 0x00080000L +MCI_OVLY_WINDOW_ENABLE_STRETCH = 0x00100000L +MCI_OVLY_WINDOW_DISABLE_STRETCH = 0x00200000L +MCI_OVLY_WINDOW_DEFAULT = 0x00000000L +MCI_OVLY_RECT = 0x00010000L +MCI_OVLY_PUT_SOURCE = 0x00020000L +MCI_OVLY_PUT_DESTINATION = 0x00040000L +MCI_OVLY_PUT_FRAME = 0x00080000L +MCI_OVLY_PUT_VIDEO = 0x00100000L +MCI_OVLY_WHERE_SOURCE = 0x00020000L +MCI_OVLY_WHERE_DESTINATION = 0x00040000L +MCI_OVLY_WHERE_FRAME = 0x00080000L +MCI_OVLY_WHERE_VIDEO = 0x00100000L +SELECTDIB = 41 +def DIBINDEX(n): return MAKELONG((n),0x10FF) + diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/netbios.py b/thirdparty/python25/Lib/site-packages/win32/lib/netbios.py new file mode 100644 index 000000000..3a0773421 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/netbios.py @@ -0,0 +1,286 @@ +import win32wnet +import struct +import string + +# Constants generated by h2py from nb30.h +NCBNAMSZ = 16 +MAX_LANA = 254 +NAME_FLAGS_MASK = 0x87 +GROUP_NAME = 0x80 +UNIQUE_NAME = 0x00 +REGISTERING = 0x00 +REGISTERED = 0x04 +DEREGISTERED = 0x05 +DUPLICATE = 0x06 +DUPLICATE_DEREG = 0x07 +LISTEN_OUTSTANDING = 0x01 +CALL_PENDING = 0x02 +SESSION_ESTABLISHED = 0x03 +HANGUP_PENDING = 0x04 +HANGUP_COMPLETE = 0x05 +SESSION_ABORTED = 0x06 +ALL_TRANSPORTS = "M\0\0\0" +MS_NBF = "MNBF" +NCBCALL = 0x10 +NCBLISTEN = 0x11 +NCBHANGUP = 0x12 +NCBSEND = 0x14 +NCBRECV = 0x15 +NCBRECVANY = 0x16 +NCBCHAINSEND = 0x17 +NCBDGSEND = 0x20 +NCBDGRECV = 0x21 +NCBDGSENDBC = 0x22 +NCBDGRECVBC = 0x23 +NCBADDNAME = 0x30 +NCBDELNAME = 0x31 +NCBRESET = 0x32 +NCBASTAT = 0x33 +NCBSSTAT = 0x34 +NCBCANCEL = 0x35 +NCBADDGRNAME = 0x36 +NCBENUM = 0x37 +NCBUNLINK = 0x70 +NCBSENDNA = 0x71 +NCBCHAINSENDNA = 0x72 +NCBLANSTALERT = 0x73 +NCBACTION = 0x77 +NCBFINDNAME = 0x78 +NCBTRACE = 0x79 +ASYNCH = 0x80 +NRC_GOODRET = 0x00 +NRC_BUFLEN = 0x01 +NRC_ILLCMD = 0x03 +NRC_CMDTMO = 0x05 +NRC_INCOMP = 0x06 +NRC_BADDR = 0x07 +NRC_SNUMOUT = 0x08 +NRC_NORES = 0x09 +NRC_SCLOSED = 0x0a +NRC_CMDCAN = 0x0b +NRC_DUPNAME = 0x0d +NRC_NAMTFUL = 0x0e +NRC_ACTSES = 0x0f +NRC_LOCTFUL = 0x11 +NRC_REMTFUL = 0x12 +NRC_ILLNN = 0x13 +NRC_NOCALL = 0x14 +NRC_NOWILD = 0x15 +NRC_INUSE = 0x16 +NRC_NAMERR = 0x17 +NRC_SABORT = 0x18 +NRC_NAMCONF = 0x19 +NRC_IFBUSY = 0x21 +NRC_TOOMANY = 0x22 +NRC_BRIDGE = 0x23 +NRC_CANOCCR = 0x24 +NRC_CANCEL = 0x26 +NRC_DUPENV = 0x30 +NRC_ENVNOTDEF = 0x34 +NRC_OSRESNOTAV = 0x35 +NRC_MAXAPPS = 0x36 +NRC_NOSAPS = 0x37 +NRC_NORESOURCES = 0x38 +NRC_INVADDRESS = 0x39 +NRC_INVDDID = 0x3B +NRC_LOCKFAIL = 0x3C +NRC_OPENERR = 0x3f +NRC_SYSTEM = 0x40 +NRC_PENDING = 0xff + + +UCHAR = "B" +WORD = "H" +DWORD = "I" +USHORT = "H" +ULONG = "I" + +ADAPTER_STATUS_ITEMS = [ + ("6s", "adapter_address"), + (UCHAR, "rev_major"), + (UCHAR, "reserved0"), + (UCHAR, "adapter_type"), + (UCHAR, "rev_minor"), + (WORD, "duration"), + (WORD, "frmr_recv"), + (WORD, "frmr_xmit"), + + (WORD, "iframe_recv_err"), + + (WORD, "xmit_aborts"), + (DWORD, "xmit_success"), + (DWORD, "recv_success"), + + (WORD, "iframe_xmit_err"), + + (WORD, "recv_buff_unavail"), + (WORD, "t1_timeouts"), + (WORD, "ti_timeouts"), + (DWORD, "reserved1"), + (WORD, "free_ncbs"), + (WORD, "max_cfg_ncbs"), + (WORD, "max_ncbs"), + (WORD, "xmit_buf_unavail"), + (WORD, "max_dgram_size"), + (WORD, "pending_sess"), + (WORD, "max_cfg_sess"), + (WORD, "max_sess"), + (WORD, "max_sess_pkt_size"), + (WORD, "name_count"), +] + +NAME_BUFFER_ITEMS = [ + (str(NCBNAMSZ) + "s", "name"), + (UCHAR, "name_num"), + (UCHAR, "name_flags"), +] + +SESSION_HEADER_ITEMS = [ + (UCHAR, "sess_name"), + (UCHAR, "num_sess"), + (UCHAR, "rcv_dg_outstanding"), + (UCHAR, "rcv_any_outstanding"), +] + +SESSION_BUFFER_ITEMS = [ + (UCHAR, "lsn"), + (UCHAR, "state"), + (str(NCBNAMSZ)+"s", "local_name"), + (str(NCBNAMSZ)+"s", "remote_name"), + (UCHAR, "rcvs_outstanding"), + (UCHAR, "sends_outstanding"), +] + +LANA_ENUM_ITEMS = [ + ("B", "length"), # Number of valid entries in lana[] + (str(MAX_LANA+1) + "s", "lana"), +] + +FIND_NAME_HEADER_ITEMS = [ + (WORD, "node_count"), + (UCHAR, "reserved"), + (UCHAR, "unique_group"), +] + +FIND_NAME_BUFFER_ITEMS = [ + (UCHAR, "length"), + (UCHAR, "access_control"), + (UCHAR, "frame_control"), + ("6s", "destination_addr"), + ("6s", "source_addr"), + ("18s", "routing_info"), +] + +ACTION_HEADER_ITEMS = [ + (ULONG, "transport_id"), + (USHORT, "action_code"), + (USHORT, "reserved"), +] + +del UCHAR, WORD, DWORD, USHORT, ULONG + +NCB = win32wnet.NCB +def Netbios(ncb): + ob = ncb.Buffer + is_ours = hasattr(ob, "_pack") + if is_ours: + ob._pack() + try: + return win32wnet.Netbios(ncb) + finally: + if is_ours: + ob._unpack() + +class NCBStruct: + def __init__(self, items): + self._format = string.join(map(lambda item: item[0], items), "") + self._items = items + self._buffer_ = win32wnet.NCBBuffer(struct.calcsize(self._format)) + + for format, name in self._items: + if len(format)==1: + if format == 'c': + val = '\0' + else: + val = 0 + else: + l = int(format[:-1]) + val = '\0' * l + self.__dict__[name] = val + + def _pack(self): + vals = [] + for format, name in self._items: + try: + vals.append(self.__dict__[name]) + except KeyError: + vals.append(None) + + self._buffer_[:] = apply( struct.pack, (self._format,) + tuple(vals) ) + + def _unpack(self): + items = struct.unpack(self._format, self._buffer_) + assert len(items)==len(self._items), "unexpected number of items to unpack!" + for (format, name), val in map(None, self._items, items): + self.__dict__[name] = val + + def __setattr__(self, attr, val): + if not self.__dict__.has_key(attr) and attr[0]!='_': + for format, attr_name in self._items: + if attr==attr_name: + break + else: + raise AttributeError, attr + self.__dict__[attr] = val + +def ADAPTER_STATUS(): + return NCBStruct(ADAPTER_STATUS_ITEMS) + +def NAME_BUFFER(): + return NCBStruct(NAME_BUFFER_ITEMS) + +def SESSION_HEADER(): + return NCBStruct(SESSION_HEADER_ITEMS) + +def SESSION_BUFFER(): + return NCBStruct(SESSION_BUFFER_ITEMS) + +def LANA_ENUM(): + return NCBStruct(LANA_ENUM_ITEMS) + +def FIND_NAME_HEADER(): + return NCBStruct(FIND_NAME_HEADER_ITEMS) + +def FIND_NAME_BUFFER(): + return NCBStruct(FIND_NAME_BUFFER_ITEMS) + +def ACTION_HEADER(): + return NCBStruct(ACTION_HEADER_ITEMS) + +if __name__=='__main__': + # code ported from "HOWTO: Get the MAC Address for an Ethernet Adapter" + # MS KB ID: Q118623 + ncb = NCB() + ncb.Command = NCBENUM + la_enum = LANA_ENUM() + ncb.Buffer = la_enum + rc = Netbios(ncb) + if rc != 0: raise RuntimeError, "Unexpected result %d" % (rc,) + for i in range(la_enum.length): + ncb.Reset() + ncb.Command = NCBRESET + ncb.Lana_num = ord(la_enum.lana[i]) + rc = Netbios(ncb) + if rc != 0: raise RuntimeError, "Unexpected result %d" % (rc,) + ncb.Reset() + ncb.Command = NCBASTAT + ncb.Lana_num = ord(la_enum.lana[i]) + ncb.Callname = "* " + adapter = ADAPTER_STATUS() + ncb.Buffer = adapter + Netbios(ncb) + print "Adapter address:", + for ch in adapter.adapter_address: + print "%02x" % (ord(ch),) , + print + \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/ntsecuritycon.py b/thirdparty/python25/Lib/site-packages/win32/lib/ntsecuritycon.py new file mode 100644 index 000000000..a7ff19201 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/ntsecuritycon.py @@ -0,0 +1,609 @@ +# Hacked from winnt.h + +DELETE = (65536) +READ_CONTROL = (131072) +WRITE_DAC = (262144) +WRITE_OWNER = (524288) +SYNCHRONIZE = (1048576) +STANDARD_RIGHTS_REQUIRED = (983040) +STANDARD_RIGHTS_READ = (READ_CONTROL) +STANDARD_RIGHTS_WRITE = (READ_CONTROL) +STANDARD_RIGHTS_EXECUTE = (READ_CONTROL) +STANDARD_RIGHTS_ALL = (2031616) +SPECIFIC_RIGHTS_ALL = (65535) +ACCESS_SYSTEM_SECURITY = (16777216) +MAXIMUM_ALLOWED = (33554432) +GENERIC_READ = (-2147483648) +GENERIC_WRITE = (1073741824) +GENERIC_EXECUTE = (536870912) +GENERIC_ALL = (268435456) + +# file security permissions +FILE_READ_DATA= ( 1 ) +FILE_LIST_DIRECTORY= ( 1 ) +FILE_WRITE_DATA= ( 2 ) +FILE_ADD_FILE= ( 2 ) +FILE_APPEND_DATA= ( 4 ) +FILE_ADD_SUBDIRECTORY= ( 4 ) +FILE_CREATE_PIPE_INSTANCE= ( 4 ) +FILE_READ_EA= ( 8 ) +FILE_WRITE_EA= ( 16 ) +FILE_EXECUTE= ( 32 ) +FILE_TRAVERSE= ( 32 ) +FILE_DELETE_CHILD= ( 64 ) +FILE_READ_ATTRIBUTES= ( 128 ) +FILE_WRITE_ATTRIBUTES= ( 256 ) +FILE_ALL_ACCESS= (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 1023) +FILE_GENERIC_READ= (STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE) +FILE_GENERIC_WRITE= (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE) +FILE_GENERIC_EXECUTE= (STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE) + + +SECURITY_NULL_SID_AUTHORITY = (0,0,0,0,0,0) +SECURITY_WORLD_SID_AUTHORITY = (0,0,0,0,0,1) +SECURITY_LOCAL_SID_AUTHORITY = (0,0,0,0,0,2) +SECURITY_CREATOR_SID_AUTHORITY = (0,0,0,0,0,3) +SECURITY_NON_UNIQUE_AUTHORITY = (0,0,0,0,0,4) + +SECURITY_NULL_RID = 0 +SECURITY_WORLD_RID = 0 +SECURITY_LOCAL_RID = 0X00000000 + +SECURITY_CREATOR_OWNER_RID = 0 +SECURITY_CREATOR_GROUP_RID = 1 + +SECURITY_CREATOR_OWNER_SERVER_RID = 2 +SECURITY_CREATOR_GROUP_SERVER_RID = 3 + + +# NT well-known SIDs +SECURITY_NT_AUTHORITY = (0,0,0,0,0,5) + +SECURITY_DIALUP_RID = 1 +SECURITY_NETWORK_RID = 2 +SECURITY_BATCH_RID = 3 +SECURITY_INTERACTIVE_RID = 4 +SECURITY_SERVICE_RID = 6 +SECURITY_ANONYMOUS_LOGON_RID = 7 +SECURITY_PROXY_RID = 8 +SECURITY_SERVER_LOGON_RID = 9 + +SECURITY_LOGON_IDS_RID = 5 +SECURITY_LOGON_IDS_RID_COUNT = 3 + +SECURITY_LOCAL_SYSTEM_RID = 18 + +SECURITY_NT_NON_UNIQUE = 21 + +SECURITY_BUILTIN_DOMAIN_RID = 32 + +# well-known domain relative sub-authority values (RIDs)... +DOMAIN_USER_RID_ADMIN = 500 +DOMAIN_USER_RID_GUEST = 501 + + + +# well-known groups ... + +DOMAIN_GROUP_RID_ADMINS = 512 +DOMAIN_GROUP_RID_USERS = 513 +DOMAIN_GROUP_RID_GUESTS = 514 + + + + +# well-known aliases ... + +DOMAIN_ALIAS_RID_ADMINS = 544 +DOMAIN_ALIAS_RID_USERS = 545 +DOMAIN_ALIAS_RID_GUESTS = 546 +DOMAIN_ALIAS_RID_POWER_USERS = 547 + +DOMAIN_ALIAS_RID_ACCOUNT_OPS = 548 +DOMAIN_ALIAS_RID_SYSTEM_OPS = 549 +DOMAIN_ALIAS_RID_PRINT_OPS = 550 +DOMAIN_ALIAS_RID_BACKUP_OPS = 551 + +DOMAIN_ALIAS_RID_REPLICATOR = 552 + +SYSTEM_LUID = (999, 0) + +# Group attributes + +SE_GROUP_MANDATORY = 1 +SE_GROUP_ENABLED_BY_DEFAULT = 2 +SE_GROUP_ENABLED = 4 +SE_GROUP_OWNER = 8 +SE_GROUP_LOGON_ID = -1073741824 + + +# User attributes +# (None yet defined.) + +ACCESS_ALLOWED_ACE_TYPE = 0 +ACCESS_DENIED_ACE_TYPE = 1 +SYSTEM_AUDIT_ACE_TYPE = 2 +SYSTEM_ALARM_ACE_TYPE = 3 + + +# The following are the inherit flags that go into the AceFlags field +# of an Ace header. + +OBJECT_INHERIT_ACE = 1 +CONTAINER_INHERIT_ACE = 2 +NO_PROPAGATE_INHERIT_ACE = 4 +INHERIT_ONLY_ACE = 8 +VALID_INHERIT_FLAGS = 15 + + +SUCCESSFUL_ACCESS_ACE_FLAG = 64 +FAILED_ACCESS_ACE_FLAG = 128 + +SE_OWNER_DEFAULTED = 1 +SE_GROUP_DEFAULTED = 2 +SE_DACL_PRESENT = 4 +SE_DACL_DEFAULTED = 8 +SE_SACL_PRESENT = 16 +SE_SACL_DEFAULTED = 32 +SE_SELF_RELATIVE = 32768 + + +SE_PRIVILEGE_ENABLED_BY_DEFAULT = 1 +SE_PRIVILEGE_ENABLED = 2 +SE_PRIVILEGE_USED_FOR_ACCESS = -2147483648 + +PRIVILEGE_SET_ALL_NECESSARY = 1 + +# NT Defined Privileges + +SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege" +SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege" +SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege" +SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege" +SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege" +SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege" +SE_TCB_NAME = "SeTcbPrivilege" +SE_SECURITY_NAME = "SeSecurityPrivilege" +SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege" +SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege" +SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege" +SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege" +SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege" +SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege" +SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege" +SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege" +SE_BACKUP_NAME = "SeBackupPrivilege" +SE_RESTORE_NAME = "SeRestorePrivilege" +SE_SHUTDOWN_NAME = "SeShutdownPrivilege" +SE_DEBUG_NAME = "SeDebugPrivilege" +SE_AUDIT_NAME = "SeAuditPrivilege" +SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege" +SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege" +SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege" + + +# Enum SECURITY_IMPERSONATION_LEVEL: +SecurityAnonymous = 0 +SecurityIdentification = 1 +SecurityImpersonation = 2 +SecurityDelegation = 3 + +SECURITY_MAX_IMPERSONATION_LEVEL = SecurityDelegation + +DEFAULT_IMPERSONATION_LEVEL = SecurityImpersonation + +TOKEN_ASSIGN_PRIMARY = 1 +TOKEN_DUPLICATE = 2 +TOKEN_IMPERSONATE = 4 +TOKEN_QUERY = 8 +TOKEN_QUERY_SOURCE = 16 +TOKEN_ADJUST_PRIVILEGES = 32 +TOKEN_ADJUST_GROUPS = 64 +TOKEN_ADJUST_DEFAULT = 128 + +TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED |\ + TOKEN_ASSIGN_PRIMARY |\ + TOKEN_DUPLICATE |\ + TOKEN_IMPERSONATE |\ + TOKEN_QUERY |\ + TOKEN_QUERY_SOURCE |\ + TOKEN_ADJUST_PRIVILEGES |\ + TOKEN_ADJUST_GROUPS |\ + TOKEN_ADJUST_DEFAULT) + + +TOKEN_READ = (STANDARD_RIGHTS_READ |\ + TOKEN_QUERY) + + +TOKEN_WRITE = (STANDARD_RIGHTS_WRITE |\ + TOKEN_ADJUST_PRIVILEGES |\ + TOKEN_ADJUST_GROUPS |\ + TOKEN_ADJUST_DEFAULT) + +TOKEN_EXECUTE = (STANDARD_RIGHTS_EXECUTE) + +SidTypeUser = 1 +SidTypeGroup = 2 +SidTypeDomain =3 +SidTypeAlias = 4 +SidTypeWellKnownGroup = 5 +SidTypeDeletedAccount = 6 +SidTypeInvalid = 7 +SidTypeUnknown = 8 + +# Token types +TokenPrimary = 1 +TokenImpersonation = 2 + +TokenUser = 1 +TokenGroups = 2 +TokenPrivileges = 3 +TokenOwner = 4 +TokenPrimaryGroup = 5 +TokenDefaultDacl = 6 +TokenSource = 7 +TokenType = 8 +TokenImpersonationLevel = 9 +TokenStatistics = 10 + +# DirectoryService related constants. +# Generated by h2py from NtDsAPI.h +DS_BEHAVIOR_WIN2000 = 0 +DS_BEHAVIOR_WIN2003_WITH_MIXED_DOMAINS = 1 +DS_BEHAVIOR_WIN2003 = 2 +DS_SYNCED_EVENT_NAME = "NTDSInitialSyncsCompleted" +ACTRL_DS_OPEN = 0x00000000 +ACTRL_DS_CREATE_CHILD = 0x00000001 +ACTRL_DS_DELETE_CHILD = 0x00000002 +ACTRL_DS_LIST = 0x00000004 +ACTRL_DS_SELF = 0x00000008 +ACTRL_DS_READ_PROP = 0x00000010 +ACTRL_DS_WRITE_PROP = 0x00000020 +ACTRL_DS_DELETE_TREE = 0x00000040 +ACTRL_DS_LIST_OBJECT = 0x00000080 +ACTRL_DS_CONTROL_ACCESS = 0x00000100 +NTDSAPI_BIND_ALLOW_DELEGATION = (0x00000001) +DS_REPSYNC_ASYNCHRONOUS_OPERATION = 0x00000001 +DS_REPSYNC_WRITEABLE = 0x00000002 +DS_REPSYNC_PERIODIC = 0x00000004 +DS_REPSYNC_INTERSITE_MESSAGING = 0x00000008 +DS_REPSYNC_ALL_SOURCES = 0x00000010 +DS_REPSYNC_FULL = 0x00000020 +DS_REPSYNC_URGENT = 0x00000040 +DS_REPSYNC_NO_DISCARD = 0x00000080 +DS_REPSYNC_FORCE = 0x00000100 +DS_REPSYNC_ADD_REFERENCE = 0x00000200 +DS_REPSYNC_NEVER_COMPLETED = 0x00000400 +DS_REPSYNC_TWO_WAY = 0x00000800 +DS_REPSYNC_NEVER_NOTIFY = 0x00001000 +DS_REPSYNC_INITIAL = 0x00002000 +DS_REPSYNC_USE_COMPRESSION = 0x00004000 +DS_REPSYNC_ABANDONED = 0x00008000 +DS_REPSYNC_INITIAL_IN_PROGRESS = 0x00010000 +DS_REPSYNC_PARTIAL_ATTRIBUTE_SET = 0x00020000 +DS_REPSYNC_REQUEUE = 0x00040000 +DS_REPSYNC_NOTIFICATION = 0x00080000 +DS_REPSYNC_ASYNCHRONOUS_REPLICA = 0x00100000 +DS_REPSYNC_CRITICAL = 0x00200000 +DS_REPSYNC_FULL_IN_PROGRESS = 0x00400000 +DS_REPSYNC_PREEMPTED = 0x00800000 +DS_REPADD_ASYNCHRONOUS_OPERATION = 0x00000001 +DS_REPADD_WRITEABLE = 0x00000002 +DS_REPADD_INITIAL = 0x00000004 +DS_REPADD_PERIODIC = 0x00000008 +DS_REPADD_INTERSITE_MESSAGING = 0x00000010 +DS_REPADD_ASYNCHRONOUS_REPLICA = 0x00000020 +DS_REPADD_DISABLE_NOTIFICATION = 0x00000040 +DS_REPADD_DISABLE_PERIODIC = 0x00000080 +DS_REPADD_USE_COMPRESSION = 0x00000100 +DS_REPADD_NEVER_NOTIFY = 0x00000200 +DS_REPADD_TWO_WAY = 0x00000400 +DS_REPADD_CRITICAL = 0x00000800 +DS_REPDEL_ASYNCHRONOUS_OPERATION = 0x00000001 +DS_REPDEL_WRITEABLE = 0x00000002 +DS_REPDEL_INTERSITE_MESSAGING = 0x00000004 +DS_REPDEL_IGNORE_ERRORS = 0x00000008 +DS_REPDEL_LOCAL_ONLY = 0x00000010 +DS_REPDEL_NO_SOURCE = 0x00000020 +DS_REPDEL_REF_OK = 0x00000040 +DS_REPMOD_ASYNCHRONOUS_OPERATION = 0x00000001 +DS_REPMOD_WRITEABLE = 0x00000002 +DS_REPMOD_UPDATE_FLAGS = 0x00000001 +DS_REPMOD_UPDATE_ADDRESS = 0x00000002 +DS_REPMOD_UPDATE_SCHEDULE = 0x00000004 +DS_REPMOD_UPDATE_RESULT = 0x00000008 +DS_REPMOD_UPDATE_TRANSPORT = 0x00000010 +DS_REPUPD_ASYNCHRONOUS_OPERATION = 0x00000001 +DS_REPUPD_WRITEABLE = 0x00000002 +DS_REPUPD_ADD_REFERENCE = 0x00000004 +DS_REPUPD_DELETE_REFERENCE = 0x00000008 +DS_INSTANCETYPE_IS_NC_HEAD = 0x00000001 +DS_INSTANCETYPE_NC_IS_WRITEABLE = 0x00000004 +DS_INSTANCETYPE_NC_COMING = 0x00000010 +DS_INSTANCETYPE_NC_GOING = 0x00000020 +NTDSDSA_OPT_IS_GC = ( 1 << 0 ) +NTDSDSA_OPT_DISABLE_INBOUND_REPL = ( 1 << 1 ) +NTDSDSA_OPT_DISABLE_OUTBOUND_REPL = ( 1 << 2 ) +NTDSDSA_OPT_DISABLE_NTDSCONN_XLATE = ( 1 << 3 ) +NTDSCONN_OPT_IS_GENERATED = ( 1 << 0 ) +NTDSCONN_OPT_TWOWAY_SYNC = ( 1 << 1 ) +NTDSCONN_OPT_OVERRIDE_NOTIFY_DEFAULT = (1 << 2 ) +NTDSCONN_OPT_USE_NOTIFY = (1 << 3) +NTDSCONN_OPT_DISABLE_INTERSITE_COMPRESSION = (1 << 4) +NTDSCONN_OPT_USER_OWNED_SCHEDULE = (1 << 5) +NTDSCONN_KCC_NO_REASON = ( 0 ) +NTDSCONN_KCC_GC_TOPOLOGY = ( 1 << 0 ) +NTDSCONN_KCC_RING_TOPOLOGY = ( 1 << 1 ) +NTDSCONN_KCC_MINIMIZE_HOPS_TOPOLOGY = ( 1 << 2 ) +NTDSCONN_KCC_STALE_SERVERS_TOPOLOGY = ( 1 << 3 ) +NTDSCONN_KCC_OSCILLATING_CONNECTION_TOPOLOGY = ( 1 << 4 ) +NTDSCONN_KCC_INTERSITE_GC_TOPOLOGY = (1 << 5) +NTDSCONN_KCC_INTERSITE_TOPOLOGY = (1 << 6) +NTDSCONN_KCC_SERVER_FAILOVER_TOPOLOGY = (1 << 7) +NTDSCONN_KCC_SITE_FAILOVER_TOPOLOGY = (1 << 8) +NTDSCONN_KCC_REDUNDANT_SERVER_TOPOLOGY = (1 << 9) +FRSCONN_PRIORITY_MASK = 0x70000000 +FRSCONN_MAX_PRIORITY = 0x8 +NTDSCONN_OPT_IGNORE_SCHEDULE_MASK = (-2147483648) + +NTDSSETTINGS_OPT_IS_AUTO_TOPOLOGY_DISABLED = ( 1 << 0 ) +NTDSSETTINGS_OPT_IS_TOPL_CLEANUP_DISABLED = ( 1 << 1 ) +NTDSSETTINGS_OPT_IS_TOPL_MIN_HOPS_DISABLED = ( 1 << 2 ) +NTDSSETTINGS_OPT_IS_TOPL_DETECT_STALE_DISABLED = ( 1 << 3 ) +NTDSSETTINGS_OPT_IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED = ( 1 << 4 ) +NTDSSETTINGS_OPT_IS_GROUP_CACHING_ENABLED = ( 1 << 5 ) +NTDSSETTINGS_OPT_FORCE_KCC_WHISTLER_BEHAVIOR = ( 1 << 6 ) +NTDSSETTINGS_OPT_FORCE_KCC_W2K_ELECTION = ( 1 << 7 ) +NTDSSETTINGS_OPT_IS_RAND_BH_SELECTION_DISABLED = ( 1 << 8 ) +NTDSSETTINGS_OPT_IS_SCHEDULE_HASHING_ENABLED = ( 1 << 9 ) +NTDSSETTINGS_OPT_IS_REDUNDANT_SERVER_TOPOLOGY_ENABLED = ( 1 << 10 ) +NTDSSETTINGS_DEFAULT_SERVER_REDUNDANCY = 2 +NTDSTRANSPORT_OPT_IGNORE_SCHEDULES = ( 1 << 0 ) +NTDSTRANSPORT_OPT_BRIDGES_REQUIRED = (1 << 1 ) +NTDSSITECONN_OPT_USE_NOTIFY = ( 1 << 0 ) +NTDSSITECONN_OPT_TWOWAY_SYNC = ( 1 << 1 ) +NTDSSITECONN_OPT_DISABLE_COMPRESSION = ( 1 << 2 ) +NTDSSITELINK_OPT_USE_NOTIFY = ( 1 << 0 ) +NTDSSITELINK_OPT_TWOWAY_SYNC = ( 1 << 1 ) +NTDSSITELINK_OPT_DISABLE_COMPRESSION = ( 1 << 2 ) +GUID_USERS_CONTAINER_A = "a9d1ca15768811d1aded00c04fd8d5cd" +GUID_COMPUTRS_CONTAINER_A = "aa312825768811d1aded00c04fd8d5cd" +GUID_SYSTEMS_CONTAINER_A = "ab1d30f3768811d1aded00c04fd8d5cd" +GUID_DOMAIN_CONTROLLERS_CONTAINER_A = "a361b2ffffd211d1aa4b00c04fd7d83a" +GUID_INFRASTRUCTURE_CONTAINER_A = "2fbac1870ade11d297c400c04fd8d5cd" +GUID_DELETED_OBJECTS_CONTAINER_A = "18e2ea80684f11d2b9aa00c04f79f805" +GUID_LOSTANDFOUND_CONTAINER_A = "ab8153b7768811d1aded00c04fd8d5cd" +GUID_FOREIGNSECURITYPRINCIPALS_CONTAINER_A = "22b70c67d56e4efb91e9300fca3dc1aa" +GUID_PROGRAM_DATA_CONTAINER_A = "09460c08ae1e4a4ea0f64aee7daa1e5a" +GUID_MICROSOFT_PROGRAM_DATA_CONTAINER_A = "f4be92a4c777485e878e9421d53087db" +GUID_NTDS_QUOTAS_CONTAINER_A = "6227f0af1fc2410d8e3bb10615bb5b0f" +GUID_USERS_CONTAINER_BYTE = "\xa9\xd1\xca\x15\x76\x88\x11\xd1\xad\xed\x00\xc0\x4f\xd8\xd5\xcd" +GUID_COMPUTRS_CONTAINER_BYTE = "\xaa\x31\x28\x25\x76\x88\x11\xd1\xad\xed\x00\xc0\x4f\xd8\xd5\xcd" +GUID_SYSTEMS_CONTAINER_BYTE = "\xab\x1d\x30\xf3\x76\x88\x11\xd1\xad\xed\x00\xc0\x4f\xd8\xd5\xcd" +GUID_DOMAIN_CONTROLLERS_CONTAINER_BYTE = "\xa3\x61\xb2\xff\xff\xd2\x11\xd1\xaa\x4b\x00\xc0\x4f\xd7\xd8\x3a" +GUID_INFRASTRUCTURE_CONTAINER_BYTE = "\x2f\xba\xc1\x87\x0a\xde\x11\xd2\x97\xc4\x00\xc0\x4f\xd8\xd5\xcd" +GUID_DELETED_OBJECTS_CONTAINER_BYTE = "\x18\xe2\xea\x80\x68\x4f\x11\xd2\xb9\xaa\x00\xc0\x4f\x79\xf8\x05" +GUID_LOSTANDFOUND_CONTAINER_BYTE = "\xab\x81\x53\xb7\x76\x88\x11\xd1\xad\xed\x00\xc0\x4f\xd8\xd5\xcd" +GUID_FOREIGNSECURITYPRINCIPALS_CONTAINER_BYTE = "\x22\xb7\x0c\x67\xd5\x6e\x4e\xfb\x91\xe9\x30\x0f\xca\x3d\xc1\xaa" +GUID_PROGRAM_DATA_CONTAINER_BYTE = "\x09\x46\x0c\x08\xae\x1e\x4a\x4e\xa0\xf6\x4a\xee\x7d\xaa\x1e\x5a" +GUID_MICROSOFT_PROGRAM_DATA_CONTAINER_BYTE = "\xf4\xbe\x92\xa4\xc7\x77\x48\x5e\x87\x8e\x94\x21\xd5\x30\x87\xdb" +GUID_NTDS_QUOTAS_CONTAINER_BYTE = "\x62\x27\xf0\xaf\x1f\xc2\x41\x0d\x8e\x3b\xb1\x06\x15\xbb\x5b\x0f" +DS_REPSYNCALL_NO_OPTIONS = 0x00000000 +DS_REPSYNCALL_ABORT_IF_SERVER_UNAVAILABLE = 0x00000001 +DS_REPSYNCALL_SYNC_ADJACENT_SERVERS_ONLY = 0x00000002 +DS_REPSYNCALL_ID_SERVERS_BY_DN = 0x00000004 +DS_REPSYNCALL_DO_NOT_SYNC = 0x00000008 +DS_REPSYNCALL_SKIP_INITIAL_CHECK = 0x00000010 +DS_REPSYNCALL_PUSH_CHANGES_OUTWARD = 0x00000020 +DS_REPSYNCALL_CROSS_SITE_BOUNDARIES = 0x00000040 +DS_LIST_DSA_OBJECT_FOR_SERVER = 0 +DS_LIST_DNS_HOST_NAME_FOR_SERVER = 1 +DS_LIST_ACCOUNT_OBJECT_FOR_SERVER = 2 +DS_ROLE_SCHEMA_OWNER = 0 +DS_ROLE_DOMAIN_OWNER = 1 +DS_ROLE_PDC_OWNER = 2 +DS_ROLE_RID_OWNER = 3 +DS_ROLE_INFRASTRUCTURE_OWNER = 4 +DS_SCHEMA_GUID_NOT_FOUND = 0 +DS_SCHEMA_GUID_ATTR = 1 +DS_SCHEMA_GUID_ATTR_SET = 2 +DS_SCHEMA_GUID_CLASS = 3 +DS_SCHEMA_GUID_CONTROL_RIGHT = 4 +DS_KCC_FLAG_ASYNC_OP = (1 << 0) +DS_KCC_FLAG_DAMPED = (1 << 1) +DS_EXIST_ADVISORY_MODE = (0x1) +DS_REPL_INFO_FLAG_IMPROVE_LINKED_ATTRS = (0x00000001) +DS_REPL_NBR_WRITEABLE = (0x00000010) +DS_REPL_NBR_SYNC_ON_STARTUP = (0x00000020) +DS_REPL_NBR_DO_SCHEDULED_SYNCS = (0x00000040) +DS_REPL_NBR_USE_ASYNC_INTERSITE_TRANSPORT = (0x00000080) +DS_REPL_NBR_TWO_WAY_SYNC = (0x00000200) +DS_REPL_NBR_RETURN_OBJECT_PARENTS = (0x00000800) +DS_REPL_NBR_FULL_SYNC_IN_PROGRESS = (0x00010000) +DS_REPL_NBR_FULL_SYNC_NEXT_PACKET = (0x00020000) +DS_REPL_NBR_NEVER_SYNCED = (0x00200000) +DS_REPL_NBR_PREEMPTED = (0x01000000) +DS_REPL_NBR_IGNORE_CHANGE_NOTIFICATIONS = (0x04000000) +DS_REPL_NBR_DISABLE_SCHEDULED_SYNC = (0x08000000) +DS_REPL_NBR_COMPRESS_CHANGES = (0x10000000) +DS_REPL_NBR_NO_CHANGE_NOTIFICATIONS = (0x20000000) +DS_REPL_NBR_PARTIAL_ATTRIBUTE_SET = (0x40000000) +DS_REPL_NBR_MODIFIABLE_MASK = \ + ( \ + DS_REPL_NBR_SYNC_ON_STARTUP | \ + DS_REPL_NBR_DO_SCHEDULED_SYNCS | \ + DS_REPL_NBR_TWO_WAY_SYNC | \ + DS_REPL_NBR_IGNORE_CHANGE_NOTIFICATIONS | \ + DS_REPL_NBR_DISABLE_SCHEDULED_SYNC | \ + DS_REPL_NBR_COMPRESS_CHANGES | \ + DS_REPL_NBR_NO_CHANGE_NOTIFICATIONS \ + ) + +# from enum DS_NAME_FORMAT +DS_UNKNOWN_NAME = 0 +DS_FQDN_1779_NAME = 1 +DS_NT4_ACCOUNT_NAME = 2 +DS_DISPLAY_NAME = 3 +DS_UNIQUE_ID_NAME = 6 +DS_CANONICAL_NAME = 7 +DS_USER_PRINCIPAL_NAME = 8 +DS_CANONICAL_NAME_EX = 9 +DS_SERVICE_PRINCIPAL_NAME = 10 +DS_SID_OR_SID_HISTORY_NAME = 11 +DS_DNS_DOMAIN_NAME = 12 + +DS_DOMAIN_SIMPLE_NAME = DS_USER_PRINCIPAL_NAME +DS_ENTERPRISE_SIMPLE_NAME = DS_USER_PRINCIPAL_NAME + +# from enum DS_NAME_FLAGS +DS_NAME_NO_FLAGS = 0x0 +DS_NAME_FLAG_SYNTACTICAL_ONLY = 0x1 +DS_NAME_FLAG_EVAL_AT_DC = 0x2 +DS_NAME_FLAG_GCVERIFY = 0x4 +DS_NAME_FLAG_TRUST_REFERRAL = 0x8 + +# from enum DS_NAME_ERROR +DS_NAME_NO_ERROR = 0 +DS_NAME_ERROR_RESOLVING = 1 +DS_NAME_ERROR_NOT_FOUND = 2 +DS_NAME_ERROR_NOT_UNIQUE = 3 +DS_NAME_ERROR_NO_MAPPING = 4 +DS_NAME_ERROR_DOMAIN_ONLY = 5 +DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING = 6 +DS_NAME_ERROR_TRUST_REFERRAL = 7 + + +# from enum DS_SPN_NAME_TYPE +DS_SPN_DNS_HOST = 0 +DS_SPN_DN_HOST = 1 +DS_SPN_NB_HOST = 2 +DS_SPN_DOMAIN = 3 +DS_SPN_NB_DOMAIN = 4 +DS_SPN_SERVICE = 5 + +# from enum DS_SPN_WRITE_OP +DS_SPN_ADD_SPN_OP = 0 +DS_SPN_REPLACE_SPN_OP = 1 +DS_SPN_DELETE_SPN_OP = 2 + +# Generated by h2py from DsGetDC.h +DS_FORCE_REDISCOVERY = 0x00000001 +DS_DIRECTORY_SERVICE_REQUIRED = 0x00000010 +DS_DIRECTORY_SERVICE_PREFERRED = 0x00000020 +DS_GC_SERVER_REQUIRED = 0x00000040 +DS_PDC_REQUIRED = 0x00000080 +DS_BACKGROUND_ONLY = 0x00000100 +DS_IP_REQUIRED = 0x00000200 +DS_KDC_REQUIRED = 0x00000400 +DS_TIMESERV_REQUIRED = 0x00000800 +DS_WRITABLE_REQUIRED = 0x00001000 +DS_GOOD_TIMESERV_PREFERRED = 0x00002000 +DS_AVOID_SELF = 0x00004000 +DS_ONLY_LDAP_NEEDED = 0x00008000 +DS_IS_FLAT_NAME = 0x00010000 +DS_IS_DNS_NAME = 0x00020000 +DS_RETURN_DNS_NAME = 0x40000000 +DS_RETURN_FLAT_NAME = (-2147483648) +DSGETDC_VALID_FLAGS = ( \ + DS_FORCE_REDISCOVERY | \ + DS_DIRECTORY_SERVICE_REQUIRED | \ + DS_DIRECTORY_SERVICE_PREFERRED | \ + DS_GC_SERVER_REQUIRED | \ + DS_PDC_REQUIRED | \ + DS_BACKGROUND_ONLY | \ + DS_IP_REQUIRED | \ + DS_KDC_REQUIRED | \ + DS_TIMESERV_REQUIRED | \ + DS_WRITABLE_REQUIRED | \ + DS_GOOD_TIMESERV_PREFERRED | \ + DS_AVOID_SELF | \ + DS_ONLY_LDAP_NEEDED | \ + DS_IS_FLAT_NAME | \ + DS_IS_DNS_NAME | \ + DS_RETURN_FLAT_NAME | \ + DS_RETURN_DNS_NAME ) +DS_INET_ADDRESS = 1 +DS_NETBIOS_ADDRESS = 2 +DS_PDC_FLAG = 0x00000001 +DS_GC_FLAG = 0x00000004 +DS_LDAP_FLAG = 0x00000008 +DS_DS_FLAG = 0x00000010 +DS_KDC_FLAG = 0x00000020 +DS_TIMESERV_FLAG = 0x00000040 +DS_CLOSEST_FLAG = 0x00000080 +DS_WRITABLE_FLAG = 0x00000100 +DS_GOOD_TIMESERV_FLAG = 0x00000200 +DS_NDNC_FLAG = 0x00000400 +DS_PING_FLAGS = 0x0000FFFF +DS_DNS_CONTROLLER_FLAG = 0x20000000 +DS_DNS_DOMAIN_FLAG = 0x40000000 +DS_DNS_FOREST_FLAG = (-2147483648) +DS_DOMAIN_IN_FOREST = 0x0001 +DS_DOMAIN_DIRECT_OUTBOUND = 0x0002 +DS_DOMAIN_TREE_ROOT = 0x0004 +DS_DOMAIN_PRIMARY = 0x0008 +DS_DOMAIN_NATIVE_MODE = 0x0010 +DS_DOMAIN_DIRECT_INBOUND = 0x0020 +DS_DOMAIN_VALID_FLAGS = ( \ + DS_DOMAIN_IN_FOREST | \ + DS_DOMAIN_DIRECT_OUTBOUND | \ + DS_DOMAIN_TREE_ROOT | \ + DS_DOMAIN_PRIMARY | \ + DS_DOMAIN_NATIVE_MODE | \ + DS_DOMAIN_DIRECT_INBOUND ) +DS_GFTI_UPDATE_TDO = 0x1 +DS_GFTI_VALID_FLAGS = 0x1 +DS_ONLY_DO_SITE_NAME = 0x01 +DS_NOTIFY_AFTER_SITE_RECORDS = 0x02 +DS_OPEN_VALID_OPTION_FLAGS = ( DS_ONLY_DO_SITE_NAME | DS_NOTIFY_AFTER_SITE_RECORDS ) +DS_OPEN_VALID_FLAGS = ( \ + DS_FORCE_REDISCOVERY | \ + DS_ONLY_LDAP_NEEDED | \ + DS_KDC_REQUIRED | \ + DS_PDC_REQUIRED | \ + DS_GC_SERVER_REQUIRED | \ + DS_WRITABLE_REQUIRED ) + +## from aclui.h +# SI_OBJECT_INFO.dwFlags +SI_EDIT_PERMS = 0x00000000L +SI_EDIT_OWNER = 0x00000001L +SI_EDIT_AUDITS = 0x00000002L +SI_CONTAINER = 0x00000004L +SI_READONLY = 0x00000008L +SI_ADVANCED = 0x00000010L +SI_RESET = 0x00000020L +SI_OWNER_READONLY = 0x00000040L +SI_EDIT_PROPERTIES = 0x00000080L +SI_OWNER_RECURSE = 0x00000100L +SI_NO_ACL_PROTECT = 0x00000200L +SI_NO_TREE_APPLY = 0x00000400L +SI_PAGE_TITLE = 0x00000800L +SI_SERVER_IS_DC = 0x00001000L +SI_RESET_DACL_TREE = 0x00004000L +SI_RESET_SACL_TREE = 0x00008000L +SI_OBJECT_GUID = 0x00010000L +SI_EDIT_EFFECTIVE = 0x00020000L +SI_RESET_DACL = 0x00040000L +SI_RESET_SACL = 0x00080000L +SI_RESET_OWNER = 0x00100000L +SI_NO_ADDITIONAL_PERMISSION = 0x00200000L +SI_MAY_WRITE = 0x10000000L +SI_EDIT_ALL = (SI_EDIT_PERMS | SI_EDIT_OWNER | SI_EDIT_AUDITS) + +# SI_ACCESS.dwFlags +SI_ACCESS_SPECIFIC = 0x00010000L +SI_ACCESS_GENERAL = 0x00020000L +SI_ACCESS_CONTAINER = 0x00040000L +SI_ACCESS_PROPERTY = 0x00080000L + +# SI_PAGE_TYPE enum +SI_PAGE_PERM = 0 +SI_PAGE_ADVPERM = 1 +SI_PAGE_AUDIT = 2 +SI_PAGE_OWNER = 3 +SI_PAGE_EFFECTIVE =4 + +CFSTR_ACLUI_SID_INFO_LIST = u"CFSTR_ACLUI_SID_INFO_LIST" +PSPCB_SI_INITDIALOG = 1025 ## WM_USER+1 diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/pywintypes.py b/thirdparty/python25/Lib/site-packages/win32/lib/pywintypes.py new file mode 100644 index 000000000..29c1f1f98 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/pywintypes.py @@ -0,0 +1,102 @@ +# Magic utility that "redirects" to pywintypesxx.dll + +def __import_pywin32_system_module__(modname, globs): + # This has been through a number of iterations. The problem: how to + # locate pywintypesXX.dll when it may be in a number of places, and how + # to avoid ever loading it twice. This problem is compounded by the + # fact that the "right" way to do this requires win32api, but this + # itself requires pywintypesXX. + # And the killer problem is that someone may have done 'import win32api' + # before this code is called. In that case Windows will have already + # loaded pywintypesXX as part of loading win32api - but by the time + # we get here, we may locate a different one. This appears to work, but + # then starts raising bizarre TypeErrors complaining that something + # is not a pywintypes type when it clearly is! + + # So in what we hope is the last major iteration of this, we now + # rely on a _win32sysloader module, implemented in C but not relying + # on pywintypesXX.dll. It then can check if the DLL we are looking for + # lib is already loaded. + import imp, sys, os + if not sys.platform.startswith("win32"): + # These extensions can be built on Linux via the 'mainwin' toolkit. + # Look for a native 'lib{modname}.so' + # NOTE: The _win32sysloader module will probably build in this + # environment, so it may be better to use that here too. + for ext, mode, ext_type in imp.get_suffixes(): + if ext_type==imp.C_EXTENSION: + for path in sys.path: + look = os.path.join(path, "lib" + modname + ext) + if os.path.isfile(look): + mod = imp.load_module(modname, None, look, + (ext, mode, ext_type)) + # and fill our namespace with it. + globs.update(mod.__dict__) + return + raise ImportError, "No dynamic module " + modname + # See if this is a debug build. + for suffix_item in imp.get_suffixes(): + if suffix_item[0]=='_d.pyd': + suffix = '_d' + break + else: + suffix = "" + filename = "%s%d%d%s.dll" % \ + (modname, sys.version_info[0], sys.version_info[1], suffix) + if hasattr(sys, "frozen"): + # If we are running from a frozen program (py2exe, McMillan, freeze) + # then we try and load the DLL from our sys.path + # XXX - This path may also benefit from _win32sysloader? However, + # MarkH has never seen the DLL load problem with py2exe programs... + for look in sys.path: + # If the sys.path entry is a (presumably) .zip file, use the + # directory + if os.path.isfile(look): + look = os.path.dirname(look) + found = os.path.join(look, filename) + if os.path.isfile(found): + break + else: + raise ImportError, \ + "Module '%s' isn't in frozen sys.path %s" % (modname, sys.path) + else: + # First see if it already in our process - if so, we must use that. + import _win32sysloader + found = _win32sysloader.GetModuleFilename(filename) + if found is None: + # We ask Windows to load it next. This is in an attempt to + # get the exact same module loaded should pywintypes be imported + # first (which is how we are here) or if, eg, win32api was imported + # first thereby implicitly loading the DLL. + + # Sadly though, it doesn't quite work - if pywintypesxx.dll + # is in system32 *and* the executable's directory, on XP SP2, an + # import of win32api will cause Windows to load pywintypes + # from system32, where LoadLibrary for that name will + # load the one in the exe's dir. + # That shouldn't really matter though, so long as we only ever + # get one loaded. + found = _win32sysloader.LoadModule(filename) + if found is None: + # Windows can't find it - which although isn't relevent here, + # means that we *must* be the first win32 import, as an attempt + # to import win32api etc would fail when Windows attempts to + # locate the DLL. + # This is most likely to happen for "non-admin" installs, where + # we can't put the files anywhere else on the global path. + + # If there is a version in our Python directory, use that + if os.path.isfile(os.path.join(sys.prefix, filename)): + found = os.path.join(sys.prefix, filename) + if found is None: + # give up in disgust. + raise ImportError, \ + "No system module '%s' (%s)" % (modname, filename) + + # Python can load the module + mod = imp.load_module(modname, None, found, + ('.dll', 'rb', imp.C_EXTENSION)) + # and fill our namespace with it. + globs.update(mod.__dict__) + +__import_pywin32_system_module__("pywintypes", globals()) diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/rasutil.py b/thirdparty/python25/Lib/site-packages/win32/lib/rasutil.py new file mode 100644 index 000000000..7802ab00e --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/rasutil.py @@ -0,0 +1,38 @@ +import win32ras + +stateStrings = { + win32ras.RASCS_OpenPort : "OpenPort", + win32ras.RASCS_PortOpened : "PortOpened", + win32ras.RASCS_ConnectDevice : "ConnectDevice", + win32ras.RASCS_DeviceConnected : "DeviceConnected", + win32ras.RASCS_AllDevicesConnected : "AllDevicesConnected", + win32ras.RASCS_Authenticate : "Authenticate", + win32ras.RASCS_AuthNotify : "AuthNotify", + win32ras.RASCS_AuthRetry : "AuthRetry", + win32ras.RASCS_AuthCallback : "AuthCallback", + win32ras.RASCS_AuthChangePassword : "AuthChangePassword", + win32ras.RASCS_AuthProject : "AuthProject", + win32ras.RASCS_AuthLinkSpeed : "AuthLinkSpeed", + win32ras.RASCS_AuthAck : "AuthAck", + win32ras.RASCS_ReAuthenticate : "ReAuthenticate", + win32ras.RASCS_Authenticated : "Authenticated", + win32ras.RASCS_PrepareForCallback : "PrepareForCallback", + win32ras.RASCS_WaitForModemReset : "WaitForModemReset", + win32ras.RASCS_WaitForCallback : "WaitForCallback", + win32ras.RASCS_Projected : "Projected", + win32ras.RASCS_StartAuthentication : "StartAuthentication", + win32ras.RASCS_CallbackComplete : "CallbackComplete", + win32ras.RASCS_LogonNetwork : "LogonNetwork", + win32ras.RASCS_Interactive : "Interactive", + win32ras.RASCS_RetryAuthentication : "RetryAuthentication", + win32ras.RASCS_CallbackSetByCaller : "CallbackSetByCaller", + win32ras.RASCS_PasswordExpired : "PasswordExpired", + win32ras.RASCS_Connected : "Connected", + win32ras.RASCS_Disconnected : "Disconnected" +} + +def TestCallback( hras, msg, state, error, exterror): + print "Callback called with ", hras, msg, stateStrings[state], error, exterror + +def test(rasName = "_ Divert Off"): + return win32ras.Dial(None, None, (rasName,),TestCallback) \ No newline at end of file diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/regcheck.py b/thirdparty/python25/Lib/site-packages/win32/lib/regcheck.py new file mode 100644 index 000000000..71c990969 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/regcheck.py @@ -0,0 +1,125 @@ +# This module is very old and useless in this day and age! It will be +# removed in a few years (ie, 2009 or so...) + +import warnings +warnings.warn("The regcheck module has been pending deprecation since build 210", + category=warnings.PendingDeprecationWarning) + +import win32con +import regutil +import win32api +import os +import sys + + +def CheckRegisteredExe(exename): + try: + os.stat(win32api.RegQueryValue(regutil.GetRootKey() , regutil.GetAppPathsKey() + "\\" + exename)) +# except SystemError: + except (os.error,win32api.error): + print "Registration of %s - Not registered correctly" % exename + +def CheckPathString(pathString): + import string + for path in string.split(pathString, ";"): + if not os.path.isdir(path): + return "'%s' is not a valid directory!" % path + return None + +def CheckPythonPaths(verbose): + if verbose: print "Python Paths:" + # Check the core path + if verbose: print "\tCore Path:", + try: + appPath = win32api.RegQueryValue(regutil.GetRootKey(), regutil.BuildDefaultPythonKey() + "\\PythonPath") + except win32api.error, (code, fn, desc): + print "** does not exist - ", desc + problem = CheckPathString(appPath) + if problem: + print problem + else: + if verbose: print appPath + + key = win32api.RegOpenKey(regutil.GetRootKey(), regutil.BuildDefaultPythonKey() + "\\PythonPath", 0, win32con.KEY_READ) + try: + keyNo = 0 + while 1: + try: + appName = win32api.RegEnumKey(key, keyNo) + appPath = win32api.RegQueryValue(key, appName) + if verbose: print "\t"+appName+":", + if appPath: + problem = CheckPathString(appPath) + if problem: + print problem + else: + if verbose: print appPath + else: + if verbose: print "(empty)" + keyNo = keyNo + 1 + except win32api.error: + break + finally: + win32api.RegCloseKey(key) + +def CheckHelpFiles(verbose): + if verbose: print "Help Files:" + try: + key = win32api.RegOpenKey(regutil.GetRootKey(), regutil.BuildDefaultPythonKey() + "\\Help", 0, win32con.KEY_READ) + except win32api.error, (code, fn, details): + import winerror + if code!=winerror.ERROR_FILE_NOT_FOUND: + raise win32api.error, (code, fn, details) + return + + try: + keyNo = 0 + while 1: + try: + helpDesc = win32api.RegEnumKey(key, keyNo) + helpFile = win32api.RegQueryValue(key, helpDesc) + if verbose: print "\t"+helpDesc+":", + # query the os section. + try: + os.stat(helpFile ) + if verbose: print helpFile + except os.error: + print "** Help file %s does not exist" % helpFile + keyNo = keyNo + 1 + except win32api.error, (code, fn, desc): + import winerror + if code!=winerror.ERROR_NO_MORE_ITEMS: + raise win32api.error, (code, fn, desc) + break + finally: + win32api.RegCloseKey(key) + +def CheckRegisteredModules(verbose): + # Check out all registered modules. + k=regutil.BuildDefaultPythonKey() + "\\Modules" + try: + keyhandle = win32api.RegOpenKey(regutil.GetRootKey(), k) + print "WARNING: 'Modules' registry entry is deprectated and evil!" + except win32api.error, (code, fn, details): + import winerror + if code!=winerror.ERROR_FILE_NOT_FOUND: + raise win32api.error, (code, fn, details) + return + +def CheckRegistry(verbose=0): + # check the registered modules + if verbose and os.environ.has_key('pythonpath'): + print "Warning - PythonPath in environment - please check it!" + # Check out all paths on sys.path + + CheckPythonPaths(verbose) + CheckHelpFiles(verbose) + CheckRegisteredModules(verbose) + CheckRegisteredExe("Python.exe") + +if __name__=='__main__': + if len(sys.argv)>1 and sys.argv[1]=='-q': + verbose = 0 + else: + verbose = 1 + CheckRegistry(verbose) diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/regutil.py b/thirdparty/python25/Lib/site-packages/win32/lib/regutil.py new file mode 100644 index 000000000..c5be3c7d3 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/regutil.py @@ -0,0 +1,284 @@ +# Some registry helpers. +import win32api +import win32con +import sys +import os + +error = "Registry utility error" + +# A .py file has a CLSID associated with it (why? - dunno!) +CLSIDPyFile = "{b51df050-06ae-11cf-ad3b-524153480001}" + +RegistryIDPyFile = "Python.File" # The registry "file type" of a .py file +RegistryIDPycFile = "Python.CompiledFile" # The registry "file type" of a .pyc file + +def GetRootKey(): + """Retrieves the Registry root in use by Python. + """ +# Win32s no longer supported/released. +# if win32ui.IsWin32s(): +# return win32con.HKEY_CLASSES_ROOT +# else: + return win32con.HKEY_LOCAL_MACHINE + +def GetRegistryDefaultValue(subkey, rootkey = None): + """A helper to return the default value for a key in the registry. + """ + if rootkey is None: rootkey = GetRootKey() + return win32api.RegQueryValue(rootkey, subkey) + +def SetRegistryDefaultValue(subKey, value, rootkey = None): + """A helper to set the default value for a key in the registry + """ + import types + if rootkey is None: rootkey = GetRootKey() + if type(value)==types.StringType: + typeId = win32con.REG_SZ + elif type(value)==types.IntType: + typeId = win32con.REG_DWORD + else: + raise TypeError, "Value must be string or integer - was passed " + str(value) + + win32api.RegSetValue(rootkey, subKey, typeId ,value) + +def BuildDefaultPythonKey(): + """Builds a string containing the path to the current registry key. + + The Python registry key contains the Python version. This function + uses the version of the DLL used by the current process to get the + registry key currently in use. + """ + + return "Software\\Python\\PythonCore\\" + sys.winver + +def GetAppPathsKey(): + return "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths" + +def RegisterPythonExe(exeFullPath, exeAlias = None, exeAppPath = None): + """Register a .exe file that uses Python. + + Registers the .exe with the OS. This allows the specified .exe to + be run from the command-line or start button without using the full path, + and also to setup application specific path (ie, os.environ['PATH']). + + Currently the exeAppPath is not supported, so this function is general + purpose, and not specific to Python at all. Later, exeAppPath may provide + a reasonable default that is used. + + exeFullPath -- The full path to the .exe + exeAlias = None -- An alias for the exe - if none, the base portion + of the filename is used. + exeAppPath -- Not supported. + """ + # Note - Dont work on win32s (but we dont care anymore!) + if exeAppPath: + raise error, "Do not support exeAppPath argument currently" + if exeAlias is None: + exeAlias = os.path.basename(exeFullPath) + win32api.RegSetValue(GetRootKey(), GetAppPathsKey() + "\\" + exeAlias, win32con.REG_SZ, exeFullPath) + +def GetRegisteredExe(exeAlias): + """Get a registered .exe + """ + return win32api.RegQueryValue(GetRootKey(), GetAppPathsKey() + "\\" + exeAlias) + +def UnregisterPythonExe(exeAlias): + """Unregister a .exe file that uses Python. + """ + try: + win32api.RegDeleteKey(GetRootKey(), GetAppPathsKey() + "\\" + exeAlias) + except win32api.error, (code, fn, details): + import winerror + if code!=winerror.ERROR_FILE_NOT_FOUND: + raise win32api.error, (code, fn, desc) + return + +def RegisterNamedPath(name, path): + """Register a named path - ie, a named PythonPath entry. + """ + keyStr = BuildDefaultPythonKey() + "\\PythonPath" + if name: keyStr = keyStr + "\\" + name + win32api.RegSetValue(GetRootKey(), keyStr, win32con.REG_SZ, path) + +def UnregisterNamedPath(name): + """Unregister a named path - ie, a named PythonPath entry. + """ + keyStr = BuildDefaultPythonKey() + "\\PythonPath\\" + name + try: + win32api.RegDeleteKey(GetRootKey(), keyStr) + except win32api.error, (code, fn, details): + import winerror + if code!=winerror.ERROR_FILE_NOT_FOUND: + raise win32api.error, (code, fn, desc) + return + +def GetRegisteredNamedPath(name): + """Get a registered named path, or None if it doesnt exist. + """ + keyStr = BuildDefaultPythonKey() + "\\PythonPath" + if name: keyStr = keyStr + "\\" + name + try: + return win32api.RegQueryValue(GetRootKey(), keyStr) + except win32api.error, (code, fn, details): + import winerror + if code!=winerror.ERROR_FILE_NOT_FOUND: + raise win32api.error, (code, fn, details) + return None + + +def RegisterModule(modName, modPath): + """Register an explicit module in the registry. This forces the Python import + mechanism to locate this module directly, without a sys.path search. Thus + a registered module need not appear in sys.path at all. + + modName -- The name of the module, as used by import. + modPath -- The full path and file name of the module. + """ + try: + import os + os.stat(modPath) + except os.error: + print "Warning: Registering non-existant module %s" % modPath + win32api.RegSetValue(GetRootKey(), + BuildDefaultPythonKey() + "\\Modules\\%s" % modName, + win32con.REG_SZ, modPath) + +def UnregisterModule(modName): + """Unregister an explicit module in the registry. + + modName -- The name of the module, as used by import. + """ + try: + win32api.RegDeleteKey(GetRootKey(), + BuildDefaultPythonKey() + "\\Modules\\%s" % modName) + except win32api.error, (code, fn, desc): + import winerror + if code!=winerror.ERROR_FILE_NOT_FOUND: + raise win32api.error, (code, fn, desc) + +def GetRegisteredHelpFile(helpDesc): + """Given a description, return the registered entry. + """ + try: + return GetRegistryDefaultValue(BuildDefaultPythonKey() + "\\Help\\" + helpDesc) + except win32api.error: + try: + return GetRegistryDefaultValue(BuildDefaultPythonKey() + "\\Help\\" + helpDesc, win32con.HKEY_CURRENT_USER) + except win32api.error: + pass + return None + +def RegisterHelpFile(helpFile, helpPath, helpDesc = None, bCheckFile = 1): + """Register a help file in the registry. + + Note that this used to support writing to the Windows Help + key, however this is no longer done, as it seems to be incompatible. + + helpFile -- the base name of the help file. + helpPath -- the path to the help file + helpDesc -- A description for the help file. If None, the helpFile param is used. + bCheckFile -- A flag indicating if the file existence should be checked. + """ + if helpDesc is None: helpDesc = helpFile + fullHelpFile = os.path.join(helpPath, helpFile) + try: + if bCheckFile: os.stat(fullHelpFile) + except os.error: + raise ValueError, "Help file does not exist" + # Now register with Python itself. + win32api.RegSetValue(GetRootKey(), + BuildDefaultPythonKey() + "\\Help\\%s" % helpDesc, win32con.REG_SZ, fullHelpFile) + +def UnregisterHelpFile(helpFile, helpDesc = None): + """Unregister a help file in the registry. + + helpFile -- the base name of the help file. + helpDesc -- A description for the help file. If None, the helpFile param is used. + """ + key = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\Help", 0, win32con.KEY_ALL_ACCESS) + try: + try: + win32api.RegDeleteValue(key, helpFile) + except win32api.error, (code, fn, desc): + import winerror + if code!=winerror.ERROR_FILE_NOT_FOUND: + raise win32api.error, (code, fn, desc) + finally: + win32api.RegCloseKey(key) + + # Now de-register with Python itself. + if helpDesc is None: helpDesc = helpFile + try: + win32api.RegDeleteKey(GetRootKey(), + BuildDefaultPythonKey() + "\\Help\\%s" % helpDesc) + except win32api.error, (code, fn, desc): + import winerror + if code!=winerror.ERROR_FILE_NOT_FOUND: + raise win32api.error, (code, fn, desc) + +def RegisterCoreDLL(coredllName = None): + """Registers the core DLL in the registry. + + If no params are passed, the name of the Python DLL used in + the current process is used and registered. + """ + if coredllName is None: + coredllName = win32api.GetModuleFileName(sys.dllhandle) + # must exist! + else: + try: + os.stat(coredllName) + except os.error: + print "Warning: Registering non-existant core DLL %s" % coredllName + + hKey = win32api.RegCreateKey(GetRootKey() , BuildDefaultPythonKey()) + try: + win32api.RegSetValue(hKey, "Dll", win32con.REG_SZ, coredllName) + finally: + win32api.RegCloseKey(hKey) + # Lastly, setup the current version to point to me. + win32api.RegSetValue(GetRootKey(), "Software\\Python\\PythonCore\\CurrentVersion", win32con.REG_SZ, sys.winver) + +def RegisterFileExtensions(defPyIcon, defPycIcon, runCommand): + """Register the core Python file extensions. + + defPyIcon -- The default icon to use for .py files, in 'fname,offset' format. + defPycIcon -- The default icon to use for .pyc files, in 'fname,offset' format. + runCommand -- The command line to use for running .py files + """ + # Register the file extensions. + pythonFileId = RegistryIDPyFile + win32api.RegSetValue(win32con.HKEY_CLASSES_ROOT , ".py", win32con.REG_SZ, pythonFileId) + win32api.RegSetValue(win32con.HKEY_CLASSES_ROOT , pythonFileId , win32con.REG_SZ, "Python File") + win32api.RegSetValue(win32con.HKEY_CLASSES_ROOT , "%s\\CLSID" % pythonFileId , win32con.REG_SZ, CLSIDPyFile) + win32api.RegSetValue(win32con.HKEY_CLASSES_ROOT , "%s\\DefaultIcon" % pythonFileId, win32con.REG_SZ, defPyIcon) + base = "%s\\Shell" % RegistryIDPyFile + win32api.RegSetValue(win32con.HKEY_CLASSES_ROOT , base + "\\Open", win32con.REG_SZ, "Run") + win32api.RegSetValue(win32con.HKEY_CLASSES_ROOT , base + "\\Open\\Command", win32con.REG_SZ, runCommand) + + # Register the .PYC. + pythonFileId = RegistryIDPycFile + win32api.RegSetValue(win32con.HKEY_CLASSES_ROOT , ".pyc", win32con.REG_SZ, pythonFileId) + win32api.RegSetValue(win32con.HKEY_CLASSES_ROOT , pythonFileId , win32con.REG_SZ, "Compiled Python File") + win32api.RegSetValue(win32con.HKEY_CLASSES_ROOT , "%s\\DefaultIcon" % pythonFileId, win32con.REG_SZ, defPycIcon) + base = "%s\\Shell" % pythonFileId + win32api.RegSetValue(win32con.HKEY_CLASSES_ROOT , base + "\\Open", win32con.REG_SZ, "Run") + win32api.RegSetValue(win32con.HKEY_CLASSES_ROOT , base + "\\Open\\Command", win32con.REG_SZ, runCommand) + +def RegisterShellCommand(shellCommand, exeCommand, shellUserCommand = None): + # Last param for "Open" - for a .py file to be executed by the command line + # or shell execute (eg, just entering "foo.py"), the Command must be "Open", + # but you may associate a different name for the right-click menu. + # In our case, normally we have "Open=Run" + base = "%s\\Shell" % RegistryIDPyFile + if shellUserCommand: + win32api.RegSetValue(win32con.HKEY_CLASSES_ROOT , base + "\\%s" % (shellCommand), win32con.REG_SZ, shellUserCommand) + + win32api.RegSetValue(win32con.HKEY_CLASSES_ROOT , base + "\\%s\\Command" % (shellCommand), win32con.REG_SZ, exeCommand) + +def RegisterDDECommand(shellCommand, ddeApp, ddeTopic, ddeCommand): + base = "%s\\Shell" % RegistryIDPyFile + win32api.RegSetValue(win32con.HKEY_CLASSES_ROOT , base + "\\%s\\ddeexec" % (shellCommand), win32con.REG_SZ, ddeCommand) + win32api.RegSetValue(win32con.HKEY_CLASSES_ROOT , base + "\\%s\\ddeexec\\Application" % (shellCommand), win32con.REG_SZ, ddeApp) + win32api.RegSetValue(win32con.HKEY_CLASSES_ROOT , base + "\\%s\\ddeexec\\Topic" % (shellCommand), win32con.REG_SZ, ddeTopic) + diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/sspi.py b/thirdparty/python25/Lib/site-packages/win32/lib/sspi.py new file mode 100644 index 000000000..11a35cc5a --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/sspi.py @@ -0,0 +1,231 @@ +""" +Helper classes for SSPI authentication via the win32security module. + +SSPI authentication involves a token-exchange "dance", the exact details +of which depends on the authentication provider used. There are also +a number of complex flags and constants that need to be used - in most +cases, there are reasonable defaults. + +These classes attempt to hide these details from you until you really need +to know. They are not designed to handle all cases, just the common ones. +If you need finer control than offered here, just use the win32security +functions directly. +""" +# Based on Roger Upole's sspi demos. +# $Id: sspi.py,v 1.3 2006/02/13 14:47:20 rupole Exp $ +import win32security, sspicon + +error = win32security.error + +try: + True, False +except NameError: + False = 1==0 + True = not False + +class _BaseAuth(object): + def __init__(self): + self.reset() + + def reset(self): + """Reset everything to an unauthorized state""" + self.ctxt = None + self.authenticated = False + # The next seq_num for an encrypt/sign operation + self.next_seq_num = 0 + + def _get_next_seq_num(self): + """Get the next sequence number for a transmission. Default + implementation is to increment a counter + """ + ret = self.next_seq_num + self.next_seq_num = self.next_seq_num + 1 + return ret + + def encrypt(self, data): + """Encrypt a string, returning a tuple of (encrypted_data, encryption_data). + These can be passed to decrypt to get back the original string. + """ + pkg_size_info=self.ctxt.QueryContextAttributes(sspicon.SECPKG_ATTR_SIZES) + trailersize=pkg_size_info['SecurityTrailer'] + + encbuf=win32security.PySecBufferDescType() + encbuf.append(win32security.PySecBufferType(len(data), sspicon.SECBUFFER_DATA)) + encbuf.append(win32security.PySecBufferType(trailersize, sspicon.SECBUFFER_TOKEN)) + encbuf[0].Buffer=data + self.ctxt.EncryptMessage(0,encbuf,self._get_next_seq_num()) + return encbuf[0].Buffer, encbuf[1].Buffer + + def decrypt(self, data, trailer): + """Decrypt a previously encrypted string, returning the orignal data""" + encbuf=win32security.PySecBufferDescType() + encbuf.append(win32security.PySecBufferType(len(data), sspicon.SECBUFFER_DATA)) + encbuf.append(win32security.PySecBufferType(len(trailer), sspicon.SECBUFFER_TOKEN)) + encbuf[0].Buffer=data + encbuf[1].Buffer=trailer + self.ctxt.DecryptMessage(encbuf,self._get_next_seq_num()) + return encbuf[0].Buffer + + def sign(self, data): + """sign a string suitable for transmission, returning the signature. + Passing the data and signature to verify will determine if the data + is unchanged. + """ + pkg_size_info=self.ctxt.QueryContextAttributes(sspicon.SECPKG_ATTR_SIZES) + sigsize=pkg_size_info['MaxSignature'] + sigbuf=win32security.PySecBufferDescType() + sigbuf.append(win32security.PySecBufferType(len(data), sspicon.SECBUFFER_DATA)) + sigbuf.append(win32security.PySecBufferType(sigsize, sspicon.SECBUFFER_TOKEN)) + sigbuf[0].Buffer=data + + self.ctxt.MakeSignature(0,sigbuf,self._get_next_seq_num()) + return sigbuf[1].Buffer + + def verify(self, data, sig): + """Verifies data and its signature. If verification fails, an sspi.error + will be raised. + """ + sigbuf=win32security.PySecBufferDescType() + sigbuf.append(win32security.PySecBufferType(len(data), sspicon.SECBUFFER_DATA)) + sigbuf.append(win32security.PySecBufferType(len(sig), sspicon.SECBUFFER_TOKEN)) + + sigbuf[0].Buffer=data + sigbuf[1].Buffer=sig + self.ctxt.VerifySignature(sigbuf,self._get_next_seq_num()) + +class ClientAuth(_BaseAuth): + """Manages the client side of an SSPI authentication handshake + """ + def __init__(self, + pkg_name, # Name of the package to used. + client_name = None, # User for whom credentials are used. + auth_info = None, # or a tuple of (username, domain, password) + targetspn = None, # Target security context provider name. + scflags=None, # security context flags + datarep=sspicon.SECURITY_NETWORK_DREP): + if scflags is None: + scflags = sspicon.ISC_REQ_INTEGRITY|sspicon.ISC_REQ_SEQUENCE_DETECT|\ + sspicon.ISC_REQ_REPLAY_DETECT|sspicon.ISC_REQ_CONFIDENTIALITY + self.scflags=scflags + self.datarep=datarep + self.targetspn=targetspn + self.pkg_info=win32security.QuerySecurityPackageInfo(pkg_name) + self.credentials, \ + self.credentials_expiry=win32security.AcquireCredentialsHandle( + client_name, self.pkg_info['Name'], + sspicon.SECPKG_CRED_OUTBOUND, + None, auth_info) + _BaseAuth.__init__(self) + + # Perform *one* step of the client authentication process. + def authorize(self, sec_buffer_in): + if sec_buffer_in is not None and type(sec_buffer_in) != win32security.PySecBufferDescType: + # User passed us the raw data - wrap it into a SecBufferDesc + sec_buffer_new=win32security.PySecBufferDescType() + tokenbuf=win32security.PySecBufferType(self.pkg_info['MaxToken'], + sspicon.SECBUFFER_TOKEN) + tokenbuf.Buffer=sec_buffer_in + sec_buffer_new.append(tokenbuf) + sec_buffer_in = sec_buffer_new + sec_buffer_out=win32security.PySecBufferDescType() + tokenbuf=win32security.PySecBufferType(self.pkg_info['MaxToken'], sspicon.SECBUFFER_TOKEN) + sec_buffer_out.append(tokenbuf) + ## input context handle should be NULL on first call + ctxtin=self.ctxt + if self.ctxt is None: + self.ctxt=win32security.PyCtxtHandleType() + err, attr, exp=win32security.InitializeSecurityContext( + self.credentials, + ctxtin, + self.targetspn, + self.scflags, + self.datarep, + sec_buffer_in, + self.ctxt, + sec_buffer_out) + # Stash these away incase someone needs to know the state from the + # final call. + self.ctxt_attr = attr + self.ctxt_expiry = exp + + if err in (sspicon.SEC_I_COMPLETE_NEEDED,sspicon.SEC_I_COMPLETE_AND_CONTINUE): + self.ctxt.CompleteAuthToken(sec_buffer_out) + self.authenticated = err == 0 + return err, sec_buffer_out + +class ServerAuth(_BaseAuth): + """Manages the server side of an SSPI authentication handshake + """ + def __init__(self, + pkg_name, + spn = None, + scflags=None, + datarep=sspicon.SECURITY_NETWORK_DREP): + self.spn=spn + self.datarep=datarep + + if scflags is None: + scflags = sspicon.ASC_REQ_INTEGRITY|sspicon.ASC_REQ_SEQUENCE_DETECT|\ + sspicon.ASC_REQ_REPLAY_DETECT|sspicon.ASC_REQ_CONFIDENTIALITY + # Should we default to sspicon.KerbAddExtraCredentialsMessage + # if pkg_name=='Kerberos'? + self.scflags=scflags + + self.pkg_info=win32security.QuerySecurityPackageInfo(pkg_name) + + self.credentials, \ + self.credentials_expiry=win32security.AcquireCredentialsHandle(spn, + self.pkg_info['Name'], sspicon.SECPKG_CRED_INBOUND, None, None) + _BaseAuth.__init__(self) + + # Perform *one* step of the server authentication process. + def authorize(self, sec_buffer_in): + if sec_buffer_in is not None and type(sec_buffer_in) != win32security.PySecBufferDescType: + # User passed us the raw data - wrap it into a SecBufferDesc + sec_buffer_new=win32security.PySecBufferDescType() + tokenbuf=win32security.PySecBufferType(self.pkg_info['MaxToken'], + sspicon.SECBUFFER_TOKEN) + tokenbuf.Buffer=sec_buffer_in + sec_buffer_new.append(tokenbuf) + sec_buffer_in = sec_buffer_new + + sec_buffer_out=win32security.PySecBufferDescType() + tokenbuf=win32security.PySecBufferType(self.pkg_info['MaxToken'], sspicon.SECBUFFER_TOKEN) + sec_buffer_out.append(tokenbuf) + ## input context handle is None initially, then handle returned from last call thereafter + ctxtin=self.ctxt + if self.ctxt is None: + self.ctxt=win32security.PyCtxtHandleType() + err, attr, exp = win32security.AcceptSecurityContext(self.credentials, ctxtin, + sec_buffer_in, self.scflags, + self.datarep, self.ctxt, sec_buffer_out) + + # Stash these away incase someone needs to know the state from the + # final call. + self.ctxt_attr = attr + self.ctxt_expiry = exp + + if err in (sspicon.SEC_I_COMPLETE_NEEDED,sspicon.SEC_I_COMPLETE_AND_CONTINUE): + self.ctxt.CompleteAuthToken(sec_buffer_out) + self.authenticated = err == 0 + return err, sec_buffer_out + +if __name__=='__main__': + # Setup the 2 contexts. + sspiclient=ClientAuth("NTLM") + sspiserver=ServerAuth("NTLM") + + # Perform the authentication dance, each loop exchanging more information + # on the way to completing authentication. + sec_buffer=None + while 1: + err, sec_buffer = sspiclient.authorize(sec_buffer) + err, sec_buffer = sspiserver.authorize(sec_buffer) + if err==0: + break + sig = sspiclient.sign("hello") + sspiserver.verify("hello", sig) + + data, key = sspiclient.encrypt("hello") + assert sspiserver.decrypt(data, key) == "hello" + print "cool!" diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/sspicon.py b/thirdparty/python25/Lib/site-packages/win32/lib/sspicon.py new file mode 100644 index 000000000..4fc69d1a0 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/sspicon.py @@ -0,0 +1,479 @@ +# Generated by h2py from c:\microsoft sdk\include\sspi.h +ISSP_LEVEL = 32 +ISSP_MODE = 1 +ISSP_LEVEL = 32 +ISSP_MODE = 0 +ISSP_LEVEL = 32 +ISSP_MODE = 1 +def SEC_SUCCESS(Status): return ((Status) >= 0) + +SECPKG_FLAG_INTEGRITY = 1 +SECPKG_FLAG_PRIVACY = 2 +SECPKG_FLAG_TOKEN_ONLY = 4 +SECPKG_FLAG_DATAGRAM = 8 +SECPKG_FLAG_CONNECTION = 16 +SECPKG_FLAG_MULTI_REQUIRED = 32 +SECPKG_FLAG_CLIENT_ONLY = 64 +SECPKG_FLAG_EXTENDED_ERROR = 128 +SECPKG_FLAG_IMPERSONATION = 256 +SECPKG_FLAG_ACCEPT_WIN32_NAME = 512 +SECPKG_FLAG_STREAM = 1024 +SECPKG_FLAG_NEGOTIABLE = 2048 +SECPKG_FLAG_GSS_COMPATIBLE = 4096 +SECPKG_FLAG_LOGON = 8192 +SECPKG_FLAG_ASCII_BUFFERS = 16384 +SECPKG_FLAG_FRAGMENT = 32768 +SECPKG_FLAG_MUTUAL_AUTH = 65536 +SECPKG_FLAG_DELEGATION = 131072 +SECPKG_FLAG_READONLY_WITH_CHECKSUM = 262144 +SECPKG_ID_NONE = 65535 + +SECBUFFER_VERSION = 0 +SECBUFFER_EMPTY = 0 +SECBUFFER_DATA = 1 +SECBUFFER_TOKEN = 2 +SECBUFFER_PKG_PARAMS = 3 +SECBUFFER_MISSING = 4 +SECBUFFER_EXTRA = 5 +SECBUFFER_STREAM_TRAILER = 6 +SECBUFFER_STREAM_HEADER = 7 +SECBUFFER_NEGOTIATION_INFO = 8 +SECBUFFER_PADDING = 9 +SECBUFFER_STREAM = 10 +SECBUFFER_MECHLIST = 11 +SECBUFFER_MECHLIST_SIGNATURE = 12 +SECBUFFER_TARGET = 13 +SECBUFFER_CHANNEL_BINDINGS = 14 +SECBUFFER_ATTRMASK = (-268435456) +SECBUFFER_READONLY = (-2147483648) +SECBUFFER_READONLY_WITH_CHECKSUM = 268435456 +SECBUFFER_RESERVED = 1610612736 + +SECURITY_NATIVE_DREP = 16 +SECURITY_NETWORK_DREP = 0 + +SECPKG_CRED_INBOUND = 1 +SECPKG_CRED_OUTBOUND = 2 +SECPKG_CRED_BOTH = 3 +SECPKG_CRED_DEFAULT = 4 +SECPKG_CRED_RESERVED = -268435456 + +ISC_REQ_DELEGATE = 1 +ISC_REQ_MUTUAL_AUTH = 2 +ISC_REQ_REPLAY_DETECT = 4 +ISC_REQ_SEQUENCE_DETECT = 8 +ISC_REQ_CONFIDENTIALITY = 16 +ISC_REQ_USE_SESSION_KEY = 32 +ISC_REQ_PROMPT_FOR_CREDS = 64 +ISC_REQ_USE_SUPPLIED_CREDS = 128 +ISC_REQ_ALLOCATE_MEMORY = 256 +ISC_REQ_USE_DCE_STYLE = 512 +ISC_REQ_DATAGRAM = 1024 +ISC_REQ_CONNECTION = 2048 +ISC_REQ_CALL_LEVEL = 4096 +ISC_REQ_FRAGMENT_SUPPLIED = 8192 +ISC_REQ_EXTENDED_ERROR = 16384 +ISC_REQ_STREAM = 32768 +ISC_REQ_INTEGRITY = 65536 +ISC_REQ_IDENTIFY = 131072 +ISC_REQ_NULL_SESSION = 262144 +ISC_REQ_MANUAL_CRED_VALIDATION = 524288 +ISC_REQ_RESERVED1 = 1048576 +ISC_REQ_FRAGMENT_TO_FIT = 2097152 +ISC_REQ_HTTP = 0x10000000 +ISC_RET_DELEGATE = 1 +ISC_RET_MUTUAL_AUTH = 2 +ISC_RET_REPLAY_DETECT = 4 +ISC_RET_SEQUENCE_DETECT = 8 +ISC_RET_CONFIDENTIALITY = 16 +ISC_RET_USE_SESSION_KEY = 32 +ISC_RET_USED_COLLECTED_CREDS = 64 +ISC_RET_USED_SUPPLIED_CREDS = 128 +ISC_RET_ALLOCATED_MEMORY = 256 +ISC_RET_USED_DCE_STYLE = 512 +ISC_RET_DATAGRAM = 1024 +ISC_RET_CONNECTION = 2048 +ISC_RET_INTERMEDIATE_RETURN = 4096 +ISC_RET_CALL_LEVEL = 8192 +ISC_RET_EXTENDED_ERROR = 16384 +ISC_RET_STREAM = 32768 +ISC_RET_INTEGRITY = 65536 +ISC_RET_IDENTIFY = 131072 +ISC_RET_NULL_SESSION = 262144 +ISC_RET_MANUAL_CRED_VALIDATION = 524288 +ISC_RET_RESERVED1 = 1048576 +ISC_RET_FRAGMENT_ONLY = 2097152 + +ASC_REQ_DELEGATE = 1 +ASC_REQ_MUTUAL_AUTH = 2 +ASC_REQ_REPLAY_DETECT = 4 +ASC_REQ_SEQUENCE_DETECT = 8 +ASC_REQ_CONFIDENTIALITY = 16 +ASC_REQ_USE_SESSION_KEY = 32 +ASC_REQ_ALLOCATE_MEMORY = 256 +ASC_REQ_USE_DCE_STYLE = 512 +ASC_REQ_DATAGRAM = 1024 +ASC_REQ_CONNECTION = 2048 +ASC_REQ_CALL_LEVEL = 4096 +ASC_REQ_EXTENDED_ERROR = 32768 +ASC_REQ_STREAM = 65536 +ASC_REQ_INTEGRITY = 131072 +ASC_REQ_LICENSING = 262144 +ASC_REQ_IDENTIFY = 524288 +ASC_REQ_ALLOW_NULL_SESSION = 1048576 +ASC_REQ_ALLOW_NON_USER_LOGONS = 2097152 +ASC_REQ_ALLOW_CONTEXT_REPLAY = 4194304 +ASC_REQ_FRAGMENT_TO_FIT = 8388608 +ASC_REQ_FRAGMENT_SUPPLIED = 8192 +ASC_REQ_NO_TOKEN = 16777216 +ASC_RET_DELEGATE = 1 +ASC_RET_MUTUAL_AUTH = 2 +ASC_RET_REPLAY_DETECT = 4 +ASC_RET_SEQUENCE_DETECT = 8 +ASC_RET_CONFIDENTIALITY = 16 +ASC_RET_USE_SESSION_KEY = 32 +ASC_RET_ALLOCATED_MEMORY = 256 +ASC_RET_USED_DCE_STYLE = 512 +ASC_RET_DATAGRAM = 1024 +ASC_RET_CONNECTION = 2048 +ASC_RET_CALL_LEVEL = 8192 +ASC_RET_THIRD_LEG_FAILED = 16384 +ASC_RET_EXTENDED_ERROR = 32768 +ASC_RET_STREAM = 65536 +ASC_RET_INTEGRITY = 131072 +ASC_RET_LICENSING = 262144 +ASC_RET_IDENTIFY = 524288 +ASC_RET_NULL_SESSION = 1048576 +ASC_RET_ALLOW_NON_USER_LOGONS = 2097152 +ASC_RET_ALLOW_CONTEXT_REPLAY = 4194304 +ASC_RET_FRAGMENT_ONLY = 8388608 + +SECPKG_CRED_ATTR_NAMES = 1 +SECPKG_ATTR_SIZES = 0 +SECPKG_ATTR_NAMES = 1 +SECPKG_ATTR_LIFESPAN = 2 +SECPKG_ATTR_DCE_INFO = 3 +SECPKG_ATTR_STREAM_SIZES = 4 +SECPKG_ATTR_KEY_INFO = 5 +SECPKG_ATTR_AUTHORITY = 6 +SECPKG_ATTR_PROTO_INFO = 7 +SECPKG_ATTR_PASSWORD_EXPIRY = 8 +SECPKG_ATTR_SESSION_KEY = 9 +SECPKG_ATTR_PACKAGE_INFO = 10 +SECPKG_ATTR_USER_FLAGS = 11 +SECPKG_ATTR_NEGOTIATION_INFO = 12 +SECPKG_ATTR_NATIVE_NAMES = 13 +SECPKG_ATTR_FLAGS = 14 +SECPKG_ATTR_USE_VALIDATED = 15 +SECPKG_ATTR_CREDENTIAL_NAME = 16 +SECPKG_ATTR_TARGET_INFORMATION = 17 +SECPKG_ATTR_ACCESS_TOKEN = 18 +SECPKG_ATTR_TARGET = 19 +SECPKG_ATTR_AUTHENTICATION_ID = 20 + +## attributes from schannel.h +SECPKG_ATTR_REMOTE_CERT_CONTEXT = 83 +SECPKG_ATTR_LOCAL_CERT_CONTEXT = 84 +SECPKG_ATTR_ROOT_STORE = 85 +SECPKG_ATTR_SUPPORTED_ALGS = 86 +SECPKG_ATTR_CIPHER_STRENGTHS = 87 +SECPKG_ATTR_SUPPORTED_PROTOCOLS = 88 +SECPKG_ATTR_ISSUER_LIST_EX = 89 +SECPKG_ATTR_CONNECTION_INFO = 90 +SECPKG_ATTR_EAP_KEY_BLOCK = 91 +SECPKG_ATTR_MAPPED_CRED_ATTR = 92 +SECPKG_ATTR_SESSION_INFO = 93 +SECPKG_ATTR_APP_DATA = 94 + +SECPKG_NEGOTIATION_COMPLETE = 0 +SECPKG_NEGOTIATION_OPTIMISTIC = 1 +SECPKG_NEGOTIATION_IN_PROGRESS = 2 +SECPKG_NEGOTIATION_DIRECT = 3 +SECPKG_NEGOTIATION_TRY_MULTICRED = 4 +SECPKG_CONTEXT_EXPORT_RESET_NEW = 1 +SECPKG_CONTEXT_EXPORT_DELETE_OLD = 2 +SECQOP_WRAP_NO_ENCRYPT = (-2147483647) +SECURITY_ENTRYPOINT_ANSIW = "InitSecurityInterfaceW" +SECURITY_ENTRYPOINT_ANSIA = "InitSecurityInterfaceA" +SECURITY_ENTRYPOINT16 = "INITSECURITYINTERFACEA" +SECURITY_ENTRYPOINT_ANSI = SECURITY_ENTRYPOINT_ANSIW +SECURITY_ENTRYPOINT_ANSI = SECURITY_ENTRYPOINT_ANSIA +SECURITY_ENTRYPOINT = SECURITY_ENTRYPOINT16 +SECURITY_ENTRYPOINT_ANSI = SECURITY_ENTRYPOINT16 +SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION = 1 +SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 = 2 +SASL_OPTION_SEND_SIZE = 1 +SASL_OPTION_RECV_SIZE = 2 +SASL_OPTION_AUTHZ_STRING = 3 +SASL_OPTION_AUTHZ_PROCESSING = 4 +SEC_WINNT_AUTH_IDENTITY_ANSI = 1 +SEC_WINNT_AUTH_IDENTITY_UNICODE = 2 +SEC_WINNT_AUTH_IDENTITY_VERSION = 512 +SEC_WINNT_AUTH_IDENTITY_MARSHALLED = 4 +SEC_WINNT_AUTH_IDENTITY_ONLY = 8 +SECPKG_OPTIONS_TYPE_UNKNOWN = 0 +SECPKG_OPTIONS_TYPE_LSA = 1 +SECPKG_OPTIONS_TYPE_SSPI = 2 +SECPKG_OPTIONS_PERMANENT = 1 + +SEC_E_INSUFFICIENT_MEMORY = -2146893056 +SEC_E_INVALID_HANDLE = -2146893055 +SEC_E_UNSUPPORTED_FUNCTION = -2146893054 +SEC_E_TARGET_UNKNOWN = -2146893053 +SEC_E_INTERNAL_ERROR = -2146893052 +SEC_E_SECPKG_NOT_FOUND = -2146893051 +SEC_E_NOT_OWNER = -2146893050 +SEC_E_CANNOT_INSTALL = -2146893049 +SEC_E_INVALID_TOKEN = -2146893048 +SEC_E_CANNOT_PACK = -2146893047 +SEC_E_QOP_NOT_SUPPORTED = -2146893046 +SEC_E_NO_IMPERSONATION = -2146893045 +SEC_E_LOGON_DENIED = -2146893044 +SEC_E_UNKNOWN_CREDENTIALS = -2146893043 +SEC_E_NO_CREDENTIALS = -2146893042 +SEC_E_MESSAGE_ALTERED = -2146893041 +SEC_E_OUT_OF_SEQUENCE = -2146893040 +SEC_E_NO_AUTHENTICATING_AUTHORITY = -2146893039 +SEC_I_CONTINUE_NEEDED = 590610 +SEC_I_COMPLETE_NEEDED = 590611 +SEC_I_COMPLETE_AND_CONTINUE = 590612 +SEC_I_LOCAL_LOGON = 590613 +SEC_E_BAD_PKGID = -2146893034 +SEC_E_CONTEXT_EXPIRED = -2146893033 +SEC_I_CONTEXT_EXPIRED = 590615 +SEC_E_INCOMPLETE_MESSAGE = -2146893032 +SEC_E_INCOMPLETE_CREDENTIALS = -2146893024 +SEC_E_BUFFER_TOO_SMALL = -2146893023 +SEC_I_INCOMPLETE_CREDENTIALS = 590624 +SEC_I_RENEGOTIATE = 590625 +SEC_E_WRONG_PRINCIPAL = -2146893022 +SEC_I_NO_LSA_CONTEXT = 590627 +SEC_E_TIME_SKEW = -2146893020 +SEC_E_UNTRUSTED_ROOT = -2146893019 +SEC_E_ILLEGAL_MESSAGE = -2146893018 +SEC_E_CERT_UNKNOWN = -2146893017 +SEC_E_CERT_EXPIRED = -2146893016 +SEC_E_ENCRYPT_FAILURE = -2146893015 +SEC_E_DECRYPT_FAILURE = -2146893008 +SEC_E_ALGORITHM_MISMATCH = -2146893007 +SEC_E_SECURITY_QOS_FAILED = -2146893006 +SEC_E_UNFINISHED_CONTEXT_DELETED = -2146893005 +SEC_E_NO_TGT_REPLY = -2146893004 +SEC_E_NO_IP_ADDRESSES = -2146893003 +SEC_E_WRONG_CREDENTIAL_HANDLE = -2146893002 +SEC_E_CRYPTO_SYSTEM_INVALID = -2146893001 +SEC_E_MAX_REFERRALS_EXCEEDED = -2146893000 +SEC_E_MUST_BE_KDC = -2146892999 +SEC_E_STRONG_CRYPTO_NOT_SUPPORTED = -2146892998 +SEC_E_TOO_MANY_PRINCIPALS = -2146892997 +SEC_E_NO_PA_DATA = -2146892996 +SEC_E_PKINIT_NAME_MISMATCH = -2146892995 +SEC_E_SMARTCARD_LOGON_REQUIRED = -2146892994 +SEC_E_SHUTDOWN_IN_PROGRESS = -2146892993 +SEC_E_KDC_INVALID_REQUEST = -2146892992 +SEC_E_KDC_UNABLE_TO_REFER = -2146892991 +SEC_E_KDC_UNKNOWN_ETYPE = -2146892990 +SEC_E_UNSUPPORTED_PREAUTH = -2146892989 +SEC_E_DELEGATION_REQUIRED = -2146892987 +SEC_E_BAD_BINDINGS = -2146892986 +SEC_E_MULTIPLE_ACCOUNTS = -2146892985 +SEC_E_NO_KERB_KEY = -2146892984 + +ERROR_IPSEC_QM_POLICY_EXISTS = 13000L +ERROR_IPSEC_QM_POLICY_NOT_FOUND = 13001L +ERROR_IPSEC_QM_POLICY_IN_USE = 13002L +ERROR_IPSEC_MM_POLICY_EXISTS = 13003L +ERROR_IPSEC_MM_POLICY_NOT_FOUND = 13004L +ERROR_IPSEC_MM_POLICY_IN_USE = 13005L +ERROR_IPSEC_MM_FILTER_EXISTS = 13006L +ERROR_IPSEC_MM_FILTER_NOT_FOUND = 13007L +ERROR_IPSEC_TRANSPORT_FILTER_EXISTS = 13008L +ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND = 13009L +ERROR_IPSEC_MM_AUTH_EXISTS = 13010L +ERROR_IPSEC_MM_AUTH_NOT_FOUND = 13011L +ERROR_IPSEC_MM_AUTH_IN_USE = 13012L +ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND = 13013L +ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND = 13014L +ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND = 13015L +ERROR_IPSEC_TUNNEL_FILTER_EXISTS = 13016L +ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND = 13017L +ERROR_IPSEC_MM_FILTER_PENDING_DELETION = 13018L +ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION = 13019L +ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION = 13020L +ERROR_IPSEC_MM_POLICY_PENDING_DELETION = 13021L +ERROR_IPSEC_MM_AUTH_PENDING_DELETION = 13022L +ERROR_IPSEC_QM_POLICY_PENDING_DELETION = 13023L +WARNING_IPSEC_MM_POLICY_PRUNED = 13024L +WARNING_IPSEC_QM_POLICY_PRUNED = 13025L +ERROR_IPSEC_IKE_NEG_STATUS_BEGIN = 13800L +ERROR_IPSEC_IKE_AUTH_FAIL = 13801L +ERROR_IPSEC_IKE_ATTRIB_FAIL = 13802L +ERROR_IPSEC_IKE_NEGOTIATION_PENDING = 13803L +ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR = 13804L +ERROR_IPSEC_IKE_TIMED_OUT = 13805L +ERROR_IPSEC_IKE_NO_CERT = 13806L +ERROR_IPSEC_IKE_SA_DELETED = 13807L +ERROR_IPSEC_IKE_SA_REAPED = 13808L +ERROR_IPSEC_IKE_MM_ACQUIRE_DROP = 13809L +ERROR_IPSEC_IKE_QM_ACQUIRE_DROP = 13810L +ERROR_IPSEC_IKE_QUEUE_DROP_MM = 13811L +ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM = 13812L +ERROR_IPSEC_IKE_DROP_NO_RESPONSE = 13813L +ERROR_IPSEC_IKE_MM_DELAY_DROP = 13814L +ERROR_IPSEC_IKE_QM_DELAY_DROP = 13815L +ERROR_IPSEC_IKE_ERROR = 13816L +ERROR_IPSEC_IKE_CRL_FAILED = 13817L +ERROR_IPSEC_IKE_INVALID_KEY_USAGE = 13818L +ERROR_IPSEC_IKE_INVALID_CERT_TYPE = 13819L +ERROR_IPSEC_IKE_NO_PRIVATE_KEY = 13820L +ERROR_IPSEC_IKE_DH_FAIL = 13822L +ERROR_IPSEC_IKE_INVALID_HEADER = 13824L +ERROR_IPSEC_IKE_NO_POLICY = 13825L +ERROR_IPSEC_IKE_INVALID_SIGNATURE = 13826L +ERROR_IPSEC_IKE_KERBEROS_ERROR = 13827L +ERROR_IPSEC_IKE_NO_PUBLIC_KEY = 13828L +ERROR_IPSEC_IKE_PROCESS_ERR = 13829L +ERROR_IPSEC_IKE_PROCESS_ERR_SA = 13830L +ERROR_IPSEC_IKE_PROCESS_ERR_PROP = 13831L +ERROR_IPSEC_IKE_PROCESS_ERR_TRANS = 13832L +ERROR_IPSEC_IKE_PROCESS_ERR_KE = 13833L +ERROR_IPSEC_IKE_PROCESS_ERR_ID = 13834L +ERROR_IPSEC_IKE_PROCESS_ERR_CERT = 13835L +ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ = 13836L +ERROR_IPSEC_IKE_PROCESS_ERR_HASH = 13837L +ERROR_IPSEC_IKE_PROCESS_ERR_SIG = 13838L +ERROR_IPSEC_IKE_PROCESS_ERR_NONCE = 13839L +ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY = 13840L +ERROR_IPSEC_IKE_PROCESS_ERR_DELETE = 13841L +ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR = 13842L +ERROR_IPSEC_IKE_INVALID_PAYLOAD = 13843L +ERROR_IPSEC_IKE_LOAD_SOFT_SA = 13844L +ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN = 13845L +ERROR_IPSEC_IKE_INVALID_COOKIE = 13846L +ERROR_IPSEC_IKE_NO_PEER_CERT = 13847L +ERROR_IPSEC_IKE_PEER_CRL_FAILED = 13848L +ERROR_IPSEC_IKE_POLICY_CHANGE = 13849L +ERROR_IPSEC_IKE_NO_MM_POLICY = 13850L +ERROR_IPSEC_IKE_NOTCBPRIV = 13851L +ERROR_IPSEC_IKE_SECLOADFAIL = 13852L +ERROR_IPSEC_IKE_FAILSSPINIT = 13853L +ERROR_IPSEC_IKE_FAILQUERYSSP = 13854L +ERROR_IPSEC_IKE_SRVACQFAIL = 13855L +ERROR_IPSEC_IKE_SRVQUERYCRED = 13856L +ERROR_IPSEC_IKE_GETSPIFAIL = 13857L +ERROR_IPSEC_IKE_INVALID_FILTER = 13858L +ERROR_IPSEC_IKE_OUT_OF_MEMORY = 13859L +ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED = 13860L +ERROR_IPSEC_IKE_INVALID_POLICY = 13861L +ERROR_IPSEC_IKE_UNKNOWN_DOI = 13862L +ERROR_IPSEC_IKE_INVALID_SITUATION = 13863L +ERROR_IPSEC_IKE_DH_FAILURE = 13864L +ERROR_IPSEC_IKE_INVALID_GROUP = 13865L +ERROR_IPSEC_IKE_ENCRYPT = 13866L +ERROR_IPSEC_IKE_DECRYPT = 13867L +ERROR_IPSEC_IKE_POLICY_MATCH = 13868L +ERROR_IPSEC_IKE_UNSUPPORTED_ID = 13869L +ERROR_IPSEC_IKE_INVALID_HASH = 13870L +ERROR_IPSEC_IKE_INVALID_HASH_ALG = 13871L +ERROR_IPSEC_IKE_INVALID_HASH_SIZE = 13872L +ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG = 13873L +ERROR_IPSEC_IKE_INVALID_AUTH_ALG = 13874L +ERROR_IPSEC_IKE_INVALID_SIG = 13875L +ERROR_IPSEC_IKE_LOAD_FAILED = 13876L +ERROR_IPSEC_IKE_RPC_DELETE = 13877L +ERROR_IPSEC_IKE_BENIGN_REINIT = 13878L +ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY = 13879L +ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN = 13881L +ERROR_IPSEC_IKE_MM_LIMIT = 13882L +ERROR_IPSEC_IKE_NEGOTIATION_DISABLED = 13883L +ERROR_IPSEC_IKE_NEG_STATUS_END = 13884L +CRYPT_E_MSG_ERROR = ((-2146889727)) +CRYPT_E_UNKNOWN_ALGO = ((-2146889726)) +CRYPT_E_OID_FORMAT = ((-2146889725)) +CRYPT_E_INVALID_MSG_TYPE = ((-2146889724)) +CRYPT_E_UNEXPECTED_ENCODING = ((-2146889723)) +CRYPT_E_AUTH_ATTR_MISSING = ((-2146889722)) +CRYPT_E_HASH_VALUE = ((-2146889721)) +CRYPT_E_INVALID_INDEX = ((-2146889720)) +CRYPT_E_ALREADY_DECRYPTED = ((-2146889719)) +CRYPT_E_NOT_DECRYPTED = ((-2146889718)) +CRYPT_E_RECIPIENT_NOT_FOUND = ((-2146889717)) +CRYPT_E_CONTROL_TYPE = ((-2146889716)) +CRYPT_E_ISSUER_SERIALNUMBER = ((-2146889715)) +CRYPT_E_SIGNER_NOT_FOUND = ((-2146889714)) +CRYPT_E_ATTRIBUTES_MISSING = ((-2146889713)) +CRYPT_E_STREAM_MSG_NOT_READY = ((-2146889712)) +CRYPT_E_STREAM_INSUFFICIENT_DATA = ((-2146889711)) +CRYPT_I_NEW_PROTECTION_REQUIRED = (593938) +CRYPT_E_BAD_LEN = ((-2146885631)) +CRYPT_E_BAD_ENCODE = ((-2146885630)) +CRYPT_E_FILE_ERROR = ((-2146885629)) +CRYPT_E_NOT_FOUND = ((-2146885628)) +CRYPT_E_EXISTS = ((-2146885627)) +CRYPT_E_NO_PROVIDER = ((-2146885626)) +CRYPT_E_SELF_SIGNED = ((-2146885625)) +CRYPT_E_DELETED_PREV = ((-2146885624)) +CRYPT_E_NO_MATCH = ((-2146885623)) +CRYPT_E_UNEXPECTED_MSG_TYPE = ((-2146885622)) +CRYPT_E_NO_KEY_PROPERTY = ((-2146885621)) +CRYPT_E_NO_DECRYPT_CERT = ((-2146885620)) +CRYPT_E_BAD_MSG = ((-2146885619)) +CRYPT_E_NO_SIGNER = ((-2146885618)) +CRYPT_E_PENDING_CLOSE = ((-2146885617)) +CRYPT_E_REVOKED = ((-2146885616)) +CRYPT_E_NO_REVOCATION_DLL = ((-2146885615)) +CRYPT_E_NO_REVOCATION_CHECK = ((-2146885614)) +CRYPT_E_REVOCATION_OFFLINE = ((-2146885613)) +CRYPT_E_NOT_IN_REVOCATION_DATABASE = ((-2146885612)) +CRYPT_E_INVALID_NUMERIC_STRING = ((-2146885600)) +CRYPT_E_INVALID_PRINTABLE_STRING = ((-2146885599)) +CRYPT_E_INVALID_IA5_STRING = ((-2146885598)) +CRYPT_E_INVALID_X500_STRING = ((-2146885597)) +CRYPT_E_NOT_CHAR_STRING = ((-2146885596)) +CRYPT_E_FILERESIZED = ((-2146885595)) +CRYPT_E_SECURITY_SETTINGS = ((-2146885594)) +CRYPT_E_NO_VERIFY_USAGE_DLL = ((-2146885593)) +CRYPT_E_NO_VERIFY_USAGE_CHECK = ((-2146885592)) +CRYPT_E_VERIFY_USAGE_OFFLINE = ((-2146885591)) +CRYPT_E_NOT_IN_CTL = ((-2146885590)) +CRYPT_E_NO_TRUSTED_SIGNER = ((-2146885589)) +CRYPT_E_MISSING_PUBKEY_PARA = ((-2146885588)) +CRYPT_E_OSS_ERROR = ((-2146881536)) + +## Kerberos message types for LsaCallAuthenticationPackage (from ntsecapi.h) +KerbDebugRequestMessage = 0 +KerbQueryTicketCacheMessage = 1 +KerbChangeMachinePasswordMessage = 2 +KerbVerifyPacMessage = 3 +KerbRetrieveTicketMessage = 4 +KerbUpdateAddressesMessage = 5 +KerbPurgeTicketCacheMessage = 6 +KerbChangePasswordMessage = 7 +KerbRetrieveEncodedTicketMessage = 8 +KerbDecryptDataMessage = 9 +KerbAddBindingCacheEntryMessage = 10 +KerbSetPasswordMessage = 11 +KerbSetPasswordExMessage = 12 +KerbVerifyCredentialsMessage = 13 +KerbQueryTicketCacheExMessage = 14 +KerbPurgeTicketCacheExMessage = 15 +KerbRefreshSmartcardCredentialsMessage = 16 +KerbAddExtraCredentialsMessage = 17 +KerbQuerySupplementalCredentialsMessage = 18 + +## messages used with msv1_0 from ntsecapi.h +MsV1_0Lm20ChallengeRequest = 0 +MsV1_0Lm20GetChallengeResponse = 1 +MsV1_0EnumerateUsers = 2 +MsV1_0GetUserInfo = 3 +MsV1_0ReLogonUsers = 4 +MsV1_0ChangePassword = 5 +MsV1_0ChangeCachedPassword = 6 +MsV1_0GenericPassthrough = 7 +MsV1_0CacheLogon = 8 +MsV1_0SubAuth = 9 +MsV1_0DeriveCredential = 10 +MsV1_0CacheLookup = 11 +MsV1_0SetProcessOption = 12 + +SEC_E_OK = 0 diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/win32con.py b/thirdparty/python25/Lib/site-packages/win32/lib/win32con.py new file mode 100644 index 000000000..d4ecda39a --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/win32con.py @@ -0,0 +1,4870 @@ +# Generated by h2py from commdlg.h (plus modifications 4jan98) +WINVER = 1280 +WM_USER = 1024 +PY_0U = 0 +OFN_READONLY = 1 +OFN_OVERWRITEPROMPT = 2 +OFN_HIDEREADONLY = 4 +OFN_NOCHANGEDIR = 8 +OFN_SHOWHELP = 16 +OFN_ENABLEHOOK = 32 +OFN_ENABLETEMPLATE = 64 +OFN_ENABLETEMPLATEHANDLE = 128 +OFN_NOVALIDATE = 256 +OFN_ALLOWMULTISELECT = 512 +OFN_EXTENSIONDIFFERENT = 1024 +OFN_PATHMUSTEXIST = 2048 +OFN_FILEMUSTEXIST = 4096 +OFN_CREATEPROMPT = 8192 +OFN_SHAREAWARE = 16384 +OFN_NOREADONLYRETURN = 32768 +OFN_NOTESTFILECREATE = 65536 +OFN_NONETWORKBUTTON = 131072 +OFN_NOLONGNAMES = 262144 +OFN_EXPLORER = 524288 # new look commdlg +OFN_NODEREFERENCELINKS = 1048576 +OFN_LONGNAMES = 2097152 # force long names for 3.x modules +OFN_ENABLEINCLUDENOTIFY = 4194304 # send include message to callback +OFN_ENABLESIZING = 8388608 +OFN_DONTADDTORECENT = 33554432 +OFN_FORCESHOWHIDDEN = 268435456 # Show All files including System and hidden files +OFN_EX_NOPLACESBAR = 1 +OFN_SHAREFALLTHROUGH = 2 +OFN_SHARENOWARN = 1 +OFN_SHAREWARN = 0 +CDN_FIRST = (PY_0U-601) +CDN_LAST = (PY_0U-699) +CDN_INITDONE = (CDN_FIRST - 0) +CDN_SELCHANGE = (CDN_FIRST - 1) +CDN_FOLDERCHANGE = (CDN_FIRST - 2) +CDN_SHAREVIOLATION = (CDN_FIRST - 3) +CDN_HELP = (CDN_FIRST - 4) +CDN_FILEOK = (CDN_FIRST - 5) +CDN_TYPECHANGE = (CDN_FIRST - 6) +CDN_INCLUDEITEM = (CDN_FIRST - 7) +CDM_FIRST = (WM_USER + 100) +CDM_LAST = (WM_USER + 200) +CDM_GETSPEC = (CDM_FIRST + 0) +CDM_GETFILEPATH = (CDM_FIRST + 1) +CDM_GETFOLDERPATH = (CDM_FIRST + 2) +CDM_GETFOLDERIDLIST = (CDM_FIRST + 3) +CDM_SETCONTROLTEXT = (CDM_FIRST + 4) +CDM_HIDECONTROL = (CDM_FIRST + 5) +CDM_SETDEFEXT = (CDM_FIRST + 6) +CC_RGBINIT = 1 +CC_FULLOPEN = 2 +CC_PREVENTFULLOPEN = 4 +CC_SHOWHELP = 8 +CC_ENABLEHOOK = 16 +CC_ENABLETEMPLATE = 32 +CC_ENABLETEMPLATEHANDLE = 64 +CC_SOLIDCOLOR = 128 +CC_ANYCOLOR = 256 +FR_DOWN = 1 +FR_WHOLEWORD = 2 +FR_MATCHCASE = 4 +FR_FINDNEXT = 8 +FR_REPLACE = 16 +FR_REPLACEALL = 32 +FR_DIALOGTERM = 64 +FR_SHOWHELP = 128 +FR_ENABLEHOOK = 256 +FR_ENABLETEMPLATE = 512 +FR_NOUPDOWN = 1024 +FR_NOMATCHCASE = 2048 +FR_NOWHOLEWORD = 4096 +FR_ENABLETEMPLATEHANDLE = 8192 +FR_HIDEUPDOWN = 16384 +FR_HIDEMATCHCASE = 32768 +FR_HIDEWHOLEWORD = 65536 +CF_SCREENFONTS = 1 +CF_PRINTERFONTS = 2 +CF_BOTH = (CF_SCREENFONTS | CF_PRINTERFONTS) +CF_SHOWHELP = 4 +CF_ENABLEHOOK = 8 +CF_ENABLETEMPLATE = 16 +CF_ENABLETEMPLATEHANDLE = 32 +CF_INITTOLOGFONTSTRUCT = 64 +CF_USESTYLE = 128 +CF_EFFECTS = 256 +CF_APPLY = 512 +CF_ANSIONLY = 1024 +CF_SCRIPTSONLY = CF_ANSIONLY +CF_NOVECTORFONTS = 2048 +CF_NOOEMFONTS = CF_NOVECTORFONTS +CF_NOSIMULATIONS = 4096 +CF_LIMITSIZE = 8192 +CF_FIXEDPITCHONLY = 16384 +CF_WYSIWYG = 32768 # must also have CF_SCREENFONTS & CF_PRINTERFONTS +CF_FORCEFONTEXIST = 65536 +CF_SCALABLEONLY = 131072 +CF_TTONLY = 262144 +CF_NOFACESEL = 524288 +CF_NOSTYLESEL = 1048576 +CF_NOSIZESEL = 2097152 +CF_SELECTSCRIPT = 4194304 +CF_NOSCRIPTSEL = 8388608 +CF_NOVERTFONTS = 16777216 +SIMULATED_FONTTYPE = 32768 +PRINTER_FONTTYPE = 16384 +SCREEN_FONTTYPE = 8192 +BOLD_FONTTYPE = 256 +ITALIC_FONTTYPE = 512 +REGULAR_FONTTYPE = 1024 +OPENTYPE_FONTTYPE = 65536 +TYPE1_FONTTYPE = 131072 +DSIG_FONTTYPE = 262144 +WM_CHOOSEFONT_GETLOGFONT = (WM_USER + 1) +WM_CHOOSEFONT_SETLOGFONT = (WM_USER + 101) +WM_CHOOSEFONT_SETFLAGS = (WM_USER + 102) +LBSELCHSTRINGA = "commdlg_LBSelChangedNotify" +SHAREVISTRINGA = "commdlg_ShareViolation" +FILEOKSTRINGA = "commdlg_FileNameOK" +COLOROKSTRINGA = "commdlg_ColorOK" +SETRGBSTRINGA = "commdlg_SetRGBColor" +HELPMSGSTRINGA = "commdlg_help" +FINDMSGSTRINGA = "commdlg_FindReplace" +LBSELCHSTRING = LBSELCHSTRINGA +SHAREVISTRING = SHAREVISTRINGA +FILEOKSTRING = FILEOKSTRINGA +COLOROKSTRING = COLOROKSTRINGA +SETRGBSTRING = SETRGBSTRINGA +HELPMSGSTRING = HELPMSGSTRINGA +FINDMSGSTRING = FINDMSGSTRINGA +CD_LBSELNOITEMS = -1 +CD_LBSELCHANGE = 0 +CD_LBSELSUB = 1 +CD_LBSELADD = 2 +PD_ALLPAGES = 0 +PD_SELECTION = 1 +PD_PAGENUMS = 2 +PD_NOSELECTION = 4 +PD_NOPAGENUMS = 8 +PD_COLLATE = 16 +PD_PRINTTOFILE = 32 +PD_PRINTSETUP = 64 +PD_NOWARNING = 128 +PD_RETURNDC = 256 +PD_RETURNIC = 512 +PD_RETURNDEFAULT = 1024 +PD_SHOWHELP = 2048 +PD_ENABLEPRINTHOOK = 4096 +PD_ENABLESETUPHOOK = 8192 +PD_ENABLEPRINTTEMPLATE = 16384 +PD_ENABLESETUPTEMPLATE = 32768 +PD_ENABLEPRINTTEMPLATEHANDLE = 65536 +PD_ENABLESETUPTEMPLATEHANDLE = 131072 +PD_USEDEVMODECOPIES = 262144 +PD_DISABLEPRINTTOFILE = 524288 +PD_HIDEPRINTTOFILE = 1048576 +PD_NONETWORKBUTTON = 2097152 +DN_DEFAULTPRN = 1 +WM_PSD_PAGESETUPDLG = (WM_USER ) +WM_PSD_FULLPAGERECT = (WM_USER+1) +WM_PSD_MINMARGINRECT = (WM_USER+2) +WM_PSD_MARGINRECT = (WM_USER+3) +WM_PSD_GREEKTEXTRECT = (WM_USER+4) +WM_PSD_ENVSTAMPRECT = (WM_USER+5) +WM_PSD_YAFULLPAGERECT = (WM_USER+6) +PSD_DEFAULTMINMARGINS = 0 # default (printer's) +PSD_INWININIINTLMEASURE = 0 # 1st of 4 possible +PSD_MINMARGINS = 1 # use caller's +PSD_MARGINS = 2 # use caller's +PSD_INTHOUSANDTHSOFINCHES = 4 # 2nd of 4 possible +PSD_INHUNDREDTHSOFMILLIMETERS = 8 # 3rd of 4 possible +PSD_DISABLEMARGINS = 16 +PSD_DISABLEPRINTER = 32 +PSD_NOWARNING = 128 # must be same as PD_* +PSD_DISABLEORIENTATION = 256 +PSD_RETURNDEFAULT = 1024 # must be same as PD_* +PSD_DISABLEPAPER = 512 +PSD_SHOWHELP = 2048 # must be same as PD_* +PSD_ENABLEPAGESETUPHOOK = 8192 # must be same as PD_* +PSD_ENABLEPAGESETUPTEMPLATE = 32768 # must be same as PD_* +PSD_ENABLEPAGESETUPTEMPLATEHANDLE = 131072 # must be same as PD_* +PSD_ENABLEPAGEPAINTHOOK = 262144 +PSD_DISABLEPAGEPAINTING = 524288 +PSD_NONETWORKBUTTON = 2097152 # must be same as PD_* + +# Generated by h2py from winreg.h +HKEY_CLASSES_ROOT = -2147483648 +HKEY_CURRENT_USER = -2147483647 +HKEY_LOCAL_MACHINE = -2147483646 +HKEY_USERS = -2147483645 +HKEY_PERFORMANCE_DATA = -2147483644 +HKEY_CURRENT_CONFIG = -2147483643 +HKEY_DYN_DATA = -2147483642 +HKEY_PERFORMANCE_TEXT = -2147483568 # ?? 4Jan98 +HKEY_PERFORMANCE_NLSTEXT = -2147483552 # ?? 4Jan98 + +# Generated by h2py from winuser.h +HWND_BROADCAST = 65535 +HWND_DESKTOP = 0 +HWND_TOP = 0 +HWND_BOTTOM = 1 +HWND_TOPMOST = -1 +HWND_NOTOPMOST = -2 +HWND_MESSAGE = -3 + +# winuser.h line 4601 +SM_CXSCREEN = 0 +SM_CYSCREEN = 1 +SM_CXVSCROLL = 2 +SM_CYHSCROLL = 3 +SM_CYCAPTION = 4 +SM_CXBORDER = 5 +SM_CYBORDER = 6 +SM_CXDLGFRAME = 7 +SM_CYDLGFRAME = 8 +SM_CYVTHUMB = 9 +SM_CXHTHUMB = 10 +SM_CXICON = 11 +SM_CYICON = 12 +SM_CXCURSOR = 13 +SM_CYCURSOR = 14 +SM_CYMENU = 15 +SM_CXFULLSCREEN = 16 +SM_CYFULLSCREEN = 17 +SM_CYKANJIWINDOW = 18 +SM_MOUSEPRESENT = 19 +SM_CYVSCROLL = 20 +SM_CXHSCROLL = 21 +SM_DEBUG = 22 +SM_SWAPBUTTON = 23 +SM_RESERVED1 = 24 +SM_RESERVED2 = 25 +SM_RESERVED3 = 26 +SM_RESERVED4 = 27 +SM_CXMIN = 28 +SM_CYMIN = 29 +SM_CXSIZE = 30 +SM_CYSIZE = 31 +SM_CXFRAME = 32 +SM_CYFRAME = 33 +SM_CXMINTRACK = 34 +SM_CYMINTRACK = 35 +SM_CXDOUBLECLK = 36 +SM_CYDOUBLECLK = 37 +SM_CXICONSPACING = 38 +SM_CYICONSPACING = 39 +SM_MENUDROPALIGNMENT = 40 +SM_PENWINDOWS = 41 +SM_DBCSENABLED = 42 +SM_CMOUSEBUTTONS = 43 +SM_CXFIXEDFRAME = SM_CXDLGFRAME +SM_CYFIXEDFRAME = SM_CYDLGFRAME +SM_CXSIZEFRAME = SM_CXFRAME +SM_CYSIZEFRAME = SM_CYFRAME +SM_SECURE = 44 +SM_CXEDGE = 45 +SM_CYEDGE = 46 +SM_CXMINSPACING = 47 +SM_CYMINSPACING = 48 +SM_CXSMICON = 49 +SM_CYSMICON = 50 +SM_CYSMCAPTION = 51 +SM_CXSMSIZE = 52 +SM_CYSMSIZE = 53 +SM_CXMENUSIZE = 54 +SM_CYMENUSIZE = 55 +SM_ARRANGE = 56 +SM_CXMINIMIZED = 57 +SM_CYMINIMIZED = 58 +SM_CXMAXTRACK = 59 +SM_CYMAXTRACK = 60 +SM_CXMAXIMIZED = 61 +SM_CYMAXIMIZED = 62 +SM_NETWORK = 63 +SM_CLEANBOOT = 67 +SM_CXDRAG = 68 +SM_CYDRAG = 69 +SM_SHOWSOUNDS = 70 +SM_CXMENUCHECK = 71 +SM_CYMENUCHECK = 72 +SM_SLOWMACHINE = 73 +SM_MIDEASTENABLED = 74 +SM_MOUSEWHEELPRESENT = 75 +SM_XVIRTUALSCREEN = 76 +SM_YVIRTUALSCREEN = 77 +SM_CXVIRTUALSCREEN = 78 +SM_CYVIRTUALSCREEN = 79 +SM_CMONITORS = 80 +SM_SAMEDISPLAYFORMAT = 81 +SM_CMETRICS = 83 +MNC_IGNORE = 0 +MNC_CLOSE = 1 +MNC_EXECUTE = 2 +MNC_SELECT = 3 +MNS_NOCHECK = -2147483648 +MNS_MODELESS = 1073741824 +MNS_DRAGDROP = 536870912 +MNS_AUTODISMISS = 268435456 +MNS_NOTIFYBYPOS = 134217728 +MNS_CHECKORBMP = 67108864 +MIM_MAXHEIGHT = 1 +MIM_BACKGROUND = 2 +MIM_HELPID = 4 +MIM_MENUDATA = 8 +MIM_STYLE = 16 +MIM_APPLYTOSUBMENUS = -2147483648 +MND_CONTINUE = 0 +MND_ENDMENU = 1 +MNGOF_GAP = 3 +MNGO_NOINTERFACE = 0 +MNGO_NOERROR = 1 +MIIM_STATE = 1 +MIIM_ID = 2 +MIIM_SUBMENU = 4 +MIIM_CHECKMARKS = 8 +MIIM_TYPE = 16 +MIIM_DATA = 32 +MIIM_STRING = 64 +MIIM_BITMAP = 128 +MIIM_FTYPE = 256 +HBMMENU_CALLBACK = -1 +HBMMENU_SYSTEM = 1 +HBMMENU_MBAR_RESTORE = 2 +HBMMENU_MBAR_MINIMIZE = 3 +HBMMENU_MBAR_CLOSE = 5 +HBMMENU_MBAR_CLOSE_D = 6 +HBMMENU_MBAR_MINIMIZE_D = 7 +HBMMENU_POPUP_CLOSE = 8 +HBMMENU_POPUP_RESTORE = 9 +HBMMENU_POPUP_MAXIMIZE = 10 +HBMMENU_POPUP_MINIMIZE = 11 +GMDI_USEDISABLED = 1 +GMDI_GOINTOPOPUPS = 2 +TPM_LEFTBUTTON = 0 +TPM_RIGHTBUTTON = 2 +TPM_LEFTALIGN = 0 +TPM_CENTERALIGN = 4 +TPM_RIGHTALIGN = 8 +TPM_TOPALIGN = 0 +TPM_VCENTERALIGN = 16 +TPM_BOTTOMALIGN = 32 +TPM_HORIZONTAL = 0 +TPM_VERTICAL = 64 +TPM_NONOTIFY = 128 +TPM_RETURNCMD = 256 +TPM_RECURSE = 1 +DOF_EXECUTABLE = 32769 +DOF_DOCUMENT = 32770 +DOF_DIRECTORY = 32771 +DOF_MULTIPLE = 32772 +DOF_PROGMAN = 1 +DOF_SHELLDATA = 2 +DO_DROPFILE = 1162627398 +DO_PRINTFILE = 1414419024 +DT_TOP = 0 +DT_LEFT = 0 +DT_CENTER = 1 +DT_RIGHT = 2 +DT_VCENTER = 4 +DT_BOTTOM = 8 +DT_WORDBREAK = 16 +DT_SINGLELINE = 32 +DT_EXPANDTABS = 64 +DT_TABSTOP = 128 +DT_NOCLIP = 256 +DT_EXTERNALLEADING = 512 +DT_CALCRECT = 1024 +DT_NOPREFIX = 2048 +DT_INTERNAL = 4096 +DT_EDITCONTROL = 8192 +DT_PATH_ELLIPSIS = 16384 +DT_END_ELLIPSIS = 32768 +DT_MODIFYSTRING = 65536 +DT_RTLREADING = 131072 +DT_WORD_ELLIPSIS = 262144 +DST_COMPLEX = 0 +DST_TEXT = 1 +DST_PREFIXTEXT = 2 +DST_ICON = 3 +DST_BITMAP = 4 +DSS_NORMAL = 0 +DSS_UNION = 16 +DSS_DISABLED = 32 +DSS_MONO = 128 +DSS_RIGHT = 32768 +DCX_WINDOW = 1 +DCX_CACHE = 2 +DCX_NORESETATTRS = 4 +DCX_CLIPCHILDREN = 8 +DCX_CLIPSIBLINGS = 16 +DCX_PARENTCLIP = 32 +DCX_EXCLUDERGN = 64 +DCX_INTERSECTRGN = 128 +DCX_EXCLUDEUPDATE = 256 +DCX_INTERSECTUPDATE = 512 +DCX_LOCKWINDOWUPDATE = 1024 +DCX_VALIDATE = 2097152 +CUDR_NORMAL = 0 +CUDR_NOSNAPTOGRID = 1 +CUDR_NORESOLVEPOSITIONS = 2 +CUDR_NOCLOSEGAPS = 4 +CUDR_NEGATIVECOORDS = 8 +CUDR_NOPRIMARY = 16 +RDW_INVALIDATE = 1 +RDW_INTERNALPAINT = 2 +RDW_ERASE = 4 +RDW_VALIDATE = 8 +RDW_NOINTERNALPAINT = 16 +RDW_NOERASE = 32 +RDW_NOCHILDREN = 64 +RDW_ALLCHILDREN = 128 +RDW_UPDATENOW = 256 +RDW_ERASENOW = 512 +RDW_FRAME = 1024 +RDW_NOFRAME = 2048 +SW_SCROLLCHILDREN = 1 +SW_INVALIDATE = 2 +SW_ERASE = 4 +SW_SMOOTHSCROLL = 16 # Use smooth scrolling +ESB_ENABLE_BOTH = 0 +ESB_DISABLE_BOTH = 3 +ESB_DISABLE_LEFT = 1 +ESB_DISABLE_RIGHT = 2 +ESB_DISABLE_UP = 1 +ESB_DISABLE_DOWN = 2 +ESB_DISABLE_LTUP = ESB_DISABLE_LEFT +ESB_DISABLE_RTDN = ESB_DISABLE_RIGHT +HELPINFO_WINDOW = 1 +HELPINFO_MENUITEM = 2 +MB_OK = 0 +MB_OKCANCEL = 1 +MB_ABORTRETRYIGNORE = 2 +MB_YESNOCANCEL = 3 +MB_YESNO = 4 +MB_RETRYCANCEL = 5 +MB_ICONHAND = 16 +MB_ICONQUESTION = 32 +MB_ICONEXCLAMATION = 48 +MB_ICONASTERISK = 64 +MB_ICONWARNING = MB_ICONEXCLAMATION +MB_ICONERROR = MB_ICONHAND +MB_ICONINFORMATION = MB_ICONASTERISK +MB_ICONSTOP = MB_ICONHAND +MB_DEFBUTTON1 = 0 +MB_DEFBUTTON2 = 256 +MB_DEFBUTTON3 = 512 +MB_DEFBUTTON4 = 768 +MB_APPLMODAL = 0 +MB_SYSTEMMODAL = 4096 +MB_TASKMODAL = 8192 +MB_HELP = 16384 +MB_NOFOCUS = 32768 +MB_SETFOREGROUND = 65536 +MB_DEFAULT_DESKTOP_ONLY = 131072 +MB_TOPMOST = 262144L +MB_RIGHT = 524288 +MB_RTLREADING = 1048576 +MB_SERVICE_NOTIFICATION = 2097152 +MB_TYPEMASK = 15 +MB_USERICON = 128 +MB_ICONMASK = 240 +MB_DEFMASK = 3840 +MB_MODEMASK = 12288 +MB_MISCMASK = 49152 +# winuser.h line 6373 +CWP_ALL = 0 +CWP_SKIPINVISIBLE = 1 +CWP_SKIPDISABLED = 2 +CWP_SKIPTRANSPARENT = 4 +CTLCOLOR_MSGBOX = 0 +CTLCOLOR_EDIT = 1 +CTLCOLOR_LISTBOX = 2 +CTLCOLOR_BTN = 3 +CTLCOLOR_DLG = 4 +CTLCOLOR_SCROLLBAR = 5 +CTLCOLOR_STATIC = 6 +CTLCOLOR_MAX = 7 +COLOR_SCROLLBAR = 0 +COLOR_BACKGROUND = 1 +COLOR_ACTIVECAPTION = 2 +COLOR_INACTIVECAPTION = 3 +COLOR_MENU = 4 +COLOR_WINDOW = 5 +COLOR_WINDOWFRAME = 6 +COLOR_MENUTEXT = 7 +COLOR_WINDOWTEXT = 8 +COLOR_CAPTIONTEXT = 9 +COLOR_ACTIVEBORDER = 10 +COLOR_INACTIVEBORDER = 11 +COLOR_APPWORKSPACE = 12 +COLOR_HIGHLIGHT = 13 +COLOR_HIGHLIGHTTEXT = 14 +COLOR_BTNFACE = 15 +COLOR_BTNSHADOW = 16 +COLOR_GRAYTEXT = 17 +COLOR_BTNTEXT = 18 +COLOR_INACTIVECAPTIONTEXT = 19 +COLOR_BTNHIGHLIGHT = 20 +COLOR_3DDKSHADOW = 21 +COLOR_3DLIGHT = 22 +COLOR_INFOTEXT = 23 +COLOR_INFOBK = 24 +COLOR_HOTLIGHT = 26 +COLOR_GRADIENTACTIVECAPTION = 27 +COLOR_GRADIENTINACTIVECAPTION = 28 +COLOR_DESKTOP = COLOR_BACKGROUND +COLOR_3DFACE = COLOR_BTNFACE +COLOR_3DSHADOW = COLOR_BTNSHADOW +COLOR_3DHIGHLIGHT = COLOR_BTNHIGHLIGHT +COLOR_3DHILIGHT = COLOR_BTNHIGHLIGHT +COLOR_BTNHILIGHT = COLOR_BTNHIGHLIGHT +GW_HWNDFIRST = 0 +GW_HWNDLAST = 1 +GW_HWNDNEXT = 2 +GW_HWNDPREV = 3 +GW_OWNER = 4 +GW_CHILD = 5 +GW_ENABLEDPOPUP = 6 +GW_MAX = 6 +MF_INSERT = 0 +MF_CHANGE = 128 +MF_APPEND = 256 +MF_DELETE = 512 +MF_REMOVE = 4096 +MF_BYCOMMAND = 0 +MF_BYPOSITION = 1024 +MF_SEPARATOR = 2048 +MF_ENABLED = 0 +MF_GRAYED = 1 +MF_DISABLED = 2 +MF_UNCHECKED = 0 +MF_CHECKED = 8 +MF_USECHECKBITMAPS = 512 +MF_STRING = 0 +MF_BITMAP = 4 +MF_OWNERDRAW = 256 +MF_POPUP = 16 +MF_MENUBARBREAK = 32 +MF_MENUBREAK = 64 +MF_UNHILITE = 0 +MF_HILITE = 128 +MF_DEFAULT = 4096 +MF_SYSMENU = 8192 +MF_HELP = 16384 +MF_RIGHTJUSTIFY = 16384 +MF_MOUSESELECT = 32768 +MF_END = 128 +MFT_STRING = MF_STRING +MFT_BITMAP = MF_BITMAP +MFT_MENUBARBREAK = MF_MENUBARBREAK +MFT_MENUBREAK = MF_MENUBREAK +MFT_OWNERDRAW = MF_OWNERDRAW +MFT_RADIOCHECK = 512 +MFT_SEPARATOR = MF_SEPARATOR +MFT_RIGHTORDER = 8192 +MFT_RIGHTJUSTIFY = MF_RIGHTJUSTIFY +MFS_GRAYED = 3 +MFS_DISABLED = MFS_GRAYED +MFS_CHECKED = MF_CHECKED +MFS_HILITE = MF_HILITE +MFS_ENABLED = MF_ENABLED +MFS_UNCHECKED = MF_UNCHECKED +MFS_UNHILITE = MF_UNHILITE +MFS_DEFAULT = MF_DEFAULT +MFS_MASK = 4235L +MFS_HOTTRACKDRAWN = 268435456 +MFS_CACHEDBMP = 536870912 +MFS_BOTTOMGAPDROP = 1073741824 +MFS_TOPGAPDROP = -2147483648 +MFS_GAPDROP = -1073741824 +SC_SIZE = 61440 +SC_MOVE = 61456 +SC_MINIMIZE = 61472 +SC_MAXIMIZE = 61488 +SC_NEXTWINDOW = 61504 +SC_PREVWINDOW = 61520 +SC_CLOSE = 61536 +SC_VSCROLL = 61552 +SC_HSCROLL = 61568 +SC_MOUSEMENU = 61584 +SC_KEYMENU = 61696 +SC_ARRANGE = 61712 +SC_RESTORE = 61728 +SC_TASKLIST = 61744 +SC_SCREENSAVE = 61760 +SC_HOTKEY = 61776 +SC_DEFAULT = 61792 +SC_MONITORPOWER = 61808 +SC_CONTEXTHELP = 61824 +SC_SEPARATOR = 61455 +SC_ICON = SC_MINIMIZE +SC_ZOOM = SC_MAXIMIZE +IDC_ARROW = 32512 +IDC_IBEAM = 32513 +IDC_WAIT = 32514 +IDC_CROSS = 32515 +IDC_UPARROW = 32516 +IDC_SIZE = 32640 # OBSOLETE: use IDC_SIZEALL +IDC_ICON = 32641 # OBSOLETE: use IDC_ARROW +IDC_SIZENWSE = 32642 +IDC_SIZENESW = 32643 +IDC_SIZEWE = 32644 +IDC_SIZENS = 32645 +IDC_SIZEALL = 32646 +IDC_NO = 32648 +IDC_HAND = 32649 +IDC_APPSTARTING = 32650 +IDC_HELP = 32651 +IMAGE_BITMAP = 0 +IMAGE_ICON = 1 +IMAGE_CURSOR = 2 +IMAGE_ENHMETAFILE = 3 +LR_DEFAULTCOLOR = 0 +LR_MONOCHROME = 1 +LR_COLOR = 2 +LR_COPYRETURNORG = 4 +LR_COPYDELETEORG = 8 +LR_LOADFROMFILE = 16 +LR_LOADTRANSPARENT = 32 +LR_DEFAULTSIZE = 64 +LR_LOADREALSIZE = 128 +LR_LOADMAP3DCOLORS = 4096 +LR_CREATEDIBSECTION = 8192 +LR_COPYFROMRESOURCE = 16384 +LR_SHARED = 32768 +DI_MASK = 1 +DI_IMAGE = 2 +DI_NORMAL = 3 +DI_COMPAT = 4 +DI_DEFAULTSIZE = 8 +RES_ICON = 1 +RES_CURSOR = 2 +OBM_CLOSE = 32754 +OBM_UPARROW = 32753 +OBM_DNARROW = 32752 +OBM_RGARROW = 32751 +OBM_LFARROW = 32750 +OBM_REDUCE = 32749 +OBM_ZOOM = 32748 +OBM_RESTORE = 32747 +OBM_REDUCED = 32746 +OBM_ZOOMD = 32745 +OBM_RESTORED = 32744 +OBM_UPARROWD = 32743 +OBM_DNARROWD = 32742 +OBM_RGARROWD = 32741 +OBM_LFARROWD = 32740 +OBM_MNARROW = 32739 +OBM_COMBO = 32738 +OBM_UPARROWI = 32737 +OBM_DNARROWI = 32736 +OBM_RGARROWI = 32735 +OBM_LFARROWI = 32734 +OBM_OLD_CLOSE = 32767 +OBM_SIZE = 32766 +OBM_OLD_UPARROW = 32765 +OBM_OLD_DNARROW = 32764 +OBM_OLD_RGARROW = 32763 +OBM_OLD_LFARROW = 32762 +OBM_BTSIZE = 32761 +OBM_CHECK = 32760 +OBM_CHECKBOXES = 32759 +OBM_BTNCORNERS = 32758 +OBM_OLD_REDUCE = 32757 +OBM_OLD_ZOOM = 32756 +OBM_OLD_RESTORE = 32755 +OCR_NORMAL = 32512 +OCR_IBEAM = 32513 +OCR_WAIT = 32514 +OCR_CROSS = 32515 +OCR_UP = 32516 +OCR_SIZE = 32640 +OCR_ICON = 32641 +OCR_SIZENWSE = 32642 +OCR_SIZENESW = 32643 +OCR_SIZEWE = 32644 +OCR_SIZENS = 32645 +OCR_SIZEALL = 32646 +OCR_ICOCUR = 32647 +OCR_NO = 32648 +OCR_HAND = 32649 +OCR_APPSTARTING = 32650 +# winuser.h line 7455 +OIC_SAMPLE = 32512 +OIC_HAND = 32513 +OIC_QUES = 32514 +OIC_BANG = 32515 +OIC_NOTE = 32516 +OIC_WINLOGO = 32517 +OIC_WARNING = OIC_BANG +OIC_ERROR = OIC_HAND +OIC_INFORMATION = OIC_NOTE +ORD_LANGDRIVER = 1 +IDI_APPLICATION = 32512 +IDI_HAND = 32513 +IDI_QUESTION = 32514 +IDI_EXCLAMATION = 32515 +IDI_ASTERISK = 32516 +IDI_WINLOGO = 32517 +IDI_WARNING = IDI_EXCLAMATION +IDI_ERROR = IDI_HAND +IDI_INFORMATION = IDI_ASTERISK +IDOK = 1 +IDCANCEL = 2 +IDABORT = 3 +IDRETRY = 4 +IDIGNORE = 5 +IDYES = 6 +IDNO = 7 +IDCLOSE = 8 +IDHELP = 9 +ES_LEFT = 0 +ES_CENTER = 1 +ES_RIGHT = 2 +ES_MULTILINE = 4 +ES_UPPERCASE = 8 +ES_LOWERCASE = 16 +ES_PASSWORD = 32 +ES_AUTOVSCROLL = 64 +ES_AUTOHSCROLL = 128 +ES_NOHIDESEL = 256 +ES_OEMCONVERT = 1024 +ES_READONLY = 2048 +ES_WANTRETURN = 4096 +ES_NUMBER = 8192 +EN_SETFOCUS = 256 +EN_KILLFOCUS = 512 +EN_CHANGE = 768 +EN_UPDATE = 1024 +EN_ERRSPACE = 1280 +EN_MAXTEXT = 1281 +EN_HSCROLL = 1537 +EN_VSCROLL = 1538 +EC_LEFTMARGIN = 1 +EC_RIGHTMARGIN = 2 +EC_USEFONTINFO = 65535 +EMSIS_COMPOSITIONSTRING = 1 +EIMES_GETCOMPSTRATONCE = 1 +EIMES_CANCELCOMPSTRINFOCUS = 2 +EIMES_COMPLETECOMPSTRKILLFOCUS = 4 +EM_GETSEL = 176 +EM_SETSEL = 177 +EM_GETRECT = 178 +EM_SETRECT = 179 +EM_SETRECTNP = 180 +EM_SCROLL = 181 +EM_LINESCROLL = 182 +EM_SCROLLCARET = 183 +EM_GETMODIFY = 184 +EM_SETMODIFY = 185 +EM_GETLINECOUNT = 186 +EM_LINEINDEX = 187 +EM_SETHANDLE = 188 +EM_GETHANDLE = 189 +EM_GETTHUMB = 190 +EM_LINELENGTH = 193 +EM_REPLACESEL = 194 +EM_GETLINE = 196 +EM_LIMITTEXT = 197 +EM_CANUNDO = 198 +EM_UNDO = 199 +EM_FMTLINES = 200 +EM_LINEFROMCHAR = 201 +EM_SETTABSTOPS = 203 +EM_SETPASSWORDCHAR = 204 +EM_EMPTYUNDOBUFFER = 205 +EM_GETFIRSTVISIBLELINE = 206 +EM_SETREADONLY = 207 +EM_SETWORDBREAKPROC = 208 +EM_GETWORDBREAKPROC = 209 +EM_GETPASSWORDCHAR = 210 +EM_SETMARGINS = 211 +EM_GETMARGINS = 212 +EM_SETLIMITTEXT = EM_LIMITTEXT +EM_GETLIMITTEXT = 213 +EM_POSFROMCHAR = 214 +EM_CHARFROMPOS = 215 +EM_SETIMESTATUS = 216 +EM_GETIMESTATUS = 217 +WB_LEFT = 0 +WB_RIGHT = 1 +WB_ISDELIMITER = 2 +BS_PUSHBUTTON = 0 +BS_DEFPUSHBUTTON = 1 +BS_CHECKBOX = 2 +BS_AUTOCHECKBOX = 3 +BS_RADIOBUTTON = 4 +BS_3STATE = 5 +BS_AUTO3STATE = 6 +BS_GROUPBOX = 7 +BS_USERBUTTON = 8 +BS_AUTORADIOBUTTON = 9 +BS_OWNERDRAW = 11L +BS_LEFTTEXT = 32 +BS_TEXT = 0 +BS_ICON = 64 +BS_BITMAP = 128 +BS_LEFT = 256 +BS_RIGHT = 512 +BS_CENTER = 768 +BS_TOP = 1024 +BS_BOTTOM = 2048 +BS_VCENTER = 3072 +BS_PUSHLIKE = 4096 +BS_MULTILINE = 8192 +BS_NOTIFY = 16384 +BS_FLAT = 32768 +BS_RIGHTBUTTON = BS_LEFTTEXT +BN_CLICKED = 0 +BN_PAINT = 1 +BN_HILITE = 2 +BN_UNHILITE = 3 +BN_DISABLE = 4 +BN_DOUBLECLICKED = 5 +BN_PUSHED = BN_HILITE +BN_UNPUSHED = BN_UNHILITE +BN_DBLCLK = BN_DOUBLECLICKED +BN_SETFOCUS = 6 +BN_KILLFOCUS = 7 +BM_GETCHECK = 240 +BM_SETCHECK = 241 +BM_GETSTATE = 242 +BM_SETSTATE = 243 +BM_SETSTYLE = 244 +BM_CLICK = 245 +BM_GETIMAGE = 246 +BM_SETIMAGE = 247 +BST_UNCHECKED = 0 +BST_CHECKED = 1 +BST_INDETERMINATE = 2 +BST_PUSHED = 4 +BST_FOCUS = 8 +SS_LEFT = 0 +SS_CENTER = 1 +SS_RIGHT = 2 +SS_ICON = 3 +SS_BLACKRECT = 4 +SS_GRAYRECT = 5 +SS_WHITERECT = 6 +SS_BLACKFRAME = 7 +SS_GRAYFRAME = 8 +SS_WHITEFRAME = 9 +SS_USERITEM = 10 +SS_SIMPLE = 11 +SS_LEFTNOWORDWRAP = 12 +SS_BITMAP = 14 +SS_OWNERDRAW = 13 +SS_ENHMETAFILE = 15 +SS_ETCHEDHORZ = 16 +SS_ETCHEDVERT = 17 +SS_ETCHEDFRAME = 18 +SS_TYPEMASK = 31 +SS_NOPREFIX = 128 +SS_NOTIFY = 256 +SS_CENTERIMAGE = 512 +SS_RIGHTJUST = 1024 +SS_REALSIZEIMAGE = 2048 +SS_SUNKEN = 4096 +SS_ENDELLIPSIS = 16384 +SS_PATHELLIPSIS = 32768 +SS_WORDELLIPSIS = 49152 +SS_ELLIPSISMASK = 49152 +STM_SETICON = 368 +STM_GETICON = 369 +STM_SETIMAGE = 370 +STM_GETIMAGE = 371 +STN_CLICKED = 0 +STN_DBLCLK = 1 +STN_ENABLE = 2 +STN_DISABLE = 3 +STM_MSGMAX = 372 +DWL_MSGRESULT = 0 +DWL_DLGPROC = 4 +DWL_USER = 8 +DDL_READWRITE = 0 +DDL_READONLY = 1 +DDL_HIDDEN = 2 +DDL_SYSTEM = 4 +DDL_DIRECTORY = 16 +DDL_ARCHIVE = 32 +DDL_POSTMSGS = 8192 +DDL_DRIVES = 16384 +DDL_EXCLUSIVE = 32768 + +#from winuser.h line 153 +RT_CURSOR = 1 +RT_BITMAP = 2 +RT_ICON = 3 +RT_MENU = 4 +RT_DIALOG = 5 +RT_STRING = 6 +RT_FONTDIR = 7 +RT_FONT = 8 +RT_ACCELERATOR = 9 +RT_RCDATA = 10 +RT_MESSAGETABLE = 11 +DIFFERENCE = 11 +RT_GROUP_CURSOR = (RT_CURSOR + DIFFERENCE) +RT_GROUP_ICON = (RT_ICON + DIFFERENCE) +RT_VERSION = 16 +RT_DLGINCLUDE = 17 +RT_PLUGPLAY = 19 +RT_VXD = 20 +RT_ANICURSOR = 21 +RT_ANIICON = 22 +RT_HTML = 23 +# from winuser.h line 218 +SB_HORZ = 0 +SB_VERT = 1 +SB_CTL = 2 +SB_BOTH = 3 +SB_LINEUP = 0 +SB_LINELEFT = 0 +SB_LINEDOWN = 1 +SB_LINERIGHT = 1 +SB_PAGEUP = 2 +SB_PAGELEFT = 2 +SB_PAGEDOWN = 3 +SB_PAGERIGHT = 3 +SB_THUMBPOSITION = 4 +SB_THUMBTRACK = 5 +SB_TOP = 6 +SB_LEFT = 6 +SB_BOTTOM = 7 +SB_RIGHT = 7 +SB_ENDSCROLL = 8 +SW_HIDE = 0 +SW_SHOWNORMAL = 1 +SW_NORMAL = 1 +SW_SHOWMINIMIZED = 2 +SW_SHOWMAXIMIZED = 3 +SW_MAXIMIZE = 3 +SW_SHOWNOACTIVATE = 4 +SW_SHOW = 5 +SW_MINIMIZE = 6 +SW_SHOWMINNOACTIVE = 7 +SW_SHOWNA = 8 +SW_RESTORE = 9 +SW_SHOWDEFAULT = 10 +SW_FORCEMINIMIZE = 11 +SW_MAX = 11 +HIDE_WINDOW = 0 +SHOW_OPENWINDOW = 1 +SHOW_ICONWINDOW = 2 +SHOW_FULLSCREEN = 3 +SHOW_OPENNOACTIVATE = 4 +SW_PARENTCLOSING = 1 +SW_OTHERZOOM = 2 +SW_PARENTOPENING = 3 +SW_OTHERUNZOOM = 4 +AW_HOR_POSITIVE = 1 +AW_HOR_NEGATIVE = 2 +AW_VER_POSITIVE = 4 +AW_VER_NEGATIVE = 8 +AW_CENTER = 16 +AW_HIDE = 65536 +AW_ACTIVATE = 131072 +AW_SLIDE = 262144 +AW_BLEND = 524288 +KF_EXTENDED = 256 +KF_DLGMODE = 2048 +KF_MENUMODE = 4096 +KF_ALTDOWN = 8192 +KF_REPEAT = 16384 +KF_UP = 32768 +VK_LBUTTON = 1 +VK_RBUTTON = 2 +VK_CANCEL = 3 +VK_MBUTTON = 4 +VK_BACK = 8 +VK_TAB = 9 +VK_CLEAR = 12 +VK_RETURN = 13 +VK_SHIFT = 16 +VK_CONTROL = 17 +VK_MENU = 18 +VK_PAUSE = 19 +VK_CAPITAL = 20 +VK_KANA = 21 +VK_HANGEUL = 21 # old name - should be here for compatibility +VK_HANGUL = 21 +VK_JUNJA = 23 +VK_FINAL = 24 +VK_HANJA = 25 +VK_KANJI = 25 +VK_ESCAPE = 27 +VK_CONVERT = 28 +VK_NONCONVERT = 29 +VK_ACCEPT = 30 +VK_MODECHANGE = 31 +VK_SPACE = 32 +VK_PRIOR = 33 +VK_NEXT = 34 +VK_END = 35 +VK_HOME = 36 +VK_LEFT = 37 +VK_UP = 38 +VK_RIGHT = 39 +VK_DOWN = 40 +VK_SELECT = 41 +VK_PRINT = 42 +VK_EXECUTE = 43 +VK_SNAPSHOT = 44 +VK_INSERT = 45 +VK_DELETE = 46 +VK_HELP = 47 +VK_LWIN = 91 +VK_RWIN = 92 +VK_APPS = 93 +VK_NUMPAD0 = 96 +VK_NUMPAD1 = 97 +VK_NUMPAD2 = 98 +VK_NUMPAD3 = 99 +VK_NUMPAD4 = 100 +VK_NUMPAD5 = 101 +VK_NUMPAD6 = 102 +VK_NUMPAD7 = 103 +VK_NUMPAD8 = 104 +VK_NUMPAD9 = 105 +VK_MULTIPLY = 106 +VK_ADD = 107 +VK_SEPARATOR = 108 +VK_SUBTRACT = 109 +VK_DECIMAL = 110 +VK_DIVIDE = 111 +VK_F1 = 112 +VK_F2 = 113 +VK_F3 = 114 +VK_F4 = 115 +VK_F5 = 116 +VK_F6 = 117 +VK_F7 = 118 +VK_F8 = 119 +VK_F9 = 120 +VK_F10 = 121 +VK_F11 = 122 +VK_F12 = 123 +VK_F13 = 124 +VK_F14 = 125 +VK_F15 = 126 +VK_F16 = 127 +VK_F17 = 128 +VK_F18 = 129 +VK_F19 = 130 +VK_F20 = 131 +VK_F21 = 132 +VK_F22 = 133 +VK_F23 = 134 +VK_F24 = 135 +VK_NUMLOCK = 144 +VK_SCROLL = 145 +VK_LSHIFT = 160 +VK_RSHIFT = 161 +VK_LCONTROL = 162 +VK_RCONTROL = 163 +VK_LMENU = 164 +VK_RMENU = 165 +VK_PROCESSKEY = 229 +VK_ATTN = 246 +VK_CRSEL = 247 +VK_EXSEL = 248 +VK_EREOF = 249 +VK_PLAY = 250 +VK_ZOOM = 251 +VK_NONAME = 252 +VK_PA1 = 253 +VK_OEM_CLEAR = 254 +# multi-media related "keys" +MOUSEEVENTF_XDOWN = 0x0080 +MOUSEEVENTF_XUP = 0x0100 +MOUSEEVENTF_WHEEL = 0x0800 +VK_XBUTTON1 = 0x05 +VK_XBUTTON2 = 0x06 +VK_VOLUME_MUTE = 0xAD +VK_VOLUME_DOWN = 0xAE +VK_VOLUME_UP = 0xAF +VK_MEDIA_NEXT_TRACK = 0xB0 +VK_MEDIA_PREV_TRACK = 0xB1 +VK_MEDIA_PLAY_PAUSE = 0xB3 +VK_BROWSER_BACK = 0xA6 +VK_BROWSER_FORWARD = 0xA7 +WH_MIN = (-1) +WH_MSGFILTER = (-1) +WH_JOURNALRECORD = 0 +WH_JOURNALPLAYBACK = 1 +WH_KEYBOARD = 2 +WH_GETMESSAGE = 3 +WH_CALLWNDPROC = 4 +WH_CBT = 5 +WH_SYSMSGFILTER = 6 +WH_MOUSE = 7 +WH_HARDWARE = 8 +WH_DEBUG = 9 +WH_SHELL = 10 +WH_FOREGROUNDIDLE = 11 +WH_CALLWNDPROCRET = 12 +WH_KEYBOARD_LL = 13 +WH_MOUSE_LL = 14 +WH_MAX = 14 +WH_MINHOOK = WH_MIN +WH_MAXHOOK = WH_MAX +HC_ACTION = 0 +HC_GETNEXT = 1 +HC_SKIP = 2 +HC_NOREMOVE = 3 +HC_NOREM = HC_NOREMOVE +HC_SYSMODALON = 4 +HC_SYSMODALOFF = 5 +HCBT_MOVESIZE = 0 +HCBT_MINMAX = 1 +HCBT_QS = 2 +HCBT_CREATEWND = 3 +HCBT_DESTROYWND = 4 +HCBT_ACTIVATE = 5 +HCBT_CLICKSKIPPED = 6 +HCBT_KEYSKIPPED = 7 +HCBT_SYSCOMMAND = 8 +HCBT_SETFOCUS = 9 +MSGF_DIALOGBOX = 0 +MSGF_MESSAGEBOX = 1 +MSGF_MENU = 2 +#MSGF_MOVE = 3 +#MSGF_SIZE = 4 +MSGF_SCROLLBAR = 5 +MSGF_NEXTWINDOW = 6 +#MSGF_MAINLOOP = 8 +MSGF_MAX = 8 +MSGF_USER = 4096 +HSHELL_WINDOWCREATED = 1 +HSHELL_WINDOWDESTROYED = 2 +HSHELL_ACTIVATESHELLWINDOW = 3 +HSHELL_WINDOWACTIVATED = 4 +HSHELL_GETMINRECT = 5 +HSHELL_REDRAW = 6 +HSHELL_TASKMAN = 7 +HSHELL_LANGUAGE = 8 +HSHELL_ACCESSIBILITYSTATE = 11 +ACCESS_STICKYKEYS = 1 +ACCESS_FILTERKEYS = 2 +ACCESS_MOUSEKEYS = 3 +# winuser.h line 624 +LLKHF_EXTENDED = 1 +LLKHF_INJECTED = 16 +LLKHF_ALTDOWN = 32 +LLKHF_UP = 128 +LLMHF_INJECTED = 1 +# line 692 +HKL_PREV = 0 +HKL_NEXT = 1 +KLF_ACTIVATE = 1 +KLF_SUBSTITUTE_OK = 2 +KLF_UNLOADPREVIOUS = 4 +KLF_REORDER = 8 +KLF_REPLACELANG = 16 +KLF_NOTELLSHELL = 128 +KLF_SETFORPROCESS = 256 +KL_NAMELENGTH = 9 +DESKTOP_READOBJECTS = 1 +DESKTOP_CREATEWINDOW = 2 +DESKTOP_CREATEMENU = 4 +DESKTOP_HOOKCONTROL = 8 +DESKTOP_JOURNALRECORD = 16 +DESKTOP_JOURNALPLAYBACK = 32 +DESKTOP_ENUMERATE = 64 +DESKTOP_WRITEOBJECTS = 128 +DESKTOP_SWITCHDESKTOP = 256 +DF_ALLOWOTHERACCOUNTHOOK = 1 +WINSTA_ENUMDESKTOPS = 1 +WINSTA_READATTRIBUTES = 2 +WINSTA_ACCESSCLIPBOARD = 4 +WINSTA_CREATEDESKTOP = 8 +WINSTA_WRITEATTRIBUTES = 16 +WINSTA_ACCESSGLOBALATOMS = 32 +WINSTA_EXITWINDOWS = 64 +WINSTA_ENUMERATE = 256 +WINSTA_READSCREEN = 512 +WSF_VISIBLE = 1 +UOI_FLAGS = 1 +UOI_NAME = 2 +UOI_TYPE = 3 +UOI_USER_SID = 4 +GWL_WNDPROC = (-4) +GWL_HINSTANCE = (-6) +GWL_HWNDPARENT = (-8) +GWL_STYLE = (-16) +GWL_EXSTYLE = (-20) +GWL_USERDATA = (-21) +GWL_ID = (-12) +GCL_MENUNAME = (-8) +GCL_HBRBACKGROUND = (-10) +GCL_HCURSOR = (-12) +GCL_HICON = (-14) +GCL_HMODULE = (-16) +GCL_CBWNDEXTRA = (-18) +GCL_CBCLSEXTRA = (-20) +GCL_WNDPROC = (-24) +GCL_STYLE = (-26) +GCW_ATOM = (-32) +GCL_HICONSM = (-34) +# line 1291 +WM_NULL = 0 +WM_CREATE = 1 +WM_DESTROY = 2 +WM_MOVE = 3 +WM_SIZE = 5 +WM_ACTIVATE = 6 +WA_INACTIVE = 0 +WA_ACTIVE = 1 +WA_CLICKACTIVE = 2 +WM_SETFOCUS = 7 +WM_KILLFOCUS = 8 +WM_ENABLE = 10 +WM_SETREDRAW = 11 +WM_SETTEXT = 12 +WM_GETTEXT = 13 +WM_GETTEXTLENGTH = 14 +WM_PAINT = 15 +WM_CLOSE = 16 +WM_QUERYENDSESSION = 17 +WM_QUIT = 18 +WM_QUERYOPEN = 19 +WM_ERASEBKGND = 20 +WM_SYSCOLORCHANGE = 21 +WM_ENDSESSION = 22 +WM_SHOWWINDOW = 24 +WM_WININICHANGE = 26 +WM_SETTINGCHANGE = WM_WININICHANGE +WM_DEVMODECHANGE = 27 +WM_ACTIVATEAPP = 28 +WM_FONTCHANGE = 29 +WM_TIMECHANGE = 30 +WM_CANCELMODE = 31 +WM_SETCURSOR = 32 +WM_MOUSEACTIVATE = 33 +WM_CHILDACTIVATE = 34 +WM_QUEUESYNC = 35 +WM_GETMINMAXINFO = 36 +WM_PAINTICON = 38 +WM_ICONERASEBKGND = 39 +WM_NEXTDLGCTL = 40 +WM_SPOOLERSTATUS = 42 +WM_DRAWITEM = 43 +WM_MEASUREITEM = 44 +WM_DELETEITEM = 45 +WM_VKEYTOITEM = 46 +WM_CHARTOITEM = 47 +WM_SETFONT = 48 +WM_GETFONT = 49 +WM_SETHOTKEY = 50 +WM_GETHOTKEY = 51 +WM_QUERYDRAGICON = 55 +WM_COMPAREITEM = 57 +WM_GETOBJECT = 61 +WM_COMPACTING = 65 +WM_COMMNOTIFY = 68 +WM_WINDOWPOSCHANGING = 70 +WM_WINDOWPOSCHANGED = 71 +WM_POWER = 72 +PWR_OK = 1 +PWR_FAIL = (-1) +PWR_SUSPENDREQUEST = 1 +PWR_SUSPENDRESUME = 2 +PWR_CRITICALRESUME = 3 +WM_COPYDATA = 74 +WM_CANCELJOURNAL = 75 +WM_NOTIFY = 78 +WM_INPUTLANGCHANGEREQUEST = 80 +WM_INPUTLANGCHANGE = 81 +WM_TCARD = 82 +WM_HELP = 83 +WM_USERCHANGED = 84 +WM_NOTIFYFORMAT = 85 +NFR_ANSI = 1 +NFR_UNICODE = 2 +NF_QUERY = 3 +NF_REQUERY = 4 +WM_CONTEXTMENU = 123 +WM_STYLECHANGING = 124 +WM_STYLECHANGED = 125 +WM_DISPLAYCHANGE = 126 +WM_GETICON = 127 +WM_SETICON = 128 +WM_NCCREATE = 129 +WM_NCDESTROY = 130 +WM_NCCALCSIZE = 131 +WM_NCHITTEST = 132 +WM_NCPAINT = 133 +WM_NCACTIVATE = 134 +WM_GETDLGCODE = 135 +WM_SYNCPAINT = 136 +WM_NCMOUSEMOVE = 160 +WM_NCLBUTTONDOWN = 161 +WM_NCLBUTTONUP = 162 +WM_NCLBUTTONDBLCLK = 163 +WM_NCRBUTTONDOWN = 164 +WM_NCRBUTTONUP = 165 +WM_NCRBUTTONDBLCLK = 166 +WM_NCMBUTTONDOWN = 167 +WM_NCMBUTTONUP = 168 +WM_NCMBUTTONDBLCLK = 169 +WM_KEYFIRST = 256 +WM_KEYDOWN = 256 +WM_KEYUP = 257 +WM_CHAR = 258 +WM_DEADCHAR = 259 +WM_SYSKEYDOWN = 260 +WM_SYSKEYUP = 261 +WM_SYSCHAR = 262 +WM_SYSDEADCHAR = 263 +WM_KEYLAST = 264 +WM_IME_STARTCOMPOSITION = 269 +WM_IME_ENDCOMPOSITION = 270 +WM_IME_COMPOSITION = 271 +WM_IME_KEYLAST = 271 +WM_INITDIALOG = 272 +WM_COMMAND = 273 +WM_SYSCOMMAND = 274 +WM_TIMER = 275 +WM_HSCROLL = 276 +WM_VSCROLL = 277 +WM_INITMENU = 278 +WM_INITMENUPOPUP = 279 +WM_MENUSELECT = 287 +WM_MENUCHAR = 288 +WM_ENTERIDLE = 289 +WM_MENURBUTTONUP = 290 +WM_MENUDRAG = 291 +WM_MENUGETOBJECT = 292 +WM_UNINITMENUPOPUP = 293 +WM_MENUCOMMAND = 294 +WM_CTLCOLORMSGBOX = 306 +WM_CTLCOLOREDIT = 307 +WM_CTLCOLORLISTBOX = 308 +WM_CTLCOLORBTN = 309 +WM_CTLCOLORDLG = 310 +WM_CTLCOLORSCROLLBAR = 311 +WM_CTLCOLORSTATIC = 312 +WM_MOUSEFIRST = 512 +WM_MOUSEMOVE = 512 +WM_LBUTTONDOWN = 513 +WM_LBUTTONUP = 514 +WM_LBUTTONDBLCLK = 515 +WM_RBUTTONDOWN = 516 +WM_RBUTTONUP = 517 +WM_RBUTTONDBLCLK = 518 +WM_MBUTTONDOWN = 519 +WM_MBUTTONUP = 520 +WM_MBUTTONDBLCLK = 521 +WM_MOUSEWHEEL = 522 +WM_MOUSELAST = 522 +WHEEL_DELTA = 120 # Value for rolling one detent +WHEEL_PAGESCROLL = -1 # Scroll one page +WM_PARENTNOTIFY = 528 +MENULOOP_WINDOW = 0 +MENULOOP_POPUP = 1 +WM_ENTERMENULOOP = 529 +WM_EXITMENULOOP = 530 +WM_NEXTMENU = 531 +WM_SIZING = 532 +WM_CAPTURECHANGED = 533 +WM_MOVING = 534 +WM_POWERBROADCAST = 536 +PBT_APMQUERYSUSPEND = 0 +PBT_APMQUERYSTANDBY = 1 +PBT_APMQUERYSUSPENDFAILED = 2 +PBT_APMQUERYSTANDBYFAILED = 3 +PBT_APMSUSPEND = 4 +PBT_APMSTANDBY = 5 +PBT_APMRESUMECRITICAL = 6 +PBT_APMRESUMESUSPEND = 7 +PBT_APMRESUMESTANDBY = 8 +PBTF_APMRESUMEFROMFAILURE = 1 +PBT_APMBATTERYLOW = 9 +PBT_APMPOWERSTATUSCHANGE = 10 +PBT_APMOEMEVENT = 11 +PBT_APMRESUMEAUTOMATIC = 18 +WM_DEVICECHANGE = 537 +WM_MDICREATE = 544 +WM_MDIDESTROY = 545 +WM_MDIACTIVATE = 546 +WM_MDIRESTORE = 547 +WM_MDINEXT = 548 +WM_MDIMAXIMIZE = 549 +WM_MDITILE = 550 +WM_MDICASCADE = 551 +WM_MDIICONARRANGE = 552 +WM_MDIGETACTIVE = 553 +WM_MDISETMENU = 560 +WM_ENTERSIZEMOVE = 561 +WM_EXITSIZEMOVE = 562 +WM_DROPFILES = 563 +WM_MDIREFRESHMENU = 564 +WM_IME_SETCONTEXT = 641 +WM_IME_NOTIFY = 642 +WM_IME_CONTROL = 643 +WM_IME_COMPOSITIONFULL = 644 +WM_IME_SELECT = 645 +WM_IME_CHAR = 646 +WM_IME_REQUEST = 648 +WM_IME_KEYDOWN = 656 +WM_IME_KEYUP = 657 +WM_MOUSEHOVER = 673 +WM_MOUSELEAVE = 675 +WM_CUT = 768 +WM_COPY = 769 +WM_PASTE = 770 +WM_CLEAR = 771 +WM_UNDO = 772 +WM_RENDERFORMAT = 773 +WM_RENDERALLFORMATS = 774 +WM_DESTROYCLIPBOARD = 775 +WM_DRAWCLIPBOARD = 776 +WM_PAINTCLIPBOARD = 777 +WM_VSCROLLCLIPBOARD = 778 +WM_SIZECLIPBOARD = 779 +WM_ASKCBFORMATNAME = 780 +WM_CHANGECBCHAIN = 781 +WM_HSCROLLCLIPBOARD = 782 +WM_QUERYNEWPALETTE = 783 +WM_PALETTEISCHANGING = 784 +WM_PALETTECHANGED = 785 +WM_HOTKEY = 786 +WM_PRINT = 791 +WM_PRINTCLIENT = 792 +WM_HANDHELDFIRST = 856 +WM_HANDHELDLAST = 863 +WM_AFXFIRST = 864 +WM_AFXLAST = 895 +WM_PENWINFIRST = 896 +WM_PENWINLAST = 911 +WM_APP = 32768 +WMSZ_LEFT = 1 +WMSZ_RIGHT = 2 +WMSZ_TOP = 3 +WMSZ_TOPLEFT = 4 +WMSZ_TOPRIGHT = 5 +WMSZ_BOTTOM = 6 +WMSZ_BOTTOMLEFT = 7 +WMSZ_BOTTOMRIGHT = 8 +#ST_BEGINSWP = 0 +#ST_ENDSWP = 1 +HTERROR = (-2) +HTTRANSPARENT = (-1) +HTNOWHERE = 0 +HTCLIENT = 1 +HTCAPTION = 2 +HTSYSMENU = 3 +HTGROWBOX = 4 +HTSIZE = HTGROWBOX +HTMENU = 5 +HTHSCROLL = 6 +HTVSCROLL = 7 +HTMINBUTTON = 8 +HTMAXBUTTON = 9 +HTLEFT = 10 +HTRIGHT = 11 +HTTOP = 12 +HTTOPLEFT = 13 +HTTOPRIGHT = 14 +HTBOTTOM = 15 +HTBOTTOMLEFT = 16 +HTBOTTOMRIGHT = 17 +HTBORDER = 18 +HTREDUCE = HTMINBUTTON +HTZOOM = HTMAXBUTTON +HTSIZEFIRST = HTLEFT +HTSIZELAST = HTBOTTOMRIGHT +HTOBJECT = 19 +HTCLOSE = 20 +HTHELP = 21 +SMTO_NORMAL = 0 +SMTO_BLOCK = 1 +SMTO_ABORTIFHUNG = 2 +SMTO_NOTIMEOUTIFNOTHUNG = 8 +MA_ACTIVATE = 1 +MA_ACTIVATEANDEAT = 2 +MA_NOACTIVATE = 3 +MA_NOACTIVATEANDEAT = 4 +ICON_SMALL = 0 +ICON_BIG = 1 +SIZE_RESTORED = 0 +SIZE_MINIMIZED = 1 +SIZE_MAXIMIZED = 2 +SIZE_MAXSHOW = 3 +SIZE_MAXHIDE = 4 +SIZENORMAL = SIZE_RESTORED +SIZEICONIC = SIZE_MINIMIZED +SIZEFULLSCREEN = SIZE_MAXIMIZED +SIZEZOOMSHOW = SIZE_MAXSHOW +SIZEZOOMHIDE = SIZE_MAXHIDE +WVR_ALIGNTOP = 16 +WVR_ALIGNLEFT = 32 +WVR_ALIGNBOTTOM = 64 +WVR_ALIGNRIGHT = 128 +WVR_HREDRAW = 256 +WVR_VREDRAW = 512 +WVR_REDRAW = (WVR_HREDRAW | WVR_VREDRAW) +WVR_VALIDRECTS = 1024 +MK_LBUTTON = 1 +MK_RBUTTON = 2 +MK_SHIFT = 4 +MK_CONTROL = 8 +MK_MBUTTON = 16 +TME_HOVER = 1 +TME_LEAVE = 2 +TME_QUERY = 1073741824 +TME_CANCEL = -2147483648 +HOVER_DEFAULT = -1 +WS_OVERLAPPED = 0 +WS_POPUP = -2147483648 +WS_CHILD = 1073741824 +WS_MINIMIZE = 536870912 +WS_VISIBLE = 268435456 +WS_DISABLED = 134217728 +WS_CLIPSIBLINGS = 67108864 +WS_CLIPCHILDREN = 33554432 +WS_MAXIMIZE = 16777216 +WS_CAPTION = 12582912 +WS_BORDER = 8388608 +WS_DLGFRAME = 4194304 +WS_VSCROLL = 2097152 +WS_HSCROLL = 1048576 +WS_SYSMENU = 524288 +WS_THICKFRAME = 262144 +WS_GROUP = 131072 +WS_TABSTOP = 65536 +WS_MINIMIZEBOX = 131072 +WS_MAXIMIZEBOX = 65536 +WS_TILED = WS_OVERLAPPED +WS_ICONIC = WS_MINIMIZE +WS_SIZEBOX = WS_THICKFRAME +WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED | \ + WS_CAPTION | \ + WS_SYSMENU | \ + WS_THICKFRAME | \ + WS_MINIMIZEBOX | \ + WS_MAXIMIZEBOX) +WS_POPUPWINDOW = (WS_POPUP | \ + WS_BORDER | \ + WS_SYSMENU) +WS_CHILDWINDOW = (WS_CHILD) +WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW +WS_EX_DLGMODALFRAME = 1 +WS_EX_NOPARENTNOTIFY = 4 +WS_EX_TOPMOST = 8 +WS_EX_ACCEPTFILES = 16 +WS_EX_TRANSPARENT = 32 +WS_EX_MDICHILD = 64 +WS_EX_TOOLWINDOW = 128 +WS_EX_WINDOWEDGE = 256 +WS_EX_CLIENTEDGE = 512 +WS_EX_CONTEXTHELP = 1024 +WS_EX_RIGHT = 4096 +WS_EX_LEFT = 0 +WS_EX_RTLREADING = 8192 +WS_EX_LTRREADING = 0 +WS_EX_LEFTSCROLLBAR = 16384 +WS_EX_RIGHTSCROLLBAR = 0 +WS_EX_CONTROLPARENT = 65536 +WS_EX_STATICEDGE = 131072 +WS_EX_APPWINDOW = 262144 +WS_EX_OVERLAPPEDWINDOW = (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE) +WS_EX_PALETTEWINDOW = (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST) +WS_EX_LAYERED = 0x00080000 +WS_EX_NOINHERITLAYOUT = 0x00100000 +WS_EX_LAYOUTRTL = 0x00400000 +WS_EX_COMPOSITED = 0x02000000 +WS_EX_NOACTIVATE = 0x08000000 + +CS_VREDRAW = 1 +CS_HREDRAW = 2 +#CS_KEYCVTWINDOW = 0x0004 +CS_DBLCLKS = 8 +CS_OWNDC = 32 +CS_CLASSDC = 64 +CS_PARENTDC = 128 +#CS_NOKEYCVT = 0x0100 +CS_NOCLOSE = 512 +CS_SAVEBITS = 2048 +CS_BYTEALIGNCLIENT = 4096 +CS_BYTEALIGNWINDOW = 8192 +CS_GLOBALCLASS = 16384 +CS_IME = 65536 +PRF_CHECKVISIBLE = 1 +PRF_NONCLIENT = 2 +PRF_CLIENT = 4 +PRF_ERASEBKGND = 8 +PRF_CHILDREN = 16 +PRF_OWNED = 32 +BDR_RAISEDOUTER = 1 +BDR_SUNKENOUTER = 2 +BDR_RAISEDINNER = 4 +BDR_SUNKENINNER = 8 +BDR_OUTER = 3 +BDR_INNER = 12 +#BDR_RAISED = 0x0005 +#BDR_SUNKEN = 0x000a +EDGE_RAISED = (BDR_RAISEDOUTER | BDR_RAISEDINNER) +EDGE_SUNKEN = (BDR_SUNKENOUTER | BDR_SUNKENINNER) +EDGE_ETCHED = (BDR_SUNKENOUTER | BDR_RAISEDINNER) +EDGE_BUMP = (BDR_RAISEDOUTER | BDR_SUNKENINNER) + +# winuser.h line 2879 +ISMEX_NOSEND = 0 +ISMEX_SEND = 1 +ISMEX_NOTIFY = 2 +ISMEX_CALLBACK = 4 +ISMEX_REPLIED = 8 +CW_USEDEFAULT = -2147483648 +FLASHW_STOP = 0 +FLASHW_CAPTION = 1 +FLASHW_TRAY = 2 +FLASHW_ALL = (FLASHW_CAPTION | FLASHW_TRAY) +FLASHW_TIMER = 4 +FLASHW_TIMERNOFG = 12 + +# winuser.h line 7963 +DS_ABSALIGN = 1 +DS_SYSMODAL = 2 +DS_LOCALEDIT = 32 +DS_SETFONT = 64 +DS_MODALFRAME = 128 +DS_NOIDLEMSG = 256 +DS_SETFOREGROUND = 512 +DS_3DLOOK = 4 +DS_FIXEDSYS = 8 +DS_NOFAILCREATE = 16 +DS_CONTROL = 1024 +DS_CENTER = 2048 +DS_CENTERMOUSE = 4096 +DS_CONTEXTHELP = 8192 +DM_GETDEFID = (WM_USER+0) +DM_SETDEFID = (WM_USER+1) +DM_REPOSITION = (WM_USER+2) +#PSM_PAGEINFO = (WM_USER+100) +#PSM_SHEETINFO = (WM_USER+101) +#PSI_SETACTIVE = 0x0001 +#PSI_KILLACTIVE = 0x0002 +#PSI_APPLY = 0x0003 +#PSI_RESET = 0x0004 +#PSI_HASHELP = 0x0005 +#PSI_HELP = 0x0006 +#PSI_CHANGED = 0x0001 +#PSI_GUISTART = 0x0002 +#PSI_REBOOT = 0x0003 +#PSI_GETSIBLINGS = 0x0004 +DC_HASDEFID = 21323 +DLGC_WANTARROWS = 1 +DLGC_WANTTAB = 2 +DLGC_WANTALLKEYS = 4 +DLGC_WANTMESSAGE = 4 +DLGC_HASSETSEL = 8 +DLGC_DEFPUSHBUTTON = 16 +DLGC_UNDEFPUSHBUTTON = 32 +DLGC_RADIOBUTTON = 64 +DLGC_WANTCHARS = 128 +DLGC_STATIC = 256 +DLGC_BUTTON = 8192 +LB_CTLCODE = 0 +LB_OKAY = 0 +LB_ERR = (-1) +LB_ERRSPACE = (-2) +LBN_ERRSPACE = (-2) +LBN_SELCHANGE = 1 +LBN_DBLCLK = 2 +LBN_SELCANCEL = 3 +LBN_SETFOCUS = 4 +LBN_KILLFOCUS = 5 +LB_ADDSTRING = 384 +LB_INSERTSTRING = 385 +LB_DELETESTRING = 386 +LB_SELITEMRANGEEX = 387 +LB_RESETCONTENT = 388 +LB_SETSEL = 389 +LB_SETCURSEL = 390 +LB_GETSEL = 391 +LB_GETCURSEL = 392 +LB_GETTEXT = 393 +LB_GETTEXTLEN = 394 +LB_GETCOUNT = 395 +LB_SELECTSTRING = 396 +LB_DIR = 397 +LB_GETTOPINDEX = 398 +LB_FINDSTRING = 399 +LB_GETSELCOUNT = 400 +LB_GETSELITEMS = 401 +LB_SETTABSTOPS = 402 +LB_GETHORIZONTALEXTENT = 403 +LB_SETHORIZONTALEXTENT = 404 +LB_SETCOLUMNWIDTH = 405 +LB_ADDFILE = 406 +LB_SETTOPINDEX = 407 +LB_GETITEMRECT = 408 +LB_GETITEMDATA = 409 +LB_SETITEMDATA = 410 +LB_SELITEMRANGE = 411 +LB_SETANCHORINDEX = 412 +LB_GETANCHORINDEX = 413 +LB_SETCARETINDEX = 414 +LB_GETCARETINDEX = 415 +LB_SETITEMHEIGHT = 416 +LB_GETITEMHEIGHT = 417 +LB_FINDSTRINGEXACT = 418 +LB_SETLOCALE = 421 +LB_GETLOCALE = 422 +LB_SETCOUNT = 423 +LB_INITSTORAGE = 424 +LB_ITEMFROMPOINT = 425 +LB_MSGMAX = 432 +LBS_NOTIFY = 1 +LBS_SORT = 2 +LBS_NOREDRAW = 4 +LBS_MULTIPLESEL = 8 +LBS_OWNERDRAWFIXED = 16 +LBS_OWNERDRAWVARIABLE = 32 +LBS_HASSTRINGS = 64 +LBS_USETABSTOPS = 128 +LBS_NOINTEGRALHEIGHT = 256 +LBS_MULTICOLUMN = 512 +LBS_WANTKEYBOARDINPUT = 1024 +LBS_EXTENDEDSEL = 2048 +LBS_DISABLENOSCROLL = 4096 +LBS_NODATA = 8192 +LBS_NOSEL = 16384 +LBS_STANDARD = (LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER) +CB_OKAY = 0 +CB_ERR = (-1) +CB_ERRSPACE = (-2) +CBN_ERRSPACE = (-1) +CBN_SELCHANGE = 1 +CBN_DBLCLK = 2 +CBN_SETFOCUS = 3 +CBN_KILLFOCUS = 4 +CBN_EDITCHANGE = 5 +CBN_EDITUPDATE = 6 +CBN_DROPDOWN = 7 +CBN_CLOSEUP = 8 +CBN_SELENDOK = 9 +CBN_SELENDCANCEL = 10 +CBS_SIMPLE = 1 +CBS_DROPDOWN = 2 +CBS_DROPDOWNLIST = 3 +CBS_OWNERDRAWFIXED = 16 +CBS_OWNERDRAWVARIABLE = 32 +CBS_AUTOHSCROLL = 64 +CBS_OEMCONVERT = 128 +CBS_SORT = 256 +CBS_HASSTRINGS = 512 +CBS_NOINTEGRALHEIGHT = 1024 +CBS_DISABLENOSCROLL = 2048 +CBS_UPPERCASE = 8192 +CBS_LOWERCASE = 16384 +CB_GETEDITSEL = 320 +CB_LIMITTEXT = 321 +CB_SETEDITSEL = 322 +CB_ADDSTRING = 323 +CB_DELETESTRING = 324 +CB_DIR = 325 +CB_GETCOUNT = 326 +CB_GETCURSEL = 327 +CB_GETLBTEXT = 328 +CB_GETLBTEXTLEN = 329 +CB_INSERTSTRING = 330 +CB_RESETCONTENT = 331 +CB_FINDSTRING = 332 +CB_SELECTSTRING = 333 +CB_SETCURSEL = 334 +CB_SHOWDROPDOWN = 335 +CB_GETITEMDATA = 336 +CB_SETITEMDATA = 337 +CB_GETDROPPEDCONTROLRECT = 338 +CB_SETITEMHEIGHT = 339 +CB_GETITEMHEIGHT = 340 +CB_SETEXTENDEDUI = 341 +CB_GETEXTENDEDUI = 342 +CB_GETDROPPEDSTATE = 343 +CB_FINDSTRINGEXACT = 344 +CB_SETLOCALE = 345 +CB_GETLOCALE = 346 +CB_GETTOPINDEX = 347 +CB_SETTOPINDEX = 348 +CB_GETHORIZONTALEXTENT = 349 +CB_SETHORIZONTALEXTENT = 350 +CB_GETDROPPEDWIDTH = 351 +CB_SETDROPPEDWIDTH = 352 +CB_INITSTORAGE = 353 +CB_MSGMAX = 354 +SBS_HORZ = 0 +SBS_VERT = 1 +SBS_TOPALIGN = 2 +SBS_LEFTALIGN = 2 +SBS_BOTTOMALIGN = 4 +SBS_RIGHTALIGN = 4 +SBS_SIZEBOXTOPLEFTALIGN = 2 +SBS_SIZEBOXBOTTOMRIGHTALIGN = 4 +SBS_SIZEBOX = 8 +SBS_SIZEGRIP = 16 +SBM_SETPOS = 224 +SBM_GETPOS = 225 +SBM_SETRANGE = 226 +SBM_SETRANGEREDRAW = 230 +SBM_GETRANGE = 227 +SBM_ENABLE_ARROWS = 228 +SBM_SETSCROLLINFO = 233 +SBM_GETSCROLLINFO = 234 +SIF_RANGE = 1 +SIF_PAGE = 2 +SIF_POS = 4 +SIF_DISABLENOSCROLL = 8 +SIF_TRACKPOS = 16 +SIF_ALL = (SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS) +MDIS_ALLCHILDSTYLES = 1 +MDITILE_VERTICAL = 0 +MDITILE_HORIZONTAL = 1 +MDITILE_SKIPDISABLED = 2 + +IMC_GETCANDIDATEPOS = 7 +IMC_SETCANDIDATEPOS = 8 +IMC_GETCOMPOSITIONFONT = 9 +IMC_SETCOMPOSITIONFONT = 10 +IMC_GETCOMPOSITIONWINDOW = 11 +IMC_SETCOMPOSITIONWINDOW = 12 +IMC_GETSTATUSWINDOWPOS = 15 +IMC_SETSTATUSWINDOWPOS = 16 +IMC_CLOSESTATUSWINDOW = 33 +IMC_OPENSTATUSWINDOW = 34 +# Generated by h2py from \msvc20\include\winnt.h +# hacked and split by mhammond. +DELETE = (65536) +READ_CONTROL = (131072) +WRITE_DAC = (262144) +WRITE_OWNER = (524288) +SYNCHRONIZE = (1048576) +STANDARD_RIGHTS_REQUIRED = (983040) +STANDARD_RIGHTS_READ = (READ_CONTROL) +STANDARD_RIGHTS_WRITE = (READ_CONTROL) +STANDARD_RIGHTS_EXECUTE = (READ_CONTROL) +STANDARD_RIGHTS_ALL = (2031616) +SPECIFIC_RIGHTS_ALL = (65535) +ACCESS_SYSTEM_SECURITY = (16777216) +MAXIMUM_ALLOWED = (33554432) +GENERIC_READ = (-2147483648) +GENERIC_WRITE = (1073741824) +GENERIC_EXECUTE = (536870912) +GENERIC_ALL = (268435456) + +SERVICE_KERNEL_DRIVER = 1 +SERVICE_FILE_SYSTEM_DRIVER = 2 +SERVICE_ADAPTER = 4 +SERVICE_RECOGNIZER_DRIVER = 8 +SERVICE_DRIVER = (SERVICE_KERNEL_DRIVER | \ + SERVICE_FILE_SYSTEM_DRIVER | \ + SERVICE_RECOGNIZER_DRIVER) +SERVICE_WIN32_OWN_PROCESS = 16 +SERVICE_WIN32_SHARE_PROCESS = 32 +SERVICE_WIN32 = (SERVICE_WIN32_OWN_PROCESS | \ + SERVICE_WIN32_SHARE_PROCESS) +SERVICE_INTERACTIVE_PROCESS = 256 +SERVICE_TYPE_ALL = (SERVICE_WIN32 | \ + SERVICE_ADAPTER | \ + SERVICE_DRIVER | \ + SERVICE_INTERACTIVE_PROCESS) +SERVICE_BOOT_START = 0 +SERVICE_SYSTEM_START = 1 +SERVICE_AUTO_START = 2 +SERVICE_DEMAND_START = 3 +SERVICE_DISABLED = 4 +SERVICE_ERROR_IGNORE = 0 +SERVICE_ERROR_NORMAL = 1 +SERVICE_ERROR_SEVERE = 2 +SERVICE_ERROR_CRITICAL = 3 +TAPE_ERASE_SHORT = 0 +TAPE_ERASE_LONG = 1 +TAPE_LOAD = 0 +TAPE_UNLOAD = 1 +TAPE_TENSION = 2 +TAPE_LOCK = 3 +TAPE_UNLOCK = 4 +TAPE_FORMAT = 5 +TAPE_SETMARKS = 0 +TAPE_FILEMARKS = 1 +TAPE_SHORT_FILEMARKS = 2 +TAPE_LONG_FILEMARKS = 3 +TAPE_ABSOLUTE_POSITION = 0 +TAPE_LOGICAL_POSITION = 1 +TAPE_PSEUDO_LOGICAL_POSITION = 2 +TAPE_REWIND = 0 +TAPE_ABSOLUTE_BLOCK = 1 +TAPE_LOGICAL_BLOCK = 2 +TAPE_PSEUDO_LOGICAL_BLOCK = 3 +TAPE_SPACE_END_OF_DATA = 4 +TAPE_SPACE_RELATIVE_BLOCKS = 5 +TAPE_SPACE_FILEMARKS = 6 +TAPE_SPACE_SEQUENTIAL_FMKS = 7 +TAPE_SPACE_SETMARKS = 8 +TAPE_SPACE_SEQUENTIAL_SMKS = 9 +TAPE_DRIVE_FIXED = 1 +TAPE_DRIVE_SELECT = 2 +TAPE_DRIVE_INITIATOR = 4 +TAPE_DRIVE_ERASE_SHORT = 16 +TAPE_DRIVE_ERASE_LONG = 32 +TAPE_DRIVE_ERASE_BOP_ONLY = 64 +TAPE_DRIVE_ERASE_IMMEDIATE = 128 +TAPE_DRIVE_TAPE_CAPACITY = 256 +TAPE_DRIVE_TAPE_REMAINING = 512 +TAPE_DRIVE_FIXED_BLOCK = 1024 +TAPE_DRIVE_VARIABLE_BLOCK = 2048 +TAPE_DRIVE_WRITE_PROTECT = 4096 +TAPE_DRIVE_EOT_WZ_SIZE = 8192 +TAPE_DRIVE_ECC = 65536 +TAPE_DRIVE_COMPRESSION = 131072 +TAPE_DRIVE_PADDING = 262144 +TAPE_DRIVE_REPORT_SMKS = 524288 +TAPE_DRIVE_GET_ABSOLUTE_BLK = 1048576 +TAPE_DRIVE_GET_LOGICAL_BLK = 2097152 +TAPE_DRIVE_SET_EOT_WZ_SIZE = 4194304 +TAPE_DRIVE_LOAD_UNLOAD = -2147483647 +TAPE_DRIVE_TENSION = -2147483646 +TAPE_DRIVE_LOCK_UNLOCK = -2147483644 +TAPE_DRIVE_REWIND_IMMEDIATE = -2147483640 +TAPE_DRIVE_SET_BLOCK_SIZE = -2147483632 +TAPE_DRIVE_LOAD_UNLD_IMMED = -2147483616 +TAPE_DRIVE_TENSION_IMMED = -2147483584 +TAPE_DRIVE_LOCK_UNLK_IMMED = -2147483520 +TAPE_DRIVE_SET_ECC = -2147483392 +TAPE_DRIVE_SET_COMPRESSION = -2147483136 +TAPE_DRIVE_SET_PADDING = -2147482624 +TAPE_DRIVE_SET_REPORT_SMKS = -2147481600 +TAPE_DRIVE_ABSOLUTE_BLK = -2147479552 +TAPE_DRIVE_ABS_BLK_IMMED = -2147475456 +TAPE_DRIVE_LOGICAL_BLK = -2147467264 +TAPE_DRIVE_LOG_BLK_IMMED = -2147450880 +TAPE_DRIVE_END_OF_DATA = -2147418112 +TAPE_DRIVE_RELATIVE_BLKS = -2147352576 +TAPE_DRIVE_FILEMARKS = -2147221504 +TAPE_DRIVE_SEQUENTIAL_FMKS = -2146959360 +TAPE_DRIVE_SETMARKS = -2146435072 +TAPE_DRIVE_SEQUENTIAL_SMKS = -2145386496 +TAPE_DRIVE_REVERSE_POSITION = -2143289344 +TAPE_DRIVE_SPACE_IMMEDIATE = -2139095040 +TAPE_DRIVE_WRITE_SETMARKS = -2130706432 +TAPE_DRIVE_WRITE_FILEMARKS = -2113929216 +TAPE_DRIVE_WRITE_SHORT_FMKS = -2080374784 +TAPE_DRIVE_WRITE_LONG_FMKS = -2013265920 +TAPE_DRIVE_WRITE_MARK_IMMED = -1879048192 +TAPE_DRIVE_FORMAT = -1610612736 +TAPE_DRIVE_FORMAT_IMMEDIATE = -1073741824 +TAPE_FIXED_PARTITIONS = 0 +TAPE_SELECT_PARTITIONS = 1 +TAPE_INITIATOR_PARTITIONS = 2 +# Generated by h2py from \msvc20\include\winnt.h +# hacked and split by mhammond. + +APPLICATION_ERROR_MASK = 536870912 +ERROR_SEVERITY_SUCCESS = 0 +ERROR_SEVERITY_INFORMATIONAL = 1073741824 +ERROR_SEVERITY_WARNING = -2147483648 +ERROR_SEVERITY_ERROR = -1073741824 +MINCHAR = 128 +MAXCHAR = 127 +MINSHORT = 32768 +MAXSHORT = 32767 +MINLONG = -2147483648 +MAXLONG = 2147483647 +MAXBYTE = 255 +MAXWORD = 65535 +MAXDWORD = -1 +LANG_NEUTRAL = 0 +LANG_BULGARIAN = 2 +LANG_CHINESE = 4 +LANG_CROATIAN = 26 +LANG_CZECH = 5 +LANG_DANISH = 6 +LANG_DUTCH = 19 +LANG_ENGLISH = 9 +LANG_FINNISH = 11 +LANG_FRENCH = 12 +LANG_GERMAN = 7 +LANG_GREEK = 8 +LANG_HUNGARIAN = 14 +LANG_ICELANDIC = 15 +LANG_ITALIAN = 16 +LANG_JAPANESE = 17 +LANG_KOREAN = 18 +LANG_NORWEGIAN = 20 +LANG_POLISH = 21 +LANG_PORTUGUESE = 22 +LANG_ROMANIAN = 24 +LANG_RUSSIAN = 25 +LANG_SLOVAK = 27 +LANG_SLOVENIAN = 36 +LANG_SPANISH = 10 +LANG_SWEDISH = 29 +LANG_TURKISH = 31 +SUBLANG_NEUTRAL = 0 +SUBLANG_DEFAULT = 1 +SUBLANG_SYS_DEFAULT = 2 +SUBLANG_CHINESE_TRADITIONAL = 1 +SUBLANG_CHINESE_SIMPLIFIED = 2 +SUBLANG_CHINESE_HONGKONG = 3 +SUBLANG_CHINESE_SINGAPORE = 4 +SUBLANG_DUTCH = 1 +SUBLANG_DUTCH_BELGIAN = 2 +SUBLANG_ENGLISH_US = 1 +SUBLANG_ENGLISH_UK = 2 +SUBLANG_ENGLISH_AUS = 3 +SUBLANG_ENGLISH_CAN = 4 +SUBLANG_ENGLISH_NZ = 5 +SUBLANG_ENGLISH_EIRE = 6 +SUBLANG_FRENCH = 1 +SUBLANG_FRENCH_BELGIAN = 2 +SUBLANG_FRENCH_CANADIAN = 3 +SUBLANG_FRENCH_SWISS = 4 +SUBLANG_GERMAN = 1 +SUBLANG_GERMAN_SWISS = 2 +SUBLANG_GERMAN_AUSTRIAN = 3 +SUBLANG_ITALIAN = 1 +SUBLANG_ITALIAN_SWISS = 2 +SUBLANG_NORWEGIAN_BOKMAL = 1 +SUBLANG_NORWEGIAN_NYNORSK = 2 +SUBLANG_PORTUGUESE = 2 +SUBLANG_PORTUGUESE_BRAZILIAN = 1 +SUBLANG_SPANISH = 1 +SUBLANG_SPANISH_MEXICAN = 2 +SUBLANG_SPANISH_MODERN = 3 +SORT_DEFAULT = 0 +SORT_JAPANESE_XJIS = 0 +SORT_JAPANESE_UNICODE = 1 +SORT_CHINESE_BIG5 = 0 +SORT_CHINESE_UNICODE = 1 +SORT_KOREAN_KSC = 0 +SORT_KOREAN_UNICODE = 1 +def PRIMARYLANGID(lgid): return ((lgid) & 1023) + +def SUBLANGID(lgid): return ((lgid) >> 10) + +NLS_VALID_LOCALE_MASK = 1048575 +CONTEXT_PORTABLE_32BIT = 1048576 +CONTEXT_ALPHA = 131072 +CONTEXT_CONTROL = (CONTEXT_ALPHA | 1) +CONTEXT_FLOATING_POINT = (CONTEXT_ALPHA | 2) +CONTEXT_INTEGER = (CONTEXT_ALPHA | 4) +CONTEXT_FULL = (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER) +SIZE_OF_80387_REGISTERS = 80 +CONTEXT_FULL = (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER) +CONTEXT_CONTROL = 1 +CONTEXT_FLOATING_POINT = 2 +CONTEXT_INTEGER = 4 +CONTEXT_FULL = (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER) +PROCESS_TERMINATE = (1) +PROCESS_CREATE_THREAD = (2) +PROCESS_VM_OPERATION = (8) +PROCESS_VM_READ = (16) +PROCESS_VM_WRITE = (32) +PROCESS_DUP_HANDLE = (64) +PROCESS_CREATE_PROCESS = (128) +PROCESS_SET_QUOTA = (256) +PROCESS_SET_INFORMATION = (512) +PROCESS_QUERY_INFORMATION = (1024) +PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 4095) +THREAD_TERMINATE = (1) +THREAD_SUSPEND_RESUME = (2) +THREAD_GET_CONTEXT = (8) +THREAD_SET_CONTEXT = (16) +THREAD_SET_INFORMATION = (32) +THREAD_QUERY_INFORMATION = (64) +THREAD_SET_THREAD_TOKEN = (128) +THREAD_IMPERSONATE = (256) +THREAD_DIRECT_IMPERSONATION = (512) +TLS_MINIMUM_AVAILABLE = 64 +EVENT_MODIFY_STATE = 2 +MUTANT_QUERY_STATE = 1 +SEMAPHORE_MODIFY_STATE = 2 +TIME_ZONE_ID_UNKNOWN = 0 +TIME_ZONE_ID_STANDARD = 1 +TIME_ZONE_ID_DAYLIGHT = 2 +PROCESSOR_INTEL_386 = 386 +PROCESSOR_INTEL_486 = 486 +PROCESSOR_INTEL_PENTIUM = 586 +PROCESSOR_INTEL_860 = 860 +PROCESSOR_MIPS_R2000 = 2000 +PROCESSOR_MIPS_R3000 = 3000 +PROCESSOR_MIPS_R4000 = 4000 +PROCESSOR_ALPHA_21064 = 21064 +PROCESSOR_PPC_601 = 601 +PROCESSOR_PPC_603 = 603 +PROCESSOR_PPC_604 = 604 +PROCESSOR_PPC_620 = 620 +SECTION_QUERY = 1 +SECTION_MAP_WRITE = 2 +SECTION_MAP_READ = 4 +SECTION_MAP_EXECUTE = 8 +SECTION_EXTEND_SIZE = 16 +PAGE_NOACCESS = 1 +PAGE_READONLY = 2 +PAGE_READWRITE = 4 +PAGE_WRITECOPY = 8 +PAGE_EXECUTE = 16 +PAGE_EXECUTE_READ = 32 +PAGE_EXECUTE_READWRITE = 64 +PAGE_EXECUTE_WRITECOPY = 128 +PAGE_GUARD = 256 +PAGE_NOCACHE = 512 +MEM_COMMIT = 4096 +MEM_RESERVE = 8192 +MEM_DECOMMIT = 16384 +MEM_RELEASE = 32768 +MEM_FREE = 65536 +MEM_PRIVATE = 131072 +MEM_MAPPED = 262144 +MEM_TOP_DOWN = 1048576 + +# Generated by h2py from \msvc20\include\winnt.h +# hacked and split by mhammond. +SEC_FILE = 8388608 +SEC_IMAGE = 16777216 +SEC_RESERVE = 67108864 +SEC_COMMIT = 134217728 +SEC_NOCACHE = 268435456 +MEM_IMAGE = SEC_IMAGE +FILE_SHARE_READ = 1 +FILE_SHARE_WRITE = 2 +FILE_SHARE_DELETE = 4 +FILE_ATTRIBUTE_READONLY = 1 +FILE_ATTRIBUTE_HIDDEN = 2 +FILE_ATTRIBUTE_SYSTEM = 4 +FILE_ATTRIBUTE_DIRECTORY = 16 +FILE_ATTRIBUTE_ARCHIVE = 32 +FILE_ATTRIBUTE_NORMAL = 128 +FILE_ATTRIBUTE_TEMPORARY = 256 +FILE_ATTRIBUTE_ATOMIC_WRITE = 512 +FILE_ATTRIBUTE_XACTION_WRITE = 1024 +FILE_ATTRIBUTE_COMPRESSED = 2048 +FILE_NOTIFY_CHANGE_FILE_NAME = 1 +FILE_NOTIFY_CHANGE_DIR_NAME = 2 +FILE_NOTIFY_CHANGE_ATTRIBUTES = 4 +FILE_NOTIFY_CHANGE_SIZE = 8 +FILE_NOTIFY_CHANGE_LAST_WRITE = 16 +FILE_NOTIFY_CHANGE_SECURITY = 256 +FILE_CASE_SENSITIVE_SEARCH = 1 +FILE_CASE_PRESERVED_NAMES = 2 +FILE_UNICODE_ON_DISK = 4 +FILE_PERSISTENT_ACLS = 8 +FILE_FILE_COMPRESSION = 16 +FILE_VOLUME_IS_COMPRESSED = 32768 +IO_COMPLETION_MODIFY_STATE = 2 +DUPLICATE_CLOSE_SOURCE = 1 +DUPLICATE_SAME_ACCESS = 2 +SID_MAX_SUB_AUTHORITIES = (15) +SECURITY_NULL_RID = (0) +SECURITY_WORLD_RID = (0) +SECURITY_LOCAL_RID = (0X00000000) +SECURITY_CREATOR_OWNER_RID = (0) +SECURITY_CREATOR_GROUP_RID = (1) +SECURITY_DIALUP_RID = (1) +SECURITY_NETWORK_RID = (2) +SECURITY_BATCH_RID = (3) +SECURITY_INTERACTIVE_RID = (4) +SECURITY_SERVICE_RID = (6) +SECURITY_ANONYMOUS_LOGON_RID = (7) +SECURITY_LOGON_IDS_RID = (5) +SECURITY_LOGON_IDS_RID_COUNT = (3) +SECURITY_LOCAL_SYSTEM_RID = (18) +SECURITY_NT_NON_UNIQUE = (21) +SECURITY_BUILTIN_DOMAIN_RID = (32) +DOMAIN_USER_RID_ADMIN = (500) +DOMAIN_USER_RID_GUEST = (501) +DOMAIN_GROUP_RID_ADMINS = (512) +DOMAIN_GROUP_RID_USERS = (513) +DOMAIN_GROUP_RID_GUESTS = (514) +DOMAIN_ALIAS_RID_ADMINS = (544) +DOMAIN_ALIAS_RID_USERS = (545) +DOMAIN_ALIAS_RID_GUESTS = (546) +DOMAIN_ALIAS_RID_POWER_USERS = (547) +DOMAIN_ALIAS_RID_ACCOUNT_OPS = (548) +DOMAIN_ALIAS_RID_SYSTEM_OPS = (549) +DOMAIN_ALIAS_RID_PRINT_OPS = (550) +DOMAIN_ALIAS_RID_BACKUP_OPS = (551) +DOMAIN_ALIAS_RID_REPLICATOR = (552) +SE_GROUP_MANDATORY = (1) +SE_GROUP_ENABLED_BY_DEFAULT = (2) +SE_GROUP_ENABLED = (4) +SE_GROUP_OWNER = (8) +SE_GROUP_LOGON_ID = (-1073741824) +ACL_REVISION = (2) +ACL_REVISION1 = (1) +ACL_REVISION2 = (2) +ACCESS_ALLOWED_ACE_TYPE = (0) +ACCESS_DENIED_ACE_TYPE = (1) +SYSTEM_AUDIT_ACE_TYPE = (2) +SYSTEM_ALARM_ACE_TYPE = (3) +OBJECT_INHERIT_ACE = (1) +CONTAINER_INHERIT_ACE = (2) +NO_PROPAGATE_INHERIT_ACE = (4) +INHERIT_ONLY_ACE = (8) +VALID_INHERIT_FLAGS = (15) +SUCCESSFUL_ACCESS_ACE_FLAG = (64) +FAILED_ACCESS_ACE_FLAG = (128) +SECURITY_DESCRIPTOR_REVISION = (1) +SECURITY_DESCRIPTOR_REVISION1 = (1) +SECURITY_DESCRIPTOR_MIN_LENGTH = (20) +SE_OWNER_DEFAULTED = (1) +SE_GROUP_DEFAULTED = (2) +SE_DACL_PRESENT = (4) +SE_DACL_DEFAULTED = (8) +SE_SACL_PRESENT = (16) +SE_SACL_DEFAULTED = (32) +SE_SELF_RELATIVE = (32768) +SE_PRIVILEGE_ENABLED_BY_DEFAULT = (1) +SE_PRIVILEGE_ENABLED = (2) +SE_PRIVILEGE_USED_FOR_ACCESS = (-2147483648) +PRIVILEGE_SET_ALL_NECESSARY = (1) +SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege" +SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege" +SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege" +SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege" +SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege" +SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege" +SE_TCB_NAME = "SeTcbPrivilege" +SE_SECURITY_NAME = "SeSecurityPrivilege" +SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege" +SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege" +SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege" +SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege" +SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege" +SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege" +SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege" +SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege" +SE_BACKUP_NAME = "SeBackupPrivilege" +SE_RESTORE_NAME = "SeRestorePrivilege" +SE_SHUTDOWN_NAME = "SeShutdownPrivilege" +SE_DEBUG_NAME = "SeDebugPrivilege" +SE_AUDIT_NAME = "SeAuditPrivilege" +SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege" +SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege" +SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege" + +TOKEN_ASSIGN_PRIMARY = (1) +TOKEN_DUPLICATE = (2) +TOKEN_IMPERSONATE = (4) +TOKEN_QUERY = (8) +TOKEN_QUERY_SOURCE = (16) +TOKEN_ADJUST_PRIVILEGES = (32) +TOKEN_ADJUST_GROUPS = (64) +TOKEN_ADJUST_DEFAULT = (128) +TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED |\ + TOKEN_ASSIGN_PRIMARY |\ + TOKEN_DUPLICATE |\ + TOKEN_IMPERSONATE |\ + TOKEN_QUERY |\ + TOKEN_QUERY_SOURCE |\ + TOKEN_ADJUST_PRIVILEGES |\ + TOKEN_ADJUST_GROUPS |\ + TOKEN_ADJUST_DEFAULT) +TOKEN_READ = (STANDARD_RIGHTS_READ |\ + TOKEN_QUERY) +TOKEN_WRITE = (STANDARD_RIGHTS_WRITE |\ + TOKEN_ADJUST_PRIVILEGES |\ + TOKEN_ADJUST_GROUPS |\ + TOKEN_ADJUST_DEFAULT) +TOKEN_EXECUTE = (STANDARD_RIGHTS_EXECUTE) +TOKEN_SOURCE_LENGTH = 8 + +KEY_QUERY_VALUE = (1) +KEY_SET_VALUE = (2) +KEY_CREATE_SUB_KEY = (4) +KEY_ENUMERATE_SUB_KEYS = (8) +KEY_NOTIFY = (16) +KEY_CREATE_LINK = (32) +KEY_READ = ((STANDARD_RIGHTS_READ |\ + KEY_QUERY_VALUE |\ + KEY_ENUMERATE_SUB_KEYS |\ + KEY_NOTIFY) \ + & \ + (~SYNCHRONIZE)) +KEY_WRITE = ((STANDARD_RIGHTS_WRITE |\ + KEY_SET_VALUE |\ + KEY_CREATE_SUB_KEY) \ + & \ + (~SYNCHRONIZE)) +KEY_EXECUTE = ((KEY_READ) \ + & \ + (~SYNCHRONIZE)) +KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL |\ + KEY_QUERY_VALUE |\ + KEY_SET_VALUE |\ + KEY_CREATE_SUB_KEY |\ + KEY_ENUMERATE_SUB_KEYS |\ + KEY_NOTIFY |\ + KEY_CREATE_LINK) \ + & \ + (~SYNCHRONIZE)) +REG_NOTIFY_CHANGE_ATTRIBUTES = (2) +REG_NOTIFY_CHANGE_SECURITY = (8) +REG_RESOURCE_REQUIREMENTS_LIST = ( 10 ) +REG_NONE = ( 0 ) # No value type +REG_SZ = ( 1 ) # Unicode nul terminated string +REG_EXPAND_SZ = ( 2 ) # Unicode nul terminated string + # (with environment variable references) +REG_BINARY = ( 3 ) # Free form binary +REG_DWORD = ( 4 ) # 32-bit number +REG_DWORD_LITTLE_ENDIAN = ( 4 ) # 32-bit number (same as REG_DWORD) +REG_DWORD_BIG_ENDIAN = ( 5 ) # 32-bit number +REG_LINK = ( 6 ) # Symbolic Link (unicode) +REG_MULTI_SZ = ( 7 ) # Multiple Unicode strings +REG_RESOURCE_LIST = ( 8 ) # Resource list in the resource map +REG_FULL_RESOURCE_DESCRIPTOR =( 9 ) # Resource list in the hardware description +REG_RESOURCE_REQUIREMENTS_LIST = ( 10 ) +REG_QWORD = ( 11 ) # 64-bit number +REG_QWORD_LITTLE_ENDIAN = ( 11 ) # 64-bit number (same as REG_QWORD) + + +# Generated by h2py from \msvc20\include\winnt.h +# hacked and split by mhammond. +# Included from string.h +_NLSCMPERROR = 2147483647 +NULL = 0 +HEAP_NO_SERIALIZE = 1 +HEAP_GROWABLE = 2 +HEAP_GENERATE_EXCEPTIONS = 4 +HEAP_ZERO_MEMORY = 8 +HEAP_REALLOC_IN_PLACE_ONLY = 16 +HEAP_TAIL_CHECKING_ENABLED = 32 +HEAP_FREE_CHECKING_ENABLED = 64 +HEAP_DISABLE_COALESCE_ON_FREE = 128 +IS_TEXT_UNICODE_ASCII16 = 1 +IS_TEXT_UNICODE_REVERSE_ASCII16 = 16 +IS_TEXT_UNICODE_STATISTICS = 2 +IS_TEXT_UNICODE_REVERSE_STATISTICS = 32 +IS_TEXT_UNICODE_CONTROLS = 4 +IS_TEXT_UNICODE_REVERSE_CONTROLS = 64 +IS_TEXT_UNICODE_SIGNATURE = 8 +IS_TEXT_UNICODE_REVERSE_SIGNATURE = 128 +IS_TEXT_UNICODE_ILLEGAL_CHARS = 256 +IS_TEXT_UNICODE_ODD_LENGTH = 512 +IS_TEXT_UNICODE_DBCS_LEADBYTE = 1024 +IS_TEXT_UNICODE_NULL_BYTES = 4096 +IS_TEXT_UNICODE_UNICODE_MASK = 15 +IS_TEXT_UNICODE_REVERSE_MASK = 240 +IS_TEXT_UNICODE_NOT_UNICODE_MASK = 3840 +IS_TEXT_UNICODE_NOT_ASCII_MASK = 61440 +COMPRESSION_FORMAT_NONE = (0) +COMPRESSION_FORMAT_DEFAULT = (1) +COMPRESSION_FORMAT_LZNT1 = (2) +COMPRESSION_ENGINE_STANDARD = (0) +COMPRESSION_ENGINE_MAXIMUM = (256) +MESSAGE_RESOURCE_UNICODE = 1 +RTL_CRITSECT_TYPE = 0 +RTL_RESOURCE_TYPE = 1 +DLL_PROCESS_ATTACH = 1 +DLL_THREAD_ATTACH = 2 +DLL_THREAD_DETACH = 3 +DLL_PROCESS_DETACH = 0 +EVENTLOG_SEQUENTIAL_READ = 0X0001 +EVENTLOG_SEEK_READ = 0X0002 +EVENTLOG_FORWARDS_READ = 0X0004 +EVENTLOG_BACKWARDS_READ = 0X0008 +EVENTLOG_SUCCESS = 0X0000 +EVENTLOG_ERROR_TYPE = 1 +EVENTLOG_WARNING_TYPE = 2 +EVENTLOG_INFORMATION_TYPE = 4 +EVENTLOG_AUDIT_SUCCESS = 8 +EVENTLOG_AUDIT_FAILURE = 16 +EVENTLOG_START_PAIRED_EVENT = 1 +EVENTLOG_END_PAIRED_EVENT = 2 +EVENTLOG_END_ALL_PAIRED_EVENTS = 4 +EVENTLOG_PAIRED_EVENT_ACTIVE = 8 +EVENTLOG_PAIRED_EVENT_INACTIVE = 16 +# Generated by h2py from \msvc20\include\winnt.h +# hacked and split by mhammond. +OWNER_SECURITY_INFORMATION = (0X00000001) +GROUP_SECURITY_INFORMATION = (0X00000002) +DACL_SECURITY_INFORMATION = (0X00000004) +SACL_SECURITY_INFORMATION = (0X00000008) +IMAGE_SIZEOF_FILE_HEADER = 20 +IMAGE_FILE_MACHINE_UNKNOWN = 0 +IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16 +IMAGE_SIZEOF_ROM_OPTIONAL_HEADER = 56 +IMAGE_SIZEOF_STD_OPTIONAL_HEADER = 28 +IMAGE_SIZEOF_NT_OPTIONAL_HEADER = 224 +IMAGE_NT_OPTIONAL_HDR_MAGIC = 267 +IMAGE_ROM_OPTIONAL_HDR_MAGIC = 263 +IMAGE_SIZEOF_SHORT_NAME = 8 +IMAGE_SIZEOF_SECTION_HEADER = 40 +IMAGE_SIZEOF_SYMBOL = 18 +IMAGE_SYM_CLASS_NULL = 0 +IMAGE_SYM_CLASS_AUTOMATIC = 1 +IMAGE_SYM_CLASS_EXTERNAL = 2 +IMAGE_SYM_CLASS_STATIC = 3 +IMAGE_SYM_CLASS_REGISTER = 4 +IMAGE_SYM_CLASS_EXTERNAL_DEF = 5 +IMAGE_SYM_CLASS_LABEL = 6 +IMAGE_SYM_CLASS_UNDEFINED_LABEL = 7 +IMAGE_SYM_CLASS_MEMBER_OF_STRUCT = 8 +IMAGE_SYM_CLASS_ARGUMENT = 9 +IMAGE_SYM_CLASS_STRUCT_TAG = 10 +IMAGE_SYM_CLASS_MEMBER_OF_UNION = 11 +IMAGE_SYM_CLASS_UNION_TAG = 12 +IMAGE_SYM_CLASS_TYPE_DEFINITION = 13 +IMAGE_SYM_CLASS_UNDEFINED_STATIC = 14 +IMAGE_SYM_CLASS_ENUM_TAG = 15 +IMAGE_SYM_CLASS_MEMBER_OF_ENUM = 16 +IMAGE_SYM_CLASS_REGISTER_PARAM = 17 +IMAGE_SYM_CLASS_BIT_FIELD = 18 +IMAGE_SYM_CLASS_BLOCK = 100 +IMAGE_SYM_CLASS_FUNCTION = 101 +IMAGE_SYM_CLASS_END_OF_STRUCT = 102 +IMAGE_SYM_CLASS_FILE = 103 +IMAGE_SYM_CLASS_SECTION = 104 +IMAGE_SYM_CLASS_WEAK_EXTERNAL = 105 +N_BTMASK = 017 +N_TMASK = 060 +N_TMASK1 = 0300 +N_TMASK2 = 0360 +N_BTSHFT = 4 +N_TSHIFT = 2 +IMAGE_SIZEOF_AUX_SYMBOL = 18 +IMAGE_COMDAT_SELECT_NODUPLICATES = 1 +IMAGE_COMDAT_SELECT_ANY = 2 +IMAGE_COMDAT_SELECT_SAME_SIZE = 3 +IMAGE_COMDAT_SELECT_EXACT_MATCH = 4 +IMAGE_COMDAT_SELECT_ASSOCIATIVE = 5 +IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY = 1 +IMAGE_WEAK_EXTERN_SEARCH_LIBRARY = 2 +IMAGE_WEAK_EXTERN_SEARCH_ALIAS = 3 +IMAGE_SIZEOF_RELOCATION = 10 +IMAGE_REL_I386_SECTION = 012 +IMAGE_REL_I386_SECREL = 013 +IMAGE_REL_MIPS_REFHALF = 01 +IMAGE_REL_MIPS_REFWORD = 02 +IMAGE_REL_MIPS_JMPADDR = 03 +IMAGE_REL_MIPS_REFHI = 04 +IMAGE_REL_MIPS_REFLO = 05 +IMAGE_REL_MIPS_GPREL = 06 +IMAGE_REL_MIPS_LITERAL = 07 +IMAGE_REL_MIPS_SECTION = 012 +IMAGE_REL_MIPS_SECREL = 013 +IMAGE_REL_MIPS_REFWORDNB = 042 +IMAGE_REL_MIPS_PAIR = 045 +IMAGE_REL_ALPHA_ABSOLUTE = 0 +IMAGE_REL_ALPHA_REFLONG = 1 +IMAGE_REL_ALPHA_REFQUAD = 2 +IMAGE_REL_ALPHA_GPREL32 = 3 +IMAGE_REL_ALPHA_LITERAL = 4 +IMAGE_REL_ALPHA_LITUSE = 5 +IMAGE_REL_ALPHA_GPDISP = 6 +IMAGE_REL_ALPHA_BRADDR = 7 +IMAGE_REL_ALPHA_HINT = 8 +IMAGE_REL_ALPHA_INLINE_REFLONG = 9 +IMAGE_REL_ALPHA_REFHI = 10 +IMAGE_REL_ALPHA_REFLO = 11 +IMAGE_REL_ALPHA_PAIR = 12 +IMAGE_REL_ALPHA_MATCH = 13 +IMAGE_REL_ALPHA_SECTION = 14 +IMAGE_REL_ALPHA_SECREL = 15 +IMAGE_REL_ALPHA_REFLONGNB = 16 +IMAGE_SIZEOF_BASE_RELOCATION = 8 +IMAGE_REL_BASED_ABSOLUTE = 0 +IMAGE_REL_BASED_HIGH = 1 +IMAGE_REL_BASED_LOW = 2 +IMAGE_REL_BASED_HIGHLOW = 3 +IMAGE_REL_BASED_HIGHADJ = 4 +IMAGE_REL_BASED_MIPS_JMPADDR = 5 +IMAGE_SIZEOF_LINENUMBER = 6 +IMAGE_ARCHIVE_START_SIZE = 8 +IMAGE_ARCHIVE_START = "!\n" +IMAGE_ARCHIVE_END = "`\n" +IMAGE_ARCHIVE_PAD = "\n" +IMAGE_ARCHIVE_LINKER_MEMBER = "/ " +IMAGE_ARCHIVE_LONGNAMES_MEMBER = "// " +IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR = 60 +IMAGE_ORDINAL_FLAG = -2147483648 +def IMAGE_SNAP_BY_ORDINAL(Ordinal): return ((Ordinal & IMAGE_ORDINAL_FLAG) != 0) + +def IMAGE_ORDINAL(Ordinal): return (Ordinal & 65535) + +IMAGE_RESOURCE_NAME_IS_STRING = -2147483648 +IMAGE_RESOURCE_DATA_IS_DIRECTORY = -2147483648 +IMAGE_DEBUG_TYPE_UNKNOWN = 0 +IMAGE_DEBUG_TYPE_COFF = 1 +IMAGE_DEBUG_TYPE_CODEVIEW = 2 +IMAGE_DEBUG_TYPE_FPO = 3 +IMAGE_DEBUG_TYPE_MISC = 4 +IMAGE_DEBUG_TYPE_EXCEPTION = 5 +IMAGE_DEBUG_TYPE_FIXUP = 6 +IMAGE_DEBUG_TYPE_OMAP_TO_SRC = 7 +IMAGE_DEBUG_TYPE_OMAP_FROM_SRC = 8 +FRAME_FPO = 0 +FRAME_TRAP = 1 +FRAME_TSS = 2 +SIZEOF_RFPO_DATA = 16 +IMAGE_DEBUG_MISC_EXENAME = 1 +IMAGE_SEPARATE_DEBUG_SIGNATURE = 18756 +# Generated by h2py from \msvcnt\include\wingdi.h +# hacked and split manually by mhammond. +NEWFRAME = 1 +ABORTDOC = 2 +NEXTBAND = 3 +SETCOLORTABLE = 4 +GETCOLORTABLE = 5 +FLUSHOUTPUT = 6 +DRAFTMODE = 7 +QUERYESCSUPPORT = 8 +SETABORTPROC = 9 +STARTDOC = 10 +ENDDOC = 11 +GETPHYSPAGESIZE = 12 +GETPRINTINGOFFSET = 13 +GETSCALINGFACTOR = 14 +MFCOMMENT = 15 +GETPENWIDTH = 16 +SETCOPYCOUNT = 17 +SELECTPAPERSOURCE = 18 +DEVICEDATA = 19 +PASSTHROUGH = 19 +GETTECHNOLGY = 20 +GETTECHNOLOGY = 20 +SETLINECAP = 21 +SETLINEJOIN = 22 +SETMITERLIMIT = 23 +BANDINFO = 24 +DRAWPATTERNRECT = 25 +GETVECTORPENSIZE = 26 +GETVECTORBRUSHSIZE = 27 +ENABLEDUPLEX = 28 +GETSETPAPERBINS = 29 +GETSETPRINTORIENT = 30 +ENUMPAPERBINS = 31 +SETDIBSCALING = 32 +EPSPRINTING = 33 +ENUMPAPERMETRICS = 34 +GETSETPAPERMETRICS = 35 +POSTSCRIPT_DATA = 37 +POSTSCRIPT_IGNORE = 38 +MOUSETRAILS = 39 +GETDEVICEUNITS = 42 +GETEXTENDEDTEXTMETRICS = 256 +GETEXTENTTABLE = 257 +GETPAIRKERNTABLE = 258 +GETTRACKKERNTABLE = 259 +EXTTEXTOUT = 512 +GETFACENAME = 513 +DOWNLOADFACE = 514 +ENABLERELATIVEWIDTHS = 768 +ENABLEPAIRKERNING = 769 +SETKERNTRACK = 770 +SETALLJUSTVALUES = 771 +SETCHARSET = 772 +STRETCHBLT = 2048 +GETSETSCREENPARAMS = 3072 +BEGIN_PATH = 4096 +CLIP_TO_PATH = 4097 +END_PATH = 4098 +EXT_DEVICE_CAPS = 4099 +RESTORE_CTM = 4100 +SAVE_CTM = 4101 +SET_ARC_DIRECTION = 4102 +SET_BACKGROUND_COLOR = 4103 +SET_POLY_MODE = 4104 +SET_SCREEN_ANGLE = 4105 +SET_SPREAD = 4106 +TRANSFORM_CTM = 4107 +SET_CLIP_BOX = 4108 +SET_BOUNDS = 4109 +SET_MIRROR_MODE = 4110 +OPENCHANNEL = 4110 +DOWNLOADHEADER = 4111 +CLOSECHANNEL = 4112 +POSTSCRIPT_PASSTHROUGH = 4115 +ENCAPSULATED_POSTSCRIPT = 4116 +SP_NOTREPORTED = 16384 +SP_ERROR = (-1) +SP_APPABORT = (-2) +SP_USERABORT = (-3) +SP_OUTOFDISK = (-4) +SP_OUTOFMEMORY = (-5) +PR_JOBSTATUS = 0 +OBJ_PEN = 1 +OBJ_BRUSH = 2 +OBJ_DC = 3 +OBJ_METADC = 4 +OBJ_PAL = 5 +OBJ_FONT = 6 +OBJ_BITMAP = 7 +OBJ_REGION = 8 +OBJ_METAFILE = 9 +OBJ_MEMDC = 10 +OBJ_EXTPEN = 11 +OBJ_ENHMETADC = 12 +OBJ_ENHMETAFILE = 13 +MWT_IDENTITY = 1 +MWT_LEFTMULTIPLY = 2 +MWT_RIGHTMULTIPLY = 3 +MWT_MIN = MWT_IDENTITY +MWT_MAX = MWT_RIGHTMULTIPLY +BI_RGB = 0 +BI_RLE8 = 1 +BI_RLE4 = 2 +BI_BITFIELDS = 3 +TMPF_FIXED_PITCH = 1 +TMPF_VECTOR = 2 +TMPF_DEVICE = 8 +TMPF_TRUETYPE = 4 +NTM_REGULAR = 64 +NTM_BOLD = 32 +NTM_ITALIC = 1 +LF_FACESIZE = 32 +LF_FULLFACESIZE = 64 +OUT_DEFAULT_PRECIS = 0 +OUT_STRING_PRECIS = 1 +OUT_CHARACTER_PRECIS = 2 +OUT_STROKE_PRECIS = 3 +OUT_TT_PRECIS = 4 +OUT_DEVICE_PRECIS = 5 +OUT_RASTER_PRECIS = 6 +OUT_TT_ONLY_PRECIS = 7 +OUT_OUTLINE_PRECIS = 8 +CLIP_DEFAULT_PRECIS = 0 +CLIP_CHARACTER_PRECIS = 1 +CLIP_STROKE_PRECIS = 2 +CLIP_MASK = 15 +CLIP_LH_ANGLES = (1<<4) +CLIP_TT_ALWAYS = (2<<4) +CLIP_EMBEDDED = (8<<4) +DEFAULT_QUALITY = 0 +DRAFT_QUALITY = 1 +PROOF_QUALITY = 2 +NONANTIALIASED_QUALITY = 3 +ANTIALIASED_QUALITY = 4 +CLEARTYPE_QUALITY = 5 +CLEARTYPE_NATURAL_QUALITY = 6 +DEFAULT_PITCH = 0 +FIXED_PITCH = 1 +VARIABLE_PITCH = 2 +ANSI_CHARSET = 0 +DEFAULT_CHARSET = 1 +SYMBOL_CHARSET = 2 +SHIFTJIS_CHARSET = 128 +HANGEUL_CHARSET = 129 +CHINESEBIG5_CHARSET = 136 +OEM_CHARSET = 255 +JOHAB_CHARSET = 130 +HEBREW_CHARSET = 177 +ARABIC_CHARSET = 178 +GREEK_CHARSET = 161 +TURKISH_CHARSET = 162 +VIETNAMESE_CHARSET = 163 +THAI_CHARSET = 222 +EASTEUROPE_CHARSET = 238 +RUSSIAN_CHARSET = 204 +MAC_CHARSET = 77 +BALTIC_CHARSET = 186 +FF_DONTCARE = (0<<4) +FF_ROMAN = (1<<4) +FF_SWISS = (2<<4) +FF_MODERN = (3<<4) +FF_SCRIPT = (4<<4) +FF_DECORATIVE = (5<<4) +FW_DONTCARE = 0 +FW_THIN = 100 +FW_EXTRALIGHT = 200 +FW_LIGHT = 300 +FW_NORMAL = 400 +FW_MEDIUM = 500 +FW_SEMIBOLD = 600 +FW_BOLD = 700 +FW_EXTRABOLD = 800 +FW_HEAVY = 900 +FW_ULTRALIGHT = FW_EXTRALIGHT +FW_REGULAR = FW_NORMAL +FW_DEMIBOLD = FW_SEMIBOLD +FW_ULTRABOLD = FW_EXTRABOLD +FW_BLACK = FW_HEAVY +# Generated by h2py from \msvcnt\include\wingdi.h +# hacked and split manually by mhammond. +BS_SOLID = 0 +BS_NULL = 1 +BS_HOLLOW = BS_NULL +BS_HATCHED = 2 +BS_PATTERN = 3 +BS_INDEXED = 4 +BS_DIBPATTERN = 5 +BS_DIBPATTERNPT = 6 +BS_PATTERN8X8 = 7 +BS_DIBPATTERN8X8 = 8 +HS_HORIZONTAL = 0 +HS_VERTICAL = 1 +HS_FDIAGONAL = 2 +HS_BDIAGONAL = 3 +HS_CROSS = 4 +HS_DIAGCROSS = 5 +HS_FDIAGONAL1 = 6 +HS_BDIAGONAL1 = 7 +HS_SOLID = 8 +HS_DENSE1 = 9 +HS_DENSE2 = 10 +HS_DENSE3 = 11 +HS_DENSE4 = 12 +HS_DENSE5 = 13 +HS_DENSE6 = 14 +HS_DENSE7 = 15 +HS_DENSE8 = 16 +HS_NOSHADE = 17 +HS_HALFTONE = 18 +HS_SOLIDCLR = 19 +HS_DITHEREDCLR = 20 +HS_SOLIDTEXTCLR = 21 +HS_DITHEREDTEXTCLR = 22 +HS_SOLIDBKCLR = 23 +HS_DITHEREDBKCLR = 24 +HS_API_MAX = 25 +PS_SOLID = 0 +PS_DASH = 1 +PS_DOT = 2 +PS_DASHDOT = 3 +PS_DASHDOTDOT = 4 +PS_NULL = 5 +PS_INSIDEFRAME = 6 +PS_USERSTYLE = 7 +PS_ALTERNATE = 8 +PS_STYLE_MASK = 15 +PS_ENDCAP_ROUND = 0 +PS_ENDCAP_SQUARE = 256 +PS_ENDCAP_FLAT = 512 +PS_ENDCAP_MASK = 3840 +PS_JOIN_ROUND = 0 +PS_JOIN_BEVEL = 4096 +PS_JOIN_MITER = 8192 +PS_JOIN_MASK = 61440 +PS_COSMETIC = 0 +PS_GEOMETRIC = 65536 +PS_TYPE_MASK = 983040 +AD_COUNTERCLOCKWISE = 1 +AD_CLOCKWISE = 2 +DRIVERVERSION = 0 +TECHNOLOGY = 2 +HORZSIZE = 4 +VERTSIZE = 6 +HORZRES = 8 +VERTRES = 10 +BITSPIXEL = 12 +PLANES = 14 +NUMBRUSHES = 16 +NUMPENS = 18 +NUMMARKERS = 20 +NUMFONTS = 22 +NUMCOLORS = 24 +PDEVICESIZE = 26 +CURVECAPS = 28 +LINECAPS = 30 +POLYGONALCAPS = 32 +TEXTCAPS = 34 +CLIPCAPS = 36 +RASTERCAPS = 38 +ASPECTX = 40 +ASPECTY = 42 +ASPECTXY = 44 +LOGPIXELSX = 88 +LOGPIXELSY = 90 +SIZEPALETTE = 104 +NUMRESERVED = 106 +COLORRES = 108 +DT_PLOTTER = 0 +DT_RASDISPLAY = 1 +DT_RASPRINTER = 2 +DT_RASCAMERA = 3 +DT_CHARSTREAM = 4 +DT_METAFILE = 5 +DT_DISPFILE = 6 +CC_NONE = 0 +CC_CIRCLES = 1 +CC_PIE = 2 +CC_CHORD = 4 +CC_ELLIPSES = 8 +CC_WIDE = 16 +CC_STYLED = 32 +CC_WIDESTYLED = 64 +CC_INTERIORS = 128 +CC_ROUNDRECT = 256 +LC_NONE = 0 +LC_POLYLINE = 2 +LC_MARKER = 4 +LC_POLYMARKER = 8 +LC_WIDE = 16 +LC_STYLED = 32 +LC_WIDESTYLED = 64 +LC_INTERIORS = 128 +PC_NONE = 0 +PC_POLYGON = 1 +PC_RECTANGLE = 2 +PC_WINDPOLYGON = 4 +PC_TRAPEZOID = 4 +PC_SCANLINE = 8 +PC_WIDE = 16 +PC_STYLED = 32 +PC_WIDESTYLED = 64 +PC_INTERIORS = 128 +CP_NONE = 0 +CP_RECTANGLE = 1 +CP_REGION = 2 +TC_OP_CHARACTER = 1 +TC_OP_STROKE = 2 +TC_CP_STROKE = 4 +TC_CR_90 = 8 +TC_CR_ANY = 16 +TC_SF_X_YINDEP = 32 +TC_SA_DOUBLE = 64 +TC_SA_INTEGER = 128 +TC_SA_CONTIN = 256 +TC_EA_DOUBLE = 512 +TC_IA_ABLE = 1024 +TC_UA_ABLE = 2048 +TC_SO_ABLE = 4096 +TC_RA_ABLE = 8192 +TC_VA_ABLE = 16384 +TC_RESERVED = 32768 +TC_SCROLLBLT = 65536 +RC_BITBLT = 1 +RC_BANDING = 2 +RC_SCALING = 4 +RC_BITMAP64 = 8 +RC_GDI20_OUTPUT = 16 +RC_GDI20_STATE = 32 +RC_SAVEBITMAP = 64 +RC_DI_BITMAP = 128 +RC_PALETTE = 256 +RC_DIBTODEV = 512 +RC_BIGFONT = 1024 +RC_STRETCHBLT = 2048 +RC_FLOODFILL = 4096 +RC_STRETCHDIB = 8192 +RC_OP_DX_OUTPUT = 16384 +RC_DEVBITS = 32768 +DIB_RGB_COLORS = 0 +DIB_PAL_COLORS = 1 +DIB_PAL_INDICES = 2 +DIB_PAL_PHYSINDICES = 2 +DIB_PAL_LOGINDICES = 4 +SYSPAL_ERROR = 0 +SYSPAL_STATIC = 1 +SYSPAL_NOSTATIC = 2 +CBM_CREATEDIB = 2 +CBM_INIT = 4 +FLOODFILLBORDER = 0 +FLOODFILLSURFACE = 1 +CCHDEVICENAME = 32 +CCHFORMNAME = 32 +# Generated by h2py from \msvcnt\include\wingdi.h +# hacked and split manually by mhammond. + +# DEVMODE.dmFields +DM_SPECVERSION = 800 +DM_ORIENTATION = 1 +DM_PAPERSIZE = 2 +DM_PAPERLENGTH = 4 +DM_PAPERWIDTH = 8 +DM_SCALE = 16 +DM_POSITION = 32 +DM_NUP = 64 +DM_DISPLAYORIENTATION = 128 +DM_COPIES = 256 +DM_DEFAULTSOURCE = 512 +DM_PRINTQUALITY = 1024 +DM_COLOR = 2048 +DM_DUPLEX = 4096 +DM_YRESOLUTION = 8192 +DM_TTOPTION = 16384 +DM_COLLATE = 32768 +DM_FORMNAME = 65536 +DM_LOGPIXELS = 131072 +DM_BITSPERPEL = 262144 +DM_PELSWIDTH = 524288 +DM_PELSHEIGHT = 1048576 +DM_DISPLAYFLAGS = 2097152 +DM_DISPLAYFREQUENCY = 4194304 +DM_ICMMETHOD = 8388608 +DM_ICMINTENT = 16777216 +DM_MEDIATYPE = 33554432 +DM_DITHERTYPE = 67108864 +DM_PANNINGWIDTH = 134217728 +DM_PANNINGHEIGHT = 268435456 +DM_DISPLAYFIXEDOUTPUT = 536870912 + +# DEVMODE.dmOrientation +DMORIENT_PORTRAIT = 1 +DMORIENT_LANDSCAPE = 2 + +# DEVMODE.dmDisplayOrientation +DMDO_DEFAULT = 0 +DMDO_90 = 1 +DMDO_180 = 2 +DMDO_270 = 3 + +# DEVMODE.dmDisplayFixedOutput +DMDFO_DEFAULT = 0 +DMDFO_STRETCH = 1 +DMDFO_CENTER = 2 + +# DEVMODE.dmPaperSize +DMPAPER_LETTER = 1 +DMPAPER_LETTERSMALL = 2 +DMPAPER_TABLOID = 3 +DMPAPER_LEDGER = 4 +DMPAPER_LEGAL = 5 +DMPAPER_STATEMENT = 6 +DMPAPER_EXECUTIVE = 7 +DMPAPER_A3 = 8 +DMPAPER_A4 = 9 +DMPAPER_A4SMALL = 10 +DMPAPER_A5 = 11 +DMPAPER_B4 = 12 +DMPAPER_B5 = 13 +DMPAPER_FOLIO = 14 +DMPAPER_QUARTO = 15 +DMPAPER_10X14 = 16 +DMPAPER_11X17 = 17 +DMPAPER_NOTE = 18 +DMPAPER_ENV_9 = 19 +DMPAPER_ENV_10 = 20 +DMPAPER_ENV_11 = 21 +DMPAPER_ENV_12 = 22 +DMPAPER_ENV_14 = 23 +DMPAPER_CSHEET = 24 +DMPAPER_DSHEET = 25 +DMPAPER_ESHEET = 26 +DMPAPER_ENV_DL = 27 +DMPAPER_ENV_C5 = 28 +DMPAPER_ENV_C3 = 29 +DMPAPER_ENV_C4 = 30 +DMPAPER_ENV_C6 = 31 +DMPAPER_ENV_C65 = 32 +DMPAPER_ENV_B4 = 33 +DMPAPER_ENV_B5 = 34 +DMPAPER_ENV_B6 = 35 +DMPAPER_ENV_ITALY = 36 +DMPAPER_ENV_MONARCH = 37 +DMPAPER_ENV_PERSONAL = 38 +DMPAPER_FANFOLD_US = 39 +DMPAPER_FANFOLD_STD_GERMAN = 40 +DMPAPER_FANFOLD_LGL_GERMAN = 41 +DMPAPER_ISO_B4 = 42 +DMPAPER_JAPANESE_POSTCARD = 43 +DMPAPER_9X11 = 44 +DMPAPER_10X11 = 45 +DMPAPER_15X11 = 46 +DMPAPER_ENV_INVITE = 47 +DMPAPER_RESERVED_48 = 48 +DMPAPER_RESERVED_49 = 49 +DMPAPER_LETTER_EXTRA = 50 +DMPAPER_LEGAL_EXTRA = 51 +DMPAPER_TABLOID_EXTRA = 52 +DMPAPER_A4_EXTRA = 53 +DMPAPER_LETTER_TRANSVERSE = 54 +DMPAPER_A4_TRANSVERSE = 55 +DMPAPER_LETTER_EXTRA_TRANSVERSE = 56 +DMPAPER_A_PLUS = 57 +DMPAPER_B_PLUS = 58 +DMPAPER_LETTER_PLUS = 59 +DMPAPER_A4_PLUS = 60 +DMPAPER_A5_TRANSVERSE = 61 +DMPAPER_B5_TRANSVERSE = 62 +DMPAPER_A3_EXTRA = 63 +DMPAPER_A5_EXTRA = 64 +DMPAPER_B5_EXTRA = 65 +DMPAPER_A2 = 66 +DMPAPER_A3_TRANSVERSE = 67 +DMPAPER_A3_EXTRA_TRANSVERSE = 68 +DMPAPER_DBL_JAPANESE_POSTCARD = 69 +DMPAPER_A6 = 70 +DMPAPER_JENV_KAKU2 = 71 +DMPAPER_JENV_KAKU3 = 72 +DMPAPER_JENV_CHOU3 = 73 +DMPAPER_JENV_CHOU4 = 74 +DMPAPER_LETTER_ROTATED = 75 +DMPAPER_A3_ROTATED = 76 +DMPAPER_A4_ROTATED = 77 +DMPAPER_A5_ROTATED = 78 +DMPAPER_B4_JIS_ROTATED = 79 +DMPAPER_B5_JIS_ROTATED = 80 +DMPAPER_JAPANESE_POSTCARD_ROTATED = 81 +DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED = 82 +DMPAPER_A6_ROTATED = 83 +DMPAPER_JENV_KAKU2_ROTATED = 84 +DMPAPER_JENV_KAKU3_ROTATED = 85 +DMPAPER_JENV_CHOU3_ROTATED = 86 +DMPAPER_JENV_CHOU4_ROTATED = 87 +DMPAPER_B6_JIS = 88 +DMPAPER_B6_JIS_ROTATED = 89 +DMPAPER_12X11 = 90 +DMPAPER_JENV_YOU4 = 91 +DMPAPER_JENV_YOU4_ROTATED = 92 +DMPAPER_P16K = 93 +DMPAPER_P32K = 94 +DMPAPER_P32KBIG = 95 +DMPAPER_PENV_1 = 96 +DMPAPER_PENV_2 = 97 +DMPAPER_PENV_3 = 98 +DMPAPER_PENV_4 = 99 +DMPAPER_PENV_5 = 100 +DMPAPER_PENV_6 = 101 +DMPAPER_PENV_7 = 102 +DMPAPER_PENV_8 = 103 +DMPAPER_PENV_9 = 104 +DMPAPER_PENV_10 = 105 +DMPAPER_P16K_ROTATED = 106 +DMPAPER_P32K_ROTATED = 107 +DMPAPER_P32KBIG_ROTATED = 108 +DMPAPER_PENV_1_ROTATED = 109 +DMPAPER_PENV_2_ROTATED = 110 +DMPAPER_PENV_3_ROTATED = 111 +DMPAPER_PENV_4_ROTATED = 112 +DMPAPER_PENV_5_ROTATED = 113 +DMPAPER_PENV_6_ROTATED = 114 +DMPAPER_PENV_7_ROTATED = 115 +DMPAPER_PENV_8_ROTATED = 116 +DMPAPER_PENV_9_ROTATED = 117 +DMPAPER_PENV_10_ROTATED = 118 +DMPAPER_LAST = DMPAPER_PENV_10_ROTATED +DMPAPER_USER = 256 + +# DEVMODE.dmDefaultSource +DMBIN_UPPER = 1 +DMBIN_ONLYONE = 1 +DMBIN_LOWER = 2 +DMBIN_MIDDLE = 3 +DMBIN_MANUAL = 4 +DMBIN_ENVELOPE = 5 +DMBIN_ENVMANUAL = 6 +DMBIN_AUTO = 7 +DMBIN_TRACTOR = 8 +DMBIN_SMALLFMT = 9 +DMBIN_LARGEFMT = 10 +DMBIN_LARGECAPACITY = 11 +DMBIN_CASSETTE = 14 +DMBIN_LAST = DMBIN_CASSETTE +DMBIN_USER = 256 + +# DEVMODE.dmPrintQuality +DMRES_DRAFT = (-1) +DMRES_LOW = (-2) +DMRES_MEDIUM = (-3) +DMRES_HIGH = (-4) + +# DEVMODE.dmColor +DMCOLOR_MONOCHROME = 1 +DMCOLOR_COLOR = 2 + +# DEVMODE.dmDuplex +DMDUP_SIMPLEX = 1 +DMDUP_VERTICAL = 2 +DMDUP_HORIZONTAL = 3 + +# DEVMODE.dmTTOption +DMTT_BITMAP = 1 +DMTT_DOWNLOAD = 2 +DMTT_SUBDEV = 3 +DMTT_DOWNLOAD_OUTLINE = 4 + +# DEVMODE.dmCollate +DMCOLLATE_FALSE = 0 +DMCOLLATE_TRUE = 1 + +# DEVMODE.dmDisplayFlags +DM_GRAYSCALE = 1 +DM_INTERLACED = 2 + +# DEVMODE.dmICMMethod +DMICMMETHOD_NONE = 1 +DMICMMETHOD_SYSTEM = 2 +DMICMMETHOD_DRIVER = 3 +DMICMMETHOD_DEVICE = 4 +DMICMMETHOD_USER = 256 + +# DEVMODE.dmICMIntent +DMICM_SATURATE = 1 +DMICM_CONTRAST = 2 +DMICM_COLORIMETRIC = 3 +DMICM_ABS_COLORIMETRIC = 4 +DMICM_USER = 256 + +# DEVMODE.dmMediaType +DMMEDIA_STANDARD = 1 +DMMEDIA_TRANSPARENCY = 2 +DMMEDIA_GLOSSY = 3 +DMMEDIA_USER = 256 + +# DEVMODE.dmDitherType +DMDITHER_NONE = 1 +DMDITHER_COARSE = 2 +DMDITHER_FINE = 3 +DMDITHER_LINEART = 4 +DMDITHER_ERRORDIFFUSION = 5 +DMDITHER_RESERVED6 = 6 +DMDITHER_RESERVED7 = 7 +DMDITHER_RESERVED8 = 8 +DMDITHER_RESERVED9 = 9 +DMDITHER_GRAYSCALE = 10 +DMDITHER_USER = 256 + +# DEVMODE.dmNup +DMNUP_SYSTEM = 1 +DMNUP_ONEUP = 2 + +RDH_RECTANGLES = 1 +GGO_METRICS = 0 +GGO_BITMAP = 1 +GGO_NATIVE = 2 +TT_POLYGON_TYPE = 24 +TT_PRIM_LINE = 1 +TT_PRIM_QSPLINE = 2 +TT_AVAILABLE = 1 +TT_ENABLED = 2 +DM_UPDATE = 1 +DM_COPY = 2 +DM_PROMPT = 4 +DM_MODIFY = 8 +DM_IN_BUFFER = DM_MODIFY +DM_IN_PROMPT = DM_PROMPT +DM_OUT_BUFFER = DM_COPY +DM_OUT_DEFAULT = DM_UPDATE + +# DISPLAY_DEVICE.StateFlags +DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = 1 +DISPLAY_DEVICE_MULTI_DRIVER = 2 +DISPLAY_DEVICE_PRIMARY_DEVICE = 4 +DISPLAY_DEVICE_MIRRORING_DRIVER = 8 +DISPLAY_DEVICE_VGA_COMPATIBLE = 16 +DISPLAY_DEVICE_REMOVABLE = 32 +DISPLAY_DEVICE_MODESPRUNED = 134217728 +DISPLAY_DEVICE_REMOTE = 67108864 +DISPLAY_DEVICE_DISCONNECT = 33554432 + +# DeviceCapabilities types +DC_FIELDS = 1 +DC_PAPERS = 2 +DC_PAPERSIZE = 3 +DC_MINEXTENT = 4 +DC_MAXEXTENT = 5 +DC_BINS = 6 +DC_DUPLEX = 7 +DC_SIZE = 8 +DC_EXTRA = 9 +DC_VERSION = 10 +DC_DRIVER = 11 +DC_BINNAMES = 12 +DC_ENUMRESOLUTIONS = 13 +DC_FILEDEPENDENCIES = 14 +DC_TRUETYPE = 15 +DC_PAPERNAMES = 16 +DC_ORIENTATION = 17 +DC_COPIES = 18 +DC_BINADJUST = 19 +DC_EMF_COMPLIANT = 20 +DC_DATATYPE_PRODUCED = 21 +DC_COLLATE = 22 +DC_MANUFACTURER = 23 +DC_MODEL = 24 +DC_PERSONALITY = 25 +DC_PRINTRATE = 26 +DC_PRINTRATEUNIT = 27 +DC_PRINTERMEM = 28 +DC_MEDIAREADY = 29 +DC_STAPLE = 30 +DC_PRINTRATEPPM = 31 +DC_COLORDEVICE = 32 +DC_NUP = 33 +DC_MEDIATYPENAMES = 34 +DC_MEDIATYPES = 35 + +PRINTRATEUNIT_PPM = 1 +PRINTRATEUNIT_CPS = 2 +PRINTRATEUNIT_LPM = 3 +PRINTRATEUNIT_IPM = 4 + +# TrueType constants +DCTT_BITMAP = 1 +DCTT_DOWNLOAD = 2 +DCTT_SUBDEV = 4 +DCTT_DOWNLOAD_OUTLINE = 8 + +CA_NEGATIVE = 1 +CA_LOG_FILTER = 2 +ILLUMINANT_DEVICE_DEFAULT = 0 +ILLUMINANT_A = 1 +ILLUMINANT_B = 2 +ILLUMINANT_C = 3 +ILLUMINANT_D50 = 4 +ILLUMINANT_D55 = 5 +ILLUMINANT_D65 = 6 +ILLUMINANT_D75 = 7 +ILLUMINANT_F2 = 8 +ILLUMINANT_MAX_INDEX = ILLUMINANT_F2 +ILLUMINANT_TUNGSTEN = ILLUMINANT_A +ILLUMINANT_DAYLIGHT = ILLUMINANT_C +ILLUMINANT_FLUORESCENT = ILLUMINANT_F2 +ILLUMINANT_NTSC = ILLUMINANT_C + +# Generated by h2py from \msvcnt\include\wingdi.h +# hacked and split manually by mhammond. +FONTMAPPER_MAX = 10 +ENHMETA_SIGNATURE = 1179469088 +ENHMETA_STOCK_OBJECT = -2147483648 +EMR_HEADER = 1 +EMR_POLYBEZIER = 2 +EMR_POLYGON = 3 +EMR_POLYLINE = 4 +EMR_POLYBEZIERTO = 5 +EMR_POLYLINETO = 6 +EMR_POLYPOLYLINE = 7 +EMR_POLYPOLYGON = 8 +EMR_SETWINDOWEXTEX = 9 +EMR_SETWINDOWORGEX = 10 +EMR_SETVIEWPORTEXTEX = 11 +EMR_SETVIEWPORTORGEX = 12 +EMR_SETBRUSHORGEX = 13 +EMR_EOF = 14 +EMR_SETPIXELV = 15 +EMR_SETMAPPERFLAGS = 16 +EMR_SETMAPMODE = 17 +EMR_SETBKMODE = 18 +EMR_SETPOLYFILLMODE = 19 +EMR_SETROP2 = 20 +EMR_SETSTRETCHBLTMODE = 21 +EMR_SETTEXTALIGN = 22 +EMR_SETCOLORADJUSTMENT = 23 +EMR_SETTEXTCOLOR = 24 +EMR_SETBKCOLOR = 25 +EMR_OFFSETCLIPRGN = 26 +EMR_MOVETOEX = 27 +EMR_SETMETARGN = 28 +EMR_EXCLUDECLIPRECT = 29 +EMR_INTERSECTCLIPRECT = 30 +EMR_SCALEVIEWPORTEXTEX = 31 +EMR_SCALEWINDOWEXTEX = 32 +EMR_SAVEDC = 33 +EMR_RESTOREDC = 34 +EMR_SETWORLDTRANSFORM = 35 +EMR_MODIFYWORLDTRANSFORM = 36 +EMR_SELECTOBJECT = 37 +EMR_CREATEPEN = 38 +EMR_CREATEBRUSHINDIRECT = 39 +EMR_DELETEOBJECT = 40 +EMR_ANGLEARC = 41 +EMR_ELLIPSE = 42 +EMR_RECTANGLE = 43 +EMR_ROUNDRECT = 44 +EMR_ARC = 45 +EMR_CHORD = 46 +EMR_PIE = 47 +EMR_SELECTPALETTE = 48 +EMR_CREATEPALETTE = 49 +EMR_SETPALETTEENTRIES = 50 +EMR_RESIZEPALETTE = 51 +EMR_REALIZEPALETTE = 52 +EMR_EXTFLOODFILL = 53 +EMR_LINETO = 54 +EMR_ARCTO = 55 +EMR_POLYDRAW = 56 +EMR_SETARCDIRECTION = 57 +EMR_SETMITERLIMIT = 58 +EMR_BEGINPATH = 59 +EMR_ENDPATH = 60 +EMR_CLOSEFIGURE = 61 +EMR_FILLPATH = 62 +EMR_STROKEANDFILLPATH = 63 +EMR_STROKEPATH = 64 +EMR_FLATTENPATH = 65 +EMR_WIDENPATH = 66 +EMR_SELECTCLIPPATH = 67 +EMR_ABORTPATH = 68 +EMR_GDICOMMENT = 70 +EMR_FILLRGN = 71 +EMR_FRAMERGN = 72 +EMR_INVERTRGN = 73 +EMR_PAINTRGN = 74 +EMR_EXTSELECTCLIPRGN = 75 +EMR_BITBLT = 76 +EMR_STRETCHBLT = 77 +EMR_MASKBLT = 78 +EMR_PLGBLT = 79 +EMR_SETDIBITSTODEVICE = 80 +EMR_STRETCHDIBITS = 81 +EMR_EXTCREATEFONTINDIRECTW = 82 +EMR_EXTTEXTOUTA = 83 +EMR_EXTTEXTOUTW = 84 +EMR_POLYBEZIER16 = 85 +EMR_POLYGON16 = 86 +EMR_POLYLINE16 = 87 +EMR_POLYBEZIERTO16 = 88 +EMR_POLYLINETO16 = 89 +EMR_POLYPOLYLINE16 = 90 +EMR_POLYPOLYGON16 = 91 +EMR_POLYDRAW16 = 92 +EMR_CREATEMONOBRUSH = 93 +EMR_CREATEDIBPATTERNBRUSHPT = 94 +EMR_EXTCREATEPEN = 95 +EMR_POLYTEXTOUTA = 96 +EMR_POLYTEXTOUTW = 97 +EMR_MIN = 1 +EMR_MAX = 97 +# Generated by h2py from \msvcnt\include\wingdi.h +# hacked and split manually by mhammond. +PANOSE_COUNT = 10 +PAN_FAMILYTYPE_INDEX = 0 +PAN_SERIFSTYLE_INDEX = 1 +PAN_WEIGHT_INDEX = 2 +PAN_PROPORTION_INDEX = 3 +PAN_CONTRAST_INDEX = 4 +PAN_STROKEVARIATION_INDEX = 5 +PAN_ARMSTYLE_INDEX = 6 +PAN_LETTERFORM_INDEX = 7 +PAN_MIDLINE_INDEX = 8 +PAN_XHEIGHT_INDEX = 9 +PAN_CULTURE_LATIN = 0 +PAN_ANY = 0 +PAN_NO_FIT = 1 +PAN_FAMILY_TEXT_DISPLAY = 2 +PAN_FAMILY_SCRIPT = 3 +PAN_FAMILY_DECORATIVE = 4 +PAN_FAMILY_PICTORIAL = 5 +PAN_SERIF_COVE = 2 +PAN_SERIF_OBTUSE_COVE = 3 +PAN_SERIF_SQUARE_COVE = 4 +PAN_SERIF_OBTUSE_SQUARE_COVE = 5 +PAN_SERIF_SQUARE = 6 +PAN_SERIF_THIN = 7 +PAN_SERIF_BONE = 8 +PAN_SERIF_EXAGGERATED = 9 +PAN_SERIF_TRIANGLE = 10 +PAN_SERIF_NORMAL_SANS = 11 +PAN_SERIF_OBTUSE_SANS = 12 +PAN_SERIF_PERP_SANS = 13 +PAN_SERIF_FLARED = 14 +PAN_SERIF_ROUNDED = 15 +PAN_WEIGHT_VERY_LIGHT = 2 +PAN_WEIGHT_LIGHT = 3 +PAN_WEIGHT_THIN = 4 +PAN_WEIGHT_BOOK = 5 +PAN_WEIGHT_MEDIUM = 6 +PAN_WEIGHT_DEMI = 7 +PAN_WEIGHT_BOLD = 8 +PAN_WEIGHT_HEAVY = 9 +PAN_WEIGHT_BLACK = 10 +PAN_WEIGHT_NORD = 11 +PAN_PROP_OLD_STYLE = 2 +PAN_PROP_MODERN = 3 +PAN_PROP_EVEN_WIDTH = 4 +PAN_PROP_EXPANDED = 5 +PAN_PROP_CONDENSED = 6 +PAN_PROP_VERY_EXPANDED = 7 +PAN_PROP_VERY_CONDENSED = 8 +PAN_PROP_MONOSPACED = 9 +PAN_CONTRAST_NONE = 2 +PAN_CONTRAST_VERY_LOW = 3 +PAN_CONTRAST_LOW = 4 +PAN_CONTRAST_MEDIUM_LOW = 5 +PAN_CONTRAST_MEDIUM = 6 +PAN_CONTRAST_MEDIUM_HIGH = 7 +PAN_CONTRAST_HIGH = 8 +PAN_CONTRAST_VERY_HIGH = 9 +PAN_STROKE_GRADUAL_DIAG = 2 +PAN_STROKE_GRADUAL_TRAN = 3 +PAN_STROKE_GRADUAL_VERT = 4 +PAN_STROKE_GRADUAL_HORZ = 5 +PAN_STROKE_RAPID_VERT = 6 +PAN_STROKE_RAPID_HORZ = 7 +PAN_STROKE_INSTANT_VERT = 8 +PAN_STRAIGHT_ARMS_HORZ = 2 +PAN_STRAIGHT_ARMS_WEDGE = 3 +PAN_STRAIGHT_ARMS_VERT = 4 +PAN_STRAIGHT_ARMS_SINGLE_SERIF = 5 +PAN_STRAIGHT_ARMS_DOUBLE_SERIF = 6 +PAN_BENT_ARMS_HORZ = 7 +PAN_BENT_ARMS_WEDGE = 8 +PAN_BENT_ARMS_VERT = 9 +PAN_BENT_ARMS_SINGLE_SERIF = 10 +PAN_BENT_ARMS_DOUBLE_SERIF = 11 +PAN_LETT_NORMAL_CONTACT = 2 +PAN_LETT_NORMAL_WEIGHTED = 3 +PAN_LETT_NORMAL_BOXED = 4 +PAN_LETT_NORMAL_FLATTENED = 5 +PAN_LETT_NORMAL_ROUNDED = 6 +PAN_LETT_NORMAL_OFF_CENTER = 7 +PAN_LETT_NORMAL_SQUARE = 8 +PAN_LETT_OBLIQUE_CONTACT = 9 +PAN_LETT_OBLIQUE_WEIGHTED = 10 +PAN_LETT_OBLIQUE_BOXED = 11 +PAN_LETT_OBLIQUE_FLATTENED = 12 +PAN_LETT_OBLIQUE_ROUNDED = 13 +PAN_LETT_OBLIQUE_OFF_CENTER = 14 +PAN_LETT_OBLIQUE_SQUARE = 15 +PAN_MIDLINE_STANDARD_TRIMMED = 2 +PAN_MIDLINE_STANDARD_POINTED = 3 +PAN_MIDLINE_STANDARD_SERIFED = 4 +PAN_MIDLINE_HIGH_TRIMMED = 5 +PAN_MIDLINE_HIGH_POINTED = 6 +PAN_MIDLINE_HIGH_SERIFED = 7 +PAN_MIDLINE_CONSTANT_TRIMMED = 8 +PAN_MIDLINE_CONSTANT_POINTED = 9 +PAN_MIDLINE_CONSTANT_SERIFED = 10 +PAN_MIDLINE_LOW_TRIMMED = 11 +PAN_MIDLINE_LOW_POINTED = 12 +PAN_MIDLINE_LOW_SERIFED = 13 +PAN_XHEIGHT_CONSTANT_SMALL = 2 +PAN_XHEIGHT_CONSTANT_STD = 3 +PAN_XHEIGHT_CONSTANT_LARGE = 4 +PAN_XHEIGHT_DUCKING_SMALL = 5 +PAN_XHEIGHT_DUCKING_STD = 6 +PAN_XHEIGHT_DUCKING_LARGE = 7 +ELF_VENDOR_SIZE = 4 +ELF_VERSION = 0 +ELF_CULTURE_LATIN = 0 +RASTER_FONTTYPE = 1 +DEVICE_FONTTYPE = 2 +TRUETYPE_FONTTYPE = 4 +def PALETTEINDEX(i): return ((16777216 | (i))) + +PC_RESERVED = 1 +PC_EXPLICIT = 2 +PC_NOCOLLAPSE = 4 +def GetRValue(rgb): return rgb & 0xff + +def GetGValue(rgb): return (rgb >> 8) & 0xff + +def GetBValue(rgb): return (rgb >> 16) & 0xff + +TRANSPARENT = 1 +OPAQUE = 2 +BKMODE_LAST = 2 +GM_COMPATIBLE = 1 +GM_ADVANCED = 2 +GM_LAST = 2 +PT_CLOSEFIGURE = 1 +PT_LINETO = 2 +PT_BEZIERTO = 4 +PT_MOVETO = 6 +MM_TEXT = 1 +MM_LOMETRIC = 2 +MM_HIMETRIC = 3 +MM_LOENGLISH = 4 +MM_HIENGLISH = 5 +MM_TWIPS = 6 +MM_ISOTROPIC = 7 +MM_ANISOTROPIC = 8 +MM_MIN = MM_TEXT +MM_MAX = MM_ANISOTROPIC +MM_MAX_FIXEDSCALE = MM_TWIPS +ABSOLUTE = 1 +RELATIVE = 2 +WHITE_BRUSH = 0 +LTGRAY_BRUSH = 1 +GRAY_BRUSH = 2 +DKGRAY_BRUSH = 3 +BLACK_BRUSH = 4 +NULL_BRUSH = 5 +HOLLOW_BRUSH = NULL_BRUSH +WHITE_PEN = 6 +BLACK_PEN = 7 +NULL_PEN = 8 +OEM_FIXED_FONT = 10 +ANSI_FIXED_FONT = 11 +ANSI_VAR_FONT = 12 +SYSTEM_FONT = 13 +DEVICE_DEFAULT_FONT = 14 +DEFAULT_PALETTE = 15 +SYSTEM_FIXED_FONT = 16 +STOCK_LAST = 16 +CLR_INVALID = -1 + +# Exception/Status codes from winuser.h and winnt.h +STATUS_WAIT_0 = 0 +STATUS_ABANDONED_WAIT_0 = 128 +STATUS_USER_APC = 192 +STATUS_TIMEOUT = 258 +STATUS_PENDING = 259 +STATUS_SEGMENT_NOTIFICATION = 1073741829 +STATUS_GUARD_PAGE_VIOLATION = -2147483647 +STATUS_DATATYPE_MISALIGNMENT = -2147483646 +STATUS_BREAKPOINT = -2147483645 +STATUS_SINGLE_STEP = -2147483644 +STATUS_ACCESS_VIOLATION = -1073741819 +STATUS_IN_PAGE_ERROR = -1073741818 +STATUS_INVALID_HANDLE = -1073741816 +STATUS_NO_MEMORY = -1073741801 +STATUS_ILLEGAL_INSTRUCTION = -1073741795 +STATUS_NONCONTINUABLE_EXCEPTION = -1073741787 +STATUS_INVALID_DISPOSITION = -1073741786 +STATUS_ARRAY_BOUNDS_EXCEEDED = -1073741684 +STATUS_FLOAT_DENORMAL_OPERAND = -1073741683 +STATUS_FLOAT_DIVIDE_BY_ZERO = -1073741682 +STATUS_FLOAT_INEXACT_RESULT = -1073741681 +STATUS_FLOAT_INVALID_OPERATION = -1073741680 +STATUS_FLOAT_OVERFLOW = -1073741679 +STATUS_FLOAT_STACK_CHECK = -1073741678 +STATUS_FLOAT_UNDERFLOW = -1073741677 +STATUS_INTEGER_DIVIDE_BY_ZERO = -1073741676 +STATUS_INTEGER_OVERFLOW = -1073741675 +STATUS_PRIVILEGED_INSTRUCTION = -1073741674 +STATUS_STACK_OVERFLOW = -1073741571 +STATUS_CONTROL_C_EXIT = -1073741510 + + +WAIT_FAILED = -1 +WAIT_OBJECT_0 = STATUS_WAIT_0 + 0 + +WAIT_ABANDONED = STATUS_ABANDONED_WAIT_0 + 0 +WAIT_ABANDONED_0 = STATUS_ABANDONED_WAIT_0 + 0 + +WAIT_TIMEOUT = STATUS_TIMEOUT +WAIT_IO_COMPLETION = STATUS_USER_APC +STILL_ACTIVE = STATUS_PENDING +EXCEPTION_ACCESS_VIOLATION = STATUS_ACCESS_VIOLATION +EXCEPTION_DATATYPE_MISALIGNMENT = STATUS_DATATYPE_MISALIGNMENT +EXCEPTION_BREAKPOINT = STATUS_BREAKPOINT +EXCEPTION_SINGLE_STEP = STATUS_SINGLE_STEP +EXCEPTION_ARRAY_BOUNDS_EXCEEDED = STATUS_ARRAY_BOUNDS_EXCEEDED +EXCEPTION_FLT_DENORMAL_OPERAND = STATUS_FLOAT_DENORMAL_OPERAND +EXCEPTION_FLT_DIVIDE_BY_ZERO = STATUS_FLOAT_DIVIDE_BY_ZERO +EXCEPTION_FLT_INEXACT_RESULT = STATUS_FLOAT_INEXACT_RESULT +EXCEPTION_FLT_INVALID_OPERATION = STATUS_FLOAT_INVALID_OPERATION +EXCEPTION_FLT_OVERFLOW = STATUS_FLOAT_OVERFLOW +EXCEPTION_FLT_STACK_CHECK = STATUS_FLOAT_STACK_CHECK +EXCEPTION_FLT_UNDERFLOW = STATUS_FLOAT_UNDERFLOW +EXCEPTION_INT_DIVIDE_BY_ZERO = STATUS_INTEGER_DIVIDE_BY_ZERO +EXCEPTION_INT_OVERFLOW = STATUS_INTEGER_OVERFLOW +EXCEPTION_PRIV_INSTRUCTION = STATUS_PRIVILEGED_INSTRUCTION +EXCEPTION_IN_PAGE_ERROR = STATUS_IN_PAGE_ERROR +EXCEPTION_ILLEGAL_INSTRUCTION = STATUS_ILLEGAL_INSTRUCTION +EXCEPTION_NONCONTINUABLE_EXCEPTION = STATUS_NONCONTINUABLE_EXCEPTION +EXCEPTION_STACK_OVERFLOW = STATUS_STACK_OVERFLOW +EXCEPTION_INVALID_DISPOSITION = STATUS_INVALID_DISPOSITION +EXCEPTION_GUARD_PAGE = STATUS_GUARD_PAGE_VIOLATION +EXCEPTION_INVALID_HANDLE = STATUS_INVALID_HANDLE +CONTROL_C_EXIT = STATUS_CONTROL_C_EXIT + +# winuser.h line 8594 +# constants used with SystemParametersInfo +SPI_GETBEEP = 1 +SPI_SETBEEP = 2 +SPI_GETMOUSE = 3 +SPI_SETMOUSE = 4 +SPI_GETBORDER = 5 +SPI_SETBORDER = 6 +SPI_GETKEYBOARDSPEED = 10 +SPI_SETKEYBOARDSPEED = 11 +SPI_LANGDRIVER = 12 +SPI_ICONHORIZONTALSPACING = 13 +SPI_GETSCREENSAVETIMEOUT = 14 +SPI_SETSCREENSAVETIMEOUT = 15 +SPI_GETSCREENSAVEACTIVE = 16 +SPI_SETSCREENSAVEACTIVE = 17 +SPI_GETGRIDGRANULARITY = 18 +SPI_SETGRIDGRANULARITY = 19 +SPI_SETDESKWALLPAPER = 20 +SPI_SETDESKPATTERN = 21 +SPI_GETKEYBOARDDELAY = 22 +SPI_SETKEYBOARDDELAY = 23 +SPI_ICONVERTICALSPACING = 24 +SPI_GETICONTITLEWRAP = 25 +SPI_SETICONTITLEWRAP = 26 +SPI_GETMENUDROPALIGNMENT = 27 +SPI_SETMENUDROPALIGNMENT = 28 +SPI_SETDOUBLECLKWIDTH = 29 +SPI_SETDOUBLECLKHEIGHT = 30 +SPI_GETICONTITLELOGFONT = 31 +SPI_SETDOUBLECLICKTIME = 32 +SPI_SETMOUSEBUTTONSWAP = 33 +SPI_SETICONTITLELOGFONT = 34 +SPI_GETFASTTASKSWITCH = 35 +SPI_SETFASTTASKSWITCH = 36 +SPI_SETDRAGFULLWINDOWS = 37 +SPI_GETDRAGFULLWINDOWS = 38 +SPI_GETNONCLIENTMETRICS = 41 +SPI_SETNONCLIENTMETRICS = 42 +SPI_GETMINIMIZEDMETRICS = 43 +SPI_SETMINIMIZEDMETRICS = 44 +SPI_GETICONMETRICS = 45 +SPI_SETICONMETRICS = 46 +SPI_SETWORKAREA = 47 +SPI_GETWORKAREA = 48 +SPI_SETPENWINDOWS = 49 +SPI_GETFILTERKEYS = 50 +SPI_SETFILTERKEYS = 51 +SPI_GETTOGGLEKEYS = 52 +SPI_SETTOGGLEKEYS = 53 +SPI_GETMOUSEKEYS = 54 +SPI_SETMOUSEKEYS = 55 +SPI_GETSHOWSOUNDS = 56 +SPI_SETSHOWSOUNDS = 57 +SPI_GETSTICKYKEYS = 58 +SPI_SETSTICKYKEYS = 59 +SPI_GETACCESSTIMEOUT = 60 +SPI_SETACCESSTIMEOUT = 61 +SPI_GETSERIALKEYS = 62 +SPI_SETSERIALKEYS = 63 +SPI_GETSOUNDSENTRY = 64 +SPI_SETSOUNDSENTRY = 65 +SPI_GETHIGHCONTRAST = 66 +SPI_SETHIGHCONTRAST = 67 +SPI_GETKEYBOARDPREF = 68 +SPI_SETKEYBOARDPREF = 69 +SPI_GETSCREENREADER = 70 +SPI_SETSCREENREADER = 71 +SPI_GETANIMATION = 72 +SPI_SETANIMATION = 73 +SPI_GETFONTSMOOTHING = 74 +SPI_SETFONTSMOOTHING = 75 +SPI_SETDRAGWIDTH = 76 +SPI_SETDRAGHEIGHT = 77 +SPI_SETHANDHELD = 78 +SPI_GETLOWPOWERTIMEOUT = 79 +SPI_GETPOWEROFFTIMEOUT = 80 +SPI_SETLOWPOWERTIMEOUT = 81 +SPI_SETPOWEROFFTIMEOUT = 82 +SPI_GETLOWPOWERACTIVE = 83 +SPI_GETPOWEROFFACTIVE = 84 +SPI_SETLOWPOWERACTIVE = 85 +SPI_SETPOWEROFFACTIVE = 86 +SPI_SETCURSORS = 87 +SPI_SETICONS = 88 +SPI_GETDEFAULTINPUTLANG = 89 +SPI_SETDEFAULTINPUTLANG = 90 +SPI_SETLANGTOGGLE = 91 +SPI_GETWINDOWSEXTENSION = 92 +SPI_SETMOUSETRAILS = 93 +SPI_GETMOUSETRAILS = 94 +SPI_GETSNAPTODEFBUTTON = 95 +SPI_SETSNAPTODEFBUTTON = 96 +SPI_SETSCREENSAVERRUNNING = 97 +SPI_SCREENSAVERRUNNING = SPI_SETSCREENSAVERRUNNING +SPI_GETMOUSEHOVERWIDTH = 98 +SPI_SETMOUSEHOVERWIDTH = 99 +SPI_GETMOUSEHOVERHEIGHT = 100 +SPI_SETMOUSEHOVERHEIGHT = 101 +SPI_GETMOUSEHOVERTIME = 102 +SPI_SETMOUSEHOVERTIME = 103 +SPI_GETWHEELSCROLLLINES = 104 +SPI_SETWHEELSCROLLLINES = 105 +SPI_GETMENUSHOWDELAY = 106 +SPI_SETMENUSHOWDELAY = 107 + +SPI_GETSHOWIMEUI = 110 +SPI_SETSHOWIMEUI = 111 +SPI_GETMOUSESPEED = 112 +SPI_SETMOUSESPEED = 113 +SPI_GETSCREENSAVERRUNNING = 114 +SPI_GETDESKWALLPAPER = 115 + +SPI_GETACTIVEWINDOWTRACKING = 4096 +SPI_SETACTIVEWINDOWTRACKING = 4097 +SPI_GETMENUANIMATION = 4098 +SPI_SETMENUANIMATION = 4099 +SPI_GETCOMBOBOXANIMATION = 4100 +SPI_SETCOMBOBOXANIMATION = 4101 +SPI_GETLISTBOXSMOOTHSCROLLING = 4102 +SPI_SETLISTBOXSMOOTHSCROLLING = 4103 +SPI_GETGRADIENTCAPTIONS = 4104 +SPI_SETGRADIENTCAPTIONS = 4105 +SPI_GETKEYBOARDCUES = 4106 +SPI_SETKEYBOARDCUES = 4107 +SPI_GETMENUUNDERLINES = 4106 +SPI_SETMENUUNDERLINES = 4107 +SPI_GETACTIVEWNDTRKZORDER = 4108 +SPI_SETACTIVEWNDTRKZORDER = 4109 +SPI_GETHOTTRACKING = 4110 +SPI_SETHOTTRACKING = 4111 + +SPI_GETMENUFADE = 4114 +SPI_SETMENUFADE = 4115 +SPI_GETSELECTIONFADE = 4116 +SPI_SETSELECTIONFADE = 4117 +SPI_GETTOOLTIPANIMATION = 4118 +SPI_SETTOOLTIPANIMATION = 4119 +SPI_GETTOOLTIPFADE = 4120 +SPI_SETTOOLTIPFADE = 4121 +SPI_GETCURSORSHADOW = 4122 +SPI_SETCURSORSHADOW = 4123 +SPI_GETMOUSESONAR = 4124 +SPI_SETMOUSESONAR = 4125 +SPI_GETMOUSECLICKLOCK = 4126 +SPI_SETMOUSECLICKLOCK = 4127 +SPI_GETMOUSEVANISH = 4128 +SPI_SETMOUSEVANISH = 4129 +SPI_GETFLATMENU = 4130 +SPI_SETFLATMENU = 4131 +SPI_GETDROPSHADOW = 4132 +SPI_SETDROPSHADOW = 4133 +SPI_GETBLOCKSENDINPUTRESETS = 4134 +SPI_SETBLOCKSENDINPUTRESETS = 4135 +SPI_GETUIEFFECTS = 4158 +SPI_SETUIEFFECTS = 4159 + +SPI_GETFOREGROUNDLOCKTIMEOUT = 8192 +SPI_SETFOREGROUNDLOCKTIMEOUT = 8193 +SPI_GETACTIVEWNDTRKTIMEOUT = 8194 +SPI_SETACTIVEWNDTRKTIMEOUT = 8195 +SPI_GETFOREGROUNDFLASHCOUNT = 8196 +SPI_SETFOREGROUNDFLASHCOUNT = 8197 +SPI_GETCARETWIDTH = 8198 +SPI_SETCARETWIDTH = 8199 +SPI_GETMOUSECLICKLOCKTIME = 8200 +SPI_SETMOUSECLICKLOCKTIME = 8201 +SPI_GETFONTSMOOTHINGTYPE = 8202 +SPI_SETFONTSMOOTHINGTYPE = 8203 +SPI_GETFONTSMOOTHINGCONTRAST = 8204 +SPI_SETFONTSMOOTHINGCONTRAST = 8205 +SPI_GETFOCUSBORDERWIDTH = 8206 +SPI_SETFOCUSBORDERWIDTH = 8207 +SPI_GETFOCUSBORDERHEIGHT = 8208 +SPI_SETFOCUSBORDERHEIGHT = 8209 +SPI_GETFONTSMOOTHINGORIENTATION = 8210 +SPI_SETFONTSMOOTHINGORIENTATION = 8211 + +# fWinIni flags for SystemParametersInfo +SPIF_UPDATEINIFILE = 1 +SPIF_SENDWININICHANGE = 2 +SPIF_SENDCHANGE = SPIF_SENDWININICHANGE + +# used with SystemParametersInfo and SPI_GETFONTSMOOTHINGTYPE/SPI_SETFONTSMOOTHINGTYPE +FE_FONTSMOOTHINGSTANDARD = 1 +FE_FONTSMOOTHINGCLEARTYPE = 2 +FE_FONTSMOOTHINGDOCKING = 32768 + +METRICS_USEDEFAULT = -1 +ARW_BOTTOMLEFT = 0 +ARW_BOTTOMRIGHT = 1 +ARW_TOPLEFT = 2 +ARW_TOPRIGHT = 3 +ARW_STARTMASK = 3 +ARW_STARTRIGHT = 1 +ARW_STARTTOP = 2 +ARW_LEFT = 0 +ARW_RIGHT = 0 +ARW_UP = 4 +ARW_DOWN = 4 +ARW_HIDE = 8 +#ARW_VALID = 0x000F +SERKF_SERIALKEYSON = 1 +SERKF_AVAILABLE = 2 +SERKF_INDICATOR = 4 +HCF_HIGHCONTRASTON = 1 +HCF_AVAILABLE = 2 +HCF_HOTKEYACTIVE = 4 +HCF_CONFIRMHOTKEY = 8 +HCF_HOTKEYSOUND = 16 +HCF_INDICATOR = 32 +HCF_HOTKEYAVAILABLE = 64 +CDS_UPDATEREGISTRY = 1 +CDS_TEST = 2 +CDS_FULLSCREEN = 4 +CDS_GLOBAL = 8 +CDS_SET_PRIMARY = 16 +CDS_RESET = 1073741824 +CDS_SETRECT = 536870912 +CDS_NORESET = 268435456 + +# return values from ChangeDisplaySettings and ChangeDisplaySettingsEx +DISP_CHANGE_SUCCESSFUL = 0 +DISP_CHANGE_RESTART = 1 +DISP_CHANGE_FAILED = -1 +DISP_CHANGE_BADMODE = -2 +DISP_CHANGE_NOTUPDATED = -3 +DISP_CHANGE_BADFLAGS = -4 +DISP_CHANGE_BADPARAM = -5 +DISP_CHANGE_BADDUALVIEW = -6 + +ENUM_CURRENT_SETTINGS = -1 +ENUM_REGISTRY_SETTINGS = -2 +FKF_FILTERKEYSON = 1 +FKF_AVAILABLE = 2 +FKF_HOTKEYACTIVE = 4 +FKF_CONFIRMHOTKEY = 8 +FKF_HOTKEYSOUND = 16 +FKF_INDICATOR = 32 +FKF_CLICKON = 64 +SKF_STICKYKEYSON = 1 +SKF_AVAILABLE = 2 +SKF_HOTKEYACTIVE = 4 +SKF_CONFIRMHOTKEY = 8 +SKF_HOTKEYSOUND = 16 +SKF_INDICATOR = 32 +SKF_AUDIBLEFEEDBACK = 64 +SKF_TRISTATE = 128 +SKF_TWOKEYSOFF = 256 +SKF_LALTLATCHED = 268435456 +SKF_LCTLLATCHED = 67108864 +SKF_LSHIFTLATCHED = 16777216 +SKF_RALTLATCHED = 536870912 +SKF_RCTLLATCHED = 134217728 +SKF_RSHIFTLATCHED = 33554432 +SKF_LWINLATCHED = 1073741824 +SKF_RWINLATCHED = -2147483648 +SKF_LALTLOCKED = 1048576 +SKF_LCTLLOCKED = 262144 +SKF_LSHIFTLOCKED = 65536 +SKF_RALTLOCKED = 2097152 +SKF_RCTLLOCKED = 524288 +SKF_RSHIFTLOCKED = 131072 +SKF_LWINLOCKED = 4194304 +SKF_RWINLOCKED = 8388608 +MKF_MOUSEKEYSON = 1 +MKF_AVAILABLE = 2 +MKF_HOTKEYACTIVE = 4 +MKF_CONFIRMHOTKEY = 8 +MKF_HOTKEYSOUND = 16 +MKF_INDICATOR = 32 +MKF_MODIFIERS = 64 +MKF_REPLACENUMBERS = 128 +MKF_LEFTBUTTONSEL = 268435456 +MKF_RIGHTBUTTONSEL = 536870912 +MKF_LEFTBUTTONDOWN = 16777216 +MKF_RIGHTBUTTONDOWN = 33554432 +MKF_MOUSEMODE = -2147483648 +ATF_TIMEOUTON = 1 +ATF_ONOFFFEEDBACK = 2 +SSGF_NONE = 0 +SSGF_DISPLAY = 3 +SSTF_NONE = 0 +SSTF_CHARS = 1 +SSTF_BORDER = 2 +SSTF_DISPLAY = 3 +SSWF_NONE = 0 +SSWF_TITLE = 1 +SSWF_WINDOW = 2 +SSWF_DISPLAY = 3 +SSWF_CUSTOM = 4 +SSF_SOUNDSENTRYON = 1 +SSF_AVAILABLE = 2 +SSF_INDICATOR = 4 +TKF_TOGGLEKEYSON = 1 +TKF_AVAILABLE = 2 +TKF_HOTKEYACTIVE = 4 +TKF_CONFIRMHOTKEY = 8 +TKF_HOTKEYSOUND = 16 +TKF_INDICATOR = 32 +SLE_ERROR = 1 +SLE_MINORERROR = 2 +SLE_WARNING = 3 +MONITOR_DEFAULTTONULL = 0 +MONITOR_DEFAULTTOPRIMARY = 1 +MONITOR_DEFAULTTONEAREST = 2 +MONITORINFOF_PRIMARY = 1 +CCHDEVICENAME = 32 +CHILDID_SELF = 0 +INDEXID_OBJECT = 0 +INDEXID_CONTAINER = 0 +OBJID_WINDOW = 0 +OBJID_SYSMENU = -1 +OBJID_TITLEBAR = -2 +OBJID_MENU = -3 +OBJID_CLIENT = -4 +OBJID_VSCROLL = -5 +OBJID_HSCROLL = -6 +OBJID_SIZEGRIP = -7 +OBJID_CARET = -8 +OBJID_CURSOR = -9 +OBJID_ALERT = -10 +OBJID_SOUND = -11 +EVENT_MIN = 1 +EVENT_MAX = 2147483647 +EVENT_SYSTEM_SOUND = 1 +EVENT_SYSTEM_ALERT = 2 +EVENT_SYSTEM_FOREGROUND = 3 +EVENT_SYSTEM_MENUSTART = 4 +EVENT_SYSTEM_MENUEND = 5 +EVENT_SYSTEM_MENUPOPUPSTART = 6 +EVENT_SYSTEM_MENUPOPUPEND = 7 +EVENT_SYSTEM_CAPTURESTART = 8 +EVENT_SYSTEM_CAPTUREEND = 9 +EVENT_SYSTEM_MOVESIZESTART = 10 +EVENT_SYSTEM_MOVESIZEEND = 11 +EVENT_SYSTEM_CONTEXTHELPSTART = 12 +EVENT_SYSTEM_CONTEXTHELPEND = 13 +EVENT_SYSTEM_DRAGDROPSTART = 14 +EVENT_SYSTEM_DRAGDROPEND = 15 +EVENT_SYSTEM_DIALOGSTART = 16 +EVENT_SYSTEM_DIALOGEND = 17 +EVENT_SYSTEM_SCROLLINGSTART = 18 +EVENT_SYSTEM_SCROLLINGEND = 19 +EVENT_SYSTEM_SWITCHSTART = 20 +EVENT_SYSTEM_SWITCHEND = 21 +EVENT_SYSTEM_MINIMIZESTART = 22 +EVENT_SYSTEM_MINIMIZEEND = 23 +EVENT_OBJECT_CREATE = 32768 +EVENT_OBJECT_DESTROY = 32769 +EVENT_OBJECT_SHOW = 32770 +EVENT_OBJECT_HIDE = 32771 +EVENT_OBJECT_REORDER = 32772 +EVENT_OBJECT_FOCUS = 32773 +EVENT_OBJECT_SELECTION = 32774 +EVENT_OBJECT_SELECTIONADD = 32775 +EVENT_OBJECT_SELECTIONREMOVE = 32776 +EVENT_OBJECT_SELECTIONWITHIN = 32777 +EVENT_OBJECT_STATECHANGE = 32778 +EVENT_OBJECT_LOCATIONCHANGE = 32779 +EVENT_OBJECT_NAMECHANGE = 32780 +EVENT_OBJECT_DESCRIPTIONCHANGE = 32781 +EVENT_OBJECT_VALUECHANGE = 32782 +EVENT_OBJECT_PARENTCHANGE = 32783 +EVENT_OBJECT_HELPCHANGE = 32784 +EVENT_OBJECT_DEFACTIONCHANGE = 32785 +EVENT_OBJECT_ACCELERATORCHANGE = 32786 +SOUND_SYSTEM_STARTUP = 1 +SOUND_SYSTEM_SHUTDOWN = 2 +SOUND_SYSTEM_BEEP = 3 +SOUND_SYSTEM_ERROR = 4 +SOUND_SYSTEM_QUESTION = 5 +SOUND_SYSTEM_WARNING = 6 +SOUND_SYSTEM_INFORMATION = 7 +SOUND_SYSTEM_MAXIMIZE = 8 +SOUND_SYSTEM_MINIMIZE = 9 +SOUND_SYSTEM_RESTOREUP = 10 +SOUND_SYSTEM_RESTOREDOWN = 11 +SOUND_SYSTEM_APPSTART = 12 +SOUND_SYSTEM_FAULT = 13 +SOUND_SYSTEM_APPEND = 14 +SOUND_SYSTEM_MENUCOMMAND = 15 +SOUND_SYSTEM_MENUPOPUP = 16 +CSOUND_SYSTEM = 16 +ALERT_SYSTEM_INFORMATIONAL = 1 +ALERT_SYSTEM_WARNING = 2 +ALERT_SYSTEM_ERROR = 3 +ALERT_SYSTEM_QUERY = 4 +ALERT_SYSTEM_CRITICAL = 5 +CALERT_SYSTEM = 6 +WINEVENT_OUTOFCONTEXT = 0 +WINEVENT_SKIPOWNTHREAD = 1 +WINEVENT_SKIPOWNPROCESS = 2 +WINEVENT_INCONTEXT = 4 +GUI_CARETBLINKING = 1 +GUI_INMOVESIZE = 2 +GUI_INMENUMODE = 4 +GUI_SYSTEMMENUMODE = 8 +GUI_POPUPMENUMODE = 16 +STATE_SYSTEM_UNAVAILABLE = 1 +STATE_SYSTEM_SELECTED = 2 +STATE_SYSTEM_FOCUSED = 4 +STATE_SYSTEM_PRESSED = 8 +STATE_SYSTEM_CHECKED = 16 +STATE_SYSTEM_MIXED = 32 +STATE_SYSTEM_READONLY = 64 +STATE_SYSTEM_HOTTRACKED = 128 +STATE_SYSTEM_DEFAULT = 256 +STATE_SYSTEM_EXPANDED = 512 +STATE_SYSTEM_COLLAPSED = 1024 +STATE_SYSTEM_BUSY = 2048 +STATE_SYSTEM_FLOATING = 4096 +STATE_SYSTEM_MARQUEED = 8192 +STATE_SYSTEM_ANIMATED = 16384 +STATE_SYSTEM_INVISIBLE = 32768 +STATE_SYSTEM_OFFSCREEN = 65536 +STATE_SYSTEM_SIZEABLE = 131072 +STATE_SYSTEM_MOVEABLE = 262144 +STATE_SYSTEM_SELFVOICING = 524288 +STATE_SYSTEM_FOCUSABLE = 1048576 +STATE_SYSTEM_SELECTABLE = 2097152 +STATE_SYSTEM_LINKED = 4194304 +STATE_SYSTEM_TRAVERSED = 8388608 +STATE_SYSTEM_MULTISELECTABLE = 16777216 +STATE_SYSTEM_EXTSELECTABLE = 33554432 +STATE_SYSTEM_ALERT_LOW = 67108864 +STATE_SYSTEM_ALERT_MEDIUM = 134217728 +STATE_SYSTEM_ALERT_HIGH = 268435456 +STATE_SYSTEM_VALID = 536870911 +CCHILDREN_TITLEBAR = 5 +CCHILDREN_SCROLLBAR = 5 +CURSOR_SHOWING = 1 +WS_ACTIVECAPTION = 1 +GA_MIC = 1 +GA_PARENT = 1 +GA_ROOT = 2 +GA_ROOTOWNER = 3 +GA_MAC = 4 + +# winuser.h line 1979 +BF_LEFT = 1 +BF_TOP = 2 +BF_RIGHT = 4 +BF_BOTTOM = 8 +BF_TOPLEFT = (BF_TOP | BF_LEFT) +BF_TOPRIGHT = (BF_TOP | BF_RIGHT) +BF_BOTTOMLEFT = (BF_BOTTOM | BF_LEFT) +BF_BOTTOMRIGHT = (BF_BOTTOM | BF_RIGHT) +BF_RECT = (BF_LEFT | BF_TOP | BF_RIGHT | BF_BOTTOM) +BF_DIAGONAL = 16 +BF_DIAGONAL_ENDTOPRIGHT = (BF_DIAGONAL | BF_TOP | BF_RIGHT) +BF_DIAGONAL_ENDTOPLEFT = (BF_DIAGONAL | BF_TOP | BF_LEFT) +BF_DIAGONAL_ENDBOTTOMLEFT = (BF_DIAGONAL | BF_BOTTOM | BF_LEFT) +BF_DIAGONAL_ENDBOTTOMRIGHT = (BF_DIAGONAL | BF_BOTTOM | BF_RIGHT) +BF_MIDDLE = 2048 +BF_SOFT = 4096 +BF_ADJUST = 8192 +BF_FLAT = 16384 +BF_MONO = 32768 +DFC_CAPTION = 1 +DFC_MENU = 2 +DFC_SCROLL = 3 +DFC_BUTTON = 4 +DFC_POPUPMENU = 5 +DFCS_CAPTIONCLOSE = 0 +DFCS_CAPTIONMIN = 1 +DFCS_CAPTIONMAX = 2 +DFCS_CAPTIONRESTORE = 3 +DFCS_CAPTIONHELP = 4 +DFCS_MENUARROW = 0 +DFCS_MENUCHECK = 1 +DFCS_MENUBULLET = 2 +DFCS_MENUARROWRIGHT = 4 +DFCS_SCROLLUP = 0 +DFCS_SCROLLDOWN = 1 +DFCS_SCROLLLEFT = 2 +DFCS_SCROLLRIGHT = 3 +DFCS_SCROLLCOMBOBOX = 5 +DFCS_SCROLLSIZEGRIP = 8 +DFCS_SCROLLSIZEGRIPRIGHT = 16 +DFCS_BUTTONCHECK = 0 +DFCS_BUTTONRADIOIMAGE = 1 +DFCS_BUTTONRADIOMASK = 2 +DFCS_BUTTONRADIO = 4 +DFCS_BUTTON3STATE = 8 +DFCS_BUTTONPUSH = 16 +DFCS_INACTIVE = 256 +DFCS_PUSHED = 512 +DFCS_CHECKED = 1024 +DFCS_TRANSPARENT = 2048 +DFCS_HOT = 4096 +DFCS_ADJUSTRECT = 8192 +DFCS_FLAT = 16384 +DFCS_MONO = 32768 +DC_ACTIVE = 1 +DC_SMALLCAP = 2 +DC_ICON = 4 +DC_TEXT = 8 +DC_INBUTTON = 16 +DC_GRADIENT = 32 +IDANI_OPEN = 1 +IDANI_CLOSE = 2 +IDANI_CAPTION = 3 +CF_TEXT = 1 +CF_BITMAP = 2 +CF_METAFILEPICT = 3 +CF_SYLK = 4 +CF_DIF = 5 +CF_TIFF = 6 +CF_OEMTEXT = 7 +CF_DIB = 8 +CF_PALETTE = 9 +CF_PENDATA = 10 +CF_RIFF = 11 +CF_WAVE = 12 +CF_UNICODETEXT = 13 +CF_ENHMETAFILE = 14 +CF_HDROP = 15 +CF_LOCALE = 16 +CF_MAX = 17 +CF_OWNERDISPLAY = 128 +CF_DSPTEXT = 129 +CF_DSPBITMAP = 130 +CF_DSPMETAFILEPICT = 131 +CF_DSPENHMETAFILE = 142 +CF_PRIVATEFIRST = 512 +CF_PRIVATELAST = 767 +CF_GDIOBJFIRST = 768 +CF_GDIOBJLAST = 1023 +FVIRTKEY =1 +FNOINVERT = 2 +FSHIFT = 4 +FCONTROL = 8 +FALT = 16 +WPF_SETMINPOSITION = 1 +WPF_RESTORETOMAXIMIZED = 2 +ODT_MENU = 1 +ODT_LISTBOX = 2 +ODT_COMBOBOX = 3 +ODT_BUTTON = 4 +ODT_STATIC = 5 +ODA_DRAWENTIRE = 1 +ODA_SELECT = 2 +ODA_FOCUS = 4 +ODS_SELECTED = 1 +ODS_GRAYED = 2 +ODS_DISABLED = 4 +ODS_CHECKED = 8 +ODS_FOCUS = 16 +ODS_DEFAULT = 32 +ODS_COMBOBOXEDIT = 4096 +ODS_HOTLIGHT = 64 +ODS_INACTIVE = 128 +PM_NOREMOVE = 0 +PM_REMOVE = 1 +PM_NOYIELD = 2 +MOD_ALT = 1 +MOD_CONTROL = 2 +MOD_SHIFT = 4 +MOD_WIN = 8 +IDHOT_SNAPWINDOW = (-1) +IDHOT_SNAPDESKTOP = (-2) +#EW_RESTARTWINDOWS = 0x0042 +#EW_REBOOTSYSTEM = 0x0043 +#EW_EXITANDEXECAPP = 0x0044 +ENDSESSION_LOGOFF = -2147483648 +EWX_LOGOFF = 0 +EWX_SHUTDOWN = 1 +EWX_REBOOT = 2 +EWX_FORCE = 4 +EWX_POWEROFF = 8 +EWX_FORCEIFHUNG = 16 +BSM_ALLCOMPONENTS = 0 +BSM_VXDS = 1 +BSM_NETDRIVER = 2 +BSM_INSTALLABLEDRIVERS = 4 +BSM_APPLICATIONS = 8 +BSM_ALLDESKTOPS = 16 +BSF_QUERY = 1 +BSF_IGNORECURRENTTASK = 2 +BSF_FLUSHDISK = 4 +BSF_NOHANG = 8 +BSF_POSTMESSAGE = 16 +BSF_FORCEIFHUNG = 32 +BSF_NOTIMEOUTIFNOTHUNG = 64 +BROADCAST_QUERY_DENY = 1112363332 # Return this value to deny a query. + +DBWF_LPARAMPOINTER = 32768 + +# winuser.h line 3232 +SWP_NOSIZE = 1 +SWP_NOMOVE = 2 +SWP_NOZORDER = 4 +SWP_NOREDRAW = 8 +SWP_NOACTIVATE = 16 +SWP_FRAMECHANGED = 32 +SWP_SHOWWINDOW = 64 +SWP_HIDEWINDOW = 128 +SWP_NOCOPYBITS = 256 +SWP_NOOWNERZORDER = 512 +SWP_NOSENDCHANGING = 1024 +SWP_DRAWFRAME = SWP_FRAMECHANGED +SWP_NOREPOSITION = SWP_NOOWNERZORDER +SWP_DEFERERASE = 8192 +SWP_ASYNCWINDOWPOS = 16384 + +DLGWINDOWEXTRA = 30 +# winuser.h line 4249 +KEYEVENTF_EXTENDEDKEY = 1 +KEYEVENTF_KEYUP = 2 +MOUSEEVENTF_MOVE = 1 +MOUSEEVENTF_LEFTDOWN = 2 +MOUSEEVENTF_LEFTUP = 4 +MOUSEEVENTF_RIGHTDOWN = 8 +MOUSEEVENTF_RIGHTUP = 16 +MOUSEEVENTF_MIDDLEDOWN = 32 +MOUSEEVENTF_MIDDLEUP = 64 +MOUSEEVENTF_ABSOLUTE = 32768 +INPUT_MOUSE = 0 +INPUT_KEYBOARD = 1 +INPUT_HARDWARE = 2 +MWMO_WAITALL = 1 +MWMO_ALERTABLE = 2 +MWMO_INPUTAVAILABLE = 4 +QS_KEY = 1 +QS_MOUSEMOVE = 2 +QS_MOUSEBUTTON = 4 +QS_POSTMESSAGE = 8 +QS_TIMER = 16 +QS_PAINT = 32 +QS_SENDMESSAGE = 64 +QS_HOTKEY = 128 +QS_MOUSE = (QS_MOUSEMOVE | \ + QS_MOUSEBUTTON) +QS_INPUT = (QS_MOUSE | \ + QS_KEY) +QS_ALLEVENTS = (QS_INPUT | \ + QS_POSTMESSAGE | \ + QS_TIMER | \ + QS_PAINT | \ + QS_HOTKEY) +QS_ALLINPUT = (QS_INPUT | \ + QS_POSTMESSAGE | \ + QS_TIMER | \ + QS_PAINT | \ + QS_HOTKEY | \ + QS_SENDMESSAGE) + + +IMN_CLOSESTATUSWINDOW = 1 +IMN_OPENSTATUSWINDOW = 2 +IMN_CHANGECANDIDATE = 3 +IMN_CLOSECANDIDATE = 4 +IMN_OPENCANDIDATE = 5 +IMN_SETCONVERSIONMODE = 6 +IMN_SETSENTENCEMODE = 7 +IMN_SETOPENSTATUS = 8 +IMN_SETCANDIDATEPOS = 9 +IMN_SETCOMPOSITIONFONT = 10 +IMN_SETCOMPOSITIONWINDOW = 11 +IMN_SETSTATUSWINDOWPOS = 12 +IMN_GUIDELINE = 13 +IMN_PRIVATE = 14 + +# winuser.h line 8518 +HELP_CONTEXT = 1 +HELP_QUIT = 2 +HELP_INDEX = 3 +HELP_CONTENTS = 3 +HELP_HELPONHELP = 4 +HELP_SETINDEX = 5 +HELP_SETCONTENTS = 5 +HELP_CONTEXTPOPUP = 8 +HELP_FORCEFILE = 9 +HELP_KEY = 257 +HELP_COMMAND = 258 +HELP_PARTIALKEY = 261 +HELP_MULTIKEY = 513 +HELP_SETWINPOS = 515 +HELP_CONTEXTMENU = 10 +HELP_FINDER = 11 +HELP_WM_HELP = 12 +HELP_SETPOPUP_POS = 13 +HELP_TCARD = 32768 +HELP_TCARD_DATA = 16 +HELP_TCARD_OTHER_CALLER = 17 +IDH_NO_HELP = 28440 +IDH_MISSING_CONTEXT = 28441 # Control doesn't have matching help context +IDH_GENERIC_HELP_BUTTON = 28442 # Property sheet help button +IDH_OK = 28443 +IDH_CANCEL = 28444 +IDH_HELP = 28445 +GR_GDIOBJECTS = 0 # Count of GDI objects +GR_USEROBJECTS = 1 # Count of USER objects +# Generated by h2py from \msvcnt\include\wingdi.h +# manually added (missed by generation some how! +SRCCOPY = 13369376 # dest = source +SRCPAINT = 15597702 # dest = source OR dest +SRCAND = 8913094 # dest = source AND dest +SRCINVERT = 6684742 # dest = source XOR dest +SRCERASE = 4457256 # dest = source AND (NOT dest ) +NOTSRCCOPY = 3342344 # dest = (NOT source) +NOTSRCERASE = 1114278 # dest = (NOT src) AND (NOT dest) +MERGECOPY = 12583114 # dest = (source AND pattern) +MERGEPAINT = 12255782 # dest = (NOT source) OR dest +PATCOPY = 15728673 # dest = pattern +PATPAINT = 16452105 # dest = DPSnoo +PATINVERT = 5898313 # dest = pattern XOR dest +DSTINVERT = 5570569 # dest = (NOT dest) +BLACKNESS = 66 # dest = BLACK +WHITENESS = 16711778 # dest = WHITE + +# hacked and split manually by mhammond. +R2_BLACK = 1 +R2_NOTMERGEPEN = 2 +R2_MASKNOTPEN = 3 +R2_NOTCOPYPEN = 4 +R2_MASKPENNOT = 5 +R2_NOT = 6 +R2_XORPEN = 7 +R2_NOTMASKPEN = 8 +R2_MASKPEN = 9 +R2_NOTXORPEN = 10 +R2_NOP = 11 +R2_MERGENOTPEN = 12 +R2_COPYPEN = 13 +R2_MERGEPENNOT = 14 +R2_MERGEPEN = 15 +R2_WHITE = 16 +R2_LAST = 16 +GDI_ERROR = (-1) +ERROR = 0 +NULLREGION = 1 +SIMPLEREGION = 2 +COMPLEXREGION = 3 +RGN_ERROR = ERROR +RGN_AND = 1 +RGN_OR = 2 +RGN_XOR = 3 +RGN_DIFF = 4 +RGN_COPY = 5 +RGN_MIN = RGN_AND +RGN_MAX = RGN_COPY +BLACKONWHITE = 1 +WHITEONBLACK = 2 +COLORONCOLOR = 3 +HALFTONE = 4 +MAXSTRETCHBLTMODE = 4 +ALTERNATE = 1 +WINDING = 2 +POLYFILL_LAST = 2 +TA_NOUPDATECP = 0 +TA_UPDATECP = 1 +TA_LEFT = 0 +TA_RIGHT = 2 +TA_CENTER = 6 +TA_TOP = 0 +TA_BOTTOM = 8 +TA_BASELINE = 24 +TA_MASK = (TA_BASELINE+TA_CENTER+TA_UPDATECP) +VTA_BASELINE = TA_BASELINE +VTA_LEFT = TA_BOTTOM +VTA_RIGHT = TA_TOP +VTA_CENTER = TA_CENTER +VTA_BOTTOM = TA_RIGHT +VTA_TOP = TA_LEFT +ETO_GRAYED = 1 +ETO_OPAQUE = 2 +ETO_CLIPPED = 4 +ASPECT_FILTERING = 1 +DCB_RESET = 1 +DCB_ACCUMULATE = 2 +DCB_DIRTY = DCB_ACCUMULATE +DCB_SET = (DCB_RESET | DCB_ACCUMULATE) +DCB_ENABLE = 4 +DCB_DISABLE = 8 +META_SETBKCOLOR = 513 +META_SETBKMODE = 258 +META_SETMAPMODE = 259 +META_SETROP2 = 260 +META_SETRELABS = 261 +META_SETPOLYFILLMODE = 262 +META_SETSTRETCHBLTMODE = 263 +META_SETTEXTCHAREXTRA = 264 +META_SETTEXTCOLOR = 521 +META_SETTEXTJUSTIFICATION = 522 +META_SETWINDOWORG = 523 +META_SETWINDOWEXT = 524 +META_SETVIEWPORTORG = 525 +META_SETVIEWPORTEXT = 526 +META_OFFSETWINDOWORG = 527 +META_SCALEWINDOWEXT = 1040 +META_OFFSETVIEWPORTORG = 529 +META_SCALEVIEWPORTEXT = 1042 +META_LINETO = 531 +META_MOVETO = 532 +META_EXCLUDECLIPRECT = 1045 +META_INTERSECTCLIPRECT = 1046 +META_ARC = 2071 +META_ELLIPSE = 1048 +META_FLOODFILL = 1049 +META_PIE = 2074 +META_RECTANGLE = 1051 +META_ROUNDRECT = 1564 +META_PATBLT = 1565 +META_SAVEDC = 30 +META_SETPIXEL = 1055 +META_OFFSETCLIPRGN = 544 +META_TEXTOUT = 1313 +META_BITBLT = 2338 +META_STRETCHBLT = 2851 +META_POLYGON = 804 +META_POLYLINE = 805 +META_ESCAPE = 1574 +META_RESTOREDC = 295 +META_FILLREGION = 552 +META_FRAMEREGION = 1065 +META_INVERTREGION = 298 +META_PAINTREGION = 299 +META_SELECTCLIPREGION = 300 +META_SELECTOBJECT = 301 +META_SETTEXTALIGN = 302 +META_CHORD = 2096 +META_SETMAPPERFLAGS = 561 +META_EXTTEXTOUT = 2610 +META_SETDIBTODEV = 3379 +META_SELECTPALETTE = 564 +META_REALIZEPALETTE = 53 +META_ANIMATEPALETTE = 1078 +META_SETPALENTRIES = 55 +META_POLYPOLYGON = 1336 +META_RESIZEPALETTE = 313 +META_DIBBITBLT = 2368 +META_DIBSTRETCHBLT = 2881 +META_DIBCREATEPATTERNBRUSH = 322 +META_STRETCHDIB = 3907 +META_EXTFLOODFILL = 1352 +META_DELETEOBJECT = 496 +META_CREATEPALETTE = 247 +META_CREATEPATTERNBRUSH = 505 +META_CREATEPENINDIRECT = 762 +META_CREATEFONTINDIRECT = 763 +META_CREATEBRUSHINDIRECT = 764 +META_CREATEREGION = 1791 +FILE_BEGIN = 0 +FILE_CURRENT = 1 +FILE_END = 2 +FILE_FLAG_WRITE_THROUGH = -2147483648 +FILE_FLAG_OVERLAPPED = 1073741824 +FILE_FLAG_NO_BUFFERING = 536870912 +FILE_FLAG_RANDOM_ACCESS = 268435456 +FILE_FLAG_SEQUENTIAL_SCAN = 134217728 +FILE_FLAG_DELETE_ON_CLOSE = 67108864 +FILE_FLAG_BACKUP_SEMANTICS = 33554432 +FILE_FLAG_POSIX_SEMANTICS = 16777216 +CREATE_NEW = 1 +CREATE_ALWAYS = 2 +OPEN_EXISTING = 3 +OPEN_ALWAYS = 4 +TRUNCATE_EXISTING = 5 +PIPE_ACCESS_INBOUND = 1 +PIPE_ACCESS_OUTBOUND = 2 +PIPE_ACCESS_DUPLEX = 3 +PIPE_CLIENT_END = 0 +PIPE_SERVER_END = 1 +PIPE_WAIT = 0 +PIPE_NOWAIT = 1 +PIPE_READMODE_BYTE = 0 +PIPE_READMODE_MESSAGE = 2 +PIPE_TYPE_BYTE = 0 +PIPE_TYPE_MESSAGE = 4 +PIPE_UNLIMITED_INSTANCES = 255 +SECURITY_CONTEXT_TRACKING = 262144 +SECURITY_EFFECTIVE_ONLY = 524288 +SECURITY_SQOS_PRESENT = 1048576 +SECURITY_VALID_SQOS_FLAGS = 2031616 +DTR_CONTROL_DISABLE = 0 +DTR_CONTROL_ENABLE = 1 +DTR_CONTROL_HANDSHAKE = 2 +RTS_CONTROL_DISABLE = 0 +RTS_CONTROL_ENABLE = 1 +RTS_CONTROL_HANDSHAKE = 2 +RTS_CONTROL_TOGGLE = 3 +GMEM_FIXED = 0 +GMEM_MOVEABLE = 2 +GMEM_NOCOMPACT = 16 +GMEM_NODISCARD = 32 +GMEM_ZEROINIT = 64 +GMEM_MODIFY = 128 +GMEM_DISCARDABLE = 256 +GMEM_NOT_BANKED = 4096 +GMEM_SHARE = 8192 +GMEM_DDESHARE = 8192 +GMEM_NOTIFY = 16384 +GMEM_LOWER = GMEM_NOT_BANKED +GMEM_VALID_FLAGS = 32626 +GMEM_INVALID_HANDLE = 32768 +GHND = (GMEM_MOVEABLE | GMEM_ZEROINIT) +GPTR = (GMEM_FIXED | GMEM_ZEROINIT) +GMEM_DISCARDED = 16384 +GMEM_LOCKCOUNT = 255 +LMEM_FIXED = 0 +LMEM_MOVEABLE = 2 +LMEM_NOCOMPACT = 16 +LMEM_NODISCARD = 32 +LMEM_ZEROINIT = 64 +LMEM_MODIFY = 128 +LMEM_DISCARDABLE = 3840 +LMEM_VALID_FLAGS = 3954 +LMEM_INVALID_HANDLE = 32768 +LHND = (LMEM_MOVEABLE | LMEM_ZEROINIT) +LPTR = (LMEM_FIXED | LMEM_ZEROINIT) +NONZEROLHND = (LMEM_MOVEABLE) +NONZEROLPTR = (LMEM_FIXED) +LMEM_DISCARDED = 16384 +LMEM_LOCKCOUNT = 255 +DEBUG_PROCESS = 1 +DEBUG_ONLY_THIS_PROCESS = 2 +CREATE_SUSPENDED = 4 +DETACHED_PROCESS = 8 +CREATE_NEW_CONSOLE = 16 +NORMAL_PRIORITY_CLASS = 32 +IDLE_PRIORITY_CLASS = 64 +HIGH_PRIORITY_CLASS = 128 +REALTIME_PRIORITY_CLASS = 256 +CREATE_NEW_PROCESS_GROUP = 512 +CREATE_UNICODE_ENVIRONMENT = 1024 +CREATE_SEPARATE_WOW_VDM = 2048 +CREATE_SHARED_WOW_VDM = 4096 +CREATE_DEFAULT_ERROR_MODE = 67108864 +CREATE_NO_WINDOW = 134217728 +PROFILE_USER = 268435456 +PROFILE_KERNEL = 536870912 +PROFILE_SERVER = 1073741824 +THREAD_BASE_PRIORITY_LOWRT = 15 +THREAD_BASE_PRIORITY_MAX = 2 +THREAD_BASE_PRIORITY_MIN = -2 +THREAD_BASE_PRIORITY_IDLE = -15 +THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN +THREAD_PRIORITY_BELOW_NORMAL = THREAD_PRIORITY_LOWEST+1 +THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX +THREAD_PRIORITY_ABOVE_NORMAL = THREAD_PRIORITY_HIGHEST-1 +THREAD_PRIORITY_ERROR_RETURN = MAXLONG +THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT +THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE +THREAD_PRIORITY_NORMAL = 0 +EXCEPTION_DEBUG_EVENT = 1 +CREATE_THREAD_DEBUG_EVENT = 2 +CREATE_PROCESS_DEBUG_EVENT = 3 +EXIT_THREAD_DEBUG_EVENT = 4 +EXIT_PROCESS_DEBUG_EVENT = 5 +LOAD_DLL_DEBUG_EVENT = 6 +UNLOAD_DLL_DEBUG_EVENT = 7 +OUTPUT_DEBUG_STRING_EVENT = 8 +RIP_EVENT = 9 +DRIVE_UNKNOWN = 0 +DRIVE_NO_ROOT_DIR = 1 +DRIVE_REMOVABLE = 2 +DRIVE_FIXED = 3 +DRIVE_REMOTE = 4 +DRIVE_CDROM = 5 +DRIVE_RAMDISK = 6 +FILE_TYPE_UNKNOWN = 0 +FILE_TYPE_DISK = 1 +FILE_TYPE_CHAR = 2 +FILE_TYPE_PIPE = 3 +FILE_TYPE_REMOTE = 32768 +NOPARITY = 0 +ODDPARITY = 1 +EVENPARITY = 2 +MARKPARITY = 3 +SPACEPARITY = 4 +ONESTOPBIT = 0 +ONE5STOPBITS = 1 +TWOSTOPBITS = 2 +CBR_110 = 110 +CBR_300 = 300 +CBR_600 = 600 +CBR_1200 = 1200 +CBR_2400 = 2400 +CBR_4800 = 4800 +CBR_9600 = 9600 +CBR_14400 = 14400 +CBR_19200 = 19200 +CBR_38400 = 38400 +CBR_56000 = 56000 +CBR_57600 = 57600 +CBR_115200 = 115200 +CBR_128000 = 128000 +CBR_256000 = 256000 +S_QUEUEEMPTY = 0 +S_THRESHOLD = 1 +S_ALLTHRESHOLD = 2 +S_NORMAL = 0 +S_LEGATO = 1 +S_STACCATO = 2 +NMPWAIT_WAIT_FOREVER = -1 +NMPWAIT_NOWAIT = 1 +NMPWAIT_USE_DEFAULT_WAIT = 0 +OF_READ = 0 +OF_WRITE = 1 +OF_READWRITE = 2 +OF_SHARE_COMPAT = 0 +OF_SHARE_EXCLUSIVE = 16 +OF_SHARE_DENY_WRITE = 32 +OF_SHARE_DENY_READ = 48 +OF_SHARE_DENY_NONE = 64 +OF_PARSE = 256 +OF_DELETE = 512 +OF_VERIFY = 1024 +OF_CANCEL = 2048 +OF_CREATE = 4096 +OF_PROMPT = 8192 +OF_EXIST = 16384 +OF_REOPEN = 32768 +OFS_MAXPATHNAME = 128 +MAXINTATOM = 49152 + +# winbase.h +PROCESS_HEAP_REGION = 1 +PROCESS_HEAP_UNCOMMITTED_RANGE = 2 +PROCESS_HEAP_ENTRY_BUSY = 4 +PROCESS_HEAP_ENTRY_MOVEABLE = 16 +PROCESS_HEAP_ENTRY_DDESHARE = 32 +SCS_32BIT_BINARY = 0 +SCS_DOS_BINARY = 1 +SCS_WOW_BINARY = 2 +SCS_PIF_BINARY = 3 +SCS_POSIX_BINARY = 4 +SCS_OS216_BINARY = 5 +SEM_FAILCRITICALERRORS = 1 +SEM_NOGPFAULTERRORBOX = 2 +SEM_NOALIGNMENTFAULTEXCEPT = 4 +SEM_NOOPENFILEERRORBOX = 32768 +LOCKFILE_FAIL_IMMEDIATELY = 1 +LOCKFILE_EXCLUSIVE_LOCK = 2 +HANDLE_FLAG_INHERIT = 1 +HANDLE_FLAG_PROTECT_FROM_CLOSE = 2 +HINSTANCE_ERROR = 32 +GET_TAPE_MEDIA_INFORMATION = 0 +GET_TAPE_DRIVE_INFORMATION = 1 +SET_TAPE_MEDIA_INFORMATION = 0 +SET_TAPE_DRIVE_INFORMATION = 1 +FORMAT_MESSAGE_ALLOCATE_BUFFER = 256 +FORMAT_MESSAGE_IGNORE_INSERTS = 512 +FORMAT_MESSAGE_FROM_STRING = 1024 +FORMAT_MESSAGE_FROM_HMODULE = 2048 +FORMAT_MESSAGE_FROM_SYSTEM = 4096 +FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192 +FORMAT_MESSAGE_MAX_WIDTH_MASK = 255 +BACKUP_INVALID = 0 +BACKUP_DATA = 1 +BACKUP_EA_DATA = 2 +BACKUP_SECURITY_DATA = 3 +BACKUP_ALTERNATE_DATA = 4 +BACKUP_LINK = 5 +BACKUP_PROPERTY_DATA = 6 +BACKUP_OBJECT_ID = 7 +BACKUP_REPARSE_DATA = 8 +BACKUP_SPARSE_BLOCK = 9 + +STREAM_NORMAL_ATTRIBUTE = 0 +STREAM_MODIFIED_WHEN_READ = 1 +STREAM_CONTAINS_SECURITY = 2 +STREAM_CONTAINS_PROPERTIES = 4 +STARTF_USESHOWWINDOW = 1 +STARTF_USESIZE = 2 +STARTF_USEPOSITION = 4 +STARTF_USECOUNTCHARS = 8 +STARTF_USEFILLATTRIBUTE = 16 +STARTF_FORCEONFEEDBACK = 64 +STARTF_FORCEOFFFEEDBACK = 128 +STARTF_USESTDHANDLES = 256 +STARTF_USEHOTKEY = 512 +SHUTDOWN_NORETRY = 1 +DONT_RESOLVE_DLL_REFERENCES = 1 +LOAD_LIBRARY_AS_DATAFILE = 2 +LOAD_WITH_ALTERED_SEARCH_PATH = 8 +DDD_RAW_TARGET_PATH = 1 +DDD_REMOVE_DEFINITION = 2 +DDD_EXACT_MATCH_ON_REMOVE = 4 +MOVEFILE_REPLACE_EXISTING = 1 +MOVEFILE_COPY_ALLOWED = 2 +MOVEFILE_DELAY_UNTIL_REBOOT = 4 +MAX_COMPUTERNAME_LENGTH = 15 +LOGON32_LOGON_INTERACTIVE = 2 +LOGON32_LOGON_BATCH = 4 +LOGON32_LOGON_SERVICE = 5 +LOGON32_PROVIDER_DEFAULT = 0 +LOGON32_PROVIDER_WINNT35 = 1 +VER_PLATFORM_WIN32s = 0 +VER_PLATFORM_WIN32_WINDOWS = 1 +VER_PLATFORM_WIN32_NT = 2 +TC_NORMAL = 0 +TC_HARDERR = 1 +TC_GP_TRAP = 2 +TC_SIGNAL = 3 +AC_LINE_OFFLINE = 0 +AC_LINE_ONLINE = 1 +AC_LINE_BACKUP_POWER = 2 +AC_LINE_UNKNOWN = 255 +BATTERY_FLAG_HIGH = 1 +BATTERY_FLAG_LOW = 2 +BATTERY_FLAG_CRITICAL = 4 +BATTERY_FLAG_CHARGING = 8 +BATTERY_FLAG_NO_BATTERY = 128 +BATTERY_FLAG_UNKNOWN = 255 +BATTERY_PERCENTAGE_UNKNOWN = 255 +BATTERY_LIFE_UNKNOWN = -1 + +# Generated by h2py from d:\msdev\include\richedit.h +cchTextLimitDefault = 32767 +WM_CONTEXTMENU = 123 +WM_PRINTCLIENT = 792 +EN_MSGFILTER = 1792 +EN_REQUESTRESIZE = 1793 +EN_SELCHANGE = 1794 +EN_DROPFILES = 1795 +EN_PROTECTED = 1796 +EN_CORRECTTEXT = 1797 +EN_STOPNOUNDO = 1798 +EN_IMECHANGE = 1799 +EN_SAVECLIPBOARD = 1800 +EN_OLEOPFAILED = 1801 +ENM_NONE = 0 +ENM_CHANGE = 1 +ENM_UPDATE = 2 +ENM_SCROLL = 4 +ENM_KEYEVENTS = 65536 +ENM_MOUSEEVENTS = 131072 +ENM_REQUESTRESIZE = 262144 +ENM_SELCHANGE = 524288 +ENM_DROPFILES = 1048576 +ENM_PROTECTED = 2097152 +ENM_CORRECTTEXT = 4194304 +ENM_IMECHANGE = 8388608 +ES_SAVESEL = 32768 +ES_SUNKEN = 16384 +ES_DISABLENOSCROLL = 8192 +ES_SELECTIONBAR = 16777216 +ES_EX_NOCALLOLEINIT = 16777216 +ES_VERTICAL = 4194304 +ES_NOIME = 524288 +ES_SELFIME = 262144 +ECO_AUTOWORDSELECTION = 1 +ECO_AUTOVSCROLL = 64 +ECO_AUTOHSCROLL = 128 +ECO_NOHIDESEL = 256 +ECO_READONLY = 2048 +ECO_WANTRETURN = 4096 +ECO_SAVESEL = 32768 +ECO_SELECTIONBAR = 16777216 +ECO_VERTICAL = 4194304 +ECOOP_SET = 1 +ECOOP_OR = 2 +ECOOP_AND = 3 +ECOOP_XOR = 4 +WB_CLASSIFY = 3 +WB_MOVEWORDLEFT = 4 +WB_MOVEWORDRIGHT = 5 +WB_LEFTBREAK = 6 +WB_RIGHTBREAK = 7 +WB_MOVEWORDPREV = 4 +WB_MOVEWORDNEXT = 5 +WB_PREVBREAK = 6 +WB_NEXTBREAK = 7 +PC_FOLLOWING = 1 +PC_LEADING = 2 +PC_OVERFLOW = 3 +PC_DELIMITER = 4 +WBF_WORDWRAP = 16 +WBF_WORDBREAK = 32 +WBF_OVERFLOW = 64 +WBF_LEVEL1 = 128 +WBF_LEVEL2 = 256 +WBF_CUSTOM = 512 +CFM_BOLD = 1 +CFM_ITALIC = 2 +CFM_UNDERLINE = 4 +CFM_STRIKEOUT = 8 +CFM_PROTECTED = 16 +CFM_SIZE = -2147483648 +CFM_COLOR = 1073741824 +CFM_FACE = 536870912 +CFM_OFFSET = 268435456 +CFM_CHARSET = 134217728 +CFE_BOLD = 1 +CFE_ITALIC = 2 +CFE_UNDERLINE = 4 +CFE_STRIKEOUT = 8 +CFE_PROTECTED = 16 +CFE_AUTOCOLOR = 1073741824 +yHeightCharPtsMost = 1638 +SCF_SELECTION = 1 +SCF_WORD = 2 +SF_TEXT = 1 +SF_RTF = 2 +SF_RTFNOOBJS = 3 +SF_TEXTIZED = 4 +SFF_SELECTION = 32768 +SFF_PLAINRTF = 16384 +MAX_TAB_STOPS = 32 +lDefaultTab = 720 +PFM_STARTINDENT = 1 +PFM_RIGHTINDENT = 2 +PFM_OFFSET = 4 +PFM_ALIGNMENT = 8 +PFM_TABSTOPS = 16 +PFM_NUMBERING = 32 +PFM_OFFSETINDENT = -2147483648 +PFN_BULLET = 1 +PFA_LEFT = 1 +PFA_RIGHT = 2 +PFA_CENTER = 3 +WM_NOTIFY = 78 +SEL_EMPTY = 0 +SEL_TEXT = 1 +SEL_OBJECT = 2 +SEL_MULTICHAR = 4 +SEL_MULTIOBJECT = 8 +OLEOP_DOVERB = 1 +CF_RTF = "Rich Text Format" +CF_RTFNOOBJS = "Rich Text Format Without Objects" +CF_RETEXTOBJ = "RichEdit Text and Objects" + +# From wincon.h +RIGHT_ALT_PRESSED = 1 # the right alt key is pressed. +LEFT_ALT_PRESSED = 2 # the left alt key is pressed. +RIGHT_CTRL_PRESSED = 4 # the right ctrl key is pressed. +LEFT_CTRL_PRESSED = 8 # the left ctrl key is pressed. +SHIFT_PRESSED = 16 # the shift key is pressed. +NUMLOCK_ON = 32 # the numlock light is on. +SCROLLLOCK_ON = 64 # the scrolllock light is on. +CAPSLOCK_ON = 128 # the capslock light is on. +ENHANCED_KEY = 256 # the key is enhanced. +NLS_DBCSCHAR = 65536 # DBCS for JPN: SBCS/DBCS mode. +NLS_ALPHANUMERIC = 0 # DBCS for JPN: Alphanumeric mode. +NLS_KATAKANA = 131072 # DBCS for JPN: Katakana mode. +NLS_HIRAGANA = 262144 # DBCS for JPN: Hiragana mode. +NLS_ROMAN = 4194304 # DBCS for JPN: Roman/Noroman mode. +NLS_IME_CONVERSION = 8388608 # DBCS for JPN: IME conversion. +NLS_IME_DISABLE = 536870912 # DBCS for JPN: IME enable/disable. + +FROM_LEFT_1ST_BUTTON_PRESSED = 1 +RIGHTMOST_BUTTON_PRESSED = 2 +FROM_LEFT_2ND_BUTTON_PRESSED = 4 +FROM_LEFT_3RD_BUTTON_PRESSED = 8 +FROM_LEFT_4TH_BUTTON_PRESSED = 16 + +CTRL_C_EVENT = 0 +CTRL_BREAK_EVENT = 1 +CTRL_CLOSE_EVENT = 2 +CTRL_LOGOFF_EVENT = 5 +CTRL_SHUTDOWN_EVENT = 6 + +MOUSE_MOVED = 1 +DOUBLE_CLICK = 2 +MOUSE_WHEELED = 4 + +#property sheet window messages from prsht.h +PSM_SETCURSEL = (WM_USER + 101) +PSM_REMOVEPAGE = (WM_USER + 102) +PSM_ADDPAGE = (WM_USER + 103) +PSM_CHANGED = (WM_USER + 104) +PSM_RESTARTWINDOWS = (WM_USER + 105) +PSM_REBOOTSYSTEM = (WM_USER + 106) +PSM_CANCELTOCLOSE = (WM_USER + 107) +PSM_QUERYSIBLINGS = (WM_USER + 108) +PSM_UNCHANGED = (WM_USER + 109) +PSM_APPLY = (WM_USER + 110) +PSM_SETTITLEA = (WM_USER + 111) +PSM_SETTITLEW = (WM_USER + 120) +PSM_SETWIZBUTTONS = (WM_USER + 112) +PSM_PRESSBUTTON = (WM_USER + 113) +PSM_SETCURSELID = (WM_USER + 114) +PSM_SETFINISHTEXTA = (WM_USER + 115) +PSM_SETFINISHTEXTW = (WM_USER + 121) +PSM_GETTABCONTROL = (WM_USER + 116) +PSM_ISDIALOGMESSAGE = (WM_USER + 117) +PSM_GETCURRENTPAGEHWND = (WM_USER + 118) +PSM_INSERTPAGE = (WM_USER + 119) +PSM_SETHEADERTITLEA = (WM_USER + 125) +PSM_SETHEADERTITLEW = (WM_USER + 126) +PSM_SETHEADERSUBTITLEA = (WM_USER + 127) +PSM_SETHEADERSUBTITLEW = (WM_USER + 128) +PSM_HWNDTOINDEX = (WM_USER + 129) +PSM_INDEXTOHWND = (WM_USER + 130) +PSM_PAGETOINDEX = (WM_USER + 131) +PSM_INDEXTOPAGE = (WM_USER + 132) +PSM_IDTOINDEX = (WM_USER + 133) +PSM_INDEXTOID = (WM_USER + 134) +PSM_GETRESULT = (WM_USER + 135) +PSM_RECALCPAGESIZES = (WM_USER + 136) + +# GetUserNameEx/GetComputerNameEx +NameUnknown = 0 +NameFullyQualifiedDN = 1 +NameSamCompatible = 2 +NameDisplay = 3 +NameUniqueId = 6 +NameCanonical = 7 +NameUserPrincipal = 8 +NameCanonicalEx = 9 +NameServicePrincipal = 10 +NameDnsDomain = 12 + +ComputerNameNetBIOS = 0 +ComputerNameDnsHostname = 1 +ComputerNameDnsDomain = 2 +ComputerNameDnsFullyQualified = 3 +ComputerNamePhysicalNetBIOS = 4 +ComputerNamePhysicalDnsHostname = 5 +ComputerNamePhysicalDnsDomain = 6 +ComputerNamePhysicalDnsFullyQualified = 7 + +LWA_COLORKEY = 0x00000001 +LWA_ALPHA = 0x00000002 +ULW_COLORKEY = 0x00000001 +ULW_ALPHA = 0x00000002 +ULW_OPAQUE = 0x00000004 + +# WinDef.h +TRUE = 1 +FALSE = 0 +MAX_PATH = 260 +# WinGDI.h +AC_SRC_OVER = 0 +AC_SRC_ALPHA = 1 +GRADIENT_FILL_RECT_H = 0 +GRADIENT_FILL_RECT_V = 1 +GRADIENT_FILL_TRIANGLE = 2 +GRADIENT_FILL_OP_FLAG = 255 diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/win32cryptcon.py b/thirdparty/python25/Lib/site-packages/win32/lib/win32cryptcon.py new file mode 100644 index 000000000..1e0d11f7e --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/win32cryptcon.py @@ -0,0 +1,1671 @@ +# Generated by h2py from WinCrypt.h +def GET_ALG_CLASS(x): return (x & (7 << 13)) + +def GET_ALG_TYPE(x): return (x & (15 << 9)) + +def GET_ALG_SID(x): return (x & (511)) + +ALG_CLASS_ANY = (0) +ALG_CLASS_SIGNATURE = (1 << 13) +ALG_CLASS_MSG_ENCRYPT = (2 << 13) +ALG_CLASS_DATA_ENCRYPT = (3 << 13) +ALG_CLASS_HASH = (4 << 13) +ALG_CLASS_KEY_EXCHANGE = (5 << 13) +ALG_CLASS_ALL = (7 << 13) +ALG_TYPE_ANY = (0) +ALG_TYPE_DSS = (1 << 9) +ALG_TYPE_RSA = (2 << 9) +ALG_TYPE_BLOCK = (3 << 9) +ALG_TYPE_STREAM = (4 << 9) +ALG_TYPE_DH = (5 << 9) +ALG_TYPE_SECURECHANNEL = (6 << 9) +ALG_SID_ANY = (0) +ALG_SID_RSA_ANY = 0 +ALG_SID_RSA_PKCS = 1 +ALG_SID_RSA_MSATWORK = 2 +ALG_SID_RSA_ENTRUST = 3 +ALG_SID_RSA_PGP = 4 +ALG_SID_DSS_ANY = 0 +ALG_SID_DSS_PKCS = 1 +ALG_SID_DSS_DMS = 2 +ALG_SID_DES = 1 +ALG_SID_3DES = 3 +ALG_SID_DESX = 4 +ALG_SID_IDEA = 5 +ALG_SID_CAST = 6 +ALG_SID_SAFERSK64 = 7 +ALG_SID_SAFERSK128 = 8 +ALG_SID_3DES_112 = 9 +ALG_SID_CYLINK_MEK = 12 +ALG_SID_RC5 = 13 +ALG_SID_AES_128 = 14 +ALG_SID_AES_192 = 15 +ALG_SID_AES_256 = 16 +ALG_SID_AES = 17 +ALG_SID_SKIPJACK = 10 +ALG_SID_TEK = 11 +CRYPT_MODE_CBCI = 6 +CRYPT_MODE_CFBP = 7 +CRYPT_MODE_OFBP = 8 +CRYPT_MODE_CBCOFM = 9 +CRYPT_MODE_CBCOFMI = 10 +ALG_SID_RC2 = 2 +ALG_SID_RC4 = 1 +ALG_SID_SEAL = 2 +ALG_SID_DH_SANDF = 1 +ALG_SID_DH_EPHEM = 2 +ALG_SID_AGREED_KEY_ANY = 3 +ALG_SID_KEA = 4 +ALG_SID_MD2 = 1 +ALG_SID_MD4 = 2 +ALG_SID_MD5 = 3 +ALG_SID_SHA = 4 +ALG_SID_SHA1 = 4 +ALG_SID_MAC = 5 +ALG_SID_RIPEMD = 6 +ALG_SID_RIPEMD160 = 7 +ALG_SID_SSL3SHAMD5 = 8 +ALG_SID_HMAC = 9 +ALG_SID_TLS1PRF = 10 +ALG_SID_HASH_REPLACE_OWF = 11 +ALG_SID_SHA_256 = 12 +ALG_SID_SHA_384 = 13 +ALG_SID_SHA_512 = 14 +ALG_SID_SSL3_MASTER = 1 +ALG_SID_SCHANNEL_MASTER_HASH = 2 +ALG_SID_SCHANNEL_MAC_KEY = 3 +ALG_SID_PCT1_MASTER = 4 +ALG_SID_SSL2_MASTER = 5 +ALG_SID_TLS1_MASTER = 6 +ALG_SID_SCHANNEL_ENC_KEY = 7 +ALG_SID_EXAMPLE = 80 +CALG_MD2 = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD2) +CALG_MD4 = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD4) +CALG_MD5 = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD5) +CALG_SHA = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA) +CALG_SHA1 = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA1) +CALG_MAC = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MAC) +CALG_RSA_SIGN = (ALG_CLASS_SIGNATURE | ALG_TYPE_RSA | ALG_SID_RSA_ANY) +CALG_DSS_SIGN = (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_DSS_ANY) +CALG_NO_SIGN = (ALG_CLASS_SIGNATURE | ALG_TYPE_ANY | ALG_SID_ANY) +CALG_RSA_KEYX = (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_RSA|ALG_SID_RSA_ANY) +CALG_DES = (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_DES) +CALG_3DES_112 = (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_3DES_112) +CALG_3DES = (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_3DES) +CALG_DESX = (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_DESX) +CALG_RC2 = (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_RC2) +CALG_RC4 = (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_RC4) +CALG_SEAL = (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_SEAL) +CALG_DH_SF = (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_DH|ALG_SID_DH_SANDF) +CALG_DH_EPHEM = (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_DH|ALG_SID_DH_EPHEM) +CALG_AGREEDKEY_ANY = (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_DH|ALG_SID_AGREED_KEY_ANY) +CALG_KEA_KEYX = (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_DH|ALG_SID_KEA) +CALG_HUGHES_MD5 = (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_ANY|ALG_SID_MD5) +CALG_SKIPJACK = (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_SKIPJACK) +CALG_TEK = (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_TEK) +CALG_CYLINK_MEK = (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_CYLINK_MEK) +CALG_SSL3_SHAMD5 = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SSL3SHAMD5) +CALG_SSL3_MASTER = (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SSL3_MASTER) +CALG_SCHANNEL_MASTER_HASH = (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SCHANNEL_MASTER_HASH) +CALG_SCHANNEL_MAC_KEY = (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SCHANNEL_MAC_KEY) +CALG_SCHANNEL_ENC_KEY = (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SCHANNEL_ENC_KEY) +CALG_PCT1_MASTER = (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_PCT1_MASTER) +CALG_SSL2_MASTER = (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SSL2_MASTER) +CALG_TLS1_MASTER = (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_TLS1_MASTER) +CALG_RC5 = (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_RC5) +CALG_HMAC = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HMAC) +CALG_TLS1PRF = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1PRF) +CALG_HASH_REPLACE_OWF = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HASH_REPLACE_OWF) +CALG_AES_128 = (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_128) +CALG_AES_192 = (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_192) +CALG_AES_256 = (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_256) +CALG_AES = (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES) +CALG_SHA_256 = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_256) +CALG_SHA_384 = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_384) +CALG_SHA_512 = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_512) +CRYPT_VERIFYCONTEXT = (-268435456) +CRYPT_NEWKEYSET = 0x00000008 +CRYPT_DELETEKEYSET = 0x00000010 +CRYPT_MACHINE_KEYSET = 0x00000020 +CRYPT_SILENT = 0x00000040 +CRYPT_EXPORTABLE = 0x00000001 +CRYPT_USER_PROTECTED = 0x00000002 +CRYPT_CREATE_SALT = 0x00000004 +CRYPT_UPDATE_KEY = 0x00000008 +CRYPT_NO_SALT = 0x00000010 +CRYPT_PREGEN = 0x00000040 +CRYPT_RECIPIENT = 0x00000010 +CRYPT_INITIATOR = 0x00000040 +CRYPT_ONLINE = 0x00000080 +CRYPT_SF = 0x00000100 +CRYPT_CREATE_IV = 0x00000200 +CRYPT_KEK = 0x00000400 +CRYPT_DATA_KEY = 0x00000800 +CRYPT_VOLATILE = 0x00001000 +CRYPT_SGCKEY = 0x00002000 +CRYPT_ARCHIVABLE = 0x00004000 +RSA1024BIT_KEY = 0x04000000 +CRYPT_SERVER = 0x00000400 +KEY_LENGTH_MASK = (-65536) +CRYPT_Y_ONLY = 0x00000001 +CRYPT_SSL2_FALLBACK = 0x00000002 +CRYPT_DESTROYKEY = 0x00000004 +CRYPT_OAEP = 0x00000040 +CRYPT_BLOB_VER3 = 0x00000080 +CRYPT_IPSEC_HMAC_KEY = 0x00000100 +CRYPT_DECRYPT_RSA_NO_PADDING_CHECK = 0x00000020 +CRYPT_SECRETDIGEST = 0x00000001 +CRYPT_OWF_REPL_LM_HASH = 0x00000001 +CRYPT_LITTLE_ENDIAN = 0x00000001 +CRYPT_NOHASHOID = 0x00000001 +CRYPT_TYPE2_FORMAT = 0x00000002 +CRYPT_X931_FORMAT = 0x00000004 +CRYPT_MACHINE_DEFAULT = 0x00000001 +CRYPT_USER_DEFAULT = 0x00000002 +CRYPT_DELETE_DEFAULT = 0x00000004 +SIMPLEBLOB = 0x1 +PUBLICKEYBLOB = 0x6 +PRIVATEKEYBLOB = 0x7 +PLAINTEXTKEYBLOB = 0x8 +OPAQUEKEYBLOB = 0x9 +PUBLICKEYBLOBEX = 0xA +SYMMETRICWRAPKEYBLOB = 0xB +AT_KEYEXCHANGE = 1 +AT_SIGNATURE = 2 +CRYPT_USERDATA = 1 +KP_IV = 1 +KP_SALT = 2 +KP_PADDING = 3 +KP_MODE = 4 +KP_MODE_BITS = 5 +KP_PERMISSIONS = 6 +KP_ALGID = 7 +KP_BLOCKLEN = 8 +KP_KEYLEN = 9 +KP_SALT_EX = 10 +KP_P = 11 +KP_G = 12 +KP_Q = 13 +KP_X = 14 +KP_Y = 15 +KP_RA = 16 +KP_RB = 17 +KP_INFO = 18 +KP_EFFECTIVE_KEYLEN = 19 +KP_SCHANNEL_ALG = 20 +KP_CLIENT_RANDOM = 21 +KP_SERVER_RANDOM = 22 +KP_RP = 23 +KP_PRECOMP_MD5 = 24 +KP_PRECOMP_SHA = 25 +KP_CERTIFICATE = 26 +KP_CLEAR_KEY = 27 +KP_PUB_EX_LEN = 28 +KP_PUB_EX_VAL = 29 +KP_KEYVAL = 30 +KP_ADMIN_PIN = 31 +KP_KEYEXCHANGE_PIN = 32 +KP_SIGNATURE_PIN = 33 +KP_PREHASH = 34 +KP_ROUNDS = 35 +KP_OAEP_PARAMS = 36 +KP_CMS_KEY_INFO = 37 +KP_CMS_DH_KEY_INFO = 38 +KP_PUB_PARAMS = 39 +KP_VERIFY_PARAMS = 40 +KP_HIGHEST_VERSION = 41 +KP_GET_USE_COUNT = 42 +PKCS5_PADDING = 1 +RANDOM_PADDING = 2 +ZERO_PADDING = 3 +CRYPT_MODE_CBC = 1 +CRYPT_MODE_ECB = 2 +CRYPT_MODE_OFB = 3 +CRYPT_MODE_CFB = 4 +CRYPT_MODE_CTS = 5 +CRYPT_ENCRYPT = 0x0001 +CRYPT_DECRYPT = 0x0002 +CRYPT_EXPORT = 0x0004 +CRYPT_READ = 0x0008 +CRYPT_WRITE = 0x0010 +CRYPT_MAC = 0x0020 +CRYPT_EXPORT_KEY = 0x0040 +CRYPT_IMPORT_KEY = 0x0080 +CRYPT_ARCHIVE = 0x0100 +HP_ALGID = 0x0001 +HP_HASHVAL = 0x0002 +HP_HASHSIZE = 0x0004 +HP_HMAC_INFO = 0x0005 +HP_TLS1PRF_LABEL = 0x0006 +HP_TLS1PRF_SEED = 0x0007 +def RCRYPT_SUCCEEDED(rt): return ((rt) == CRYPT_SUCCEED) + +def RCRYPT_FAILED(rt): return ((rt) == CRYPT_FAILED) + +PP_ENUMALGS = 1 +PP_ENUMCONTAINERS = 2 +PP_IMPTYPE = 3 +PP_NAME = 4 +PP_VERSION = 5 +PP_CONTAINER = 6 +PP_CHANGE_PASSWORD = 7 +PP_KEYSET_SEC_DESCR = 8 +PP_CERTCHAIN = 9 +PP_KEY_TYPE_SUBTYPE = 10 +PP_PROVTYPE = 16 +PP_KEYSTORAGE = 17 +PP_APPLI_CERT = 18 +PP_SYM_KEYSIZE = 19 +PP_SESSION_KEYSIZE = 20 +PP_UI_PROMPT = 21 +PP_ENUMALGS_EX = 22 +PP_ENUMMANDROOTS = 25 +PP_ENUMELECTROOTS = 26 +PP_KEYSET_TYPE = 27 +PP_ADMIN_PIN = 31 +PP_KEYEXCHANGE_PIN = 32 +PP_SIGNATURE_PIN = 33 +PP_SIG_KEYSIZE_INC = 34 +PP_KEYX_KEYSIZE_INC = 35 +PP_UNIQUE_CONTAINER = 36 +PP_SGC_INFO = 37 +PP_USE_HARDWARE_RNG = 38 +PP_KEYSPEC = 39 +PP_ENUMEX_SIGNING_PROT = 40 +PP_CRYPT_COUNT_KEY_USE = 41 +CRYPT_FIRST = 1 +CRYPT_NEXT = 2 +CRYPT_SGC_ENUM = 4 +CRYPT_IMPL_HARDWARE = 1 +CRYPT_IMPL_SOFTWARE = 2 +CRYPT_IMPL_MIXED = 3 +CRYPT_IMPL_UNKNOWN = 4 +CRYPT_IMPL_REMOVABLE = 8 +CRYPT_SEC_DESCR = 0x00000001 +CRYPT_PSTORE = 0x00000002 +CRYPT_UI_PROMPT = 0x00000004 +CRYPT_FLAG_PCT1 = 0x0001 +CRYPT_FLAG_SSL2 = 0x0002 +CRYPT_FLAG_SSL3 = 0x0004 +CRYPT_FLAG_TLS1 = 0x0008 +CRYPT_FLAG_IPSEC = 0x0010 +CRYPT_FLAG_SIGNING = 0x0020 +CRYPT_SGC = 0x0001 +CRYPT_FASTSGC = 0x0002 +PP_CLIENT_HWND = 1 +PP_CONTEXT_INFO = 11 +PP_KEYEXCHANGE_KEYSIZE = 12 +PP_SIGNATURE_KEYSIZE = 13 +PP_KEYEXCHANGE_ALG = 14 +PP_SIGNATURE_ALG = 15 +PP_DELETEKEY = 24 +PROV_RSA_FULL = 1 +PROV_RSA_SIG = 2 +PROV_DSS = 3 +PROV_FORTEZZA = 4 +PROV_MS_EXCHANGE = 5 +PROV_SSL = 6 +PROV_RSA_SCHANNEL = 12 +PROV_DSS_DH = 13 +PROV_EC_ECDSA_SIG = 14 +PROV_EC_ECNRA_SIG = 15 +PROV_EC_ECDSA_FULL = 16 +PROV_EC_ECNRA_FULL = 17 +PROV_DH_SCHANNEL = 18 +PROV_SPYRUS_LYNKS = 20 +PROV_RNG = 21 +PROV_INTEL_SEC = 22 +PROV_REPLACE_OWF = 23 +PROV_RSA_AES = 24 +MS_DEF_PROV_A = "Microsoft Base Cryptographic Provider v1.0" +MS_DEF_PROV = MS_DEF_PROV_A +MS_ENHANCED_PROV_A = "Microsoft Enhanced Cryptographic Provider v1.0" +MS_ENHANCED_PROV = MS_ENHANCED_PROV_A +MS_STRONG_PROV_A = "Microsoft Strong Cryptographic Provider" +MS_STRONG_PROV = MS_STRONG_PROV_A +MS_DEF_RSA_SIG_PROV_A = "Microsoft RSA Signature Cryptographic Provider" +MS_DEF_RSA_SIG_PROV = MS_DEF_RSA_SIG_PROV_A +MS_DEF_RSA_SCHANNEL_PROV_A = "Microsoft RSA SChannel Cryptographic Provider" +MS_DEF_RSA_SCHANNEL_PROV = MS_DEF_RSA_SCHANNEL_PROV_A +MS_DEF_DSS_PROV_A = "Microsoft Base DSS Cryptographic Provider" +MS_DEF_DSS_PROV = MS_DEF_DSS_PROV_A +MS_DEF_DSS_DH_PROV_A = "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider" +MS_DEF_DSS_DH_PROV = MS_DEF_DSS_DH_PROV_A +MS_ENH_DSS_DH_PROV_A = "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider" +MS_ENH_DSS_DH_PROV = MS_ENH_DSS_DH_PROV_A +MS_DEF_DH_SCHANNEL_PROV_A = "Microsoft DH SChannel Cryptographic Provider" +MS_DEF_DH_SCHANNEL_PROV = MS_DEF_DH_SCHANNEL_PROV_A +MS_SCARD_PROV_A = "Microsoft Base Smart Card Crypto Provider" +MS_SCARD_PROV = MS_SCARD_PROV_A +MS_ENH_RSA_AES_PROV_A = "Microsoft Enhanced RSA and AES Cryptographic Provider" +MS_ENH_RSA_AES_PROV = MS_ENH_RSA_AES_PROV_A +MAXUIDLEN = 64 +EXPO_OFFLOAD_REG_VALUE = "ExpoOffload" +EXPO_OFFLOAD_FUNC_NAME = "OffloadModExpo" +szKEY_CRYPTOAPI_PRIVATE_KEY_OPTIONS = \ + "Software\\Policies\\Microsoft\\Cryptography" +szFORCE_KEY_PROTECTION = "ForceKeyProtection" +dwFORCE_KEY_PROTECTION_DISABLED = 0x0 +dwFORCE_KEY_PROTECTION_USER_SELECT = 0x1 +dwFORCE_KEY_PROTECTION_HIGH = 0x2 +szKEY_CACHE_ENABLED = "CachePrivateKeys" +szKEY_CACHE_SECONDS = "PrivateKeyLifetimeSeconds" +CUR_BLOB_VERSION = 2 +SCHANNEL_MAC_KEY = 0x00000000 +SCHANNEL_ENC_KEY = 0x00000001 +INTERNATIONAL_USAGE = 0x00000001 +szOID_RSA = "1.2.840.113549" +szOID_PKCS = "1.2.840.113549.1" +szOID_RSA_HASH = "1.2.840.113549.2" +szOID_RSA_ENCRYPT = "1.2.840.113549.3" +szOID_PKCS_1 = "1.2.840.113549.1.1" +szOID_PKCS_2 = "1.2.840.113549.1.2" +szOID_PKCS_3 = "1.2.840.113549.1.3" +szOID_PKCS_4 = "1.2.840.113549.1.4" +szOID_PKCS_5 = "1.2.840.113549.1.5" +szOID_PKCS_6 = "1.2.840.113549.1.6" +szOID_PKCS_7 = "1.2.840.113549.1.7" +szOID_PKCS_8 = "1.2.840.113549.1.8" +szOID_PKCS_9 = "1.2.840.113549.1.9" +szOID_PKCS_10 = "1.2.840.113549.1.10" +szOID_PKCS_12 = "1.2.840.113549.1.12" +szOID_RSA_RSA = "1.2.840.113549.1.1.1" +szOID_RSA_MD2RSA = "1.2.840.113549.1.1.2" +szOID_RSA_MD4RSA = "1.2.840.113549.1.1.3" +szOID_RSA_MD5RSA = "1.2.840.113549.1.1.4" +szOID_RSA_SHA1RSA = "1.2.840.113549.1.1.5" +szOID_RSA_SETOAEP_RSA = "1.2.840.113549.1.1.6" +szOID_RSA_DH = "1.2.840.113549.1.3.1" +szOID_RSA_data = "1.2.840.113549.1.7.1" +szOID_RSA_signedData = "1.2.840.113549.1.7.2" +szOID_RSA_envelopedData = "1.2.840.113549.1.7.3" +szOID_RSA_signEnvData = "1.2.840.113549.1.7.4" +szOID_RSA_digestedData = "1.2.840.113549.1.7.5" +szOID_RSA_hashedData = "1.2.840.113549.1.7.5" +szOID_RSA_encryptedData = "1.2.840.113549.1.7.6" +szOID_RSA_emailAddr = "1.2.840.113549.1.9.1" +szOID_RSA_unstructName = "1.2.840.113549.1.9.2" +szOID_RSA_contentType = "1.2.840.113549.1.9.3" +szOID_RSA_messageDigest = "1.2.840.113549.1.9.4" +szOID_RSA_signingTime = "1.2.840.113549.1.9.5" +szOID_RSA_counterSign = "1.2.840.113549.1.9.6" +szOID_RSA_challengePwd = "1.2.840.113549.1.9.7" +szOID_RSA_unstructAddr = "1.2.840.113549.1.9.8" +szOID_RSA_extCertAttrs = "1.2.840.113549.1.9.9" +szOID_RSA_certExtensions = "1.2.840.113549.1.9.14" +szOID_RSA_SMIMECapabilities = "1.2.840.113549.1.9.15" +szOID_RSA_preferSignedData = "1.2.840.113549.1.9.15.1" +szOID_RSA_SMIMEalg = "1.2.840.113549.1.9.16.3" +szOID_RSA_SMIMEalgESDH = "1.2.840.113549.1.9.16.3.5" +szOID_RSA_SMIMEalgCMS3DESwrap = "1.2.840.113549.1.9.16.3.6" +szOID_RSA_SMIMEalgCMSRC2wrap = "1.2.840.113549.1.9.16.3.7" +szOID_RSA_MD2 = "1.2.840.113549.2.2" +szOID_RSA_MD4 = "1.2.840.113549.2.4" +szOID_RSA_MD5 = "1.2.840.113549.2.5" +szOID_RSA_RC2CBC = "1.2.840.113549.3.2" +szOID_RSA_RC4 = "1.2.840.113549.3.4" +szOID_RSA_DES_EDE3_CBC = "1.2.840.113549.3.7" +szOID_RSA_RC5_CBCPad = "1.2.840.113549.3.9" +szOID_ANSI_X942 = "1.2.840.10046" +szOID_ANSI_X942_DH = "1.2.840.10046.2.1" +szOID_X957 = "1.2.840.10040" +szOID_X957_DSA = "1.2.840.10040.4.1" +szOID_X957_SHA1DSA = "1.2.840.10040.4.3" +szOID_DS = "2.5" +szOID_DSALG = "2.5.8" +szOID_DSALG_CRPT = "2.5.8.1" +szOID_DSALG_HASH = "2.5.8.2" +szOID_DSALG_SIGN = "2.5.8.3" +szOID_DSALG_RSA = "2.5.8.1.1" +szOID_OIW = "1.3.14" +szOID_OIWSEC = "1.3.14.3.2" +szOID_OIWSEC_md4RSA = "1.3.14.3.2.2" +szOID_OIWSEC_md5RSA = "1.3.14.3.2.3" +szOID_OIWSEC_md4RSA2 = "1.3.14.3.2.4" +szOID_OIWSEC_desECB = "1.3.14.3.2.6" +szOID_OIWSEC_desCBC = "1.3.14.3.2.7" +szOID_OIWSEC_desOFB = "1.3.14.3.2.8" +szOID_OIWSEC_desCFB = "1.3.14.3.2.9" +szOID_OIWSEC_desMAC = "1.3.14.3.2.10" +szOID_OIWSEC_rsaSign = "1.3.14.3.2.11" +szOID_OIWSEC_dsa = "1.3.14.3.2.12" +szOID_OIWSEC_shaDSA = "1.3.14.3.2.13" +szOID_OIWSEC_mdc2RSA = "1.3.14.3.2.14" +szOID_OIWSEC_shaRSA = "1.3.14.3.2.15" +szOID_OIWSEC_dhCommMod = "1.3.14.3.2.16" +szOID_OIWSEC_desEDE = "1.3.14.3.2.17" +szOID_OIWSEC_sha = "1.3.14.3.2.18" +szOID_OIWSEC_mdc2 = "1.3.14.3.2.19" +szOID_OIWSEC_dsaComm = "1.3.14.3.2.20" +szOID_OIWSEC_dsaCommSHA = "1.3.14.3.2.21" +szOID_OIWSEC_rsaXchg = "1.3.14.3.2.22" +szOID_OIWSEC_keyHashSeal = "1.3.14.3.2.23" +szOID_OIWSEC_md2RSASign = "1.3.14.3.2.24" +szOID_OIWSEC_md5RSASign = "1.3.14.3.2.25" +szOID_OIWSEC_sha1 = "1.3.14.3.2.26" +szOID_OIWSEC_dsaSHA1 = "1.3.14.3.2.27" +szOID_OIWSEC_dsaCommSHA1 = "1.3.14.3.2.28" +szOID_OIWSEC_sha1RSASign = "1.3.14.3.2.29" +szOID_OIWDIR = "1.3.14.7.2" +szOID_OIWDIR_CRPT = "1.3.14.7.2.1" +szOID_OIWDIR_HASH = "1.3.14.7.2.2" +szOID_OIWDIR_SIGN = "1.3.14.7.2.3" +szOID_OIWDIR_md2 = "1.3.14.7.2.2.1" +szOID_OIWDIR_md2RSA = "1.3.14.7.2.3.1" +szOID_INFOSEC = "2.16.840.1.101.2.1" +szOID_INFOSEC_sdnsSignature = "2.16.840.1.101.2.1.1.1" +szOID_INFOSEC_mosaicSignature = "2.16.840.1.101.2.1.1.2" +szOID_INFOSEC_sdnsConfidentiality = "2.16.840.1.101.2.1.1.3" +szOID_INFOSEC_mosaicConfidentiality = "2.16.840.1.101.2.1.1.4" +szOID_INFOSEC_sdnsIntegrity = "2.16.840.1.101.2.1.1.5" +szOID_INFOSEC_mosaicIntegrity = "2.16.840.1.101.2.1.1.6" +szOID_INFOSEC_sdnsTokenProtection = "2.16.840.1.101.2.1.1.7" +szOID_INFOSEC_mosaicTokenProtection = "2.16.840.1.101.2.1.1.8" +szOID_INFOSEC_sdnsKeyManagement = "2.16.840.1.101.2.1.1.9" +szOID_INFOSEC_mosaicKeyManagement = "2.16.840.1.101.2.1.1.10" +szOID_INFOSEC_sdnsKMandSig = "2.16.840.1.101.2.1.1.11" +szOID_INFOSEC_mosaicKMandSig = "2.16.840.1.101.2.1.1.12" +szOID_INFOSEC_SuiteASignature = "2.16.840.1.101.2.1.1.13" +szOID_INFOSEC_SuiteAConfidentiality = "2.16.840.1.101.2.1.1.14" +szOID_INFOSEC_SuiteAIntegrity = "2.16.840.1.101.2.1.1.15" +szOID_INFOSEC_SuiteATokenProtection = "2.16.840.1.101.2.1.1.16" +szOID_INFOSEC_SuiteAKeyManagement = "2.16.840.1.101.2.1.1.17" +szOID_INFOSEC_SuiteAKMandSig = "2.16.840.1.101.2.1.1.18" +szOID_INFOSEC_mosaicUpdatedSig = "2.16.840.1.101.2.1.1.19" +szOID_INFOSEC_mosaicKMandUpdSig = "2.16.840.1.101.2.1.1.20" +szOID_INFOSEC_mosaicUpdatedInteg = "2.16.840.1.101.2.1.1.21" +szOID_COMMON_NAME = "2.5.4.3" +szOID_SUR_NAME = "2.5.4.4" +szOID_DEVICE_SERIAL_NUMBER = "2.5.4.5" +szOID_COUNTRY_NAME = "2.5.4.6" +szOID_LOCALITY_NAME = "2.5.4.7" +szOID_STATE_OR_PROVINCE_NAME = "2.5.4.8" +szOID_STREET_ADDRESS = "2.5.4.9" +szOID_ORGANIZATION_NAME = "2.5.4.10" +szOID_ORGANIZATIONAL_UNIT_NAME = "2.5.4.11" +szOID_TITLE = "2.5.4.12" +szOID_DESCRIPTION = "2.5.4.13" +szOID_SEARCH_GUIDE = "2.5.4.14" +szOID_BUSINESS_CATEGORY = "2.5.4.15" +szOID_POSTAL_ADDRESS = "2.5.4.16" +szOID_POSTAL_CODE = "2.5.4.17" +szOID_POST_OFFICE_BOX = "2.5.4.18" +szOID_PHYSICAL_DELIVERY_OFFICE_NAME = "2.5.4.19" +szOID_TELEPHONE_NUMBER = "2.5.4.20" +szOID_TELEX_NUMBER = "2.5.4.21" +szOID_TELETEXT_TERMINAL_IDENTIFIER = "2.5.4.22" +szOID_FACSIMILE_TELEPHONE_NUMBER = "2.5.4.23" +szOID_X21_ADDRESS = "2.5.4.24" +szOID_INTERNATIONAL_ISDN_NUMBER = "2.5.4.25" +szOID_REGISTERED_ADDRESS = "2.5.4.26" +szOID_DESTINATION_INDICATOR = "2.5.4.27" +szOID_PREFERRED_DELIVERY_METHOD = "2.5.4.28" +szOID_PRESENTATION_ADDRESS = "2.5.4.29" +szOID_SUPPORTED_APPLICATION_CONTEXT = "2.5.4.30" +szOID_MEMBER = "2.5.4.31" +szOID_OWNER = "2.5.4.32" +szOID_ROLE_OCCUPANT = "2.5.4.33" +szOID_SEE_ALSO = "2.5.4.34" +szOID_USER_PASSWORD = "2.5.4.35" +szOID_USER_CERTIFICATE = "2.5.4.36" +szOID_CA_CERTIFICATE = "2.5.4.37" +szOID_AUTHORITY_REVOCATION_LIST = "2.5.4.38" +szOID_CERTIFICATE_REVOCATION_LIST = "2.5.4.39" +szOID_CROSS_CERTIFICATE_PAIR = "2.5.4.40" +szOID_GIVEN_NAME = "2.5.4.42" +szOID_INITIALS = "2.5.4.43" +szOID_DN_QUALIFIER = "2.5.4.46" +szOID_DOMAIN_COMPONENT = "0.9.2342.19200300.100.1.25" +szOID_PKCS_12_FRIENDLY_NAME_ATTR = "1.2.840.113549.1.9.20" +szOID_PKCS_12_LOCAL_KEY_ID = "1.2.840.113549.1.9.21" +szOID_PKCS_12_KEY_PROVIDER_NAME_ATTR = "1.3.6.1.4.1.311.17.1" +szOID_LOCAL_MACHINE_KEYSET = "1.3.6.1.4.1.311.17.2" +szOID_KEYID_RDN = "1.3.6.1.4.1.311.10.7.1" +CERT_RDN_ANY_TYPE = 0 +CERT_RDN_ENCODED_BLOB = 1 +CERT_RDN_OCTET_STRING = 2 +CERT_RDN_NUMERIC_STRING = 3 +CERT_RDN_PRINTABLE_STRING = 4 +CERT_RDN_TELETEX_STRING = 5 +CERT_RDN_T61_STRING = 5 +CERT_RDN_VIDEOTEX_STRING = 6 +CERT_RDN_IA5_STRING = 7 +CERT_RDN_GRAPHIC_STRING = 8 +CERT_RDN_VISIBLE_STRING = 9 +CERT_RDN_ISO646_STRING = 9 +CERT_RDN_GENERAL_STRING = 10 +CERT_RDN_UNIVERSAL_STRING = 11 +CERT_RDN_INT4_STRING = 11 +CERT_RDN_BMP_STRING = 12 +CERT_RDN_UNICODE_STRING = 12 +CERT_RDN_UTF8_STRING = 13 +CERT_RDN_TYPE_MASK = 0x000000FF +CERT_RDN_FLAGS_MASK = (-16777216) +CERT_RDN_ENABLE_T61_UNICODE_FLAG = (-2147483648) +CERT_RDN_ENABLE_UTF8_UNICODE_FLAG = 0x20000000 +CERT_RDN_DISABLE_CHECK_TYPE_FLAG = 0x40000000 +CERT_RDN_DISABLE_IE4_UTF8_FLAG = 0x01000000 +CERT_RSA_PUBLIC_KEY_OBJID = szOID_RSA_RSA +CERT_DEFAULT_OID_PUBLIC_KEY_SIGN = szOID_RSA_RSA +CERT_DEFAULT_OID_PUBLIC_KEY_XCHG = szOID_RSA_RSA +CERT_V1 = 0 +CERT_V2 = 1 +CERT_V3 = 2 +CERT_INFO_VERSION_FLAG = 1 +CERT_INFO_SERIAL_NUMBER_FLAG = 2 +CERT_INFO_SIGNATURE_ALGORITHM_FLAG = 3 +CERT_INFO_ISSUER_FLAG = 4 +CERT_INFO_NOT_BEFORE_FLAG = 5 +CERT_INFO_NOT_AFTER_FLAG = 6 +CERT_INFO_SUBJECT_FLAG = 7 +CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG = 8 +CERT_INFO_ISSUER_UNIQUE_ID_FLAG = 9 +CERT_INFO_SUBJECT_UNIQUE_ID_FLAG = 10 +CERT_INFO_EXTENSION_FLAG = 11 +CRL_V1 = 0 +CRL_V2 = 1 +CERT_REQUEST_V1 = 0 +CERT_KEYGEN_REQUEST_V1 = 0 +CTL_V1 = 0 +CERT_ENCODING_TYPE_MASK = 0x0000FFFF +CMSG_ENCODING_TYPE_MASK = (-65536) +def GET_CERT_ENCODING_TYPE(X): return (X & CERT_ENCODING_TYPE_MASK) + +def GET_CMSG_ENCODING_TYPE(X): return (X & CMSG_ENCODING_TYPE_MASK) + +CRYPT_ASN_ENCODING = 0x00000001 +CRYPT_NDR_ENCODING = 0x00000002 +X509_ASN_ENCODING = 0x00000001 +X509_NDR_ENCODING = 0x00000002 +PKCS_7_ASN_ENCODING = 0x00010000 +PKCS_7_NDR_ENCODING = 0x00020000 +CRYPT_FORMAT_STR_MULTI_LINE = 0x0001 +CRYPT_FORMAT_STR_NO_HEX = 0x0010 +CRYPT_FORMAT_SIMPLE = 0x0001 +CRYPT_FORMAT_X509 = 0x0002 +CRYPT_FORMAT_OID = 0x0004 +CRYPT_FORMAT_RDN_SEMICOLON = 0x0100 +CRYPT_FORMAT_RDN_CRLF = 0x0200 +CRYPT_FORMAT_RDN_UNQUOTE = 0x0400 +CRYPT_FORMAT_RDN_REVERSE = 0x0800 +CRYPT_FORMAT_COMMA = 0x1000 +CRYPT_FORMAT_SEMICOLON = CRYPT_FORMAT_RDN_SEMICOLON +CRYPT_FORMAT_CRLF = CRYPT_FORMAT_RDN_CRLF +CRYPT_ENCODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG = 0x8 +CRYPT_ENCODE_ALLOC_FLAG = 0x8000 +CRYPT_UNICODE_NAME_ENCODE_ENABLE_T61_UNICODE_FLAG = \ + CERT_RDN_ENABLE_T61_UNICODE_FLAG +CRYPT_UNICODE_NAME_ENCODE_ENABLE_UTF8_UNICODE_FLAG = \ + CERT_RDN_ENABLE_UTF8_UNICODE_FLAG +CRYPT_UNICODE_NAME_ENCODE_DISABLE_CHECK_TYPE_FLAG = \ + CERT_RDN_DISABLE_CHECK_TYPE_FLAG +CRYPT_SORTED_CTL_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG = 0x10000 +CRYPT_DECODE_NOCOPY_FLAG = 0x1 +CRYPT_DECODE_TO_BE_SIGNED_FLAG = 0x2 +CRYPT_DECODE_SHARE_OID_STRING_FLAG = 0x4 +CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG = 0x8 +CRYPT_DECODE_ALLOC_FLAG = 0x8000 +CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG = \ + CERT_RDN_DISABLE_IE4_UTF8_FLAG +CRYPT_ENCODE_DECODE_NONE = 0 +szOID_AUTHORITY_KEY_IDENTIFIER = "2.5.29.1" +szOID_KEY_ATTRIBUTES = "2.5.29.2" +szOID_CERT_POLICIES_95 = "2.5.29.3" +szOID_KEY_USAGE_RESTRICTION = "2.5.29.4" +szOID_SUBJECT_ALT_NAME = "2.5.29.7" +szOID_ISSUER_ALT_NAME = "2.5.29.8" +szOID_BASIC_CONSTRAINTS = "2.5.29.10" +szOID_KEY_USAGE = "2.5.29.15" +szOID_PRIVATEKEY_USAGE_PERIOD = "2.5.29.16" +szOID_BASIC_CONSTRAINTS2 = "2.5.29.19" +szOID_CERT_POLICIES = "2.5.29.32" +szOID_ANY_CERT_POLICY = "2.5.29.32.0" +szOID_AUTHORITY_KEY_IDENTIFIER2 = "2.5.29.35" +szOID_SUBJECT_KEY_IDENTIFIER = "2.5.29.14" +szOID_SUBJECT_ALT_NAME2 = "2.5.29.17" +szOID_ISSUER_ALT_NAME2 = "2.5.29.18" +szOID_CRL_REASON_CODE = "2.5.29.21" +szOID_REASON_CODE_HOLD = "2.5.29.23" +szOID_CRL_DIST_POINTS = "2.5.29.31" +szOID_ENHANCED_KEY_USAGE = "2.5.29.37" +szOID_CRL_NUMBER = "2.5.29.20" +szOID_DELTA_CRL_INDICATOR = "2.5.29.27" +szOID_ISSUING_DIST_POINT = "2.5.29.28" +szOID_FRESHEST_CRL = "2.5.29.46" +szOID_NAME_CONSTRAINTS = "2.5.29.30" +szOID_POLICY_MAPPINGS = "2.5.29.33" +szOID_LEGACY_POLICY_MAPPINGS = "2.5.29.5" +szOID_POLICY_CONSTRAINTS = "2.5.29.36" +szOID_RENEWAL_CERTIFICATE = "1.3.6.1.4.1.311.13.1" +szOID_ENROLLMENT_NAME_VALUE_PAIR = "1.3.6.1.4.1.311.13.2.1" +szOID_ENROLLMENT_CSP_PROVIDER = "1.3.6.1.4.1.311.13.2.2" +szOID_OS_VERSION = "1.3.6.1.4.1.311.13.2.3" +szOID_ENROLLMENT_AGENT = "1.3.6.1.4.1.311.20.2.1" +szOID_PKIX = "1.3.6.1.5.5.7" +szOID_PKIX_PE = "1.3.6.1.5.5.7.1" +szOID_AUTHORITY_INFO_ACCESS = "1.3.6.1.5.5.7.1.1" +szOID_CERT_EXTENSIONS = "1.3.6.1.4.1.311.2.1.14" +szOID_NEXT_UPDATE_LOCATION = "1.3.6.1.4.1.311.10.2" +szOID_REMOVE_CERTIFICATE = "1.3.6.1.4.1.311.10.8.1" +szOID_CROSS_CERT_DIST_POINTS = "1.3.6.1.4.1.311.10.9.1" +szOID_CTL = "1.3.6.1.4.1.311.10.1" +szOID_SORTED_CTL = "1.3.6.1.4.1.311.10.1.1" +szOID_SERIALIZED = "1.3.6.1.4.1.311.10.3.3.1" +szOID_NT_PRINCIPAL_NAME = "1.3.6.1.4.1.311.20.2.3" +szOID_PRODUCT_UPDATE = "1.3.6.1.4.1.311.31.1" +szOID_ANY_APPLICATION_POLICY = "1.3.6.1.4.1.311.10.12.1" +szOID_AUTO_ENROLL_CTL_USAGE = "1.3.6.1.4.1.311.20.1" +szOID_ENROLL_CERTTYPE_EXTENSION = "1.3.6.1.4.1.311.20.2" +szOID_CERT_MANIFOLD = "1.3.6.1.4.1.311.20.3" +szOID_CERTSRV_CA_VERSION = "1.3.6.1.4.1.311.21.1" +szOID_CERTSRV_PREVIOUS_CERT_HASH = "1.3.6.1.4.1.311.21.2" +szOID_CRL_VIRTUAL_BASE = "1.3.6.1.4.1.311.21.3" +szOID_CRL_NEXT_PUBLISH = "1.3.6.1.4.1.311.21.4" +szOID_KP_CA_EXCHANGE = "1.3.6.1.4.1.311.21.5" +szOID_KP_KEY_RECOVERY_AGENT = "1.3.6.1.4.1.311.21.6" +szOID_CERTIFICATE_TEMPLATE = "1.3.6.1.4.1.311.21.7" +szOID_ENTERPRISE_OID_ROOT = "1.3.6.1.4.1.311.21.8" +szOID_RDN_DUMMY_SIGNER = "1.3.6.1.4.1.311.21.9" +szOID_APPLICATION_CERT_POLICIES = "1.3.6.1.4.1.311.21.10" +szOID_APPLICATION_POLICY_MAPPINGS = "1.3.6.1.4.1.311.21.11" +szOID_APPLICATION_POLICY_CONSTRAINTS = "1.3.6.1.4.1.311.21.12" +szOID_ARCHIVED_KEY_ATTR = "1.3.6.1.4.1.311.21.13" +szOID_CRL_SELF_CDP = "1.3.6.1.4.1.311.21.14" +szOID_REQUIRE_CERT_CHAIN_POLICY = "1.3.6.1.4.1.311.21.15" +szOID_ARCHIVED_KEY_CERT_HASH = "1.3.6.1.4.1.311.21.16" +szOID_ISSUED_CERT_HASH = "1.3.6.1.4.1.311.21.17" +szOID_DS_EMAIL_REPLICATION = "1.3.6.1.4.1.311.21.19" +szOID_REQUEST_CLIENT_INFO = "1.3.6.1.4.1.311.21.20" +szOID_ENCRYPTED_KEY_HASH = "1.3.6.1.4.1.311.21.21" +szOID_CERTSRV_CROSSCA_VERSION = "1.3.6.1.4.1.311.21.22" +szOID_NTDS_REPLICATION = "1.3.6.1.4.1.311.25.1" +szOID_SUBJECT_DIR_ATTRS = "2.5.29.9" +szOID_PKIX_KP = "1.3.6.1.5.5.7.3" +szOID_PKIX_KP_SERVER_AUTH = "1.3.6.1.5.5.7.3.1" +szOID_PKIX_KP_CLIENT_AUTH = "1.3.6.1.5.5.7.3.2" +szOID_PKIX_KP_CODE_SIGNING = "1.3.6.1.5.5.7.3.3" +szOID_PKIX_KP_EMAIL_PROTECTION = "1.3.6.1.5.5.7.3.4" +szOID_PKIX_KP_IPSEC_END_SYSTEM = "1.3.6.1.5.5.7.3.5" +szOID_PKIX_KP_IPSEC_TUNNEL = "1.3.6.1.5.5.7.3.6" +szOID_PKIX_KP_IPSEC_USER = "1.3.6.1.5.5.7.3.7" +szOID_PKIX_KP_TIMESTAMP_SIGNING = "1.3.6.1.5.5.7.3.8" +szOID_IPSEC_KP_IKE_INTERMEDIATE = "1.3.6.1.5.5.8.2.2" +szOID_KP_CTL_USAGE_SIGNING = "1.3.6.1.4.1.311.10.3.1" +szOID_KP_TIME_STAMP_SIGNING = "1.3.6.1.4.1.311.10.3.2" +szOID_SERVER_GATED_CRYPTO = "1.3.6.1.4.1.311.10.3.3" +szOID_SGC_NETSCAPE = "2.16.840.1.113730.4.1" +szOID_KP_EFS = "1.3.6.1.4.1.311.10.3.4" +szOID_EFS_RECOVERY = "1.3.6.1.4.1.311.10.3.4.1" +szOID_WHQL_CRYPTO = "1.3.6.1.4.1.311.10.3.5" +szOID_NT5_CRYPTO = "1.3.6.1.4.1.311.10.3.6" +szOID_OEM_WHQL_CRYPTO = "1.3.6.1.4.1.311.10.3.7" +szOID_EMBEDDED_NT_CRYPTO = "1.3.6.1.4.1.311.10.3.8" +szOID_ROOT_LIST_SIGNER = "1.3.6.1.4.1.311.10.3.9" +szOID_KP_QUALIFIED_SUBORDINATION = "1.3.6.1.4.1.311.10.3.10" +szOID_KP_KEY_RECOVERY = "1.3.6.1.4.1.311.10.3.11" +szOID_KP_DOCUMENT_SIGNING = "1.3.6.1.4.1.311.10.3.12" +szOID_KP_LIFETIME_SIGNING = "1.3.6.1.4.1.311.10.3.13" +szOID_KP_MOBILE_DEVICE_SOFTWARE = "1.3.6.1.4.1.311.10.3.14" +szOID_DRM = "1.3.6.1.4.1.311.10.5.1" +szOID_DRM_INDIVIDUALIZATION = "1.3.6.1.4.1.311.10.5.2" +szOID_LICENSES = "1.3.6.1.4.1.311.10.6.1" +szOID_LICENSE_SERVER = "1.3.6.1.4.1.311.10.6.2" +szOID_KP_SMARTCARD_LOGON = "1.3.6.1.4.1.311.20.2.2" +szOID_YESNO_TRUST_ATTR = "1.3.6.1.4.1.311.10.4.1" +szOID_PKIX_POLICY_QUALIFIER_CPS = "1.3.6.1.5.5.7.2.1" +szOID_PKIX_POLICY_QUALIFIER_USERNOTICE = "1.3.6.1.5.5.7.2.2" +szOID_CERT_POLICIES_95_QUALIFIER1 = "2.16.840.1.113733.1.7.1.1" +CERT_UNICODE_RDN_ERR_INDEX_MASK = 0x3FF +CERT_UNICODE_RDN_ERR_INDEX_SHIFT = 22 +CERT_UNICODE_ATTR_ERR_INDEX_MASK = 0x003F +CERT_UNICODE_ATTR_ERR_INDEX_SHIFT = 16 +CERT_UNICODE_VALUE_ERR_INDEX_MASK = 0x0000FFFF +CERT_UNICODE_VALUE_ERR_INDEX_SHIFT = 0 +CERT_DIGITAL_SIGNATURE_KEY_USAGE = 0x80 +CERT_NON_REPUDIATION_KEY_USAGE = 0x40 +CERT_KEY_ENCIPHERMENT_KEY_USAGE = 0x20 +CERT_DATA_ENCIPHERMENT_KEY_USAGE = 0x10 +CERT_KEY_AGREEMENT_KEY_USAGE = 0x08 +CERT_KEY_CERT_SIGN_KEY_USAGE = 0x04 +CERT_OFFLINE_CRL_SIGN_KEY_USAGE = 0x02 +CERT_CRL_SIGN_KEY_USAGE = 0x02 +CERT_ENCIPHER_ONLY_KEY_USAGE = 0x01 +CERT_DECIPHER_ONLY_KEY_USAGE = 0x80 +CERT_ALT_NAME_OTHER_NAME = 1 +CERT_ALT_NAME_RFC822_NAME = 2 +CERT_ALT_NAME_DNS_NAME = 3 +CERT_ALT_NAME_X400_ADDRESS = 4 +CERT_ALT_NAME_DIRECTORY_NAME = 5 +CERT_ALT_NAME_EDI_PARTY_NAME = 6 +CERT_ALT_NAME_URL = 7 +CERT_ALT_NAME_IP_ADDRESS = 8 +CERT_ALT_NAME_REGISTERED_ID = 9 +CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK = 0xFF +CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT = 16 +CERT_ALT_NAME_VALUE_ERR_INDEX_MASK = 0x0000FFFF +CERT_ALT_NAME_VALUE_ERR_INDEX_SHIFT = 0 +CERT_CA_SUBJECT_FLAG = 0x80 +CERT_END_ENTITY_SUBJECT_FLAG = 0x40 +szOID_PKIX_ACC_DESCR = "1.3.6.1.5.5.7.48" +szOID_PKIX_OCSP = "1.3.6.1.5.5.7.48.1" +szOID_PKIX_CA_ISSUERS = "1.3.6.1.5.5.7.48.2" +CRL_REASON_UNSPECIFIED = 0 +CRL_REASON_KEY_COMPROMISE = 1 +CRL_REASON_CA_COMPROMISE = 2 +CRL_REASON_AFFILIATION_CHANGED = 3 +CRL_REASON_SUPERSEDED = 4 +CRL_REASON_CESSATION_OF_OPERATION = 5 +CRL_REASON_CERTIFICATE_HOLD = 6 +CRL_REASON_REMOVE_FROM_CRL = 8 +CRL_DIST_POINT_NO_NAME = 0 +CRL_DIST_POINT_FULL_NAME = 1 +CRL_DIST_POINT_ISSUER_RDN_NAME = 2 +CRL_REASON_UNUSED_FLAG = 0x80 +CRL_REASON_KEY_COMPROMISE_FLAG = 0x40 +CRL_REASON_CA_COMPROMISE_FLAG = 0x20 +CRL_REASON_AFFILIATION_CHANGED_FLAG = 0x10 +CRL_REASON_SUPERSEDED_FLAG = 0x08 +CRL_REASON_CESSATION_OF_OPERATION_FLAG = 0x04 +CRL_REASON_CERTIFICATE_HOLD_FLAG = 0x02 +CRL_DIST_POINT_ERR_INDEX_MASK = 0x7F +CRL_DIST_POINT_ERR_INDEX_SHIFT = 24 + +CRL_DIST_POINT_ERR_CRL_ISSUER_BIT = (-2147483648) + +CROSS_CERT_DIST_POINT_ERR_INDEX_MASK = 0xFF +CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT = 24 + +CERT_EXCLUDED_SUBTREE_BIT = (-2147483648) + +SORTED_CTL_EXT_FLAGS_OFFSET = (0*4) +SORTED_CTL_EXT_COUNT_OFFSET = (1*4) +SORTED_CTL_EXT_MAX_COLLISION_OFFSET = (2*4) +SORTED_CTL_EXT_HASH_BUCKET_OFFSET = (3*4) +SORTED_CTL_EXT_HASHED_SUBJECT_IDENTIFIER_FLAG = 0x1 +CERT_DSS_R_LEN = 20 +CERT_DSS_S_LEN = 20 +CERT_DSS_SIGNATURE_LEN = (CERT_DSS_R_LEN + CERT_DSS_S_LEN) +CERT_MAX_ASN_ENCODED_DSS_SIGNATURE_LEN = (2 + 2*(2 + 20 +1)) +CRYPT_X942_COUNTER_BYTE_LENGTH = 4 +CRYPT_X942_KEY_LENGTH_BYTE_LENGTH = 4 +CRYPT_X942_PUB_INFO_BYTE_LENGTH = (512/8) +CRYPT_RC2_40BIT_VERSION = 160 +CRYPT_RC2_56BIT_VERSION = 52 +CRYPT_RC2_64BIT_VERSION = 120 +CRYPT_RC2_128BIT_VERSION = 58 +szOID_VERISIGN_PRIVATE_6_9 = "2.16.840.1.113733.1.6.9" +szOID_VERISIGN_ONSITE_JURISDICTION_HASH = "2.16.840.1.113733.1.6.11" +szOID_VERISIGN_BITSTRING_6_13 = "2.16.840.1.113733.1.6.13" +szOID_VERISIGN_ISS_STRONG_CRYPTO = "2.16.840.1.113733.1.8.1" +szOID_NETSCAPE = "2.16.840.1.113730" +szOID_NETSCAPE_CERT_EXTENSION = "2.16.840.1.113730.1" +szOID_NETSCAPE_CERT_TYPE = "2.16.840.1.113730.1.1" +szOID_NETSCAPE_BASE_URL = "2.16.840.1.113730.1.2" +szOID_NETSCAPE_REVOCATION_URL = "2.16.840.1.113730.1.3" +szOID_NETSCAPE_CA_REVOCATION_URL = "2.16.840.1.113730.1.4" +szOID_NETSCAPE_CERT_RENEWAL_URL = "2.16.840.1.113730.1.7" +szOID_NETSCAPE_CA_POLICY_URL = "2.16.840.1.113730.1.8" +szOID_NETSCAPE_SSL_SERVER_NAME = "2.16.840.1.113730.1.12" +szOID_NETSCAPE_COMMENT = "2.16.840.1.113730.1.13" +szOID_NETSCAPE_DATA_TYPE = "2.16.840.1.113730.2" +szOID_NETSCAPE_CERT_SEQUENCE = "2.16.840.1.113730.2.5" +NETSCAPE_SSL_CLIENT_AUTH_CERT_TYPE = 0x80 +NETSCAPE_SSL_SERVER_AUTH_CERT_TYPE = 0x40 +NETSCAPE_SMIME_CERT_TYPE = 0x20 +NETSCAPE_SIGN_CERT_TYPE = 0x10 +NETSCAPE_SSL_CA_CERT_TYPE = 0x04 +NETSCAPE_SMIME_CA_CERT_TYPE = 0x02 +NETSCAPE_SIGN_CA_CERT_TYPE = 0x01 +szOID_CT_PKI_DATA = "1.3.6.1.5.5.7.12.2" +szOID_CT_PKI_RESPONSE = "1.3.6.1.5.5.7.12.3" +szOID_PKIX_NO_SIGNATURE = "1.3.6.1.5.5.7.6.2" +szOID_CMC = "1.3.6.1.5.5.7.7" +szOID_CMC_STATUS_INFO = "1.3.6.1.5.5.7.7.1" +szOID_CMC_IDENTIFICATION = "1.3.6.1.5.5.7.7.2" +szOID_CMC_IDENTITY_PROOF = "1.3.6.1.5.5.7.7.3" +szOID_CMC_DATA_RETURN = "1.3.6.1.5.5.7.7.4" +szOID_CMC_TRANSACTION_ID = "1.3.6.1.5.5.7.7.5" +szOID_CMC_SENDER_NONCE = "1.3.6.1.5.5.7.7.6" +szOID_CMC_RECIPIENT_NONCE = "1.3.6.1.5.5.7.7.7" +szOID_CMC_ADD_EXTENSIONS = "1.3.6.1.5.5.7.7.8" +szOID_CMC_ENCRYPTED_POP = "1.3.6.1.5.5.7.7.9" +szOID_CMC_DECRYPTED_POP = "1.3.6.1.5.5.7.7.10" +szOID_CMC_LRA_POP_WITNESS = "1.3.6.1.5.5.7.7.11" +szOID_CMC_GET_CERT = "1.3.6.1.5.5.7.7.15" +szOID_CMC_GET_CRL = "1.3.6.1.5.5.7.7.16" +szOID_CMC_REVOKE_REQUEST = "1.3.6.1.5.5.7.7.17" +szOID_CMC_REG_INFO = "1.3.6.1.5.5.7.7.18" +szOID_CMC_RESPONSE_INFO = "1.3.6.1.5.5.7.7.19" +szOID_CMC_QUERY_PENDING = "1.3.6.1.5.5.7.7.21" +szOID_CMC_ID_POP_LINK_RANDOM = "1.3.6.1.5.5.7.7.22" +szOID_CMC_ID_POP_LINK_WITNESS = "1.3.6.1.5.5.7.7.23" +szOID_CMC_ID_CONFIRM_CERT_ACCEPTANCE = "1.3.6.1.5.5.7.7.24" +szOID_CMC_ADD_ATTRIBUTES = "1.3.6.1.4.1.311.10.10.1" +CMC_TAGGED_CERT_REQUEST_CHOICE = 1 +CMC_OTHER_INFO_NO_CHOICE = 0 +CMC_OTHER_INFO_FAIL_CHOICE = 1 +CMC_OTHER_INFO_PEND_CHOICE = 2 +CMC_STATUS_SUCCESS = 0 +CMC_STATUS_FAILED = 2 +CMC_STATUS_PENDING = 3 +CMC_STATUS_NO_SUPPORT = 4 +CMC_STATUS_CONFIRM_REQUIRED = 5 +CMC_FAIL_BAD_ALG = 0 +CMC_FAIL_BAD_MESSAGE_CHECK = 1 +CMC_FAIL_BAD_REQUEST = 2 +CMC_FAIL_BAD_TIME = 3 +CMC_FAIL_BAD_CERT_ID = 4 +CMC_FAIL_UNSUPORTED_EXT = 5 +CMC_FAIL_MUST_ARCHIVE_KEYS = 6 +CMC_FAIL_BAD_IDENTITY = 7 +CMC_FAIL_POP_REQUIRED = 8 +CMC_FAIL_POP_FAILED = 9 +CMC_FAIL_NO_KEY_REUSE = 10 +CMC_FAIL_INTERNAL_CA_ERROR = 11 +CMC_FAIL_TRY_LATER = 12 +CRYPT_OID_ENCODE_OBJECT_FUNC = "CryptDllEncodeObject" +CRYPT_OID_DECODE_OBJECT_FUNC = "CryptDllDecodeObject" +CRYPT_OID_ENCODE_OBJECT_EX_FUNC = "CryptDllEncodeObjectEx" +CRYPT_OID_DECODE_OBJECT_EX_FUNC = "CryptDllDecodeObjectEx" +CRYPT_OID_CREATE_COM_OBJECT_FUNC = "CryptDllCreateCOMObject" +CRYPT_OID_VERIFY_REVOCATION_FUNC = "CertDllVerifyRevocation" +CRYPT_OID_VERIFY_CTL_USAGE_FUNC = "CertDllVerifyCTLUsage" +CRYPT_OID_FORMAT_OBJECT_FUNC = "CryptDllFormatObject" +CRYPT_OID_FIND_OID_INFO_FUNC = "CryptDllFindOIDInfo" +CRYPT_OID_FIND_LOCALIZED_NAME_FUNC = "CryptDllFindLocalizedName" +CRYPT_OID_REGPATH = "Software\\Microsoft\\Cryptography\\OID" +CRYPT_OID_REG_ENCODING_TYPE_PREFIX = "EncodingType " +CRYPT_OID_REG_FUNC_NAME_VALUE_NAME_A = "FuncName" +CRYPT_DEFAULT_OID = "DEFAULT" +CRYPT_INSTALL_OID_FUNC_BEFORE_FLAG = 1 +CRYPT_GET_INSTALLED_OID_FUNC_FLAG = 0x1 +CRYPT_REGISTER_FIRST_INDEX = 0 +CRYPT_REGISTER_LAST_INDEX = (-1) +CRYPT_MATCH_ANY_ENCODING_TYPE = (-1) +CRYPT_HASH_ALG_OID_GROUP_ID = 1 +CRYPT_ENCRYPT_ALG_OID_GROUP_ID = 2 +CRYPT_PUBKEY_ALG_OID_GROUP_ID = 3 +CRYPT_SIGN_ALG_OID_GROUP_ID = 4 +CRYPT_RDN_ATTR_OID_GROUP_ID = 5 +CRYPT_EXT_OR_ATTR_OID_GROUP_ID = 6 +CRYPT_ENHKEY_USAGE_OID_GROUP_ID = 7 +CRYPT_POLICY_OID_GROUP_ID = 8 +CRYPT_TEMPLATE_OID_GROUP_ID = 9 +CRYPT_LAST_OID_GROUP_ID = 9 +CRYPT_FIRST_ALG_OID_GROUP_ID = CRYPT_HASH_ALG_OID_GROUP_ID +CRYPT_LAST_ALG_OID_GROUP_ID = CRYPT_SIGN_ALG_OID_GROUP_ID +CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG = 0x1 +CRYPT_OID_USE_PUBKEY_PARA_FOR_PKCS7_FLAG = 0x2 +CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG = 0x4 +CRYPT_OID_INFO_OID_KEY = 1 +CRYPT_OID_INFO_NAME_KEY = 2 +CRYPT_OID_INFO_ALGID_KEY = 3 +CRYPT_OID_INFO_SIGN_KEY = 4 +CRYPT_INSTALL_OID_INFO_BEFORE_FLAG = 1 +CRYPT_LOCALIZED_NAME_ENCODING_TYPE = 0 +CRYPT_LOCALIZED_NAME_OID = "LocalizedNames" +szOID_PKCS_7_DATA = "1.2.840.113549.1.7.1" +szOID_PKCS_7_SIGNED = "1.2.840.113549.1.7.2" +szOID_PKCS_7_ENVELOPED = "1.2.840.113549.1.7.3" +szOID_PKCS_7_SIGNEDANDENVELOPED = "1.2.840.113549.1.7.4" +szOID_PKCS_7_DIGESTED = "1.2.840.113549.1.7.5" +szOID_PKCS_7_ENCRYPTED = "1.2.840.113549.1.7.6" +szOID_PKCS_9_CONTENT_TYPE = "1.2.840.113549.1.9.3" +szOID_PKCS_9_MESSAGE_DIGEST = "1.2.840.113549.1.9.4" +CMSG_DATA = 1 +CMSG_SIGNED = 2 +CMSG_ENVELOPED = 3 +CMSG_SIGNED_AND_ENVELOPED = 4 +CMSG_HASHED = 5 +CMSG_ENCRYPTED = 6 +CMSG_DATA_FLAG = (1 << CMSG_DATA) +CMSG_SIGNED_FLAG = (1 << CMSG_SIGNED) +CMSG_ENVELOPED_FLAG = (1 << CMSG_ENVELOPED) +CMSG_SIGNED_AND_ENVELOPED_FLAG = (1 << CMSG_SIGNED_AND_ENVELOPED) +CMSG_HASHED_FLAG = (1 << CMSG_HASHED) +CMSG_ENCRYPTED_FLAG = (1 << CMSG_ENCRYPTED) +CERT_ID_ISSUER_SERIAL_NUMBER = 1 +CERT_ID_KEY_IDENTIFIER = 2 +CERT_ID_SHA1_HASH = 3 +CMSG_KEY_AGREE_EPHEMERAL_KEY_CHOICE = 1 +CMSG_KEY_AGREE_STATIC_KEY_CHOICE = 2 +CMSG_MAIL_LIST_HANDLE_KEY_CHOICE = 1 +CMSG_KEY_TRANS_RECIPIENT = 1 +CMSG_KEY_AGREE_RECIPIENT = 2 +CMSG_MAIL_LIST_RECIPIENT = 3 +CMSG_SP3_COMPATIBLE_ENCRYPT_FLAG = (-2147483648) +CMSG_RC4_NO_SALT_FLAG = 0x40000000 +CMSG_INDEFINITE_LENGTH = ((-1)) +CMSG_BARE_CONTENT_FLAG = 0x00000001 +CMSG_LENGTH_ONLY_FLAG = 0x00000002 +CMSG_DETACHED_FLAG = 0x00000004 +CMSG_AUTHENTICATED_ATTRIBUTES_FLAG = 0x00000008 +CMSG_CONTENTS_OCTETS_FLAG = 0x00000010 +CMSG_MAX_LENGTH_FLAG = 0x00000020 +CMSG_CMS_ENCAPSULATED_CONTENT_FLAG = 0x00000040 +CMSG_CRYPT_RELEASE_CONTEXT_FLAG = 0x00008000 +CMSG_TYPE_PARAM = 1 +CMSG_CONTENT_PARAM = 2 +CMSG_BARE_CONTENT_PARAM = 3 +CMSG_INNER_CONTENT_TYPE_PARAM = 4 +CMSG_SIGNER_COUNT_PARAM = 5 +CMSG_SIGNER_INFO_PARAM = 6 +CMSG_SIGNER_CERT_INFO_PARAM = 7 +CMSG_SIGNER_HASH_ALGORITHM_PARAM = 8 +CMSG_SIGNER_AUTH_ATTR_PARAM = 9 +CMSG_SIGNER_UNAUTH_ATTR_PARAM = 10 +CMSG_CERT_COUNT_PARAM = 11 +CMSG_CERT_PARAM = 12 +CMSG_CRL_COUNT_PARAM = 13 +CMSG_CRL_PARAM = 14 +CMSG_ENVELOPE_ALGORITHM_PARAM = 15 +CMSG_RECIPIENT_COUNT_PARAM = 17 +CMSG_RECIPIENT_INDEX_PARAM = 18 +CMSG_RECIPIENT_INFO_PARAM = 19 +CMSG_HASH_ALGORITHM_PARAM = 20 +CMSG_HASH_DATA_PARAM = 21 +CMSG_COMPUTED_HASH_PARAM = 22 +CMSG_ENCRYPT_PARAM = 26 +CMSG_ENCRYPTED_DIGEST = 27 +CMSG_ENCODED_SIGNER = 28 +CMSG_ENCODED_MESSAGE = 29 +CMSG_VERSION_PARAM = 30 +CMSG_ATTR_CERT_COUNT_PARAM = 31 +CMSG_ATTR_CERT_PARAM = 32 +CMSG_CMS_RECIPIENT_COUNT_PARAM = 33 +CMSG_CMS_RECIPIENT_INDEX_PARAM = 34 +CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM = 35 +CMSG_CMS_RECIPIENT_INFO_PARAM = 36 +CMSG_UNPROTECTED_ATTR_PARAM = 37 +CMSG_SIGNER_CERT_ID_PARAM = 38 +CMSG_CMS_SIGNER_INFO_PARAM = 39 +CMSG_SIGNED_DATA_V1 = 1 +CMSG_SIGNED_DATA_V3 = 3 +CMSG_SIGNED_DATA_PKCS_1_5_VERSION = CMSG_SIGNED_DATA_V1 +CMSG_SIGNED_DATA_CMS_VERSION = CMSG_SIGNED_DATA_V3 +CMSG_SIGNER_INFO_V1 = 1 +CMSG_SIGNER_INFO_V3 = 3 +CMSG_SIGNER_INFO_PKCS_1_5_VERSION = CMSG_SIGNER_INFO_V1 +CMSG_SIGNER_INFO_CMS_VERSION = CMSG_SIGNER_INFO_V3 +CMSG_HASHED_DATA_V0 = 0 +CMSG_HASHED_DATA_V2 = 2 +CMSG_HASHED_DATA_PKCS_1_5_VERSION = CMSG_HASHED_DATA_V0 +CMSG_HASHED_DATA_CMS_VERSION = CMSG_HASHED_DATA_V2 +CMSG_ENVELOPED_DATA_V0 = 0 +CMSG_ENVELOPED_DATA_V2 = 2 +CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION = CMSG_ENVELOPED_DATA_V0 +CMSG_ENVELOPED_DATA_CMS_VERSION = CMSG_ENVELOPED_DATA_V2 +CMSG_KEY_AGREE_ORIGINATOR_CERT = 1 +CMSG_KEY_AGREE_ORIGINATOR_PUBLIC_KEY = 2 +CMSG_ENVELOPED_RECIPIENT_V0 = 0 +CMSG_ENVELOPED_RECIPIENT_V2 = 2 +CMSG_ENVELOPED_RECIPIENT_V3 = 3 +CMSG_ENVELOPED_RECIPIENT_V4 = 4 +CMSG_KEY_TRANS_PKCS_1_5_VERSION = CMSG_ENVELOPED_RECIPIENT_V0 +CMSG_KEY_TRANS_CMS_VERSION = CMSG_ENVELOPED_RECIPIENT_V2 +CMSG_KEY_AGREE_VERSION = CMSG_ENVELOPED_RECIPIENT_V3 +CMSG_MAIL_LIST_VERSION = CMSG_ENVELOPED_RECIPIENT_V4 +CMSG_CTRL_VERIFY_SIGNATURE = 1 +CMSG_CTRL_DECRYPT = 2 +CMSG_CTRL_VERIFY_HASH = 5 +CMSG_CTRL_ADD_SIGNER = 6 +CMSG_CTRL_DEL_SIGNER = 7 +CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR = 8 +CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR = 9 +CMSG_CTRL_ADD_CERT = 10 +CMSG_CTRL_DEL_CERT = 11 +CMSG_CTRL_ADD_CRL = 12 +CMSG_CTRL_DEL_CRL = 13 +CMSG_CTRL_ADD_ATTR_CERT = 14 +CMSG_CTRL_DEL_ATTR_CERT = 15 +CMSG_CTRL_KEY_TRANS_DECRYPT = 16 +CMSG_CTRL_KEY_AGREE_DECRYPT = 17 +CMSG_CTRL_MAIL_LIST_DECRYPT = 18 +CMSG_CTRL_VERIFY_SIGNATURE_EX = 19 +CMSG_CTRL_ADD_CMS_SIGNER_INFO = 20 +CMSG_VERIFY_SIGNER_PUBKEY = 1 +CMSG_VERIFY_SIGNER_CERT = 2 +CMSG_VERIFY_SIGNER_CHAIN = 3 +CMSG_VERIFY_SIGNER_NULL = 4 +CMSG_OID_GEN_ENCRYPT_KEY_FUNC = "CryptMsgDllGenEncryptKey" +CMSG_OID_EXPORT_ENCRYPT_KEY_FUNC = "CryptMsgDllExportEncryptKey" +CMSG_OID_IMPORT_ENCRYPT_KEY_FUNC = "CryptMsgDllImportEncryptKey" +CMSG_CONTENT_ENCRYPT_PAD_ENCODED_LEN_FLAG = 0x00000001 +CMSG_CONTENT_ENCRYPT_FREE_PARA_FLAG = 0x00000001 +CMSG_CONTENT_ENCRYPT_RELEASE_CONTEXT_FLAG = 0x00008000 +CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC = "CryptMsgDllGenContentEncryptKey" +CMSG_KEY_TRANS_ENCRYPT_FREE_PARA_FLAG = 0x00000001 +CMSG_OID_EXPORT_KEY_TRANS_FUNC = "CryptMsgDllExportKeyTrans" +CMSG_KEY_AGREE_ENCRYPT_FREE_PARA_FLAG = 0x00000001 +CMSG_KEY_AGREE_ENCRYPT_FREE_MATERIAL_FLAG = 0x00000002 +CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_ALG_FLAG = 0x00000004 +CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_PARA_FLAG = 0x00000008 +CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_BITS_FLAG = 0x00000010 +CMSG_OID_EXPORT_KEY_AGREE_FUNC = "CryptMsgDllExportKeyAgree" +CMSG_MAIL_LIST_ENCRYPT_FREE_PARA_FLAG = 0x00000001 +CMSG_OID_EXPORT_MAIL_LIST_FUNC = "CryptMsgDllExportMailList" +CMSG_OID_IMPORT_KEY_TRANS_FUNC = "CryptMsgDllImportKeyTrans" +CMSG_OID_IMPORT_KEY_AGREE_FUNC = "CryptMsgDllImportKeyAgree" +CMSG_OID_IMPORT_MAIL_LIST_FUNC = "CryptMsgDllImportMailList" +CERT_KEY_PROV_HANDLE_PROP_ID = 1 +CERT_KEY_PROV_INFO_PROP_ID = 2 +CERT_SHA1_HASH_PROP_ID = 3 +CERT_MD5_HASH_PROP_ID = 4 +CERT_HASH_PROP_ID = CERT_SHA1_HASH_PROP_ID +CERT_KEY_CONTEXT_PROP_ID = 5 +CERT_KEY_SPEC_PROP_ID = 6 +CERT_IE30_RESERVED_PROP_ID = 7 +CERT_PUBKEY_HASH_RESERVED_PROP_ID = 8 +CERT_ENHKEY_USAGE_PROP_ID = 9 +CERT_CTL_USAGE_PROP_ID = CERT_ENHKEY_USAGE_PROP_ID +CERT_NEXT_UPDATE_LOCATION_PROP_ID = 10 +CERT_FRIENDLY_NAME_PROP_ID = 11 +CERT_PVK_FILE_PROP_ID = 12 +CERT_DESCRIPTION_PROP_ID = 13 +CERT_ACCESS_STATE_PROP_ID = 14 +CERT_SIGNATURE_HASH_PROP_ID = 15 +CERT_SMART_CARD_DATA_PROP_ID = 16 +CERT_EFS_PROP_ID = 17 +CERT_FORTEZZA_DATA_PROP_ID = 18 +CERT_ARCHIVED_PROP_ID = 19 +CERT_KEY_IDENTIFIER_PROP_ID = 20 +CERT_AUTO_ENROLL_PROP_ID = 21 +CERT_PUBKEY_ALG_PARA_PROP_ID = 22 +CERT_CROSS_CERT_DIST_POINTS_PROP_ID = 23 +CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID = 24 +CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID = 25 +CERT_ENROLLMENT_PROP_ID = 26 +CERT_DATE_STAMP_PROP_ID = 27 +CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID = 28 +CERT_SUBJECT_NAME_MD5_HASH_PROP_ID = 29 +CERT_EXTENDED_ERROR_INFO_PROP_ID = 30 +CERT_RENEWAL_PROP_ID = 64 +CERT_ARCHIVED_KEY_HASH_PROP_ID = 65 +CERT_AUTO_ENROLL_RETRY_PROP_ID = 66 +CERT_AIA_URL_RETRIEVED_PROP_ID = 67 +CERT_FIRST_RESERVED_PROP_ID = 68 +CERT_LAST_RESERVED_PROP_ID = 0x00007FFF +CERT_FIRST_USER_PROP_ID = 0x00008000 +CERT_LAST_USER_PROP_ID = 0x0000FFFF +szOID_CERT_PROP_ID_PREFIX = "1.3.6.1.4.1.311.10.11." +szOID_CERT_KEY_IDENTIFIER_PROP_ID = "1.3.6.1.4.1.311.10.11.20" +szOID_CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID = \ + "1.3.6.1.4.1.311.10.11.28" +szOID_CERT_SUBJECT_NAME_MD5_HASH_PROP_ID = \ + "1.3.6.1.4.1.311.10.11.29" +CERT_ACCESS_STATE_WRITE_PERSIST_FLAG = 0x1 +CERT_ACCESS_STATE_SYSTEM_STORE_FLAG = 0x2 +CERT_ACCESS_STATE_LM_SYSTEM_STORE_FLAG = 0x4 +CERT_SET_KEY_PROV_HANDLE_PROP_ID = 0x00000001 +CERT_SET_KEY_CONTEXT_PROP_ID = 0x00000001 +sz_CERT_STORE_PROV_MEMORY = "Memory" +sz_CERT_STORE_PROV_FILENAME_W = "File" +sz_CERT_STORE_PROV_FILENAME = sz_CERT_STORE_PROV_FILENAME_W +sz_CERT_STORE_PROV_SYSTEM_W = "System" +sz_CERT_STORE_PROV_SYSTEM = sz_CERT_STORE_PROV_SYSTEM_W +sz_CERT_STORE_PROV_PKCS7 = "PKCS7" +sz_CERT_STORE_PROV_SERIALIZED = "Serialized" +sz_CERT_STORE_PROV_COLLECTION = "Collection" +sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W = "SystemRegistry" +sz_CERT_STORE_PROV_SYSTEM_REGISTRY = sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W +sz_CERT_STORE_PROV_PHYSICAL_W = "Physical" +sz_CERT_STORE_PROV_PHYSICAL = sz_CERT_STORE_PROV_PHYSICAL_W +sz_CERT_STORE_PROV_SMART_CARD_W = "SmartCard" +sz_CERT_STORE_PROV_SMART_CARD = sz_CERT_STORE_PROV_SMART_CARD_W +sz_CERT_STORE_PROV_LDAP_W = "Ldap" +sz_CERT_STORE_PROV_LDAP = sz_CERT_STORE_PROV_LDAP_W +CERT_STORE_SIGNATURE_FLAG = 0x00000001 +CERT_STORE_TIME_VALIDITY_FLAG = 0x00000002 +CERT_STORE_REVOCATION_FLAG = 0x00000004 +CERT_STORE_NO_CRL_FLAG = 0x00010000 +CERT_STORE_NO_ISSUER_FLAG = 0x00020000 +CERT_STORE_BASE_CRL_FLAG = 0x00000100 +CERT_STORE_DELTA_CRL_FLAG = 0x00000200 +CERT_STORE_NO_CRYPT_RELEASE_FLAG = 0x00000001 +CERT_STORE_SET_LOCALIZED_NAME_FLAG = 0x00000002 +CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004 +CERT_STORE_DELETE_FLAG = 0x00000010 +CERT_STORE_UNSAFE_PHYSICAL_FLAG = 0x00000020 +CERT_STORE_SHARE_STORE_FLAG = 0x00000040 +CERT_STORE_SHARE_CONTEXT_FLAG = 0x00000080 +CERT_STORE_MANIFOLD_FLAG = 0x00000100 +CERT_STORE_ENUM_ARCHIVED_FLAG = 0x00000200 +CERT_STORE_UPDATE_KEYID_FLAG = 0x00000400 +CERT_STORE_BACKUP_RESTORE_FLAG = 0x00000800 +CERT_STORE_READONLY_FLAG = 0x00008000 +CERT_STORE_OPEN_EXISTING_FLAG = 0x00004000 +CERT_STORE_CREATE_NEW_FLAG = 0x00002000 +CERT_STORE_MAXIMUM_ALLOWED_FLAG = 0x00001000 +CERT_SYSTEM_STORE_MASK = (-65536) +CERT_SYSTEM_STORE_RELOCATE_FLAG = (-2147483648) +CERT_SYSTEM_STORE_UNPROTECTED_FLAG = 0x40000000 +CERT_SYSTEM_STORE_LOCATION_MASK = 0x00FF0000 +CERT_SYSTEM_STORE_LOCATION_SHIFT = 16 +CERT_SYSTEM_STORE_CURRENT_USER_ID = 1 +CERT_SYSTEM_STORE_LOCAL_MACHINE_ID = 2 +CERT_SYSTEM_STORE_CURRENT_SERVICE_ID = 4 +CERT_SYSTEM_STORE_SERVICES_ID = 5 +CERT_SYSTEM_STORE_USERS_ID = 6 +CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID = 7 +CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID = 8 +CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID = 9 +CERT_SYSTEM_STORE_CURRENT_USER = \ + (CERT_SYSTEM_STORE_CURRENT_USER_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) +CERT_SYSTEM_STORE_LOCAL_MACHINE = \ + (CERT_SYSTEM_STORE_LOCAL_MACHINE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) +CERT_SYSTEM_STORE_CURRENT_SERVICE = \ + (CERT_SYSTEM_STORE_CURRENT_SERVICE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) +CERT_SYSTEM_STORE_SERVICES = \ + (CERT_SYSTEM_STORE_SERVICES_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) +CERT_SYSTEM_STORE_USERS = \ + (CERT_SYSTEM_STORE_USERS_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) +CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY = \ + (CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID << \ + CERT_SYSTEM_STORE_LOCATION_SHIFT) +CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = \ + (CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID << \ + CERT_SYSTEM_STORE_LOCATION_SHIFT) +CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = \ + (CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID << \ + CERT_SYSTEM_STORE_LOCATION_SHIFT) +CERT_PROT_ROOT_DISABLE_CURRENT_USER_FLAG = 0x1 +CERT_PROT_ROOT_INHIBIT_ADD_AT_INIT_FLAG = 0x2 +CERT_PROT_ROOT_INHIBIT_PURGE_LM_FLAG = 0x4 +CERT_PROT_ROOT_DISABLE_LM_AUTH_FLAG = 0x8 +CERT_PROT_ROOT_ONLY_LM_GPT_FLAG = 0x8 +CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG = 0x10 +CERT_PROT_ROOT_DISABLE_NOT_DEFINED_NAME_CONSTRAINT_FLAG = 0x20 +CERT_TRUST_PUB_ALLOW_TRUST_MASK = 0x00000003 +CERT_TRUST_PUB_ALLOW_END_USER_TRUST = 0x00000000 +CERT_TRUST_PUB_ALLOW_MACHINE_ADMIN_TRUST = 0x00000001 +CERT_TRUST_PUB_ALLOW_ENTERPRISE_ADMIN_TRUST = 0x00000002 +CERT_TRUST_PUB_CHECK_PUBLISHER_REV_FLAG = 0x00000100 +CERT_TRUST_PUB_CHECK_TIMESTAMP_REV_FLAG = 0x00000200 +CERT_AUTH_ROOT_AUTO_UPDATE_DISABLE_UNTRUSTED_ROOT_LOGGING_FLAG = 0x1 +CERT_AUTH_ROOT_AUTO_UPDATE_DISABLE_PARTIAL_CHAIN_LOGGING_FLAG = 0x2 +CERT_AUTH_ROOT_CTL_FILENAME_A = "authroot.stl" +CERT_REGISTRY_STORE_REMOTE_FLAG = 0x10000 +CERT_REGISTRY_STORE_SERIALIZED_FLAG = 0x20000 +CERT_REGISTRY_STORE_CLIENT_GPT_FLAG = (-2147483648) +CERT_REGISTRY_STORE_LM_GPT_FLAG = 0x01000000 +CERT_REGISTRY_STORE_ROAMING_FLAG = 0x40000 +CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG = 0x80000 +CERT_FILE_STORE_COMMIT_ENABLE_FLAG = 0x10000 +CERT_LDAP_STORE_SIGN_FLAG = 0x10000 +CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG = 0x20000 +CERT_LDAP_STORE_OPENED_FLAG = 0x40000 +CERT_LDAP_STORE_UNBIND_FLAG = 0x80000 +CRYPT_OID_OPEN_STORE_PROV_FUNC = "CertDllOpenStoreProv" +CERT_STORE_PROV_EXTERNAL_FLAG = 0x1 +CERT_STORE_PROV_DELETED_FLAG = 0x2 +CERT_STORE_PROV_NO_PERSIST_FLAG = 0x4 +CERT_STORE_PROV_SYSTEM_STORE_FLAG = 0x8 +CERT_STORE_PROV_LM_SYSTEM_STORE_FLAG = 0x10 +CERT_STORE_PROV_CLOSE_FUNC = 0 +CERT_STORE_PROV_READ_CERT_FUNC = 1 +CERT_STORE_PROV_WRITE_CERT_FUNC = 2 +CERT_STORE_PROV_DELETE_CERT_FUNC = 3 +CERT_STORE_PROV_SET_CERT_PROPERTY_FUNC = 4 +CERT_STORE_PROV_READ_CRL_FUNC = 5 +CERT_STORE_PROV_WRITE_CRL_FUNC = 6 +CERT_STORE_PROV_DELETE_CRL_FUNC = 7 +CERT_STORE_PROV_SET_CRL_PROPERTY_FUNC = 8 +CERT_STORE_PROV_READ_CTL_FUNC = 9 +CERT_STORE_PROV_WRITE_CTL_FUNC = 10 +CERT_STORE_PROV_DELETE_CTL_FUNC = 11 +CERT_STORE_PROV_SET_CTL_PROPERTY_FUNC = 12 +CERT_STORE_PROV_CONTROL_FUNC = 13 +CERT_STORE_PROV_FIND_CERT_FUNC = 14 +CERT_STORE_PROV_FREE_FIND_CERT_FUNC = 15 +CERT_STORE_PROV_GET_CERT_PROPERTY_FUNC = 16 +CERT_STORE_PROV_FIND_CRL_FUNC = 17 +CERT_STORE_PROV_FREE_FIND_CRL_FUNC = 18 +CERT_STORE_PROV_GET_CRL_PROPERTY_FUNC = 19 +CERT_STORE_PROV_FIND_CTL_FUNC = 20 +CERT_STORE_PROV_FREE_FIND_CTL_FUNC = 21 +CERT_STORE_PROV_GET_CTL_PROPERTY_FUNC = 22 +CERT_STORE_PROV_WRITE_ADD_FLAG = 0x1 +CERT_STORE_SAVE_AS_STORE = 1 +CERT_STORE_SAVE_AS_PKCS7 = 2 +CERT_STORE_SAVE_TO_FILE = 1 +CERT_STORE_SAVE_TO_MEMORY = 2 +CERT_STORE_SAVE_TO_FILENAME_A = 3 +CERT_STORE_SAVE_TO_FILENAME_W = 4 +CERT_STORE_SAVE_TO_FILENAME = CERT_STORE_SAVE_TO_FILENAME_W +CERT_CLOSE_STORE_FORCE_FLAG = 0x00000001 +CERT_CLOSE_STORE_CHECK_FLAG = 0x00000002 +CERT_COMPARE_MASK = 0xFFFF +CERT_COMPARE_SHIFT = 16 +CERT_COMPARE_ANY = 0 +CERT_COMPARE_SHA1_HASH = 1 +CERT_COMPARE_NAME = 2 +CERT_COMPARE_ATTR = 3 +CERT_COMPARE_MD5_HASH = 4 +CERT_COMPARE_PROPERTY = 5 +CERT_COMPARE_PUBLIC_KEY = 6 +CERT_COMPARE_HASH = CERT_COMPARE_SHA1_HASH +CERT_COMPARE_NAME_STR_A = 7 +CERT_COMPARE_NAME_STR_W = 8 +CERT_COMPARE_KEY_SPEC = 9 +CERT_COMPARE_ENHKEY_USAGE = 10 +CERT_COMPARE_CTL_USAGE = CERT_COMPARE_ENHKEY_USAGE +CERT_COMPARE_SUBJECT_CERT = 11 +CERT_COMPARE_ISSUER_OF = 12 +CERT_COMPARE_EXISTING = 13 +CERT_COMPARE_SIGNATURE_HASH = 14 +CERT_COMPARE_KEY_IDENTIFIER = 15 +CERT_COMPARE_CERT_ID = 16 +CERT_COMPARE_CROSS_CERT_DIST_POINTS = 17 +CERT_COMPARE_PUBKEY_MD5_HASH = 18 +CERT_FIND_ANY = (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT) +CERT_FIND_SHA1_HASH = (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT) +CERT_FIND_MD5_HASH = (CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT) +CERT_FIND_SIGNATURE_HASH = (CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT) +CERT_FIND_KEY_IDENTIFIER = (CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT) +CERT_FIND_HASH = CERT_FIND_SHA1_HASH +CERT_FIND_PROPERTY = (CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT) +CERT_FIND_PUBLIC_KEY = (CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT) +CERT_FIND_SUBJECT_NAME = (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | \ + CERT_INFO_SUBJECT_FLAG) +CERT_FIND_SUBJECT_ATTR = (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | \ + CERT_INFO_SUBJECT_FLAG) +CERT_FIND_ISSUER_NAME = (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | \ + CERT_INFO_ISSUER_FLAG) +CERT_FIND_ISSUER_ATTR = (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | \ + CERT_INFO_ISSUER_FLAG) +CERT_FIND_SUBJECT_STR_A = (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | \ + CERT_INFO_SUBJECT_FLAG) +CERT_FIND_SUBJECT_STR_W = (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | \ + CERT_INFO_SUBJECT_FLAG) +CERT_FIND_SUBJECT_STR = CERT_FIND_SUBJECT_STR_W +CERT_FIND_ISSUER_STR_A = (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | \ + CERT_INFO_ISSUER_FLAG) +CERT_FIND_ISSUER_STR_W = (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | \ + CERT_INFO_ISSUER_FLAG) +CERT_FIND_ISSUER_STR = CERT_FIND_ISSUER_STR_W +CERT_FIND_KEY_SPEC = (CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT) +CERT_FIND_ENHKEY_USAGE = (CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT) +CERT_FIND_CTL_USAGE = CERT_FIND_ENHKEY_USAGE +CERT_FIND_SUBJECT_CERT = (CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT) +CERT_FIND_ISSUER_OF = (CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT) +CERT_FIND_EXISTING = (CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT) +CERT_FIND_CERT_ID = (CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT) +CERT_FIND_CROSS_CERT_DIST_POINTS = \ + (CERT_COMPARE_CROSS_CERT_DIST_POINTS << CERT_COMPARE_SHIFT) +CERT_FIND_PUBKEY_MD5_HASH = \ + (CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT) +CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG = 0x1 +CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG = 0x2 +CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG = 0x4 +CERT_FIND_NO_ENHKEY_USAGE_FLAG = 0x8 +CERT_FIND_OR_ENHKEY_USAGE_FLAG = 0x10 +CERT_FIND_VALID_ENHKEY_USAGE_FLAG = 0x20 +CERT_FIND_OPTIONAL_CTL_USAGE_FLAG = CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG +CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG = \ + CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG +CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG = \ + CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG +CERT_FIND_NO_CTL_USAGE_FLAG = CERT_FIND_NO_ENHKEY_USAGE_FLAG +CERT_FIND_OR_CTL_USAGE_FLAG = CERT_FIND_OR_ENHKEY_USAGE_FLAG +CERT_FIND_VALID_CTL_USAGE_FLAG = CERT_FIND_VALID_ENHKEY_USAGE_FLAG +CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG = (-2147483648) +CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG = 0x40000000 +CTL_ENTRY_FROM_PROP_CHAIN_FLAG = 0x1 +CRL_FIND_ANY = 0 +CRL_FIND_ISSUED_BY = 1 +CRL_FIND_EXISTING = 2 +CRL_FIND_ISSUED_FOR = 3 +CRL_FIND_ISSUED_BY_AKI_FLAG = 0x1 +CRL_FIND_ISSUED_BY_SIGNATURE_FLAG = 0x2 +CRL_FIND_ISSUED_BY_DELTA_FLAG = 0x4 +CRL_FIND_ISSUED_BY_BASE_FLAG = 0x8 +CERT_STORE_ADD_NEW = 1 +CERT_STORE_ADD_USE_EXISTING = 2 +CERT_STORE_ADD_REPLACE_EXISTING = 3 +CERT_STORE_ADD_ALWAYS = 4 +CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES = 5 +CERT_STORE_ADD_NEWER = 6 +CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES = 7 +CERT_STORE_CERTIFICATE_CONTEXT = 1 +CERT_STORE_CRL_CONTEXT = 2 +CERT_STORE_CTL_CONTEXT = 3 +CERT_STORE_CERTIFICATE_CONTEXT_FLAG = \ + (1 << CERT_STORE_CERTIFICATE_CONTEXT) +CERT_STORE_CRL_CONTEXT_FLAG = \ + (1 << CERT_STORE_CRL_CONTEXT) +CERT_STORE_CTL_CONTEXT_FLAG = \ + (1 << CERT_STORE_CTL_CONTEXT) +CTL_ANY_SUBJECT_TYPE = 1 +CTL_CERT_SUBJECT_TYPE = 2 +CTL_FIND_ANY = 0 +CTL_FIND_SHA1_HASH = 1 +CTL_FIND_MD5_HASH = 2 +CTL_FIND_USAGE = 3 +CTL_FIND_SUBJECT = 4 +CTL_FIND_EXISTING = 5 +CTL_FIND_NO_LIST_ID_CBDATA = (-1) +CTL_FIND_SAME_USAGE_FLAG = 0x1 +CERT_STORE_CTRL_RESYNC = 1 +CERT_STORE_CTRL_NOTIFY_CHANGE = 2 +CERT_STORE_CTRL_COMMIT = 3 +CERT_STORE_CTRL_AUTO_RESYNC = 4 +CERT_STORE_CTRL_CANCEL_NOTIFY = 5 +CERT_STORE_CTRL_INHIBIT_DUPLICATE_HANDLE_FLAG = 0x1 +CERT_STORE_CTRL_COMMIT_FORCE_FLAG = 0x1 +CERT_STORE_CTRL_COMMIT_CLEAR_FLAG = 0x2 +CERT_STORE_LOCALIZED_NAME_PROP_ID = 0x1000 +CERT_CREATE_CONTEXT_NOCOPY_FLAG = 0x1 +CERT_CREATE_CONTEXT_SORTED_FLAG = 0x2 +CERT_CREATE_CONTEXT_NO_HCRYPTMSG_FLAG = 0x4 +CERT_CREATE_CONTEXT_NO_ENTRY_FLAG = 0x8 +CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG = 0x1 +CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG = 0x2 +CERT_PHYSICAL_STORE_REMOTE_OPEN_DISABLE_FLAG = 0x4 +CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG = 0x8 +CERT_PHYSICAL_STORE_PREDEFINED_ENUM_FLAG = 0x1 +CRYPT_OID_OPEN_SYSTEM_STORE_PROV_FUNC = "CertDllOpenSystemStoreProv" +CRYPT_OID_REGISTER_SYSTEM_STORE_FUNC = "CertDllRegisterSystemStore" +CRYPT_OID_UNREGISTER_SYSTEM_STORE_FUNC = "CertDllUnregisterSystemStore" +CRYPT_OID_ENUM_SYSTEM_STORE_FUNC = "CertDllEnumSystemStore" +CRYPT_OID_REGISTER_PHYSICAL_STORE_FUNC = "CertDllRegisterPhysicalStore" +CRYPT_OID_UNREGISTER_PHYSICAL_STORE_FUNC = "CertDllUnregisterPhysicalStore" +CRYPT_OID_ENUM_PHYSICAL_STORE_FUNC = "CertDllEnumPhysicalStore" +CMSG_TRUSTED_SIGNER_FLAG = 0x1 +CMSG_SIGNER_ONLY_FLAG = 0x2 +CMSG_USE_SIGNER_INDEX_FLAG = 0x4 +CMSG_CMS_ENCAPSULATED_CTL_FLAG = 0x00008000 +CMSG_ENCODE_SORTED_CTL_FLAG = 0x1 +CMSG_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG = 0x2 +CERT_VERIFY_INHIBIT_CTL_UPDATE_FLAG = 0x1 +CERT_VERIFY_TRUSTED_SIGNERS_FLAG = 0x2 +CERT_VERIFY_NO_TIME_CHECK_FLAG = 0x4 +CERT_VERIFY_ALLOW_MORE_USAGE_FLAG = 0x8 +CERT_VERIFY_UPDATED_CTL_FLAG = 0x1 +CERT_CONTEXT_REVOCATION_TYPE = 1 +CERT_VERIFY_REV_CHAIN_FLAG = 0x00000001 +CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION = 0x00000002 +CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG = 0x00000004 +CERT_UNICODE_IS_RDN_ATTRS_FLAG = 0x1 +CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG = 0x2 +CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB = 1 +CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT = 2 +CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL = 3 +CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY = 1 +CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT = 2 +CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN = 3 +CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL = 4 +CRYPT_DEFAULT_CONTEXT_AUTO_RELEASE_FLAG = 0x00000001 +CRYPT_DEFAULT_CONTEXT_PROCESS_FLAG = 0x00000002 +CRYPT_DEFAULT_CONTEXT_CERT_SIGN_OID = 1 +CRYPT_DEFAULT_CONTEXT_MULTI_CERT_SIGN_OID = 2 +CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC = "CryptDllExportPublicKeyInfoEx" +CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_FUNC = "CryptDllImportPublicKeyInfoEx" +CRYPT_ACQUIRE_CACHE_FLAG = 0x00000001 +CRYPT_ACQUIRE_USE_PROV_INFO_FLAG = 0x00000002 +CRYPT_ACQUIRE_COMPARE_KEY_FLAG = 0x00000004 +CRYPT_ACQUIRE_SILENT_FLAG = 0x00000040 +CRYPT_FIND_USER_KEYSET_FLAG = 0x00000001 +CRYPT_FIND_MACHINE_KEYSET_FLAG = 0x00000002 +CRYPT_FIND_SILENT_KEYSET_FLAG = 0x00000040 +CRYPT_OID_IMPORT_PRIVATE_KEY_INFO_FUNC = "CryptDllImportPrivateKeyInfoEx" +CRYPT_OID_EXPORT_PRIVATE_KEY_INFO_FUNC = "CryptDllExportPrivateKeyInfoEx" +CRYPT_DELETE_KEYSET = 0x0001 +CERT_SIMPLE_NAME_STR = 1 +CERT_OID_NAME_STR = 2 +CERT_X500_NAME_STR = 3 +CERT_NAME_STR_SEMICOLON_FLAG = 0x40000000 +CERT_NAME_STR_NO_PLUS_FLAG = 0x20000000 +CERT_NAME_STR_NO_QUOTING_FLAG = 0x10000000 +CERT_NAME_STR_CRLF_FLAG = 0x08000000 +CERT_NAME_STR_COMMA_FLAG = 0x04000000 +CERT_NAME_STR_REVERSE_FLAG = 0x02000000 +CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG = 0x00010000 +CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG = 0x00020000 +CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG = 0x00040000 +CERT_NAME_EMAIL_TYPE = 1 +CERT_NAME_RDN_TYPE = 2 +CERT_NAME_ATTR_TYPE = 3 +CERT_NAME_SIMPLE_DISPLAY_TYPE = 4 +CERT_NAME_FRIENDLY_DISPLAY_TYPE = 5 +CERT_NAME_DNS_TYPE = 6 +CERT_NAME_URL_TYPE = 7 +CERT_NAME_UPN_TYPE = 8 +CERT_NAME_ISSUER_FLAG = 0x1 +CERT_NAME_DISABLE_IE4_UTF8_FLAG = 0x00010000 +CRYPT_MESSAGE_BARE_CONTENT_OUT_FLAG = 0x00000001 +CRYPT_MESSAGE_ENCAPSULATED_CONTENT_OUT_FLAG = 0x00000002 +CRYPT_MESSAGE_KEYID_SIGNER_FLAG = 0x00000004 +CRYPT_MESSAGE_SILENT_KEYSET_FLAG = 0x00000040 +CRYPT_MESSAGE_KEYID_RECIPIENT_FLAG = 0x4 +CERT_QUERY_OBJECT_FILE = 0x00000001 +CERT_QUERY_OBJECT_BLOB = 0x00000002 +CERT_QUERY_CONTENT_CERT = 1 +CERT_QUERY_CONTENT_CTL = 2 +CERT_QUERY_CONTENT_CRL = 3 +CERT_QUERY_CONTENT_SERIALIZED_STORE = 4 +CERT_QUERY_CONTENT_SERIALIZED_CERT = 5 +CERT_QUERY_CONTENT_SERIALIZED_CTL = 6 +CERT_QUERY_CONTENT_SERIALIZED_CRL = 7 +CERT_QUERY_CONTENT_PKCS7_SIGNED = 8 +CERT_QUERY_CONTENT_PKCS7_UNSIGNED = 9 +CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED = 10 +CERT_QUERY_CONTENT_PKCS10 = 11 +CERT_QUERY_CONTENT_PFX = 12 +CERT_QUERY_CONTENT_CERT_PAIR = 13 +CERT_QUERY_CONTENT_FLAG_CERT = \ + ( 1 << CERT_QUERY_CONTENT_CERT) +CERT_QUERY_CONTENT_FLAG_CTL = \ + ( 1 << CERT_QUERY_CONTENT_CTL) +CERT_QUERY_CONTENT_FLAG_CRL = \ + ( 1 << CERT_QUERY_CONTENT_CRL) +CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE = \ + ( 1 << CERT_QUERY_CONTENT_SERIALIZED_STORE) +CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT = \ + ( 1 << CERT_QUERY_CONTENT_SERIALIZED_CERT) +CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL = \ + ( 1 << CERT_QUERY_CONTENT_SERIALIZED_CTL) +CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL = \ + ( 1 << CERT_QUERY_CONTENT_SERIALIZED_CRL) +CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED = \ + ( 1 << CERT_QUERY_CONTENT_PKCS7_SIGNED) +CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED = \ + ( 1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED) +CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED = \ + ( 1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED) +CERT_QUERY_CONTENT_FLAG_PKCS10 = \ + ( 1 << CERT_QUERY_CONTENT_PKCS10) +CERT_QUERY_CONTENT_FLAG_PFX = \ + ( 1 << CERT_QUERY_CONTENT_PFX) +CERT_QUERY_CONTENT_FLAG_CERT_PAIR = \ + ( 1 << CERT_QUERY_CONTENT_CERT_PAIR) +CERT_QUERY_CONTENT_FLAG_ALL = \ + CERT_QUERY_CONTENT_FLAG_CERT | \ + CERT_QUERY_CONTENT_FLAG_CTL | \ + CERT_QUERY_CONTENT_FLAG_CRL | \ + CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | \ + CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | \ + CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | \ + CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | \ + CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | \ + CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | \ + CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | \ + CERT_QUERY_CONTENT_FLAG_PKCS10 | \ + CERT_QUERY_CONTENT_FLAG_PFX | \ + CERT_QUERY_CONTENT_FLAG_CERT_PAIR +CERT_QUERY_FORMAT_BINARY = 1 +CERT_QUERY_FORMAT_BASE64_ENCODED = 2 +CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED = 3 +CERT_QUERY_FORMAT_FLAG_BINARY = \ + ( 1 << CERT_QUERY_FORMAT_BINARY) +CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED = \ + ( 1 << CERT_QUERY_FORMAT_BASE64_ENCODED) +CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED = \ + ( 1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED) +CERT_QUERY_FORMAT_FLAG_ALL = \ + CERT_QUERY_FORMAT_FLAG_BINARY | \ + CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | \ + CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED +SCHEME_OID_RETRIEVE_ENCODED_OBJECT_FUNC = "SchemeDllRetrieveEncodedObject" +SCHEME_OID_RETRIEVE_ENCODED_OBJECTW_FUNC = "SchemeDllRetrieveEncodedObjectW" +CONTEXT_OID_CREATE_OBJECT_CONTEXT_FUNC = "ContextDllCreateObjectContext" +CRYPT_RETRIEVE_MULTIPLE_OBJECTS = 0x00000001 +CRYPT_CACHE_ONLY_RETRIEVAL = 0x00000002 +CRYPT_WIRE_ONLY_RETRIEVAL = 0x00000004 +CRYPT_DONT_CACHE_RESULT = 0x00000008 +CRYPT_ASYNC_RETRIEVAL = 0x00000010 +CRYPT_STICKY_CACHE_RETRIEVAL = 0x00001000 +CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL = 0x00002000 +CRYPT_OFFLINE_CHECK_RETRIEVAL = 0x00004000 +CRYPT_LDAP_INSERT_ENTRY_ATTRIBUTE = 0x00008000 +CRYPT_LDAP_SIGN_RETRIEVAL = 0x00010000 +CRYPT_NO_AUTH_RETRIEVAL = 0x00020000 +CRYPT_LDAP_AREC_EXCLUSIVE_RETRIEVAL = 0x00040000 +CRYPT_AIA_RETRIEVAL = 0x00080000 +CRYPT_VERIFY_CONTEXT_SIGNATURE = 0x00000020 +CRYPT_VERIFY_DATA_HASH = 0x00000040 +CRYPT_KEEP_TIME_VALID = 0x00000080 +CRYPT_DONT_VERIFY_SIGNATURE = 0x00000100 +CRYPT_DONT_CHECK_TIME_VALIDITY = 0x00000200 +CRYPT_CHECK_FRESHNESS_TIME_VALIDITY = 0x00000400 +CRYPT_ACCUMULATIVE_TIMEOUT = 0x00000800 +CRYPT_GET_URL_FROM_PROPERTY = 0x00000001 +CRYPT_GET_URL_FROM_EXTENSION = 0x00000002 +CRYPT_GET_URL_FROM_UNAUTH_ATTRIBUTE = 0x00000004 +CRYPT_GET_URL_FROM_AUTH_ATTRIBUTE = 0x00000008 +URL_OID_GET_OBJECT_URL_FUNC = "UrlDllGetObjectUrl" +TIME_VALID_OID_GET_OBJECT_FUNC = "TimeValidDllGetObject" +TIME_VALID_OID_FLUSH_OBJECT_FUNC = "TimeValidDllFlushObject" +CRYPTPROTECT_PROMPT_ON_UNPROTECT = 0x1 +CRYPTPROTECT_PROMPT_ON_PROTECT = 0x2 +CRYPTPROTECT_PROMPT_RESERVED = 0x04 +CRYPTPROTECT_PROMPT_STRONG = 0x08 +CRYPTPROTECT_PROMPT_REQUIRE_STRONG = 0x10 +CRYPTPROTECT_UI_FORBIDDEN = 0x1 +CRYPTPROTECT_LOCAL_MACHINE = 0x4 +CRYPTPROTECT_CRED_SYNC = 0x8 +CRYPTPROTECT_AUDIT = 0x10 +CRYPTPROTECT_NO_RECOVERY = 0x20 +CRYPTPROTECT_VERIFY_PROTECTION = 0x40 +CRYPTPROTECT_CRED_REGENERATE = 0x80 +CRYPTPROTECT_FIRST_RESERVED_FLAGVAL = 0x0FFFFFFF +CRYPTPROTECT_LAST_RESERVED_FLAGVAL = (-1) +CRYPTPROTECTMEMORY_BLOCK_SIZE = 16 +CRYPTPROTECTMEMORY_SAME_PROCESS = 0x00 +CRYPTPROTECTMEMORY_CROSS_PROCESS = 0x01 +CRYPTPROTECTMEMORY_SAME_LOGON = 0x02 +CERT_CREATE_SELFSIGN_NO_SIGN = 1 +CERT_CREATE_SELFSIGN_NO_KEY_INFO = 2 +CRYPT_KEYID_MACHINE_FLAG = 0x00000020 +CRYPT_KEYID_ALLOC_FLAG = 0x00008000 +CRYPT_KEYID_DELETE_FLAG = 0x00000010 +CRYPT_KEYID_SET_NEW_FLAG = 0x00002000 +CERT_CHAIN_MAX_AIA_URL_COUNT_IN_CERT_DEFAULT = 5 +CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_COUNT_PER_CHAIN_DEFAULT = 10 +CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_BYTE_COUNT_DEFAULT = 100000 +CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_CERT_COUNT_DEFAULT = 10 +CERT_CHAIN_CACHE_END_CERT = 0x00000001 +CERT_CHAIN_THREAD_STORE_SYNC = 0x00000002 +CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL = 0x00000004 +CERT_CHAIN_USE_LOCAL_MACHINE_STORE = 0x00000008 +CERT_CHAIN_ENABLE_CACHE_AUTO_UPDATE = 0x00000010 +CERT_CHAIN_ENABLE_SHARE_STORE = 0x00000020 +CERT_TRUST_NO_ERROR = 0x00000000 +CERT_TRUST_IS_NOT_TIME_VALID = 0x00000001 +CERT_TRUST_IS_NOT_TIME_NESTED = 0x00000002 +CERT_TRUST_IS_REVOKED = 0x00000004 +CERT_TRUST_IS_NOT_SIGNATURE_VALID = 0x00000008 +CERT_TRUST_IS_NOT_VALID_FOR_USAGE = 0x00000010 +CERT_TRUST_IS_UNTRUSTED_ROOT = 0x00000020 +CERT_TRUST_REVOCATION_STATUS_UNKNOWN = 0x00000040 +CERT_TRUST_IS_CYCLIC = 0x00000080 +CERT_TRUST_INVALID_EXTENSION = 0x00000100 +CERT_TRUST_INVALID_POLICY_CONSTRAINTS = 0x00000200 +CERT_TRUST_INVALID_BASIC_CONSTRAINTS = 0x00000400 +CERT_TRUST_INVALID_NAME_CONSTRAINTS = 0x00000800 +CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = 0x00001000 +CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT = 0x00002000 +CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000 +CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT = 0x00008000 +CERT_TRUST_IS_OFFLINE_REVOCATION = 0x01000000 +CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY = 0x02000000 +CERT_TRUST_IS_PARTIAL_CHAIN = 0x00010000 +CERT_TRUST_CTL_IS_NOT_TIME_VALID = 0x00020000 +CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID = 0x00040000 +CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE = 0x00080000 +CERT_TRUST_HAS_EXACT_MATCH_ISSUER = 0x00000001 +CERT_TRUST_HAS_KEY_MATCH_ISSUER = 0x00000002 +CERT_TRUST_HAS_NAME_MATCH_ISSUER = 0x00000004 +CERT_TRUST_IS_SELF_SIGNED = 0x00000008 +CERT_TRUST_HAS_PREFERRED_ISSUER = 0x00000100 +CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY = 0x00000200 +CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS = 0x00000400 +CERT_TRUST_IS_COMPLEX_CHAIN = 0x00010000 +USAGE_MATCH_TYPE_AND = 0x00000000 +USAGE_MATCH_TYPE_OR = 0x00000001 +CERT_CHAIN_REVOCATION_CHECK_END_CERT = 0x10000000 +CERT_CHAIN_REVOCATION_CHECK_CHAIN = 0x20000000 +CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT = 0x40000000 +CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY = (-2147483648) +CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT = 0x08000000 +CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING = 0x00000040 +CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS = 0x00000080 +CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE = 0x00000100 +CERT_CHAIN_TIMESTAMP_TIME = 0x00000200 +CERT_CHAIN_FIND_BY_ISSUER = 1 +CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG = 0x0001 +CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG = 0x0002 +CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG = 0x0004 +CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG = 0x0008 +CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG = 0x4000 +CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG = 0x8000 +CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG = 0x00000001 +CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG = 0x00000002 +CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG = 0x00000004 +CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG = 0x00000008 +CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS = ( \ + CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG | \ + CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG | \ + CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG \ + ) +CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG = 0x00000010 +CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG = 0x00000020 +CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG = 0x00000040 +CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG = 0x00000080 +CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG = 0x00000100 +CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG = 0x00000200 +CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG = 0x00000400 +CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG = 0x00000800 +CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS = ( \ + CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG | \ + CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG | \ + CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG | \ + CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG \ + ) +CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG = 0x00008000 +CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG = 0x00004000 +CRYPT_OID_VERIFY_CERTIFICATE_CHAIN_POLICY_FUNC = \ + "CertDllVerifyCertificateChainPolicy" +AUTHTYPE_CLIENT = 1 +AUTHTYPE_SERVER = 2 +BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_CA_FLAG = (-2147483648) +BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_END_ENTITY_FLAG = 0x40000000 +MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG = 0x00010000 +CRYPT_STRING_BASE64HEADER = 0x00000000 +CRYPT_STRING_BASE64 = 0x00000001 +CRYPT_STRING_BINARY = 0x00000002 +CRYPT_STRING_BASE64REQUESTHEADER = 0x00000003 +CRYPT_STRING_HEX = 0x00000004 +CRYPT_STRING_HEXASCII = 0x00000005 +CRYPT_STRING_BASE64_ANY = 0x00000006 +CRYPT_STRING_ANY = 0x00000007 +CRYPT_STRING_HEX_ANY = 0x00000008 +CRYPT_STRING_BASE64X509CRLHEADER = 0x00000009 +CRYPT_STRING_HEXADDR = 0x0000000a +CRYPT_STRING_HEXASCIIADDR = 0x0000000b +CRYPT_STRING_NOCR = (-2147483648) +CRYPT_USER_KEYSET = 0x00001000 +PKCS12_IMPORT_RESERVED_MASK = (-65536) +REPORT_NO_PRIVATE_KEY = 0x0001 +REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY = 0x0002 +EXPORT_PRIVATE_KEYS = 0x0004 +PKCS12_EXPORT_RESERVED_MASK = (-65536) diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/win32evtlogutil.py b/thirdparty/python25/Lib/site-packages/win32/lib/win32evtlogutil.py new file mode 100644 index 000000000..48cb820c7 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/win32evtlogutil.py @@ -0,0 +1,152 @@ +"""Event Log Utilities - helper for win32evtlog.pyd +""" + +import win32api, win32con, winerror, win32evtlog, string + +error = win32api.error # The error the evtlog module raises. + +langid = win32api.MAKELANGID(win32con.LANG_NEUTRAL, win32con.SUBLANG_NEUTRAL) + +def AddSourceToRegistry(appName, msgDLL = None, eventLogType = "Application", eventLogFlags = None): + """Add a source of messages to the event log. + + Allows Python program to register a custom source of messages in the + registry. You must also provide the DLL name that has the message table, so the + full message text appears in the event log. + + Note that the win32evtlog.pyd file has a number of string entries with just "%1" + built in, so many Python programs can simply use this DLL. Disadvantages are that + you do not get language translation, and the full text is stored in the event log, + blowing the size of the log up. + """ + + # When an application uses the RegisterEventSource or OpenEventLog + # function to get a handle of an event log, the event loggging service + # searches for the specified source name in the registry. You can add a + # new source name to the registry by opening a new registry subkey + # under the Application key and adding registry values to the new + # subkey. + + if msgDLL is None: + msgDLL = win32evtlog.__file__ + + # Create a new key for our application + hkey = win32api.RegCreateKey(win32con.HKEY_LOCAL_MACHINE, \ + "SYSTEM\\CurrentControlSet\\Services\\EventLog\\%s\\%s" % (eventLogType, appName)) + + # Add the Event-ID message-file name to the subkey. + win32api.RegSetValueEx(hkey, + "EventMessageFile", # value name \ + 0, # reserved \ + win32con.REG_EXPAND_SZ,# value type \ + msgDLL) + + # Set the supported types flags and add it to the subkey. + if eventLogFlags is None: + eventLogFlags = win32evtlog.EVENTLOG_ERROR_TYPE | win32evtlog.EVENTLOG_WARNING_TYPE | win32evtlog.EVENTLOG_INFORMATION_TYPE + win32api.RegSetValueEx(hkey, # subkey handle \ + "TypesSupported", # value name \ + 0, # reserved \ + win32con.REG_DWORD, # value type \ + eventLogFlags) + win32api.RegCloseKey(hkey) + +def RemoveSourceFromRegistry(appName, eventLogType = "Application"): + """Removes a source of messages from the event log. + """ + + # Delete our key + try: + win32api.RegDeleteKey(win32con.HKEY_LOCAL_MACHINE, \ + "SYSTEM\\CurrentControlSet\\Services\\EventLog\\%s\\%s" % (eventLogType, appName)) + except win32api.error, (hr, fn, desc): + if hr != winerror.ERROR_FILE_NOT_FOUND: + raise + + +def ReportEvent(appName, eventID, eventCategory = 0, eventType=win32evtlog.EVENTLOG_ERROR_TYPE, strings = None, data = None, sid=None): + """Report an event for a previously added event source. + """ + # Get a handle to the Application event log + hAppLog = win32evtlog.RegisterEventSource(None, appName) + + # Now report the event, which will add this event to the event log */ + win32evtlog.ReportEvent(hAppLog, # event-log handle \ + eventType, + eventCategory, + eventID, + sid, + strings, + data) + + win32evtlog.DeregisterEventSource(hAppLog); + +def FormatMessage( eventLogRecord, logType="Application" ): + """Given a tuple from ReadEventLog, and optionally where the event + record came from, load the message, and process message inserts. + + Note that this function may raise win32api.error. See also the + function SafeFormatMessage which will return None if the message can + not be processed. + """ + + # From the event log source name, we know the name of the registry + # key to look under for the name of the message DLL that contains + # the messages we need to extract with FormatMessage. So first get + # the event log source name... + keyName = "SYSTEM\\CurrentControlSet\\Services\\EventLog\\%s\\%s" % (logType, eventLogRecord.SourceName) + + # Now open this key and get the EventMessageFile value, which is + # the name of the message DLL. + handle = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, keyName) + try: + dllNames = win32api.RegQueryValueEx(handle, "EventMessageFile")[0].split(";") + # Win2k etc appear to allow multiple DLL names + data = None + for dllName in dllNames: + try: + # Expand environment variable strings in the message DLL path name, + # in case any are there. + dllName = win32api.ExpandEnvironmentStrings(dllName) + + dllHandle = win32api.LoadLibraryEx(dllName, 0, win32con.DONT_RESOLVE_DLL_REFERENCES) + try: + data = win32api.FormatMessageW(win32con.FORMAT_MESSAGE_FROM_HMODULE, + dllHandle, eventLogRecord.EventID, langid, eventLogRecord.StringInserts) + finally: + win32api.FreeLibrary(dllHandle) + except win32api.error: + pass # Not in this DLL - try the next + if data is not None: + break + finally: + win32api.RegCloseKey(handle) + return data or u'' # Don't want "None" ever being returned. + +def SafeFormatMessage( eventLogRecord, logType=None ): + """As for FormatMessage, except returns an error message if + the message can not be processed. + """ + if logType is None: logType = "Application" + try: + return FormatMessage(eventLogRecord, logType) + except win32api.error: + if eventLogRecord.StringInserts is None: + desc = "" + else: + desc = u", ".join(eventLogRecord.StringInserts) + return u"" % (winerror.HRESULT_CODE(eventLogRecord.EventID), eventLogRecord.SourceName, desc) + +def FeedEventLogRecords(feeder, machineName = None, logName = "Application", readFlags = None): + if readFlags is None: + readFlags = win32evtlog.EVENTLOG_BACKWARDS_READ|win32evtlog.EVENTLOG_SEQUENTIAL_READ + + h=win32evtlog.OpenEventLog(machineName, logName) + try: + while 1: + objects = win32evtlog.ReadEventLog(h, readFlags, 0) + if not objects: + break + map(lambda item, feeder = feeder: apply(feeder, (item,)), objects) + finally: + win32evtlog.CloseEventLog(h) diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/win32gui_struct.py b/thirdparty/python25/Lib/site-packages/win32/lib/win32gui_struct.py new file mode 100644 index 000000000..e86785e68 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/win32gui_struct.py @@ -0,0 +1,556 @@ +# This is a work in progress - see Demos/win32gui_menu.py + +# win32gui_struct.py - helpers for working with various win32gui structures. +# As win32gui is "light-weight", it does not define objects for all possible +# win32 structures - in general, "buffer" objects are passed around - it is +# the callers responsibility to pack the buffer in the correct format. +# +# This module defines some helpers for the commonly used structures. +# +# In general, each structure has 3 functions: +# +# buffer, extras = PackSTRUCTURE(items, ...) +# item, ... = UnpackSTRUCTURE(buffer) +# buffer, extras = EmtpySTRUCTURE(...) +# +# 'extras' is always items that must be held along with the buffer, as the +# buffer refers to these object's memory. +# For structures that support a 'mask', this mask is hidden from the user - if +# 'None' is passed, the mask flag will not be set, or on return, None will +# be returned for the value if the mask is not set. +# +# NOTE: I considered making these structures look like real classes, and +# support 'attributes' etc - however, ctypes already has a good structure +# mechanism - I think it makes more sense to support ctype structures +# at the win32gui level, then there will be no need for this module at all. + +import win32gui +import win32con +import struct +import array +import commctrl + +# Generic WM_NOTIFY unpacking +def UnpackWMNOTIFY(lparam): + format = "iii" + buf = win32gui.PyMakeBuffer(struct.calcsize(format), lparam) + hwndFrom, idFrom, code = struct.unpack(format, buf) + return hwndFrom, idFrom, code + +# MENUITEMINFO struct +# http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Resources/Menus/MenuReference/MenuStructures/MENUITEMINFO.asp +# We use the struct module to pack and unpack strings as MENUITEMINFO +# structures. We also have special handling for the 'fMask' item in that +# structure to avoid the caller needing to explicitly check validity +# (None is used if the mask excludes/should exclude the value) +menuitem_fmt = '9iP2i' + +def PackMENUITEMINFO(fType=None, fState=None, wID=None, hSubMenu=None, + hbmpChecked=None, hbmpUnchecked=None, dwItemData=None, + text=None, hbmpItem=None, dwTypeData=None): + # 'extras' are objects the caller must keep a reference to (as their + # memory is used) for the lifetime of the INFO item. + extras = [] + # ack - dwItemData and dwTypeData were confused for a while... + assert dwItemData is None or dwTypeData is None, \ + "sorry - these were confused - you probably want dwItemData" + # if we are a long way past 209, then we can nuke the above... + if dwTypeData is not None: + import warnings + warnings.warn("PackMENUITEMINFO: please use dwItemData instead of dwTypeData") + if dwItemData is None: + dwItemData = dwTypeData or 0 + + fMask = 0 + if fType is None: fType = 0 + else: fMask |= win32con.MIIM_FTYPE + if fState is None: fState = 0 + else: fMask |= win32con.MIIM_STATE + if wID is None: wID = 0 + else: fMask |= win32con.MIIM_ID + if hSubMenu is None: hSubMenu = 0 + else: fMask |= win32con.MIIM_SUBMENU + if hbmpChecked is None: + assert hbmpUnchecked is None, \ + "neither or both checkmark bmps must be given" + hbmpChecked = hbmpUnchecked = 0 + else: + assert hbmpUnchecked is not None, \ + "neither or both checkmark bmps must be given" + fMask |= win32con.MIIM_CHECKMARKS + if dwItemData is None: dwItemData = 0 + else: fMask |= win32con.MIIM_DATA + if hbmpItem is None: hbmpItem = 0 + else: fMask |= win32con.MIIM_BITMAP + if text is not None: + fMask |= win32con.MIIM_STRING + if isinstance(text, unicode): + text = text.encode("mbcs") + str_buf = array.array("c", text+'\0') + cch = len(str_buf) + # We are taking address of strbuf - it must not die until windows + # has finished with our structure. + lptext = str_buf.buffer_info()[0] + extras.append(str_buf) + else: + lptext = 0 + cch = 0 + # Create the struct. + item = struct.pack( + menuitem_fmt, + struct.calcsize(menuitem_fmt), # cbSize + fMask, + fType, + fState, + wID, + hSubMenu, + hbmpChecked, + hbmpUnchecked, + dwItemData, + lptext, + cch, + hbmpItem + ) + # Now copy the string to a writable buffer, so that the result + # could be passed to a 'Get' function + return array.array("c", item), extras + +def UnpackMENUITEMINFO(s): + (cb, + fMask, + fType, + fState, + wID, + hSubMenu, + hbmpChecked, + hbmpUnchecked, + dwItemData, + lptext, + cch, + hbmpItem) = struct.unpack(menuitem_fmt, s) + assert cb==len(s) + if fMask & win32con.MIIM_FTYPE==0: fType = None + if fMask & win32con.MIIM_STATE==0: fState = None + if fMask & win32con.MIIM_ID==0: wID = None + if fMask & win32con.MIIM_SUBMENU==0: hSubMenu = None + if fMask & win32con.MIIM_CHECKMARKS==0: hbmpChecked = hbmpUnchecked = None + if fMask & win32con.MIIM_DATA==0: dwItemData = None + if fMask & win32con.MIIM_BITMAP==0: hbmpItem = None + if fMask & win32con.MIIM_STRING: + text = win32gui.PyGetString(lptext, cch) + else: + text = None + return fType, fState, wID, hSubMenu, hbmpChecked, hbmpUnchecked, \ + dwItemData, text, hbmpItem + +def EmptyMENUITEMINFO(mask = None, text_buf_size=512): + extra = [] + if mask is None: + mask = win32con.MIIM_BITMAP | win32con.MIIM_CHECKMARKS | \ + win32con.MIIM_DATA | win32con.MIIM_FTYPE | \ + win32con.MIIM_ID | win32con.MIIM_STATE | \ + win32con.MIIM_STRING | win32con.MIIM_SUBMENU + # Note: No MIIM_TYPE - this screws win2k/98. + + if mask & win32con.MIIM_STRING: + text_buffer = array.array("c", "\0" * text_buf_size) + extra.append(text_buffer) + text_addr, text_len = text_buffer.buffer_info() + else: + text_addr = text_len = 0 + + buf = struct.pack( + menuitem_fmt, + struct.calcsize(menuitem_fmt), # cbSize + mask, + 0, #fType, + 0, #fState, + 0, #wID, + 0, #hSubMenu, + 0, #hbmpChecked, + 0, #hbmpUnchecked, + 0, #dwItemData, + text_addr, + text_len, + 0, #hbmpItem + ) + return array.array("c", buf), extra + +# MENUINFO struct +menuinfo_fmt = '7i' + +def PackMENUINFO(dwStyle = None, cyMax = None, + hbrBack = None, dwContextHelpID = None, dwMenuData = None, + fMask = 0): + if dwStyle is None: dwStyle = 0 + else: fMask |= win32con.MIM_STYLE + if cyMax is None: cyMax = 0 + else: fMask |= win32con.MIM_MAXHEIGHT + if hbrBack is None: hbrBack = 0 + else: fMask |= win32con.MIM_BACKGROUND + if dwContextHelpID is None: dwContextHelpID = 0 + else: fMask |= win32con.MIM_HELPID + if dwMenuData is None: dwMenuData = 0 + else: fMask |= win32con.MIM_MENUDATA + # Create the struct. + item = struct.pack( + menuinfo_fmt, + struct.calcsize(menuinfo_fmt), # cbSize + fMask, + dwStyle, + cyMax, + hbrBack, + dwContextHelpID, + dwMenuData) + return array.array("c", item) + +def UnpackMENUINFO(s): + (cb, + fMask, + dwStyle, + cyMax, + hbrBack, + dwContextHelpID, + dwMenuData) = struct.unpack(menuinfo_fmt, s) + assert cb==len(s) + if fMask & win32con.MIM_STYLE==0: dwStyle = None + if fMask & win32con.MIM_MAXHEIGHT==0: cyMax = None + if fMask & win32con.MIM_BACKGROUND==0: hbrBack = None + if fMask & win32con.MIM_HELPID==0: dwContextHelpID = None + if fMask & win32con.MIM_MENUDATA==0: dwMenuData = None + return dwStyle, cyMax, hbrBack, dwContextHelpID, dwMenuData + +def EmptyMENUINFO(mask = None): + if mask is None: + mask = win32con.MIM_STYLE | win32con.MIM_MAXHEIGHT| \ + win32con.MIM_BACKGROUND | win32con.MIM_HELPID | \ + win32con.MIM_MENUDATA + + buf = struct.pack( + menuinfo_fmt, + struct.calcsize(menuinfo_fmt), # cbSize + mask, + 0, #dwStyle + 0, #cyMax + 0, #hbrBack, + 0, #dwContextHelpID, + 0, #dwMenuData, + ) + return array.array("c", buf) + +########################################################################## +# +# Tree View structure support - TVITEM, TVINSERTSTRUCT and TVDISPINFO +# +########################################################################## + +# XXX - Note that the following implementation of TreeView structures is ripped +# XXX - from the SpamBayes project. It may not quite work correctly yet - I +# XXX - intend checking them later - but having them is better than not at all! + +# Helpers for the ugly win32 structure packing/unpacking +# XXX - Note that functions using _GetMaskAndVal run 3x faster if they are +# 'inlined' into the function - see PackLVITEM. If the profiler points at +# _GetMaskAndVal(), you should nuke it (patches welcome once they have been +# tested) +def _GetMaskAndVal(val, default, mask, flag): + if val is None: + return mask, default + else: + if flag is not None: + mask |= flag + return mask, val + +def PackTVINSERTSTRUCT(parent, insertAfter, tvitem): + tvitem_buf, extra = PackTVITEM(*tvitem) + tvitem_buf = tvitem_buf.tostring() + format = "ii%ds" % len(tvitem_buf) + return struct.pack(format, parent, insertAfter, tvitem_buf), extra + +def PackTVITEM(hitem, state, stateMask, text, image, selimage, citems, param): + extra = [] # objects we must keep references to + mask = 0 + mask, hitem = _GetMaskAndVal(hitem, 0, mask, commctrl.TVIF_HANDLE) + mask, state = _GetMaskAndVal(state, 0, mask, commctrl.TVIF_STATE) + if not mask & commctrl.TVIF_STATE: + stateMask = 0 + mask, text = _GetMaskAndVal(text, None, mask, commctrl.TVIF_TEXT) + mask, image = _GetMaskAndVal(image, 0, mask, commctrl.TVIF_IMAGE) + mask, selimage = _GetMaskAndVal(selimage, 0, mask, commctrl.TVIF_SELECTEDIMAGE) + mask, citems = _GetMaskAndVal(citems, 0, mask, commctrl.TVIF_CHILDREN) + mask, param = _GetMaskAndVal(param, 0, mask, commctrl.TVIF_PARAM) + if text is None: + text_addr = text_len = 0 + else: + if isinstance(text, unicode): + text = text.encode("mbcs") + text_buffer = array.array("c", text+"\0") + extra.append(text_buffer) + text_addr, text_len = text_buffer.buffer_info() + format = "iiiiiiiiii" + buf = struct.pack(format, + mask, hitem, + state, stateMask, + text_addr, text_len, # text + image, selimage, + citems, param) + return array.array("c", buf), extra + +# Make a new buffer suitable for querying hitem's attributes. +def EmptyTVITEM(hitem, mask = None, text_buf_size=512): + extra = [] # objects we must keep references to + if mask is None: + mask = commctrl.TVIF_HANDLE | commctrl.TVIF_STATE | commctrl.TVIF_TEXT | \ + commctrl.TVIF_IMAGE | commctrl.TVIF_SELECTEDIMAGE | \ + commctrl.TVIF_CHILDREN | commctrl.TVIF_PARAM + if mask & commctrl.TVIF_TEXT: + text_buffer = array.array("c", "\0" * text_buf_size) + extra.append(text_buffer) + text_addr, text_len = text_buffer.buffer_info() + else: + text_addr = text_len = 0 + format = "iiiiiiiiii" + buf = struct.pack(format, + mask, hitem, + 0, 0, + text_addr, text_len, # text + 0, 0, + 0, 0) + return array.array("c", buf), extra + +def UnpackTVITEM(buffer): + item_mask, item_hItem, item_state, item_stateMask, \ + item_textptr, item_cchText, item_image, item_selimage, \ + item_cChildren, item_param = struct.unpack("10i", buffer) + # ensure only items listed by the mask are valid (except we assume the + # handle is always valid - some notifications (eg, TVN_ENDLABELEDIT) set a + # mask that doesn't include the handle, but the docs explicity say it is.) + if not (item_mask & commctrl.TVIF_TEXT): item_textptr = item_cchText = None + if not (item_mask & commctrl.TVIF_CHILDREN): item_cChildren = None + if not (item_mask & commctrl.TVIF_IMAGE): item_image = None + if not (item_mask & commctrl.TVIF_PARAM): item_param = None + if not (item_mask & commctrl.TVIF_SELECTEDIMAGE): item_selimage = None + if not (item_mask & commctrl.TVIF_STATE): item_state = item_stateMask = None + + if item_textptr: + text = win32gui.PyGetString(item_textptr) + else: + text = None + return item_hItem, item_state, item_stateMask, \ + text, item_image, item_selimage, \ + item_cChildren, item_param + +# Unpack the lparm from a "TVNOTIFY" message +def UnpackTVNOTIFY(lparam): + format = "iiii40s40s" + buf = win32gui.PyMakeBuffer(struct.calcsize(format), lparam) + hwndFrom, id, code, action, buf_old, buf_new \ + = struct.unpack(format, buf) + item_old = UnpackTVITEM(buf_old) + item_new = UnpackTVITEM(buf_new) + return hwndFrom, id, code, action, item_old, item_new + +def UnpackTVDISPINFO(lparam): + format = "iii40s" + buf = win32gui.PyMakeBuffer(struct.calcsize(format), lparam) + hwndFrom, id, code, buf_item = struct.unpack(format, buf) + item = UnpackTVITEM(buf_item) + return hwndFrom, id, code, item + +# +# List view items +def PackLVITEM(item=None, subItem=None, state=None, stateMask=None, text=None, image=None, param=None, indent=None): + extra = [] # objects we must keep references to + mask = 0 + # _GetMaskAndVal adds quite a bit of overhead to this function. + if item is None: item = 0 # No mask for item + if subItem is None: subItem = 0 # No mask for sibItem + if state is None: + state = 0 + stateMask = 0 + else: + mask |= commctrl.LVIF_STATE + if stateMask is None: stateMask = state + + if image is None: image = 0 + else: mask |= commctrl.LVIF_IMAGE + if param is None: param = 0 + else: mask |= commctrl.LVIF_PARAM + if indent is None: indent = 0 + else: mask |= commctrl.LVIF_INDENT + + if text is None: + text_addr = text_len = 0 + else: + mask |= commctrl.LVIF_TEXT + if isinstance(text, unicode): + text = text.encode("mbcs") + text_buffer = array.array("c", text+"\0") + extra.append(text_buffer) + text_addr, text_len = text_buffer.buffer_info() + format = "iiiiiiiiii" + buf = struct.pack(format, + mask, item, subItem, + state, stateMask, + text_addr, text_len, # text + image, param, indent) + return array.array("c", buf), extra + +def UnpackLVITEM(buffer): + item_mask, item_item, item_subItem, \ + item_state, item_stateMask, \ + item_textptr, item_cchText, item_image, \ + item_param, item_indent = struct.unpack("10i", buffer) + # ensure only items listed by the mask are valid + if not (item_mask & commctrl.LVIF_TEXT): item_textptr = item_cchText = None + if not (item_mask & commctrl.LVIF_IMAGE): item_image = None + if not (item_mask & commctrl.LVIF_PARAM): item_param = None + if not (item_mask & commctrl.LVIF_INDENT): item_indent = None + if not (item_mask & commctrl.LVIF_STATE): item_state = item_stateMask = None + + if item_textptr: + text = win32gui.PyGetString(item_textptr) + else: + text = None + return item_item, item_subItem, item_state, item_stateMask, \ + text, item_image, item_param, item_indent + +# Unpack an "LVNOTIFY" message +def UnpackLVDISPINFO(lparam): + format = "iii40s" + buf = win32gui.PyMakeBuffer(struct.calcsize(format), lparam) + hwndFrom, id, code, buf_item = struct.unpack(format, buf) + item = UnpackLVITEM(buf_item) + return hwndFrom, id, code, item + +def UnpackLVNOTIFY(lparam): + format = "3i8i" + buf = win32gui.PyMakeBuffer(struct.calcsize(format), lparam) + hwndFrom, id, code, item, subitem, newstate, oldstate, \ + changed, pt_x, pt_y, lparam = struct.unpack(format, buf) + return hwndFrom, id, code, item, subitem, newstate, oldstate, \ + changed, (pt_x, pt_y), lparam + + +# Make a new buffer suitable for querying an items attributes. +def EmptyLVITEM(item, subitem, mask = None, text_buf_size=512): + extra = [] # objects we must keep references to + if mask is None: + mask = commctrl.LVIF_IMAGE | commctrl.LVIF_INDENT | commctrl.LVIF_TEXT | \ + commctrl.LVIF_PARAM | commctrl.LVIF_STATE + if mask & commctrl.LVIF_TEXT: + text_buffer = array.array("c", "\0" * text_buf_size) + extra.append(text_buffer) + text_addr, text_len = text_buffer.buffer_info() + else: + text_addr = text_len = 0 + format = "iiiiiiiiii" + buf = struct.pack(format, + mask, item, subitem, + 0, 0, + text_addr, text_len, # text + 0, 0, 0) + return array.array("c", buf), extra + + +# List view column structure +def PackLVCOLUMN(fmt=None, cx=None, text=None, subItem=None, image=None, order=None): + extra = [] # objects we must keep references to + mask = 0 + mask, fmt = _GetMaskAndVal(fmt, 0, mask, commctrl.LVCF_FMT) + mask, cx = _GetMaskAndVal(cx, 0, mask, commctrl.LVCF_WIDTH) + mask, text = _GetMaskAndVal(text, None, mask, commctrl.LVCF_TEXT) + mask, subItem = _GetMaskAndVal(subItem, 0, mask, commctrl.LVCF_SUBITEM) + mask, image = _GetMaskAndVal(image, 0, mask, commctrl.LVCF_IMAGE) + mask, order= _GetMaskAndVal(order, 0, mask, commctrl.LVCF_ORDER) + if text is None: + text_addr = text_len = 0 + else: + if isinstance(text, unicode): + text = text.encode("mbcs") + text_buffer = array.array("c", text+"\0") + extra.append(text_buffer) + text_addr, text_len = text_buffer.buffer_info() + format = "iiiiiiii" + buf = struct.pack(format, + mask, fmt, cx, + text_addr, text_len, # text + subItem, image, order) + return array.array("c", buf), extra + +def UnpackLVCOLUMN(lparam): + format = "iiiiiiii" + mask, fmt, cx, text_addr, text_size, subItem, image, order = \ + struct.unpack(format, lparam) + # ensure only items listed by the mask are valid + if not (mask & commctrl.LVCF_FMT): fmt = None + if not (mask & commctrl.LVCF_WIDTH): cx = None + if not (mask & commctrl.LVCF_TEXT): text_addr = text_size = None + if not (mask & commctrl.LVCF_SUBITEM): subItem = None + if not (mask & commctrl.LVCF_IMAGE): image = None + if not (mask & commctrl.LVCF_ORDER): order = None + if text_addr: + text = win32gui.PyGetString(text_addr) + else: + text = None + return fmt, cx, text, subItem, image, order + + +# Make a new buffer suitable for querying an items attributes. +def EmptyLVCOLUMN(mask = None, text_buf_size=512): + extra = [] # objects we must keep references to + if mask is None: + mask = commctrl.LVCF_FMT | commctrl.LVCF_WIDTH | commctrl.LVCF_TEXT | \ + commctrl.LVCF_SUBITEM | commctrl.LVCF_IMAGE | commctrl.LVCF_ORDER + if mask & commctrl.LVCF_TEXT: + text_buffer = array.array("c", "\0" * text_buf_size) + extra.append(text_buffer) + text_addr, text_len = text_buffer.buffer_info() + else: + text_addr = text_len = 0 + format = "iiiiiiii" + buf = struct.pack(format, + mask, 0, 0, + text_addr, text_len, # text + 0, 0, 0) + return array.array("c", buf), extra + +# List view hit-test. +def PackLVHITTEST(pt): + format = "iiiii" + buf = struct.pack(format, + pt[0], pt[1], + 0, 0, 0) + return array.array("c", buf), None + +def UnpackLVHITTEST(buf): + format = "iiiii" + x, y, flags, item, subitem = struct.unpack(format, buf) + return (x,y), flags, item, subitem + +def PackHDITEM(cxy = None, text = None, hbm = None, fmt = None, + param = None, image = None, order = None): + extra = [] # objects we must keep references to + mask = 0 + mask, cxy = _GetMaskAndVal(cxy, 0, mask, commctrl.HDI_HEIGHT) + mask, text = _GetMaskAndVal(text, None, mask, commctrl.LVCF_TEXT) + mask, hbm = _GetMaskAndVal(hbm, 0, mask, commctrl.HDI_BITMAP) + mask, fmt = _GetMaskAndVal(fmt, 0, mask, commctrl.HDI_FORMAT) + mask, param = _GetMaskAndVal(param, 0, mask, commctrl.HDI_LPARAM) + mask, image = _GetMaskAndVal(image, 0, mask, commctrl.HDI_IMAGE) + mask, order = _GetMaskAndVal(order, 0, mask, commctrl.HDI_ORDER) + + if text is None: + text_addr = text_len = 0 + else: + if isinstance(text, unicode): + text = text.encode("mbcs") + text_buffer = array.array("c", text+"\0") + extra.append(text_buffer) + text_addr, text_len = text_buffer.buffer_info() + + format = "iiiiiiiiiii" + buf = struct.pack(format, + mask, cxy, text_addr, hbm, text_len, + fmt, param, image, order, 0, 0) + return array.array("c", buf), extra diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/win32inetcon.py b/thirdparty/python25/Lib/site-packages/win32/lib/win32inetcon.py new file mode 100644 index 000000000..f0e0858e2 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/win32inetcon.py @@ -0,0 +1,727 @@ +# Generated by h2py from \mssdk\include\WinInet.h + +# Included from pshpack8.h + +# Included from pshpack4.h +INTERNET_INVALID_PORT_NUMBER = 0 +INTERNET_DEFAULT_FTP_PORT = 21 +INTERNET_DEFAULT_GOPHER_PORT = 70 +INTERNET_DEFAULT_HTTP_PORT = 80 +INTERNET_DEFAULT_HTTPS_PORT = 443 +INTERNET_DEFAULT_SOCKS_PORT = 1080 +INTERNET_MAX_HOST_NAME_LENGTH = 256 +INTERNET_MAX_USER_NAME_LENGTH = 128 +INTERNET_MAX_PASSWORD_LENGTH = 128 +INTERNET_MAX_PORT_NUMBER_LENGTH = 5 +INTERNET_MAX_PORT_NUMBER_VALUE = 65535 +INTERNET_MAX_PATH_LENGTH = 2048 +INTERNET_MAX_SCHEME_LENGTH = 32 +INTERNET_KEEP_ALIVE_ENABLED = 1 +INTERNET_KEEP_ALIVE_DISABLED = 0 +INTERNET_REQFLAG_FROM_CACHE = 0x00000001 +INTERNET_REQFLAG_ASYNC = 0x00000002 +INTERNET_REQFLAG_VIA_PROXY = 0x00000004 +INTERNET_REQFLAG_NO_HEADERS = 0x00000008 +INTERNET_REQFLAG_PASSIVE = 0x00000010 +INTERNET_REQFLAG_CACHE_WRITE_DISABLED = 0x00000040 +INTERNET_REQFLAG_NET_TIMEOUT = 0x00000080 +INTERNET_FLAG_RELOAD = (-2147483648) +INTERNET_FLAG_RAW_DATA = 0x40000000 +INTERNET_FLAG_EXISTING_CONNECT = 0x20000000 +INTERNET_FLAG_ASYNC = 0x10000000 +INTERNET_FLAG_PASSIVE = 0x08000000 +INTERNET_FLAG_NO_CACHE_WRITE = 0x04000000 +INTERNET_FLAG_DONT_CACHE = INTERNET_FLAG_NO_CACHE_WRITE +INTERNET_FLAG_MAKE_PERSISTENT = 0x02000000 +INTERNET_FLAG_FROM_CACHE = 0x01000000 +INTERNET_FLAG_OFFLINE = INTERNET_FLAG_FROM_CACHE +INTERNET_FLAG_SECURE = 0x00800000 +INTERNET_FLAG_KEEP_CONNECTION = 0x00400000 +INTERNET_FLAG_NO_AUTO_REDIRECT = 0x00200000 +INTERNET_FLAG_READ_PREFETCH = 0x00100000 +INTERNET_FLAG_NO_COOKIES = 0x00080000 +INTERNET_FLAG_NO_AUTH = 0x00040000 +INTERNET_FLAG_RESTRICTED_ZONE = 0x00020000 +INTERNET_FLAG_CACHE_IF_NET_FAIL = 0x00010000 +INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP = 0x00008000 +INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS = 0x00004000 +INTERNET_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000 +INTERNET_FLAG_IGNORE_CERT_CN_INVALID = 0x00001000 +INTERNET_FLAG_RESYNCHRONIZE = 0x00000800 +INTERNET_FLAG_HYPERLINK = 0x00000400 +INTERNET_FLAG_NO_UI = 0x00000200 +INTERNET_FLAG_PRAGMA_NOCACHE = 0x00000100 +INTERNET_FLAG_CACHE_ASYNC = 0x00000080 +INTERNET_FLAG_FORMS_SUBMIT = 0x00000040 +INTERNET_FLAG_FWD_BACK = 0x00000020 +INTERNET_FLAG_NEED_FILE = 0x00000010 +INTERNET_FLAG_MUST_CACHE_REQUEST = INTERNET_FLAG_NEED_FILE +SECURITY_INTERNET_MASK = (INTERNET_FLAG_IGNORE_CERT_CN_INVALID | \ + INTERNET_FLAG_IGNORE_CERT_DATE_INVALID | \ + INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS | \ + INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP ) +INTERNET_ERROR_MASK_INSERT_CDROM = 0x1 +INTERNET_ERROR_MASK_COMBINED_SEC_CERT = 0x2 +INTERNET_ERROR_MASK_NEED_MSN_SSPI_PKG = 0X4 +INTERNET_ERROR_MASK_LOGIN_FAILURE_DISPLAY_ENTITY_BODY = 0x8 +WININET_API_FLAG_ASYNC = 0x00000001 +WININET_API_FLAG_SYNC = 0x00000004 +WININET_API_FLAG_USE_CONTEXT = 0x00000008 +INTERNET_NO_CALLBACK = 0 +IDSI_FLAG_KEEP_ALIVE = 0x00000001 +IDSI_FLAG_SECURE = 0x00000002 +IDSI_FLAG_PROXY = 0x00000004 +IDSI_FLAG_TUNNEL = 0x00000008 +INTERNET_PER_CONN_FLAGS = 1 +INTERNET_PER_CONN_PROXY_SERVER = 2 +INTERNET_PER_CONN_PROXY_BYPASS = 3 +INTERNET_PER_CONN_AUTOCONFIG_URL = 4 +INTERNET_PER_CONN_AUTODISCOVERY_FLAGS = 5 +INTERNET_PER_CONN_AUTOCONFIG_SECONDARY_URL = 6 +INTERNET_PER_CONN_AUTOCONFIG_RELOAD_DELAY_MINS = 7 +INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_TIME = 8 +INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_URL = 9 +PROXY_TYPE_DIRECT = 0x00000001 +PROXY_TYPE_PROXY = 0x00000002 +PROXY_TYPE_AUTO_PROXY_URL = 0x00000004 +PROXY_TYPE_AUTO_DETECT = 0x00000008 +AUTO_PROXY_FLAG_USER_SET = 0x00000001 +AUTO_PROXY_FLAG_ALWAYS_DETECT = 0x00000002 +AUTO_PROXY_FLAG_DETECTION_RUN = 0x00000004 +AUTO_PROXY_FLAG_MIGRATED = 0x00000008 +AUTO_PROXY_FLAG_DONT_CACHE_PROXY_RESULT = 0x00000010 +AUTO_PROXY_FLAG_CACHE_INIT_RUN = 0x00000020 +AUTO_PROXY_FLAG_DETECTION_SUSPECT = 0x00000040 +ISO_FORCE_DISCONNECTED = 0x00000001 +INTERNET_RFC1123_FORMAT = 0 +INTERNET_RFC1123_BUFSIZE = 30 +ICU_ESCAPE = (-2147483648) +ICU_USERNAME = 0x40000000 +ICU_NO_ENCODE = 0x20000000 +ICU_DECODE = 0x10000000 +ICU_NO_META = 0x08000000 +ICU_ENCODE_SPACES_ONLY = 0x04000000 +ICU_BROWSER_MODE = 0x02000000 +ICU_ENCODE_PERCENT = 0x00001000 +INTERNET_OPEN_TYPE_PRECONFIG = 0 +INTERNET_OPEN_TYPE_DIRECT = 1 +INTERNET_OPEN_TYPE_PROXY = 3 +INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY = 4 +PRE_CONFIG_INTERNET_ACCESS = INTERNET_OPEN_TYPE_PRECONFIG +LOCAL_INTERNET_ACCESS = INTERNET_OPEN_TYPE_DIRECT +CERN_PROXY_INTERNET_ACCESS = INTERNET_OPEN_TYPE_PROXY +INTERNET_SERVICE_FTP = 1 +INTERNET_SERVICE_GOPHER = 2 +INTERNET_SERVICE_HTTP = 3 +IRF_ASYNC = WININET_API_FLAG_ASYNC +IRF_SYNC = WININET_API_FLAG_SYNC +IRF_USE_CONTEXT = WININET_API_FLAG_USE_CONTEXT +IRF_NO_WAIT = 0x00000008 +ISO_GLOBAL = 0x00000001 +ISO_REGISTRY = 0x00000002 +ISO_VALID_FLAGS = (ISO_GLOBAL | ISO_REGISTRY) +INTERNET_OPTION_CALLBACK = 1 +INTERNET_OPTION_CONNECT_TIMEOUT = 2 +INTERNET_OPTION_CONNECT_RETRIES = 3 +INTERNET_OPTION_CONNECT_BACKOFF = 4 +INTERNET_OPTION_SEND_TIMEOUT = 5 +INTERNET_OPTION_CONTROL_SEND_TIMEOUT = INTERNET_OPTION_SEND_TIMEOUT +INTERNET_OPTION_RECEIVE_TIMEOUT = 6 +INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT = INTERNET_OPTION_RECEIVE_TIMEOUT +INTERNET_OPTION_DATA_SEND_TIMEOUT = 7 +INTERNET_OPTION_DATA_RECEIVE_TIMEOUT = 8 +INTERNET_OPTION_HANDLE_TYPE = 9 +INTERNET_OPTION_LISTEN_TIMEOUT = 11 +INTERNET_OPTION_READ_BUFFER_SIZE = 12 +INTERNET_OPTION_WRITE_BUFFER_SIZE = 13 +INTERNET_OPTION_ASYNC_ID = 15 +INTERNET_OPTION_ASYNC_PRIORITY = 16 +INTERNET_OPTION_PARENT_HANDLE = 21 +INTERNET_OPTION_KEEP_CONNECTION = 22 +INTERNET_OPTION_REQUEST_FLAGS = 23 +INTERNET_OPTION_EXTENDED_ERROR = 24 +INTERNET_OPTION_OFFLINE_MODE = 26 +INTERNET_OPTION_CACHE_STREAM_HANDLE = 27 +INTERNET_OPTION_USERNAME = 28 +INTERNET_OPTION_PASSWORD = 29 +INTERNET_OPTION_ASYNC = 30 +INTERNET_OPTION_SECURITY_FLAGS = 31 +INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT = 32 +INTERNET_OPTION_DATAFILE_NAME = 33 +INTERNET_OPTION_URL = 34 +INTERNET_OPTION_SECURITY_CERTIFICATE = 35 +INTERNET_OPTION_SECURITY_KEY_BITNESS = 36 +INTERNET_OPTION_REFRESH = 37 +INTERNET_OPTION_PROXY = 38 +INTERNET_OPTION_SETTINGS_CHANGED = 39 +INTERNET_OPTION_VERSION = 40 +INTERNET_OPTION_USER_AGENT = 41 +INTERNET_OPTION_END_BROWSER_SESSION = 42 +INTERNET_OPTION_PROXY_USERNAME = 43 +INTERNET_OPTION_PROXY_PASSWORD = 44 +INTERNET_OPTION_CONTEXT_VALUE = 45 +INTERNET_OPTION_CONNECT_LIMIT = 46 +INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT = 47 +INTERNET_OPTION_POLICY = 48 +INTERNET_OPTION_DISCONNECTED_TIMEOUT = 49 +INTERNET_OPTION_CONNECTED_STATE = 50 +INTERNET_OPTION_IDLE_STATE = 51 +INTERNET_OPTION_OFFLINE_SEMANTICS = 52 +INTERNET_OPTION_SECONDARY_CACHE_KEY = 53 +INTERNET_OPTION_CALLBACK_FILTER = 54 +INTERNET_OPTION_CONNECT_TIME = 55 +INTERNET_OPTION_SEND_THROUGHPUT = 56 +INTERNET_OPTION_RECEIVE_THROUGHPUT = 57 +INTERNET_OPTION_REQUEST_PRIORITY = 58 +INTERNET_OPTION_HTTP_VERSION = 59 +INTERNET_OPTION_RESET_URLCACHE_SESSION = 60 +INTERNET_OPTION_ERROR_MASK = 62 +INTERNET_OPTION_FROM_CACHE_TIMEOUT = 63 +INTERNET_OPTION_BYPASS_EDITED_ENTRY = 64 +INTERNET_OPTION_DIAGNOSTIC_SOCKET_INFO = 67 +INTERNET_OPTION_CODEPAGE = 68 +INTERNET_OPTION_CACHE_TIMESTAMPS = 69 +INTERNET_OPTION_DISABLE_AUTODIAL = 70 +INTERNET_OPTION_MAX_CONNS_PER_SERVER = 73 +INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER = 74 +INTERNET_OPTION_PER_CONNECTION_OPTION = 75 +INTERNET_OPTION_DIGEST_AUTH_UNLOAD = 76 +INTERNET_OPTION_IGNORE_OFFLINE = 77 +INTERNET_OPTION_IDENTITY = 78 +INTERNET_OPTION_REMOVE_IDENTITY = 79 +INTERNET_OPTION_ALTER_IDENTITY = 80 +INTERNET_OPTION_SUPPRESS_BEHAVIOR = 81 +INTERNET_OPTION_AUTODIAL_MODE = 82 +INTERNET_OPTION_AUTODIAL_CONNECTION = 83 +INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84 +INTERNET_OPTION_AUTH_FLAGS = 85 +INTERNET_OPTION_COOKIES_3RD_PARTY = 86 +INTERNET_OPTION_DISABLE_PASSPORT_AUTH = 87 +INTERNET_OPTION_SEND_UTF8_SERVERNAME_TO_PROXY = 88 +INTERNET_OPTION_EXEMPT_CONNECTION_LIMIT = 89 +INTERNET_OPTION_ENABLE_PASSPORT_AUTH = 90 +INTERNET_OPTION_HIBERNATE_INACTIVE_WORKER_THREADS = 91 +INTERNET_OPTION_ACTIVATE_WORKER_THREADS = 92 +INTERNET_OPTION_RESTORE_WORKER_THREAD_DEFAULTS = 93 +INTERNET_OPTION_SOCKET_SEND_BUFFER_LENGTH = 94 +INTERNET_OPTION_PROXY_SETTINGS_CHANGED = 95 +INTERNET_FIRST_OPTION = INTERNET_OPTION_CALLBACK +INTERNET_LAST_OPTION = INTERNET_OPTION_PROXY_SETTINGS_CHANGED +INTERNET_PRIORITY_FOREGROUND = 1000 +INTERNET_HANDLE_TYPE_INTERNET = 1 +INTERNET_HANDLE_TYPE_CONNECT_FTP = 2 +INTERNET_HANDLE_TYPE_CONNECT_GOPHER = 3 +INTERNET_HANDLE_TYPE_CONNECT_HTTP = 4 +INTERNET_HANDLE_TYPE_FTP_FIND = 5 +INTERNET_HANDLE_TYPE_FTP_FIND_HTML = 6 +INTERNET_HANDLE_TYPE_FTP_FILE = 7 +INTERNET_HANDLE_TYPE_FTP_FILE_HTML = 8 +INTERNET_HANDLE_TYPE_GOPHER_FIND = 9 +INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML = 10 +INTERNET_HANDLE_TYPE_GOPHER_FILE = 11 +INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML = 12 +INTERNET_HANDLE_TYPE_HTTP_REQUEST = 13 +INTERNET_HANDLE_TYPE_FILE_REQUEST = 14 +AUTH_FLAG_DISABLE_NEGOTIATE = 0x00000001 +AUTH_FLAG_ENABLE_NEGOTIATE = 0x00000002 +SECURITY_FLAG_SECURE = 0x00000001 +SECURITY_FLAG_STRENGTH_WEAK = 0x10000000 +SECURITY_FLAG_STRENGTH_MEDIUM = 0x40000000 +SECURITY_FLAG_STRENGTH_STRONG = 0x20000000 +SECURITY_FLAG_UNKNOWNBIT = (-2147483648) +SECURITY_FLAG_FORTEZZA = 0x08000000 +SECURITY_FLAG_NORMALBITNESS = SECURITY_FLAG_STRENGTH_WEAK +SECURITY_FLAG_SSL = 0x00000002 +SECURITY_FLAG_SSL3 = 0x00000004 +SECURITY_FLAG_PCT = 0x00000008 +SECURITY_FLAG_PCT4 = 0x00000010 +SECURITY_FLAG_IETFSSL4 = 0x00000020 +SECURITY_FLAG_40BIT = SECURITY_FLAG_STRENGTH_WEAK +SECURITY_FLAG_128BIT = SECURITY_FLAG_STRENGTH_STRONG +SECURITY_FLAG_56BIT = SECURITY_FLAG_STRENGTH_MEDIUM +SECURITY_FLAG_IGNORE_REVOCATION = 0x00000080 +SECURITY_FLAG_IGNORE_UNKNOWN_CA = 0x00000100 +SECURITY_FLAG_IGNORE_WRONG_USAGE = 0x00000200 +SECURITY_FLAG_IGNORE_CERT_CN_INVALID = INTERNET_FLAG_IGNORE_CERT_CN_INVALID +SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = INTERNET_FLAG_IGNORE_CERT_DATE_INVALID +SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS +SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP +SECURITY_SET_MASK = (SECURITY_FLAG_IGNORE_REVOCATION |\ + SECURITY_FLAG_IGNORE_UNKNOWN_CA |\ + SECURITY_FLAG_IGNORE_CERT_CN_INVALID |\ + SECURITY_FLAG_IGNORE_CERT_DATE_INVALID |\ + SECURITY_FLAG_IGNORE_WRONG_USAGE) +AUTODIAL_MODE_NEVER = 1 +AUTODIAL_MODE_ALWAYS = 2 +AUTODIAL_MODE_NO_NETWORK_PRESENT = 4 +INTERNET_STATUS_RESOLVING_NAME = 10 +INTERNET_STATUS_NAME_RESOLVED = 11 +INTERNET_STATUS_CONNECTING_TO_SERVER = 20 +INTERNET_STATUS_CONNECTED_TO_SERVER = 21 +INTERNET_STATUS_SENDING_REQUEST = 30 +INTERNET_STATUS_REQUEST_SENT = 31 +INTERNET_STATUS_RECEIVING_RESPONSE = 40 +INTERNET_STATUS_RESPONSE_RECEIVED = 41 +INTERNET_STATUS_CTL_RESPONSE_RECEIVED = 42 +INTERNET_STATUS_PREFETCH = 43 +INTERNET_STATUS_CLOSING_CONNECTION = 50 +INTERNET_STATUS_CONNECTION_CLOSED = 51 +INTERNET_STATUS_HANDLE_CREATED = 60 +INTERNET_STATUS_HANDLE_CLOSING = 70 +INTERNET_STATUS_DETECTING_PROXY = 80 +INTERNET_STATUS_REQUEST_COMPLETE = 100 +INTERNET_STATUS_REDIRECT = 110 +INTERNET_STATUS_INTERMEDIATE_RESPONSE = 120 +INTERNET_STATUS_USER_INPUT_REQUIRED = 140 +INTERNET_STATUS_STATE_CHANGE = 200 +INTERNET_STATUS_COOKIE_SENT = 320 +INTERNET_STATUS_COOKIE_RECEIVED = 321 +INTERNET_STATUS_PRIVACY_IMPACTED = 324 +INTERNET_STATUS_P3P_HEADER = 325 +INTERNET_STATUS_P3P_POLICYREF = 326 +INTERNET_STATUS_COOKIE_HISTORY = 327 +INTERNET_STATE_CONNECTED = 0x00000001 +INTERNET_STATE_DISCONNECTED = 0x00000002 +INTERNET_STATE_DISCONNECTED_BY_USER = 0x00000010 +INTERNET_STATE_IDLE = 0x00000100 +INTERNET_STATE_BUSY = 0x00000200 +FTP_TRANSFER_TYPE_UNKNOWN = 0x00000000 +FTP_TRANSFER_TYPE_ASCII = 0x00000001 +FTP_TRANSFER_TYPE_BINARY = 0x00000002 +FTP_TRANSFER_TYPE_MASK = (FTP_TRANSFER_TYPE_ASCII | FTP_TRANSFER_TYPE_BINARY) +MAX_GOPHER_DISPLAY_TEXT = 128 +MAX_GOPHER_SELECTOR_TEXT = 256 +MAX_GOPHER_HOST_NAME = INTERNET_MAX_HOST_NAME_LENGTH +MAX_GOPHER_LOCATOR_LENGTH = (1 \ + + MAX_GOPHER_DISPLAY_TEXT \ + + 1 \ + + MAX_GOPHER_SELECTOR_TEXT \ + + 1 \ + + MAX_GOPHER_HOST_NAME \ + + 1 \ + + INTERNET_MAX_PORT_NUMBER_LENGTH \ + + 1 \ + + 1 \ + + 2 \ + ) +GOPHER_TYPE_TEXT_FILE = 0x00000001 +GOPHER_TYPE_DIRECTORY = 0x00000002 +GOPHER_TYPE_CSO = 0x00000004 +GOPHER_TYPE_ERROR = 0x00000008 +GOPHER_TYPE_MAC_BINHEX = 0x00000010 +GOPHER_TYPE_DOS_ARCHIVE = 0x00000020 +GOPHER_TYPE_UNIX_UUENCODED = 0x00000040 +GOPHER_TYPE_INDEX_SERVER = 0x00000080 +GOPHER_TYPE_TELNET = 0x00000100 +GOPHER_TYPE_BINARY = 0x00000200 +GOPHER_TYPE_REDUNDANT = 0x00000400 +GOPHER_TYPE_TN3270 = 0x00000800 +GOPHER_TYPE_GIF = 0x00001000 +GOPHER_TYPE_IMAGE = 0x00002000 +GOPHER_TYPE_BITMAP = 0x00004000 +GOPHER_TYPE_MOVIE = 0x00008000 +GOPHER_TYPE_SOUND = 0x00010000 +GOPHER_TYPE_HTML = 0x00020000 +GOPHER_TYPE_PDF = 0x00040000 +GOPHER_TYPE_CALENDAR = 0x00080000 +GOPHER_TYPE_INLINE = 0x00100000 +GOPHER_TYPE_UNKNOWN = 0x20000000 +GOPHER_TYPE_ASK = 0x40000000 +GOPHER_TYPE_GOPHER_PLUS = (-2147483648) +GOPHER_TYPE_FILE_MASK = (GOPHER_TYPE_TEXT_FILE \ + | GOPHER_TYPE_MAC_BINHEX \ + | GOPHER_TYPE_DOS_ARCHIVE \ + | GOPHER_TYPE_UNIX_UUENCODED \ + | GOPHER_TYPE_BINARY \ + | GOPHER_TYPE_GIF \ + | GOPHER_TYPE_IMAGE \ + | GOPHER_TYPE_BITMAP \ + | GOPHER_TYPE_MOVIE \ + | GOPHER_TYPE_SOUND \ + | GOPHER_TYPE_HTML \ + | GOPHER_TYPE_PDF \ + | GOPHER_TYPE_CALENDAR \ + | GOPHER_TYPE_INLINE \ + ) +MAX_GOPHER_CATEGORY_NAME = 128 +MAX_GOPHER_ATTRIBUTE_NAME = 128 +MIN_GOPHER_ATTRIBUTE_LENGTH = 256 +GOPHER_ATTRIBUTE_ID_BASE = (-1412641792) +GOPHER_CATEGORY_ID_ALL = (GOPHER_ATTRIBUTE_ID_BASE + 1) +GOPHER_CATEGORY_ID_INFO = (GOPHER_ATTRIBUTE_ID_BASE + 2) +GOPHER_CATEGORY_ID_ADMIN = (GOPHER_ATTRIBUTE_ID_BASE + 3) +GOPHER_CATEGORY_ID_VIEWS = (GOPHER_ATTRIBUTE_ID_BASE + 4) +GOPHER_CATEGORY_ID_ABSTRACT = (GOPHER_ATTRIBUTE_ID_BASE + 5) +GOPHER_CATEGORY_ID_VERONICA = (GOPHER_ATTRIBUTE_ID_BASE + 6) +GOPHER_CATEGORY_ID_ASK = (GOPHER_ATTRIBUTE_ID_BASE + 7) +GOPHER_CATEGORY_ID_UNKNOWN = (GOPHER_ATTRIBUTE_ID_BASE + 8) +GOPHER_ATTRIBUTE_ID_ALL = (GOPHER_ATTRIBUTE_ID_BASE + 9) +GOPHER_ATTRIBUTE_ID_ADMIN = (GOPHER_ATTRIBUTE_ID_BASE + 10) +GOPHER_ATTRIBUTE_ID_MOD_DATE = (GOPHER_ATTRIBUTE_ID_BASE + 11) +GOPHER_ATTRIBUTE_ID_TTL = (GOPHER_ATTRIBUTE_ID_BASE + 12) +GOPHER_ATTRIBUTE_ID_SCORE = (GOPHER_ATTRIBUTE_ID_BASE + 13) +GOPHER_ATTRIBUTE_ID_RANGE = (GOPHER_ATTRIBUTE_ID_BASE + 14) +GOPHER_ATTRIBUTE_ID_SITE = (GOPHER_ATTRIBUTE_ID_BASE + 15) +GOPHER_ATTRIBUTE_ID_ORG = (GOPHER_ATTRIBUTE_ID_BASE + 16) +GOPHER_ATTRIBUTE_ID_LOCATION = (GOPHER_ATTRIBUTE_ID_BASE + 17) +GOPHER_ATTRIBUTE_ID_GEOG = (GOPHER_ATTRIBUTE_ID_BASE + 18) +GOPHER_ATTRIBUTE_ID_TIMEZONE = (GOPHER_ATTRIBUTE_ID_BASE + 19) +GOPHER_ATTRIBUTE_ID_PROVIDER = (GOPHER_ATTRIBUTE_ID_BASE + 20) +GOPHER_ATTRIBUTE_ID_VERSION = (GOPHER_ATTRIBUTE_ID_BASE + 21) +GOPHER_ATTRIBUTE_ID_ABSTRACT = (GOPHER_ATTRIBUTE_ID_BASE + 22) +GOPHER_ATTRIBUTE_ID_VIEW = (GOPHER_ATTRIBUTE_ID_BASE + 23) +GOPHER_ATTRIBUTE_ID_TREEWALK = (GOPHER_ATTRIBUTE_ID_BASE + 24) +GOPHER_ATTRIBUTE_ID_UNKNOWN = (GOPHER_ATTRIBUTE_ID_BASE + 25) +HTTP_MAJOR_VERSION = 1 +HTTP_MINOR_VERSION = 0 +HTTP_VERSIONA = "HTTP/1.0" +HTTP_VERSION = HTTP_VERSIONA +HTTP_QUERY_MIME_VERSION = 0 +HTTP_QUERY_CONTENT_TYPE = 1 +HTTP_QUERY_CONTENT_TRANSFER_ENCODING = 2 +HTTP_QUERY_CONTENT_ID = 3 +HTTP_QUERY_CONTENT_DESCRIPTION = 4 +HTTP_QUERY_CONTENT_LENGTH = 5 +HTTP_QUERY_CONTENT_LANGUAGE = 6 +HTTP_QUERY_ALLOW = 7 +HTTP_QUERY_PUBLIC = 8 +HTTP_QUERY_DATE = 9 +HTTP_QUERY_EXPIRES = 10 +HTTP_QUERY_LAST_MODIFIED = 11 +HTTP_QUERY_MESSAGE_ID = 12 +HTTP_QUERY_URI = 13 +HTTP_QUERY_DERIVED_FROM = 14 +HTTP_QUERY_COST = 15 +HTTP_QUERY_LINK = 16 +HTTP_QUERY_PRAGMA = 17 +HTTP_QUERY_VERSION = 18 +HTTP_QUERY_STATUS_CODE = 19 +HTTP_QUERY_STATUS_TEXT = 20 +HTTP_QUERY_RAW_HEADERS = 21 +HTTP_QUERY_RAW_HEADERS_CRLF = 22 +HTTP_QUERY_CONNECTION = 23 +HTTP_QUERY_ACCEPT = 24 +HTTP_QUERY_ACCEPT_CHARSET = 25 +HTTP_QUERY_ACCEPT_ENCODING = 26 +HTTP_QUERY_ACCEPT_LANGUAGE = 27 +HTTP_QUERY_AUTHORIZATION = 28 +HTTP_QUERY_CONTENT_ENCODING = 29 +HTTP_QUERY_FORWARDED = 30 +HTTP_QUERY_FROM = 31 +HTTP_QUERY_IF_MODIFIED_SINCE = 32 +HTTP_QUERY_LOCATION = 33 +HTTP_QUERY_ORIG_URI = 34 +HTTP_QUERY_REFERER = 35 +HTTP_QUERY_RETRY_AFTER = 36 +HTTP_QUERY_SERVER = 37 +HTTP_QUERY_TITLE = 38 +HTTP_QUERY_USER_AGENT = 39 +HTTP_QUERY_WWW_AUTHENTICATE = 40 +HTTP_QUERY_PROXY_AUTHENTICATE = 41 +HTTP_QUERY_ACCEPT_RANGES = 42 +HTTP_QUERY_SET_COOKIE = 43 +HTTP_QUERY_COOKIE = 44 +HTTP_QUERY_REQUEST_METHOD = 45 +HTTP_QUERY_REFRESH = 46 +HTTP_QUERY_CONTENT_DISPOSITION = 47 +HTTP_QUERY_AGE = 48 +HTTP_QUERY_CACHE_CONTROL = 49 +HTTP_QUERY_CONTENT_BASE = 50 +HTTP_QUERY_CONTENT_LOCATION = 51 +HTTP_QUERY_CONTENT_MD5 = 52 +HTTP_QUERY_CONTENT_RANGE = 53 +HTTP_QUERY_ETAG = 54 +HTTP_QUERY_HOST = 55 +HTTP_QUERY_IF_MATCH = 56 +HTTP_QUERY_IF_NONE_MATCH = 57 +HTTP_QUERY_IF_RANGE = 58 +HTTP_QUERY_IF_UNMODIFIED_SINCE = 59 +HTTP_QUERY_MAX_FORWARDS = 60 +HTTP_QUERY_PROXY_AUTHORIZATION = 61 +HTTP_QUERY_RANGE = 62 +HTTP_QUERY_TRANSFER_ENCODING = 63 +HTTP_QUERY_UPGRADE = 64 +HTTP_QUERY_VARY = 65 +HTTP_QUERY_VIA = 66 +HTTP_QUERY_WARNING = 67 +HTTP_QUERY_EXPECT = 68 +HTTP_QUERY_PROXY_CONNECTION = 69 +HTTP_QUERY_UNLESS_MODIFIED_SINCE = 70 +HTTP_QUERY_ECHO_REQUEST = 71 +HTTP_QUERY_ECHO_REPLY = 72 +HTTP_QUERY_ECHO_HEADERS = 73 +HTTP_QUERY_ECHO_HEADERS_CRLF = 74 +HTTP_QUERY_PROXY_SUPPORT = 75 +HTTP_QUERY_AUTHENTICATION_INFO = 76 +HTTP_QUERY_PASSPORT_URLS = 77 +HTTP_QUERY_PASSPORT_CONFIG = 78 +HTTP_QUERY_MAX = 78 +HTTP_QUERY_CUSTOM = 65535 +HTTP_QUERY_FLAG_REQUEST_HEADERS = (-2147483648) +HTTP_QUERY_FLAG_SYSTEMTIME = 0x40000000 +HTTP_QUERY_FLAG_NUMBER = 0x20000000 +HTTP_QUERY_FLAG_COALESCE = 0x10000000 +HTTP_QUERY_MODIFIER_FLAGS_MASK = (HTTP_QUERY_FLAG_REQUEST_HEADERS \ + | HTTP_QUERY_FLAG_SYSTEMTIME \ + | HTTP_QUERY_FLAG_NUMBER \ + | HTTP_QUERY_FLAG_COALESCE \ + ) +HTTP_QUERY_HEADER_MASK = (~HTTP_QUERY_MODIFIER_FLAGS_MASK) +HTTP_STATUS_CONTINUE = 100 +HTTP_STATUS_SWITCH_PROTOCOLS = 101 +HTTP_STATUS_OK = 200 +HTTP_STATUS_CREATED = 201 +HTTP_STATUS_ACCEPTED = 202 +HTTP_STATUS_PARTIAL = 203 +HTTP_STATUS_NO_CONTENT = 204 +HTTP_STATUS_RESET_CONTENT = 205 +HTTP_STATUS_PARTIAL_CONTENT = 206 +HTTP_STATUS_AMBIGUOUS = 300 +HTTP_STATUS_MOVED = 301 +HTTP_STATUS_REDIRECT = 302 +HTTP_STATUS_REDIRECT_METHOD = 303 +HTTP_STATUS_NOT_MODIFIED = 304 +HTTP_STATUS_USE_PROXY = 305 +HTTP_STATUS_REDIRECT_KEEP_VERB = 307 +HTTP_STATUS_BAD_REQUEST = 400 +HTTP_STATUS_DENIED = 401 +HTTP_STATUS_PAYMENT_REQ = 402 +HTTP_STATUS_FORBIDDEN = 403 +HTTP_STATUS_NOT_FOUND = 404 +HTTP_STATUS_BAD_METHOD = 405 +HTTP_STATUS_NONE_ACCEPTABLE = 406 +HTTP_STATUS_PROXY_AUTH_REQ = 407 +HTTP_STATUS_REQUEST_TIMEOUT = 408 +HTTP_STATUS_CONFLICT = 409 +HTTP_STATUS_GONE = 410 +HTTP_STATUS_LENGTH_REQUIRED = 411 +HTTP_STATUS_PRECOND_FAILED = 412 +HTTP_STATUS_REQUEST_TOO_LARGE = 413 +HTTP_STATUS_URI_TOO_LONG = 414 +HTTP_STATUS_UNSUPPORTED_MEDIA = 415 +HTTP_STATUS_RETRY_WITH = 449 +HTTP_STATUS_SERVER_ERROR = 500 +HTTP_STATUS_NOT_SUPPORTED = 501 +HTTP_STATUS_BAD_GATEWAY = 502 +HTTP_STATUS_SERVICE_UNAVAIL = 503 +HTTP_STATUS_GATEWAY_TIMEOUT = 504 +HTTP_STATUS_VERSION_NOT_SUP = 505 +HTTP_STATUS_FIRST = HTTP_STATUS_CONTINUE +HTTP_STATUS_LAST = HTTP_STATUS_VERSION_NOT_SUP +HTTP_ADDREQ_INDEX_MASK = 0x0000FFFF +HTTP_ADDREQ_FLAGS_MASK = (-65536) +HTTP_ADDREQ_FLAG_ADD_IF_NEW = 0x10000000 +HTTP_ADDREQ_FLAG_ADD = 0x20000000 +HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA = 0x40000000 +HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON = 0x01000000 +HTTP_ADDREQ_FLAG_COALESCE = HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA +HTTP_ADDREQ_FLAG_REPLACE = (-2147483648) +HSR_ASYNC = WININET_API_FLAG_ASYNC +HSR_SYNC = WININET_API_FLAG_SYNC +HSR_USE_CONTEXT = WININET_API_FLAG_USE_CONTEXT +HSR_INITIATE = 0x00000008 +HSR_DOWNLOAD = 0x00000010 +HSR_CHUNKED = 0x00000020 +INTERNET_COOKIE_IS_SECURE = 0x01 +INTERNET_COOKIE_IS_SESSION = 0x02 +INTERNET_COOKIE_THIRD_PARTY = 0x10 +INTERNET_COOKIE_PROMPT_REQUIRED = 0x20 +INTERNET_COOKIE_EVALUATE_P3P = 0x40 +INTERNET_COOKIE_APPLY_P3P = 0x80 +INTERNET_COOKIE_P3P_ENABLED = 0x100 +INTERNET_COOKIE_IS_RESTRICTED = 0x200 +INTERNET_COOKIE_IE6 = 0x400 +INTERNET_COOKIE_IS_LEGACY = 0x800 +FLAG_ICC_FORCE_CONNECTION = 0x00000001 +FLAGS_ERROR_UI_FILTER_FOR_ERRORS = 0x01 +FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS = 0x02 +FLAGS_ERROR_UI_FLAGS_GENERATE_DATA = 0x04 +FLAGS_ERROR_UI_FLAGS_NO_UI = 0x08 +FLAGS_ERROR_UI_SERIALIZE_DIALOGS = 0x10 +INTERNET_ERROR_BASE = 12000 +ERROR_INTERNET_OUT_OF_HANDLES = (INTERNET_ERROR_BASE + 1) +ERROR_INTERNET_TIMEOUT = (INTERNET_ERROR_BASE + 2) +ERROR_INTERNET_EXTENDED_ERROR = (INTERNET_ERROR_BASE + 3) +ERROR_INTERNET_INTERNAL_ERROR = (INTERNET_ERROR_BASE + 4) +ERROR_INTERNET_INVALID_URL = (INTERNET_ERROR_BASE + 5) +ERROR_INTERNET_UNRECOGNIZED_SCHEME = (INTERNET_ERROR_BASE + 6) +ERROR_INTERNET_NAME_NOT_RESOLVED = (INTERNET_ERROR_BASE + 7) +ERROR_INTERNET_PROTOCOL_NOT_FOUND = (INTERNET_ERROR_BASE + 8) +ERROR_INTERNET_INVALID_OPTION = (INTERNET_ERROR_BASE + 9) +ERROR_INTERNET_BAD_OPTION_LENGTH = (INTERNET_ERROR_BASE + 10) +ERROR_INTERNET_OPTION_NOT_SETTABLE = (INTERNET_ERROR_BASE + 11) +ERROR_INTERNET_SHUTDOWN = (INTERNET_ERROR_BASE + 12) +ERROR_INTERNET_INCORRECT_USER_NAME = (INTERNET_ERROR_BASE + 13) +ERROR_INTERNET_INCORRECT_PASSWORD = (INTERNET_ERROR_BASE + 14) +ERROR_INTERNET_LOGIN_FAILURE = (INTERNET_ERROR_BASE + 15) +ERROR_INTERNET_INVALID_OPERATION = (INTERNET_ERROR_BASE + 16) +ERROR_INTERNET_OPERATION_CANCELLED = (INTERNET_ERROR_BASE + 17) +ERROR_INTERNET_INCORRECT_HANDLE_TYPE = (INTERNET_ERROR_BASE + 18) +ERROR_INTERNET_INCORRECT_HANDLE_STATE = (INTERNET_ERROR_BASE + 19) +ERROR_INTERNET_NOT_PROXY_REQUEST = (INTERNET_ERROR_BASE + 20) +ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND = (INTERNET_ERROR_BASE + 21) +ERROR_INTERNET_BAD_REGISTRY_PARAMETER = (INTERNET_ERROR_BASE + 22) +ERROR_INTERNET_NO_DIRECT_ACCESS = (INTERNET_ERROR_BASE + 23) +ERROR_INTERNET_NO_CONTEXT = (INTERNET_ERROR_BASE + 24) +ERROR_INTERNET_NO_CALLBACK = (INTERNET_ERROR_BASE + 25) +ERROR_INTERNET_REQUEST_PENDING = (INTERNET_ERROR_BASE + 26) +ERROR_INTERNET_INCORRECT_FORMAT = (INTERNET_ERROR_BASE + 27) +ERROR_INTERNET_ITEM_NOT_FOUND = (INTERNET_ERROR_BASE + 28) +ERROR_INTERNET_CANNOT_CONNECT = (INTERNET_ERROR_BASE + 29) +ERROR_INTERNET_CONNECTION_ABORTED = (INTERNET_ERROR_BASE + 30) +ERROR_INTERNET_CONNECTION_RESET = (INTERNET_ERROR_BASE + 31) +ERROR_INTERNET_FORCE_RETRY = (INTERNET_ERROR_BASE + 32) +ERROR_INTERNET_INVALID_PROXY_REQUEST = (INTERNET_ERROR_BASE + 33) +ERROR_INTERNET_NEED_UI = (INTERNET_ERROR_BASE + 34) +ERROR_INTERNET_HANDLE_EXISTS = (INTERNET_ERROR_BASE + 36) +ERROR_INTERNET_SEC_CERT_DATE_INVALID = (INTERNET_ERROR_BASE + 37) +ERROR_INTERNET_SEC_CERT_CN_INVALID = (INTERNET_ERROR_BASE + 38) +ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR = (INTERNET_ERROR_BASE + 39) +ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR = (INTERNET_ERROR_BASE + 40) +ERROR_INTERNET_MIXED_SECURITY = (INTERNET_ERROR_BASE + 41) +ERROR_INTERNET_CHG_POST_IS_NON_SECURE = (INTERNET_ERROR_BASE + 42) +ERROR_INTERNET_POST_IS_NON_SECURE = (INTERNET_ERROR_BASE + 43) +ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED = (INTERNET_ERROR_BASE + 44) +ERROR_INTERNET_INVALID_CA = (INTERNET_ERROR_BASE + 45) +ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP = (INTERNET_ERROR_BASE + 46) +ERROR_INTERNET_ASYNC_THREAD_FAILED = (INTERNET_ERROR_BASE + 47) +ERROR_INTERNET_REDIRECT_SCHEME_CHANGE = (INTERNET_ERROR_BASE + 48) +ERROR_INTERNET_DIALOG_PENDING = (INTERNET_ERROR_BASE + 49) +ERROR_INTERNET_RETRY_DIALOG = (INTERNET_ERROR_BASE + 50) +ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR = (INTERNET_ERROR_BASE + 52) +ERROR_INTERNET_INSERT_CDROM = (INTERNET_ERROR_BASE + 53) +ERROR_INTERNET_FORTEZZA_LOGIN_NEEDED = (INTERNET_ERROR_BASE + 54) +ERROR_INTERNET_SEC_CERT_ERRORS = (INTERNET_ERROR_BASE + 55) +ERROR_INTERNET_SEC_CERT_NO_REV = (INTERNET_ERROR_BASE + 56) +ERROR_INTERNET_SEC_CERT_REV_FAILED = (INTERNET_ERROR_BASE + 57) +ERROR_FTP_TRANSFER_IN_PROGRESS = (INTERNET_ERROR_BASE + 110) +ERROR_FTP_DROPPED = (INTERNET_ERROR_BASE + 111) +ERROR_FTP_NO_PASSIVE_MODE = (INTERNET_ERROR_BASE + 112) +ERROR_GOPHER_PROTOCOL_ERROR = (INTERNET_ERROR_BASE + 130) +ERROR_GOPHER_NOT_FILE = (INTERNET_ERROR_BASE + 131) +ERROR_GOPHER_DATA_ERROR = (INTERNET_ERROR_BASE + 132) +ERROR_GOPHER_END_OF_DATA = (INTERNET_ERROR_BASE + 133) +ERROR_GOPHER_INVALID_LOCATOR = (INTERNET_ERROR_BASE + 134) +ERROR_GOPHER_INCORRECT_LOCATOR_TYPE = (INTERNET_ERROR_BASE + 135) +ERROR_GOPHER_NOT_GOPHER_PLUS = (INTERNET_ERROR_BASE + 136) +ERROR_GOPHER_ATTRIBUTE_NOT_FOUND = (INTERNET_ERROR_BASE + 137) +ERROR_GOPHER_UNKNOWN_LOCATOR = (INTERNET_ERROR_BASE + 138) +ERROR_HTTP_HEADER_NOT_FOUND = (INTERNET_ERROR_BASE + 150) +ERROR_HTTP_DOWNLEVEL_SERVER = (INTERNET_ERROR_BASE + 151) +ERROR_HTTP_INVALID_SERVER_RESPONSE = (INTERNET_ERROR_BASE + 152) +ERROR_HTTP_INVALID_HEADER = (INTERNET_ERROR_BASE + 153) +ERROR_HTTP_INVALID_QUERY_REQUEST = (INTERNET_ERROR_BASE + 154) +ERROR_HTTP_HEADER_ALREADY_EXISTS = (INTERNET_ERROR_BASE + 155) +ERROR_HTTP_REDIRECT_FAILED = (INTERNET_ERROR_BASE + 156) +ERROR_HTTP_NOT_REDIRECTED = (INTERNET_ERROR_BASE + 160) +ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION = (INTERNET_ERROR_BASE + 161) +ERROR_HTTP_COOKIE_DECLINED = (INTERNET_ERROR_BASE + 162) +ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION = (INTERNET_ERROR_BASE + 168) +ERROR_INTERNET_SECURITY_CHANNEL_ERROR = (INTERNET_ERROR_BASE + 157) +ERROR_INTERNET_UNABLE_TO_CACHE_FILE = (INTERNET_ERROR_BASE + 158) +ERROR_INTERNET_TCPIP_NOT_INSTALLED = (INTERNET_ERROR_BASE + 159) +ERROR_INTERNET_DISCONNECTED = (INTERNET_ERROR_BASE + 163) +ERROR_INTERNET_SERVER_UNREACHABLE = (INTERNET_ERROR_BASE + 164) +ERROR_INTERNET_PROXY_SERVER_UNREACHABLE = (INTERNET_ERROR_BASE + 165) +ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT = (INTERNET_ERROR_BASE + 166) +ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT = (INTERNET_ERROR_BASE + 167) +ERROR_INTERNET_SEC_INVALID_CERT = (INTERNET_ERROR_BASE + 169) +ERROR_INTERNET_SEC_CERT_REVOKED = (INTERNET_ERROR_BASE + 170) +ERROR_INTERNET_FAILED_DUETOSECURITYCHECK = (INTERNET_ERROR_BASE + 171) +ERROR_INTERNET_NOT_INITIALIZED = (INTERNET_ERROR_BASE + 172) +ERROR_INTERNET_NEED_MSN_SSPI_PKG = (INTERNET_ERROR_BASE + 173) +ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY = (INTERNET_ERROR_BASE + 174) +INTERNET_ERROR_LAST = ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY +NORMAL_CACHE_ENTRY = 0x00000001 +STICKY_CACHE_ENTRY = 0x00000004 +EDITED_CACHE_ENTRY = 0x00000008 +TRACK_OFFLINE_CACHE_ENTRY = 0x00000010 +TRACK_ONLINE_CACHE_ENTRY = 0x00000020 +SPARSE_CACHE_ENTRY = 0x00010000 +COOKIE_CACHE_ENTRY = 0x00100000 +URLHISTORY_CACHE_ENTRY = 0x00200000 +URLCACHE_FIND_DEFAULT_FILTER = NORMAL_CACHE_ENTRY \ + | COOKIE_CACHE_ENTRY \ + | URLHISTORY_CACHE_ENTRY \ + | TRACK_OFFLINE_CACHE_ENTRY \ + | TRACK_ONLINE_CACHE_ENTRY \ + | STICKY_CACHE_ENTRY +CACHEGROUP_ATTRIBUTE_GET_ALL = (-1) +CACHEGROUP_ATTRIBUTE_BASIC = 0x00000001 +CACHEGROUP_ATTRIBUTE_FLAG = 0x00000002 +CACHEGROUP_ATTRIBUTE_TYPE = 0x00000004 +CACHEGROUP_ATTRIBUTE_QUOTA = 0x00000008 +CACHEGROUP_ATTRIBUTE_GROUPNAME = 0x00000010 +CACHEGROUP_ATTRIBUTE_STORAGE = 0x00000020 +CACHEGROUP_FLAG_NONPURGEABLE = 0x00000001 +CACHEGROUP_FLAG_GIDONLY = 0x00000004 +CACHEGROUP_FLAG_FLUSHURL_ONDELETE = 0x00000002 +CACHEGROUP_SEARCH_ALL = 0x00000000 +CACHEGROUP_SEARCH_BYURL = 0x00000001 +CACHEGROUP_TYPE_INVALID = 0x00000001 +CACHEGROUP_READWRITE_MASK = \ + CACHEGROUP_ATTRIBUTE_TYPE \ + | CACHEGROUP_ATTRIBUTE_QUOTA \ + | CACHEGROUP_ATTRIBUTE_GROUPNAME \ + | CACHEGROUP_ATTRIBUTE_STORAGE +GROUPNAME_MAX_LENGTH = 120 +GROUP_OWNER_STORAGE_SIZE = 4 +CACHE_ENTRY_ATTRIBUTE_FC = 0x00000004 +CACHE_ENTRY_HITRATE_FC = 0x00000010 +CACHE_ENTRY_MODTIME_FC = 0x00000040 +CACHE_ENTRY_EXPTIME_FC = 0x00000080 +CACHE_ENTRY_ACCTIME_FC = 0x00000100 +CACHE_ENTRY_SYNCTIME_FC = 0x00000200 +CACHE_ENTRY_HEADERINFO_FC = 0x00000400 +CACHE_ENTRY_EXEMPT_DELTA_FC = 0x00000800 +INTERNET_CACHE_GROUP_ADD = 0 +INTERNET_CACHE_GROUP_REMOVE = 1 +INTERNET_DIAL_FORCE_PROMPT = 0x2000 +INTERNET_DIAL_SHOW_OFFLINE = 0x4000 +INTERNET_DIAL_UNATTENDED = 0x8000 +INTERENT_GOONLINE_REFRESH = 0x00000001 +INTERENT_GOONLINE_MASK = 0x00000001 +INTERNET_AUTODIAL_FORCE_ONLINE = 1 +INTERNET_AUTODIAL_FORCE_UNATTENDED = 2 +INTERNET_AUTODIAL_FAILIFSECURITYCHECK = 4 +INTERNET_AUTODIAL_OVERRIDE_NET_PRESENT = 8 +INTERNET_AUTODIAL_FLAGS_MASK = (INTERNET_AUTODIAL_FORCE_ONLINE | INTERNET_AUTODIAL_FORCE_UNATTENDED | INTERNET_AUTODIAL_FAILIFSECURITYCHECK | INTERNET_AUTODIAL_OVERRIDE_NET_PRESENT) +PROXY_AUTO_DETECT_TYPE_DHCP = 1 +PROXY_AUTO_DETECT_TYPE_DNS_A = 2 +INTERNET_CONNECTION_MODEM = 0x01 +INTERNET_CONNECTION_LAN = 0x02 +INTERNET_CONNECTION_PROXY = 0x04 +INTERNET_CONNECTION_MODEM_BUSY = 0x08 +INTERNET_RAS_INSTALLED = 0x10 +INTERNET_CONNECTION_OFFLINE = 0x20 +INTERNET_CONNECTION_CONFIGURED = 0x40 +INTERNET_CUSTOMDIAL_CONNECT = 0 +INTERNET_CUSTOMDIAL_UNATTENDED = 1 +INTERNET_CUSTOMDIAL_DISCONNECT = 2 +INTERNET_CUSTOMDIAL_SHOWOFFLINE = 4 +INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED = 1 +INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE = 2 +INTERNET_CUSTOMDIAL_CAN_HANGUP = 4 +INTERNET_DIALSTATE_DISCONNECTED = 1 +INTERNET_IDENTITY_FLAG_PRIVATE_CACHE = 0x01 +INTERNET_IDENTITY_FLAG_SHARED_CACHE = 0x02 +INTERNET_IDENTITY_FLAG_CLEAR_DATA = 0x04 +INTERNET_IDENTITY_FLAG_CLEAR_COOKIES = 0x08 +INTERNET_IDENTITY_FLAG_CLEAR_HISTORY = 0x10 +INTERNET_IDENTITY_FLAG_CLEAR_CONTENT = 0x20 +INTERNET_SUPPRESS_RESET_ALL = 0x00 +INTERNET_SUPPRESS_COOKIE_POLICY = 0x01 +INTERNET_SUPPRESS_COOKIE_POLICY_RESET = 0x02 +PRIVACY_TEMPLATE_NO_COOKIES = 0 +PRIVACY_TEMPLATE_HIGH = 1 +PRIVACY_TEMPLATE_MEDIUM_HIGH = 2 +PRIVACY_TEMPLATE_MEDIUM = 3 +PRIVACY_TEMPLATE_MEDIUM_LOW = 4 +PRIVACY_TEMPLATE_LOW = 5 +PRIVACY_TEMPLATE_CUSTOM = 100 +PRIVACY_TEMPLATE_ADVANCED = 101 +PRIVACY_TEMPLATE_MAX = PRIVACY_TEMPLATE_LOW +PRIVACY_TYPE_FIRST_PARTY = 0 +PRIVACY_TYPE_THIRD_PARTY = 1 + +# Included from poppack.h diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/win32netcon.py b/thirdparty/python25/Lib/site-packages/win32/lib/win32netcon.py new file mode 100644 index 000000000..4b4a0f50c --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/win32netcon.py @@ -0,0 +1,652 @@ +# Generated by h2py from lmaccess.h + +# Included from lmcons.h +CNLEN = 15 +LM20_CNLEN = 15 +DNLEN = CNLEN +LM20_DNLEN = LM20_CNLEN +UNCLEN = (CNLEN+2) +LM20_UNCLEN = (LM20_CNLEN+2) +NNLEN = 80 +LM20_NNLEN = 12 +RMLEN = (UNCLEN+1+NNLEN) +LM20_RMLEN = (LM20_UNCLEN+1+LM20_NNLEN) +SNLEN = 80 +LM20_SNLEN = 15 +STXTLEN = 256 +LM20_STXTLEN = 63 +PATHLEN = 256 +LM20_PATHLEN = 256 +DEVLEN = 80 +LM20_DEVLEN = 8 +EVLEN = 16 +UNLEN = 256 +LM20_UNLEN = 20 +GNLEN = UNLEN +LM20_GNLEN = LM20_UNLEN +PWLEN = 256 +LM20_PWLEN = 14 +SHPWLEN = 8 +CLTYPE_LEN = 12 +MAXCOMMENTSZ = 256 +LM20_MAXCOMMENTSZ = 48 +QNLEN = NNLEN +LM20_QNLEN = LM20_NNLEN +ALERTSZ = 128 +NETBIOS_NAME_LEN = 16 +CRYPT_KEY_LEN = 7 +CRYPT_TXT_LEN = 8 +ENCRYPTED_PWLEN = 16 +SESSION_PWLEN = 24 +SESSION_CRYPT_KLEN = 21 +PARMNUM_ALL = 0 +PARM_ERROR_NONE = 0 +PARMNUM_BASE_INFOLEVEL = 1000 +NULL = 0 +PLATFORM_ID_DOS = 300 +PLATFORM_ID_OS2 = 400 +PLATFORM_ID_NT = 500 +PLATFORM_ID_OSF = 600 +PLATFORM_ID_VMS = 700 +MAX_LANMAN_MESSAGE_ID = 5799 +UF_SCRIPT = 1 +UF_ACCOUNTDISABLE = 2 +UF_HOMEDIR_REQUIRED = 8 +UF_LOCKOUT = 16 +UF_PASSWD_NOTREQD = 32 +UF_PASSWD_CANT_CHANGE = 64 +UF_TEMP_DUPLICATE_ACCOUNT = 256 +UF_NORMAL_ACCOUNT = 512 +UF_INTERDOMAIN_TRUST_ACCOUNT = 2048 +UF_WORKSTATION_TRUST_ACCOUNT = 4096 +UF_SERVER_TRUST_ACCOUNT = 8192 +UF_MACHINE_ACCOUNT_MASK = ( UF_INTERDOMAIN_TRUST_ACCOUNT | \ + UF_WORKSTATION_TRUST_ACCOUNT | \ + UF_SERVER_TRUST_ACCOUNT ) +UF_ACCOUNT_TYPE_MASK = ( \ + UF_TEMP_DUPLICATE_ACCOUNT | \ + UF_NORMAL_ACCOUNT | \ + UF_INTERDOMAIN_TRUST_ACCOUNT | \ + UF_WORKSTATION_TRUST_ACCOUNT | \ + UF_SERVER_TRUST_ACCOUNT \ + ) +UF_DONT_EXPIRE_PASSWD = 65536 +UF_MNS_LOGON_ACCOUNT = 131072 +UF_SETTABLE_BITS = ( \ + UF_SCRIPT | \ + UF_ACCOUNTDISABLE | \ + UF_LOCKOUT | \ + UF_HOMEDIR_REQUIRED | \ + UF_PASSWD_NOTREQD | \ + UF_PASSWD_CANT_CHANGE | \ + UF_ACCOUNT_TYPE_MASK | \ + UF_DONT_EXPIRE_PASSWD | \ + UF_MNS_LOGON_ACCOUNT \ + ) +FILTER_TEMP_DUPLICATE_ACCOUNT = (1) +FILTER_NORMAL_ACCOUNT = (2) +FILTER_INTERDOMAIN_TRUST_ACCOUNT = (8) +FILTER_WORKSTATION_TRUST_ACCOUNT = (16) +FILTER_SERVER_TRUST_ACCOUNT = (32) +LG_INCLUDE_INDIRECT = (1) +AF_OP_PRINT = 1 +AF_OP_COMM = 2 +AF_OP_SERVER = 4 +AF_OP_ACCOUNTS = 8 +AF_SETTABLE_BITS = (AF_OP_PRINT | AF_OP_COMM | \ + AF_OP_SERVER | AF_OP_ACCOUNTS) +UAS_ROLE_STANDALONE = 0 +UAS_ROLE_MEMBER = 1 +UAS_ROLE_BACKUP = 2 +UAS_ROLE_PRIMARY = 3 +USER_NAME_PARMNUM = 1 +USER_PASSWORD_PARMNUM = 3 +USER_PASSWORD_AGE_PARMNUM = 4 +USER_PRIV_PARMNUM = 5 +USER_HOME_DIR_PARMNUM = 6 +USER_COMMENT_PARMNUM = 7 +USER_FLAGS_PARMNUM = 8 +USER_SCRIPT_PATH_PARMNUM = 9 +USER_AUTH_FLAGS_PARMNUM = 10 +USER_FULL_NAME_PARMNUM = 11 +USER_USR_COMMENT_PARMNUM = 12 +USER_PARMS_PARMNUM = 13 +USER_WORKSTATIONS_PARMNUM = 14 +USER_LAST_LOGON_PARMNUM = 15 +USER_LAST_LOGOFF_PARMNUM = 16 +USER_ACCT_EXPIRES_PARMNUM = 17 +USER_MAX_STORAGE_PARMNUM = 18 +USER_UNITS_PER_WEEK_PARMNUM = 19 +USER_LOGON_HOURS_PARMNUM = 20 +USER_PAD_PW_COUNT_PARMNUM = 21 +USER_NUM_LOGONS_PARMNUM = 22 +USER_LOGON_SERVER_PARMNUM = 23 +USER_COUNTRY_CODE_PARMNUM = 24 +USER_CODE_PAGE_PARMNUM = 25 +USER_PRIMARY_GROUP_PARMNUM = 51 +USER_PROFILE = 52 +USER_PROFILE_PARMNUM = 52 +USER_HOME_DIR_DRIVE_PARMNUM = 53 +USER_NAME_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_NAME_PARMNUM) +USER_PASSWORD_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_PASSWORD_PARMNUM) +USER_PASSWORD_AGE_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_PASSWORD_AGE_PARMNUM) +USER_PRIV_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_PRIV_PARMNUM) +USER_HOME_DIR_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_HOME_DIR_PARMNUM) +USER_COMMENT_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_COMMENT_PARMNUM) +USER_FLAGS_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_FLAGS_PARMNUM) +USER_SCRIPT_PATH_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_SCRIPT_PATH_PARMNUM) +USER_AUTH_FLAGS_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_AUTH_FLAGS_PARMNUM) +USER_FULL_NAME_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_FULL_NAME_PARMNUM) +USER_USR_COMMENT_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_USR_COMMENT_PARMNUM) +USER_PARMS_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_PARMS_PARMNUM) +USER_WORKSTATIONS_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_WORKSTATIONS_PARMNUM) +USER_LAST_LOGON_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_LAST_LOGON_PARMNUM) +USER_LAST_LOGOFF_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_LAST_LOGOFF_PARMNUM) +USER_ACCT_EXPIRES_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_ACCT_EXPIRES_PARMNUM) +USER_MAX_STORAGE_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_MAX_STORAGE_PARMNUM) +USER_UNITS_PER_WEEK_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_UNITS_PER_WEEK_PARMNUM) +USER_LOGON_HOURS_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_LOGON_HOURS_PARMNUM) +USER_PAD_PW_COUNT_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_PAD_PW_COUNT_PARMNUM) +USER_NUM_LOGONS_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_NUM_LOGONS_PARMNUM) +USER_LOGON_SERVER_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_LOGON_SERVER_PARMNUM) +USER_COUNTRY_CODE_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_COUNTRY_CODE_PARMNUM) +USER_CODE_PAGE_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_CODE_PAGE_PARMNUM) +USER_PRIMARY_GROUP_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_PRIMARY_GROUP_PARMNUM) +USER_HOME_DIR_DRIVE_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + USER_HOME_DIR_DRIVE_PARMNUM) +NULL_USERSETINFO_PASSWD = " " +UNITS_PER_DAY = 24 +UNITS_PER_WEEK = UNITS_PER_DAY * 7 +USER_PRIV_MASK = 3 +USER_PRIV_GUEST = 0 +USER_PRIV_USER = 1 +USER_PRIV_ADMIN = 2 +MAX_PASSWD_LEN = PWLEN +DEF_MIN_PWLEN = 6 +DEF_PWUNIQUENESS = 5 +DEF_MAX_PWHIST = 8 +DEF_MAX_BADPW = 0 +VALIDATED_LOGON = 0 +PASSWORD_EXPIRED = 2 +NON_VALIDATED_LOGON = 3 +VALID_LOGOFF = 1 +MODALS_MIN_PASSWD_LEN_PARMNUM = 1 +MODALS_MAX_PASSWD_AGE_PARMNUM = 2 +MODALS_MIN_PASSWD_AGE_PARMNUM = 3 +MODALS_FORCE_LOGOFF_PARMNUM = 4 +MODALS_PASSWD_HIST_LEN_PARMNUM = 5 +MODALS_ROLE_PARMNUM = 6 +MODALS_PRIMARY_PARMNUM = 7 +MODALS_DOMAIN_NAME_PARMNUM = 8 +MODALS_DOMAIN_ID_PARMNUM = 9 +MODALS_LOCKOUT_DURATION_PARMNUM = 10 +MODALS_LOCKOUT_OBSERVATION_WINDOW_PARMNUM = 11 +MODALS_LOCKOUT_THRESHOLD_PARMNUM = 12 +MODALS_MIN_PASSWD_LEN_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + MODALS_MIN_PASSWD_LEN_PARMNUM) +MODALS_MAX_PASSWD_AGE_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + MODALS_MAX_PASSWD_AGE_PARMNUM) +MODALS_MIN_PASSWD_AGE_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + MODALS_MIN_PASSWD_AGE_PARMNUM) +MODALS_FORCE_LOGOFF_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + MODALS_FORCE_LOGOFF_PARMNUM) +MODALS_PASSWD_HIST_LEN_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + MODALS_PASSWD_HIST_LEN_PARMNUM) +MODALS_ROLE_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + MODALS_ROLE_PARMNUM) +MODALS_PRIMARY_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + MODALS_PRIMARY_PARMNUM) +MODALS_DOMAIN_NAME_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + MODALS_DOMAIN_NAME_PARMNUM) +MODALS_DOMAIN_ID_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + MODALS_DOMAIN_ID_PARMNUM) +GROUPIDMASK = 32768 +GROUP_ALL_PARMNUM = 0 +GROUP_NAME_PARMNUM = 1 +GROUP_COMMENT_PARMNUM = 2 +GROUP_ATTRIBUTES_PARMNUM = 3 +GROUP_ALL_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + GROUP_ALL_PARMNUM) +GROUP_NAME_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + GROUP_NAME_PARMNUM) +GROUP_COMMENT_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + GROUP_COMMENT_PARMNUM) +GROUP_ATTRIBUTES_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + GROUP_ATTRIBUTES_PARMNUM) +LOCALGROUP_NAME_PARMNUM = 1 +LOCALGROUP_COMMENT_PARMNUM = 2 +MAXPERMENTRIES = 64 +ACCESS_NONE = 0 +ACCESS_READ = 1 +ACCESS_WRITE = 2 +ACCESS_CREATE = 4 +ACCESS_EXEC = 8 +ACCESS_DELETE = 16 +ACCESS_ATRIB = 32 +ACCESS_PERM = 64 +ACCESS_GROUP = 32768 +ACCESS_AUDIT = 1 +ACCESS_SUCCESS_OPEN = 16 +ACCESS_SUCCESS_WRITE = 32 +ACCESS_SUCCESS_DELETE = 64 +ACCESS_SUCCESS_ACL = 128 +ACCESS_SUCCESS_MASK = 240 +ACCESS_FAIL_OPEN = 256 +ACCESS_FAIL_WRITE = 512 +ACCESS_FAIL_DELETE = 1024 +ACCESS_FAIL_ACL = 2048 +ACCESS_FAIL_MASK = 3840 +ACCESS_FAIL_SHIFT = 4 +ACCESS_RESOURCE_NAME_PARMNUM = 1 +ACCESS_ATTR_PARMNUM = 2 +ACCESS_COUNT_PARMNUM = 3 +ACCESS_ACCESS_LIST_PARMNUM = 4 +ACCESS_RESOURCE_NAME_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + ACCESS_RESOURCE_NAME_PARMNUM) +ACCESS_ATTR_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + ACCESS_ATTR_PARMNUM) +ACCESS_COUNT_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + ACCESS_COUNT_PARMNUM) +ACCESS_ACCESS_LIST_INFOLEVEL = \ + (PARMNUM_BASE_INFOLEVEL + ACCESS_ACCESS_LIST_PARMNUM) +ACCESS_LETTERS = "RWCXDAP " +NETLOGON_CONTROL_QUERY = 1 +NETLOGON_CONTROL_REPLICATE = 2 +NETLOGON_CONTROL_SYNCHRONIZE = 3 +NETLOGON_CONTROL_PDC_REPLICATE = 4 +NETLOGON_CONTROL_REDISCOVER = 5 +NETLOGON_CONTROL_TC_QUERY = 6 +NETLOGON_CONTROL_TRANSPORT_NOTIFY = 7 +NETLOGON_CONTROL_FIND_USER = 8 +NETLOGON_CONTROL_UNLOAD_NETLOGON_DLL = 65531 +NETLOGON_CONTROL_BACKUP_CHANGE_LOG = 65532 +NETLOGON_CONTROL_TRUNCATE_LOG = 65533 +NETLOGON_CONTROL_SET_DBFLAG = 65534 +NETLOGON_CONTROL_BREAKPOINT = 65535 +NETLOGON_REPLICATION_NEEDED = 1 +NETLOGON_REPLICATION_IN_PROGRESS = 2 +NETLOGON_FULL_SYNC_REPLICATION = 4 +NETLOGON_REDO_NEEDED = 8 + +###################### +# Manual stuff + +TEXT=lambda x:x + +MAX_PREFERRED_LENGTH = -1 +PARM_ERROR_UNKNOWN = -1 +MESSAGE_FILENAME = TEXT("NETMSG") +OS2MSG_FILENAME = TEXT("BASE") +HELP_MSG_FILENAME = TEXT("NETH") +BACKUP_MSG_FILENAME = TEXT("BAK.MSG") +TIMEQ_FOREVER = -1 +USER_MAXSTORAGE_UNLIMITED = -1 +USER_NO_LOGOFF = -1 +DEF_MAX_PWAGE = TIMEQ_FOREVER +DEF_MIN_PWAGE = 0 +DEF_FORCE_LOGOFF = -1 +ONE_DAY = 01*24*3600 +GROUP_SPECIALGRP_USERS = "USERS" +GROUP_SPECIALGRP_ADMINS = "ADMINS" +GROUP_SPECIALGRP_GUESTS = "GUESTS" +GROUP_SPECIALGRP_LOCAL = "LOCAL" +ACCESS_ALL = ( ACCESS_READ | ACCESS_WRITE | ACCESS_CREATE | ACCESS_EXEC | ACCESS_DELETE | ACCESS_ATRIB | ACCESS_PERM ) + +# From lmserver.h +SV_PLATFORM_ID_OS2 = 400 +SV_PLATFORM_ID_NT = 500 +MAJOR_VERSION_MASK = 15 +SV_TYPE_WORKSTATION = 1 +SV_TYPE_SERVER = 2 +SV_TYPE_SQLSERVER = 4 +SV_TYPE_DOMAIN_CTRL = 8 +SV_TYPE_DOMAIN_BAKCTRL = 16 +SV_TYPE_TIME_SOURCE = 32 +SV_TYPE_AFP = 64 +SV_TYPE_NOVELL = 128 +SV_TYPE_DOMAIN_MEMBER = 256 +SV_TYPE_PRINTQ_SERVER = 512 +SV_TYPE_DIALIN_SERVER = 1024 +SV_TYPE_XENIX_SERVER = 2048 +SV_TYPE_SERVER_UNIX = SV_TYPE_XENIX_SERVER +SV_TYPE_NT = 4096 +SV_TYPE_WFW = 8192 +SV_TYPE_SERVER_MFPN = 16384 +SV_TYPE_SERVER_NT = 32768 +SV_TYPE_POTENTIAL_BROWSER = 65536 +SV_TYPE_BACKUP_BROWSER = 131072 +SV_TYPE_MASTER_BROWSER = 262144 +SV_TYPE_DOMAIN_MASTER = 524288 +SV_TYPE_SERVER_OSF = 1048576 +SV_TYPE_SERVER_VMS = 2097152 +SV_TYPE_WINDOWS = 4194304 +SV_TYPE_DFS = 8388608 +SV_TYPE_CLUSTER_NT = 16777216 +SV_TYPE_DCE = 268435456 +SV_TYPE_ALTERNATE_XPORT = 536870912 +SV_TYPE_LOCAL_LIST_ONLY = 1073741824 +SV_TYPE_DOMAIN_ENUM = -2147483648 +SV_TYPE_ALL = -1 +SV_NODISC = (-1L) +SV_USERSECURITY = 1 +SV_SHARESECURITY = 0 +SV_HIDDEN = 1 +SV_VISIBLE = 0 +SV_PLATFORM_ID_PARMNUM = 101 +SV_NAME_PARMNUM = 102 +SV_VERSION_MAJOR_PARMNUM = 103 +SV_VERSION_MINOR_PARMNUM = 104 +SV_TYPE_PARMNUM = 105 +SV_COMMENT_PARMNUM = 5 +SV_USERS_PARMNUM = 107 +SV_DISC_PARMNUM = 10 +SV_HIDDEN_PARMNUM = 16 +SV_ANNOUNCE_PARMNUM = 17 +SV_ANNDELTA_PARMNUM = 18 +SV_USERPATH_PARMNUM = 112 +SV_ULIST_MTIME_PARMNUM = 401 +SV_GLIST_MTIME_PARMNUM = 402 +SV_ALIST_MTIME_PARMNUM = 403 +SV_ALERTS_PARMNUM = 11 +SV_SECURITY_PARMNUM = 405 +SV_NUMADMIN_PARMNUM = 406 +SV_LANMASK_PARMNUM = 407 +SV_GUESTACC_PARMNUM = 408 +SV_CHDEVQ_PARMNUM = 410 +SV_CHDEVJOBS_PARMNUM = 411 +SV_CONNECTIONS_PARMNUM = 412 +SV_SHARES_PARMNUM = 413 +SV_OPENFILES_PARMNUM = 414 +SV_SESSREQS_PARMNUM = 417 +SV_ACTIVELOCKS_PARMNUM = 419 +SV_NUMREQBUF_PARMNUM = 420 +SV_NUMBIGBUF_PARMNUM = 422 +SV_NUMFILETASKS_PARMNUM = 423 +SV_ALERTSCHED_PARMNUM = 37 +SV_ERRORALERT_PARMNUM = 38 +SV_LOGONALERT_PARMNUM = 39 +SV_ACCESSALERT_PARMNUM = 40 +SV_DISKALERT_PARMNUM = 41 +SV_NETIOALERT_PARMNUM = 42 +SV_MAXAUDITSZ_PARMNUM = 43 +SV_SRVHEURISTICS_PARMNUM = 431 +SV_SESSOPENS_PARMNUM = 501 +SV_SESSVCS_PARMNUM = 502 +SV_OPENSEARCH_PARMNUM = 503 +SV_SIZREQBUF_PARMNUM = 504 +SV_INITWORKITEMS_PARMNUM = 505 +SV_MAXWORKITEMS_PARMNUM = 506 +SV_RAWWORKITEMS_PARMNUM = 507 +SV_IRPSTACKSIZE_PARMNUM = 508 +SV_MAXRAWBUFLEN_PARMNUM = 509 +SV_SESSUSERS_PARMNUM = 510 +SV_SESSCONNS_PARMNUM = 511 +SV_MAXNONPAGEDMEMORYUSAGE_PARMNUM = 512 +SV_MAXPAGEDMEMORYUSAGE_PARMNUM = 513 +SV_ENABLESOFTCOMPAT_PARMNUM = 514 +SV_ENABLEFORCEDLOGOFF_PARMNUM = 515 +SV_TIMESOURCE_PARMNUM = 516 +SV_ACCEPTDOWNLEVELAPIS_PARMNUM = 517 +SV_LMANNOUNCE_PARMNUM = 518 +SV_DOMAIN_PARMNUM = 519 +SV_MAXCOPYREADLEN_PARMNUM = 520 +SV_MAXCOPYWRITELEN_PARMNUM = 521 +SV_MINKEEPSEARCH_PARMNUM = 522 +SV_MAXKEEPSEARCH_PARMNUM = 523 +SV_MINKEEPCOMPLSEARCH_PARMNUM = 524 +SV_MAXKEEPCOMPLSEARCH_PARMNUM = 525 +SV_THREADCOUNTADD_PARMNUM = 526 +SV_NUMBLOCKTHREADS_PARMNUM = 527 +SV_SCAVTIMEOUT_PARMNUM = 528 +SV_MINRCVQUEUE_PARMNUM = 529 +SV_MINFREEWORKITEMS_PARMNUM = 530 +SV_XACTMEMSIZE_PARMNUM = 531 +SV_THREADPRIORITY_PARMNUM = 532 +SV_MAXMPXCT_PARMNUM = 533 +SV_OPLOCKBREAKWAIT_PARMNUM = 534 +SV_OPLOCKBREAKRESPONSEWAIT_PARMNUM = 535 +SV_ENABLEOPLOCKS_PARMNUM = 536 +SV_ENABLEOPLOCKFORCECLOSE_PARMNUM = 537 +SV_ENABLEFCBOPENS_PARMNUM = 538 +SV_ENABLERAW_PARMNUM = 539 +SV_ENABLESHAREDNETDRIVES_PARMNUM = 540 +SV_MINFREECONNECTIONS_PARMNUM = 541 +SV_MAXFREECONNECTIONS_PARMNUM = 542 +SV_INITSESSTABLE_PARMNUM = 543 +SV_INITCONNTABLE_PARMNUM = 544 +SV_INITFILETABLE_PARMNUM = 545 +SV_INITSEARCHTABLE_PARMNUM = 546 +SV_ALERTSCHEDULE_PARMNUM = 547 +SV_ERRORTHRESHOLD_PARMNUM = 548 +SV_NETWORKERRORTHRESHOLD_PARMNUM = 549 +SV_DISKSPACETHRESHOLD_PARMNUM = 550 +SV_MAXLINKDELAY_PARMNUM = 552 +SV_MINLINKTHROUGHPUT_PARMNUM = 553 +SV_LINKINFOVALIDTIME_PARMNUM = 554 +SV_SCAVQOSINFOUPDATETIME_PARMNUM = 555 +SV_MAXWORKITEMIDLETIME_PARMNUM = 556 +SV_MAXRAWWORKITEMS_PARMNUM = 557 +SV_PRODUCTTYPE_PARMNUM = 560 +SV_SERVERSIZE_PARMNUM = 561 +SV_CONNECTIONLESSAUTODISC_PARMNUM = 562 +SV_SHARINGVIOLATIONRETRIES_PARMNUM = 563 +SV_SHARINGVIOLATIONDELAY_PARMNUM = 564 +SV_MAXGLOBALOPENSEARCH_PARMNUM = 565 +SV_REMOVEDUPLICATESEARCHES_PARMNUM = 566 +SV_LOCKVIOLATIONRETRIES_PARMNUM = 567 +SV_LOCKVIOLATIONOFFSET_PARMNUM = 568 +SV_LOCKVIOLATIONDELAY_PARMNUM = 569 +SV_MDLREADSWITCHOVER_PARMNUM = 570 +SV_CACHEDOPENLIMIT_PARMNUM = 571 +SV_CRITICALTHREADS_PARMNUM = 572 +SV_RESTRICTNULLSESSACCESS_PARMNUM = 573 +SV_ENABLEWFW311DIRECTIPX_PARMNUM = 574 +SV_OTHERQUEUEAFFINITY_PARMNUM = 575 +SV_QUEUESAMPLESECS_PARMNUM = 576 +SV_BALANCECOUNT_PARMNUM = 577 +SV_PREFERREDAFFINITY_PARMNUM = 578 +SV_MAXFREERFCBS_PARMNUM = 579 +SV_MAXFREEMFCBS_PARMNUM = 580 +SV_MAXFREELFCBS_PARMNUM = 581 +SV_MAXFREEPAGEDPOOLCHUNKS_PARMNUM = 582 +SV_MINPAGEDPOOLCHUNKSIZE_PARMNUM = 583 +SV_MAXPAGEDPOOLCHUNKSIZE_PARMNUM = 584 +SV_SENDSFROMPREFERREDPROCESSOR_PARMNUM = 585 +SV_MAXTHREADSPERQUEUE_PARMNUM = 586 +SV_CACHEDDIRECTORYLIMIT_PARMNUM = 587 +SV_MAXCOPYLENGTH_PARMNUM = 588 +SV_ENABLEBULKTRANSFER_PARMNUM = 589 +SV_ENABLECOMPRESSION_PARMNUM = 590 +SV_AUTOSHAREWKS_PARMNUM = 591 +SV_AUTOSHARESERVER_PARMNUM = 592 +SV_ENABLESECURITYSIGNATURE_PARMNUM = 593 +SV_REQUIRESECURITYSIGNATURE_PARMNUM = 594 +SV_MINCLIENTBUFFERSIZE_PARMNUM = 595 +SV_CONNECTIONNOSESSIONSTIMEOUT_PARMNUM = 596 +SVI1_NUM_ELEMENTS = 5 +SVI2_NUM_ELEMENTS = 40 +SVI3_NUM_ELEMENTS = 44 +SW_AUTOPROF_LOAD_MASK = 1 +SW_AUTOPROF_SAVE_MASK = 2 +SV_MAX_SRV_HEUR_LEN = 32 +SV_USERS_PER_LICENSE = 5 +SVTI2_REMAP_PIPE_NAMES = 2 + +# Generated by h2py from lmshare.h +SHARE_NETNAME_PARMNUM = 1 +SHARE_TYPE_PARMNUM = 3 +SHARE_REMARK_PARMNUM = 4 +SHARE_PERMISSIONS_PARMNUM = 5 +SHARE_MAX_USES_PARMNUM = 6 +SHARE_CURRENT_USES_PARMNUM = 7 +SHARE_PATH_PARMNUM = 8 +SHARE_PASSWD_PARMNUM = 9 +SHARE_FILE_SD_PARMNUM = 501 +SHI1_NUM_ELEMENTS = 4 +SHI2_NUM_ELEMENTS = 10 +STYPE_DISKTREE = 0 +STYPE_PRINTQ = 1 +STYPE_DEVICE = 2 +STYPE_IPC = 3 +STYPE_SPECIAL = -2147483648 +SHI1005_FLAGS_DFS = 1 +SHI1005_FLAGS_DFS_ROOT = 2 +COW_PERMACHINE = 4 +COW_PERUSER = 8 +CSC_CACHEABLE = 16 +CSC_NOFLOWOPS = 32 +CSC_AUTO_INWARD = 64 +CSC_AUTO_OUTWARD = 128 +SHI1005_VALID_FLAGS_SET = ( CSC_CACHEABLE | \ + CSC_NOFLOWOPS | \ + CSC_AUTO_INWARD | \ + CSC_AUTO_OUTWARD| \ + COW_PERMACHINE | \ + COW_PERUSER ) +SHI1007_VALID_FLAGS_SET = SHI1005_VALID_FLAGS_SET +SESS_GUEST = 1 +SESS_NOENCRYPTION = 2 +SESI1_NUM_ELEMENTS = 8 +SESI2_NUM_ELEMENTS = 9 +PERM_FILE_READ = 1 +PERM_FILE_WRITE = 2 +PERM_FILE_CREATE = 4 + +# Generated by h2py from d:\mssdk\include\winnetwk.h +WNNC_NET_MSNET = 65536 +WNNC_NET_LANMAN = 131072 +WNNC_NET_NETWARE = 196608 +WNNC_NET_VINES = 262144 +WNNC_NET_10NET = 327680 +WNNC_NET_LOCUS = 393216 +WNNC_NET_SUN_PC_NFS = 458752 +WNNC_NET_LANSTEP = 524288 +WNNC_NET_9TILES = 589824 +WNNC_NET_LANTASTIC = 655360 +WNNC_NET_AS400 = 720896 +WNNC_NET_FTP_NFS = 786432 +WNNC_NET_PATHWORKS = 851968 +WNNC_NET_LIFENET = 917504 +WNNC_NET_POWERLAN = 983040 +WNNC_NET_BWNFS = 1048576 +WNNC_NET_COGENT = 1114112 +WNNC_NET_FARALLON = 1179648 +WNNC_NET_APPLETALK = 1245184 +WNNC_NET_INTERGRAPH = 1310720 +WNNC_NET_SYMFONET = 1376256 +WNNC_NET_CLEARCASE = 1441792 +WNNC_NET_FRONTIER = 1507328 +WNNC_NET_BMC = 1572864 +WNNC_NET_DCE = 1638400 +WNNC_NET_DECORB = 2097152 +WNNC_NET_PROTSTOR = 2162688 +WNNC_NET_FJ_REDIR = 2228224 +WNNC_NET_DISTINCT = 2293760 +WNNC_NET_TWINS = 2359296 +WNNC_NET_RDR2SAMPLE = 2424832 +RESOURCE_CONNECTED = 1 +RESOURCE_GLOBALNET = 2 +RESOURCE_REMEMBERED = 3 +RESOURCE_RECENT = 4 +RESOURCE_CONTEXT = 5 +RESOURCETYPE_ANY = 0 +RESOURCETYPE_DISK = 1 +RESOURCETYPE_PRINT = 2 +RESOURCETYPE_RESERVED = 8 +RESOURCETYPE_UNKNOWN = -1 +RESOURCEUSAGE_CONNECTABLE = 1 +RESOURCEUSAGE_CONTAINER = 2 +RESOURCEUSAGE_NOLOCALDEVICE = 4 +RESOURCEUSAGE_SIBLING = 8 +RESOURCEUSAGE_ATTACHED = 16 +RESOURCEUSAGE_ALL = (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED) +RESOURCEUSAGE_RESERVED = -2147483648 +RESOURCEDISPLAYTYPE_GENERIC = 0 +RESOURCEDISPLAYTYPE_DOMAIN = 1 +RESOURCEDISPLAYTYPE_SERVER = 2 +RESOURCEDISPLAYTYPE_SHARE = 3 +RESOURCEDISPLAYTYPE_FILE = 4 +RESOURCEDISPLAYTYPE_GROUP = 5 +RESOURCEDISPLAYTYPE_NETWORK = 6 +RESOURCEDISPLAYTYPE_ROOT = 7 +RESOURCEDISPLAYTYPE_SHAREADMIN = 8 +RESOURCEDISPLAYTYPE_DIRECTORY = 9 +RESOURCEDISPLAYTYPE_TREE = 10 +RESOURCEDISPLAYTYPE_NDSCONTAINER = 11 +NETPROPERTY_PERSISTENT = 1 +CONNECT_UPDATE_PROFILE = 1 +CONNECT_UPDATE_RECENT = 2 +CONNECT_TEMPORARY = 4 +CONNECT_INTERACTIVE = 8 +CONNECT_PROMPT = 16 +CONNECT_NEED_DRIVE = 32 +CONNECT_REFCOUNT = 64 +CONNECT_REDIRECT = 128 +CONNECT_LOCALDRIVE = 256 +CONNECT_CURRENT_MEDIA = 512 +CONNECT_DEFERRED = 1024 +CONNECT_RESERVED = -16777216 +CONNDLG_RO_PATH = 1 +CONNDLG_CONN_POINT = 2 +CONNDLG_USE_MRU = 4 +CONNDLG_HIDE_BOX = 8 +CONNDLG_PERSIST = 16 +CONNDLG_NOT_PERSIST = 32 +DISC_UPDATE_PROFILE = 1 +DISC_NO_FORCE = 64 +UNIVERSAL_NAME_INFO_LEVEL = 1 +REMOTE_NAME_INFO_LEVEL = 2 +WNFMT_MULTILINE = 1 +WNFMT_ABBREVIATED = 2 +WNFMT_INENUM = 16 +WNFMT_CONNECTION = 32 +NETINFO_DLL16 = 1 +NETINFO_DISKRED = 4 +NETINFO_PRINTERRED = 8 +RP_LOGON = 1 +RP_INIFILE = 2 +PP_DISPLAYERRORS = 1 +WNCON_FORNETCARD = 1 +WNCON_NOTROUTED = 2 +WNCON_SLOWLINK = 4 +WNCON_DYNAMIC = 8 + +## NETSETUP_NAME_TYPE, used with NetValidateName +NetSetupUnknown = 0 +NetSetupMachine = 1 +NetSetupWorkgroup = 2 +NetSetupDomain = 3 +NetSetupNonExistentDomain = 4 +NetSetupDnsMachine = 5 + +## NETSETUP_JOIN_STATUS, use with NetGetJoinInformation +NetSetupUnknownStatus = 0 +NetSetupUnjoined = 1 +NetSetupWorkgroupName = 2 +NetSetupDomainName = 3 + diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/win32pdhquery.py b/thirdparty/python25/Lib/site-packages/win32/lib/win32pdhquery.py new file mode 100644 index 000000000..0ae222330 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/win32pdhquery.py @@ -0,0 +1,515 @@ +''' +Performance Data Helper (PDH) Query Classes + +Wrapper classes for end-users and high-level access to the PDH query +mechanisms. PDH is a win32-specific mechanism for accessing the +performance data made available by the system. The Python for Windows +PDH module does not implement the "Registry" interface, implementing +the more straightforward Query-based mechanism. + +The basic idea of a PDH Query is an object which can query the system +about the status of any number of "counters." The counters are paths +to a particular piece of performance data. For instance, the path +'\\Memory\\Available Bytes' describes just about exactly what it says +it does, the amount of free memory on the default computer expressed +in Bytes. These paths can be considerably more complex than this, +but part of the point of this wrapper module is to hide that +complexity from the end-user/programmer. + +EXAMPLE: A more complex Path + '\\\\RAISTLIN\\PhysicalDisk(_Total)\\Avg. Disk Bytes/Read' + Raistlin --> Computer Name + PhysicalDisk --> Object Name + _Total --> The particular Instance (in this case, all instances, i.e. all drives) + Avg. Disk Bytes/Read --> The piece of data being monitored. + +EXAMPLE: Collecting Data with a Query + As an example, the following code implements a logger which allows the + user to choose what counters they would like to log, and logs those + counters for 30 seconds, at two-second intervals. + + query = Query() + query.addcounterbybrowsing() + query.collectdatafor(30,2) + + The data is now stored in a list of lists as: + query.curresults + + The counters(paths) which were used to collect the data are: + query.curpaths + + You can use the win32pdh.ParseCounterPath(path) utility function + to turn the paths into more easily read values for your task, or + write the data to a file, or do whatever you want with it. + +OTHER NOTABLE METHODS: + query.collectdatawhile(period) # start a logging thread for collecting data + query.collectdatawhile_stop() # signal the logging thread to stop logging + query.collectdata() # run the query only once + query.addperfcounter(object, counter, machine=None) # add a standard performance counter + query.addinstcounter(object, counter,machine=None,objtype = 'Process',volatile=1,format = win32pdh.PDH_FMT_LONG) # add a possibly volatile counter + +### Known bugs and limitations ### +Due to a problem with threading under the PythonWin interpreter, there +will be no data logged if the PythonWin window is not the foreground +application. Workaround: scripts using threading should be run in the +python.exe interpreter. + +The volatile-counter handlers are possibly buggy, they haven't been +tested to any extent. The wrapper Query makes it safe to pass invalid +paths (a -1 will be returned, or the Query will be totally ignored, +depending on the missing element), so you should be able to work around +the error by including all possible paths and filtering out the -1's. + +There is no way I know of to stop a thread which is currently sleeping, +so you have to wait until the thread in collectdatawhile is activated +again. This might become a problem in situations where the collection +period is multiple minutes (or hours, or whatever). + +Should make the win32pdh.ParseCounter function available to the Query +classes as a method or something similar, so that it can be accessed +by programmes that have just picked up an instance from somewhere. + +Should explicitly mention where QueryErrors can be raised, and create a +full test set to see if there are any uncaught win32api.error's still +hanging around. + +When using the python.exe interpreter, the addcounterbybrowsing- +generated browser window is often hidden behind other windows. No known +workaround other than Alt-tabing to reach the browser window. + +### Other References ### +The win32pdhutil module (which should be in the %pythonroot%/win32/lib +directory) provides quick-and-dirty utilities for one-off access to +variables from the PDH. Almost everything in that module can be done +with a Query object, but it provides task-oriented functions for a +number of common one-off tasks. + +If you can access the MS Developers Network Library, you can find +information about the PDH API as MS describes it. For a background article, +try: +http://msdn.microsoft.com/library/en-us/dnperfmo/html/msdn_pdhlib.asp + +The reference guide for the PDH API was last spotted at: +http://msdn.microsoft.com/library/en-us/perfmon/base/using_the_pdh_interface.asp + + +In general the Python version of the API is just a wrapper around the +Query-based version of this API (as far as I can see), so you can learn what +you need to from there. From what I understand, the MSDN Online +resources are available for the price of signing up for them. I can't +guarantee how long that's supposed to last. (Or anything for that +matter). +http://premium.microsoft.com/isapi/devonly/prodinfo/msdnprod/msdnlib.idc?theURL=/msdn/library/sdkdoc/perfdata_4982.htm + +The eventual plan is for my (Mike Fletcher's) Starship account to include +a section on NT Administration, and the Query is the first project +in this plan. There should be an article describing the creation of +a simple logger there, but the example above is 90% of the work of +that project, so don't sweat it if you don't find anything there. +(currently the account hasn't been set up). +http://starship.skyport.net/crew/mcfletch/ + +If you need to contact me immediately, (why I can't imagine), you can +email me at mcfletch@golden.net, or just post your question to the +Python newsgroup with a catchy subject line. +news:comp.lang.python + +### Other Stuff ### +The Query classes are by Mike Fletcher, with the working code +being corruptions of Mark Hammonds win32pdhutil module. + +Use at your own risk, no warranties, no guarantees, no assurances, +if you use it, you accept the risk of using it, etceteras. + +''' +# Feb 12, 98 - MH added "rawaddcounter" so caller can get exception details. + +import win32pdh, win32api,time, thread,copy + +class BaseQuery: + ''' + Provides wrapped access to the Performance Data Helper query + objects, generally you should use the child class Query + unless you have need of doing weird things :) + + This class supports two major working paradigms. In the first, + you open the query, and run it as many times as you need, closing + the query when you're done with it. This is suitable for static + queries (ones where processes being monitored don't disappear). + + In the second, you allow the query to be opened each time and + closed afterward. This causes the base query object to be + destroyed after each call. Suitable for dynamic queries (ones + which watch processes which might be closed while watching.) + ''' + def __init__(self,paths=None): + ''' + The PDH Query object is initialised with a single, optional + list argument, that must be properly formatted PDH Counter + paths. Generally this list will only be provided by the class + when it is being unpickled (removed from storage). Normal + use is to call the class with no arguments and use the various + addcounter functions (particularly, for end user's, the use of + addcounterbybrowsing is the most common approach) You might + want to provide the list directly if you want to hard-code the + elements with which your query deals (and thereby avoid the + overhead of unpickling the class). + ''' + self.counters = [] + if paths: + self.paths = paths + else: + self.paths = [] + self._base = None + self.active = 0 + self.curpaths = [] + def addcounterbybrowsing(self, flags = win32pdh.PERF_DETAIL_WIZARD, windowtitle="Python Browser"): + ''' + Adds possibly multiple paths to the paths attribute of the query, + does this by calling the standard counter browsing dialogue. Within + this dialogue, find the counter you want to log, and click: Add, + repeat for every path you want to log, then click on close. The + paths are appended to the non-volatile paths list for this class, + subclasses may create a function which parses the paths and decides + (via heuristics) whether to add the path to the volatile or non-volatile + path list. + e.g.: + query.addcounter() + ''' + win32pdh.BrowseCounters(None,0, self.paths.append, flags, windowtitle) + def rawaddcounter(self,object, counter, instance = None, inum=-1, machine=None): + ''' + Adds a single counter path, without catching any exceptions. + + See addcounter for details. + ''' + path = win32pdh.MakeCounterPath( (machine,object,instance, None, inum,counter) ) + self.paths.append(path) + + def addcounter(self,object, counter, instance = None, inum=-1, machine=None): + ''' + Adds a single counter path to the paths attribute. Normally + this will be called by a child class' speciality functions, + rather than being called directly by the user. (Though it isn't + hard to call manually, since almost everything is given a default) + This method is only functional when the query is closed (or hasn't + yet been opened). This is to prevent conflict in multi-threaded + query applications). + e.g.: + query.addcounter('Memory','Available Bytes') + ''' + if not self.active: + try: + self.rawaddcounter(object, counter, instance, inum, machine) + return 0 + except win32api.error: + return -1 + else: + return -1 + + def open(self): + ''' + Build the base query object for this wrapper, + then add all of the counters required for the query. + Raise a QueryError if we can't complete the functions. + If we are already open, then do nothing. + ''' + if not self.active: # to prevent having multiple open queries + # curpaths are made accessible here because of the possibility of volatile paths + # which may be dynamically altered by subclasses. + self.curpaths = copy.copy(self.paths) + try: + base = win32pdh.OpenQuery() + for path in self.paths: + try: + self.counters.append(win32pdh.AddCounter(base, path)) + except win32api.error: # we passed a bad path + self.counters.append(0) + pass + self._base = base + self.active = 1 + return 0 # open succeeded + except: # if we encounter any errors, kill the Query + try: + self.killbase(base) + except NameError: # failed in creating query + pass + self.active = 0 + self.curpaths = [] + raise QueryError(self) + return 1 # already open + + def killbase(self,base=None): + ''' + ### This is not a public method + Mission critical function to kill the win32pdh objects held + by this object. User's should generally use the close method + instead of this method, in case a sub-class has overridden + close to provide some special functionality. + ''' + # Kill Pythonic references to the objects in this object's namespace + self._base = None + counters = self.counters + self.counters = [] + # we don't kill the curpaths for convenience, this allows the + # user to close a query and still access the last paths + self.active = 0 + # Now call the delete functions on all of the objects + try: + map(win32pdh.RemoveCounter,counters) + except: + pass + try: + win32pdh.CloseQuery(base) + except: + pass + del(counters) + del(base) + def close(self): + ''' + Makes certain that the underlying query object has been closed, + and that all counters have been removed from it. This is + important for reference counting. + You should only need to call close if you have previously called + open. The collectdata methods all can handle opening and + closing the query. Calling close multiple times is acceptable. + ''' + try: + self.killbase(self._base) + except AttributeError: + self.killbase() + __del__ = close + def collectdata(self,format = win32pdh.PDH_FMT_LONG): + ''' + Returns the formatted current values for the Query + ''' + if self._base: # we are currently open, don't change this + return self.collectdataslave(format) + else: # need to open and then close the _base, should be used by one-offs and elements tracking application instances + self.open() # will raise QueryError if couldn't open the query + temp = self.collectdataslave(format) + self.close() # will always close + return temp + def collectdataslave(self,format = win32pdh.PDH_FMT_LONG): + ''' + ### Not a public method + Called only when the Query is known to be open, runs over + the whole set of counters, appending results to the temp, + returns the values as a list. + ''' + try: + win32pdh.CollectQueryData(self._base) + temp = [] + for counter in self.counters: + ok = 0 + try: + if counter: + temp.append(win32pdh.GetFormattedCounterValue(counter, format)[1]) + ok = 1 + except win32api.error: + pass + if not ok: + temp.append(-1) # a better way to signal failure??? + return temp + except win32api.error: # will happen if, for instance, no counters are part of the query and we attempt to collect data for it. + return [-1] * len(self.counters) + # pickle functions + def __getinitargs__(self): + ''' + ### Not a public method + ''' + return (self.paths,) + +class Query(BaseQuery): + ''' + Performance Data Helper(PDH) Query object: + + Provides a wrapper around the native PDH query object which + allows for query reuse, query storage, and general maintenance + functions (adding counter paths in various ways being the most + obvious ones). + ''' + def __init__(self,*args,**namedargs): + ''' + The PDH Query object is initialised with a single, optional + list argument, that must be properly formatted PDH Counter + paths. Generally this list will only be provided by the class + when it is being unpickled (removed from storage). Normal + use is to call the class with no arguments and use the various + addcounter functions (particularly, for end user's, the use of + addcounterbybrowsing is the most common approach) You might + want to provide the list directly if you want to hard-code the + elements with which your query deals (and thereby avoid the + overhead of unpickling the class). + ''' + self.volatilecounters = [] + apply(BaseQuery.__init__, (self,)+args, namedargs) + def addperfcounter(self, object, counter, machine=None): + ''' + A "Performance Counter" is a stable, known, common counter, + such as Memory, or Processor. The use of addperfcounter by + end-users is deprecated, since the use of + addcounterbybrowsing is considerably more flexible and general. + It is provided here to allow the easy development of scripts + which need to access variables so common we know them by name + (such as Memory|Available Bytes), and to provide symmetry with + the add inst counter method. + usage: + query.addperfcounter('Memory', 'Available Bytes') + It is just as easy to access addcounter directly, the following + has an identicle effect. + query.addcounter('Memory', 'Available Bytes') + ''' + BaseQuery.addcounter(self, object=object, counter=counter, machine=machine) + def addinstcounter(self, object, counter,machine=None,objtype = 'Process',volatile=1,format = win32pdh.PDH_FMT_LONG): + ''' + The purpose of using an instcounter is to track particular + instances of a counter object (e.g. a single processor, a single + running copy of a process). For instance, to track all python.exe + instances, you would need merely to ask: + query.addinstcounter('python','Virtual Bytes') + You can find the names of the objects and their available counters + by doing an addcounterbybrowsing() call on a query object (or by + looking in performance monitor's add dialog.) + + Beyond merely rearranging the call arguments to make more sense, + if the volatile flag is true, the instcounters also recalculate + the paths of the available instances on every call to open the + query. + ''' + if volatile: + self.volatilecounters.append((object,counter,machine,objtype,format)) + else: + self.paths[len(self.paths):] = self.getinstpaths(object,counter,machine,objtype,format) + + def getinstpaths(self,object,counter,machine=None,objtype='Process',format = win32pdh.PDH_FMT_LONG): + ''' + ### Not an end-user function + Calculate the paths for an instance object. Should alter + to allow processing for lists of object-counter pairs. + ''' + items, instances = win32pdh.EnumObjectItems(None,None,objtype, -1) + # find out how many instances of this element we have... + instances.sort() + try: + cur = instances.index(object) + except ValueError: + return [] # no instances of this object + temp = [object] + try: + while instances[cur+1] == object: + temp.append(object) + cur = cur+1 + except IndexError: # if we went over the end + pass + paths = [] + for ind in range(len(temp)): + # can this raise an error? + paths.append(win32pdh.MakeCounterPath( (machine,'Process',object,None,ind,counter) ) ) + return paths # should also return the number of elements for naming purposes + + def open(self,*args,**namedargs): + ''' + Explicitly open a query: + When you are needing to make multiple calls to the same query, + it is most efficient to open the query, run all of the calls, + then close the query, instead of having the collectdata method + automatically open and close the query each time it runs. + There are currently no arguments to open. + ''' + # do all the normal opening stuff, self._base is now the query object + apply(BaseQuery.open,(self,)+args, namedargs) + # should rewrite getinstpaths to take a single tuple + paths = [] + for tup in self.volatilecounters: + paths[len(paths):] = apply(self.getinstpaths, tup) + for path in paths: + try: + self.counters.append(win32pdh.AddCounter(self._base, path)) + self.curpaths.append(path) # if we fail on the line above, this path won't be in the table or the counters + except win32api.error: + pass # again, what to do with a malformed path??? + def collectdatafor(self, totalperiod, period=1): + ''' + Non-threaded collection of performance data: + This method allows you to specify the total period for which you would + like to run the Query, and the time interval between individual + runs. The collected data is stored in query.curresults at the + _end_ of the run. The pathnames for the query are stored in + query.curpaths. + e.g.: + query.collectdatafor(30,2) + Will collect data for 30seconds at 2 second intervals + ''' + tempresults = [] + try: + self.open() + for ind in xrange(totalperiod/period): + tempresults.append(self.collectdata()) + time.sleep(period) + self.curresults = tempresults + finally: + self.close() + def collectdatawhile(self, period=1): + ''' + Threaded collection of performance data: + This method sets up a simple semaphor system for signalling + when you would like to start and stop a threaded data collection + method. The collection runs every period seconds until the + semaphor attribute is set to a non-true value (which normally + should be done by calling query.collectdatawhile_stop() .) + e.g.: + query.collectdatawhile(2) + # starts the query running, returns control to the caller immediately + # is collecting data every two seconds. + # do whatever you want to do while the thread runs, then call: + query.collectdatawhile_stop() + # when you want to deal with the data. It is generally a good idea + # to sleep for period seconds yourself, since the query will not copy + # the required data until the next iteration: + time.sleep(2) + # now you can access the data from the attributes of the query + query.curresults + query.curpaths + ''' + self.collectdatawhile_active = 1 + thread.start_new_thread(self.collectdatawhile_slave,(period,)) + def collectdatawhile_stop(self): + ''' + Signals the collectdatawhile slave thread to stop collecting data + on the next logging iteration. + ''' + self.collectdatawhile_active = 0 + def collectdatawhile_slave(self, period): + ''' + ### Not a public function + Does the threaded work of collecting the data and storing it + in an attribute of the class. + ''' + tempresults = [] + try: + self.open() # also sets active, so can't be changed. + while self.collectdatawhile_active: + tempresults.append(self.collectdata()) + time.sleep(period) + self.curresults = tempresults + finally: + self.close() + + # pickle functions + def __getinitargs__(self): + return (self.paths,) + def __getstate__(self): + return self.volatilecounters + def __setstate__(self, volatilecounters): + self.volatilecounters = volatilecounters + + +class QueryError: + def __init__(self, query): + self.query = query + def __repr__(self): + return ''%repr(self.query) + __str__ = __repr__ + diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/win32pdhutil.py b/thirdparty/python25/Lib/site-packages/win32/lib/win32pdhutil.py new file mode 100644 index 000000000..032af7181 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/win32pdhutil.py @@ -0,0 +1,161 @@ +"""Utilities for the win32 Performance Data Helper module + +Example: + To get a single bit of data: + >>> import win32pdhutil + >>> win32pdhutil.GetPerformanceAttributes("Memory", "Available Bytes") + 6053888 + >>> win32pdhutil.FindPerformanceAttributesByName("python", counter="Virtual Bytes") + [22278144] + + First example returns data which is not associated with any specific instance. + + The second example reads data for a specific instance - hence the list return - + it would return one result for each instance of Python running. + + In general, it can be tricky finding exactly the "name" of the data you wish to query. + Although you can use (None,None,(eg)"Memory", -1) to do this, + the easiest way is often to simply use PerfMon to find out the names. +""" + +import win32pdh, string, time + +error = win32pdh.error + +# Handle some localization issues. +# see http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q287/1/59.asp&NoWebContent=1 +# Build a map of english_counter_name: counter_id +counter_english_map = {} + +def find_pdh_counter_localized_name(english_name, machine_name = None): + if not counter_english_map: + import win32api, win32con + counter_reg_value = win32api.RegQueryValueEx(win32con.HKEY_PERFORMANCE_DATA, + "Counter 009") + counter_list = counter_reg_value[0] + for i in range(0, len(counter_list) - 1, 2): + try: + counter_id = int(counter_list[i]) + except ValueError: + continue + counter_english_map[counter_list[i+1].lower()] = counter_id + return win32pdh.LookupPerfNameByIndex(machine_name, counter_english_map[english_name.lower()]) + +def GetPerformanceAttributes(object, counter, instance = None, inum=-1, + format = win32pdh.PDH_FMT_LONG, machine=None): + # NOTE: Many counters require 2 samples to give accurate results, + # including "% Processor Time" (as by definition, at any instant, a + # thread's CPU usage is either 0 or 100). To read counters like this, + # you should copy this function, but keep the counter open, and call + # CollectQueryData() each time you need to know. + # See http://support.microsoft.com/default.aspx?scid=kb;EN-US;q262938 + # and http://msdn.microsoft.com/library/en-us/dnperfmo/html/perfmonpt2.asp + # My older explanation for this was that the "AddCounter" process forced + # the CPU to 100%, but the above makes more sense :) + path = win32pdh.MakeCounterPath( (machine,object,instance, None, inum,counter) ) + hq = win32pdh.OpenQuery() + try: + hc = win32pdh.AddCounter(hq, path) + try: + win32pdh.CollectQueryData(hq) + type, val = win32pdh.GetFormattedCounterValue(hc, format) + return val + finally: + win32pdh.RemoveCounter(hc) + finally: + win32pdh.CloseQuery(hq) + +def FindPerformanceAttributesByName(instanceName, object = None, + counter = None, + format = win32pdh.PDH_FMT_LONG, + machine = None, bRefresh=0): + """Find peformance attributes by (case insensitive) instance name. + + Given a process name, return a list with the requested attributes. + Most useful for returning a tuple of PIDs given a process name. + """ + if object is None: object = find_pdh_counter_localized_name("Process", machine) + if counter is None: counter = find_pdh_counter_localized_name("ID Process", machine) + if bRefresh: # PDH docs say this is how you do a refresh. + win32pdh.EnumObjects(None, machine, 0, 1) + instanceName = string.lower(instanceName) + items, instances = win32pdh.EnumObjectItems(None,None,object, -1) + # Track multiple instances. + instance_dict = {} + for instance in instances: + try: + instance_dict[instance] = instance_dict[instance] + 1 + except KeyError: + instance_dict[instance] = 0 + + ret = [] + for instance, max_instances in instance_dict.items(): + for inum in xrange(max_instances+1): + if string.lower(instance) == instanceName: + ret.append(GetPerformanceAttributes(object, counter, + instance, inum, format, + machine)) + return ret + +def ShowAllProcesses(): + object = find_pdh_counter_localized_name("Process") + items, instances = win32pdh.EnumObjectItems(None,None,object, + win32pdh.PERF_DETAIL_WIZARD) + # Need to track multiple instances of the same name. + instance_dict = {} + for instance in instances: + try: + instance_dict[instance] = instance_dict[instance] + 1 + except KeyError: + instance_dict[instance] = 0 + + # Bit of a hack to get useful info. + items = [find_pdh_counter_localized_name("ID Process")] + items[:5] + print "Process Name", string.join(items,",") + for instance, max_instances in instance_dict.items(): + for inum in xrange(max_instances+1): + hq = win32pdh.OpenQuery() + hcs = [] + for item in items: + path = win32pdh.MakeCounterPath( (None,object,instance, + None, inum, item) ) + hcs.append(win32pdh.AddCounter(hq, path)) + win32pdh.CollectQueryData(hq) + # as per http://support.microsoft.com/default.aspx?scid=kb;EN-US;q262938, some "%" based + # counters need two collections + time.sleep(0.01) + win32pdh.CollectQueryData(hq) + print "%-15s\t" % (instance[:15]), + for hc in hcs: + type, val = win32pdh.GetFormattedCounterValue(hc, win32pdh.PDH_FMT_LONG) + print "%5d" % (val), + win32pdh.RemoveCounter(hc) + print + win32pdh.CloseQuery(hq) + +def BrowseCallBackDemo(counter): + machine, object, instance, parentInstance, index, counterName = \ + win32pdh.ParseCounterPath(counter) + + result = GetPerformanceAttributes(object, counterName, instance, index, + win32pdh.PDH_FMT_DOUBLE, machine) + print "Value of '%s' is" % counter, result + print "Added '%s' on object '%s' (machine %s), instance %s(%d)-parent of %s" \ + % (counterName, object, machine, instance, index, parentInstance) + +def browse(callback = BrowseCallBackDemo, title="Python Browser", + level=win32pdh.PERF_DETAIL_WIZARD): + win32pdh.BrowseCounters(None,0, callback, level, title) + +if __name__=='__main__': + ShowAllProcesses() + # Show how to get a couple of attributes by name. + counter = find_pdh_counter_localized_name("Virtual Bytes") + print "Virtual Bytes = ", FindPerformanceAttributesByName("python", + counter=counter) + print "Available Bytes = ", GetPerformanceAttributes( + find_pdh_counter_localized_name("Memory"), + find_pdh_counter_localized_name("Available Bytes")) + # And a browser. + print "Browsing for counters..." + browse() diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/win32rcparser.py b/thirdparty/python25/Lib/site-packages/win32/lib/win32rcparser.py new file mode 100644 index 000000000..c9c1d66ed --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/win32rcparser.py @@ -0,0 +1,582 @@ +# Windows dialog .RC file parser, by Adam Walker. + +# This module was adapted from the spambayes project, and is Copyright +# 2003/2004 The Python Software Foundation and is covered by the Python +# Software Foundation license. +""" +This is a parser for Windows .rc files, which are text files which define +dialogs and other Windows UI resources. +""" +__author__="Adam Walker" +__version__="0.11" + +import sys, os, shlex, stat +import pprint +import win32con +import commctrl + +_controlMap = {"DEFPUSHBUTTON":0x80, + "PUSHBUTTON":0x80, + "Button":0x80, + "GROUPBOX":0x80, + "Static":0x82, + "CTEXT":0x82, + "RTEXT":0x82, + "LTEXT":0x82, + "LISTBOX":0x83, + "SCROLLBAR":0x84, + "COMBOBOX":0x85, + "EDITTEXT":0x81, + "ICON":0x82, + "RICHEDIT":"RichEdit20A" + } + +_addDefaults = {"EDITTEXT":win32con.WS_BORDER | win32con.WS_TABSTOP, + "GROUPBOX":win32con.BS_GROUPBOX, + "LTEXT":win32con.SS_LEFT, + "DEFPUSHBUTTON":win32con.BS_DEFPUSHBUTTON | win32con.WS_TABSTOP, + "PUSHBUTTON": win32con.WS_TABSTOP, + "CTEXT":win32con.SS_CENTER, + "RTEXT":win32con.SS_RIGHT, + "ICON":win32con.SS_ICON} + +defaultControlStyle = win32con.WS_CHILD | win32con.WS_VISIBLE +defaultControlStyleEx = 0 + +class DialogDef: + name = "" + id = 0 + style = 0 + styleEx = None + caption = "" + font = "MS Sans Serif" + fontSize = 8 + x = 0 + y = 0 + w = 0 + h = 0 + template = None + def __init__(self, n, i): + self.name = n + self.id = i + self.styles = [] + self.stylesEx = [] + self.controls = [] + #print "dialog def for ",self.name, self.id + def createDialogTemplate(self): + t = None + self.template = [[self.caption, + (self.x,self.y,self.w,self.h), + self.style, self.styleEx, + (self.fontSize, self.font)] + ] + # Add the controls + for control in self.controls: + self.template.append(control.createDialogTemplate()) + return self.template + +class ControlDef: + id = "" + controlType = "" + subType = "" + idNum = 0 + style = defaultControlStyle + styleEx = defaultControlStyleEx + label = "" + x = 0 + y = 0 + w = 0 + h = 0 + def __init__(self): + self.styles = [] + self.stylesEx = [] + def toString(self): + s = "" + return s + def createDialogTemplate(self): + ct = self.controlType + if "CONTROL"==ct: + ct = self.subType + if ct in _controlMap: + ct = _controlMap[ct] + t = [ct, self.label, self.idNum, (self.x, self.y, self.w, self.h), self.style, self.styleEx] + #print t + return t + +class StringDef: + def __init__(self, id, idNum, value): + self.id = id + self.idNum = idNum + self.value = value + +class RCParser: + next_id = 1001 + dialogs = {} + _dialogs = {} + debugEnabled = False + token = "" + + def __init__(self): + self.ungot = False + self.ids = {"IDC_STATIC": -1} + self.names = {-1:"IDC_STATIC"} + self.bitmaps = {} + self.stringTable = {} + self.icons = {} + + def debug(self, *args): + if self.debugEnabled: + print args + + def getToken(self): + if self.ungot: + self.ungot = False + self.debug("getToken returns (ungot):", self.token) + return self.token + self.token = self.lex.get_token() + self.debug("getToken returns:", self.token) + if self.token=="": + self.token = None + return self.token + + def ungetToken(self): + self.ungot = True + + def getCheckToken(self, expected): + tok = self.getToken() + assert tok == expected, "Expected token '%s', but got token '%s'!" % (expected, tok) + return tok + + def getCommaToken(self): + return self.getCheckToken(",") + + # Return the *current* token as a number, only consuming a token + # if it is the negative-sign. + def currentNumberToken(self): + mult = 1 + if self.token=='-': + mult = -1 + self.getToken() + return int(self.token) * mult + + # Return the *current* token as a string literal (ie, self.token will be a + # quote. consumes all tokens until the end of the string + def currentQuotedString(self): + # Handle quoted strings - pity shlex doesn't handle it. + assert self.token.startswith('"'), self.token + bits = [self.token] + while 1: + tok = self.getToken() + if not tok.startswith('"'): + self.ungetToken() + break + bits.append(tok) + sval = "".join(bits)[1:-1] # Remove end quotes. + # Fixup quotes in the body, and all (some?) quoted characters back + # to their raw value. + for i, o in ('""', '"'), ("\\r", "\r"), ("\\n", "\n"), ("\\t", "\t"): + sval = sval.replace(i, o) + return sval + + def load(self, rcstream): + """ + RCParser.loadDialogs(rcFileName) -> None + Load the dialog information into the parser. Dialog Definations can then be accessed + using the "dialogs" dictionary member (name->DialogDef). The "ids" member contains the dictionary of id->name. + The "names" member contains the dictionary of name->id + """ + self.open(rcstream) + self.getToken() + while self.token!=None: + self.parse() + self.getToken() + + def open(self, rcstream): + self.lex = shlex.shlex(rcstream) + self.lex.commenters = "//#" + + def parseH(self, file): + lex = shlex.shlex(file) + lex.commenters = "//" + token = " " + while token is not None: + token = lex.get_token() + if token == "" or token is None: + token = None + else: + if token=='define': + n = lex.get_token() + i = int(lex.get_token()) + self.ids[n] = i + if self.names.has_key(i): + # Dupe ID really isn't a problem - most consumers + # want to go from name->id, and this is OK. + # It means you can't go from id->name though. + pass + # ignore AppStudio special ones + #if not n.startswith("_APS_"): + # print "Duplicate id",i,"for",n,"is", self.names[i] + else: + self.names[i] = n + if self.next_id<=i: + self.next_id = i+1 + + def parse(self): + noid_parsers = { + "STRINGTABLE": self.parse_stringtable, + } + + id_parsers = { + "DIALOG" : self.parse_dialog, + "DIALOGEX": self.parse_dialog, +# "TEXTINCLUDE": self.parse_textinclude, + "BITMAP": self.parse_bitmap, + "ICON": self.parse_icon, + } + deep = 0 + base_token = self.token + rp = noid_parsers.get(base_token) + if rp is not None: + rp() + else: + # Not something we parse that isn't prefixed by an ID + # See if it is an ID prefixed item - if it is, our token + # is the resource ID. + resource_id = self.token + self.getToken() + if self.token is None: + return + + if "BEGIN" == self.token: + # A 'BEGIN' for a structure we don't understand - skip to the + # matching 'END' + deep = 1 + while deep!=0 and self.token is not None: + self.getToken() + self.debug("Zooming over", self.token) + if "BEGIN" == self.token: + deep += 1 + elif "END" == self.token: + deep -= 1 + else: + rp = id_parsers.get(self.token) + if rp is not None: + self.debug("Dispatching '%s'" % (self.token,)) + rp(resource_id) + else: + # We don't know what the resource type is, but we + # have already consumed the next, which can cause problems, + # so push it back. + self.debug("Skipping top-level '%s'" % base_token) + self.ungetToken() + + def addId(self, id_name): + if id_name in self.ids: + id = self.ids[id_name] + else: + # IDOK, IDCANCEL etc are special - if a real resource has this value + for n in ["IDOK","IDCANCEL","IDYES","IDNO", "IDABORT"]: + if id_name == n: + v = getattr(win32con, n) + self.ids[n] = v + self.names[v] = n + return v + id = self.next_id + self.next_id += 1 + self.ids[id_name] = id + self.names[id] = id_name + return id + + def lang(self): + while self.token[0:4]=="LANG" or self.token[0:7]=="SUBLANG" or self.token==',': + self.getToken(); + + def parse_textinclude(self, res_id): + while self.getToken() != "BEGIN": + pass + while 1: + if self.token == "END": + break + s = self.getToken() + + def parse_stringtable(self): + while self.getToken() != "BEGIN": + pass + while 1: + self.getToken() + if self.token == "END": + break + sid = self.token + self.getToken() + sd = StringDef(sid, self.addId(sid), self.currentQuotedString()) + self.stringTable[sid] = sd + + def parse_bitmap(self, name): + return self.parse_bitmap_or_icon(name, self.bitmaps) + + def parse_icon(self, name): + return self.parse_bitmap_or_icon(name, self.icons) + + def parse_bitmap_or_icon(self, name, dic): + self.getToken() + while not self.token.startswith('"'): + self.getToken() + bmf = self.token[1:-1] # quotes + dic[name] = bmf + + def parse_dialog(self, name): + dlg = DialogDef(name,self.addId(name)) + assert len(dlg.controls)==0 + self._dialogs[name] = dlg + extras = [] + self.getToken() + while not self.token.isdigit(): + self.debug("extra", self.token) + extras.append(self.token) + self.getToken() + dlg.x = int(self.token) + self.getCommaToken() + self.getToken() # number + dlg.y = int(self.token) + self.getCommaToken() + self.getToken() # number + dlg.w = int(self.token) + self.getCommaToken() + self.getToken() # number + dlg.h = int(self.token) + self.getToken() + while not (self.token==None or self.token=="" or self.token=="END"): + if self.token=="STYLE": + self.dialogStyle(dlg) + elif self.token=="EXSTYLE": + self.dialogExStyle(dlg) + elif self.token=="CAPTION": + self.dialogCaption(dlg) + elif self.token=="FONT": + self.dialogFont(dlg) + elif self.token=="BEGIN": + self.controls(dlg) + else: + break + self.dialogs[name] = dlg.createDialogTemplate() + + def dialogStyle(self, dlg): + dlg.style, dlg.styles = self.styles( [], win32con.DS_SETFONT) + def dialogExStyle(self, dlg): + self.getToken() + dlg.styleEx, dlg.stylesEx = self.styles( [], 0) + + def styles(self, defaults, defaultStyle): + list = defaults + style = defaultStyle + + if "STYLE"==self.token: + self.getToken() + i = 0 + Not = False + while ((i%2==1 and ("|"==self.token or "NOT"==self.token)) or (i%2==0)) and not self.token==None: + Not = False; + if "NOT"==self.token: + Not = True + self.getToken() + i += 1 + if self.token!="|": + if self.token in win32con.__dict__: + value = getattr(win32con,self.token) + else: + if self.token in commctrl.__dict__: + value = getattr(commctrl,self.token) + else: + value = 0 + if Not: + list.append("NOT "+self.token) + self.debug("styles add Not",self.token, value) + style &= ~value + else: + list.append(self.token) + self.debug("styles add", self.token, value) + style |= value + self.getToken() + self.debug("style is ",style) + + return style, list + + def dialogCaption(self, dlg): + if "CAPTION"==self.token: + self.getToken() + self.token = self.token[1:-1] + self.debug("Caption is:",self.token) + dlg.caption = self.token + self.getToken() + def dialogFont(self, dlg): + if "FONT"==self.token: + self.getToken() + dlg.fontSize = int(self.token) + self.getCommaToken() + self.getToken() # Font name + dlg.font = self.token[1:-1] # it's quoted + self.getToken() + while "BEGIN"!=self.token: + self.getToken() + def controls(self, dlg): + if self.token=="BEGIN": self.getToken() + # All controls look vaguely like: + # TYPE [text, ] Control_id, l, t, r, b [, style] + # .rc parser documents all control types as: + # CHECKBOX, COMBOBOX, CONTROL, CTEXT, DEFPUSHBUTTON, EDITTEXT, GROUPBOX, + # ICON, LISTBOX, LTEXT, PUSHBUTTON, RADIOBUTTON, RTEXT, SCROLLBAR + without_text = ["EDITTEXT", "COMBOBOX", "LISTBOX", "SCROLLBAR"] + while self.token!="END": + control = ControlDef() + control.controlType = self.token; + self.getToken() + if control.controlType not in without_text: + if self.token[0:1]=='"': + control.label = self.currentQuotedString() + # Some funny controls, like icons and picture controls use + # the "window text" as extra resource ID (ie, the ID of the + # icon itself). This may be either a literal, or an ID string. + elif self.token=="-" or self.token.isdigit(): + control.label = str(self.currentNumberToken()) + else: + # An ID - use the numeric equiv. + control.label = str(self.addId(self.token)) + self.getCommaToken() + self.getToken() + # Control IDs may be "names" or literal ints + if self.token=="-" or self.token.isdigit(): + control.id = self.currentNumberToken() + control.idNum = control.id + else: + # name of an ID + control.id = self.token + control.idNum = self.addId(control.id) + self.getCommaToken() + + if control.controlType == "CONTROL": + self.getToken() + control.subType = self.token[1:-1] + thisDefaultStyle = defaultControlStyle | \ + _addDefaults.get(control.subType, 0) + # Styles + self.getCommaToken() + self.getToken() + control.style, control.styles = self.styles([], thisDefaultStyle) + else: + thisDefaultStyle = defaultControlStyle | \ + _addDefaults.get(control.controlType, 0) + # incase no style is specified. + control.style = thisDefaultStyle + # Rect + control.x = int(self.getToken()) + self.getCommaToken() + control.y = int(self.getToken()) + self.getCommaToken() + control.w = int(self.getToken()) + self.getCommaToken() + self.getToken() + control.h = int(self.token) + self.getToken() + if self.token==",": + self.getToken() + control.style, control.styles = self.styles([], thisDefaultStyle) + if self.token==",": + self.getToken() + control.styleEx, control.stylesEx = self.styles([], defaultControlStyleEx) + #print control.toString() + dlg.controls.append(control) + +def ParseStreams(rc_file, h_file): + rcp = RCParser() + rcp.parseH(h_file) + try: + rcp.load(rc_file) + except: + lex = getattr(rcp, "lex", None) + if lex: + print "ERROR parsing dialogs at line", lex.lineno + print "Next 10 tokens are:" + for i in range(10): + print lex.get_token(), + print + raise + return rcp + +def Parse(rc_name, h_name = None): + if h_name: + h_file = open(h_name, "rU") + else: + # See if same basename as the .rc + h_name = rc_name[:-2]+"h" + try: + h_file = open(h_name, "rU") + except IOError: + # See if MSVC default of 'resource.h' in the same dir. + h_name = os.path.join(os.path.dirname(rc_name), "resource.h") + try: + h_file = open(h_name, "rU") + except IOError: + # .h files are optional anyway + h_file = None + rc_file = open(rc_name, "rU") + try: + return ParseStreams(rc_file, h_file) + finally: + if h_file is not None: + h_file.close() + rc_file.close() + return rcp + +def GenerateFrozenResource(rc_name, output_name, h_name = None): + """Converts an .rc windows resource source file into a python source file + with the same basic public interface as the rest of this module. + Particularly useful for py2exe or other 'freeze' type solutions, + where a frozen .py file can be used inplace of a real .rc file. + """ + rcp = Parse(rc_name, h_name) + in_stat = os.stat(rc_name) + + out = open(output_name, "wt") + out.write("#%s\n" % output_name) + out.write("#This is a generated file. Please edit %s instead.\n" % rc_name) + out.write("__version__=%r\n" % __version__) + out.write("_rc_size_=%d\n_rc_mtime_=%d\n" % (in_stat[stat.ST_SIZE], in_stat[stat.ST_MTIME])) + out.write("class FakeParser:\n") + + for name in "dialogs", "ids", "names", "bitmaps", "icons", "stringTable": + out.write("\t%s = \\\n" % (name,)) + pprint.pprint(getattr(rcp, name), out) + out.write("\n") + + out.write("def Parse(s):\n") + out.write("\treturn FakeParser()\n") + out.close() + +if __name__=='__main__': + if len(sys.argv) <= 1: + print __doc__ + print + print "See test_win32rcparser.py, and the win32rcparser directory (both" + print "in the test suite) for an example of this module's usage." + else: + import pprint + filename = sys.argv[1] + if "-v" in sys.argv: + RCParser.debugEnabled = 1 + print "Dumping all resources in '%s'" % filename + resources = Parse(filename) + for id, ddef in resources.dialogs.items(): + print "Dialog %s (%d controls)" % (id, len(ddef)) + pprint.pprint(ddef) + print + for id, sdef in resources.stringTable.items(): + print "String %s=%r" % (id, sdef.value) + print + for id, sdef in resources.bitmaps.items(): + print "Bitmap %s=%r" % (id, sdef) + print + for id, sdef in resources.icons.items(): + print "Icon %s=%r" % (id, sdef) + print diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/win32serviceutil.py b/thirdparty/python25/Lib/site-packages/win32/lib/win32serviceutil.py new file mode 100644 index 000000000..4779d69b2 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/win32serviceutil.py @@ -0,0 +1,789 @@ +# General purpose service utilities, both for standard Python scripts, +# and for for Python programs which run as services... +# +# Note that most utility functions here will raise win32api.error's +# (which is == win32service.error, pywintypes.error, etc) +# when things go wrong - eg, not enough permissions to hit the +# registry etc. + +import win32service, win32api, win32con, winerror +import sys, string, pywintypes, os + +error = "Python Service Utility Error" + +def LocatePythonServiceExe(exeName = None): + if not exeName and hasattr(sys, "frozen"): + # If py2exe etc calls this with no exeName, default is current exe. + return sys.executable + + # Try and find the specified EXE somewhere. If specifically registered, + # use it. Otherwise look down sys.path, and the global PATH environment. + if exeName is None: + if os.path.splitext(win32service.__file__)[0].endswith("_d"): + exeName = "PythonService_d.exe" + else: + exeName = "PythonService.exe" + # See if it exists as specified + if os.path.isfile(exeName): return win32api.GetFullPathName(exeName) + baseName = os.path.splitext(os.path.basename(exeName))[0] + try: + exeName = win32api.RegQueryValue(win32con.HKEY_LOCAL_MACHINE, + "Software\\Python\\%s\\%s" % (baseName, sys.winver)) + if os.path.isfile(exeName): + return exeName + raise RuntimeError, "The executable '%s' is registered as the Python " \ + "service exe, but it does not exist as specified" \ + % exeName + except win32api.error: + # OK - not there - lets go a-searchin' + for path in [sys.prefix] + sys.path: + look = os.path.join(path, exeName) + if os.path.isfile(look): + return win32api.GetFullPathName(look) + # Try the global Path. + try: + return win32api.SearchPath(None, exeName)[0] + except win32api.error: + msg = "%s is not correctly registered\nPlease locate and run %s, and it will self-register\nThen run this service registration process again." % (exeName, exeName) + raise error, msg + +def _GetServiceShortName(longName): + # looks up a services name + # from the display name + # Thanks to Andy McKay for this code. + access = win32con.KEY_READ | win32con.KEY_ENUMERATE_SUB_KEYS | win32con.KEY_QUERY_VALUE + hkey = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services", 0, access) + num = win32api.RegQueryInfoKey(hkey)[0] + longName = longName.lower() + # loop through number of subkeys + for x in range(0, num): + # find service name, open subkey + svc = win32api.RegEnumKey(hkey, x) + skey = win32api.RegOpenKey(hkey, svc, 0, access) + try: + # find display name + thisName = str(win32api.RegQueryValueEx(skey, "DisplayName")[0]) + if thisName.lower() == longName: + return svc + except win32api.error: + # in case there is no key called DisplayName + pass + return None + +# Open a service given either it's long or short name. +def SmartOpenService(hscm, name, access): + try: + return win32service.OpenService(hscm, name, access) + except win32api.error, details: + if details[0] not in [winerror.ERROR_SERVICE_DOES_NOT_EXIST, + winerror.ERROR_INVALID_NAME]: + raise + name = _GetServiceShortName(name) + if name is None: + raise + return win32service.OpenService(hscm, name, access) + +def LocateSpecificServiceExe(serviceName): + # Given the name of a specific service, return the .EXE name _it_ uses + # (which may or may not be the Python Service EXE + hkey = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\%s" % (serviceName), 0, win32con.KEY_ALL_ACCESS) + try: + return win32api.RegQueryValueEx(hkey, "ImagePath")[0] + finally: + hkey.Close() + +def InstallPerfmonForService(serviceName, iniName, dllName = None): + # If no DLL name, look it up in the INI file name + if not dllName: # May be empty string! + dllName = win32api.GetProfileVal("Python", "dll", "", iniName) + # Still not found - look for the standard one in the same dir as win32service.pyd + if not dllName: + try: + tryName = os.path.join(os.path.split(win32service.__file__)[0], "perfmondata.dll") + if os.path.isfile(tryName): + dllName = tryName + except AttributeError: + # Frozen app? - anyway, can't find it! + pass + if not dllName: + raise ValueError, "The name of the performance DLL must be available" + dllName = win32api.GetFullPathName(dllName) + # Now setup all the required "Performance" entries. + hkey = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\%s" % (serviceName), 0, win32con.KEY_ALL_ACCESS) + try: + subKey = win32api.RegCreateKey(hkey, "Performance") + try: + win32api.RegSetValueEx(subKey, "Library", 0, win32con.REG_SZ, dllName) + win32api.RegSetValueEx(subKey, "Open", 0, win32con.REG_SZ, "OpenPerformanceData") + win32api.RegSetValueEx(subKey, "Close", 0, win32con.REG_SZ, "ClosePerformanceData") + win32api.RegSetValueEx(subKey, "Collect", 0, win32con.REG_SZ, "CollectPerformanceData") + finally: + win32api.RegCloseKey(subKey) + finally: + win32api.RegCloseKey(hkey) + # Now do the "Lodctr" thang... + + try: + import perfmon + path, fname = os.path.split(iniName) + oldPath = os.getcwd() + if path: + os.chdir(path) + try: + perfmon.LoadPerfCounterTextStrings("python.exe " + fname) + finally: + os.chdir(oldPath) + except win32api.error, details: + print "The service was installed OK, but the performance monitor" + print "data could not be loaded.", details + +def _GetCommandLine(exeName, exeArgs): + if exeArgs is not None: + return exeName + " " + exeArgs + else: + return exeName + +def InstallService(pythonClassString, serviceName, displayName, startType = None, errorControl = None, bRunInteractive = 0, serviceDeps = None, userName = None, password = None, exeName = None, perfMonIni = None, perfMonDll = None, exeArgs = None, description = None): + # Handle the default arguments. + if startType is None: + startType = win32service.SERVICE_DEMAND_START + serviceType = win32service.SERVICE_WIN32_OWN_PROCESS + if bRunInteractive: + serviceType = serviceType | win32service.SERVICE_INTERACTIVE_PROCESS + if errorControl is None: + errorControl = win32service.SERVICE_ERROR_NORMAL + + exeName = '"%s"' % LocatePythonServiceExe(exeName) # None here means use default PythonService.exe + commandLine = _GetCommandLine(exeName, exeArgs) + hscm = win32service.OpenSCManager(None,None,win32service.SC_MANAGER_ALL_ACCESS) + try: + hs = win32service.CreateService(hscm, + serviceName, + displayName, + win32service.SERVICE_ALL_ACCESS, # desired access + serviceType, # service type + startType, + errorControl, # error control type + commandLine, + None, + 0, + serviceDeps, + userName, + password) + if description is not None: + try: + win32service.ChangeServiceConfig2(hs,win32service.SERVICE_CONFIG_DESCRIPTION,description) + except NotImplementedError: + pass ## ChangeServiceConfig2 and description do not exist on NT + win32service.CloseServiceHandle(hs) + finally: + win32service.CloseServiceHandle(hscm) + InstallPythonClassString(pythonClassString, serviceName) + # If I have performance monitor info to install, do that. + if perfMonIni is not None: + InstallPerfmonForService(serviceName, perfMonIni, perfMonDll) + +def ChangeServiceConfig(pythonClassString, serviceName, startType = None, errorControl = None, bRunInteractive = 0, serviceDeps = None, userName = None, password = None, exeName = None, displayName = None, perfMonIni = None, perfMonDll = None, exeArgs = None, description = None): + # Before doing anything, remove any perfmon counters. + try: + import perfmon + perfmon.UnloadPerfCounterTextStrings("python.exe "+serviceName) + except (ImportError, win32api.error): + pass + + # The EXE location may have changed + exeName = '"%s"' % LocatePythonServiceExe(exeName) + + # Handle the default arguments. + if startType is None: startType = win32service.SERVICE_NO_CHANGE + if errorControl is None: errorControl = win32service.SERVICE_NO_CHANGE + + hscm = win32service.OpenSCManager(None,None,win32service.SC_MANAGER_ALL_ACCESS) + serviceType = win32service.SERVICE_WIN32_OWN_PROCESS + if bRunInteractive: + serviceType = serviceType | win32service.SERVICE_INTERACTIVE_PROCESS + commandLine = _GetCommandLine(exeName, exeArgs) + try: + hs = SmartOpenService(hscm, serviceName, win32service.SERVICE_ALL_ACCESS) + try: + + win32service.ChangeServiceConfig(hs, + serviceType, # service type + startType, + errorControl, # error control type + commandLine, + None, + 0, + serviceDeps, + userName, + password, + displayName) + if description is not None: + try: + win32service.ChangeServiceConfig2(hs,win32service.SERVICE_CONFIG_DESCRIPTION,description) + except NotImplementedError: + pass ## ChangeServiceConfig2 and description do not exist on NT + + finally: + win32service.CloseServiceHandle(hs) + finally: + win32service.CloseServiceHandle(hscm) + InstallPythonClassString(pythonClassString, serviceName) + # If I have performance monitor info to install, do that. + if perfMonIni is not None: + InstallPerfmonForService(serviceName, perfMonIni, perfMonDll) + +def InstallPythonClassString(pythonClassString, serviceName): + # Now setup our Python specific entries. + if pythonClassString: + key = win32api.RegCreateKey(win32con.HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Services\\%s\\PythonClass" % serviceName) + try: + win32api.RegSetValue(key, None, win32con.REG_SZ, pythonClassString); + finally: + win32api.RegCloseKey(key) + +# Utility functions for Services, to allow persistant properties. +def SetServiceCustomOption(serviceName, option, value): + try: + serviceName = serviceName._svc_name_ + except AttributeError: + pass + key = win32api.RegCreateKey(win32con.HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Services\\%s\\Parameters" % serviceName) + try: + if type(value)==type(0): + win32api.RegSetValueEx(key, option, 0, win32con.REG_DWORD, value); + else: + win32api.RegSetValueEx(key, option, 0, win32con.REG_SZ, value); + finally: + win32api.RegCloseKey(key) + +def GetServiceCustomOption(serviceName, option, defaultValue = None): + # First param may also be a service class/instance. + # This allows services to pass "self" + try: + serviceName = serviceName._svc_name_ + except AttributeError: + pass + key = win32api.RegCreateKey(win32con.HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Services\\%s\\Parameters" % serviceName) + try: + try: + return win32api.RegQueryValueEx(key, option)[0] + except win32api.error: # No value. + return defaultValue + finally: + win32api.RegCloseKey(key) + + +def RemoveService(serviceName): + try: + import perfmon + perfmon.UnloadPerfCounterTextStrings("python.exe "+serviceName) + except (ImportError, win32api.error): + pass + + hscm = win32service.OpenSCManager(None,None,win32service.SC_MANAGER_ALL_ACCESS) + try: + hs = SmartOpenService(hscm, serviceName, win32service.SERVICE_ALL_ACCESS) + win32service.DeleteService(hs) + win32service.CloseServiceHandle(hs) + finally: + win32service.CloseServiceHandle(hscm) + + import win32evtlogutil + try: + win32evtlogutil.RemoveSourceFromRegistry(serviceName) + except win32api.error: + pass + +def ControlService(serviceName, code, machine = None): + hscm = win32service.OpenSCManager(machine,None,win32service.SC_MANAGER_ALL_ACCESS) + try: + + hs = SmartOpenService(hscm, serviceName, win32service.SERVICE_ALL_ACCESS) + try: + status = win32service.ControlService(hs, code) + finally: + win32service.CloseServiceHandle(hs) + finally: + win32service.CloseServiceHandle(hscm) + return status + +def __FindSvcDeps(findName): + if type(findName) is pywintypes.UnicodeType: findName = str(findName) + dict = {} + k = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services") + num = 0 + while 1: + try: + svc = win32api.RegEnumKey(k, num) + except win32api.error: + break + num = num + 1 + sk = win32api.RegOpenKey(k, svc) + try: + deps, typ = win32api.RegQueryValueEx(sk, "DependOnService") + except win32api.error: + deps = () + for dep in deps: + dep = string.lower(dep) + dep_on = dict.get(dep, []) + dep_on.append(svc) + dict[dep]=dep_on + + return __ResolveDeps(findName, dict) + + +def __ResolveDeps(findName, dict): + items = dict.get(string.lower(findName), []) + retList = [] + for svc in items: + retList.insert(0, svc) + retList = __ResolveDeps(svc, dict) + retList + return retList + +def WaitForServiceStatus(serviceName, status, waitSecs, machine=None): + """Waits for the service to return the specified status. You + should have already requested the service to enter that state""" + for i in range(waitSecs*4): + now_status = QueryServiceStatus(serviceName, machine)[1] + if now_status == status: + break + win32api.Sleep(250) + else: + raise pywintypes.error, (winerror.ERROR_SERVICE_REQUEST_TIMEOUT, "QueryServiceStatus", win32api.FormatMessage(winerror.ERROR_SERVICE_REQUEST_TIMEOUT)[:-2]) + +def __StopServiceWithTimeout(hs, waitSecs = 30): + try: + status = win32service.ControlService(hs, win32service.SERVICE_CONTROL_STOP) + except pywintypes.error, (hr, name, msg): + if hr!=winerror.ERROR_SERVICE_NOT_ACTIVE: + raise win32service.error, (hr, name, msg) + for i in range(waitSecs): + status = win32service.QueryServiceStatus(hs) + if status[1] == win32service.SERVICE_STOPPED: + break + win32api.Sleep(1000) + else: + raise pywintypes.error, (winerror.ERROR_SERVICE_REQUEST_TIMEOUT, "ControlService", win32api.FormatMessage(winerror.ERROR_SERVICE_REQUEST_TIMEOUT)[:-2]) + + +def StopServiceWithDeps(serviceName, machine = None, waitSecs = 30): + # Stop a service recursively looking for dependant services + hscm = win32service.OpenSCManager(machine,None,win32service.SC_MANAGER_ALL_ACCESS) + try: + deps = __FindSvcDeps(serviceName) + for dep in deps: + hs = win32service.OpenService(hscm, dep, win32service.SERVICE_ALL_ACCESS) + try: + __StopServiceWithTimeout(hs, waitSecs) + finally: + win32service.CloseServiceHandle(hs) + # Now my service! + hs = win32service.OpenService(hscm, serviceName, win32service.SERVICE_ALL_ACCESS) + try: + __StopServiceWithTimeout(hs, waitSecs) + finally: + win32service.CloseServiceHandle(hs) + + finally: + win32service.CloseServiceHandle(hscm) + + +def StopService(serviceName, machine = None): + return ControlService(serviceName, win32service.SERVICE_CONTROL_STOP, machine) + +def StartService(serviceName, args = None, machine = None): + hscm = win32service.OpenSCManager(machine,None,win32service.SC_MANAGER_ALL_ACCESS) + try: + + hs = SmartOpenService(hscm, serviceName, win32service.SERVICE_ALL_ACCESS) + try: + win32service.StartService(hs, args) + finally: + win32service.CloseServiceHandle(hs) + finally: + win32service.CloseServiceHandle(hscm) + +def RestartService(serviceName, args = None, waitSeconds = 30, machine = None): + "Stop the service, and then start it again (with some tolerance for allowing it to stop.)" + try: + StopService(serviceName, machine) + except pywintypes.error, (hr, name, msg): + # Allow only "service not running" error + if hr!=winerror.ERROR_SERVICE_NOT_ACTIVE: + raise win32service.error, (hr, name, msg) + # Give it a few goes, as the service may take time to stop + for i in range(waitSeconds): + try: + StartService(serviceName, args, machine) + break + except pywintypes.error, (hr, name, msg): + if hr!=winerror.ERROR_SERVICE_ALREADY_RUNNING: + raise + win32api.Sleep(1000) + else: + print "Gave up waiting for the old service to stop!" + +def _DebugCtrlHandler(evt): + if evt in (win32con.CTRL_C_EVENT, win32con.CTRL_BREAK_EVENT): + assert g_debugService + print "Stopping debug service." + g_debugService.SvcStop() + return True + return False + +def DebugService(cls, argv = []): + # Run a service in "debug" mode. Re-implements what pythonservice.exe + # does when it sees a "-debug" param. + # Currently only used by "frozen" (ie, py2exe) programs (but later may + # end up being used for all services should we ever remove + # pythonservice.exe) + import servicemanager + global g_debugService + + print "Debugging service %s - press Ctrl+C to stop." % (cls._svc_name_,) + servicemanager.Debugging(True) + servicemanager.PrepareToHostSingle(cls) + g_debugService = cls(argv) + # Setup a ctrl+c handler to simulate a "stop" + win32api.SetConsoleCtrlHandler(_DebugCtrlHandler, True) + try: + g_debugService.SvcRun() + finally: + win32api.SetConsoleCtrlHandler(_DebugCtrlHandler, False) + servicemanager.Debugging(False) + g_debugService = None + +def GetServiceClassString(cls, argv = None): + if argv is None: + argv = sys.argv + import pickle, os + modName = pickle.whichmodule(cls, cls.__name__) + if modName == '__main__': + try: + fname = win32api.GetFullPathName(argv[0]) + path = os.path.split(fname)[0] + # Eaaaahhhh - sometimes this will be a short filename, which causes + # problems with 1.5.1 and the silly filename case rule. + # Get the long name + fname = os.path.join(path, win32api.FindFiles(fname)[0][8]) + except win32api.error: + raise error, "Could not resolve the path name '%s' to a full path" % (argv[0]) + modName = os.path.splitext(fname)[0] + return modName + "." + cls.__name__ + +def QueryServiceStatus(serviceName, machine=None): + hscm = win32service.OpenSCManager(machine,None,win32service.SC_MANAGER_CONNECT) + try: + + hs = SmartOpenService(hscm, serviceName, win32service.SERVICE_QUERY_STATUS) + try: + status = win32service.QueryServiceStatus(hs) + finally: + win32service.CloseServiceHandle(hs) + finally: + win32service.CloseServiceHandle(hscm) + return status + +def usage(): + try: + fname = os.path.split(sys.argv[0])[1] + except: + fname = sys.argv[0] + print "Usage: '%s [options] install|update|remove|start [...]|stop|restart [...]|debug [...]'" % fname + print "Options for 'install' and 'update' commands only:" + print " --username domain\username : The Username the service is to run under" + print " --password password : The password for the username" + print " --startup [manual|auto|disabled] : How the service starts, default = manual" + print " --interactive : Allow the service to interact with the desktop." + print " --perfmonini file: .ini file to use for registering performance monitor data" + print " --perfmondll file: .dll file to use when querying the service for" + print " performance data, default = perfmondata.dll" + print "Options for 'start' and 'stop' commands only:" + print " --wait seconds: Wait for the service to actually start or stop." + print " If you specify --wait with the 'stop' option, the service" + print " and all dependent services will be stopped, each waiting" + print " the specified period." + sys.exit(1) + +def HandleCommandLine(cls, serviceClassString = None, argv = None, customInstallOptions = "", customOptionHandler = None): + """Utility function allowing services to process the command line. + + Allows standard commands such as 'start', 'stop', 'debug', 'install' etc. + + Install supports 'standard' command line options prefixed with '--', such as + --username, --password, etc. In addition, + the function allows custom command line options to be handled by the calling function. + """ + err = 0 + + if argv is None: argv = sys.argv + + if len(argv)<=1: + usage() + + serviceName = cls._svc_name_ + serviceDisplayName = cls._svc_display_name_ + if serviceClassString is None: + serviceClassString = GetServiceClassString(cls) + + # Pull apart the command line + import getopt + try: + opts, args = getopt.getopt(argv[1:], customInstallOptions,["password=","username=","startup=","perfmonini=", "perfmondll=", "interactive", "wait="]) + except getopt.error, details: + print details + usage() + userName = None + password = None + perfMonIni = perfMonDll = None + startup = None + interactive = None + waitSecs = 0 + for opt, val in opts: + if opt=='--username': + userName = val + elif opt=='--password': + password = val + elif opt=='--perfmonini': + perfMonIni = val + elif opt=='--perfmondll': + perfMonDll = val + elif opt=='--interactive': + interactive = 1 + elif opt=='--startup': + map = {"manual": win32service.SERVICE_DEMAND_START, "auto" : win32service.SERVICE_AUTO_START, "disabled": win32service.SERVICE_DISABLED} + try: + startup = map[string.lower(val)] + except KeyError: + print "'%s' is not a valid startup option" % val + elif opt=='--wait': + try: + waitSecs = int(val) + except ValueError: + print "--wait must specify an integer number of seconds." + usage() + + arg=args[0] + knownArg = 0 + # First we process all arguments which pass additional args on + if arg=="start": + knownArg = 1 + print "Starting service %s" % (serviceName) + try: + StartService(serviceName, args[1:]) + if waitSecs: + WaitForServiceStatus(serviceName, win32service.SERVICE_RUNNING, waitSecs) + except win32service.error, (hr, fn, msg): + print "Error starting service: %s" % msg + + elif arg=="restart": + knownArg = 1 + print "Restarting service %s" % (serviceName) + RestartService(serviceName, args[1:]) + if waitSecs: + WaitForServiceStatus(serviceName, win32service.SERVICE_RUNNING, waitSecs) + + elif arg=="debug": + knownArg = 1 + if not hasattr(sys, "frozen"): + # non-frozen services use pythonservice.exe which handles a + # -debug option + svcArgs = string.join(args[1:]) + exeName = LocateSpecificServiceExe(serviceName) + try: + os.system("%s -debug %s %s" % (exeName, serviceName, svcArgs)) + # ^C is used to kill the debug service. Sometimes Python also gets + # interrupted - ignore it... + except KeyboardInterrupt: + pass + else: + # py2exe services don't use pythonservice - so we simulate + # debugging here. + DebugService(cls, args) + + if not knownArg and len(args)<>1: + usage() # the rest of the cmds don't take addn args + + if arg=="install": + knownArg = 1 + try: + serviceDeps = cls._svc_deps_ + except AttributeError: + serviceDeps = None + try: + exeName = cls._exe_name_ + except AttributeError: + exeName = None # Default to PythonService.exe + try: + exeArgs = cls._exe_args_ + except AttributeError: + exeArgs = None + try: + description = cls._svc_description_ + except AttributeError: + description = None + print "Installing service %s" % (serviceName,) + # Note that we install the service before calling the custom option + # handler, so if the custom handler fails, we have an installed service (from NT's POV) + # but is unlikely to work, as the Python code controlling it failed. Therefore + # we remove the service if the first bit works, but the second doesnt! + try: + InstallService(serviceClassString, serviceName, serviceDisplayName, serviceDeps = serviceDeps, startType=startup, bRunInteractive=interactive, userName=userName,password=password, exeName=exeName, perfMonIni=perfMonIni,perfMonDll=perfMonDll,exeArgs=exeArgs,description=description) + if customOptionHandler: + apply( customOptionHandler, (opts,) ) + print "Service installed" + except win32service.error, (hr, fn, msg): + if hr==winerror.ERROR_SERVICE_EXISTS: + arg = "update" # Fall through to the "update" param! + else: + print "Error installing service: %s (%d)" % (msg, hr) + err = hr + except ValueError, msg: # Can be raised by custom option handler. + print "Error installing service: %s" % str(msg) + err = -1 + # xxx - maybe I should remove after _any_ failed install - however, + # xxx - it may be useful to help debug to leave the service as it failed. + # xxx - We really _must_ remove as per the comments above... + # As we failed here, remove the service, so the next installation + # attempt works. + try: + RemoveService(serviceName) + except win32api.error: + print "Warning - could not remove the partially installed service." + + if arg == "update": + knownArg = 1 + try: + serviceDeps = cls._svc_deps_ + except AttributeError: + serviceDeps = None + try: + exeName = cls._exe_name_ + except AttributeError: + exeName = None # Default to PythonService.exe + try: + exeArgs = cls._exe_args_ + except AttributeError: + exeArgs = None + try: + description=cls._svc_description_ + except AttributeError: + description=None + print "Changing service configuration" + try: + ChangeServiceConfig(serviceClassString, serviceName, serviceDeps = serviceDeps, startType=startup, bRunInteractive=interactive, userName=userName,password=password, exeName=exeName, displayName = serviceDisplayName, perfMonIni=perfMonIni,perfMonDll=perfMonDll,exeArgs=exeArgs,description=description) + if customOptionHandler: + apply( customOptionHandler, (opts,) ) + print "Service updated" + except win32service.error, (hr, fn, msg): + print "Error changing service configuration: %s (%d)" % (msg,hr) + err = hr + + elif arg=="remove": + knownArg = 1 + print "Removing service %s" % (serviceName) + try: + RemoveService(serviceName) + print "Service removed" + except win32service.error, (hr, fn, msg): + print "Error removing service: %s (%d)" % (msg,hr) + err = hr + elif arg=="stop": + knownArg = 1 + print "Stopping service %s" % (serviceName) + try: + if waitSecs: + StopServiceWithDeps(serviceName, waitSecs = waitSecs) + else: + StopService(serviceName) + except win32service.error, (hr, fn, msg): + print "Error stopping service: %s (%d)" % (msg,hr) + err = hr + if not knownArg: + err = -1 + print "Unknown command - '%s'" % arg + usage() + return err + +# +# Useful base class to build services from. +# +class ServiceFramework: + # Required Attributes: + # _svc_name_ = The service name + # _svc_display_name_ = The service display name + + # Optional Attributes: + _svc_deps_ = None # sequence of service names on which this depends + _exe_name_ = None # Default to PythonService.exe + _exe_args_ = None # Default to no arguments + _svc_description_ = None # Only exists on Windows 2000 or later, ignored on windows NT + + def __init__(self, args): + import servicemanager + self.ssh = servicemanager.RegisterServiceCtrlHandler(args[0], self.ServiceCtrlHandler) + servicemanager.SetEventSourceName(self._svc_name_) + self.checkPoint = 0 + + def GetAcceptedControls(self): + # Setup the service controls we accept based on our attributes + accepted = 0 + if hasattr(self, "SvcStop"): accepted = accepted | win32service.SERVICE_ACCEPT_STOP + if hasattr(self, "SvcPause") and hasattr(self, "SvcContinue"): + accepted = accepted | win32service.SERVICE_ACCEPT_PAUSE_CONTINUE + if hasattr(self, "SvcShutdown"): accepted = accepted | win32service.SERVICE_ACCEPT_SHUTDOWN + return accepted + + def ReportServiceStatus(self, serviceStatus, waitHint = 5000, win32ExitCode = 0, svcExitCode = 0): + if self.ssh is None: # Debugging! + return + if serviceStatus == win32service.SERVICE_START_PENDING: + accepted = 0 + else: + accepted = self.GetAcceptedControls() + + if serviceStatus in [win32service.SERVICE_RUNNING, win32service.SERVICE_STOPPED]: + checkPoint = 0 + else: + self.checkPoint = self.checkPoint + 1 + checkPoint = self.checkPoint + + # Now report the status to the control manager + status = (win32service.SERVICE_WIN32_OWN_PROCESS, + serviceStatus, + accepted, # dwControlsAccepted, + win32ExitCode, # dwWin32ExitCode; + svcExitCode, # dwServiceSpecificExitCode; + checkPoint, # dwCheckPoint; + waitHint) + win32service.SetServiceStatus( self.ssh, status) + + def SvcInterrogate(self): + # Assume we are running, and everyone is happy. + self.ReportServiceStatus(win32service.SERVICE_RUNNING) + + def SvcOther(self, control): + print "Unknown control status - %d" % control + + def ServiceCtrlHandler(self, control): + if control==win32service.SERVICE_CONTROL_STOP: + self.SvcStop() + elif control==win32service.SERVICE_CONTROL_PAUSE: + self.SvcPause() + elif control==win32service.SERVICE_CONTROL_CONTINUE: + self.SvcContinue() + elif control==win32service.SERVICE_CONTROL_INTERROGATE: + self.SvcInterrogate() + elif control==win32service.SERVICE_CONTROL_SHUTDOWN: + self.SvcShutdown() + else: + self.SvcOther(control) + + def SvcRun(self): + self.ReportServiceStatus(win32service.SERVICE_RUNNING) + self.SvcDoRun() + # Once SvcDoRun terminates, the service has stopped. + # We tell the SCM the service is still stopping - the C framework + # will automatically tell the SCM it has stopped when this returns. + self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) diff --git a/thirdparty/python25/Lib/site-packages/win32/lib/win32timezone.py b/thirdparty/python25/Lib/site-packages/win32/lib/win32timezone.py new file mode 100644 index 000000000..a1d30aef1 --- /dev/null +++ b/thirdparty/python25/Lib/site-packages/win32/lib/win32timezone.py @@ -0,0 +1,293 @@ +# -*- coding: UTF-8 -*- + +""" +win32timezone: + Module for handling datetime.tzinfo time zones using the windows +registry for time zone information. The time zone names are dependent +on the registry entries defined by the operating system. + + Currently, this module only supports the Windows NT line of products +and not Windows 95/98/Me. + + This module may be tested using the doctest module. + + Written by Jason R. Coombs (jaraco@jaraco.com). + Copyright © 2003. + All Rights Reserved. + + To use this time zone module with the datetime module, simply pass +the TimeZoneInfo object to the datetime constructor. For example, + +>>> import win32timezone, datetime +>>> assert 'Mountain Standard Time' in win32timezone.GetTimeZoneNames() +>>> tzi = TimeZoneInfo( 'Mountain Standard Time' ) +>>> now = datetime.datetime.now( tzi ) + + The now object is now a time-zone aware object, and daylight savings- +aware methods may be called on it. + +>>> now.utcoffset() in ( datetime.timedelta(-1, 61200), datetime.timedelta(-1, 64800) ) +True + +(note that the result of utcoffset call will be different based on when now was +generated, unless standard time is always used) + +>>> now = datetime.datetime.now( TimeZoneInfo( 'Mountain Standard Time', True ) ) +>>> now.utcoffset() +datetime.timedelta(-1, 61200) + +>>> aug2 = datetime.datetime( 2003, 8, 2, tzinfo = tzi ) +>>> aug2.utctimetuple() +(2003, 8, 2, 6, 0, 0, 5, 214, 0) +>>> nov2 = datetime.datetime( 2003, 11, 2, tzinfo = tzi ) +>>> nov2.utctimetuple() +(2003, 11, 2, 7, 0, 0, 6, 306, 0) + +To convert from one timezone to another, just use the astimezone method. + +>>> aug2.isoformat() +'2003-08-02T00:00:00-06:00' +>>> aug2est = aug2.astimezone( win32timezone.TimeZoneInfo( 'Eastern Standard Time' ) ) +>>> aug2est.isoformat() +'2003-08-02T02:00:00-04:00' + +calling the displayName member will return the display name as set in the +registry. + +>>> est = win32timezone.TimeZoneInfo( 'Eastern Standard Time' ) +>>> est.displayName +u'(GMT-05:00) Eastern Time (US & Canada)' + +>>> gmt = win32timezone.TimeZoneInfo( 'GMT Standard Time', True ) +>>> gmt.displayName +u'(GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London' + +TimeZoneInfo now supports being pickled and comparison +>>> import pickle +>>> tz = win32timezone.TimeZoneInfo( 'China Standard Time' ) +>>> tz == pickle.loads( pickle.dumps( tz ) ) +True +""" +from __future__ import generators + +__author__ = 'Jason R. Coombs ' +__version__ = '$Revision: 1.5 $'[11:-2] +__vssauthor__ = '$Author: mhammond $'[9:-2] +__date__ = '$Modtime: 04-04-14 10:52 $'[10:-2] + +import os, _winreg, struct, datetime + +class TimeZoneInfo( datetime.tzinfo ): + """ + Main class for handling win32 time zones. + Usage: + TimeZoneInfo(

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 literal 0 HcmV?d00001 diff --git a/thirdparty/SQLite/Dll for .Net/Homepage.txt b/thirdparty/SQLite/Dll for .Net/Homepage.txt new file mode 100644 index 000000000..51222311e --- /dev/null +++ b/thirdparty/SQLite/Dll for .Net/Homepage.txt @@ -0,0 +1 @@ +http://sqlite.phxsoftware.com/ \ No newline at end of file diff --git a/thirdparty/SQLite/Dll for .Net/License.txt b/thirdparty/SQLite/Dll for .Net/License.txt new file mode 100644 index 000000000..5096c6573 --- /dev/null +++ b/thirdparty/SQLite/Dll for .Net/License.txt @@ -0,0 +1,6 @@ +ADO.NET 2.0 SQLite Data Provider +Version 1.0.49.0 May 28, 2008 +Using SQLite 3.5.9 +Written by Robert Simpson (robert@blackcastlesoft.com) +Released to the public domain, use at your own risk! +Official provider website: http://sqlite.phxsoftware.com diff --git a/thirdparty/SQLite/Dll for .Net/System.Data.SQLite.DLL b/thirdparty/SQLite/Dll for .Net/System.Data.SQLite.DLL new file mode 100644 index 0000000000000000000000000000000000000000..6e1905726f70f7a9cf53af5327f34daf4d576fdf GIT binary patch literal 619520 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