diff --git a/src/calibre/customize/builtins.py b/src/calibre/customize/builtins.py index 9f06993eb3..f280aff456 100644 --- a/src/calibre/customize/builtins.py +++ b/src/calibre/customize/builtins.py @@ -402,7 +402,7 @@ from calibre.customize.profiles import input_profiles, output_profiles from calibre.devices.hanlin.driver import HANLINV3, HANLINV5, BOOX from calibre.devices.blackberry.driver import BLACKBERRY -from calibre.devices.cybookg3.driver import CYBOOKG3, CYBOOK_OPUS +from calibre.devices.cybook.driver import CYBOOK from calibre.devices.eb600.driver import EB600, COOL_ER, SHINEBOOK, \ POCKETBOOK360, GER2, ITALICA, ECLICTO, DBOOK from calibre.devices.iliad.driver import ILIAD @@ -460,7 +460,7 @@ plugins += [ HANLINV3, HANLINV5, BLACKBERRY, - CYBOOKG3, + CYBOOK, ILIAD, IREXDR1000, JETBOOK, @@ -476,7 +476,6 @@ plugins += [ ANDROID, N770, N810, - CYBOOK_OPUS, COOL_ER, ESLICK, NUUT2, diff --git a/src/calibre/devices/cybookg3/__init__.py b/src/calibre/devices/cybook/__init__.py similarity index 100% rename from src/calibre/devices/cybookg3/__init__.py rename to src/calibre/devices/cybook/__init__.py diff --git a/src/calibre/devices/cybook/driver.py b/src/calibre/devices/cybook/driver.py new file mode 100644 index 0000000000..5ac0d4999c --- /dev/null +++ b/src/calibre/devices/cybook/driver.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- + +__license__ = 'GPL v3' +__copyright__ = '2009, John Schember ' +__docformat__ = 'restructuredtext en' + +''' +Device driver for Bookeen's Cybook Gen 3 and Opus +''' + +import os +import re + +from calibre.constants import isunix +from calibre.devices.usbms.driver import USBMS +import calibre.devices.cybook.t2b as t2b + +class CYBOOK(USBMS): + + name = 'Cybook Gen 3 / Opus Device Interface' + gui_name = 'Cybook Gen 3 / Opus' + description = _('Communicate with the Cybook Gen 3 / Opus eBook reader.') + author = 'John Schember' + supported_platforms = ['windows', 'osx', 'linux'] + + # Ordered list of supported formats + # Be sure these have an entry in calibre.devices.mime + FORMATS = ['epub', 'mobi', 'prc', 'html', 'pdf', 'rtf', 'txt'] + + VENDOR_ID = [0x0bda, 0x3034] + PRODUCT_ID = [0x0703, 0x1795] + BCD = [0x110, 0x132] + + VENDOR_NAME = 'BOOKEEN' + WINDOWS_MAIN_MEM = re.compile(r'CYBOOK_(OPUS|GEN3)__-FD') + WINDOWS_CARD_A_MEM = re.compile('CYBOOK_(OPUS|GEN3)__-SD') + + EBOOK_DIR_MAIN = 'eBooks' + EBOOK_DIR_CARD_A = 'eBooks' + THUMBNAIL_HEIGHT = 144 + DELETE_EXTS = ['.mbp', '.dat', '.bin', '_6090.t2b'] + SUPPORTS_SUB_DIRS = True + + def upload_cover(self, path, filename, metadata): + coverdata = getattr(metadata, 'thumbnail', None) + if coverdata and coverdata[2]: + coverdata = coverdata[2] + else: + coverdata = None + with open('%s_6090.t2b' % os.path.join(path, filename), 'wb') as t2bfile: + t2b.write_t2b(t2bfile, coverdata) + + @classmethod + def can_handle(cls, device_info, debug=False): + if isunix: + return device_info[3] == 'Bookeen' and (device_info[4] == 'Cybook Gen3' or device_info[4] == 'Cybook Opus') + return True diff --git a/src/calibre/devices/cybookg3/t2b.py b/src/calibre/devices/cybook/t2b.py similarity index 100% rename from src/calibre/devices/cybookg3/t2b.py rename to src/calibre/devices/cybook/t2b.py diff --git a/src/calibre/devices/cybookg3/driver.py b/src/calibre/devices/cybookg3/driver.py deleted file mode 100644 index 439423dbe5..0000000000 --- a/src/calibre/devices/cybookg3/driver.py +++ /dev/null @@ -1,92 +0,0 @@ -# -*- coding: utf-8 -*- - -__license__ = 'GPL v3' -__copyright__ = '2009, John Schember ' -__docformat__ = 'restructuredtext en' - -''' -Device driver for Bookeen's Cybook Gen 3 -''' - -import os - -from calibre.constants import isunix -from calibre.devices.usbms.driver import USBMS -import calibre.devices.cybookg3.t2b as t2b - -class CYBOOKG3(USBMS): - - name = 'Cybook Gen 3 Device Interface' - gui_name = 'Cybook Gen 3' - description = _('Communicate with the Cybook Gen 3 eBook reader.') - author = 'John Schember' - supported_platforms = ['windows', 'osx', 'linux'] - - # Ordered list of supported formats - # Be sure these have an entry in calibre.devices.mime - FORMATS = ['epub', 'mobi', 'prc', 'html', 'pdf', 'rtf', 'txt'] - - VENDOR_ID = [0x0bda, 0x3034] - PRODUCT_ID = [0x0703, 0x1795] - BCD = [0x110, 0x132] - - VENDOR_NAME = 'BOOKEEN' - WINDOWS_MAIN_MEM = 'CYBOOK_GEN3__-FD' - WINDOWS_CARD_A_MEM = 'CYBOOK_GEN3__-SD' - - OSX_MAIN_MEM = 'Bookeen Cybook Gen3 -FD Media' - OSX_CARD_A_MEM = 'Bookeen Cybook Gen3 -SD Media' - - MAIN_MEMORY_VOLUME_LABEL = 'Cybook Gen 3 Main Memory' - STORAGE_CARD_VOLUME_LABEL = 'Cybook Gen 3 Storage Card' - - EBOOK_DIR_MAIN = 'eBooks' - EBOOK_DIR_CARD_A = 'eBooks' - THUMBNAIL_HEIGHT = 144 - DELETE_EXTS = ['.mbp', '.dat', '_6090.t2b'] - SUPPORTS_SUB_DIRS = True - - def upload_cover(self, path, filename, metadata): - coverdata = getattr(metadata, 'thumbnail', None) - if coverdata and coverdata[2]: - coverdata = coverdata[2] - else: - coverdata = None - with open('%s_6090.t2b' % os.path.join(path, filename), 'wb') as t2bfile: - t2b.write_t2b(t2bfile, coverdata) - - @classmethod - def can_handle(cls, device_info, debug=False): - if isunix: - return device_info[3] == 'Bookeen' and device_info[4] == 'Cybook Gen3' - return True - - -class CYBOOK_OPUS(CYBOOKG3): - - name = 'Cybook Opus Device Interface' - gui_name = 'Cybook Opus' - description = _('Communicate with the Cybook Opus eBook reader.') - author = 'John Schember' - supported_platforms = ['windows', 'osx', 'linux'] - - VENDOR_ID = [0x0bda] - PRODUCT_ID = [0x0703] - BCD = [0x110] - - VENDOR_NAME = 'BOOKEEN' - WINDOWS_MAIN_MEM = 'CYBOOK_OPUS__-FD' - WINDOWS_CARD_A_MEM = 'CYBOOK_OPUS__-SD' - - OSX_MAIN_MEM = 'Bookeen Cybook Opus -FD Media' - OSX_CARD_A_MEM = 'Bookeen Cybook Opus -SD Media' - - EBOOK_DIR_MAIN = 'eBooks' - EBOOK_DIR_CARD_A = 'eBooks' - SUPPORTS_SUB_DIRS = True - - @classmethod - def can_handle(cls, device_info, debug=False): - if isunix: - return device_info[3] == 'Bookeen' and device_info[4] == 'Cybook Opus' - return True diff --git a/src/calibre/ebooks/pdf/reflow.py b/src/calibre/ebooks/pdf/reflow.py index b0444d829c..f8117021b5 100644 --- a/src/calibre/ebooks/pdf/reflow.py +++ b/src/calibre/ebooks/pdf/reflow.py @@ -197,6 +197,12 @@ class Page(object): def find_elements_in_row_of(self, x): interval = Interval(x.top - self.YFUZZ * self.average_text_height, x.top + self.YFUZZ*(1+self.average_text_height)) + m = max(0, x.idx-15) + for y in self.elements[m:x.idx+15]: + y_interval = Interval(y.top, y.bottom) + if interval.intersection(y_interval).width > \ + 0.5*self.average_text_height: + yield y class PDFDocument(object): diff --git a/src/calibre/gui2/dialogs/metadata_single.ui b/src/calibre/gui2/dialogs/metadata_single.ui index e14a8ce4f4..5d2b98f70f 100644 --- a/src/calibre/gui2/dialogs/metadata_single.ui +++ b/src/calibre/gui2/dialogs/metadata_single.ui @@ -43,8 +43,8 @@ 0 0 - 879 - 710 + 869 + 698 @@ -408,7 +408,11 @@ - + + + false + +