This commit is contained in:
Kovid Goyal 2010-03-05 13:25:20 -07:00
commit 1274225932
2 changed files with 19 additions and 19 deletions

View file

@ -185,6 +185,7 @@ def get_bookmark_data(self, path):
from calibre.ebooks.metadata.mobi import StreamSlicer
user_notes = {}
if self.bookmark_extension == 'mbp':
MAGIC_MOBI_CONSTANT = 150
with open(path,'rb') as f:
stream = StringIO(f.read())
data = StreamSlicer(stream)
@ -192,7 +193,7 @@ def get_bookmark_data(self, path):
bpar_offset, = unpack('>I', data[0x4e:0x52])
lrlo = bpar_offset + 0x0c
self.last_read = int(unpack('>I', data[lrlo:lrlo+4])[0])
self.last_read_location = self.last_read/150 + 1
self.last_read_location = self.last_read/MAGIC_MOBI_CONSTANT + 1
entries, = unpack('>I', data[0x4a:0x4e])
# Store the annotations/locations
@ -204,7 +205,6 @@ def get_bookmark_data(self, path):
# Walk bookmark entries
#print " --- %s --- " % path
#print " last_read_location: %d" % self.magicKindleLocationCalculator(last_read_location)
current_entry = 1
sig = data[eo:eo+4]
previous_block = None
@ -229,14 +229,11 @@ def get_bookmark_data(self, path):
text = data[eo+8:eo+8+rec_len].decode('utf-16-be')
if entry_type:
displayed_location = location/150 + 1
displayed_location = location/MAGIC_MOBI_CONSTANT + 1
user_notes[location] = dict(id=self.id,
displayed_location=displayed_location,
type=entry_type,
text=text)
#print " %2d: %s %s" % (current_entry, entry_type,'at %d' % location if location else '')
#if current_block == 'text_block':
#self.textdump(text)
eo += rec_len + 8
current_entry += 1
@ -246,17 +243,19 @@ def get_bookmark_data(self, path):
while sig == 'BKMK':
# Fix start location for Highlights using BKMK data
end_loc, = unpack('>I', data[eo+0x10:eo+0x14])
if end_loc in user_notes and user_notes[end_loc]['type'] != 'Note':
if end_loc in user_notes and user_notes[end_loc]['type'] == 'Highlight':
start, = unpack('>I', data[eo+8:eo+12])
user_notes[start] = user_notes[end_loc]
user_notes.pop(end_loc)
#print "changing start location of %d to %d" % (end_loc,start)
elif end_loc in user_notes and user_notes[end_loc]['type'] == 'Note':
# Skip duplicate bookmarks for notes
pass
else:
# If a bookmark coincides with a user annotation, the locs could
# be the same - cheat by nudging -1
# Skip bookmark for last_read_location
if end_loc != self.last_read:
displayed_location = end_loc/150 + 1
displayed_location = end_loc/MAGIC_MOBI_CONSTANT + 1
user_notes[end_loc - 1] = dict(id=self.id,
displayed_location=displayed_location,
type='Bookmark',
@ -267,12 +266,13 @@ def get_bookmark_data(self, path):
elif self.bookmark_extension == 'tan':
# TAN bookmarks
MAGIC_TOPAZ_CONSTANT = 33.33
self.timestamp = os.path.getmtime(path)
with open(path,'rb') as f:
stream = StringIO(f.read())
data = StreamSlicer(stream)
self.last_read = int(unpack('>I', data[5:9])[0])
self.last_read_location = self.last_read/33.33 + 1
self.last_read_location = self.last_read/MAGIC_TOPAZ_CONSTANT + 1
entries, = unpack('>I', data[9:13])
current_entry = 0
e_base = 0x0d
@ -294,7 +294,7 @@ def get_bookmark_data(self, path):
if self.book_format in ['tpz','azw1']:
# *** This needs fine-tuning
displayed_location = location/33.33 + 1
displayed_location = location/MAGIC_TOPAZ_CONSTANT + 1
elif self.book_format == 'pdf':
# *** This needs testing
displayed_location = location

View file

@ -13,8 +13,8 @@
from calibre.customize.conversion import OptionRecommendation, DummyReporter
from calibre.ebooks.BeautifulSoup import BeautifulSoup, BeautifulStoneSoup, Tag, NavigableString
from calibre.ptempfile import PersistentTemporaryDirectory
from calibre.utils.logging import Log
from calibre.utils.date import isoformat, now as nowf
from calibre.utils.logging import default_log as log
FIELDS = ['all', 'author_sort', 'authors', 'comments',
'cover', 'formats', 'id', 'isbn', 'pubdate', 'publisher', 'rating',
@ -54,7 +54,6 @@ class CSV_XML(CatalogPlugin):
"Applies to: CSV, XML output formats"))]
def run(self, path_to_output, opts, db, notification=DummyReporter()):
log = Log()
self.fmt = path_to_output.rpartition('.')[2]
self.notification = notification
@ -349,7 +348,7 @@ def __init__(self, number, verbose=False):
self.number_as_float = 0.0
self.text = ''
self.verbose = verbose
self.log = Log()
self.log = log
self.numberTranslate()
def stringFromInt(self, intToTranslate):
@ -3853,6 +3852,8 @@ def markdownComments(self, comments):
lost_cr.group(2),
lost_cr.group(3)))
# Extract pre-built elements - annotations, etc.
if not isinstance(comments, unicode):
comments = comments.decode('utf-8', 'replace')
soup = BeautifulSoup(comments)
elems = soup.findAll('div')
for elem in elems:
@ -3860,11 +3861,13 @@ def markdownComments(self, comments):
# Reconstruct comments w/o <div>s
comments = soup.renderContents()
if not isinstance(comments, unicode):
comments = comments.decode('utf-8', 'replace')
# Convert \n\n to <p>s
if re.search('\n\n', comments):
soup = BeautifulSoup()
split_ps = comments.split('\n\n')
split_ps = comments.split(u'\n\n')
tsc = 0
for p in split_ps:
pTag = Tag(soup,'p')
@ -3929,9 +3932,6 @@ def markdownComments(self, comments):
return result.renderContents(encoding=None)
def magicKindleLocationCalculator(self,offset):
return offset/150 + 1
def processSpecialTags(self, tags, this_title, opts):
tag_list = []
for tag in tags:
@ -3970,7 +3970,7 @@ def logerror(self):
self.opts.log.info('%s not implemented' % self.error)
def run(self, path_to_output, opts, db, notification=DummyReporter()):
opts.log = log = Log()
opts.log = log
opts.fmt = self.fmt = path_to_output.rpartition('.')[2]
# Add local options