Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
 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()
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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