mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-08-05 08:40:13 -04:00
Convert all unicode characters to ASCII when creating file paths on the device
This commit is contained in:
parent
b9ed47c15b
commit
11068e0e09
@ -49,6 +49,7 @@ def freeze():
|
||||
'/usr/lib/libMagickCore.so',
|
||||
'/usr/lib/libgcrypt.so.11',
|
||||
'/usr/lib/libgpg-error.so.0',
|
||||
'/usr/lib/libphonon.so.4',
|
||||
]
|
||||
|
||||
binary_includes += [os.path.join(QTDIR, 'lib%s.so.4'%x) for x in QTDLLS]
|
||||
|
@ -15,7 +15,7 @@ from calibre.devices.interface import DevicePlugin
|
||||
from calibre.devices.errors import DeviceError
|
||||
from calibre.devices.usbms.deviceconfig import DeviceConfig
|
||||
from calibre import iswindows, islinux, isosx, __appname__
|
||||
from calibre import sanitize_file_name as sanitize
|
||||
from calibre.utils.filenames import ascii_filename as sanitize
|
||||
|
||||
class Device(DeviceConfig, DevicePlugin):
|
||||
'''
|
||||
|
@ -1,97 +1,11 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
'''
|
||||
Make strings safe for use as ASCII filenames, while trying to preserve as much
|
||||
Make strings safe for use as ASCII filenames, while trying to preserve as much
|
||||
meaning as possible.
|
||||
'''
|
||||
|
||||
import re, string
|
||||
|
||||
MAP = {
|
||||
u"‘" : "'",
|
||||
u"’" : "'",
|
||||
u"«" : '"',
|
||||
u"»" : '"',
|
||||
u"…" : "...",
|
||||
u"№" : "#",
|
||||
u"Щ" : "Shh",
|
||||
u"Ё" : "Jo",
|
||||
u"Ж" : "Zh",
|
||||
u"Ц" : "C",
|
||||
u"Ч" : "Ch",
|
||||
u"Ш" : "Sh",
|
||||
u"Ы" : "Y",
|
||||
u"Ю" : "Ju",
|
||||
u"Я" : "Ja",
|
||||
u"Б" : "B",
|
||||
u"Г" : "G",
|
||||
u"Д" : "D",
|
||||
u"И" : "I",
|
||||
u"Й" : "J",
|
||||
u"К" : "K",
|
||||
u"Л" : "L",
|
||||
u"П" : "P",
|
||||
u"Ф" : "F",
|
||||
u"Э" : "E",
|
||||
u"Ъ" : "`",
|
||||
u"Ь" : "'",
|
||||
u"щ" : "shh",
|
||||
u"ё" : "jo",
|
||||
u"ж" : "zh",
|
||||
u"ц" : "c",
|
||||
u"ч" : "ch",
|
||||
u"ш" : "sh",
|
||||
u"ы" : "y",
|
||||
u"ю" : "ju",
|
||||
u"я" : "ja",
|
||||
u"б" : "b",
|
||||
u"в" : "v",
|
||||
u"г" : "g",
|
||||
u"д" : "d",
|
||||
u"з" : "z",
|
||||
u"и" : "i",
|
||||
u"й" : "j",
|
||||
u"к" : "k",
|
||||
u"л" : "l",
|
||||
u"м" : "m",
|
||||
u"н" : "n",
|
||||
u"о" : "o",
|
||||
u"п" : "p",
|
||||
u"т" : "t",
|
||||
u"ф" : "f",
|
||||
u"э" : "e",
|
||||
u"ъ" : "`",
|
||||
u"ь" : "'",
|
||||
u"А" : "A",
|
||||
u"В" : "V",
|
||||
u"Е" : "Je",
|
||||
u"З" : "Z",
|
||||
u"М" : "M",
|
||||
u"Н" : "N",
|
||||
u"О" : "O",
|
||||
u"Р" : "R",
|
||||
u"С" : "S",
|
||||
u"Т" : "T",
|
||||
u"У" : "U",
|
||||
u"Х" : "Kh",
|
||||
u"Є" : "Je",
|
||||
u"Ї" : "Ji",
|
||||
u"а" : "a",
|
||||
u"е" : "je",
|
||||
u"р" : "r",
|
||||
u"с" : "s",
|
||||
u"у" : "u",
|
||||
u"х" : "kh",
|
||||
u"є" : "je",
|
||||
} #: Translation table
|
||||
|
||||
for c in string.whitespace:
|
||||
MAP[c] = ' '
|
||||
PAT = re.compile('['+u''.join(MAP.keys())+']')
|
||||
from calibre.ebooks.unidecode.unidecoder import Unidecoder
|
||||
from calibre import sanitize_file_name
|
||||
udc = Unidecoder()
|
||||
|
||||
def ascii_filename(orig):
|
||||
orig = PAT.sub(lambda m:MAP[m.group()], orig)
|
||||
buf = []
|
||||
for i in range(len(orig)):
|
||||
val = ord(orig[i])
|
||||
buf.append('_' if val < 33 or val > 126 else orig[i])
|
||||
return (''.join(buf)).encode('ascii')
|
||||
return sanitize_file_name(udc.decode(orig).replace('?', '_'))
|
||||
|
Loading…
x
Reference in New Issue
Block a user