mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
CHM Input: Fix incorrect decoding for CHM files whose hhc file is also a content file. Fixes #1151721 (Private bug)
This commit is contained in:
parent
55030cc0b0
commit
d46af974bc
@ -53,6 +53,7 @@ class CHMReader(CHMFile):
|
|||||||
self._playorder = 0
|
self._playorder = 0
|
||||||
self._metadata = False
|
self._metadata = False
|
||||||
self._extracted = False
|
self._extracted = False
|
||||||
|
self.re_encoded_files = set()
|
||||||
|
|
||||||
# location of '.hhc' file, which is the CHM TOC.
|
# location of '.hhc' file, which is the CHM TOC.
|
||||||
if self.topics is None:
|
if self.topics is None:
|
||||||
@ -147,8 +148,8 @@ class CHMReader(CHMFile):
|
|||||||
f.write(data)
|
f.write(data)
|
||||||
|
|
||||||
self._extracted = True
|
self._extracted = True
|
||||||
files = [x for x in os.listdir(output_dir) if
|
files = [y for y in os.listdir(output_dir) if
|
||||||
os.path.isfile(os.path.join(output_dir, x))]
|
os.path.isfile(os.path.join(output_dir, y))]
|
||||||
if self.hhc_path not in files:
|
if self.hhc_path not in files:
|
||||||
for f in files:
|
for f in files:
|
||||||
if f.lower() == self.hhc_path.lower():
|
if f.lower() == self.hhc_path.lower():
|
||||||
@ -249,7 +250,9 @@ class CHMReader(CHMFile):
|
|||||||
pass
|
pass
|
||||||
# do not prettify, it would reformat the <pre> tags!
|
# do not prettify, it would reformat the <pre> tags!
|
||||||
try:
|
try:
|
||||||
return str(soup)
|
ans = str(soup)
|
||||||
|
self.re_encoded_files.add(os.path.abspath(htmlpath))
|
||||||
|
return ans
|
||||||
except RuntimeError:
|
except RuntimeError:
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
@ -25,7 +25,6 @@ class CHMInput(InputFormatPlugin):
|
|||||||
self._chm_reader = rdr
|
self._chm_reader = rdr
|
||||||
return rdr.hhc_path
|
return rdr.hhc_path
|
||||||
|
|
||||||
|
|
||||||
def convert(self, stream, options, file_ext, log, accelerators):
|
def convert(self, stream, options, file_ext, log, accelerators):
|
||||||
from calibre.ebooks.chm.metadata import get_metadata_from_reader
|
from calibre.ebooks.chm.metadata import get_metadata_from_reader
|
||||||
from calibre.customize.ui import plugin_for_input_format
|
from calibre.customize.ui import plugin_for_input_format
|
||||||
@ -63,7 +62,10 @@ class CHMInput(InputFormatPlugin):
|
|||||||
|
|
||||||
options.debug_pipeline = None
|
options.debug_pipeline = None
|
||||||
options.input_encoding = 'utf-8'
|
options.input_encoding = 'utf-8'
|
||||||
htmlpath, toc = self._create_html_root(mainpath, log, encoding)
|
uenc = encoding
|
||||||
|
if os.path.abspath(mainpath) in self._chm_reader.re_encoded_files:
|
||||||
|
uenc = 'utf-8'
|
||||||
|
htmlpath, toc = self._create_html_root(mainpath, log, uenc)
|
||||||
oeb = self._create_oebbook_html(htmlpath, tdir, options, log, metadata)
|
oeb = self._create_oebbook_html(htmlpath, tdir, options, log, metadata)
|
||||||
options.debug_pipeline = odi
|
options.debug_pipeline = odi
|
||||||
if toc.count() > 1:
|
if toc.count() > 1:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user