Sync to trunk.

This commit is contained in:
John Schember 2009-07-24 22:49:46 -04:00
commit 8c745579ae
13 changed files with 114 additions and 82 deletions

View File

@ -2,7 +2,7 @@ __license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
__appname__ = 'calibre' __appname__ = 'calibre'
__version__ = '0.6.0b17' __version__ = '0.6.0'
__author__ = "Kovid Goyal <kovid@kovidgoyal.net>" __author__ = "Kovid Goyal <kovid@kovidgoyal.net>"
import re import re

View File

@ -109,6 +109,10 @@ class InputFormatPlugin(Plugin):
#: convenience method, :method:`get_image_collection`. #: convenience method, :method:`get_image_collection`.
is_image_collection = False is_image_collection = False
#: If set to True, the input plugin will perform special processing
#: to make its output suitable for viewing
for_viewer = False
#: Options shared by all Input format plugins. Do not override #: Options shared by all Input format plugins. Do not override
#: in sub-classes. Use :member:`options` instead. Every option must be an #: in sub-classes. Use :member:`options` instead. Every option must be an
#: instance of :class:`OptionRecommendation`. #: instance of :class:`OptionRecommendation`.

View File

@ -571,6 +571,7 @@ class Device(DeviceConfig, DevicePlugin):
def eject_linux(self): def eject_linux(self):
drives = self.find_device_nodes() drives = self.find_device_nodes()
success = False
for drive in drives: for drive in drives:
if drive: if drive:
cmd = ['pumount', '-l'] cmd = ['pumount', '-l']
@ -580,15 +581,20 @@ class Device(DeviceConfig, DevicePlugin):
pass pass
while p.poll() is None: while p.poll() is None:
time.sleep(0.1) time.sleep(0.1)
if p.returncode == 0: success = success or p.returncode == 0
for x in ('_main_prefix', '_card_a_prefix', '_card_b_prefix'): try:
x = getattr(self, x, None) subprocess.Popen(['sudo', 'eject', drive])
if x is not None: except:
if x.startswith('/media/') and os.path.exists(x): pass
try: for x in ('_main_prefix', '_card_a_prefix', '_card_b_prefix'):
shutil.rmtree(x) x = getattr(self, x, None)
except: if x is not None:
pass if x.startswith('/media/') and os.path.exists(x) \
and not os.listdir(x):
try:
shutil.rmtree(x)
except:
pass
def eject(self): def eject(self):

View File

@ -53,7 +53,6 @@ class EPUBInput(InputFormatPlugin):
traceback.print_exc() traceback.print_exc()
return False return False
@classmethod
def rationalize_cover(self, opf, log): def rationalize_cover(self, opf, log):
guide_cover, guide_elem = None, None guide_cover, guide_elem = None, None
for guide_elem in opf.iterguide(): for guide_elem in opf.iterguide():
@ -78,7 +77,8 @@ class EPUBInput(InputFormatPlugin):
# Remove from spine as covers must be treated # Remove from spine as covers must be treated
# specially # specially
spine[0].getparent().remove(spine[0]) if not self.for_viewer:
spine[0].getparent().remove(spine[0])
guide_elem.set('href', 'calibre_raster_cover.jpg') guide_elem.set('href', 'calibre_raster_cover.jpg')
from calibre.ebooks.oeb.base import OPF from calibre.ebooks.oeb.base import OPF
t = etree.SubElement(elem[0].getparent(), OPF('item'), t = etree.SubElement(elem[0].getparent(), OPF('item'),

View File

@ -1891,6 +1891,12 @@ def process_file(path, options, logger):
if options.header: if options.header:
header = Paragraph() header = Paragraph()
fheader = options.headerformat fheader = options.headerformat
if not options.title:
options.title = _('Unknown')
if not options.author:
options.author = _('Unknown')
if not fheader:
fheader = "%t by %a"
fheader = re.sub(r'(?<!%)%t', options.title, fheader) fheader = re.sub(r'(?<!%)%t', options.title, fheader)
fheader = re.sub(r'(?<!%)%a', options.author, fheader) fheader = re.sub(r'(?<!%)%a', options.author, fheader)
fheader = re.sub(r'%%a','%a',fheader) fheader = re.sub(r'%%a','%a',fheader)

View File

@ -15,7 +15,7 @@ from lxml import etree
from dateutil import parser from dateutil import parser
from calibre.ebooks.chardet import xml_to_unicode from calibre.ebooks.chardet import xml_to_unicode
from calibre.constants import __appname__, __version__ from calibre.constants import __appname__, __version__, filesystem_encoding
from calibre.ebooks.metadata.toc import TOC from calibre.ebooks.metadata.toc import TOC
from calibre.ebooks.metadata import MetaInformation, string_to_authors from calibre.ebooks.metadata import MetaInformation, string_to_authors
@ -1048,6 +1048,8 @@ def metadata_to_opf(mi, as_string=True):
metadata[-1].tail = '\n' +(' '*4) metadata[-1].tail = '\n' +(' '*4)
if mi.cover: if mi.cover:
if not isinstance(mi.cover, unicode):
mi.cover = mi.cover.decode(filesystem_encoding)
guide.text = '\n'+(' '*8) guide.text = '\n'+(' '*8)
r = guide.makeelement(OPF('reference'), r = guide.makeelement(OPF('reference'),
attrib={'type':'cover', 'title':_('Cover'), 'href':mi.cover}) attrib={'type':'cover', 'title':_('Cover'), 'href':mi.cover})

View File

@ -134,6 +134,7 @@ class EbookIterator(object):
if hasattr(plumber.opts, 'no_process'): if hasattr(plumber.opts, 'no_process'):
plumber.opts.no_process = True plumber.opts.no_process = True
plumber.input_plugin.for_viewer = True
self.pathtoopf = plumber.input_plugin(open(plumber.input, 'rb'), self.pathtoopf = plumber.input_plugin(open(plumber.input, 'rb'),
plumber.opts, plumber.input_fmt, self.log, plumber.opts, plumber.input_fmt, self.log,
{}, self.base) {}, self.base)

View File

@ -36,16 +36,16 @@ OPTIONS = set([
level=OptionRecommendation.HIGH, long_switch='output', short_switch='o', level=OptionRecommendation.HIGH, long_switch='output', short_switch='o',
help=_('Path to output file. By default a file is created in the current directory.')), help=_('Path to output file. By default a file is created in the current directory.')),
OptionRecommendation(name='bottom_left_x', recommended_value=DEFAULT_CROP, OptionRecommendation(name='bottom_left_x', recommended_value=DEFAULT_CROP,
level=OptionRecommendation.LOW, long_switch='leftx', short_switch='x', level=OptionRecommendation.LOW, long_switch='left-x', short_switch='x',
help=_('Number of pixels to crop from the left most x (default is %s)') % DEFAULT_CROP), help=_('Number of pixels to crop from the left most x (default is %s)') % DEFAULT_CROP),
OptionRecommendation(name='bottom_left_y', recommended_value=DEFAULT_CROP, OptionRecommendation(name='bottom_left_y', recommended_value=DEFAULT_CROP,
level=OptionRecommendation.LOW, long_switch='lefty', short_switch='y', level=OptionRecommendation.LOW, long_switch='left-y', short_switch='y',
help=_('Number of pixels to crop from the left most y (default is %s)') % DEFAULT_CROP), help=_('Number of pixels to crop from the left most y (default is %s)') % DEFAULT_CROP),
OptionRecommendation(name='top_right_x', recommended_value=DEFAULT_CROP, OptionRecommendation(name='top_right_x', recommended_value=DEFAULT_CROP,
level=OptionRecommendation.LOW, long_switch='rightx', short_switch='v', level=OptionRecommendation.LOW, long_switch='right-x', short_switch='v',
help=_('Number of pixels to crop from the right most x (default is %s)') % DEFAULT_CROP), help=_('Number of pixels to crop from the right most x (default is %s)') % DEFAULT_CROP),
OptionRecommendation(name='top_right_y', recommended_value=DEFAULT_CROP, OptionRecommendation(name='top_right_y', recommended_value=DEFAULT_CROP,
level=OptionRecommendation.LOW, long_switch='right y', short_switch='w', level=OptionRecommendation.LOW, long_switch='right-y', short_switch='w',
help=_('Number of pixels to crop from the right most y (default is %s)') % DEFAULT_CROP), help=_('Number of pixels to crop from the right most y (default is %s)') % DEFAULT_CROP),
OptionRecommendation(name='bounding', recommended_value=None, OptionRecommendation(name='bounding', recommended_value=None,
level=OptionRecommendation.LOW, long_switch='bounding', short_switch='b', level=OptionRecommendation.LOW, long_switch='bounding', short_switch='b',

View File

@ -511,7 +511,7 @@ class Wizard(QWizard):
self.device_page = DevicePage() self.device_page = DevicePage()
self.library_page = LibraryPage() self.library_page = LibraryPage()
self.finish_page = FinishPage() self.finish_page = FinishPage()
bt = unicode(self.buttonText(self.FinishButton)) bt = unicode(self.buttonText(self.FinishButton)).replace('&', '')
t = unicode(self.finish_page.finish_text.text()) t = unicode(self.finish_page.finish_text.text())
self.finish_page.finish_text.setText(t%bt) self.finish_page.finish_text.setText(t%bt)
self.kindle_page = KindlePage() self.kindle_page = KindlePage()

View File

@ -8,6 +8,7 @@ HTTP server for remote access to the calibre database.
''' '''
import sys, textwrap, operator, os, re, logging, cStringIO import sys, textwrap, operator, os, re, logging, cStringIO
import __builtin__
from itertools import repeat from itertools import repeat
from logging.handlers import RotatingFileHandler from logging.handlers import RotatingFileHandler
from datetime import datetime from datetime import datetime
@ -352,7 +353,7 @@ class LibraryServer(object):
book, books = MarkupTemplate(self.BOOK), [] book, books = MarkupTemplate(self.BOOK), []
for record in items[start:start+num]: for record in items[start:start+num]:
aus = record[2] if record[2] else __builtins__._('Unknown') aus = record[2] if record[2] else __builtin__._('Unknown')
authors = '|'.join([i.replace('|', ',') for i in aus.split(',')]) authors = '|'.join([i.replace('|', ',') for i in aus.split(',')])
record[10] = fmt_sidx(float(record[10])) record[10] = fmt_sidx(float(record[10]))
books.append(book.generate(r=record, authors=authors).render('xml').decode('utf-8')) books.append(book.generate(r=record, authors=authors).render('xml').decode('utf-8'))

View File

@ -4,9 +4,9 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: calibre 0.6.0b16\n" "Project-Id-Version: calibre 0.6.0\n"
"POT-Creation-Date: 2009-07-22 07:39+MDT\n" "POT-Creation-Date: 2009-07-24 19:49+MDT\n"
"PO-Revision-Date: 2009-07-22 07:39+MDT\n" "PO-Revision-Date: 2009-07-24 19:49+MDT\n"
"Last-Translator: Automatically generated\n" "Last-Translator: Automatically generated\n"
"Language-Team: LANGUAGE\n" "Language-Team: LANGUAGE\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -33,6 +33,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:52 #: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:52
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:317 #: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:317
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:320 #: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:320
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1895
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1897
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:24 #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:24
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:225 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:225
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:256 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:256
@ -63,11 +65,11 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:736 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:736
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:44 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:44
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:46
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:857 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:866
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:862 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:871
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:900 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:909
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:136 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:135
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:138 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:137
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:84 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:84
#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:103 #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:103
#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:104 #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:104
@ -128,8 +130,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1599 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1599
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1621 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1621
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1672 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1672
#: /home/kovid/work/calibre/src/calibre/library/server.py:294 #: /home/kovid/work/calibre/src/calibre/library/server.py:295
#: /home/kovid/work/calibre/src/calibre/library/server.py:355 #: /home/kovid/work/calibre/src/calibre/library/server.py:356
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
@ -204,19 +206,19 @@ msgstr ""
msgid "Conversion Input" msgid "Conversion Input"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:118 #: /home/kovid/work/calibre/src/calibre/customize/conversion.py:122
msgid "Save the output from the input plugin to the specified directory. Useful if you are unsure at which stage of the conversion process a bug is occurring. WARNING: This completely deletes the contents of the specified directory." msgid "Save the output from the input plugin to the specified directory. Useful if you are unsure at which stage of the conversion process a bug is occurring. WARNING: This completely deletes the contents of the specified directory."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:127 #: /home/kovid/work/calibre/src/calibre/customize/conversion.py:131
msgid "Specify the character encoding of the input document. If set this option will override any encoding declared by the document itself. Particularly useful for documents that do not declare an encoding or that have erroneous encoding declarations." msgid "Specify the character encoding of the input document. If set this option will override any encoding declared by the document itself. Particularly useful for documents that do not declare an encoding or that have erroneous encoding declarations."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:243 #: /home/kovid/work/calibre/src/calibre/customize/conversion.py:247
msgid "Conversion Output" msgid "Conversion Output"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:257 #: /home/kovid/work/calibre/src/calibre/customize/conversion.py:261
msgid "If specified, the output plugin will try to create output that is as human readable as possible. May not have any effect for some output plugins." msgid "If specified, the output plugin will try to create output that is as human readable as possible. May not have any effect for some output plugins."
msgstr "" msgstr ""
@ -1009,7 +1011,7 @@ msgstr ""
msgid "Cannot read from: %s" msgid "Cannot read from: %s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1990 #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1996
msgid "Failed to process opf file" msgid "Failed to process opf file"
msgstr "" msgstr ""
@ -1384,8 +1386,8 @@ msgid ""
"Fetch a cover image for the book identified by ISBN from LibraryThing.com\n" "Fetch a cover image for the book identified by ISBN from LibraryThing.com\n"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1053 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1055
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1260 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1269
msgid "Cover" msgid "Cover"
msgstr "" msgstr ""
@ -1414,70 +1416,70 @@ msgstr ""
msgid "All articles" msgid "All articles"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1261 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1270
msgid "Title Page" msgid "Title Page"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1262 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1271
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:48 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:48
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168
msgid "Table of Contents" msgid "Table of Contents"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1263 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1272
msgid "Index" msgid "Index"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1264 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1273
msgid "Glossary" msgid "Glossary"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1265 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1274
msgid "Acknowledgements" msgid "Acknowledgements"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1266 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1275
msgid "Bibliography" msgid "Bibliography"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1267 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1276
msgid "Colophon" msgid "Colophon"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1268 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1277
msgid "Copyright" msgid "Copyright"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1269 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1278
msgid "Dedication" msgid "Dedication"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1270 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
msgid "Epigraph" msgid "Epigraph"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1271 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
msgid "Foreword" msgid "Foreword"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1272 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
msgid "List of Illustrations" msgid "List of Illustrations"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1273 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
msgid "List of Tables" msgid "List of Tables"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1274 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
msgid "Notes" msgid "Notes"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1275 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
msgid "Preface" msgid "Preface"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1276 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
msgid "Main Text" msgid "Main Text"
msgstr "" msgstr ""
@ -1537,11 +1539,11 @@ msgstr ""
msgid "Generate an Adobe \"page-map\" file if pagination information is available." msgid "Generate an Adobe \"page-map\" file if pagination information is available."
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/reader132.py:112 #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/reader132.py:114
msgid "Footnotes" msgid "Footnotes"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/reader132.py:121 #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/reader132.py:123
msgid "Sidebar" msgid "Sidebar"
msgstr "" msgstr ""
@ -3584,8 +3586,7 @@ msgid "Meta information"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:341 msgid "Author s&ort: "
msgid "Author S&ort: "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142
@ -3611,7 +3612,7 @@ msgid " stars"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148
msgid "Add Ta&gs: " msgid "Add ta&gs: "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:150
@ -3718,6 +3719,10 @@ msgstr ""
msgid "Swap the author and title" msgid "Swap the author and title"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:341
msgid "Author S&ort: "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:343 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:343
msgid "Automatically create the author sort entry based on the current author entry" msgid "Automatically create the author sort entry based on the current author entry"
msgstr "" msgstr ""
@ -5953,11 +5958,11 @@ msgstr ""
msgid "Compacting database" msgid "Compacting database"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/server.py:146 #: /home/kovid/work/calibre/src/calibre/library/server.py:147
msgid "Password to access your calibre library. Username is " msgid "Password to access your calibre library. Username is "
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/server.py:429 #: /home/kovid/work/calibre/src/calibre/library/server.py:430
msgid "" msgid ""
"[options]\n" "[options]\n"
"\n" "\n"
@ -6226,12 +6231,14 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_accountancyage.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_accountancyage.py:25
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_adventuregamers.py:13 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_adventuregamers.py:13
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_adventuregamers.py:18 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_adventuregamers.py:18
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_al_jazeera.py:15
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_amspec.py:14 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_amspec.py:14
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ap.py:11 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ap.py:11
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ars_technica.py:13 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ars_technica.py:13
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_atlantic.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_atlantic.py:17
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_azstarnet.py:15
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_barrons.py:18 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_barrons.py:18
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_bbc.py:16 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_bbc.py:15
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_business_week.py:16 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_business_week.py:16
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chicago_breaking_news.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chicago_breaking_news.py:22
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chicago_tribune.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chicago_tribune.py:17
@ -6239,6 +6246,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cincinnati_enquirer.py:10 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cincinnati_enquirer.py:10
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_climate_progress.py:23 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_climate_progress.py:23
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cnn.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cnn.py:15
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_coding_horror.py:17
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_common_dreams.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_common_dreams.py:8
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_corriere_della_sera_en.py:23 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_corriere_della_sera_en.py:23
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_craigslist.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_craigslist.py:15
@ -6276,8 +6284,10 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_krstarica_en.py:23 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_krstarica_en.py:23
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_latimes.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_latimes.py:17
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_linux_magazine.py:16 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_linux_magazine.py:16
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_linuxdevices.py:19
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lrb.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lrb.py:17
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_miami_herald.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_miami_herald.py:19
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_moneynews.py:16
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_moscow_times.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_moscow_times.py:15
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_msdnmag_en.py:23 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_msdnmag_en.py:23
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nasa.py:34 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nasa.py:34
@ -6303,14 +6313,17 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_science_news.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_science_news.py:15
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_sciencedaily.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_sciencedaily.py:15
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_scientific_american.py:16 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_scientific_american.py:16
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_scott_hanselman.py:18
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slate.py:18
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_st_petersburg_times.py:23 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_st_petersburg_times.py:23
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_stackoverflow.py:18
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_starbulletin.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_starbulletin.py:19
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_straitstimes.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_straitstimes.py:22
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_telegraph_uk.py:18 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_telegraph_uk.py:18
@ -6336,7 +6349,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wash_post.py:12 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wash_post.py:12
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wikinews_en.py:23 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wikinews_en.py:23
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_winsupersite.py:10 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_winsupersite.py:10
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wired.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wired.py:14
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wsj.py:16 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wsj.py:16
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_xkcd.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_xkcd.py:15
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zdnet.py:16 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zdnet.py:16
@ -6399,6 +6412,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_estadao.py:62 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_estadao.py:62
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_jb_online.py:47 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_jb_online.py:47
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_o_globo.py:69 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_o_globo.py:69
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_publico.py:20
msgid "Portugese" msgid "Portugese"
msgstr "" msgstr ""
@ -6420,10 +6434,6 @@ msgstr ""
msgid "Skipping filtered article: %s" msgid "Skipping filtered article: %s"
msgstr "" msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_publico.py:20
msgid "Portuguese"
msgstr ""
#: #:
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_usatoday.py:18 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_usatoday.py:18
msgid "Kovid Goyal and Sujata Raman" msgid "Kovid Goyal and Sujata Raman"

View File

@ -10,16 +10,20 @@ from calibre.web.feeds.news import BasicNewsRecipe
class BBC(BasicNewsRecipe): class BBC(BasicNewsRecipe):
title = u'The BBC' title = u'The BBC'
__author__ = 'Kovid Goyal' __author__ = 'Kovid Goyal and Sujata Raman'
description = 'Global news and current affairs from the British Broadcasting Corporation' description = 'Global news and current affairs from the British Broadcasting Corporation'
no_stylesheets = True
language = _('English') language = _('English')
remove_tags = [dict(name='div', attrs={'class':'footer'})] remove_tags = [dict(name='div', attrs={'class':'footer'}),]
extra_css = '.headline {font-size: x-large;} \n .fact { padding-top: 10pt }'
extra_css = '''
body{font-family:Arial,Helvetica,sans-serif; font-size:small;}
h1{font-size:large;}
'''
feeds = [ feeds = [
('News Front Page', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/front_page/rss.xml'), ('News Front Page', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/front_page/rss.xml'),
('Science/Nature', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/science/nature/rss.xml'), ('Science/Nature', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/science/nature/rss.xml'),
('Technology', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/technology/rss.xml'), ('Technology', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/technology/rss.xml'),
('Enterntainment', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/entertainment/rss.xml'), ('Enterntainment', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/entertainment/rss.xml'),
@ -34,5 +38,8 @@ class BBC(BasicNewsRecipe):
('Africa', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/africa/rss.xml'), ('Africa', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/africa/rss.xml'),
] ]
def print_version(self, url): def print_version(self, url):
return url.replace('http://', 'http://newsvote.bbc.co.uk/mpapps/pagetools/print/') return url.replace('http://', 'http://newsvote.bbc.co.uk/mpapps/pagetools/print/')

View File

@ -44,7 +44,7 @@ except:
def newer(targets, sources): def newer(targets, sources):
''' '''
Return True is sources is newer that targets or if targets Return True if sources is newer that targets or if targets
does not exist. does not exist.
''' '''
for f in targets: for f in targets:
@ -459,7 +459,7 @@ class upload_demo(OptionlessCommand):
def run(self): def run(self):
check_call( check_call(
'''ebook-convert %s/demo.html /tmp/html2lrf.lrf ''' '''ebook-convert %s/demo.html /tmp/html2lrf.lrf '''
'''--title='Demonstration of html2lrf' --author='Kovid Goyal' ''' '''--title='Demonstration of html2lrf' --authors='Kovid Goyal' '''
'''--header ''' '''--header '''
'''--serif-family "/usr/share/fonts/corefonts, Times New Roman" ''' '''--serif-family "/usr/share/fonts/corefonts, Times New Roman" '''
'''--mono-family "/usr/share/fonts/corefonts, Andale Mono" ''' '''--mono-family "/usr/share/fonts/corefonts, Andale Mono" '''
@ -471,15 +471,6 @@ class upload_demo(OptionlessCommand):
check_call('scp /tmp/html-demo.zip divok:%s/'%(DOWNLOADS,), shell=True) check_call('scp /tmp/html-demo.zip divok:%s/'%(DOWNLOADS,), shell=True)
check_call(
("ebook-convert %s/demo.txt /tmp/txt2lrf.lrf -t 'Demonstration of txt2lrf'"
"-a 'Kovid Goyal' --header ")%(TXT2LRF,), shell=True)
check_call('cd src/calibre/ebooks/lrf/txt/demo/ && '
'zip -j /tmp/txt-demo.zip * /tmp/txt2lrf.lrf', shell=True)
check_call('''scp /tmp/txt-demo.zip divok:%s/'''%(DOWNLOADS,), shell=True)
def installer_name(ext): def installer_name(ext):
if ext in ('exe', 'dmg'): if ext in ('exe', 'dmg'):
@ -762,6 +753,7 @@ try:
class ChangelogFormatter(blog.LogFormatter): class ChangelogFormatter(blog.LogFormatter):
supports_tags = True supports_tags = True
supports_merge_revisions = False supports_merge_revisions = False
_show_advice = False
def __init__(self, num_of_versions=20): def __init__(self, num_of_versions=20):
from calibre.utils.rss_gen import RSS2 from calibre.utils.rss_gen import RSS2
@ -786,7 +778,10 @@ try:
mkup = '<div><ul>%s</ul></div>' mkup = '<div><ul>%s</ul></div>'
self.current_entry.description = mkup%(''.join( self.current_entry.description = mkup%(''.join(
self.current_entry.description)) self.current_entry.description))
if match.group(1) == '0.5.14':
self.current_entry.description = \
'''<div>See <a href="http://calibre.kovidgoyal.net/new_in_6">New in
6</a></div>'''
self.rss.items.append(self.current_entry) self.rss.items.append(self.current_entry)
timestamp = r.rev.timezone + r.rev.timestamp timestamp = r.rev.timezone + r.rev.timestamp
self.current_entry = RSSItem( self.current_entry = RSSItem(