mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-08-11 09:13:57 -04:00
Merge
This commit is contained in:
commit
29c85bb4f5
@ -1,26 +1,27 @@
|
||||
# adapted from old recipe by Darko Miletic <darko.miletic at gmail.com>
|
||||
|
||||
import re
|
||||
import string, re
|
||||
from calibre import strftime
|
||||
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||
from calibre.ebooks.BeautifulSoup import Tag, NavigableString
|
||||
from calibre.ebooks.BeautifulSoup import BeautifulSoup, Tag, NavigableString
|
||||
|
||||
|
||||
class TheIndependentNew(BasicNewsRecipe):
|
||||
|
||||
|
||||
# flag to enable/disable article graphics on business pages/some others
|
||||
# eg http://www.independent.co.uk/news/world/europe/berlusconi-departure-fails-to-calm-the-markets-6259682.html
|
||||
# -max dimensions can be altered using the .pictureContainer img selector in the css
|
||||
_FETCH_ARTICLE_GRAPHICS = True
|
||||
|
||||
|
||||
#Flag to enable/disable image fetching (not business)
|
||||
_FETCH_IMAGES = True
|
||||
|
||||
|
||||
|
||||
|
||||
#used for converting rating to stars
|
||||
_STAR_URL = 'http://www.independent.co.uk/skins/ind/images/rating_star.png'
|
||||
_NO_STAR_URL = 'http://www.independent.co.uk/skins/ind/images/rating_star_grey.png'
|
||||
|
||||
|
||||
|
||||
|
||||
title = u'The Independent'
|
||||
__author__ = 'Will'
|
||||
description = 'The latest in UK News and World News from The \
|
||||
@ -41,26 +42,26 @@ class TheIndependentNew(BasicNewsRecipe):
|
||||
dict(attrs={'id' : ['RelatedArtTag','renderBiography']}),
|
||||
dict(attrs={'class' : ['autoplay','openBiogPopup']})
|
||||
]
|
||||
|
||||
|
||||
keep_only_tags =[dict(attrs={'id':'main'})]
|
||||
recursions = 0
|
||||
|
||||
|
||||
# fixes non compliant html nesting and 'marks' article graphics links
|
||||
preprocess_regexps = [
|
||||
(re.compile('<span class="storyTop ">(?P<nested>.*?)</span>', re.DOTALL),
|
||||
lambda match: '<div class="storyTop">' + match.group('nested') + '</div>'),
|
||||
(re.compile('<strong>.*?Click.*?to view graphic.*?</strong>', re.DOTALL),
|
||||
(re.compile('(<strong>.*?[Cc]lick.*?<a.*?((HERE)|([Hh]ere)).*?</strong>)', re.DOTALL),
|
||||
lambda match: '<div class="article-graphic">' + match.group(0) + '</div>'),
|
||||
]
|
||||
|
||||
|
||||
]
|
||||
|
||||
|
||||
conversion_options = {
|
||||
'comment' : description
|
||||
, 'tags' : category
|
||||
, 'publisher' : publisher
|
||||
, 'language' : language
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extra_css = """
|
||||
h1{font-family: Georgia,serif }
|
||||
body{font-family: Verdana,Arial,Helvetica,sans-serif}
|
||||
@ -80,22 +81,22 @@ class TheIndependentNew(BasicNewsRecipe):
|
||||
.articleContent {display: block; clear:left;}
|
||||
.storyTop{}
|
||||
.pictureContainer img { max-width: 400px; max-height: 400px;}
|
||||
"""
|
||||
|
||||
"""
|
||||
|
||||
oldest_article = 1
|
||||
max_articles_per_feed = 100
|
||||
|
||||
|
||||
_processed_urls = []
|
||||
|
||||
|
||||
|
||||
|
||||
def get_article_url(self, article):
|
||||
url = super(self.__class__,self).get_article_url(article)
|
||||
|
||||
|
||||
title = article.get('title', None)
|
||||
if title and re.search("^Video:",title):
|
||||
return None
|
||||
|
||||
#remove duplicates
|
||||
|
||||
#remove duplicates
|
||||
if not (url in self._processed_urls):
|
||||
self._processed_urls.append(url)
|
||||
else:
|
||||
@ -103,132 +104,147 @@ class TheIndependentNew(BasicNewsRecipe):
|
||||
return url
|
||||
|
||||
def preprocess_html(self, soup):
|
||||
|
||||
|
||||
#remove 'advertorial articles'
|
||||
strapline = soup.find('div',attrs={'class' : re.compile('.*strapLine.*')})
|
||||
if strapline:
|
||||
for para in strapline.findAll('p'):
|
||||
if len(para.contents) and isinstance(para.contents[0],NavigableString) \
|
||||
and para.contents[0] == 'ADVERTORIAL FEATURE':
|
||||
return None
|
||||
|
||||
items_to_extract = []
|
||||
|
||||
|
||||
for item in soup.findAll(attrs={'class' : re.compile("widget.*")}):
|
||||
remove = True
|
||||
pattern = re.compile('((articleContent)|(title))$')
|
||||
if (pattern.search(item['class'])) is not None:
|
||||
remove = False
|
||||
|
||||
|
||||
# corrections
|
||||
# story content always good
|
||||
pattern = re.compile('storyContent')
|
||||
pattern = re.compile('storyContent')
|
||||
if (pattern.search(item['class'])) is not None:
|
||||
remove = False
|
||||
|
||||
|
||||
#images
|
||||
pattern = re.compile('slideshow')
|
||||
pattern = re.compile('slideshow')
|
||||
if (pattern.search(item['class'])) is not None:
|
||||
if self._FETCH_IMAGES:
|
||||
remove = False
|
||||
else:
|
||||
remove = True
|
||||
|
||||
|
||||
#social widgets always bad
|
||||
pattern = re.compile('socialwidget')
|
||||
pattern = re.compile('socialwidget')
|
||||
if (pattern.search(item['class'])) is not None:
|
||||
remove = True
|
||||
|
||||
|
||||
if remove:
|
||||
items_to_extract.append(item)
|
||||
|
||||
|
||||
for item in items_to_extract:
|
||||
item.extract()
|
||||
|
||||
items_to_extract = []
|
||||
|
||||
if self._FETCH_IMAGES:
|
||||
item.extract()
|
||||
|
||||
items_to_extract = []
|
||||
|
||||
if self._FETCH_IMAGES:
|
||||
for item in soup.findAll('a',attrs={'href' : re.compile('.*')}):
|
||||
if item.img is not None:
|
||||
#use full size image
|
||||
img = item.findNext('img')
|
||||
|
||||
|
||||
img['src'] = item['href']
|
||||
|
||||
|
||||
#insert caption if available
|
||||
if img['title'] is not None and (len(img['title']) > 1):
|
||||
tag = Tag(soup,'h3')
|
||||
text = NavigableString(img['title'])
|
||||
tag.insert(0,text)
|
||||
|
||||
|
||||
#picture before text
|
||||
img.extract()
|
||||
item.insert(0,img)
|
||||
item.insert(1,tag)
|
||||
|
||||
|
||||
# remove link
|
||||
item.name = "div"
|
||||
item["class"]='image'
|
||||
del item["href"]
|
||||
|
||||
|
||||
|
||||
|
||||
#remove empty subtitles
|
||||
"""
|
||||
currently the subtitle is located in first paragraph after
|
||||
sibling <h3 class="subtitle"> tag. This may be 'fixed' at
|
||||
some point.
|
||||
"""
|
||||
some point.
|
||||
"""
|
||||
subtitle = soup.find('h3',attrs={'class' : 'subtitle'})
|
||||
if subtitle is not None:
|
||||
subtitleText = subtitle.findNext('p')
|
||||
if subtitleText is not None:
|
||||
if len(subtitleText.contents[0]) <= 1 :
|
||||
if len(subtitleText.contents[0]) <= 1 :
|
||||
subtitleText.extract()
|
||||
subtitle.extract()
|
||||
|
||||
|
||||
|
||||
|
||||
#replace rating numbers with stars
|
||||
for item in soup.findAll('div',attrs={ 'class' : 'starRating'}):
|
||||
if item is not None:
|
||||
soup2 = self._insertRatingStars(soup,item)
|
||||
if soup2 is not None:
|
||||
soup = soup2
|
||||
|
||||
|
||||
|
||||
|
||||
#remove empty paragraph tags in storyTop which can leave a space
|
||||
#between first paragraph and rest of story
|
||||
nested_content = False
|
||||
storyTop = soup.find('div',attrs={ 'class' : ['storyTop']})
|
||||
for item in storyTop.findAll('p'):
|
||||
if item.contents is not None and len(item.contents[0]) <= 1 :
|
||||
for nested in item:
|
||||
if isinstance(nested, Tag):
|
||||
nested_content = True
|
||||
break
|
||||
if not nested_content and item.contents is not None and len(item.contents[0]) <= 1 :
|
||||
items_to_extract.append(item)
|
||||
|
||||
|
||||
for item in items_to_extract:
|
||||
item.extract()
|
||||
|
||||
items_to_extract = []
|
||||
|
||||
|
||||
item.extract()
|
||||
|
||||
items_to_extract = []
|
||||
|
||||
|
||||
#remove line breaks immediately next to tags with default margins
|
||||
#to prevent double line spacing and narrow columns of text
|
||||
storyTop = soup.find('div',attrs={ 'class' : ['storyTop']})
|
||||
self._remove_undesired_line_breaks_from_tag(storyTop,soup)
|
||||
|
||||
|
||||
self._remove_undesired_line_breaks_from_tag(storyTop,soup)
|
||||
|
||||
|
||||
#replace article graphics link with the graphics themselves
|
||||
if self._FETCH_ARTICLE_GRAPHICS:
|
||||
items_to_insert = []
|
||||
for item in soup.findAll('div', attrs={'class' : ['article-graphic']}):
|
||||
strong = item.find('strong')
|
||||
if not strong:
|
||||
continue
|
||||
for child in strong:
|
||||
if isinstance(child,Tag):
|
||||
if str(child.name) == 'a':
|
||||
items_to_insert.extend(self._get_article_graphic(strong,child['href'],soup))
|
||||
|
||||
|
||||
for item in items_to_insert:
|
||||
item[0].replaceWith(item[1])
|
||||
|
||||
item[0].replaceWith(item[1])
|
||||
|
||||
for item in items_to_extract:
|
||||
item.extract()
|
||||
|
||||
item.extract()
|
||||
|
||||
return soup
|
||||
|
||||
|
||||
|
||||
|
||||
def _get_article_graphic(self,old_item,url,soup):
|
||||
|
||||
|
||||
items_to_insert = []
|
||||
|
||||
|
||||
if re.search('\.jpg$',str(url)):
|
||||
div = Tag(soup,'div')
|
||||
div['class'] = 'pictureContainer'
|
||||
@ -238,20 +254,20 @@ class TheIndependentNew(BasicNewsRecipe):
|
||||
div.insert(0,img)
|
||||
items_to_insert.append((old_item,div,))
|
||||
return items_to_insert
|
||||
|
||||
|
||||
soup2 = self.index_to_soup(url)
|
||||
for item in soup2.findAll('div',attrs={'class' : re.compile("widget picture article.*")}):
|
||||
items_to_insert.append((old_item,item),)
|
||||
return items_to_insert
|
||||
|
||||
|
||||
|
||||
|
||||
def _insertRatingStars(self,soup,item):
|
||||
if item.contents is None:
|
||||
return
|
||||
rating = item.contents[0]
|
||||
if not rating.isdigit():
|
||||
return None
|
||||
rating = int(item.contents[0])
|
||||
rating = int(item.contents[0])
|
||||
for i in range(1,6):
|
||||
star = Tag(soup,'img')
|
||||
if i <= rating:
|
||||
@ -261,26 +277,26 @@ class TheIndependentNew(BasicNewsRecipe):
|
||||
star['alt'] = 'star number ' + str(i)
|
||||
item.insert(i,star)
|
||||
#item.contents[0] = NavigableString('(' + str(rating) + ')')
|
||||
item.contents[0] = ''
|
||||
|
||||
item.contents[0] = ''
|
||||
|
||||
def postprocess_html(self,soup, first_fetch):
|
||||
#find broken images and remove captions
|
||||
items_to_extract = []
|
||||
for item in soup.findAll('div', attrs={'class' : 'image'}):
|
||||
img = item.findNext('img')
|
||||
if img is not None and img['src'] is not None:
|
||||
# broken images still point to remote url
|
||||
pattern = re.compile('http://www.independent.co.uk.*')
|
||||
# broken images still point to remote url
|
||||
pattern = re.compile('http://www.independent.co.uk.*')
|
||||
if pattern.match(img["src"]) is not None:
|
||||
caption = img.findNextSibling('h3')
|
||||
if caption is not None:
|
||||
items_to_extract.append(caption)
|
||||
items_to_extract.append(img)
|
||||
|
||||
|
||||
for item in items_to_extract:
|
||||
item.extract()
|
||||
item.extract()
|
||||
return soup
|
||||
|
||||
|
||||
def _recurisvely_linearise_tag_tree(
|
||||
self,
|
||||
item,
|
||||
@ -295,25 +311,25 @@ class TheIndependentNew(BasicNewsRecipe):
|
||||
if not (isinstance(item,Tag)):
|
||||
return linearised
|
||||
for nested in item:
|
||||
linearised.append(nested)
|
||||
linearised.append(nested)
|
||||
linearised = self._recurisvely_linearise_tag_tree(nested,linearised, count)
|
||||
return linearised
|
||||
|
||||
|
||||
|
||||
|
||||
def _get_previous_tag(self,current_index, tag_tree):
|
||||
if current_index == 0:
|
||||
return None
|
||||
else:
|
||||
return tag_tree[current_index - 1]
|
||||
|
||||
|
||||
|
||||
|
||||
def _get_next_tag(self,current_index, tag_tree):
|
||||
if current_index < len(tag_tree) - 1:
|
||||
return tag_tree[current_index + 1]
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
|
||||
|
||||
def _list_match(self,test_str, list_regex):
|
||||
for regex in list_regex:
|
||||
match = re.match(regex, test_str)
|
||||
@ -322,24 +338,24 @@ class TheIndependentNew(BasicNewsRecipe):
|
||||
return False
|
||||
|
||||
def _remove_undesired_line_breaks_from_tag(self,parent,soup):
|
||||
|
||||
|
||||
if parent is None:
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
tag_tree = self._recurisvely_linearise_tag_tree(parent)
|
||||
items_to_remove = []
|
||||
|
||||
|
||||
|
||||
|
||||
for item in tag_tree:
|
||||
if item == u'\n':
|
||||
items_to_remove.append(item)
|
||||
continue;
|
||||
|
||||
|
||||
for item in items_to_remove:
|
||||
tag_tree.remove(item)
|
||||
|
||||
|
||||
|
||||
|
||||
spaced_tags = [r'p', r'h\d', r'blockquote']
|
||||
tags_to_extract = []
|
||||
tags_to_replace = []
|
||||
@ -347,41 +363,41 @@ class TheIndependentNew(BasicNewsRecipe):
|
||||
if isinstance(tag, Tag):
|
||||
if str(tag) == '<br />':
|
||||
previous_tag = self._get_previous_tag(i, tag_tree)
|
||||
|
||||
|
||||
if isinstance(previous_tag, Tag):
|
||||
previous_tag_is_spaced = previous_tag is not None\
|
||||
and self._list_match(str(previous_tag.name),
|
||||
spaced_tags)
|
||||
else:
|
||||
previous_tag_is_spaced = False
|
||||
|
||||
|
||||
next_tag = self._get_next_tag(i, tag_tree)
|
||||
|
||||
|
||||
if isinstance(next_tag, Tag):
|
||||
next_tag_is_spaced = next_tag is not None\
|
||||
and self._list_match(str(next_tag.name), spaced_tags)
|
||||
else:
|
||||
next_tag_is_spaced = False
|
||||
|
||||
|
||||
if previous_tag_is_spaced or next_tag_is_spaced or i == 0\
|
||||
or i == len(tag_tree) - 1:
|
||||
tags_to_extract.append(tag)
|
||||
else:
|
||||
tags_to_replace.append((tag,NavigableString(' '),))
|
||||
|
||||
|
||||
|
||||
|
||||
for pair in tags_to_replace:
|
||||
pair[0].replaceWith(pair[1])
|
||||
pair[0].replaceWith(pair[1])
|
||||
for tag in tags_to_extract:
|
||||
tag.extract()
|
||||
|
||||
|
||||
feeds = [
|
||||
(u'News - UK',
|
||||
u'http://www.independent.co.uk/news/uk/?service=rss'),
|
||||
(u'News - World',
|
||||
u'http://www.independent.co.uk/news/world/?service=rss'),
|
||||
(u'News - Business',
|
||||
u'http://www.independent.co.uk/news/business/?service=rss'),
|
||||
u'http://www.independent.co.uk/news/business/?service=rss'),
|
||||
(u'News - People',
|
||||
u'http://www.independent.co.uk/news/people/?service=rss'),
|
||||
(u'News - Science',
|
||||
@ -481,4 +497,4 @@ class TheIndependentNew(BasicNewsRecipe):
|
||||
(u'IndyBest',
|
||||
u'http://www.independent.co.uk/extras/indybest/?service=rss'),
|
||||
]
|
||||
|
||||
|
||||
|
@ -3,7 +3,7 @@ __license__ = 'GPL v3'
|
||||
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
|
||||
|
||||
'''
|
||||
Fetch sueddeutsche.
|
||||
Fetch sueddeutsche.de
|
||||
'''
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
@ -62,7 +62,7 @@ class Sueddeutsche(BasicNewsRecipe):
|
||||
(u'Sport', u'http://suche.sueddeutsche.de/query/%23/sort/-docdatetime/drilldown/%C2%A7ressort%3A%5ESport%24?output=rss'),
|
||||
(u'Leben', u'http://suche.sueddeutsche.de/query/%23/sort/-docdatetime/drilldown/%C2%A7ressort%3A%5ELeben%24?output=rss'),
|
||||
(u'Karriere', u'http://suche.sueddeutsche.de/query/%23/sort/-docdatetime/drilldown/%C2%A7ressort%3A%5EKarriere%24?output=rss'),
|
||||
(u'München & Region', u'http://www.sueddeutsche.de/app/service/rss/ressort/muenchen/rss.xml'),
|
||||
(u'München & Region', u'http://www.sueddeutsche.de/app/service/rss/ressort/muenchen/rss.xml'), # AGe 2011-11-13
|
||||
(u'Bayern', u'http://suche.sueddeutsche.de/query/%23/sort/-docdatetime/drilldown/%C2%A7ressort%3A%5EBayern%24?output=rss'),
|
||||
(u'Medien', u'http://suche.sueddeutsche.de/query/%23/sort/-docdatetime/drilldown/%C2%A7ressort%3A%5EMedien%24?output=rss'),
|
||||
(u'Digital', u'http://suche.sueddeutsche.de/query/%23/sort/-docdatetime/drilldown/%C2%A7ressort%3A%5EDigital%24?output=rss'),
|
||||
|
@ -134,7 +134,7 @@ def add_pipeline_options(parser, plumber):
|
||||
'font_size_mapping',
|
||||
'line_height', 'minimum_line_height',
|
||||
'linearize_tables',
|
||||
'extra_css',
|
||||
'extra_css', 'filter_css',
|
||||
'smarten_punctuation', 'unsmarten_punctuation',
|
||||
'margin_top', 'margin_left', 'margin_right',
|
||||
'margin_bottom', 'change_justification',
|
||||
|
@ -308,6 +308,16 @@ OptionRecommendation(name='extra_css',
|
||||
'rules.')
|
||||
),
|
||||
|
||||
OptionRecommendation(name='filter_css',
|
||||
recommended_value=None, level=OptionRecommendation.LOW,
|
||||
help=_('A comma separated list of CSS properties that '
|
||||
'will be removed from all CSS style rules. This is useful '
|
||||
'if the presence of some style information prevents it '
|
||||
'from being overridden on your device. '
|
||||
'For example: '
|
||||
'font-family,color,margin-left,margin-right')
|
||||
),
|
||||
|
||||
OptionRecommendation(name='page_breaks_before',
|
||||
recommended_value="//*[name()='h1' or name()='h2']",
|
||||
level=OptionRecommendation.LOW,
|
||||
|
@ -118,8 +118,20 @@ class CSSFlattener(object):
|
||||
|
||||
def __call__(self, oeb, context):
|
||||
oeb.logger.info('Flattening CSS and remapping font sizes...')
|
||||
self.context = self.opts =context
|
||||
self.oeb = oeb
|
||||
self.context = context
|
||||
|
||||
self.filter_css = frozenset()
|
||||
if self.opts.filter_css:
|
||||
try:
|
||||
self.filter_css = frozenset([x.strip().lower() for x in
|
||||
self.opts.filter_css.split(',')])
|
||||
except:
|
||||
self.oeb.log.warning('Failed to parse filter_css, ignoring')
|
||||
else:
|
||||
self.oeb.log.debug('Filtering CSS properties: %s'%
|
||||
', '.join(self.filter_css))
|
||||
|
||||
self.stylize_spine()
|
||||
self.sbase = self.baseline_spine() if self.fbase else None
|
||||
self.fmap = FontMapper(self.sbase, self.fbase, self.fkey)
|
||||
@ -279,6 +291,10 @@ class CSSFlattener(object):
|
||||
except:
|
||||
self.oeb.logger.exception('Failed to set minimum line-height')
|
||||
|
||||
if cssdict:
|
||||
for x in self.filter_css:
|
||||
cssdict.pop(x, None)
|
||||
|
||||
if cssdict:
|
||||
if self.lineh and self.fbase and tag != 'body':
|
||||
self.clean_edges(cssdict, style, psize)
|
||||
@ -311,7 +327,6 @@ class CSSFlattener(object):
|
||||
lineh = self.lineh / psize
|
||||
cssdict['line-height'] = "%0.5fem" % lineh
|
||||
|
||||
|
||||
if (self.context.remove_paragraph_spacing or
|
||||
self.context.insert_blank_line) and tag in ('p', 'div'):
|
||||
if item_id != 'calibre_jacket' or self.context.output_profile.name == 'Kindle':
|
||||
|
@ -18,6 +18,16 @@ class LookAndFeelWidget(Widget, Ui_Form):
|
||||
HELP = _('Control the look and feel of the output')
|
||||
COMMIT_NAME = 'look_and_feel'
|
||||
|
||||
FILTER_CSS = {
|
||||
'fonts': {'font-family'},
|
||||
'margins': {'margin', 'margin-left', 'margin-right', 'margin-top',
|
||||
'margin-bottom'},
|
||||
'padding': {'padding', 'padding-left', 'padding-right', 'padding-top',
|
||||
'padding-bottom'},
|
||||
'floats': {'float'},
|
||||
'colors': {'color', 'background', 'background-color'},
|
||||
}
|
||||
|
||||
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
|
||||
Widget.__init__(self, parent,
|
||||
['change_justification', 'extra_css', 'base_font_size',
|
||||
@ -27,7 +37,7 @@ class LookAndFeelWidget(Widget, Ui_Form):
|
||||
'remove_paragraph_spacing',
|
||||
'remove_paragraph_spacing_indent_size',
|
||||
'insert_blank_line_size',
|
||||
'input_encoding',
|
||||
'input_encoding', 'filter_css',
|
||||
'asciiize', 'keep_ligatures',
|
||||
'linearize_tables']
|
||||
)
|
||||
@ -56,6 +66,15 @@ class LookAndFeelWidget(Widget, Ui_Form):
|
||||
if g is self.opt_change_justification:
|
||||
ans = unicode(g.itemData(g.currentIndex()).toString())
|
||||
return ans
|
||||
if g is self.opt_filter_css:
|
||||
ans = set()
|
||||
for key, item in self.FILTER_CSS.iteritems():
|
||||
w = getattr(self, 'filter_css_%s'%key)
|
||||
if w.isChecked():
|
||||
ans = ans.union(item)
|
||||
ans = ans.union(set([x.strip().lower() for x in
|
||||
unicode(self.filter_css_others.text()).split(',')]))
|
||||
return ','.join(ans) if ans else None
|
||||
return Widget.get_value_handler(self, g)
|
||||
|
||||
def set_value_handler(self, g, val):
|
||||
@ -66,6 +85,27 @@ class LookAndFeelWidget(Widget, Ui_Form):
|
||||
g.setCurrentIndex(i)
|
||||
break
|
||||
return True
|
||||
if g is self.opt_filter_css:
|
||||
if not val: val = ''
|
||||
items = frozenset([x.strip().lower() for x in val.split(',')])
|
||||
for key, vals in self.FILTER_CSS.iteritems():
|
||||
w = getattr(self, 'filter_css_%s'%key)
|
||||
if not vals - items:
|
||||
items = items - vals
|
||||
w.setChecked(True)
|
||||
else:
|
||||
w.setChecked(False)
|
||||
self.filter_css_others.setText(', '.join(items))
|
||||
return True
|
||||
|
||||
def connect_gui_obj_handler(self, gui_obj, slot):
|
||||
if gui_obj is self.opt_filter_css:
|
||||
for key in self.FILTER_CSS:
|
||||
w = getattr(self, 'filter_css_%s'%key)
|
||||
w.stateChanged.connect(slot)
|
||||
self.filter_css_others.textChanged.connect(slot)
|
||||
return
|
||||
raise NotImplementedError()
|
||||
|
||||
def font_key_wizard(self):
|
||||
from calibre.gui2.convert.font_key import FontKeyChooser
|
||||
|
@ -6,7 +6,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>642</width>
|
||||
<width>655</width>
|
||||
<height>522</height>
|
||||
</rect>
|
||||
</property>
|
||||
@ -164,6 +164,41 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="3">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>&Indent size:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>opt_remove_paragraph_spacing_indent_size</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="4">
|
||||
<widget class="QDoubleSpinBox" name="opt_remove_paragraph_spacing_indent_size">
|
||||
<property name="toolTip">
|
||||
<string><p>When calibre removes inter paragraph spacing, it automatically sets a paragraph indent, to ensure that paragraphs can be easily distinguished. This option controls the width of that indent.</string>
|
||||
</property>
|
||||
<property name="specialValueText">
|
||||
<string>No change</string>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string> em</string>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>-0.100000000000000</double>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="opt_insert_blank_line">
|
||||
<property name="text">
|
||||
@ -171,6 +206,19 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="3">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>&Line size:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>opt_insert_blank_line_size</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="4">
|
||||
<widget class="QDoubleSpinBox" name="opt_insert_blank_line_size">
|
||||
<property name="suffix">
|
||||
@ -194,80 +242,6 @@
|
||||
<item row="8" column="2" colspan="3">
|
||||
<widget class="QComboBox" name="opt_change_justification"/>
|
||||
</item>
|
||||
<item row="9" column="1" colspan="4">
|
||||
<widget class="QCheckBox" name="opt_asciiize">
|
||||
<property name="text">
|
||||
<string>&Transliterate unicode characters to ASCII</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="1" colspan="2">
|
||||
<widget class="QCheckBox" name="opt_keep_ligatures">
|
||||
<property name="text">
|
||||
<string>Keep &ligatures</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="0" colspan="5">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Extra &CSS</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="0" column="0">
|
||||
<widget class="QTextEdit" name="opt_extra_css"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="4">
|
||||
<widget class="QDoubleSpinBox" name="opt_remove_paragraph_spacing_indent_size">
|
||||
<property name="toolTip">
|
||||
<string><p>When calibre removes inter paragraph spacing, it automatically sets a paragraph indent, to ensure that paragraphs can be easily distinguished. This option controls the width of that indent.</string>
|
||||
</property>
|
||||
<property name="specialValueText">
|
||||
<string>No change</string>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string> em</string>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>-0.100000000000000</double>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="3">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>&Indent size:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>opt_remove_paragraph_spacing_indent_size</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="3">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>&Line size:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>opt_insert_blank_line_size</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="0">
|
||||
<widget class="QCheckBox" name="opt_smarten_punctuation">
|
||||
<property name="text">
|
||||
@ -275,6 +249,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="1" colspan="4">
|
||||
<widget class="QCheckBox" name="opt_asciiize">
|
||||
<property name="text">
|
||||
<string>&Transliterate unicode characters to ASCII</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="0">
|
||||
<widget class="QCheckBox" name="opt_unsmarten_punctuation">
|
||||
<property name="text">
|
||||
@ -282,6 +263,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="1" colspan="2">
|
||||
<widget class="QCheckBox" name="opt_keep_ligatures">
|
||||
<property name="text">
|
||||
<string>Keep &ligatures</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="3">
|
||||
<widget class="QCheckBox" name="opt_linearize_tables">
|
||||
<property name="text">
|
||||
@ -289,6 +277,111 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="0" colspan="5">
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="extra_css_tab">
|
||||
<attribute name="title">
|
||||
<string>&Extra CSS</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QTextEdit" name="opt_extra_css"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="opt_filter_css">
|
||||
<attribute name="title">
|
||||
<string>&Filter Style Information</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="0" column="0" colspan="5">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="text">
|
||||
<string>Select what style information you want completely removed:</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QCheckBox" name="filter_css_fonts">
|
||||
<property name="toolTip">
|
||||
<string>Removes the font-family CSS property</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Fonts</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QCheckBox" name="filter_css_margins">
|
||||
<property name="toolTip">
|
||||
<string>Removes the margin CSS properties. Note that page margins are not affected by this setting.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Margins</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QCheckBox" name="filter_css_padding">
|
||||
<property name="toolTip">
|
||||
<string>Removes the padding CSS properties</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Padding</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<widget class="QCheckBox" name="filter_css_floats">
|
||||
<property name="toolTip">
|
||||
<string>Convert floating images/text into static images/text</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>F&loats</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="4">
|
||||
<widget class="QCheckBox" name="filter_css_colors">
|
||||
<property name="toolTip">
|
||||
<string>Removes foreground and background colors</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Colors</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="5">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="text">
|
||||
<string>&Other CSS Properties:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>filter_css_others</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="filter_css_others">
|
||||
<property name="toolTip">
|
||||
<string>Comma separated list of CSS properties to remove. For example: display, color, font-family</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
|
@ -131,8 +131,9 @@ def get_job_details(job):
|
||||
def merge_result(oldmi, newmi, ensure_fields=None):
|
||||
dummy = Metadata(_('Unknown'))
|
||||
for f in msprefs['ignore_fields']:
|
||||
if ':' not in f and (ensure_fields and f not in ensure_fields):
|
||||
setattr(newmi, f, getattr(dummy, f))
|
||||
if ':' in f or (ensure_fields and f in ensure_fields):
|
||||
continue
|
||||
setattr(newmi, f, getattr(dummy, f))
|
||||
fields = set()
|
||||
for plugin in metadata_plugins(['identify']):
|
||||
fields |= plugin.touched_fields
|
||||
|
@ -127,7 +127,7 @@
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Number of conver download threads to use</string>
|
||||
<string>Number of cover download threads to use</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -5,8 +5,8 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: calibre 0.8.26\n"
|
||||
"POT-Creation-Date: 2011-11-12 09:09+IST\n"
|
||||
"PO-Revision-Date: 2011-11-12 09:09+IST\n"
|
||||
"POT-Creation-Date: 2011-11-13 17:08+IST\n"
|
||||
"PO-Revision-Date: 2011-11-13 17:08+IST\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: LANGUAGE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -988,8 +988,8 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:102
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:529
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:548
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:532
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:551
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1048
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1054
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1089
|
||||
@ -2029,250 +2029,254 @@ msgstr ""
|
||||
msgid "Either the path to a CSS stylesheet or raw CSS. This CSS will be appended to the style rules from the source file, so it can be used to override those rules."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:314
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:313
|
||||
msgid "A comma separated list of CSS properties that will be removed from all CSS style rules. This is useful if the presence of some style information prevents it from being overridden on your device. For example: font-family,color,margin-left,margin-right"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:324
|
||||
msgid "An XPath expression. Page breaks are inserted before the specified elements."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:320
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:330
|
||||
msgid "Some documents specify page margins by specifying a left and right margin on each individual paragraph. calibre will try to detect and remove these margins. Sometimes, this can cause the removal of margins that should not have been removed. In this case you can disable the removal."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:331
|
||||
#, python-format
|
||||
msgid "Set the top margin in pts. Default is %default. Note: 72 pts equals 1 inch"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:336
|
||||
#, python-format
|
||||
msgid "Set the bottom margin in pts. Default is %default. Note: 72 pts equals 1 inch"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:341
|
||||
#, python-format
|
||||
msgid "Set the left margin in pts. Default is %default. Note: 72 pts equals 1 inch"
|
||||
msgid "Set the top margin in pts. Default is %default. Note: 72 pts equals 1 inch"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:346
|
||||
#, python-format
|
||||
msgid "Set the bottom margin in pts. Default is %default. Note: 72 pts equals 1 inch"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:351
|
||||
#, python-format
|
||||
msgid "Set the left margin in pts. Default is %default. Note: 72 pts equals 1 inch"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:356
|
||||
#, python-format
|
||||
msgid "Set the right margin in pts. Default is %default. Note: 72 pts equals 1 inch"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:352
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:362
|
||||
msgid "Change text justification. A value of \"left\" converts all justified text in the source to left aligned (i.e. unjustified) text. A value of \"justify\" converts all unjustified text to justified. A value of \"original\" (the default) does not change justification in the source file. Note that only some output formats support justification."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:362
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:372
|
||||
msgid "Remove spacing between paragraphs. Also sets an indent on paragraphs of 1.5em. Spacing removal will not work if the source file does not use paragraphs (<p> or <div> tags)."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:369
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:379
|
||||
msgid "When calibre removes blank lines between paragraphs, it automatically sets a paragraph indent, to ensure that paragraphs can be easily distinguished. This option controls the width of that indent (in em). If you set this value negative, then the indent specified in the input document is used, that is, calibre does not change the indentation."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:378
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:388
|
||||
msgid "Use the cover detected from the source file in preference to the specified cover."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:384
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:394
|
||||
msgid "Insert a blank line between paragraphs. Will not work if the source file does not use paragraphs (<p> or <div> tags)."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:391
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:401
|
||||
msgid "Set the height of the inserted blank lines (in em). The height of the lines between paragraphs will be twice the value set here."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:398
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:408
|
||||
msgid "Remove the first image from the input ebook. Useful if the input document has a cover image that is not identified as a cover. In this case, if you set a cover in calibre, the output document will end up with two cover images if you do not specify this option."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:407
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:417
|
||||
msgid "Insert the book metadata at the start of the book. This is useful if your ebook reader does not support displaying/searching metadata directly."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:415
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:425
|
||||
msgid "Convert plain quotes, dashes and ellipsis to their typographically correct equivalents. For details, see http://daringfireball.net/projects/smartypants"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:423
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:433
|
||||
msgid "Convert fancy quotes, dashes and ellipsis to their plain equivalents."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:431
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:441
|
||||
msgid "Read metadata from the specified OPF file. Metadata read from this file will override any metadata in the source file."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:438
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:448
|
||||
#, python-format
|
||||
msgid "Transliterate unicode characters to an ASCII representation. Use with care because this will replace unicode characters with ASCII. For instance it will replace \"%s\" with \"Mikhail Gorbachiov\". Also, note that in cases where there are multiple representations of a character (characters shared by Chinese and Japanese for instance) the representation based on the current calibre interface language will be used."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:453
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:463
|
||||
msgid "Preserve ligatures present in the input document. A ligature is a special rendering of a pair of characters like ff, fi, fl et cetera. Most readers do not have support for ligatures in their default fonts, so they are unlikely to render correctly. By default, calibre will turn a ligature into the corresponding pair of normal characters. This option will preserve them instead."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:465
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:475
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:38
|
||||
msgid "Set the title."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:469
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:479
|
||||
msgid "Set the authors. Multiple authors should be separated by ampersands."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:474
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:484
|
||||
msgid "The version of the title to be used for sorting. "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:478
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:488
|
||||
msgid "String to be used when sorting by author. "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:482
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:492
|
||||
msgid "Set the cover to the specified file or URL"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:486
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:496
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:54
|
||||
msgid "Set the ebook description."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:490
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:500
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:56
|
||||
msgid "Set the ebook publisher."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:494
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:504
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:60
|
||||
msgid "Set the series this ebook belongs to."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:498
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:508
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:62
|
||||
msgid "Set the index of the book in this series."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:502
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:512
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:64
|
||||
msgid "Set the rating. Should be a number between 1 and 5."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:506
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:516
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:66
|
||||
msgid "Set the ISBN of the book."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:510
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:520
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:68
|
||||
msgid "Set the tags for the book. Should be a comma separated list."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:514
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:524
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:70
|
||||
msgid "Set the book producer."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:518
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:528
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:72
|
||||
msgid "Set the language."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:522
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:532
|
||||
msgid "Set the publication date."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:526
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:536
|
||||
msgid "Set the book timestamp (used by the date column in calibre)."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:530
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:540
|
||||
msgid "Enable heuristic processing. This option must be set for any heuristic processing to take place."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:535
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:545
|
||||
msgid "Detect unformatted chapter headings and sub headings. Change them to h2 and h3 tags. This setting will not create a TOC, but can be used in conjunction with structure detection to create one."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:542
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:552
|
||||
msgid "Look for common words and patterns that denote italics and italicize them."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:547
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:557
|
||||
msgid "Turn indentation created from multiple non-breaking space entities into CSS indents."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:552
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:562
|
||||
msgid "Scale used to determine the length at which a line should be unwrapped. Valid values are a decimal between 0 and 1. The default is 0.4, just below the median line length. If only a few lines in the document require unwrapping this value should be reduced"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:560
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:570
|
||||
msgid "Unwrap lines using punctuation and other formatting clues."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:564
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:574
|
||||
msgid "Remove empty paragraphs from the document when they exist between every other paragraph"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:569
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:579
|
||||
msgid "Left aligned scene break markers are center aligned. Replace soft scene breaks that use multiple blank lines with horizontal rules."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:575
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:585
|
||||
msgid "Replace scene breaks with the specified text. By default, the text from the input document is used."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:580
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:590
|
||||
msgid "Analyze hyphenated words throughout the document. The document itself is used as a dictionary to determine whether hyphens should be retained or removed."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:586
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:596
|
||||
msgid "Looks for occurrences of sequential <h1> or <h2> tags. The tags are renumbered to prevent splitting in the middle of chapter headings."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:592
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:602
|
||||
msgid "Search pattern (regular expression) to be replaced with sr1-replace."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:597
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:607
|
||||
msgid "Replacement to replace the text found with sr1-search."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:601
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:611
|
||||
msgid "Search pattern (regular expression) to be replaced with sr2-replace."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:606
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:616
|
||||
msgid "Replacement to replace the text found with sr2-search."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:610
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:620
|
||||
msgid "Search pattern (regular expression) to be replaced with sr3-replace."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:615
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:625
|
||||
msgid "Replacement to replace the text found with sr3-search."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:719
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:729
|
||||
msgid "Could not find an ebook inside the archive"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:777
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:787
|
||||
msgid "Values of series index and rating must be numbers. Ignoring"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:784
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:794
|
||||
msgid "Failed to parse date/time"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:943
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:953
|
||||
msgid "Converting input to HTML..."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:970
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:980
|
||||
msgid "Running transforms on ebook..."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:1074
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:1084
|
||||
msgid "Creating"
|
||||
msgstr ""
|
||||
|
||||
@ -5312,7 +5316,7 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks_ui.py:21
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/basic_config_widget_ui.py:37
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:77
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:98
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:21
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:98
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:123
|
||||
msgid "Form"
|
||||
@ -6017,15 +6021,15 @@ msgstr ""
|
||||
msgid "Control the look and feel of the output"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:35
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:45
|
||||
msgid "Original"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:36
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:46
|
||||
msgid "Left align"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:37
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:47
|
||||
msgid "Justify text"
|
||||
msgstr ""
|
||||
|
||||
@ -6062,59 +6066,115 @@ msgid "Remove &spacing between paragraphs"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:97
|
||||
msgid "Insert &blank line between paragraphs"
|
||||
msgid "&Indent size:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:101
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:132
|
||||
msgid " em"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:106
|
||||
msgid "Text &justification:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:113
|
||||
msgid "&Transliterate unicode characters to ASCII"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:117
|
||||
msgid "Keep &ligatures"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:121
|
||||
msgid "Extra &CSS"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:130
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:102
|
||||
msgid "<p>When calibre removes inter paragraph spacing, it automatically sets a paragraph indent, to ensure that paragraphs can be easily distinguished. This option controls the width of that indent."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:131
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:103
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:87
|
||||
msgid "No change"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:139
|
||||
msgid "&Indent size:"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:104
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:120
|
||||
msgid " em"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:144
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:111
|
||||
msgid "Insert &blank line between paragraphs"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:115
|
||||
msgid "&Line size:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:149
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:125
|
||||
msgid "Text &justification:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:132
|
||||
msgid "Smarten &punctuation"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:153
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:136
|
||||
msgid "&Transliterate unicode characters to ASCII"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:140
|
||||
msgid "&UnSmarten punctuation"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:157
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:144
|
||||
msgid "Keep &ligatures"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:148
|
||||
msgid "&Linearize tables"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:166
|
||||
msgid "Select what style information you want completely removed:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:171
|
||||
msgid "Removes the font-family CSS property"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:172
|
||||
msgid "&Fonts"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:176
|
||||
msgid "Removes the margin CSS properties. Note that page margins are not affected by this setting."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:177
|
||||
msgid "&Margins"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:181
|
||||
msgid "Removes the padding CSS properties"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:182
|
||||
msgid "&Padding"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:186
|
||||
msgid "Convert floating images/text into static images/text"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:187
|
||||
msgid "F&loats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:191
|
||||
msgid "Removes foreground and background colors"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:192
|
||||
msgid "&Colors"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:198
|
||||
msgid "&Other CSS Properties:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:202
|
||||
msgid "Comma separated list of CSS properties to remove. For example: display, color, font-family"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:227
|
||||
msgid "&Extra CSS"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:228
|
||||
msgid "&Filter Style Information"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:19
|
||||
msgid "LRF Output"
|
||||
msgstr ""
|
||||
@ -10652,7 +10712,7 @@ msgstr ""
|
||||
msgid "(Failed cover)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download.py:211
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download.py:212
|
||||
#, python-format
|
||||
msgid "Downloaded %(num)d of %(tot)d"
|
||||
msgstr ""
|
||||
@ -13082,53 +13142,53 @@ msgstr ""
|
||||
msgid "Configure..."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:99
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:25
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:99
|
||||
msgid "Time"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:100
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:30
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:100
|
||||
msgid "Number of seconds to wait for a store to respond"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:101
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:38
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:101
|
||||
msgid "Number of seconds to let a store process results"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:102
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:50
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:102
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:103
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:55
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:103
|
||||
msgid "Maximum number of results to show per store"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:104
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:63
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:104
|
||||
msgid "Open search result in system browser"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:105
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:68
|
||||
msgid "Threads"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:106
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:73
|
||||
msgid "Number of search threads to use"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:107
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:81
|
||||
msgid "Number of cache update threads to use"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:108
|
||||
msgid "Number of conver download threads to use"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:89
|
||||
msgid "Number of cover download threads to use"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:109
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:97
|
||||
msgid "Number of details threads to use"
|
||||
msgstr ""
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user