mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-11-03 19:17:02 -05:00 
			
		
		
		
	Sync to trunk.
This commit is contained in:
		
						commit
						a7de858de1
					
				@ -3,15 +3,16 @@ __license__   = 'GPL v3'
 | 
			
		||||
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
 | 
			
		||||
__docformat__ = 'restructuredtext en'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
from calibre.web.feeds.news import BasicNewsRecipe
 | 
			
		||||
 | 
			
		||||
# http://online.wsj.com/page/us_in_todays_paper.html
 | 
			
		||||
 | 
			
		||||
class WallStreetJournal(BasicNewsRecipe):
 | 
			
		||||
 | 
			
		||||
        title = 'The Wall Street Journal'
 | 
			
		||||
        title = 'The Wall Street Journal (US)'
 | 
			
		||||
        __author__ = 'Kovid Goyal and Sujata Raman'
 | 
			
		||||
        description = 'News and current affairs.'
 | 
			
		||||
        description = 'News and current affairs'
 | 
			
		||||
        needs_subscription = True
 | 
			
		||||
        language = 'en'
 | 
			
		||||
 | 
			
		||||
@ -60,60 +61,54 @@ class WallStreetJournal(BasicNewsRecipe):
 | 
			
		||||
 | 
			
		||||
            return soup
 | 
			
		||||
 | 
			
		||||
        def get_article_url(self, article):
 | 
			
		||||
            try:
 | 
			
		||||
                return article.feedburner_origlink.split('?')[0]
 | 
			
		||||
            except AttributeError:
 | 
			
		||||
                return article.link.split('?')[0]
 | 
			
		||||
        def wsj_get_index(self):
 | 
			
		||||
            return self.index_to_soup('http://online.wsj.com/page/us_in_todays_paper.html')
 | 
			
		||||
 | 
			
		||||
        def parse_index(self):
 | 
			
		||||
            soup = self.wsj_get_index()
 | 
			
		||||
 | 
			
		||||
            left_column = soup.find(
 | 
			
		||||
                    text=lambda t: 'begin ITP Left Column' in str(t))
 | 
			
		||||
 | 
			
		||||
            table = left_column.findNext('table')
 | 
			
		||||
 | 
			
		||||
            current_section = None
 | 
			
		||||
            current_articles = []
 | 
			
		||||
            feeds = []
 | 
			
		||||
            for x in table.findAllNext(True):
 | 
			
		||||
                if x.name == 'td' and x.get('class', None) == 'b13':
 | 
			
		||||
                    if current_articles and current_section:
 | 
			
		||||
                        feeds.append((current_section, current_articles))
 | 
			
		||||
                    current_section = self.tag_to_string(x.a).strip()
 | 
			
		||||
                    current_articles = []
 | 
			
		||||
                    self.log('\tProcessing section:', current_section)
 | 
			
		||||
                if current_section is not None and x.name == 'a' and \
 | 
			
		||||
                        x.get('class', None) == 'bold80':
 | 
			
		||||
                    title = self.tag_to_string(x)
 | 
			
		||||
                    url = x.get('href', False)
 | 
			
		||||
                    if not url or not title:
 | 
			
		||||
                        continue
 | 
			
		||||
                    url = url.partition('#')[0]
 | 
			
		||||
                    desc = ''
 | 
			
		||||
                    d = x.findNextSibling(True)
 | 
			
		||||
                    if d.get('class', None) == 'arialResize':
 | 
			
		||||
                        desc = self.tag_to_string(d)
 | 
			
		||||
                        desc = desc.partition(u'\u2022')[0]
 | 
			
		||||
                    self.log('\t\tFound article:', title)
 | 
			
		||||
                    self.log('\t\t\t', url)
 | 
			
		||||
                    if url.startswith('/'):
 | 
			
		||||
                        url = 'http://online.wsj.com'+url
 | 
			
		||||
                    if desc:
 | 
			
		||||
                        self.log('\t\t\t', desc)
 | 
			
		||||
                    current_articles.append({'title': title, 'url':url,
 | 
			
		||||
                        'description':desc, 'date':''})
 | 
			
		||||
 | 
			
		||||
            if current_articles and current_section:
 | 
			
		||||
                feeds.append((current_section, current_articles))
 | 
			
		||||
 | 
			
		||||
            return feeds
 | 
			
		||||
 | 
			
		||||
        def cleanup(self):
 | 
			
		||||
            self.browser.open('http://online.wsj.com/logout?url=http://online.wsj.com')
 | 
			
		||||
 | 
			
		||||
        feeds =  [
 | 
			
		||||
                #('Most Emailed - Day', 'http://online.wsj.com/xml/rss/3_7030.xml'),
 | 
			
		||||
                #('Most Emailed - Week', 'http://online.wsj.com/xml/rss/3_7253.xml'),
 | 
			
		||||
                #('Most Emailed - Month', 'http://online.wsj.com/xml/rss/3_7254.xml'),
 | 
			
		||||
                (' Most Viewed - Day', 'http://online.wsj.com/xml/rss/3_7198.xml'),
 | 
			
		||||
                (' Most Viewed - Week', 'http://online.wsj.com/xml/rss/3_7251.xml'),
 | 
			
		||||
                #('Most Viewed - Month', 'http://online.wsj.com/xml/rss/3_7252.xml'),
 | 
			
		||||
                ('Today\'s Newspaper -  Page One', 'http://online.wsj.com/xml/rss/3_7205.xml'),
 | 
			
		||||
                ('Today\'s Newspaper - Marketplace', 'http://online.wsj.com/xml/rss/3_7206.xml'),
 | 
			
		||||
                ('Today\'s Newspaper - Money & Investing', 'http://online.wsj.com/xml/rss/3_7207.xml'),
 | 
			
		||||
                ('Today\'s Newspaper - Personal Journal', 'http://online.wsj.com/xml/rss/3_7208.xml'),
 | 
			
		||||
                ('Today\'s Newspaper - Weekend Journal', 'http://online.wsj.com/xml/rss/3_7209.xml'),
 | 
			
		||||
                ('Opinion', 'http://online.wsj.com/xml/rss/3_7041.xml'),
 | 
			
		||||
                ('News - U.S.: What\'s News', 'http://online.wsj.com/xml/rss/3_7011.xml'),
 | 
			
		||||
                ('News - U.S. Business', 'http://online.wsj.com/xml/rss/3_7014.xml'),
 | 
			
		||||
                ('News - Europe: What\'s News', 'http://online.wsj.com/xml/rss/3_7012.xml'),
 | 
			
		||||
                ('News - Asia: What\'s News', 'http://online.wsj.com/xml/rss/3_7013.xml'),
 | 
			
		||||
                ('News - World News', 'http://online.wsj.com/xml/rss/3_7085.xml'),
 | 
			
		||||
                ('News - Economy', 'http://online.wsj.com/xml/rss/3_7086.xml'),
 | 
			
		||||
                ('News - Earnings', 'http://online.wsj.com/xml/rss/3_7088.xml'),
 | 
			
		||||
                ('News - Health', 'http://online.wsj.com/xml/rss/3_7089.xml'),
 | 
			
		||||
                ('News - Law', 'http://online.wsj.com/xml/rss/3_7091.xml'),
 | 
			
		||||
                ('News - Media & Marketing', 'http://online.wsj.com/xml/rss/3_7020.xml'),
 | 
			
		||||
                ('Technology - What\'s News', 'http://online.wsj.com/xml/rss/3_7015.xml'),
 | 
			
		||||
                ('Technology - Gadgets', 'http://online.wsj.com/xml/rss/3_7094.xml'),
 | 
			
		||||
                ('Technology - Telecommunications', 'http://online.wsj.com/xml/rss/3_7095.xml'),
 | 
			
		||||
                ('Technology - E-commerce/Media', 'http://online.wsj.com/xml/rss/3_7096.xml'),
 | 
			
		||||
                ('Technology - Asia', 'http://online.wsj.com/xml/rss/3_7097.xml'),
 | 
			
		||||
                ('Technology - Europe', 'http://online.wsj.com/xml/rss/3_7098.xml'),
 | 
			
		||||
                ('Markets - News', 'http://online.wsj.com/xml/rss/3_7031.xml'),
 | 
			
		||||
                ('Markets - Europe News', 'http://online.wsj.com/xml/rss/3_7101.xml'),
 | 
			
		||||
                ('Markets - Asia News', 'http://online.wsj.com/xml/rss/3_7102.xml'),
 | 
			
		||||
                ('Markets - Deals & Deal Makers', 'http://online.wsj.com/xml/rss/3_7099.xml'),
 | 
			
		||||
                ('Markets - Hedge Funds', 'http://online.wsj.com/xml/rss/3_7199.xml'),
 | 
			
		||||
                ('Personal Journal', 'http://online.wsj.com/xml/rss/3_7200.xml'),
 | 
			
		||||
                ('Personal Journal - Money', 'http://online.wsj.com/xml/rss/3_7104.xml'),
 | 
			
		||||
                ('Personal Journal - Health', 'http://online.wsj.com/xml/rss/3_7089.xml'),
 | 
			
		||||
                ('Personal Journal - Autos', 'http://online.wsj.com/xml/rss/3_7092.xml'),
 | 
			
		||||
                ('Personal Journal - Homes', 'http://online.wsj.com/xml/rss/3_7105.xml'),
 | 
			
		||||
                ('Personal Journal - Travel', 'http://online.wsj.com/xml/rss/3_7106.xml'),
 | 
			
		||||
                ('Personal Journal - Careers', 'http://online.wsj.com/xml/rss/3_7107.xml'),
 | 
			
		||||
                ('Weekend & Leisure', 'http://online.wsj.com/xml/rss/3_7201.xml'),
 | 
			
		||||
                ('Weekend & Leisure - Weekend Journal', 'http://online.wsj.com/xml/rss/3_7202.xml'),
 | 
			
		||||
                ('Weekend & Leisure - Arts & Entertainment', 'http://online.wsj.com/xml/rss/3_7177.xml'),
 | 
			
		||||
                ('Weekend & Leisure - Books', 'http://online.wsj.com/xml/rss/3_7203.xml'),
 | 
			
		||||
                ('Weekend & Leisure - Sports', 'http://online.wsj.com/xml/rss/3_7204.xml'),
 | 
			
		||||
                ]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -13,12 +13,9 @@ from PyQt4 import pyqtconfig
 | 
			
		||||
 | 
			
		||||
from setup import isosx, iswindows, islinux
 | 
			
		||||
 | 
			
		||||
OSX_SDK = '/Developer/SDKs/MacOSX10.5.sdk'
 | 
			
		||||
if not os.path.exists(OSX_SDK):
 | 
			
		||||
    OSX_SDK = '/Developer/SDKs/MacOSX10.4u.sdk'
 | 
			
		||||
leopard_build = '10.5' in OSX_SDK
 | 
			
		||||
OSX_SDK = '/Developer/SDKs/MacOSX10.4u.sdk'
 | 
			
		||||
 | 
			
		||||
os.environ['MACOSX_DEPLOYMENT_TARGET'] = '10.5' if leopard_build else '10.4'
 | 
			
		||||
os.environ['MACOSX_DEPLOYMENT_TARGET'] = '10.4'
 | 
			
		||||
 | 
			
		||||
NMAKE = RC = msvc = MT = win_inc = win_lib = None
 | 
			
		||||
if iswindows:
 | 
			
		||||
@ -117,24 +114,24 @@ if iswindows:
 | 
			
		||||
    podofo_inc = os.path.join(sw_inc_dir, 'podofo')
 | 
			
		||||
    podofo_lib = sw_lib_dir
 | 
			
		||||
elif isosx:
 | 
			
		||||
    fc_inc = '/Users/kovid/fontconfig/include/fontconfig'
 | 
			
		||||
    fc_lib = '/Users/kovid/fontconfig/lib'
 | 
			
		||||
    fc_inc = '/sw/include/fontconfig'
 | 
			
		||||
    fc_lib = '/sw/lib'
 | 
			
		||||
    poppler_inc_dirs = consolidate('POPPLER_INC_DIR',
 | 
			
		||||
            '/Volumes/sw/build/poppler-0.12.0/poppler:/Volumes/sw/build/poppler-0.12.0')
 | 
			
		||||
            '/sw/build/poppler-0.12.2/poppler:/sw/build/poppler-0.12.2')
 | 
			
		||||
    popplerqt4_inc_dirs = poppler_inc_dirs + [poppler_inc_dirs[0]+'/qt4']
 | 
			
		||||
    poppler_lib_dirs = consolidate('POPPLER_LIB_DIR',
 | 
			
		||||
            '/Volumes/sw/lib')
 | 
			
		||||
            '/sw/lib')
 | 
			
		||||
    popplerqt4_lib_dirs = poppler_lib_dirs
 | 
			
		||||
    poppler_libs     = popplerqt4_libs = ['poppler']
 | 
			
		||||
    podofo_inc = '/usr/local/include/podofo'
 | 
			
		||||
    podofo_lib = '/usr/local/lib'
 | 
			
		||||
    podofo_inc = '/sw/podofo'
 | 
			
		||||
    podofo_lib = '/sw/lib'
 | 
			
		||||
    magick_inc_dirs = consolidate('MAGICK_INC',
 | 
			
		||||
        '/Users/kovid/ImageMagick/include/ImageMagick')
 | 
			
		||||
        '/sw/include/ImageMagick')
 | 
			
		||||
    magick_lib_dirs = consolidate('MAGICK_LIB',
 | 
			
		||||
        '/Users/kovid/ImageMagick/lib')
 | 
			
		||||
        '/sw/lib')
 | 
			
		||||
    magick_libs = ['MagickWand', 'MagickCore']
 | 
			
		||||
    png_inc_dirs = consolidate('PNG_INC_DIR', '/usr/local/include')
 | 
			
		||||
    png_lib_dirs = consolidate('PNG_LIB_DIR', '/usr/local/lib')
 | 
			
		||||
    png_inc_dirs = consolidate('PNG_INC_DIR', '/sw/include')
 | 
			
		||||
    png_lib_dirs = consolidate('PNG_LIB_DIR', '/sw/lib')
 | 
			
		||||
    png_libs = ['png12']
 | 
			
		||||
else:
 | 
			
		||||
    # Include directories
 | 
			
		||||
 | 
			
		||||
@ -83,7 +83,7 @@ linux_freeze2 = LinuxFreeze2()
 | 
			
		||||
from setup.installer.osx import OSX, OSX32
 | 
			
		||||
osx = OSX()
 | 
			
		||||
osx32 = OSX32()
 | 
			
		||||
from setup.installer.osx.freeze import OSX32_Freeze
 | 
			
		||||
from setup.installer.osx.app.main import OSX32_Freeze
 | 
			
		||||
osx32_freeze = OSX32_Freeze()
 | 
			
		||||
 | 
			
		||||
from setup.installer.windows import Win, Win32
 | 
			
		||||
 | 
			
		||||
@ -15,7 +15,7 @@ from setup import Command, islinux, isosx, SRC, iswindows
 | 
			
		||||
from setup.build_environment import fc_inc, fc_lib, \
 | 
			
		||||
        fc_error, poppler_libs, poppler_lib_dirs, poppler_inc_dirs, podofo_inc, \
 | 
			
		||||
        podofo_lib, podofo_error, poppler_error, pyqt, OSX_SDK, NMAKE, \
 | 
			
		||||
        leopard_build, QMAKE, msvc, MT, win_inc, win_lib, png_inc_dirs, \
 | 
			
		||||
        QMAKE, msvc, MT, win_inc, win_lib, png_inc_dirs, \
 | 
			
		||||
        magick_inc_dirs, magick_lib_dirs, png_lib_dirs, png_libs, \
 | 
			
		||||
        magick_error, magick_libs, ft_lib_dirs, ft_libs, jpg_libs, jpg_lib_dirs
 | 
			
		||||
MT
 | 
			
		||||
@ -156,7 +156,7 @@ if islinux:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if isosx:
 | 
			
		||||
    x, p = ('x86_64', 'ppc64') if leopard_build else ('i386', 'ppc')
 | 
			
		||||
    x, p = ('i386', 'ppc')
 | 
			
		||||
    archs = ['-arch', x, '-arch', p, '-isysroot',
 | 
			
		||||
                OSX_SDK]
 | 
			
		||||
    cflags.append('-D_OSX')
 | 
			
		||||
@ -305,7 +305,7 @@ class Build(Command):
 | 
			
		||||
        obj_pat = 'release\\*.obj' if iswindows else '*.o'
 | 
			
		||||
        objects = glob.glob(obj_pat)
 | 
			
		||||
        if not objects or self.newer(objects, ext.sources+ext.headers):
 | 
			
		||||
            archs = 'x86_64 ppc64' if leopard_build else 'x86 ppc'
 | 
			
		||||
            archs = 'x86 ppc'
 | 
			
		||||
            pro = textwrap.dedent('''\
 | 
			
		||||
                TARGET   = %s
 | 
			
		||||
                TEMPLATE = lib
 | 
			
		||||
@ -316,9 +316,6 @@ class Build(Command):
 | 
			
		||||
            ''')%(ext.name, ' '.join(ext.headers), ' '.join(ext.sources), archs)
 | 
			
		||||
            open(ext.name+'.pro', 'wb').write(pro)
 | 
			
		||||
            subprocess.check_call([QMAKE, '-o', 'Makefile', ext.name+'.pro'])
 | 
			
		||||
            if leopard_build:
 | 
			
		||||
                raw = open('Makefile', 'rb').read()
 | 
			
		||||
                open('Makefile', 'wb').write(raw.replace('ppc64', 'x86_64'))
 | 
			
		||||
            subprocess.check_call([make, '-f', 'Makefile'])
 | 
			
		||||
            objects = glob.glob(obj_pat)
 | 
			
		||||
        return list(map(self.a, objects))
 | 
			
		||||
@ -354,12 +351,6 @@ class Build(Command):
 | 
			
		||||
            makefile.extra_lflags = qt_objects
 | 
			
		||||
            makefile.extra_include_dirs = ext.inc_dirs
 | 
			
		||||
            makefile.generate()
 | 
			
		||||
            if leopard_build:
 | 
			
		||||
                raw = open(mf, 'rb').read()
 | 
			
		||||
                raw = raw.replace('ppc64 x86_64', 'x86_64')
 | 
			
		||||
                for x in ('ppc64', 'ppc', 'i386'):
 | 
			
		||||
                    raw = raw.replace(x, 'x86_64')
 | 
			
		||||
                open(mf, 'wb').write(raw)
 | 
			
		||||
 | 
			
		||||
            subprocess.check_call([make, '-f', mf], cwd=src_dir)
 | 
			
		||||
            shutil.copy2(module, dest)
 | 
			
		||||
 | 
			
		||||
@ -25,8 +25,9 @@ class OSX32(VMInstaller):
 | 
			
		||||
    description = 'Build 32 bit OS X binary installer'
 | 
			
		||||
 | 
			
		||||
    INSTALLER_EXT = 'dmg'
 | 
			
		||||
    VM_NAME = 'tiger_build'
 | 
			
		||||
    VM_NAME = 'leopard_build'
 | 
			
		||||
    VM = '/vmware/bin/%s'%VM_NAME
 | 
			
		||||
    FREEZE_TEMPLATE = 'python -OO setup.py {freeze_command}'
 | 
			
		||||
    FREEZE_COMMAND = 'osx32_freeze'
 | 
			
		||||
    BUILD_PREFIX = VMInstaller.BUILD_PREFIX + ['source ~/.profile']
 | 
			
		||||
    SHUTDOWN_CMD = ['sudo', 'halt']
 | 
			
		||||
 | 
			
		||||
@ -13,9 +13,13 @@ abspath, join, basename = os.path.abspath, os.path.join, os.path.basename
 | 
			
		||||
from setup import __version__ as VERSION, __appname__ as APPNAME, basenames, \
 | 
			
		||||
        modules as main_modules, Command, SRC, functions as main_functions
 | 
			
		||||
LICENSE = open('LICENSE', 'rb').read()
 | 
			
		||||
MAGICK_HOME='@executable_path/../Frameworks/ImageMagick'
 | 
			
		||||
ENV = dict(
 | 
			
		||||
        FC_CONFIG_DIR='@executable_path/../Resources/fonts',
 | 
			
		||||
        MAGICK_HOME='@executable_path/../Frameworks/ImageMagick',
 | 
			
		||||
        FC_CONFIG_FILE='@executable_path/../Resources/fonts/fonts.conf',
 | 
			
		||||
        MAGICK_CONFIGURE_PATH=MAGICK_HOME+'/config',
 | 
			
		||||
        MAGICK_CODER_MODULE_PATH=MAGICK_HOME+'/modules-Q16/coders',
 | 
			
		||||
        MAGICK_CODER_FILTER_PATH=MAGICK_HOME+'/modules-Q16/filter',
 | 
			
		||||
        QT_PLUGIN_PATH='@executable_path/../MacOS',
 | 
			
		||||
        PYTHONIOENCODING='UTF-8',
 | 
			
		||||
        )
 | 
			
		||||
@ -46,9 +50,9 @@ def compile_launcher_lib(contents_dir, gcc, base):
 | 
			
		||||
    src = join(base, 'util.c')
 | 
			
		||||
    cmd = [gcc] + '-Wall -arch i386 -arch ppc -dynamiclib -std=gnu99'.split() + [src] + \
 | 
			
		||||
            ['-I'+base] + \
 | 
			
		||||
            ['-I%s/python/Python.framework/Headers'%SW] + \
 | 
			
		||||
            ['-I/Library/Frameworks/Python.framework/Versions/Current/Headers'] + \
 | 
			
		||||
            '-current_version 1.0 -compatibility_version 1.0'.split() + \
 | 
			
		||||
            '-fvisibility=hidden -o'.split() + [dest, '-F%s/python'%SW] + \
 | 
			
		||||
            '-fvisibility=hidden -o'.split() + [dest] + \
 | 
			
		||||
            ['-install_name',
 | 
			
		||||
                '@executable_path/../Frameworks/'+os.path.basename(dest)] + \
 | 
			
		||||
            ['-framework', 'Python', '-framework', 'CoreFoundation', '-headerpad_max_install_names']
 | 
			
		||||
@ -176,6 +180,8 @@ class Py2App(object):
 | 
			
		||||
            self.create_plist()
 | 
			
		||||
 | 
			
		||||
            self.add_python_framework()
 | 
			
		||||
            self.add_site_packages()
 | 
			
		||||
            self.add_stdlib()
 | 
			
		||||
            self.add_qt_frameworks()
 | 
			
		||||
            self.add_calibre_plugins()
 | 
			
		||||
            self.add_podofo()
 | 
			
		||||
@ -186,8 +192,6 @@ class Py2App(object):
 | 
			
		||||
            self.add_imagemagick()
 | 
			
		||||
            self.add_misc_libraries()
 | 
			
		||||
 | 
			
		||||
            self.add_site_packages()
 | 
			
		||||
            self.add_stdlib()
 | 
			
		||||
            self.add_resources()
 | 
			
		||||
            self.compile_py_modules()
 | 
			
		||||
 | 
			
		||||
@ -262,8 +266,10 @@ class Py2App(object):
 | 
			
		||||
    def get_local_dependencies(self, path_to_lib):
 | 
			
		||||
        for x in self.get_dependencies(path_to_lib):
 | 
			
		||||
            for y in (SW+'/lib/', '/usr/local/lib/', SW+'/qt/lib/',
 | 
			
		||||
                    SW+'/python/', SW+'/freetype/lib/'):
 | 
			
		||||
                    '/Library/Frameworks/Python.framework/', SW+'/freetype/lib/'):
 | 
			
		||||
                if x.startswith(y):
 | 
			
		||||
                    if y == '/Library/Frameworks/Python.framework/':
 | 
			
		||||
                        y = '/Library/Frameworks/'
 | 
			
		||||
                    yield x, x[len(y):]
 | 
			
		||||
                    break
 | 
			
		||||
 | 
			
		||||
@ -289,7 +295,7 @@ class Py2App(object):
 | 
			
		||||
    @flush
 | 
			
		||||
    def add_python_framework(self):
 | 
			
		||||
        info('\nAdding Python framework')
 | 
			
		||||
        src = join(SW, 'python', 'Python.framework')
 | 
			
		||||
        src = join('/Library/Frameworks', 'Python.framework')
 | 
			
		||||
        x = join(self.frameworks_dir, 'Python.framework')
 | 
			
		||||
        curr = os.path.realpath(join(src, 'Versions', 'Current'))
 | 
			
		||||
        currd = join(x, 'Versions', basename(curr))
 | 
			
		||||
@ -302,6 +308,7 @@ class Py2App(object):
 | 
			
		||||
 | 
			
		||||
    @flush
 | 
			
		||||
    def add_qt_frameworks(self):
 | 
			
		||||
        info('\nAdding Qt Framework')
 | 
			
		||||
        for f in ('QtCore', 'QtGui', 'QtXml', 'QtNetwork', 'QtSvg', 'QtWebkit',
 | 
			
		||||
                'QtXmlPatterns', 'phonon'):
 | 
			
		||||
            self.add_qt_framework(f)
 | 
			
		||||
@ -360,7 +367,7 @@ class Py2App(object):
 | 
			
		||||
                CFBundlePackageType='APPL',
 | 
			
		||||
                CFBundleSignature='????',
 | 
			
		||||
                CFBundleExecutable='calibre',
 | 
			
		||||
                LSMinimumSystemVersion='10.5.2',
 | 
			
		||||
                LSMinimumSystemVersion='10.4.2',
 | 
			
		||||
                LSRequiresNativeExecution=True,
 | 
			
		||||
                NSAppleScriptEnabled=False,
 | 
			
		||||
                NSHumanReadableCopyright='Copyright 2008, Kovid Goyal',
 | 
			
		||||
@ -433,10 +440,7 @@ class Py2App(object):
 | 
			
		||||
        for x in ('Wand', 'Core'):
 | 
			
		||||
            self.install_dylib(os.path.join(SW, 'lib', 'libMagick%s.2.dylib'%x))
 | 
			
		||||
        idir = glob.glob(os.path.join(SW, 'lib', 'ImageMagick-*'))[-1]
 | 
			
		||||
        dest = os.path.join(self.frameworks_dir, 'ImageMagick', 'lib')
 | 
			
		||||
        if not os.path.exists(dest):
 | 
			
		||||
            os.makedirs(dest)
 | 
			
		||||
        dest = os.path.join(dest, os.path.basename(idir))
 | 
			
		||||
        dest = os.path.join(self.frameworks_dir, 'ImageMagick')
 | 
			
		||||
        if os.path.exists(dest):
 | 
			
		||||
            shutil.rmtree(dest)
 | 
			
		||||
        shutil.copytree(idir, dest, True)
 | 
			
		||||
@ -461,12 +465,12 @@ class Py2App(object):
 | 
			
		||||
        paths = reversed(map(abspath, [x for x in sys.path if x.startswith('/')]))
 | 
			
		||||
        upaths = []
 | 
			
		||||
        for x in paths:
 | 
			
		||||
            if x.endswith('/PIL') or 'site-packages' not in x:
 | 
			
		||||
                continue
 | 
			
		||||
            if x not in upaths:
 | 
			
		||||
            if x not in upaths and (x.endswith('.egg') or
 | 
			
		||||
                    x.endswith('/site-packages')):
 | 
			
		||||
                upaths.append(x)
 | 
			
		||||
        upaths.append(os.path.expanduser('~/build/calibre/src'))
 | 
			
		||||
        for x in upaths:
 | 
			
		||||
            info('\t', x)
 | 
			
		||||
            tdir = None
 | 
			
		||||
            try:
 | 
			
		||||
                if not os.path.isdir(x):
 | 
			
		||||
@ -536,7 +540,7 @@ class Py2App(object):
 | 
			
		||||
    @flush
 | 
			
		||||
    def add_stdlib(self):
 | 
			
		||||
        info('\nAdding python stdlib')
 | 
			
		||||
        src = join(SW, 'python/Python.framework/Versions/Current/lib/python')
 | 
			
		||||
        src = '/Library/Frameworks/Python.framework/Versions/Current/lib/python'
 | 
			
		||||
        src += self.version_info
 | 
			
		||||
        dest = join(self.resources_dir, 'Python', 'lib', 'python')
 | 
			
		||||
        dest += self.version_info
 | 
			
		||||
 | 
			
		||||
@ -363,7 +363,7 @@ class NookOutput(OutputProfile):
 | 
			
		||||
    description = _('This profile is intended for the B&N Nook.')
 | 
			
		||||
 | 
			
		||||
    # Screen size is a best guess
 | 
			
		||||
    screen_size               = (600, 800)
 | 
			
		||||
    screen_size               = (600, 770)
 | 
			
		||||
    dpi                       = 167
 | 
			
		||||
    fbase                     = 16
 | 
			
		||||
    fsizes                    = [12, 12, 14, 16, 18, 20, 22, 24]
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,6 @@ Device driver for Bookeen's Cybook Gen 3
 | 
			
		||||
'''
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
from itertools import cycle
 | 
			
		||||
 | 
			
		||||
from calibre import islinux
 | 
			
		||||
from calibre.devices.usbms.driver import USBMS
 | 
			
		||||
 | 
			
		||||
@ -8,10 +8,7 @@ __docformat__ = 'restructuredtext en'
 | 
			
		||||
Device driver for Barns and Nobel's Nook
 | 
			
		||||
'''
 | 
			
		||||
 | 
			
		||||
try:
 | 
			
		||||
    from PIL import Image, ImageDraw
 | 
			
		||||
except ImportError:
 | 
			
		||||
    import Image, ImageDraw
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
import cStringIO
 | 
			
		||||
 | 
			
		||||
@ -47,6 +44,13 @@ class NOOK(USBMS):
 | 
			
		||||
    SUPPORTS_SUB_DIRS = True
 | 
			
		||||
 | 
			
		||||
    def upload_cover(self, path, filename, metadata):
 | 
			
		||||
        try:
 | 
			
		||||
            from PIL import Image, ImageDraw
 | 
			
		||||
            Image, ImageDraw
 | 
			
		||||
        except ImportError:
 | 
			
		||||
            import Image, ImageDraw
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        coverdata = metadata.get('cover', None)
 | 
			
		||||
        if coverdata:
 | 
			
		||||
            cover = Image.open(cStringIO.StringIO(coverdata[2]))
 | 
			
		||||
 | 
			
		||||
@ -111,7 +111,11 @@ class USBMS(CLI, Device):
 | 
			
		||||
            paths.append(filepath)
 | 
			
		||||
 | 
			
		||||
            self.put_file(infile, filepath, replace_file=True)
 | 
			
		||||
            try:
 | 
			
		||||
                self.upload_cover(os.path.dirname(filepath), os.path.splitext(os.path.basename(filepath))[0], mdata)
 | 
			
		||||
            except: # Failure to upload cover is not catastrophic
 | 
			
		||||
                import traceback
 | 
			
		||||
                traceback.print_exc()
 | 
			
		||||
 | 
			
		||||
            self.report_progress((i+1) / float(len(files)), _('Transferring books to device...'))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -203,9 +203,10 @@ def create_option_parser(args, log):
 | 
			
		||||
        log('Created by:', __author__)
 | 
			
		||||
        raise SystemExit(0)
 | 
			
		||||
    if '--list-recipes' in args:
 | 
			
		||||
        from calibre.web.feeds.recipes import titles
 | 
			
		||||
        from calibre.web.feeds.recipes.collection import get_builtin_recipe_titles
 | 
			
		||||
        log('Available recipes:')
 | 
			
		||||
        for title in sorted(titles):
 | 
			
		||||
        titles = sorted(get_builtin_recipe_titles())
 | 
			
		||||
        for title in titles:
 | 
			
		||||
            try:
 | 
			
		||||
                log('\t'+title)
 | 
			
		||||
            except:
 | 
			
		||||
 | 
			
		||||
@ -155,17 +155,19 @@ class EPUBOutput(OutputFormatPlugin):
 | 
			
		||||
    def convert(self, oeb, output_path, input_plugin, opts, log):
 | 
			
		||||
        self.log, self.opts, self.oeb = log, opts, oeb
 | 
			
		||||
 | 
			
		||||
        self.workaround_ade_quirks()
 | 
			
		||||
        self.workaround_webkit_quirks()
 | 
			
		||||
        self.workaround_sony_quirks()
 | 
			
		||||
        from calibre.ebooks.oeb.transforms.rescale import RescaleImages
 | 
			
		||||
        RescaleImages()(oeb, opts)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        from calibre.ebooks.oeb.transforms.split import Split
 | 
			
		||||
        split = Split(not self.opts.dont_split_on_page_breaks,
 | 
			
		||||
                max_flow_size=self.opts.flow_size*1024
 | 
			
		||||
                )
 | 
			
		||||
        split(self.oeb, self.opts)
 | 
			
		||||
 | 
			
		||||
        self.workaround_ade_quirks()
 | 
			
		||||
        self.workaround_webkit_quirks()
 | 
			
		||||
        self.workaround_sony_quirks()
 | 
			
		||||
        from calibre.ebooks.oeb.transforms.rescale import RescaleImages
 | 
			
		||||
        RescaleImages()(oeb, opts)
 | 
			
		||||
        self.insert_cover()
 | 
			
		||||
 | 
			
		||||
        with TemporaryDirectory('_epub_output') as tdir:
 | 
			
		||||
 | 
			
		||||
@ -381,9 +381,9 @@ class FlowSplitter(object):
 | 
			
		||||
                p[i:i+1] = new_pres
 | 
			
		||||
 | 
			
		||||
        split_point, before = self.find_split_point(root)
 | 
			
		||||
        self.log.debug('\t\t\tSplit point:', split_point.tag, tree.getpath(split_point))
 | 
			
		||||
        if split_point is None:
 | 
			
		||||
            raise SplitError(self.item.href, root)
 | 
			
		||||
        self.log.debug('\t\t\tSplit point:', split_point.tag, tree.getpath(split_point))
 | 
			
		||||
 | 
			
		||||
        for t in self.do_split(tree, split_point, before):
 | 
			
		||||
            r = t.getroot()
 | 
			
		||||
 | 
			
		||||
@ -693,6 +693,9 @@ class BooksView(TableView):
 | 
			
		||||
                        self._model.current_changed)
 | 
			
		||||
        self.connect(self._model, SIGNAL('columns_sorted()'),
 | 
			
		||||
                self.columns_sorted, Qt.QueuedConnection)
 | 
			
		||||
        hv = self.verticalHeader()
 | 
			
		||||
        hv.setClickable(True)
 | 
			
		||||
        hv.setCursor(Qt.PointingHandCursor)
 | 
			
		||||
 | 
			
		||||
    def columns_sorted(self):
 | 
			
		||||
        for i in range(self.model().columnCount(None)):
 | 
			
		||||
 | 
			
		||||
@ -552,6 +552,11 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
 | 
			
		||||
        self.connect(self.scheduler,
 | 
			
		||||
                SIGNAL('start_recipe_fetch(PyQt_PyObject)'),
 | 
			
		||||
                self.download_scheduled_recipe, Qt.QueuedConnection)
 | 
			
		||||
        self.library_view.verticalHeader().sectionClicked.connect(self.view_specific_book)
 | 
			
		||||
 | 
			
		||||
        for view in ('library', 'memory', 'card_a', 'card_b'):
 | 
			
		||||
            view = getattr(self, view+'_view')
 | 
			
		||||
            view.verticalHeader().sectionDoubleClicked.connect(self.view_specific_book)
 | 
			
		||||
 | 
			
		||||
        self.location_view.setCurrentIndex(self.location_view.model().index(0))
 | 
			
		||||
 | 
			
		||||
@ -921,8 +926,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
 | 
			
		||||
        '''
 | 
			
		||||
        Add books from the local filesystem to either the library or the device.
 | 
			
		||||
        '''
 | 
			
		||||
        books = choose_files(self, 'add books dialog dir', 'Select books',
 | 
			
		||||
                             filters=[
 | 
			
		||||
        filters = [
 | 
			
		||||
                        (_('Books'), BOOK_EXTENSIONS),
 | 
			
		||||
                        (_('EPUB Books'), ['epub']),
 | 
			
		||||
                        (_('LRF Books'), ['lrf']),
 | 
			
		||||
@ -933,10 +937,15 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
 | 
			
		||||
                        (_('PDF Books'), ['pdf']),
 | 
			
		||||
                        (_('Comics'), ['cbz', 'cbr', 'cbc']),
 | 
			
		||||
                        (_('Archives'), ['zip', 'rar']),
 | 
			
		||||
                        ])
 | 
			
		||||
                        ]
 | 
			
		||||
        to_device = self.stack.currentIndex() != 0
 | 
			
		||||
        if to_device:
 | 
			
		||||
            filters = [(_('Supported books'), self.device_manager.device.FORMATS)]
 | 
			
		||||
 | 
			
		||||
        books = choose_files(self, 'add books dialog dir', 'Select books',
 | 
			
		||||
                             filters=filters)
 | 
			
		||||
        if not books:
 | 
			
		||||
            return
 | 
			
		||||
        to_device = self.stack.currentIndex() != 0
 | 
			
		||||
        self._add_books(books, to_device)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1442,7 +1451,12 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
 | 
			
		||||
 | 
			
		||||
    def view_book(self, triggered):
 | 
			
		||||
        rows = self.current_view().selectionModel().selectedRows()
 | 
			
		||||
        self._view_books(rows)
 | 
			
		||||
 | 
			
		||||
    def view_specific_book(self, index):
 | 
			
		||||
        self._view_books([index])
 | 
			
		||||
 | 
			
		||||
    def _view_books(self, rows):
 | 
			
		||||
        if not rows or len(rows) == 0:
 | 
			
		||||
            self._launch_viewer()
 | 
			
		||||
            return
 | 
			
		||||
@ -1458,6 +1472,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
 | 
			
		||||
 | 
			
		||||
        if self.current_view() is self.library_view:
 | 
			
		||||
            for row in rows:
 | 
			
		||||
                if hasattr(row, 'row'):
 | 
			
		||||
                    row = row.row()
 | 
			
		||||
 | 
			
		||||
                formats = self.library_view.model().db.formats(row)
 | 
			
		||||
 | 
			
		||||
@ -96,6 +96,7 @@ class Nook(Sony505):
 | 
			
		||||
    id = 'nook'
 | 
			
		||||
    name = 'Nook'
 | 
			
		||||
    manufacturer = 'Barnes & Noble'
 | 
			
		||||
    output_profile = 'nook'
 | 
			
		||||
 | 
			
		||||
class CybookG3(Device):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -473,7 +473,7 @@ class LibraryDatabase2(LibraryDatabase):
 | 
			
		||||
    def upgrade_version_2(self):
 | 
			
		||||
        ''' Fix Foreign key constraints for deleting from link tables. '''
 | 
			
		||||
        script = textwrap.dedent('''\
 | 
			
		||||
        DROP TRIGGER fkc_delete_books_%(ltable)s_link;
 | 
			
		||||
        DROP TRIGGER IF EXISTS fkc_delete_books_%(ltable)s_link;
 | 
			
		||||
        CREATE TRIGGER fkc_delete_on_%(table)s
 | 
			
		||||
        BEFORE DELETE ON %(table)s
 | 
			
		||||
        BEGIN
 | 
			
		||||
 | 
			
		||||
@ -5,8 +5,8 @@
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: calibre 0.6.29\n"
 | 
			
		||||
"POT-Creation-Date: 2009-12-18 12:30+MST\n"
 | 
			
		||||
"PO-Revision-Date: 2009-12-18 12:30+MST\n"
 | 
			
		||||
"POT-Creation-Date: 2009-12-21 21:13+MST\n"
 | 
			
		||||
"PO-Revision-Date: 2009-12-21 21:13+MST\n"
 | 
			
		||||
"Last-Translator: Automatically generated\n"
 | 
			
		||||
"Language-Team: LANGUAGE\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
@ -21,13 +21,13 @@ msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:44
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:94
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:53
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:54
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:58
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:199
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:767
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:770
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:193
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:410
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:414
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:67
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:69
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:319
 | 
			
		||||
@ -115,8 +115,8 @@ msgstr ""
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:170
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:392
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:405
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:877
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1003
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:880
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1006
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:179
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:281
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/library/database.py:913
 | 
			
		||||
@ -380,12 +380,15 @@ msgid "Communicate with the Blackberry smart phone."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:13
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/iriver/driver.py:16
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/nuut2/driver.py:18
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:88
 | 
			
		||||
msgid "Kovid Goyal"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/boox/driver.py:17
 | 
			
		||||
msgid "Communicate with the BOOX eBook reader."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:22
 | 
			
		||||
msgid "Communicate with the Cybook Gen 3 eBook reader."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -439,19 +442,15 @@ msgstr ""
 | 
			
		||||
msgid "Communicate with the JetBook eBook reader."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:23
 | 
			
		||||
msgid "James Ralston"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:21
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:22
 | 
			
		||||
msgid "Communicate with the Kindle eBook reader."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:66
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:67
 | 
			
		||||
msgid "Communicate with the Kindle 2 eBook reader."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:76
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:77
 | 
			
		||||
msgid "Communicate with the Kindle DX eBook reader."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -605,71 +604,71 @@ msgstr ""
 | 
			
		||||
msgid "Removing books from device metadata listing..."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:196
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:200
 | 
			
		||||
msgid "Rendered %s"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:199
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:203
 | 
			
		||||
msgid "Failed %s"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:256
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:260
 | 
			
		||||
msgid ""
 | 
			
		||||
"Failed to process comic: \n"
 | 
			
		||||
"\n"
 | 
			
		||||
"%s"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:274
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:278
 | 
			
		||||
msgid "Number of colors for grayscale image conversion. Default: %default. Values of less than 256 may result in blurred text on your device if you are creating your comics in EPUB format."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:278
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:282
 | 
			
		||||
msgid "Disable normalize (improve contrast) color range for pictures. Default: False"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:281
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:285
 | 
			
		||||
msgid "Maintain picture aspect ratio. Default is to fill the screen."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:283
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:287
 | 
			
		||||
msgid "Disable sharpening."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:285
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:289
 | 
			
		||||
msgid "Disable trimming of comic pages. For some comics, trimming might remove content as well as borders."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:288
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:292
 | 
			
		||||
msgid "Don't split landscape images into two portrait images"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:290
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:294
 | 
			
		||||
msgid "Keep aspect ratio and scale image using screen height as image width for viewing in landscape mode."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:293
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:297
 | 
			
		||||
msgid "Used for right-to-left publications like manga. Causes landscape pages to be split into portrait pages from right to left."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:297
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:301
 | 
			
		||||
msgid "Enable Despeckle. Reduces speckle noise. May greatly increase processing time."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:300
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:304
 | 
			
		||||
msgid "Don't sort the files found in the comic alphabetically by name. Instead use the order they were added to the comic."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:304
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:308
 | 
			
		||||
msgid "The format that images in the created ebook are converted to. You can experiment to see which format gives you optimal size and look on your device."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:308
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:312
 | 
			
		||||
msgid "Apply no processing to the image"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:434
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:445
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:438
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:449
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -728,7 +727,7 @@ msgstr ""
 | 
			
		||||
msgid "List builtin recipes"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:251
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:252
 | 
			
		||||
msgid "Output saved to"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -1284,7 +1283,7 @@ msgstr ""
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:56
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:159
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:389
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1069
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1072
 | 
			
		||||
msgid "Title"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -1292,7 +1291,7 @@ msgstr ""
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:57
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:160
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:394
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1070
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1073
 | 
			
		||||
msgid "Author(s)"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -1319,8 +1318,8 @@ msgstr ""
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:370
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:166
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:339
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1013
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1073
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1016
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1076
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:96
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:125
 | 
			
		||||
msgid "Tags"
 | 
			
		||||
@ -1339,7 +1338,7 @@ msgid "Language"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:375
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1012
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1015
 | 
			
		||||
msgid "Timestamp"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -2186,7 +2185,7 @@ msgstr ""
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:67
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:67
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:35
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:96
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:107
 | 
			
		||||
msgid "Form"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -2773,7 +2772,7 @@ msgid "RB Output"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:77
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1421
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1431
 | 
			
		||||
msgid "Choose the format to view"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -3266,7 +3265,7 @@ msgstr ""
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:85
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:346
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1008
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1011
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:92
 | 
			
		||||
msgid "Path"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -3381,7 +3380,7 @@ msgstr ""
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:475
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:819
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:158
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1094
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1104
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53
 | 
			
		||||
msgid "Error"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@ -3451,7 +3450,7 @@ msgid "Access log:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:674
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:613
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:618
 | 
			
		||||
msgid "Failed to start content server"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -4037,7 +4036,7 @@ msgid "Choose formats for "
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:136
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:925
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:930
 | 
			
		||||
msgid "Books"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -4456,7 +4455,7 @@ msgid "Send test mail from %s to:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:52
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:105
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:115
 | 
			
		||||
msgid "&Test"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -4632,7 +4631,7 @@ msgstr ""
 | 
			
		||||
msgid "Recipe source code (python)"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:97
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:107
 | 
			
		||||
msgid ""
 | 
			
		||||
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
 | 
			
		||||
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
 | 
			
		||||
@ -4643,31 +4642,31 @@ msgid ""
 | 
			
		||||
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Use the <span style=\" font-weight:600;\">Test</span> functionality below to test your regular expression on a few sample filenames. The group names for the various metadata entries are documented in tooltips.</p></body></html>"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:104
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:114
 | 
			
		||||
msgid "Regular &expression"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:116
 | 
			
		||||
msgid "File &name:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:107
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:117
 | 
			
		||||
msgid "Test"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:108
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:118
 | 
			
		||||
msgid "Title:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:109
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:119
 | 
			
		||||
msgid "Regular expression (?P<title>)"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:110
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:113
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:116
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:119
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:122
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:120
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:123
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:126
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:129
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:132
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:78
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:82
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:87
 | 
			
		||||
@ -4676,35 +4675,35 @@ msgstr ""
 | 
			
		||||
msgid "No match"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:111
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:121
 | 
			
		||||
msgid "Authors:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:112
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:122
 | 
			
		||||
msgid "Regular expression (?P<author>)"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:114
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:124
 | 
			
		||||
msgid "Series:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:115
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:125
 | 
			
		||||
msgid "Regular expression (?P<series>)"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:117
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:127
 | 
			
		||||
msgid "Series index:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:118
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:128
 | 
			
		||||
msgid "Regular expression (?P<series_index>)"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:120
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:130
 | 
			
		||||
msgid "ISBN:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:121
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:131
 | 
			
		||||
msgid "Regular expression (?P<isbn>)"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -4760,12 +4759,12 @@ msgid " - Jobs"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:161
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1071
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1074
 | 
			
		||||
msgid "Size (MB)"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:162
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1072
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1075
 | 
			
		||||
msgid "Date"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -4779,7 +4778,7 @@ msgstr ""
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:46
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:72
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:77
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:406
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:410
 | 
			
		||||
msgid "None"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -4787,19 +4786,19 @@ msgstr ""
 | 
			
		||||
msgid "Book <font face=\"serif\">%s</font> of %s."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:838
 | 
			
		||||
msgid "Not allowed"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:836
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:839
 | 
			
		||||
msgid "Dropping onto a device is not supported. First add the book to the calibre library."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1007
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1010
 | 
			
		||||
msgid "Format"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1061
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1064
 | 
			
		||||
msgid "Double click to <b>edit</b> me<br><br>"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -5284,7 +5283,7 @@ msgid "Save to disk in a single directory"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:306
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1523
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1539
 | 
			
		||||
msgid "Save only %s format to disk"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -5319,31 +5318,31 @@ msgid "Calibre Library"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:464
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1666
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1682
 | 
			
		||||
msgid "Choose a location for your ebook library."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:656
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:661
 | 
			
		||||
msgid "Browse by covers"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:773
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:778
 | 
			
		||||
msgid "Device: "
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:775
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:780
 | 
			
		||||
msgid " detected."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:798
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:804
 | 
			
		||||
msgid "Connected "
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:810
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:816
 | 
			
		||||
msgid "Device database corrupted"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:811
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:817
 | 
			
		||||
msgid ""
 | 
			
		||||
"\n"
 | 
			
		||||
"                <p>The database of books on the reader is corrupted. Try the following:\n"
 | 
			
		||||
@ -5354,260 +5353,264 @@ msgid ""
 | 
			
		||||
"                "
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:872
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:878
 | 
			
		||||
msgid "How many empty books?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:873
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:879
 | 
			
		||||
msgid "How many empty books should be added?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:917
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:960
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:923
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:970
 | 
			
		||||
msgid "Uploading books to device."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:926
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:931
 | 
			
		||||
msgid "EPUB Books"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:927
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:932
 | 
			
		||||
msgid "LRF Books"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:928
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:933
 | 
			
		||||
msgid "HTML Books"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:929
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:934
 | 
			
		||||
msgid "LIT Books"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:930
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:935
 | 
			
		||||
msgid "MOBI Books"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:931
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:936
 | 
			
		||||
msgid "Text books"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:932
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:937
 | 
			
		||||
msgid "PDF Books"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:933
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:938
 | 
			
		||||
msgid "Comics"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:934
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:939
 | 
			
		||||
msgid "Archives"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:969
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:943
 | 
			
		||||
msgid "Supported books"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:979
 | 
			
		||||
msgid "Failed to read metadata"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:970
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:980
 | 
			
		||||
msgid "Failed to read metadata from the following"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:989
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:999
 | 
			
		||||
msgid "The selected books will be <b>permanently deleted</b> and the files removed from your computer. Are you sure?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1016
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1026
 | 
			
		||||
msgid "Deleting books from device."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1047
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1057
 | 
			
		||||
msgid "Cannot download metadata"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1048
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1105
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1138
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1163
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1276
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1058
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1115
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1148
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1173
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1286
 | 
			
		||||
msgid "No books selected"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1063
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1073
 | 
			
		||||
msgid "social metadata"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1065
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1075
 | 
			
		||||
msgid "covers"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1065
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1075
 | 
			
		||||
msgid "metadata"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1067
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1077
 | 
			
		||||
msgid "Downloading %s for %d book(s)"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1089
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1099
 | 
			
		||||
msgid "Failed to download some metadata"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1090
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1100
 | 
			
		||||
msgid "Failed to download metadata for the following:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1093
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1103
 | 
			
		||||
msgid "Failed to download metadata:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1104
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1137
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1114
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1147
 | 
			
		||||
msgid "Cannot edit metadata"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1162
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1172
 | 
			
		||||
msgid "Cannot save to disk"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1165
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1175
 | 
			
		||||
msgid "Choose destination directory"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1192
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1202
 | 
			
		||||
msgid "Error while saving"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1193
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1203
 | 
			
		||||
msgid "There was an error while saving."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1200
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1201
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1210
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1211
 | 
			
		||||
msgid "Could not save some books"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1202
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1212
 | 
			
		||||
msgid "Click the show details button to see which ones."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1221
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1231
 | 
			
		||||
msgid "Fetching news from "
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1235
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1245
 | 
			
		||||
msgid " fetched."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1275
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1285
 | 
			
		||||
msgid "Cannot convert"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1304
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1314
 | 
			
		||||
msgid "Starting conversion of %d book(s)"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1415
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1434
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1425
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1444
 | 
			
		||||
msgid "No book selected"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1415
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1465
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1425
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1481
 | 
			
		||||
msgid "Cannot view"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1433
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1443
 | 
			
		||||
msgid "Cannot open folder"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1450
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1465
 | 
			
		||||
msgid "Multiple Books Selected"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1451
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1466
 | 
			
		||||
msgid "You are attempting to open %d books. Opening too many books at once can be slow and have a negative effect on the responsiveness of your computer. Once started the process cannot be stopped until complete. Do you wish to continue?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1466
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1482
 | 
			
		||||
msgid "%s has no available formats."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1507
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1523
 | 
			
		||||
msgid "Cannot configure"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1508
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1524
 | 
			
		||||
msgid "Cannot configure while there are running jobs."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1551
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1567
 | 
			
		||||
msgid "No detailed info available"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1552
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1568
 | 
			
		||||
msgid "No detailed information is available for books on the device."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1604
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1620
 | 
			
		||||
msgid "Error talking to device"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1605
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1621
 | 
			
		||||
msgid "There was a temporary error talking to the device. Please unplug and reconnect the device and or reboot."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1628
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1646
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1644
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1662
 | 
			
		||||
msgid "Conversion Error"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1629
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1645
 | 
			
		||||
msgid "<p>Could not convert: %s<p>It is a <a href=\"%s\">DRM</a>ed book. You must first remove the DRM using third party tools."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1647
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1663
 | 
			
		||||
msgid "<b>Failed</b>"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1675
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1691
 | 
			
		||||
msgid "Invalid library location"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1676
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1692
 | 
			
		||||
msgid "Could not access %s. Using %s as the library."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1724
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1740
 | 
			
		||||
msgid "is the result of the efforts of many volunteers from all over the world. If you find it useful, please consider donating to support its development."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1749
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1765
 | 
			
		||||
msgid "There are active jobs. Are you sure you want to quit?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1752
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1768
 | 
			
		||||
msgid ""
 | 
			
		||||
" is communicating with the device!<br>\n"
 | 
			
		||||
"                      Quitting may cause corruption on the device.<br>\n"
 | 
			
		||||
"                      Are you sure you want to quit?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1756
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1772
 | 
			
		||||
msgid "WARNING: Active jobs"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1808
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1824
 | 
			
		||||
msgid "will keep running in the system tray. To close it, choose <b>Quit</b> in the context menu of the system tray."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1827
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1843
 | 
			
		||||
msgid "<span style=\"color:red; font-weight:bold\">Latest version: <a href=\"%s\">%s</a></span>"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1835
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1851
 | 
			
		||||
msgid "Update available"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1836
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1852
 | 
			
		||||
msgid "%s has been updated to version %s. See the <a href=\"http://calibre-ebook.com/whats-new\">new features</a>. Visit the download page?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -6042,23 +6045,23 @@ msgstr ""
 | 
			
		||||
msgid "Click to see the books on storage card B in your reader"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:496
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:500
 | 
			
		||||
msgid "Change Case"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:497
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:501
 | 
			
		||||
msgid "Upper Case"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:498
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:502
 | 
			
		||||
msgid "Lower Case"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:499
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:503
 | 
			
		||||
msgid "Swap Case"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:500
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:504
 | 
			
		||||
msgid "Title Case"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@ -6643,16 +6646,16 @@ msgid ""
 | 
			
		||||
"Start the calibre content server."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:49
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:48
 | 
			
		||||
msgid ""
 | 
			
		||||
"%sUsage%s: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:93
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:92
 | 
			
		||||
msgid "Created by "
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:94
 | 
			
		||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:93
 | 
			
		||||
msgid "Whenever you pass arguments to %prog that have spaces in them, enclose the arguments in quotation marks."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,6 @@ from copy import deepcopy
 | 
			
		||||
from functools import partial
 | 
			
		||||
from optparse import OptionParser as _OptionParser
 | 
			
		||||
from optparse import IndentedHelpFormatter
 | 
			
		||||
from PyQt4.QtCore import QString
 | 
			
		||||
from calibre.constants import terminal_controller, iswindows, isosx, \
 | 
			
		||||
                              __appname__, __version__, __author__, plugins
 | 
			
		||||
from calibre.utils.lock import LockError, ExclusiveFile
 | 
			
		||||
@ -365,6 +364,7 @@ class OptionSet(object):
 | 
			
		||||
        if val is val is True or val is False or val is None or \
 | 
			
		||||
           isinstance(val, (int, float, long, basestring)):
 | 
			
		||||
            return repr(val)
 | 
			
		||||
        from PyQt4.QtCore import QString
 | 
			
		||||
        if isinstance(val, QString):
 | 
			
		||||
            return repr(unicode(val))
 | 
			
		||||
        pickle = cPickle.dumps(val, -1)
 | 
			
		||||
@ -722,26 +722,4 @@ def migrate():
 | 
			
		||||
    p.set('migrated', True)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    import subprocess
 | 
			
		||||
    from PyQt4.Qt import QByteArray
 | 
			
		||||
    c = Config('test', 'test config')
 | 
			
		||||
 | 
			
		||||
    c.add_opt('one', ['-1', '--one'], help="This is option #1")
 | 
			
		||||
    c.set('one', u'345')
 | 
			
		||||
 | 
			
		||||
    c.add_opt('two', help="This is option #2")
 | 
			
		||||
    c.set('two', 345)
 | 
			
		||||
 | 
			
		||||
    c.add_opt('three', help="This is option #3")
 | 
			
		||||
    c.set('three', QString(u'aflatoon'))
 | 
			
		||||
 | 
			
		||||
    c.add_opt('four', help="This is option #4")
 | 
			
		||||
    c.set('four', QByteArray('binary aflatoon'))
 | 
			
		||||
 | 
			
		||||
    subprocess.call(['pygmentize', os.path.expanduser('~/.config/calibre/test.py')])
 | 
			
		||||
 | 
			
		||||
    opts = c.parse()
 | 
			
		||||
    for i in ('one', 'two', 'three', 'four'):
 | 
			
		||||
        print i, repr(getattr(opts, i))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1063,7 +1063,7 @@ class BasicNewsRecipe(Recipe):
 | 
			
		||||
        return parsed_feeds
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def tag_to_string(self, tag, use_alt=True):
 | 
			
		||||
    def tag_to_string(self, tag, use_alt=True, normalize_whitespace=True):
 | 
			
		||||
        '''
 | 
			
		||||
        Convenience method to take a
 | 
			
		||||
        `BeautifulSoup <http://www.crummy.com/software/BeautifulSoup/documentation.html>`_
 | 
			
		||||
@ -1090,7 +1090,10 @@ class BasicNewsRecipe(Recipe):
 | 
			
		||||
                    strings.append(res)
 | 
			
		||||
                elif use_alt and item.has_key('alt'):
 | 
			
		||||
                    strings.append(item['alt'])
 | 
			
		||||
        return u''.join(strings)
 | 
			
		||||
        ans = u''.join(strings)
 | 
			
		||||
        if normalize_whitespace:
 | 
			
		||||
            ans = re.sub(r'\s+', ' ', ans)
 | 
			
		||||
        return ans
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def soup(cls, raw):
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user