mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
...
This commit is contained in:
parent
a66c9c5e1a
commit
6401dafec5
@ -277,7 +277,8 @@ class MOBIHeader(object): # {{{
|
|||||||
self.first_image_index, = struct.unpack(b'>I', self.raw[108:112])
|
self.first_image_index, = struct.unpack(b'>I', self.raw[108:112])
|
||||||
self.huffman_record_offset, = struct.unpack(b'>I', self.raw[112:116])
|
self.huffman_record_offset, = struct.unpack(b'>I', self.raw[112:116])
|
||||||
self.huffman_record_count, = struct.unpack(b'>I', self.raw[116:120])
|
self.huffman_record_count, = struct.unpack(b'>I', self.raw[116:120])
|
||||||
self.unknown2 = self.raw[120:128]
|
self.datp_record_offset, = struct.unpack(b'>I', self.raw[120:124])
|
||||||
|
self.datp_record_count, = struct.unpack(b'>I', self.raw[124:128])
|
||||||
self.exth_flags, = struct.unpack(b'>I', self.raw[128:132])
|
self.exth_flags, = struct.unpack(b'>I', self.raw[128:132])
|
||||||
self.has_exth = bool(self.exth_flags & 0x40)
|
self.has_exth = bool(self.exth_flags & 0x40)
|
||||||
self.has_drm_data = self.length >= 174 and len(self.raw) >= 180
|
self.has_drm_data = self.length >= 174 and len(self.raw) >= 180
|
||||||
@ -352,7 +353,8 @@ class MOBIHeader(object): # {{{
|
|||||||
ans.append('First Image index: %d'%self.first_image_index)
|
ans.append('First Image index: %d'%self.first_image_index)
|
||||||
ans.append('Huffman record offset: %d'%self.huffman_record_offset)
|
ans.append('Huffman record offset: %d'%self.huffman_record_offset)
|
||||||
ans.append('Huffman record count: %d'%self.huffman_record_count)
|
ans.append('Huffman record count: %d'%self.huffman_record_count)
|
||||||
ans.append('Unknown2: %r'%self.unknown2)
|
ans.append('DATP record offset: %r'%self.datp_record_offset)
|
||||||
|
ans.append('DATP record count: %r'%self.datp_record_count)
|
||||||
ans.append('EXTH flags: %s (%s)'%(bin(self.exth_flags)[2:], self.has_exth))
|
ans.append('EXTH flags: %s (%s)'%(bin(self.exth_flags)[2:], self.has_exth))
|
||||||
if self.has_drm_data:
|
if self.has_drm_data:
|
||||||
ans.append('Unknown3: %r'%self.unknown3)
|
ans.append('Unknown3: %r'%self.unknown3)
|
||||||
@ -920,7 +922,7 @@ class BinaryRecord(object): # {{{
|
|||||||
self.raw = record.raw
|
self.raw = record.raw
|
||||||
sig = self.raw[:4]
|
sig = self.raw[:4]
|
||||||
name = '%06d'%idx
|
name = '%06d'%idx
|
||||||
if sig in (b'FCIS', b'FLIS', b'SRCS'):
|
if sig in (b'FCIS', b'FLIS', b'SRCS', b'DATP'):
|
||||||
name += '-' + sig.decode('ascii')
|
name += '-' + sig.decode('ascii')
|
||||||
elif sig == b'\xe9\x8e\r\n':
|
elif sig == b'\xe9\x8e\r\n':
|
||||||
name += '-' + 'EOF'
|
name += '-' + 'EOF'
|
||||||
@ -1142,12 +1144,13 @@ class MOBIFile(object): # {{{
|
|||||||
self.records.append(Record(section(i), self.record_headers[i]))
|
self.records.append(Record(section(i), self.record_headers[i]))
|
||||||
|
|
||||||
self.mobi_header = MOBIHeader(self.records[0])
|
self.mobi_header = MOBIHeader(self.records[0])
|
||||||
|
self.huffman_record_nums = []
|
||||||
|
|
||||||
if 'huff' in self.mobi_header.compression.lower():
|
if 'huff' in self.mobi_header.compression.lower():
|
||||||
huffrecs = [self.records[r].raw for r in
|
self.huffman_record_nums = list(xrange(self.mobi_header.huffman_record_offset,
|
||||||
xrange(self.mobi_header.huffman_record_offset,
|
|
||||||
self.mobi_header.huffman_record_offset +
|
self.mobi_header.huffman_record_offset +
|
||||||
self.mobi_header.huffman_record_count)]
|
self.mobi_header.huffman_record_count))
|
||||||
|
huffrecs = [self.records[r].raw for r in self.huffman_record_nums]
|
||||||
from calibre.ebooks.mobi.huffcdic import HuffReader
|
from calibre.ebooks.mobi.huffcdic import HuffReader
|
||||||
huffs = HuffReader(huffrecs)
|
huffs = HuffReader(huffrecs)
|
||||||
decompress = lambda x: huffs.decompress([x])
|
decompress = lambda x: huffs.decompress([x])
|
||||||
@ -1181,7 +1184,7 @@ class MOBIFile(object): # {{{
|
|||||||
min(len(self.records), ntr+1))]
|
min(len(self.records), ntr+1))]
|
||||||
self.image_records, self.binary_records = [], []
|
self.image_records, self.binary_records = [], []
|
||||||
for i in xrange(fntbr, len(self.records)):
|
for i in xrange(fntbr, len(self.records)):
|
||||||
if i in self.indexing_record_nums:
|
if i in self.indexing_record_nums or i in self.huffman_record_nums:
|
||||||
continue
|
continue
|
||||||
r = self.records[i]
|
r = self.records[i]
|
||||||
fmt = None
|
fmt = None
|
||||||
|
Loading…
x
Reference in New Issue
Block a user