Fix bug in html2lrf that affected external links without a fragment.

This commit is contained in:
Kovid Goyal 2007-04-30 19:41:02 +00:00
parent 50811803d0
commit 0df0475b05
4 changed files with 59 additions and 18 deletions

View File

@ -15,7 +15,7 @@ Var MUI_TEMP
!define PRODUCT_NAME "libprs500"
!define XPUI_BRANDINGTEXT "${PRODUCT_NAME} created by Kovid Goyal"
!define PRODUCT_VERSION "0.3.14"
!define PRODUCT_VERSION "0.3.15"
!define WEBSITE "https://libprs500.kovidgoyal.net"
!define PY2EXE_DIR "C:\libprs500"
!define LIBUSB_DIR "C:\libusb-prs500"

View File

@ -343,7 +343,8 @@ class HTMLConverter(object):
prop.update(self.parse_style_properties(tag["style"]))
return prop
def parse_file(self):
def parse_file(self):
previous = self.book.last_page()
self.current_page = Page()
self.current_block = TextBlock()
self.current_para = Paragraph()
@ -358,6 +359,22 @@ class HTMLConverter(object):
self.current_block.append_to(self.current_page)
if self.current_page and self.current_page.get_text().strip():
self.book.append(self.current_page)
previous = self.current_page
if not self.top.parent:
if not previous:
previous = self.current_page
found = False
for page in self.book.pages():
if page == previous:
found = True
if found:
self.top = page.contents[0]
break
if not self.top.parent:
print self.top
raise ConversionError, 'Could not parse ' + self.file_name
def get_text(self, tag):
@ -384,7 +401,8 @@ class HTMLConverter(object):
para, tag = link.para, link.tag
if not path or os.path.basename(path) == self.file_name:
if fragment in self.targets.keys():
tb = self.targets[fragment]
tb = self.targets[fragment]
sys.stdout.flush()
jb = JumpButton(tb)
self.book.append(jb)
cb = CharButton(jb, text=self.get_text(tag))
@ -401,7 +419,7 @@ class HTMLConverter(object):
self.files[path] = HTMLConverter(self.book, path, \
font_delta=self.font_delta, verbose=self.verbose)
HTMLConverter.processed_files[path] = self.files[path]
except Exception, e:
except Exception:
print >>sys.stderr, 'Unable to process', path
traceback.print_exc()
continue
@ -566,6 +584,7 @@ class HTMLConverter(object):
self.current_page.append(self.current_block)
self.current_block = TextBlock()
else:
print 'yay'
found, marked = False, False
for item in self.current_page.contents:
if item == previous:

View File

@ -456,6 +456,27 @@ class Book(Delegator):
self.applySettings(settings, testValid=True)
def pages(self):
'''Return list of Page objects in this book '''
ans = []
for item in self.delegates:
if isinstance(item, Main):
for candidate in item.contents:
if isinstance(candidate, Page):
ans.append(candidate)
break
return ans
def last_page(self):
'''Return last Page in this book '''
for item in self.delegates:
if isinstance(item, Main):
temp = list(item.contents)
temp.reverse()
for candidate in temp:
if isinstance(candidate, Page):
return candidate
def getSettings(self):
return ["sourceencoding"]

View File

@ -13,17 +13,18 @@ def descrambleBuf(buf, l, xorKey):
l-=1
return a.tostring()
f = open(sys.argv[1], 'rb')
f.seek(0x0a)
xorkey = struct.unpack('<H', f.read(2))[0]
f.seek(int(sys.argv[2], 16) + 0x10)
flags = struct.unpack('<H', f.read(2))[0]
f.read(2)
l = struct.unpack('<I', f.read(4))[0]
f.read(2)
raw = f.read(l)
key = (l % xorkey) + 0x0f
descrambled = descrambleBuf(raw, l, key) if (flags & 0x200) else raw
stream = zlib.decompress(descrambled[4:]) if (flags & 0x100) else descrambled
print stream
if __name__ == '__main__':
f = open(sys.argv[1], 'rb')
f.seek(0x0a)
xorkey = struct.unpack('<H', f.read(2))[0]
f.seek(int(sys.argv[2], 16) + 0x10)
flags = struct.unpack('<H', f.read(2))[0]
f.read(2)
l = struct.unpack('<I', f.read(4))[0]
f.read(2)
raw = f.read(l)
key = (l % xorkey) + 0x0f
descrambled = descrambleBuf(raw, l, key) if (flags & 0x200) else raw
stream = zlib.decompress(descrambled[4:]) if (flags & 0x100) else descrambled
print stream