diff --git a/src/calibre/ebooks/oeb/display/webview.py b/src/calibre/ebooks/oeb/display/webview.py index 2cbf7c755a..a186044fe5 100644 --- a/src/calibre/ebooks/oeb/display/webview.py +++ b/src/calibre/ebooks/oeb/display/webview.py @@ -31,7 +31,8 @@ def self_closing_sub(match): return '<%s%s>'%(match.group(1), match.group(2), match.group(1)) def load_html(path, view, codec='utf-8', mime_type=None, - pre_load_callback=lambda x:None, path_is_html=False): + pre_load_callback=lambda x:None, path_is_html=False, + force_as_html=False): from PyQt4.Qt import QUrl, QByteArray if mime_type is None: mime_type = guess_type(path)[0] @@ -44,18 +45,20 @@ def load_html(path, view, codec='utf-8', mime_type=None, html = f.read().decode(codec, 'replace') html = EntityDeclarationProcessor(html).processed_html - has_svg = re.search(r'<[:a-zA-Z]*svg', html) is not None self_closing_pat = re.compile(r'<\s*([A-Za-z1-6]+)([^>]*)/\s*>') html = self_closing_pat.sub(self_closing_sub, html) loading_url = QUrl.fromLocalFile(path) pre_load_callback(loading_url) - if has_svg: + if force_as_html or re.search(r'<[:a-zA-Z]*svg', html) is None: + view.setHtml(html, loading_url) + else: view.setContent(QByteArray(html.encode(codec)), mime_type, loading_url) - else: - view.setHtml(html, loading_url) - - + mf = view.page().mainFrame() + elem = mf.findFirstElement('parsererror') + if not elem.isNull(): + return False + return True diff --git a/src/calibre/gui2/viewer/documentview.py b/src/calibre/gui2/viewer/documentview.py index 1878b5e760..7df171a404 100644 --- a/src/calibre/gui2/viewer/documentview.py +++ b/src/calibre/gui2/viewer/documentview.py @@ -790,7 +790,8 @@ class DocumentView(QWebView): # {{{ self.manager.load_started() load_html(path, self, codec=getattr(path, 'encoding', 'utf-8'), mime_type=getattr(path, - 'mime_type', 'text/html'), pre_load_callback=callback) + 'mime_type', 'text/html'), pre_load_callback=callback, + force_as_html=True) entries = set() for ie in getattr(path, 'index_entries', []): if ie.start_anchor: