mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Ebook-viewer: Handle non-ascii CSS files when doing font substituitions
This commit is contained in:
parent
556d8971d2
commit
136d1e4a19
@ -152,13 +152,17 @@ class EbookIterator(object):
|
||||
prints('Substituting font family: %s -> %s'%(bad, good))
|
||||
return match.group().replace(bad, '"%s"'%good)
|
||||
|
||||
from calibre.ebooks.chardet import force_encoding
|
||||
for csspath in css_files:
|
||||
with open(csspath, 'r+b') as f:
|
||||
css = f.read()
|
||||
css = font_family_pat.sub(prepend_embedded_font, css)
|
||||
f.seek(0)
|
||||
f.truncate()
|
||||
f.write(css)
|
||||
enc = force_encoding(css, False)
|
||||
css = css.decode(enc, 'replace')
|
||||
ncss = font_family_pat.sub(prepend_embedded_font, css)
|
||||
if ncss != css:
|
||||
f.seek(0)
|
||||
f.truncate()
|
||||
f.write(ncss.encode(enc))
|
||||
|
||||
def __enter__(self, processed=False):
|
||||
self.delete_on_exit = []
|
||||
|
54
src/calibre/utils/network.py
Normal file
54
src/calibre/utils/network.py
Normal file
@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env python
|
||||
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
|
||||
from __future__ import with_statement
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
from calibre.constants import iswindows, islinux, isfreebsd
|
||||
|
||||
class LinuxNetworkStatus(object):
|
||||
|
||||
def __init__(self):
|
||||
try:
|
||||
import dbus
|
||||
bus = dbus.SystemBus()
|
||||
proxy = bus.get_object("org.freedesktop.NetworkManager",
|
||||
"/org/freedesktop/NetworkManager")
|
||||
self.manager = dbus.Interface(proxy, "org.freedesktop.DBus.Properties")
|
||||
except:
|
||||
self.manager = None
|
||||
|
||||
def __call__(self):
|
||||
if self.manager is None:
|
||||
return True
|
||||
try:
|
||||
connections = self.manager.Get("org.freedesktop.NetworkManager",
|
||||
"ActiveConnections")
|
||||
return len(connections) > 0
|
||||
except:
|
||||
return True
|
||||
|
||||
class WindowsNetworkStatus(object):
|
||||
|
||||
def __init__(self):
|
||||
from calibre.constants import plugins
|
||||
self.winutil = plugins['winutil'][0]
|
||||
|
||||
def __call__(self):
|
||||
if self.winutil is None:
|
||||
return True
|
||||
return self.winutil.internet_connected()
|
||||
|
||||
class DummyNetworkStatus(object):
|
||||
|
||||
def __call__(self):
|
||||
return True
|
||||
|
||||
_network_status = WindowsNetworkStatus() if iswindows else \
|
||||
LinuxNetworkStatus() if (islinux or isfreebsd) else \
|
||||
DummyNetworkStatus()
|
||||
|
||||
def internet_connected():
|
||||
return _network_status()
|
Loading…
x
Reference in New Issue
Block a user