def __init__(self, input, log, input_encoding=None): CHMFile.__init__(self) if isinstance(input, unicode_type): input = input.encode(filesystem_encoding) if not self.LoadCHM(input): raise CHMError("Unable to open CHM file '%s'"%(input,)) self.log = log self.input_encoding = input_encoding self.chm_encoding = self.get_encoding() or 'cp1252' self._sourcechm = input self._contents = None self._playorder = 0 self._metadata = False self._extracted = False self.re_encoded_files = set() if self.home: self.home = as_unicode(self.home, self.chm_encoding) if self.topics: self.topics = as_unicode(self.topics, self.chm_encoding) # location of '.hhc' file, which is the CHM TOC. if self.topics is None: self.root, ext = os.path.splitext(self.home.lstrip('/')) self.hhc_path = self.root + ".hhc" else: self.root, ext = os.path.splitext(self.topics.lstrip('/')) self.hhc_path = self.root + ".hhc"
def __init__(self, input, log, input_encoding=None): CHMFile.__init__(self) if isinstance(input, unicode_type): enc = 'mbcs' if iswindows else filesystem_encoding try: input = input.encode(enc) except UnicodeEncodeError: from calibre.ptempfile import PersistentTemporaryFile with PersistentTemporaryFile(suffix='.chm') as t: t.write(open(input, 'rb').read()) input = t.name if not self.LoadCHM(input): raise CHMError("Unable to open CHM file '%s'" % (input, )) self.log = log self.input_encoding = input_encoding self._sourcechm = input self._contents = None self._playorder = 0 self._metadata = False self._extracted = False self.re_encoded_files = set() self.get_encodings() if self.home: self.home = self.decode_hhp_filename(self.home) if self.topics: self.topics = self.decode_hhp_filename(self.topics) # location of '.hhc' file, which is the CHM TOC. base = self.topics or self.home self.root = os.path.splitext(base.lstrip('/'))[0] self.hhc_path = self.root + ".hhc"
def __init__(self, filename=None): CHMFile.__init__(self) self.nodes = [] if filename: self.open(filename)