diff --git a/Changelog.yaml b/Changelog.yaml
index bd1d2d9294..8efb7317d7 100644
--- a/Changelog.yaml
+++ b/Changelog.yaml
@@ -4,6 +4,74 @@
# for important features/bug fixes.
# Also, each release can have new and improved recipes.
+- version: 0.7.8
+ date: 2010-07-09
+
+ new features:
+ - title: "New tool to help prepare EPUBs for publication"
+ type: major
+ description: >
+ "calibre now contains a new command line tool called epub-fix that can automatically fix
+ common problems in EPUB files that cause them to be rejected by poorly designed publishing services.
+ The tool is plugin based for extensible functionality in the future. Currently, it can fix unmanifested files
+ and workaround the date and svg preserveaspectratio bugs of epubcheck."
+
+ - title: "New icons for the toolbar buttons by Kamil Tatara"
+
+ - title: "Display rating (when available) in cover browser"
+
+ - title: "Clicking on the central cover int the cover browser now opens that book in the viewer"
+
+ - title: "Use the status bar instead of the area to the right of the location view to display status information"
+
+ - title: "Driver for the Pandigital Novel e-book reader"
+
+ bug fixes:
+ - title: "News download: Don not specify a font family for article descriptions"
+
+ - title: "News download: Fix regression introduced in 0.7.0 that broke download of some embedded content feeds"
+
+ - title: "MOBI Output: Partial support for nested superscript and subscripts."
+ tickets: [6132]
+
+ - title: "CHM Input: Fix handling of buggy CHM files with no .hhc"
+ tickets: [6087]
+
+ - title: "EPUB Input: Fix bug in unzipping EPUB files that have been zipped in depth first order."
+ tickets: [6127]
+
+ - title: "TXT Input: Convert HTML entities to characters."
+ tickets: [6114]
+
+ - title: "LRF Input: Handle LRF files with random null bytes in the text"
+ tickets: [6097]
+
+ - title: "Kobo driver: Fix detection of txt/html files on the device"
+
+ - title: "Fix opening of books when calibre library is on an unmapped network share in windows"
+
+ - title: "SONY driver: Only update the timestamp in the XML db for newly added books"
+
+ - title: "Cover browser: Fix rendering of center cover when width of cover browser is less than the width of a single cover"
+
+ - title: "Cover browser: Correct fix for setPixel out of bounds warning causing UI slowdown in calibre"
+
+ new recipes:
+ - title: "evz.ro"
+ author: Darko Miletic
+
+ - title: "Anchorage Daily News, China Economic Net, BBC Chinese and Singtao Daily"
+ author: rty
+
+ - title: Big Oven
+ author: Starson17
+
+ improved recipes:
+ - Haaretz
+ - Editor and Publisher
+ - Estadao
+
+
- version: 0.7.7
date: 2010-07-02
@@ -44,7 +112,7 @@
- title: "MOBI Output: Fix a memory leak and a crash in the palmdoc compression routine"
- - title: "Metadata download: Fix a regressiont at resulted in a failed download for some books"
+ - title: "Metadata download: Fix a regression that resulted in a failed download for some books"
new recipes:
- title: "Foreign Policy and Alo!"
diff --git a/resources/images/add_book.svg b/resources/images/add_book.svg
index b0633d48d3..54a9f05b68 100644
--- a/resources/images/add_book.svg
+++ b/resources/images/add_book.svg
@@ -1,2404 +1,111 @@
-
+
+
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="149.5"
+ height="201"
+ viewBox="0 0 149.49999 201"
+ enable-background="new 0 0 595.28 841.89"
+ xml:space="preserve"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="add_book.svg">image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/images/config.svg b/resources/images/config.svg
index d631d36aa4..28660a4eea 100644
--- a/resources/images/config.svg
+++ b/resources/images/config.svg
@@ -1,1523 +1,208 @@
-
+
+
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="149.86"
+ height="195.22701"
+ viewBox="0 0 149.85999 195.227"
+ enable-background="new 0 0 595.28 841.89"
+ xml:space="preserve"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="config.svg">image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/images/convert.svg b/resources/images/convert.svg
index cd18d49cf9..f318fc9c75 100644
--- a/resources/images/convert.svg
+++ b/resources/images/convert.svg
@@ -1,834 +1,142 @@
-
+
+
\ No newline at end of file
+ style="stop-color:#000000"
+ id="stop36" />
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/images/dialog_information.svg b/resources/images/dialog_information.svg
index 995f74cd78..1c3d34add1 100644
--- a/resources/images/dialog_information.svg
+++ b/resources/images/dialog_information.svg
@@ -1752,7 +1752,7 @@
sodipodi:cy="93.331604"
sodipodi:cx="-166.53223"
id="path6082"
- style="opacity:1;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter6074)"
+ style="opacity:1;fill:url(#radialGradient6084);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter6074)"
sodipodi:type="arc" />
-
-
+
+
\ No newline at end of file
diff --git a/resources/images/edit_copy.svg b/resources/images/edit_copy.svg
new file mode 100644
index 0000000000..86e1adbc3f
--- /dev/null
+++ b/resources/images/edit_copy.svg
@@ -0,0 +1,4298 @@
+
+
+
\ No newline at end of file
diff --git a/resources/images/edit_input.svg b/resources/images/edit_input.svg
index a2d8bc96e2..54200503e2 100644
--- a/resources/images/edit_input.svg
+++ b/resources/images/edit_input.svg
@@ -1,1071 +1,77 @@
-
+
+
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="249.46899"
+ height="257.47101"
+ viewBox="0 0 249.469 257.471"
+ enable-background="new 0 0 595.279 841.89"
+ xml:space="preserve"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="edit_input.svg">image/svg+xml
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/images/help.svg b/resources/images/help.svg
new file mode 100644
index 0000000000..be41385b7d
--- /dev/null
+++ b/resources/images/help.svg
@@ -0,0 +1,269 @@
+
+
+
\ No newline at end of file
diff --git a/resources/images/news.svg b/resources/images/news.svg
index 38016738f5..e4a1b1832a 100644
--- a/resources/images/news.svg
+++ b/resources/images/news.svg
@@ -1,2826 +1,94 @@
-
+
+
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="134.77701"
+ height="199.99901"
+ viewBox="0 0 134.777 199.999"
+ enable-background="new 0 0 595.28 841.89"
+ xml:space="preserve"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="news.svg">image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/images/news/evz.ro.png b/resources/images/news/evz.ro.png
new file mode 100644
index 0000000000..c0549185bc
Binary files /dev/null and b/resources/images/news/evz.ro.png differ
diff --git a/resources/images/news/haaretz.png b/resources/images/news/haaretz.png
new file mode 100644
index 0000000000..e6cb02c3b6
Binary files /dev/null and b/resources/images/news/haaretz.png differ
diff --git a/resources/images/save.svg b/resources/images/save.svg
index af62235cfc..14a431e60a 100644
--- a/resources/images/save.svg
+++ b/resources/images/save.svg
@@ -1,1961 +1,124 @@
-
+
+
\ No newline at end of file
diff --git a/resources/images/sync.svg b/resources/images/sync.svg
index 93dc8ef5fb..5055d530ea 100644
--- a/resources/images/sync.svg
+++ b/resources/images/sync.svg
@@ -1,1515 +1,77 @@
-
+
+
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="148.90399"
+ height="202.65399"
+ viewBox="0 0 148.90399 202.65399"
+ enable-background="new 0 0 595.279 841.89"
+ xml:space="preserve"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="sync.svg">image/svg+xml
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/images/trash.svg b/resources/images/trash.svg
index 1ff9c4d874..15e10441fd 100644
--- a/resources/images/trash.svg
+++ b/resources/images/trash.svg
@@ -1,2442 +1,215 @@
-
+
+
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="192.6368"
+ height="199.16716"
+ viewBox="0 0 192.63679 199.16716"
+ enable-background="new 0 0 595.28 841.89"
+ xml:space="preserve"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="trash.svg">image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/images/view.svg b/resources/images/view.svg
index 7bdbb392dc..f0b0e1ef6c 100644
--- a/resources/images/view.svg
+++ b/resources/images/view.svg
@@ -1,2071 +1,32 @@
-
-
-
+
+
+
+
diff --git a/resources/recipes/anchorage_daily.recipe b/resources/recipes/anchorage_daily.recipe
new file mode 100644
index 0000000000..4ce2f13a14
--- /dev/null
+++ b/resources/recipes/anchorage_daily.recipe
@@ -0,0 +1,40 @@
+from calibre.web.feeds.news import BasicNewsRecipe
+
+class AdvancedUserRecipe1278347258(BasicNewsRecipe):
+ title = u'Anchorage Daily News'
+ __author__ = 'rty'
+ oldest_article = 7
+ max_articles_per_feed = 100
+
+ feeds = [(u'Alaska News', u'http://www.adn.com/news/alaska/index.xml'),
+ (u'Business', u'http://www.adn.com/money/index.xml'),
+ (u'Sports', u'http://www.adn.com/sports/index.xml'),
+ (u'Politics', u'http://www.adn.com/politics/index.xml'),
+ (u'Lifestyles', u'http://www.adn.com/life/index.xml'),
+ (u'Iditarod', u'http://www.adn.com/iditarod/index.xml')
+ ]
+ description = ''''Alaska's Newspaper'''
+ publisher = 'http://www.adn.com'
+ category = 'news, Alaska, Anchorage'
+ language = 'en'
+ extra_css = '''
+ p{font-weight: normal;text-align: justify}
+ '''
+ remove_javascript = True
+ use_embedded_content = False
+ no_stylesheets = True
+ language = 'en'
+ encoding = 'latin-1'
+ conversion_options = {'linearize_tables':True}
+ masthead_url = 'http://media.adn.com/includes/assets/images/adn_logo.2.gif'
+
+ keep_only_tags = [
+ dict(name='div', attrs={'class':'left_col story_mainbar'}),
+ ]
+ remove_tags = [
+ dict(name='div', attrs={'class':'story_tools'}),
+ dict(name='p', attrs={'class':'ad_label'}),
+ ]
+ remove_tags_after = [
+ dict(name='div', attrs={'class':'advertisement'}),
+ ]
diff --git a/resources/recipes/bbc_chinese.recipe b/resources/recipes/bbc_chinese.recipe
new file mode 100644
index 0000000000..e2bff81b90
--- /dev/null
+++ b/resources/recipes/bbc_chinese.recipe
@@ -0,0 +1,39 @@
+from calibre.web.feeds.news import BasicNewsRecipe
+
+class AdvancedUserRecipe1277443634(BasicNewsRecipe):
+ title = u'BBC Chinese'
+ oldest_article = 7
+ max_articles_per_feed = 100
+
+ feeds = [
+ (u'\u4e3b\u9875', u'http://www.bbc.co.uk/zhongwen/simp/index.xml'),
+ (u'\u56fd\u9645\u65b0\u95fb', u'http://www.bbc.co.uk/zhongwen/simp/world/index.xml'),
+ (u'\u4e24\u5cb8\u4e09\u5730', u'http://www.bbc.co.uk/zhongwen/simp/china/index.xml'),
+ (u'\u91d1\u878d\u8d22\u7ecf', u'http://www.bbc.co.uk/zhongwen/simp/business/index.xml'),
+ (u'\u7f51\u4e0a\u4e92\u52a8', u'http://www.bbc.co.uk/zhongwen/simp/interactive/index.xml'),
+ (u'\u97f3\u89c6\u56fe\u7247', u'http://www.bbc.co.uk/zhongwen/simp/multimedia/index.xml'),
+ (u'\u5206\u6790\u8bc4\u8bba', u'http://www.bbc.co.uk/zhongwen/simp/indepth/index.xml')
+ ]
+ extra_css = '''
+ @font-face {font-family: "DroidFont", serif, sans-serif; src: url(res:///system/fonts/DroidSansFallback.ttf); }\n
+ body {margin-right: 8pt; font-family: 'DroidFont', serif;}\n
+ h1 {font-family: 'DroidFont', serif;}\n
+ .articledescription {font-family: 'DroidFont', serif;}
+ '''
+ __author__ = 'rty'
+ __version__ = '1.0'
+ language = 'zh'
+ pubisher = 'British Broadcasting Corporation'
+ description = 'BBC news in Chinese'
+ category = 'News, Chinese'
+ remove_javascript = True
+ use_embedded_content = False
+ no_stylesheets = True
+ encoding = 'UTF-8'
+ conversion_options = {'linearize_tables':True}
+ masthead_url = 'http://wscdn.bbc.co.uk/zhongwen/simp/images/1024/brand.jpg'
+ keep_only_tags = [
+ dict(name='h1'),
+ dict(name='p', attrs={'class':['primary-topic','summary']}),
+ dict(name='div', attrs={'class':['bodytext','datestamp']}),
+ ]
diff --git a/resources/recipes/big_oven.recipe b/resources/recipes/big_oven.recipe
new file mode 100644
index 0000000000..e1636daf72
--- /dev/null
+++ b/resources/recipes/big_oven.recipe
@@ -0,0 +1,64 @@
+from calibre.web.feeds.news import BasicNewsRecipe
+
+class BigOven(BasicNewsRecipe):
+ title = 'BigOven'
+ __author__ = 'Starson17'
+ description = 'Recipes for the Foodie in us all. Registration is free. A fake username and password just gives smaller photos.'
+ language = 'en'
+ category = 'news, food, recipes, gourmet'
+ publisher = 'Starson17'
+ use_embedded_content= False
+ no_stylesheets = True
+ oldest_article = 24
+ remove_javascript = True
+ remove_empty_feeds = True
+ cover_url = 'http://www.software.com/images/products/BigOven%20Logo_177_216.JPG'
+ max_articles_per_feed = 30
+ needs_subscription = True
+
+ conversion_options = {'linearize_tables' : True
+ , 'comment' : description
+ , 'tags' : category
+ , 'publisher' : publisher
+ , 'language' : language
+ }
+
+ def get_browser(self):
+ br = BasicNewsRecipe.get_browser()
+ if self.username is not None and self.password is not None:
+ br.open('http://www.bigoven.com/')
+ br.select_form(name='form1')
+ br['TopMenu_bo1$email'] = self.username
+ br['TopMenu_bo1$password'] = self.password
+ br.submit()
+ return br
+
+ remove_attributes = ['style', 'font']
+
+ keep_only_tags = [dict(name='h1')
+ ,dict(name='div', attrs={'class':'img'})
+ ,dict(name='div', attrs={'id':'intro'})
+ ]
+
+ remove_tags = [dict(name='div', attrs={'style':["overflow: visible;"]})
+ ,dict(name='div', attrs={'class':['ctas']})
+ #,dict(name='a', attrs={'class':['edit']})
+ ,dict(name='p', attrs={'class':['byline']})
+ ]
+
+ feeds = [(u'4 & 5 Star Rated Recipes', u'http://feeds.feedburner.com/Bigovencom-RecipeRaves?format=xml')]
+
+ def preprocess_html(self, soup):
+ for tag in soup.findAll(name='a', attrs={'class':['edit']}):
+ tag.parent.extract()
+ for tag in soup.findAll(name='a', attrs={'class':['deflink']}):
+ tag.replaceWith(tag.string)
+ return soup
+
+ extra_css = '''
+ h1{font-family:Arial,Helvetica,sans-serif; font-weight:bold;font-size:large;}
+ h2{font-family:Arial,Helvetica,sans-serif; font-weight:normal;font-size:medium;}
+ p{font-family:Arial,Helvetica,sans-serif;font-size:small;}
+ body{font-family:Helvetica,Arial,sans-serif;font-size:small;}
+ '''
+
diff --git a/resources/recipes/china_economic_net.recipe b/resources/recipes/china_economic_net.recipe
new file mode 100644
index 0000000000..825ea007c2
--- /dev/null
+++ b/resources/recipes/china_economic_net.recipe
@@ -0,0 +1,39 @@
+from calibre.web.feeds.news import BasicNewsRecipe
+
+class AdvancedUserRecipe1278162597(BasicNewsRecipe):
+ __author__ = 'rty'
+ title = u'China Economic Net'
+ oldest_article = 7
+ max_articles_per_feed = 100
+
+ pubisher = 'www.ce.cn - China Economic net - Beijing'
+ description = 'China Economic Net Magazine'
+ category = 'Economic News Magazine, Chinese, China'
+ feeds = [
+ (u'Stock Market 股市', u'http://finance.ce.cn/stock/index_6304.xml'),
+ (u'Money 理财', u'http://finance.ce.cn/money/index_6301.xml'),
+ (u'Health 健康', u'http://www.ce.cn/health/index_6294.xml'),
+ (u'Technology 科技', u'http://sci.ce.cn/mainpage/index_6307.xml'),
+ (u'Domestic Politics 国内时政', u'http://www.ce.cn/xwzx/gnsz/index_6273.xml')
+ ]
+ masthead_url = 'http://finance.ce.cn/images/08mdy_logo.gif'
+ extra_css = '''
+ @font-face {font-family: "DroidFont", serif, sans-serif; src: url(res:///system/fonts/DroidSansFallback.ttf); }\n
+ body {margin-right: 8pt; font-family: 'DroidFont', serif;}\n
+ h1 {font-family: 'DroidFont', serif;}\n
+ .articledescription {font-family: 'DroidFont', serif;}
+ '''
+ remove_javascript = True
+ use_embedded_content = False
+ no_stylesheets = True
+ language = 'zh-cn'
+ encoding = 'gb2312'
+ conversion_options = {'linearize_tables':True}
+
+
+ keep_only_tags = [
+
+ dict(name='h1', attrs={'id':'articleTitle'}),
+ dict(name='div', attrs={'class':'laiyuan'}),
+ dict(name='div', attrs={'id':'articleText'}),
+ ]
diff --git a/resources/recipes/editor_and_publisher.recipe b/resources/recipes/editor_and_publisher.recipe
index c8f287a0c7..0ec5c59d74 100644
--- a/resources/recipes/editor_and_publisher.recipe
+++ b/resources/recipes/editor_and_publisher.recipe
@@ -1,14 +1,29 @@
-import re
+#!/usr/bin/env python
+__license__ = 'GPL v3'
+__copyright__ = '2010 elsuave'
+
from calibre.web.feeds.news import BasicNewsRecipe
class EandP(BasicNewsRecipe):
title = u'Editor and Publisher'
- __author__ = u'Xanthan Gum'
+ __author__ = u'elsuave (modified from Xanthan Gum)'
description = 'News about newspapers and journalism.'
+ publisher = 'Editor and Publisher'
+ category = 'news, journalism, industry'
language = 'en'
- no_stylesheets = True
+ max_articles_per_feed = 25
+ no_stylesheets = True
+ use_embedded_content = False
+ encoding = 'utf8'
+ cover_url = 'http://www.editorandpublisher.com/images/EP_main_logo.gif'
+ remove_javascript = True
- oldest_article = 7
- max_articles_per_feed = 100
+ html2lrf_options = [
+ '--comment', description
+ , '--category', category
+ , '--publisher', publisher
+ ]
+
+ html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"'
# Font formatting code borrowed from kwetal
@@ -18,17 +33,21 @@ class EandP(BasicNewsRecipe):
h2{font-size: large;}
'''
- # Delete everything before the article
+ # Keep only div:itemmgap
- remove_tags_before = dict(name='font', attrs={'class':'titlebar_black'})
+ keep_only_tags = [
+ dict(name='div', attrs={'class':'itemmgap'})
+ ]
- # Delete everything after the article
+ # Remove commenting/social media lins
- preprocess_regexps = [(re.compile(r'.*