mirror of
https://github.com/kovidgoyal/calibre.git
synced 2026-06-04 13:05:31 -04:00
Merge from trunk
This commit is contained in:
+100
@@ -19,6 +19,106 @@
|
||||
# new recipes:
|
||||
# - title:
|
||||
|
||||
- version: 0.7.45
|
||||
date: 2011-02-11
|
||||
|
||||
new features:
|
||||
- title: "Add plugin to download series information from the Kent District Library"
|
||||
|
||||
- title: "Kindle driver: When uploading MOBI files to the device, upload page number information as well (used by the not yet released Kindle 3.1 firmware)"
|
||||
|
||||
- title: "When automatically sending news to device, send to main memory preferentially, if it has enough space."
|
||||
tickets: [8877]
|
||||
|
||||
- title: "Allow customization of which metadata fields are searched by default (click the preferences icon next to the search box)"
|
||||
|
||||
- title: "New format TXTZ: which is a zip file containing the TXT file and associated images + metadata. calibre can convert to and from this format and read/write metadata to it."
|
||||
|
||||
- title: "New option to control how automerge handles duplicate formats when adding books to your calibre library. See Preferences->Adding books"
|
||||
|
||||
- title: "Driver for Nokia X6, Nexus S, WiBook, MyTouch 4G and Huawei Ideos S7"
|
||||
|
||||
- title: "Nicer interface for editing tweaks"
|
||||
|
||||
- title: "Add tweak to remove yellow lines from edges of book list"
|
||||
|
||||
- title: "Completion: Restore adding of comma at end after completion for tags type fields. Add a tweak to control if an & is added after completion for author type fields"
|
||||
|
||||
- title: "Turn search as you type off by default for searching the book list. You can turn it on by clicking the preferences button next to the search bar."
|
||||
|
||||
- title: "TXT Input: Add option to remove indents and fix bug where spaces were not retained properly."
|
||||
|
||||
bug fixes:
|
||||
- title: "Fix a regression in 0.7.44 that could cause setting authors to fail in windows when the author name is very long"
|
||||
tickets: [8797]
|
||||
|
||||
- title: "E-book viewer: Fix bug that could cause the bottom of chapters to get cut-off if the topmost element had a large top margin."
|
||||
tickets: [8791]
|
||||
|
||||
- title: "Fix regression that caused a spurious error message after moving a library. Also ensure that the entries in the Copy to Library menu are updated after a library is moved/renamed/deleted."
|
||||
tickets: [8905]
|
||||
|
||||
- title: "PML Input: New handling of t and T tags. T's that do not start the line are ignored. t's that start and end the line use a margin for the text block"
|
||||
|
||||
- title: "News download: Remove all invalid ASCII control characters from article descriptions as they cause XML parsing to fail"
|
||||
|
||||
- title: "MOBI Output: Fix bug that was discarding non breaking spaces at the start of a paragraph when they were followed immediately by a tag."
|
||||
tickets: [4887]
|
||||
|
||||
- title: "LIT Input: Fix a regression in handling LIT files that contain txt rather than html data"
|
||||
tickets: [8904]
|
||||
|
||||
- title: "Fix bug in search box in the plugins dialog"
|
||||
tickets: [8882]
|
||||
|
||||
- title: "Fix renaming of categories via the Tag Browser"
|
||||
tickets: [8807]
|
||||
|
||||
- title: "Content server: Do not send mobile version to iPad"
|
||||
tickets: [8820]
|
||||
|
||||
- title: "Fix undefined publication date appearing in book jacket as 101"
|
||||
tickets: [8799]
|
||||
|
||||
- title: "Heuristics: Fix issue with invalid markup from italicize patterns."
|
||||
|
||||
- title: "TXT Input: De-hyphenate textile and markdown inpu as well. Fix inline toc not showing all items."
|
||||
|
||||
- title: "RTF Input: More encoding token splitting fixes."
|
||||
|
||||
- title: "Fix regression that broke the convenience Email to xxx entry in the connect share menu."
|
||||
tickets: [8775]
|
||||
|
||||
- title: "Fix editing of series type custom columns in the book list."
|
||||
tickets: [8765]
|
||||
|
||||
improved recipes:
|
||||
- El periodico de Aragon
|
||||
- B92
|
||||
- French Belgian news sources
|
||||
|
||||
new recipes:
|
||||
- title: "ABC.es"
|
||||
author: "Ricardo Jurado"
|
||||
|
||||
- title: "Korespondent and Kopalnia Wiedzy"
|
||||
author: "Attis"
|
||||
|
||||
- title: "Radio Prague"
|
||||
author: "Francois Pellicaan"
|
||||
|
||||
- title: "Europa Press"
|
||||
author: "Luis Hernandez"
|
||||
|
||||
- title: "Interoperability Happens and njuz.net"
|
||||
author: "Darko Miletic"
|
||||
|
||||
- title: "Weblogs SL"
|
||||
author: "desUBIKado"
|
||||
|
||||
- title: "Kompas and Jakarta Post"
|
||||
author: "Adrian Gunawan"
|
||||
|
||||
- version: 0.7.44
|
||||
date: 2011-02-04
|
||||
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
__license__ = 'GPL v3'
|
||||
__author__ = 'Ricardo Jurado'
|
||||
__copyright__ = 'Ricardo Jurado'
|
||||
__version__ = 'v0.4'
|
||||
__date__ = '11 February 2011'
|
||||
|
||||
'''
|
||||
http://www.abc.es/
|
||||
'''
|
||||
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class AdvancedUserRecipe1296604369(BasicNewsRecipe):
|
||||
|
||||
title = u'ABC.es'
|
||||
masthead_url = 'http://www.abc.es/img/logo-abc.gif'
|
||||
cover_url = 'http://www.abc.es/img/logo-abc.gif'
|
||||
publisher = u'Grupo VOCENTO'
|
||||
|
||||
__author__ = 'Ricardo Jurado'
|
||||
description = 'Noticias de Spain y el mundo'
|
||||
category = 'News,Spain,National,International,Economy'
|
||||
oldest_article = 2
|
||||
max_articles_per_feed = 10
|
||||
|
||||
no_stylesheets = True
|
||||
use_embedded_content = False
|
||||
encoding = 'ISO-8859-1'
|
||||
remove_javascript = True
|
||||
language = 'es'
|
||||
|
||||
extra_css = """
|
||||
p{text-align: justify; font-size: 100%}
|
||||
body{ text-align: left; font-size:100% }
|
||||
h3{font-family: sans-serif; font-size:120%; font-weight:bold; text-align: justify; }
|
||||
h2{font-family: sans-serif; font-size:100%; font-weight:bold; text-align: justify; }
|
||||
h1{font-family: sans-serif; font-size:150%; font-weight:bold; text-align: justify; }
|
||||
"""
|
||||
|
||||
keep_only_tags = [
|
||||
# dict(name='h2', attrs={'class':['logos']}),
|
||||
dict(name='h3', attrs={'class':['overhead']}),
|
||||
dict(name='h1', attrs={'class':'headline'}),
|
||||
dict(name='h3', attrs={'class':['subhead']}),
|
||||
dict(name='div', attrs={'class':'datosi'}),
|
||||
dict(name='div', attrs={'class':'photo-alt1'}),
|
||||
dict(name='div', attrs={'class':'text'})
|
||||
]
|
||||
|
||||
# remove_tags_before = dict(name='div' , attrs={'id':['cabecera2']})
|
||||
|
||||
feeds = [
|
||||
(u'PORTADA', u'http://www.abc.es/rss/feeds/abcPortada.xml')
|
||||
,(u'ULTIMAS', u'http://www.abc.es/rss/feeds/abc_ultima.xml')
|
||||
,(u'NACIONAL', u'http://www.abc.es/rss/feeds/abc_EspanaEspana.xml')
|
||||
,(u'INTERNACIONAL', u'http://www.abc.es/rss/feeds/abc_Internacional.xml')
|
||||
,(u'OPINION', u'http://www.abc.es/rss/feeds/abc_opinioncompleto.xml')
|
||||
,(u'BLOGS ABC', u'http://www.abc.es/rss/feeds/blogs-abc.xml')
|
||||
,(u'ECONOMIA', u'http://www.abc.es/rss/feeds/abc_Economia.xml')
|
||||
,(u'CIENCIA Y TECNOLOGIA', u'http://www.abc.es/rss/feeds/abc_Ciencia_Tecnologia.xml')
|
||||
,(u'CULTURA', u'http://www.abc.es/rss/feeds/abc_Cultura.xml')
|
||||
,(u'LIBROS', u'http://www.abc.es/rss/feeds/abc_Libros.xml')
|
||||
,(u'MEDIOS Y REDES', u'http://www.abc.es/rss/feeds/ABC_Medios_Redes.xml')
|
||||
,(u'EVASION', u'http://www.abc.es/rss/feeds/abc_evasion.xml')
|
||||
,(u'ESPECTACULOS', u'http://www.abc.es/rss/feeds/abc_Espectaculos.xml')
|
||||
,(u'GENTE', u'http://www.abc.es/rss/feeds/abc_Gente.xml')
|
||||
,(u'DEPORTES', u'http://www.abc.es/rss/feeds/abc_Deportes.xml')
|
||||
]
|
||||
@@ -182,6 +182,10 @@ class NYTimes(BasicNewsRecipe):
|
||||
'mediaOverlay slideshow',
|
||||
'headlinesOnly multiline flush',
|
||||
'wideThumb',
|
||||
'video', #added 02-11-2011
|
||||
'videoHeader',#added 02-11-2011
|
||||
'articleInlineVideoHolder', #added 02-11-2011
|
||||
'assetCompanionAd',
|
||||
re.compile('^subNavigation'),
|
||||
re.compile('^leaderboard'),
|
||||
re.compile('^module'),
|
||||
@@ -664,7 +668,7 @@ class NYTimes(BasicNewsRecipe):
|
||||
|
||||
try:
|
||||
#remove "Related content" bar
|
||||
runAroundsFound = soup.findAll('div',{'class':['articleInline runaroundLeft','articleInline doubleRule runaroundLeft','articleInline runaroundLeft firstArticleInline']})
|
||||
runAroundsFound = soup.findAll('div',{'class':['articleInline runaroundLeft','articleInline doubleRule runaroundLeft','articleInline runaroundLeft firstArticleInline','articleInline runaroundLeft ']})
|
||||
if runAroundsFound:
|
||||
for runAround in runAroundsFound:
|
||||
#find all section headers
|
||||
@@ -672,6 +676,12 @@ class NYTimes(BasicNewsRecipe):
|
||||
if hlines:
|
||||
for hline in hlines:
|
||||
hline.extract()
|
||||
|
||||
#find all section headers
|
||||
hlines = runAround.findAll('h6')
|
||||
if hlines:
|
||||
for hline in hlines:
|
||||
hline.extract()
|
||||
except:
|
||||
self.log("Error removing related content bar")
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ __license__ = 'GPL v3'
|
||||
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
__appname__ = 'calibre'
|
||||
__version__ = '0.7.44'
|
||||
__version__ = '0.7.45'
|
||||
__author__ = "Kovid Goyal <kovid@kovidgoyal.net>"
|
||||
|
||||
import re
|
||||
|
||||
@@ -507,7 +507,7 @@ from calibre.devices.kobo.driver import KOBO
|
||||
from calibre.devices.bambook.driver import BAMBOOK
|
||||
|
||||
from calibre.ebooks.metadata.fetch import GoogleBooks, ISBNDB, Amazon, \
|
||||
LibraryThing
|
||||
KentDistrictLibrary
|
||||
from calibre.ebooks.metadata.douban import DoubanBooks
|
||||
from calibre.ebooks.metadata.nicebooks import NiceBooks, NiceBooksCovers
|
||||
from calibre.ebooks.metadata.covers import OpenLibraryCovers, \
|
||||
@@ -517,7 +517,7 @@ from calibre.ebooks.epub.fix.unmanifested import Unmanifested
|
||||
from calibre.ebooks.epub.fix.epubcheck import Epubcheck
|
||||
|
||||
plugins = [HTML2ZIP, PML2PMLZ, ArchiveExtract, GoogleBooks, ISBNDB, Amazon,
|
||||
LibraryThing, DoubanBooks, NiceBooks, CSV_XML, EPUB_MOBI, BIBTEX, Unmanifested,
|
||||
KentDistrictLibrary, DoubanBooks, NiceBooks, CSV_XML, EPUB_MOBI, BIBTEX, Unmanifested,
|
||||
Epubcheck, OpenLibraryCovers, LibraryThingCovers, DoubanCovers,
|
||||
NiceBooksCovers]
|
||||
plugins += [
|
||||
|
||||
@@ -76,11 +76,11 @@ class E52(USBMS):
|
||||
supported_platforms = ['windows', 'linux', 'osx']
|
||||
|
||||
VENDOR_ID = [0x421]
|
||||
PRODUCT_ID = [0x1CD]
|
||||
PRODUCT_ID = [0x1CD, 0x273]
|
||||
BCD = [0x100]
|
||||
|
||||
|
||||
FORMATS = ['mobi', 'prc']
|
||||
FORMATS = ['epub', 'fb2', 'mobi', 'prc', 'txt']
|
||||
|
||||
EBOOK_DIR_MAIN = 'eBooks'
|
||||
SUPPORTS_SUB_DIRS = True
|
||||
|
||||
@@ -247,30 +247,24 @@ class Amazon(MetadataSource): # {{{
|
||||
|
||||
# }}}
|
||||
|
||||
class LibraryThing(MetadataSource): # {{{
|
||||
class KentDistrictLibrary(MetadataSource): # {{{
|
||||
|
||||
name = 'LibraryThing'
|
||||
name = 'Kent District Library'
|
||||
metadata_type = 'social'
|
||||
description = _('Downloads series/covers/rating information from librarything.com')
|
||||
description = _('Downloads series information from ww2.kdl.org')
|
||||
|
||||
def fetch(self):
|
||||
if not self.isbn or not self.site_customization:
|
||||
if not self.title or not self.book_author:
|
||||
return
|
||||
from calibre.ebooks.metadata.library_thing import get_social_metadata
|
||||
un, _, pw = self.site_customization.partition(':')
|
||||
from calibre.ebooks.metadata.kdl import get_series
|
||||
try:
|
||||
self.results = get_social_metadata(self.title, self.book_author,
|
||||
self.publisher, self.isbn, username=un, password=pw)
|
||||
self.results = get_series(self.title, self.book_author)
|
||||
except Exception, e:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
self.exception = e
|
||||
self.tb = traceback.format_exc()
|
||||
|
||||
@property
|
||||
def string_customization_help(self):
|
||||
ans = _('To use librarything.com you must sign up for a %sfree account%s '
|
||||
'and enter your username and password separated by a : below.')
|
||||
return '<p>'+ans%('<a href="http://www.librarything.com">', '</a>')
|
||||
|
||||
# }}}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env python
|
||||
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2011, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
import re, urllib, urlparse
|
||||
|
||||
from calibre.ebooks.metadata.book.base import Metadata
|
||||
from calibre import browser
|
||||
from calibre.ebooks.BeautifulSoup import BeautifulSoup
|
||||
from calibre.ebooks.chardet import xml_to_unicode
|
||||
|
||||
URL = \
|
||||
"http://ww2.kdl.org/libcat/WhatsNext.asp?AuthorLastName={0}&AuthorFirstName=&SeriesName=&BookTitle={1}&CategoryID=0&cmdSearch=Search&Search=1&grouping="
|
||||
|
||||
_ignore_starts = u'\'"'+u''.join(unichr(x) for x in range(0x2018, 0x201e)+[0x2032, 0x2033])
|
||||
|
||||
def get_series(title, authors):
|
||||
mi = Metadata(title, authors)
|
||||
if title and title[0] in _ignore_starts:
|
||||
title = title[1:]
|
||||
title = re.sub(r'^(A|The|An)\s+', '', title).strip()
|
||||
if not title:
|
||||
return mi
|
||||
if isinstance(title, unicode):
|
||||
title = title.encode('utf-8')
|
||||
|
||||
title = urllib.quote_plus(title)
|
||||
|
||||
author = authors[0].strip()
|
||||
if not author:
|
||||
return mi
|
||||
if ',' in author:
|
||||
author = author.split(',')[0]
|
||||
else:
|
||||
author = author.split()[-1]
|
||||
|
||||
url = URL.format(author, title)
|
||||
br = browser()
|
||||
raw = br.open(url).read()
|
||||
if 'see the full results' not in raw:
|
||||
return mi
|
||||
raw = xml_to_unicode(raw)[0]
|
||||
soup = BeautifulSoup(raw)
|
||||
searcharea = soup.find('div', attrs={'class':'searcharea'})
|
||||
if searcharea is None:
|
||||
return mi
|
||||
ss = searcharea.find('div', attrs={'class':'seriessearch'})
|
||||
if ss is None:
|
||||
return mi
|
||||
a = ss.find('a', href=True)
|
||||
if a is None:
|
||||
return mi
|
||||
href = a['href'].partition('?')[-1]
|
||||
data = urlparse.parse_qs(href)
|
||||
series = data.get('SeriesName', [])
|
||||
if not series:
|
||||
return mi
|
||||
series = series[0]
|
||||
series = re.sub(r' series$', '', series).strip()
|
||||
if series:
|
||||
mi.series = series
|
||||
ns = ss.nextSibling
|
||||
if ns.contents:
|
||||
raw = unicode(ns.contents[0])
|
||||
raw = raw.partition('.')[0].strip()
|
||||
try:
|
||||
mi.series_index = int(raw)
|
||||
except:
|
||||
pass
|
||||
return mi
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
print get_series(sys.argv[-2], [sys.argv[-1]])
|
||||
|
||||
@@ -56,7 +56,7 @@ def add_options(parser):
|
||||
group = OptionGroup(parser, _('Merge Options:'), _('Options to control the transformation of pdf'))
|
||||
parser.add_option_group(group)
|
||||
add_option = group.add_option
|
||||
|
||||
|
||||
for rec in OPTIONS:
|
||||
option_recommendation_to_cli_option(add_option, rec)
|
||||
|
||||
@@ -82,15 +82,15 @@ def main(args=sys.argv, name=''):
|
||||
log = Log()
|
||||
parser = option_parser(name)
|
||||
add_options(parser)
|
||||
|
||||
|
||||
opts, args = parser.parse_args(args)
|
||||
args = args[1:]
|
||||
|
||||
|
||||
if len(args) < 2:
|
||||
print 'Error: Two or more PDF files are required.\n'
|
||||
print_help(parser, log)
|
||||
return 1
|
||||
|
||||
|
||||
bad_pdfs = is_valid_pdfs(args)
|
||||
if bad_pdfs != []:
|
||||
for pdf in bad_pdfs:
|
||||
@@ -104,7 +104,7 @@ def main(args=sys.argv, name=''):
|
||||
print 'Error: file `%s` is encrypted.' % pdf
|
||||
if enc:
|
||||
return 1
|
||||
|
||||
|
||||
mi = metadata_from_formats([args[0]])
|
||||
|
||||
merge_files(args, opts.output, mi)
|
||||
|
||||
@@ -60,10 +60,8 @@ class Tweak(object): # {{{
|
||||
return ans
|
||||
|
||||
def __cmp__(self, other):
|
||||
if self.is_customized != getattr(other, 'is_customized', False):
|
||||
return -1 * cmp(self.is_customized,
|
||||
return -1 * cmp(self.is_customized,
|
||||
getattr(other, 'is_customized', False))
|
||||
return cmp(icu_lower(self.name), icu_lower(getattr(other, 'name', '')))
|
||||
|
||||
@property
|
||||
def is_customized(self):
|
||||
|
||||
@@ -7,7 +7,6 @@ __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
import os, traceback, cStringIO, re, shutil
|
||||
from functools import partial
|
||||
|
||||
from calibre.constants import DEBUG
|
||||
from calibre.utils.config import Config, StringConfig, tweaks
|
||||
|
||||
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1276
-1039
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1275
-1035
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1596
-1118
File diff suppressed because it is too large
Load Diff
@@ -4,9 +4,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: calibre 0.7.44\n"
|
||||
"POT-Creation-Date: 2011-02-10 13:08+MST\n"
|
||||
"PO-Revision-Date: 2011-02-10 13:08+MST\n"
|
||||
"Project-Id-Version: calibre 0.7.45\n"
|
||||
"POT-Creation-Date: 2011-02-11 11:38+MST\n"
|
||||
"PO-Revision-Date: 2011-02-11 11:38+MST\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: LANGUAGE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -53,7 +53,7 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:36
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:61
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fb2.py:54
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:365
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:359
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:36
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66
|
||||
@@ -2351,7 +2351,6 @@ msgid "LibraryThing.com server error. Try again later."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/covers.py:177
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:270
|
||||
msgid "To use librarything.com you must sign up for a %sfree account%s and enter your username and password separated by a : below."
|
||||
msgstr ""
|
||||
|
||||
@@ -2408,7 +2407,7 @@ msgid "Downloads social metadata from amazon.com"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:254
|
||||
msgid "Downloads series/covers/rating information from librarything.com"
|
||||
msgid "Downloads series information from ww2.kdl.org"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fictionwise.py:25
|
||||
@@ -3567,8 +3566,8 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:905
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:101
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download.py:186
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:268
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:308
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:273
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:313
|
||||
msgid "Failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -10568,28 +10567,28 @@ msgstr ""
|
||||
msgid "Remove selected actions from toolbar"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:112
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:113
|
||||
msgid "This tweak has it default value"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:114
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:115
|
||||
msgid "This tweak has been customized"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:231
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:236
|
||||
msgid "Add/edit tweaks for any custom plugins you have installed. Documentation for these tweaks should be available on the website from where you downloaded the plugins."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:269
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:309
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:274
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:314
|
||||
msgid "There was a syntax error in your tweak. Click the show details button for details."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:322
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:327
|
||||
msgid "Invalid tweaks"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:323
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:328
|
||||
msgid "The tweaks you entered are invalid, try resetting the tweaks to default and changing them one by one until you find the invalid setting."
|
||||
msgstr ""
|
||||
|
||||
@@ -11773,7 +11772,7 @@ msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/caches.py:548
|
||||
#: /home/kovid/work/calibre/src/calibre/library/caches.py:558
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:185
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:192
|
||||
msgid "no"
|
||||
msgstr ""
|
||||
|
||||
@@ -11784,7 +11783,7 @@ msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/caches.py:551
|
||||
#: /home/kovid/work/calibre/src/calibre/library/caches.py:561
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:185
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:192
|
||||
msgid "yes"
|
||||
msgstr ""
|
||||
|
||||
@@ -12576,101 +12575,101 @@ msgstr ""
|
||||
msgid "creating custom column "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:33
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:32
|
||||
msgid "The title"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:33
|
||||
msgid "The authors"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34
|
||||
msgid "The author sort string. To use only the first letter of the name use {author_sort[0]}"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:37
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:36
|
||||
msgid "The tags"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:37
|
||||
msgid "The series"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38
|
||||
msgid "The series number. To get leading zeros use {series_index:0>3s} or {series_index:>3s} for leading spaces"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:42
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:41
|
||||
msgid "The rating"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:42
|
||||
msgid "The ISBN"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43
|
||||
msgid "The publisher"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44
|
||||
msgid "The date"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45
|
||||
msgid "The published date"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46
|
||||
msgid "The calibre internal id"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:57
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:56
|
||||
msgid "Options to control saving to disk"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:63
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:62
|
||||
msgid "Normally, calibre will update the metadata in the saved files from what is in the calibre library. Makes saving to disk slower."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:66
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:65
|
||||
msgid "Normally, calibre will write the metadata into a separate OPF file along with the actual e-book files."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:69
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:68
|
||||
msgid "Normally, calibre will save the cover in a separate file along with the actual e-book file(s)."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:72
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:71
|
||||
msgid "Comma separated list of formats to save for each book. By default all available formats are saved."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:75
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:74
|
||||
msgid "The template to control the filename and directory structure of the saved files. Default is \"%s\" which will save books into a per-author subdirectory with filenames containing title and author. Available controls are: {%s}"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:80
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:79
|
||||
msgid "The template to control the filename and directory structure of files sent to the device. Default is \"%s\" which will save books into a per-author directory with filenames containing title and author. Available controls are: {%s}"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:87
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:86
|
||||
msgid "Normally, calibre will convert all non English characters into English equivalents for the file names. WARNING: If you turn this off, you may experience errors when saving, depending on how well the filesystem you are saving to supports unicode."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:93
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:96
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:92
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:95
|
||||
msgid "The format in which to display dates. %d - day, %b - month, %Y - year. Default is: %b, %Y"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:99
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:98
|
||||
msgid "Convert paths to lowercase."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:101
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:100
|
||||
msgid "Replace whitespace with underscores."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:354
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:378
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:361
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:385
|
||||
msgid "Requested formats not available"
|
||||
msgstr ""
|
||||
|
||||
@@ -13366,16 +13365,16 @@ msgstr ""
|
||||
msgid "Control email delivery"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:118
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:119
|
||||
msgid "Unknown section"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:140
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:141
|
||||
msgid "Unknown feed"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:158
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:185
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:159
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:186
|
||||
msgid "Untitled article"
|
||||
msgstr ""
|
||||
|
||||
|
||||
+1367
-1069
File diff suppressed because it is too large
Load Diff
+1396
-1080
File diff suppressed because it is too large
Load Diff
+1403
-1087
File diff suppressed because it is too large
Load Diff
+1280
-1043
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1460
-1133
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1484
-1108
File diff suppressed because it is too large
Load Diff
+1413
-1088
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1592
-1104
File diff suppressed because it is too large
Load Diff
+1574
-1110
File diff suppressed because it is too large
Load Diff
+1278
-1038
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1321
-1058
File diff suppressed because it is too large
Load Diff
+1378
-1072
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1412
-1089
File diff suppressed because it is too large
Load Diff
+1282
-1039
File diff suppressed because it is too large
Load Diff
+1364
-1065
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1275
-1035
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1412
-1085
File diff suppressed because it is too large
Load Diff
+1322
-1059
File diff suppressed because it is too large
Load Diff
+1397
-1084
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1344
-1081
File diff suppressed because it is too large
Load Diff
+1330
-1060
File diff suppressed because it is too large
Load Diff
+1357
-1071
File diff suppressed because it is too large
Load Diff
+1339
-1078
File diff suppressed because it is too large
Load Diff
+1326
-1058
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1275
-1038
File diff suppressed because it is too large
Load Diff
+1346
-1100
File diff suppressed because it is too large
Load Diff
+1276
-1039
File diff suppressed because it is too large
Load Diff
+1403
-1084
File diff suppressed because it is too large
Load Diff
+1409
-1082
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1284
-1037
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1279
-1036
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1359
-1061
File diff suppressed because it is too large
Load Diff
+1276
-1036
File diff suppressed because it is too large
Load Diff
+1380
-1066
File diff suppressed because it is too large
Load Diff
@@ -12,6 +12,8 @@ def clean_ascii_chars(txt, charlist=None):
|
||||
Remove ASCII control chars: 0 to 8 and 11, 12, 14-31 by default
|
||||
This is all control chars except \\t,\\n and \\r
|
||||
'''
|
||||
if not txt:
|
||||
return ''
|
||||
global _ascii_pat
|
||||
if _ascii_pat is None:
|
||||
chars = list(range(8)) + [0x0B, 0x0C] + list(range(0x0E, 0x1F))
|
||||
|
||||
Reference in New Issue
Block a user