From 0df0475b05c1a01ed9533570a7bf0a0999787c4b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 30 Apr 2007 19:41:02 +0000 Subject: [PATCH] Fix bug in html2lrf that affected external links without a fragment. --- installer.nsi | 2 +- src/libprs500/lrf/html/convert_from.py | 25 +++++++++++++++++++--- src/libprs500/lrf/pylrs/pylrs.py | 21 +++++++++++++++++++ src/libprs500/lrf/read_text_stream.py | 29 +++++++++++++------------- 4 files changed, 59 insertions(+), 18 deletions(-) diff --git a/installer.nsi b/installer.nsi index 49286c7ea9..7af62b4cfe 100644 --- a/installer.nsi +++ b/installer.nsi @@ -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" diff --git a/src/libprs500/lrf/html/convert_from.py b/src/libprs500/lrf/html/convert_from.py index 2712b6fb00..2cc4c9012a 100644 --- a/src/libprs500/lrf/html/convert_from.py +++ b/src/libprs500/lrf/html/convert_from.py @@ -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: diff --git a/src/libprs500/lrf/pylrs/pylrs.py b/src/libprs500/lrf/pylrs/pylrs.py index f0d0e4cf30..b68d14d5c9 100644 --- a/src/libprs500/lrf/pylrs/pylrs.py +++ b/src/libprs500/lrf/pylrs/pylrs.py @@ -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"] diff --git a/src/libprs500/lrf/read_text_stream.py b/src/libprs500/lrf/read_text_stream.py index a80200884b..e7a0945572 100755 --- a/src/libprs500/lrf/read_text_stream.py +++ b/src/libprs500/lrf/read_text_stream.py @@ -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('