mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Merge from trunk
This commit is contained in:
commit
e66c42d05f
100
Changelog.yaml
100
Changelog.yaml
@ -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
|
||||
|
||||
|
68
resources/recipes/abc_es.recipe
Normal file
68
resources/recipes/abc_es.recipe
Normal file
@ -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>')
|
||||
|
||||
# }}}
|
||||
|
||||
|
||||
|
79
src/calibre/ebooks/metadata/kdl.py
Normal file
79
src/calibre/ebooks/metadata/kdl.py
Normal file
@ -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]])
|
||||
|
@ -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
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
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 ""
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
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))
|
||||
|
Loading…
x
Reference in New Issue
Block a user