diff --git a/Kindle_Mobi_Tools/KindlePID.pyw b/Kindle_Mobi_Tools/KindlePID.pyw index 719d025..771e288 100644 --- a/Kindle_Mobi_Tools/KindlePID.pyw +++ b/Kindle_Mobi_Tools/KindlePID.pyw @@ -73,6 +73,7 @@ class MainDialog(Tkinter.Frame): # post output from subprocess in scrolled text widget def showCmdOutput(self, msg): if msg and msg !='': + msg = msg.encode('utf-8') self.stext.insert(Tkconstants.END,msg) self.stext.yview_pickplace(Tkconstants.END) return @@ -88,7 +89,7 @@ class MainDialog(Tkinter.Frame): cmdline = 'python lib\kindlepid.py "' + serial + '"' else : cmdline = 'lib\kindlepid.py "' + serial + '"' - + cmdline = cmdline.encode(sys.getfilesystemencoding()) p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) return p2 @@ -113,6 +114,7 @@ class MainDialog(Tkinter.Frame): log += 'Serial = "' + serial + '"\n' log += '\n\n' log += 'Please Wait ...\n\n' + log = log.encode('utf-8') self.stext.insert(Tkconstants.END,log) self.p2 = self.pidrdr(serial) diff --git a/Kindle_Mobi_Tools/Kindleizer.pyw b/Kindle_Mobi_Tools/Kindleizer.pyw index 7efec6e..a94b7d3 100644 --- a/Kindle_Mobi_Tools/Kindleizer.pyw +++ b/Kindle_Mobi_Tools/Kindleizer.pyw @@ -30,7 +30,9 @@ class MainDialog(Tkinter.Frame): Tkinter.Label(body, text='Mobi eBook input file').grid(row=0, sticky=Tkconstants.E) self.mobipath = Tkinter.Entry(body, width=50) self.mobipath.grid(row=0, column=1, sticky=sticky) - self.mobipath.insert(0, os.getcwd()) + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') + self.mobipath.insert(0, cwd) button = Tkinter.Button(body, text="...", command=self.get_mobipath) button.grid(row=0, column=2) @@ -80,6 +82,7 @@ class MainDialog(Tkinter.Frame): # post output from subprocess in scrolled text widget def showCmdOutput(self, msg): if msg and msg !='': + msg = msg.encode('utf-8') self.stext.insert(Tkconstants.END,msg) self.stext.yview_pickplace(Tkconstants.END) return @@ -96,6 +99,7 @@ class MainDialog(Tkinter.Frame): else : cmdline = 'lib\kindlefix.py "' + infile + '" "' + pidnum + '"' + cmdline = cmdline.encode(sys.getfilesystemencoding()) p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) return p2 @@ -138,6 +142,7 @@ class MainDialog(Tkinter.Frame): log += 'PID = "' + pidnum + '"\n' log += '\n\n' log += 'Please Wait ...\n\n' + log = log.encode('utf-8') self.stext.insert(Tkconstants.END,log) self.p2 = self.krdr(mobipath, pidnum) diff --git a/Kindle_Mobi_Tools/MobiDeDRM.pyw b/Kindle_Mobi_Tools/MobiDeDRM.pyw index 533223f..7e96bef 100644 --- a/Kindle_Mobi_Tools/MobiDeDRM.pyw +++ b/Kindle_Mobi_Tools/MobiDeDRM.pyw @@ -30,7 +30,9 @@ class MainDialog(Tkinter.Frame): Tkinter.Label(body, text='Mobi eBook input file').grid(row=0, sticky=Tkconstants.E) self.mobipath = Tkinter.Entry(body, width=50) self.mobipath.grid(row=0, column=1, sticky=sticky) - self.mobipath.insert(0, os.getcwd()) + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') + self.mobipath.insert(0, cwd) button = Tkinter.Button(body, text="...", command=self.get_mobipath) button.grid(row=0, column=2) @@ -87,6 +89,7 @@ class MainDialog(Tkinter.Frame): # post output from subprocess in scrolled text widget def showCmdOutput(self, msg): if msg and msg !='': + msg = msg.encode('utf-8') self.stext.insert(Tkconstants.END,msg) self.stext.yview_pickplace(Tkconstants.END) return @@ -103,6 +106,7 @@ class MainDialog(Tkinter.Frame): else : cmdline = 'lib\mobidedrm.py "' + infile + '" "' + outfile + '" "' + pidnum + '"' + cmdline = cmdline.encode(sys.getfilesystemencoding()) p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) return p2 @@ -167,6 +171,7 @@ class MainDialog(Tkinter.Frame): log += 'PID = "' + pidnum + '"\n' log += '\n\n' log += 'Please Wait ...\n\n' + log = log.encode('utf-8') self.stext.insert(Tkconstants.END,log) self.p2 = self.mobirdr(mobipath, outpath, pidnum) diff --git a/Kindle_Mobi_Tools/lib/mobidedrm.py b/Kindle_Mobi_Tools/lib/mobidedrm.py index 178b046..02a2db3 100644 --- a/Kindle_Mobi_Tools/lib/mobidedrm.py +++ b/Kindle_Mobi_Tools/lib/mobidedrm.py @@ -25,15 +25,16 @@ # import filter it works when importing unencrypted files. # Also now handles encrypted files that don't need a specific PID. # 0.11 - use autoflushed stdout and proper return values +# 0.12 - Fix for problems with metadata import as Calibre plugin, report errors class Unbuffered: - def __init__(self, stream): - self.stream = stream - def write(self, data): - self.stream.write(data) - self.stream.flush() - def __getattr__(self, attr): - return getattr(self.stream, attr) + def __init__(self, stream): + self.stream = stream + def write(self, data): + self.stream.write(data) + self.stream.flush() + def __getattr__(self, attr): + return getattr(self.stream, attr) import sys sys.stdout=Unbuffered(sys.stdout) @@ -45,37 +46,37 @@ class DrmException(Exception): #implementation of Pukall Cipher 1 def PC1(key, src, decryption=True): - sum1 = 0; - sum2 = 0; - keyXorVal = 0; - if len(key)!=16: - print "Bad key length!" - return None - wkey = [] - for i in xrange(8): - wkey.append(ord(key[i*2])<<8 | ord(key[i*2+1])) + sum1 = 0; + sum2 = 0; + keyXorVal = 0; + if len(key)!=16: + print "Bad key length!" + return None + wkey = [] + for i in xrange(8): + wkey.append(ord(key[i*2])<<8 | ord(key[i*2+1])) - dst = "" - for i in xrange(len(src)): - temp1 = 0; - byteXorVal = 0; - for j in xrange(8): - temp1 ^= wkey[j] - sum2 = (sum2+j)*20021 + sum1 - sum1 = (temp1*346)&0xFFFF - sum2 = (sum2+sum1)&0xFFFF - temp1 = (temp1*20021+1)&0xFFFF - byteXorVal ^= temp1 ^ sum2 - curByte = ord(src[i]) - if not decryption: - keyXorVal = curByte * 257; - curByte = ((curByte ^ (byteXorVal >> 8)) ^ byteXorVal) & 0xFF - if decryption: - keyXorVal = curByte * 257; - for j in xrange(8): - wkey[j] ^= keyXorVal; - dst+=chr(curByte) - return dst + dst = "" + for i in xrange(len(src)): + temp1 = 0; + byteXorVal = 0; + for j in xrange(8): + temp1 ^= wkey[j] + sum2 = (sum2+j)*20021 + sum1 + sum1 = (temp1*346)&0xFFFF + sum2 = (sum2+sum1)&0xFFFF + temp1 = (temp1*20021+1)&0xFFFF + byteXorVal ^= temp1 ^ sum2 + curByte = ord(src[i]) + if not decryption: + keyXorVal = curByte * 257; + curByte = ((curByte ^ (byteXorVal >> 8)) ^ byteXorVal) & 0xFF + if decryption: + keyXorVal = curByte * 257; + for j in xrange(8): + wkey[j] ^= keyXorVal; + dst+=chr(curByte) + return dst def checksumPid(s): letters = "ABCDEFGHIJKLMNPQRSTUVWXYZ123456789" @@ -234,40 +235,46 @@ if not __name__ == "__main__": description = 'Removes DRM from secure Mobi files' supported_platforms = ['linux', 'osx', 'windows'] # Platforms this plugin will run on author = 'The Dark Reverser' # The author of this plugin - version = (0, 1, 0) # The version number of this plugin + version = (0, 1, 2) # The version number of this plugin file_types = set(['prc','mobi','azw']) # The file types that this plugin will be applied to on_import = True # Run this plugin during the import def run(self, path_to_ebook): - of = self.temporary_file('.mobi') + from calibre.gui2 import is_ok_to_use_qt + from PyQt4.Qt import QMessageBox PID = self.site_customization data_file = file(path_to_ebook, 'rb').read() ar = PID.split(',') for i in ar: try: - file(of.name, 'wb').write(DrmStripper(data_file, i).getResult()) + unlocked_file = DrmStripper(data_file, i).getResult() except DrmException: - # Hm, we should display an error dialog here. - # Dunno how though. - # Ignore the dirty hack behind the curtain. -# strexcept = 'echo exception: %s > /dev/tty' % e -# subprocess.call(strexcept,shell=True) - print i + ": not PID for book" + # ignore the error + pass else: + of = self.temporary_file('.mobi') + of.write(unlocked_file) + of.close() return of.name + if is_ok_to_use_qt(): + d = QMessageBox(QMessageBox.Warning, "MobiDeDRM Plugin", "Couldn't decode: %s\n\nImporting encrypted version." % path_to_ebook) + d.show() + d.raise_() + d.exec_() + return path_to_ebook def customization_help(self, gui=False): return 'Enter PID (separate multiple PIDs with comma)' if __name__ == "__main__": - print "MobiDeDrm v0.11. Copyright (c) 2008 The Dark Reverser" + print "MobiDeDrm v0.12. Copyright (c) 2008 The Dark Reverser" if len(sys.argv)<4: print "Removes protection from Mobipocket books" print "Usage:" print " mobidedrm infile.mobi outfile.mobi (PID)" sys.exit(1) - else: + else: infile = sys.argv[1] outfile = sys.argv[2] pid = sys.argv[3] diff --git a/Topaz_Tools/TopazExtract_Kindle4PC.pyw b/Topaz_Tools/TopazExtract_Kindle4PC.pyw index c18fc3f..48b7f81 100644 --- a/Topaz_Tools/TopazExtract_Kindle4PC.pyw +++ b/Topaz_Tools/TopazExtract_Kindle4PC.pyw @@ -31,14 +31,18 @@ class MainDialog(Tkinter.Frame): Tkinter.Label(body, text='Topaz eBook input file').grid(row=0, sticky=Tkconstants.E) self.tpzpath = Tkinter.Entry(body, width=50) self.tpzpath.grid(row=0, column=1, sticky=sticky) - self.tpzpath.insert(0, os.getcwd()) + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') + self.tpzpath.insert(0, cwd) button = Tkinter.Button(body, text="...", command=self.get_tpzpath) button.grid(row=0, column=2) Tkinter.Label(body, text='Output Directory').grid(row=1, sticky=Tkconstants.E) self.outpath = Tkinter.Entry(body, width=50) self.outpath.grid(row=1, column=1, sticky=sticky) - self.outpath.insert(0, os.getcwd()) + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') + self.outpath.insert(0, cwd) button = Tkinter.Button(body, text="...", command=self.get_outpath) button.grid(row=1, column=2) @@ -88,6 +92,7 @@ class MainDialog(Tkinter.Frame): # post output from subprocess in scrolled text widget def showCmdOutput(self, msg): if msg and msg !='': + msg = msg.encode('utf-8') self.stext.insert(Tkconstants.END,msg) self.stext.yview_pickplace(Tkconstants.END) return @@ -108,6 +113,7 @@ class MainDialog(Tkinter.Frame): else : cmdline = 'lib\cmbtc_dump.py -v -d ' + pidoption + outoption + '"' + infile + '"' + cmdline = cmdline.encode(sys.getfilesystemencoding()) p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) return p2 @@ -124,9 +130,11 @@ class MainDialog(Tkinter.Frame): return def get_outpath(self): + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') outpath = tkFileDialog.askdirectory( parent=None, title='Directory to Extract Files into', - initialdir=os.getcwd(), initialfile=None) + initialdir=cwd, initialfile=None) if outpath: outpath = os.path.normpath(outpath) self.outpath.delete(0, Tkconstants.END) @@ -168,6 +176,7 @@ class MainDialog(Tkinter.Frame): log += 'First 8 chars of PID = "' + pidnum + '"\n' log += '\n\n' log += 'Please Wait ...\n' + log = log.encode('utf-8') self.stext.insert(Tkconstants.END,log) self.p2 = self.topazrdr(tpzpath, outpath, pidnum) diff --git a/Topaz_Tools/TopazExtract_Kindle_iPhone.pyw b/Topaz_Tools/TopazExtract_Kindle_iPhone.pyw index 30133ec..38b9b29 100644 --- a/Topaz_Tools/TopazExtract_Kindle_iPhone.pyw +++ b/Topaz_Tools/TopazExtract_Kindle_iPhone.pyw @@ -31,14 +31,18 @@ class MainDialog(Tkinter.Frame): Tkinter.Label(body, text='Topaz eBook input file').grid(row=0, sticky=Tkconstants.E) self.tpzpath = Tkinter.Entry(body, width=50) self.tpzpath.grid(row=0, column=1, sticky=sticky) - self.tpzpath.insert(0, os.getcwd()) + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') + self.tpzpath.insert(0, cwd) button = Tkinter.Button(body, text="...", command=self.get_tpzpath) button.grid(row=0, column=2) Tkinter.Label(body, text='Output Directory').grid(row=1, sticky=Tkconstants.E) self.outpath = Tkinter.Entry(body, width=50) self.outpath.grid(row=1, column=1, sticky=sticky) - self.outpath.insert(0, os.getcwd()) + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') + self.outpath.insert(0, cwd) button = Tkinter.Button(body, text="...", command=self.get_outpath) button.grid(row=1, column=2) @@ -88,6 +92,7 @@ class MainDialog(Tkinter.Frame): # post output from subprocess in scrolled text widget def showCmdOutput(self, msg): if msg and msg !='': + msg = msg.encode('utf-8') self.stext.insert(Tkconstants.END,msg) self.stext.yview_pickplace(Tkconstants.END) return @@ -106,6 +111,7 @@ class MainDialog(Tkinter.Frame): else : cmdline = 'lib\cmbtc_dump_nonK4PC.py -v -d ' + pidoption + outoption + '"' + infile + '"' + cmdline = cmdline.encode(sys.getfilesystemencoding()) p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) return p2 @@ -122,9 +128,11 @@ class MainDialog(Tkinter.Frame): return def get_outpath(self): + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') outpath = tkFileDialog.askdirectory( parent=None, title='Directory to Extract Files into', - initialdir=os.getcwd(), initialfile=None) + initialdir=cwd, initialfile=None) if outpath: outpath = os.path.normpath(outpath) self.outpath.delete(0, Tkconstants.END) @@ -166,6 +174,7 @@ class MainDialog(Tkinter.Frame): log += 'First 8 chars of PID = "' + pidnum + '"\n' log += '\n\n' log += 'Please Wait ...\n' + log = log.encode('utf-8') self.stext.insert(Tkconstants.END,log) self.p2 = self.topazrdr(tpzpath, outpath, pidnum) diff --git a/Topaz_Tools/TopazFiles2HTML.pyw b/Topaz_Tools/TopazFiles2HTML.pyw index 1e094a5..962ea75 100644 --- a/Topaz_Tools/TopazFiles2HTML.pyw +++ b/Topaz_Tools/TopazFiles2HTML.pyw @@ -31,7 +31,9 @@ class MainDialog(Tkinter.Frame): Tkinter.Label(body, text='Directory you Extracted Topaz Files into').grid(row=0, sticky=Tkconstants.E) self.bookdir = Tkinter.Entry(body, width=50) self.bookdir.grid(row=0, column=1, sticky=sticky) - self.bookdir.insert(0, os.getcwd()) + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') + self.bookdir.insert(0, cwd) button = Tkinter.Button(body, text="...", command=self.get_bookdir) button.grid(row=0, column=2) @@ -76,6 +78,7 @@ class MainDialog(Tkinter.Frame): # post output from subprocess in scrolled text widget def showCmdOutput(self, msg): if msg and msg !='': + msg = msg.encode('utf-8') self.stext.insert(Tkconstants.END,msg) self.stext.yview_pickplace(Tkconstants.END) return @@ -92,14 +95,17 @@ class MainDialog(Tkinter.Frame): else : cmdline = 'lib\genhtml.py "' + bookdir + '"' + cmdline = cmdline.encode(sys.getfilesystemencoding()) p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) return p2 def get_bookdir(self): + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') bookdir = tkFileDialog.askdirectory( parent=None, title='Select the Directory you Extracted Topaz Files into', - initialdir=os.getcwd(), initialfile=None) + initialdir=cwd, initialfile=None) if bookdir: bookdir = os.path.normpath(bookdir) self.bookdir.delete(0, Tkconstants.END) @@ -127,6 +133,7 @@ class MainDialog(Tkinter.Frame): log += 'Book Directory = "' + bookdir + '"\n' log += '\n\n' log += 'Please Wait ...\n' + log = log.encode('utf-8') self.stext.insert(Tkconstants.END,log) self.p2 = self.topazrdr(bookdir) diff --git a/Topaz_Tools/TopazFiles2SVG.pyw b/Topaz_Tools/TopazFiles2SVG.pyw index a93acc2..b3fff79 100644 --- a/Topaz_Tools/TopazFiles2SVG.pyw +++ b/Topaz_Tools/TopazFiles2SVG.pyw @@ -31,7 +31,9 @@ class MainDialog(Tkinter.Frame): Tkinter.Label(body, text='Directory you Extracted Topaz Files into').grid(row=0, sticky=Tkconstants.E) self.bookdir = Tkinter.Entry(body, width=50) self.bookdir.grid(row=0, column=1, sticky=sticky) - self.bookdir.insert(0, os.getcwd()) + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') + self.bookdir.insert(0, cwd) button = Tkinter.Button(body, text="...", command=self.get_bookdir) button.grid(row=0, column=2) @@ -76,6 +78,7 @@ class MainDialog(Tkinter.Frame): # post output from subprocess in scrolled text widget def showCmdOutput(self, msg): if msg and msg !='': + msg = msg.encode('utf-8') self.stext.insert(Tkconstants.END,msg) self.stext.yview_pickplace(Tkconstants.END) return @@ -92,14 +95,17 @@ class MainDialog(Tkinter.Frame): else : cmdline = 'lib\gensvg.py "' + bookdir + '"' + cmdline = cmdline.encode(sys.getfilesystemencoding()) p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) return p2 def get_bookdir(self): + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') bookdir = tkFileDialog.askdirectory( parent=None, title='Select the Directory you Extracted Topaz Files into', - initialdir=os.getcwd(), initialfile=None) + initialdir=cwd, initialfile=None) if bookdir: bookdir = os.path.normpath(bookdir) self.bookdir.delete(0, Tkconstants.END) @@ -127,6 +133,7 @@ class MainDialog(Tkinter.Frame): log += 'Book Directory = "' + bookdir + '"\n' log += '\n\n' log += 'Please Wait ...\n' + log = log.encode('utf-8') self.stext.insert(Tkconstants.END,log) self.p2 = self.topazrdr(bookdir) diff --git a/Topaz_Tools/TopazFiles2XML.pyw b/Topaz_Tools/TopazFiles2XML.pyw index 1d2bd7c..e5f578c 100644 --- a/Topaz_Tools/TopazFiles2XML.pyw +++ b/Topaz_Tools/TopazFiles2XML.pyw @@ -31,7 +31,9 @@ class MainDialog(Tkinter.Frame): Tkinter.Label(body, text='Directory you Extracted Topaz Files into').grid(row=0, sticky=Tkconstants.E) self.bookdir = Tkinter.Entry(body, width=50) self.bookdir.grid(row=0, column=1, sticky=sticky) - self.bookdir.insert(0, os.getcwd()) + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') + self.bookdir.insert(0, cwd) button = Tkinter.Button(body, text="...", command=self.get_bookdir) button.grid(row=0, column=2) @@ -76,6 +78,7 @@ class MainDialog(Tkinter.Frame): # post output from subprocess in scrolled text widget def showCmdOutput(self, msg): if msg and msg !='': + msg = msg.encode('utf-8') self.stext.insert(Tkconstants.END,msg) self.stext.yview_pickplace(Tkconstants.END) return @@ -92,14 +95,17 @@ class MainDialog(Tkinter.Frame): else : cmdline = 'lib\genxml.py "' + bookdir + '"' + cmdline = cmdline.encode(sys.getfilesystemencoding()) p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) return p2 def get_bookdir(self): + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') bookdir = tkFileDialog.askdirectory( parent=None, title='Select the Directory you Extracted Topaz Files into', - initialdir=os.getcwd(), initialfile=None) + initialdir=cwd, initialfile=None) if bookdir: bookdir = os.path.normpath(bookdir) self.bookdir.delete(0, Tkconstants.END) @@ -127,6 +133,7 @@ class MainDialog(Tkinter.Frame): log += 'Book Directory = "' + bookdir + '"\n' log += '\n\n' log += 'Please Wait ...\n' + log = log.encode('utf-8') self.stext.insert(Tkconstants.END,log) self.p2 = self.topazrdr(bookdir) diff --git a/Topaz_Tools/lib/cmbtc_dump.py b/Topaz_Tools/lib/cmbtc_dump.py index c7b08f8..83301dd 100644 --- a/Topaz_Tools/lib/cmbtc_dump.py +++ b/Topaz_Tools/lib/cmbtc_dump.py @@ -1,5 +1,5 @@ #! /usr/bin/python -# For use in Topaz Scripts version 2.2 +# For use in Topaz Scripts version 2.3 """ diff --git a/Topaz_Tools/lib/cmbtc_dump_nonK4PC.py b/Topaz_Tools/lib/cmbtc_dump_nonK4PC.py index 253079f..1508741 100644 --- a/Topaz_Tools/lib/cmbtc_dump_nonK4PC.py +++ b/Topaz_Tools/lib/cmbtc_dump_nonK4PC.py @@ -1,5 +1,5 @@ #!/usr/bin/python -# For use with Topaz Scripts Version 2.2 +# For use with Topaz Scripts Version 2.3 class Unbuffered: def __init__(self, stream): diff --git a/Topaz_Tools/lib/convert2xml.py b/Topaz_Tools/lib/convert2xml.py index caf5039..958e3b9 100644 --- a/Topaz_Tools/lib/convert2xml.py +++ b/Topaz_Tools/lib/convert2xml.py @@ -1,6 +1,6 @@ #! /usr/bin/python # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab -# For use with Topaz Scripts Version 2.2 +# For use with Topaz Scripts Version 2.3 class Unbuffered: def __init__(self, stream): diff --git a/Topaz_Tools/lib/decode_meta.py b/Topaz_Tools/lib/decode_meta.py index 01d8cc9..038f133 100644 --- a/Topaz_Tools/lib/decode_meta.py +++ b/Topaz_Tools/lib/decode_meta.py @@ -1,6 +1,6 @@ #! /usr/bin/python # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab -# For use with Topaz Scripts Version 2.2 +# For use with Topaz Scripts Version 2.3 import csv import sys diff --git a/Topaz_Tools/lib/flatxml2html.py b/Topaz_Tools/lib/flatxml2html.py index 6047749..0fb106d 100644 --- a/Topaz_Tools/lib/flatxml2html.py +++ b/Topaz_Tools/lib/flatxml2html.py @@ -1,6 +1,6 @@ #! /usr/bin/python # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab -# For use with Topaz Scripts Version 2.2 +# For use with Topaz Scripts Version 2.3 import sys import csv diff --git a/Topaz_Tools/lib/genhtml.py b/Topaz_Tools/lib/genhtml.py index 8df7b52..82b2c72 100644 --- a/Topaz_Tools/lib/genhtml.py +++ b/Topaz_Tools/lib/genhtml.py @@ -1,6 +1,6 @@ #! /usr/bin/python # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab -# For use with Topaz Scripts Version 2.2 +# For use with Topaz Scripts Version 2.3 class Unbuffered: def __init__(self, stream): diff --git a/Topaz_Tools/lib/gensvg.py b/Topaz_Tools/lib/gensvg.py index e8dfe06..82f6bc7 100644 --- a/Topaz_Tools/lib/gensvg.py +++ b/Topaz_Tools/lib/gensvg.py @@ -1,6 +1,6 @@ #! /usr/bin/python # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab -# For use with Topaz Scripts Version 2.2 +# For use with Topaz Scripts Version 2.3 class Unbuffered: def __init__(self, stream): diff --git a/Topaz_Tools/lib/genxml.py b/Topaz_Tools/lib/genxml.py index 868fef1..a30c630 100644 --- a/Topaz_Tools/lib/genxml.py +++ b/Topaz_Tools/lib/genxml.py @@ -1,6 +1,6 @@ #! /usr/bin/python # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab -# For use with Topaz Scripts Version 2.2 +# For use with Topaz Scripts Version 2.3 class Unbuffered: def __init__(self, stream): diff --git a/Topaz_Tools/lib/getpagedim.py b/Topaz_Tools/lib/getpagedim.py index e59e83f..af2a6f6 100644 --- a/Topaz_Tools/lib/getpagedim.py +++ b/Topaz_Tools/lib/getpagedim.py @@ -1,6 +1,6 @@ #! /usr/bin/python # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab -# For use with Topaz Scripts Version 2.2 +# For use with Topaz Scripts Version 2.3 import csv import sys diff --git a/Topaz_Tools/lib/stylexml2css.py b/Topaz_Tools/lib/stylexml2css.py index a540e9a..0f84d69 100644 --- a/Topaz_Tools/lib/stylexml2css.py +++ b/Topaz_Tools/lib/stylexml2css.py @@ -1,6 +1,6 @@ #! /usr/bin/python # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab -# For use with Topaz Scripts Version 2.2 +# For use with Topaz Scripts Version 2.3 import csv import sys diff --git a/Topaz_Tools/lib/topaz-changes.txt b/Topaz_Tools/lib/topaz-changes.txt index a80ef5f..055b4b5 100644 --- a/Topaz_Tools/lib/topaz-changes.txt +++ b/Topaz_Tools/lib/topaz-changes.txt @@ -1,3 +1,7 @@ +Canges in 2.3 + - fix for use with non-latin1 based systems (thank you Tedd) + - fixes for out of order tokens in xml + Changes in 2.2 - fix for minor bug in encode_Number from clark nova - more fixes to handle paths with spaces in them diff --git a/eReader_Tools/Pml2HTML.pyw b/eReader_Tools/Pml2HTML.pyw index 7800463..b02922e 100644 --- a/eReader_Tools/Pml2HTML.pyw +++ b/eReader_Tools/Pml2HTML.pyw @@ -30,7 +30,9 @@ class MainDialog(Tkinter.Frame): Tkinter.Label(body, text='eBook Pml input file').grid(row=0, sticky=Tkconstants.E) self.pmlpath = Tkinter.Entry(body, width=50) self.pmlpath.grid(row=0, column=1, sticky=sticky) - self.pmlpath.insert(0, os.getcwd()) + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') + self.pmlpath.insert(0, cwd) button = Tkinter.Button(body, text="...", command=self.get_pmlpath) button.grid(row=0, column=2) @@ -82,6 +84,7 @@ class MainDialog(Tkinter.Frame): # post output from subprocess in scrolled text widget def showCmdOutput(self, msg): if msg and msg !='': + msg = msg.encode('utf-8') self.stext.insert(Tkconstants.END,msg) self.stext.yview_pickplace(Tkconstants.END) return @@ -98,6 +101,7 @@ class MainDialog(Tkinter.Frame): else : cmdline = 'lib\\xpml2xhtml.py "' + infile + '" "' + outfile + '"' + cmdline = cmdline.encode(sys.getfilesystemencoding()) p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) return p2 @@ -156,6 +160,7 @@ class MainDialog(Tkinter.Frame): log += 'HTML Output File = "' + outpath + '"\n' log += '\n\n' log += 'Please Wait ...\n\n' + log = log.encode('utf-8') self.stext.insert(Tkconstants.END,log) self.p2 = self.pmlhtml(pmlpath, outpath) diff --git a/eReader_Tools/eReaderPDB2PML.pyw b/eReader_Tools/eReaderPDB2PML.pyw index cb1569c..16da8cd 100644 --- a/eReader_Tools/eReaderPDB2PML.pyw +++ b/eReader_Tools/eReaderPDB2PML.pyw @@ -31,14 +31,18 @@ class MainDialog(Tkinter.Frame): Tkinter.Label(body, text='eBook PDB input file').grid(row=0, sticky=Tkconstants.E) self.pdbpath = Tkinter.Entry(body, width=50) self.pdbpath.grid(row=0, column=1, sticky=sticky) - self.pdbpath.insert(0, os.getcwd()) + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') + self.pdbpath.insert(0, cwd) button = Tkinter.Button(body, text="...", command=self.get_pdbpath) button.grid(row=0, column=2) Tkinter.Label(body, text='Output Directory').grid(row=1, sticky=Tkconstants.E) self.outpath = Tkinter.Entry(body, width=50) self.outpath.grid(row=1, column=1, sticky=sticky) - self.outpath.insert(0, os.getcwd()) + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') + self.outpath.insert(0, cwd) button = Tkinter.Button(body, text="...", command=self.get_outpath) button.grid(row=1, column=2) @@ -93,6 +97,7 @@ class MainDialog(Tkinter.Frame): # post output from subprocess in scrolled text widget def showCmdOutput(self, msg): if msg and msg !='': + msg = msg.encode('utf-8') self.stext.insert(Tkconstants.END,msg) self.stext.yview_pickplace(Tkconstants.END) return @@ -109,6 +114,7 @@ class MainDialog(Tkinter.Frame): else : cmdline = 'lib\erdr2pml.py "' + infile + '" "' + outdir + '" "' + name + '" ' + ccnum + cmdline = cmdline.encode(sys.getfilesystemencoding()) p2 = Process(cmdline, shell=True, bufsize=1, stdin=None, stdout=PIPE, stderr=PIPE, close_fds=False) return p2 @@ -125,9 +131,11 @@ class MainDialog(Tkinter.Frame): return def get_outpath(self): + cwd = os.getcwdu() + cwd = cwd.encode('utf-8') outpath = tkFileDialog.askdirectory( parent=None, title='Directory to Store Output into', - initialdir=os.getcwd(), initialfile=None) + initialdir=cwd, initialfile=None) if outpath: outpath = os.path.normpath(outpath) self.outpath.delete(0, Tkconstants.END) @@ -175,6 +183,7 @@ class MainDialog(Tkinter.Frame): log += 'Last 8 of CC = "' + ccnum + '"\n' log += '\n\n' log += 'Please Wait ...\n' + log = log.encode('utf-8') self.stext.insert(Tkconstants.END,log) self.p2 = self.erdr(pdbpath, outpath, name, ccnum)