mirror of
https://github.com/apprenticeharper/DeDRM_tools
synced 2024-11-17 07:47:28 +01:00
afa4ac5716
THIS IS ON THE MASTER BRANCH. The Master branch will be Python 3.0 from now on. While Python 2.7 support will not be deliberately broken, all efforts should now focus on Python 3.0 compatibility. I can see a lot of work has been done. There's more to do. I've bumped the version number of everything I came across to the next major number for Python 3.0 compatibility indication. Thanks everyone. I hope to update here at least once a week until we have a stable 7.0 release for calibre 5.0
88 lines
2.3 KiB
Python
88 lines
2.3 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import sys, os
|
|
import locale
|
|
import codecs
|
|
|
|
# get sys.argv arguments and encode them into utf-8
|
|
def unicode_argv():
|
|
if sys.platform.startswith('win'):
|
|
# Uses shell32.GetCommandLineArgvW to get sys.argv as a list of Unicode
|
|
# strings.
|
|
|
|
# Versions 2.x of Python don't support Unicode in sys.argv on
|
|
# Windows, with the underlying Windows API instead replacing multi-byte
|
|
# characters with '?'.
|
|
|
|
|
|
from ctypes import POINTER, byref, cdll, c_int, windll
|
|
from ctypes.wintypes import LPCWSTR, LPWSTR
|
|
|
|
GetCommandLineW = cdll.kernel32.GetCommandLineW
|
|
GetCommandLineW.argtypes = []
|
|
GetCommandLineW.restype = LPCWSTR
|
|
|
|
CommandLineToArgvW = windll.shell32.CommandLineToArgvW
|
|
CommandLineToArgvW.argtypes = [LPCWSTR, POINTER(c_int)]
|
|
CommandLineToArgvW.restype = POINTER(LPWSTR)
|
|
|
|
cmd = GetCommandLineW()
|
|
argc = c_int(0)
|
|
argv = CommandLineToArgvW(cmd, byref(argc))
|
|
if argc.value > 0:
|
|
# Remove Python executable and commands if present
|
|
start = argc.value - len(sys.argv)
|
|
return [argv[i] for i in
|
|
xrange(start, argc.value)]
|
|
# if we don't have any arguments at all, just pass back script name
|
|
# this should never happen
|
|
return [u"DeDRM.py"]
|
|
else:
|
|
argvencoding = sys.stdin.encoding
|
|
if argvencoding == None:
|
|
argvencoding = "utf-8"
|
|
return arg
|
|
|
|
|
|
def add_cp65001_codec():
|
|
try:
|
|
codecs.lookup('cp65001')
|
|
except LookupError:
|
|
codecs.register(
|
|
lambda name: name == 'cp65001' and codecs.lookup('utf-8') or None)
|
|
return
|
|
|
|
|
|
def set_utf8_default_encoding():
|
|
if sys.getdefaultencoding() == 'utf-8':
|
|
return
|
|
|
|
# Regenerate setdefaultencoding.
|
|
reload(sys)
|
|
sys.setdefaultencoding('utf-8')
|
|
|
|
for attr in dir(locale):
|
|
if attr[0:3] != 'LC_':
|
|
continue
|
|
aref = getattr(locale, attr)
|
|
try:
|
|
locale.setlocale(aref, '')
|
|
except locale.Error:
|
|
continue
|
|
try:
|
|
lang = locale.getlocale(aref)[0]
|
|
except (TypeError, ValueError):
|
|
continue
|
|
if lang:
|
|
try:
|
|
locale.setlocale(aref, (lang, 'UTF-8'))
|
|
except locale.Error:
|
|
os.environ[attr] = lang + '.UTF-8'
|
|
try:
|
|
locale.setlocale(locale.LC_ALL, '')
|
|
except locale.Error:
|
|
pass
|
|
return
|
|
|
|
|