def html_tick(fname): global conf, mw conf.recurse = False try: fh = open(fname) ht = pubhtml.HTML_Parser(conf) ht.mw = mw ht.fh = fh ht.getimagecb = getimagecb ln = 0 mw.waitcursor(True) while 1: if conf.recurse: break sss = fh.readline() if ln % 10 == 0: mw.prog.set_text("Reading line: %d" % ln) usleep(1) ln += 1 if sss == "": break if conf.recurse: break if ht.feed(sss): break mw.add_text(sss, True) mw.fname = fname mw.waitcursor(False) except: print_exception("Opening HTML") mw.prog.set_text("Done Loading.") mw.hpaned.set_position(0) mw.gohome()
def read_tts(self, butt): self.view.grab_focus() # Running? self.stopspeak = True if self.speech_pid: self.stop_tts() return self.prog.set_text("Started Reading") cstr = "" iters = self.buffer_1.get_selection_bounds() if iters: cstr = self.buffer_1.get_text(iters[0], iters[1]) if cstr: self.butt4.set_label("S_top") gobject.timeout_add(100, self.speak, cstr) else: self.stopspeak = False # Speak from current location, para by para iter = self.buffer_1.get_iter_at_mark(self.buffer_1.get_insert()) if not iter: iter = self.buffer_1.get_start_iter() iterx = iter.copy() while True: # Adapt new position if changed iter3 = self.buffer_1.get_iter_at_mark( self.buffer_1.get_insert()) #if iterx.get_offset() != iter3.get_offset(): # iterx = iter3.copy # iter = iter3.copy() iter2 = iter.copy eiter = iter.forward_search("\n", 0) if eiter: iter2 = eiter[1] else: iter2 = iter.copy() iter2.forward_sentence_end() self.view.scroll_to_iter(iter, 0.2) #, True, 0, 0) self.view.place_cursor_onscreen() self.buffer_1.select_range(iter, iter2) cstr = self.buffer_1.get_text(iter, iter2) if self.stopspeak: break if cstr != "\n": self.butt4.set_label("S_top") # Speak and wait for it to finish self.speak(cstr) while True: if not self.speech_pid: break pubutil.usleep(100) iter = iter2 # End of buffer? if iter2.get_offset() >= \ self.buffer_1.get_end_iter().get_offset(): self.gohome() break if self.stopspeak: break
def readepub(zf): global mw, basefile, ht, conf names = []; allnames = [] mw.waitcursor(True) for aa in zf.infolist(): #print aa.filename, aa.file_size, # Extract if conf.extract: try: dd = conf.data_dir + "/" + basefile + "/" + os.path.split(aa.filename)[0] if not os.path.isdir(dd): os.makedirs(dd) fh = zf.open(aa.filename) fff = dd + "/" + os.path.basename(aa.filename) # Only extract once: if not os.path.isfile(fff): mw.prog.set_text("Extracting '" + aa.filename + "'") usleep(1) fh2 = open(fff, "w+") while 1: sss = fh.readline() if sss == "": break fh2.write(sss) fh2.close() except: print_exception("Cannot extract file") if os.path.splitext(aa.filename)[1].find("htm") >= 0: names.append(aa.filename) allnames.append(aa.filename) #print #names.sort(cmp) #print names found = False for aa in allnames: if "toc.ncx" in aa: #print "Found toc", aa found = True fh = zf.open(aa) ht = TocHTMLParser(mw) while 1: sss = fh.readline() if sss == "": break ht.feed(sss) mw.add_text(sss, True) break # No TOC Open and parse all the [x]htm[l] files if not found: nnn = "000"; mw.update_tree("Start", nnn); mw.add_text_mark(nnn) for bbb in names: openHTML(zf, bbb) nnn = "999"; mw.update_tree("End", nnn); mw.add_text_mark(nnn) mw.waitcursor(False)
def reader_tick(): global mw fh = open(args[0]) while 1: sss = fh.readline() if sss == "": break #print "got", sss mw.add_text(sss, True) mw.prog.set_text("Reading %d" % fh.tell()) usleep(1) mw.par.feed(sss) fh.close()
def openHTMLcb(fname, addback=True): global conf, gzf, backlist ret = False #print "openHTMLcb", fname conf.recurse = True usleep(10) try: if addback: backlist.append(fname) ret = openHTML(gzf, fname, False) gobject.timeout_add(100, size_tick) except: print_exception("Cannot load HTML") conf.recurse = False return ret
def openHTML(zf, fname, mark=True): global conf found = False fh = None spl = [] ht = None conf.recurse = False # Is it a link with a tag? spl = fname.split("#") # Not loaded, load if mw.fname != spl[0]: mw.clearall() found = False fh = None usleep(1) try: fh = zf.open(spl[0]) found = True except: for aa in zf.infolist(): if os.path.basename(aa.filename) == os.path.basename(spl[0]): #print "found", aa.filename try: fh = zf.open(aa.filename) except: print_exception("No Zip File") return found = True break if not found: return False try: ht = pubhtml.HTML_Parser(conf) ht.mw = mw ht.mark = mark ht.fh = fh ht.getimagecb = getimagecb ln = 0 mw.waitcursor(True) while 1: if conf.recurse: break if mw.stopload: break sss = fh.readline() if mw.stopload: break if ln % 10 == 0: mw.prog.set_text("Reading line: %d" % ln) usleep(1) ln += 1 if sss == "": break if conf.recurse: break if ht.feed(sss): break mw.add_text(sss, True) mw.fname = spl[0] mw.waitcursor(False) except: print_exception("Parsing HTML") #if mw.stopload: # return mw.prog.set_text("Done Loading.") usleep(10) if mw.stopload: return # Jump to tag, if any if len(spl) > 1: #print "Jumping to", "'" + spl[1] + "'" mm = mw.buffer_1.get_mark(spl[1]) if mm: ii = mw.buffer_1.get_iter_at_mark(mm) mw.buffer_1.place_cursor(ii) mw.view.scroll_to_mark(mm, 0.0, True, 0, 0) else: mw.gohome() return True
def readepub(zf): global mw, conf names = [] allnames = [] if not conf.nogui: mw.waitcursor(True) if conf.extract: print "Extracting epub to:", conf.data_dir + "/" + conf.basefile + "/" for aa in zf.infolist(): if conf.list: print aa.filename, aa.file_size # Extract if conf.extract: try: dd = conf.data_dir + "/" + conf.basefile + "/" + os.path.split( aa.filename)[0] if not os.path.isdir(dd): os.makedirs(dd) fh = zf.open(aa.filename) fff = dd + "/" + os.path.basename(aa.filename) # Only extract once: if not os.path.isfile(fff): if not conf.nogui: tt = "Extracting '" + aa.filename + "'" mw.prog.set_text(tt[-18]) usleep(1) fh2 = open(fff, "w+") while 1: sss = fh.readline() if sss == "": break fh2.write(sss) fh2.close() except: print_exception("Cannot extract file") if os.path.splitext(aa.filename)[1].find("htm") >= 0: names.append(aa.filename) allnames.append(aa.filename) found = False ret1 = None ret2 = None '''rootfile = locateroot() print "rootfile:", rootfile if rootfile != "": found = True if ".ncx" in rootfile: ret1 = parse_ncs(rootfile) if ".opf" in rootfile: ret2 = parse_opf(rootfile)''' # Hack: to simplify parsing we search for an .ncx and .opf file if not found: for aa in allnames: if ".ncx" in aa: #print "Found toc", aa #found = True ret1 = parse_ncx(aa) break if not conf.nogui: mw.update_tree(" --------- ", "") # Fallback if not found: for aa in allnames: if ".opf" in aa: #print "Found opf", aa found = True ret2 = parse_opf(aa) break # Pick from the two optional places auth = ret1[0] try: if auth == "": auth = ret2[0] except: pass title = ret1[1] try: if title == "": title = ret2[1] except: pass if conf.title: print "'" + auth + "' '" + title + "'" if not conf.nogui: old = mw.get_title() mw.set_title(old + " '" + auth + "' '" + title + "'") if conf.nogui: return # No TOC Open and parse all the [x]htm[l] files if not found: nnn = "000" mw.update_tree("Start of Book", nnn) mw.add_text_mark(nnn) for bbb in names: openHTML(zf, bbb) nnn = "999" mw.update_tree("End", nnn) mw.add_text_mark(nnn) mw.waitcursor(False)
def readepub(zf): global mw, conf names = [] allnames = [] if not conf.nogui: mw.waitcursor(True) if conf.extract: print "Extracting epub to:", conf.data_dir + "/" + conf.basefile + "/" # Locate root meta data try: md = zf.open("META-INF/container.xml") if conf.rootf: print md.read() except: print "No meta data, guessing" for aa in zf.infolist(): if conf.list: print aa.filename, aa.file_size # Extract if conf.extract: try: dd = conf.data_dir + "/" + conf.basefile + "/" + os.path.split( aa.filename)[0] if not os.path.isdir(dd): os.makedirs(dd) fh = zf.open(aa.filename) fff = dd + "/" + os.path.basename(aa.filename) # Only extract once: if not os.path.isfile(fff): if not conf.nogui: tt = "Extracting '" + aa.filename + "'" mw.prog.set_text(tt[-18]) usleep(1) fh2 = open(fff, "w+") while 1: sss = fh.readline() if sss == "": break fh2.write(sss) fh2.close() except: print_exception("Cannot extract file") if os.path.splitext(aa.filename)[1].find("htm") >= 0: names.append(aa.filename) allnames.append(aa.filename) found = False ht = None ht2 = None for aa in allnames: if "toc.ncx" in aa: #print "Found toc", aa found = True fh = zf.open(aa) ht = TocHTMLParser(contentcb) conf.ht = ht while 1: sss = fh.readline() if sss == "": break ht.feed(sss) if conf.header: print sss, if not conf.nogui: mw.add_text(sss, True) break if 1: for aa in allnames: if "content.opf" in aa: if not conf.nogui: mw.update_tree("Legacy Entries:", []) #print "Found content", aa found = True fh = zf.open(aa) ht2 = ConHTMLParser(content2cb) while 1: sss = fh.readline() if sss == "": break if conf.header: print sss, ht2.feed(sss) if conf.header: print sss, if not conf.nogui: mw.add_text(sss, True) break auth = "" title = "" try: auth = ht.auth except: pass try: if auth == "": auth = ht2.auth except: pass try: title = ht.title except: pass try: if title == "": title = ht2.title except: pass if conf.title: print "'" + auth + "' '" + title + "'" if not conf.nogui: old = mw.get_title() mw.set_title(old + " '" + auth + "' '" + title + "'") if conf.nogui: return # No TOC Open and parse all the [x]htm[l] files if not found: nnn = "000" mw.update_tree("Start of Book", nnn) mw.add_text_mark(nnn) for bbb in names: openHTML(zf, bbb) nnn = "999" mw.update_tree("End", nnn) mw.add_text_mark(nnn) mw.waitcursor(False) return ht
def openHTML(zf, fname, mark=True): global conf # Is it a tagged link? ppp = fname.find("#") spl = [] if spl >= 0: spl = fname.split("#") fname = spl[0] # Not loaded, load if mw.fname != fname: #print "loading", fname mw.clear() mw.clear(True) found = False fh = None try: fh = zf.open(fname) found = True except: #print "searching for", fname, sys.exc_info() # Search for it ... for aa in zf.infolist(): #print aa.filename, fname if os.path.basename(aa.filename) == fname: try: fh = zf.open(aa.filename) except: print_exception("No Zip File") return found = True break if not found: return False try: ht = pubhtml.HTML_Parser(conf) ht.mw = mw ht.mark = mark ht.fh = fh ht.getimagecb = getimagecb ln = 0 mw.waitcursor(True) while 1: sss = fh.readline() if ln % 10 == 0: mw.prog.set_text("Reading line: %d" % ln) usleep(1) ln += 1 if sss == "": break if ht.feed(sss): break mw.add_text(sss, True) mw.fname = fname mw.waitcursor(False) except: print_exception("Parsing HTML") mw.prog.set_text("Done Reading.") usleep(10) # Jump to tag, if any if len(spl) > 1: #print "Jumping to", "'" + spl[1] + "'" mm = mw.buffer_1.get_mark(spl[1]) ii = mw.buffer_1.get_iter_at_mark(mm) if mm: mw.view.scroll_to_mark(mm, 0.0, True, 0, 0) else: mw.gohome() return True