Sync to trunk.

This commit is contained in:
John Schember 2009-08-31 20:21:35 -04:00
commit b8166db5cc
4 changed files with 273 additions and 256 deletions

View File

@ -192,7 +192,7 @@ class PMLMLizer(object):
text += '\\w' text += '\\w'
width = elem.get('width') width = elem.get('width')
if width: if width:
text += '="%s%"' % width text += '="%s%%"' % width
else: else:
text += '="50%"' text += '="50%"'

View File

@ -17,232 +17,225 @@
<iconset resource="../images.qrc"> <iconset resource="../images.qrc">
<normaloff>:/images/edit_input.svg</normaloff>:/images/edit_input.svg</iconset> <normaloff>:/images/edit_input.svg</normaloff>:/images/edit_input.svg</iconset>
</property> </property>
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QVBoxLayout" name="verticalLayout">
<item row="0" column="0"> <item>
<widget class="QSplitter" name="splitter"> <layout class="QVBoxLayout">
<property name="orientation"> <property name="spacing">
<enum>Qt::Horizontal</enum> <number>6</number>
</property> </property>
<widget class="QWidget" name="layoutWidget"> <property name="margin">
<layout class="QVBoxLayout"> <number>0</number>
<property name="spacing"> </property>
<number>6</number> <item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Meta information</string>
</property> </property>
<property name="margin"> <layout class="QGridLayout" name="gridLayout">
<number>0</number> <item row="0" column="0">
</property> <widget class="QLabel" name="label_2">
<item> <property name="text">
<widget class="QGroupBox" name="groupBox"> <string>&amp;Author(s): </string>
<property name="title"> </property>
<string>Meta information</string> <property name="alignment">
</property> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<layout class="QGridLayout" name="gridLayout"> </property>
<item row="0" column="0"> <property name="buddy">
<widget class="QLabel" name="label_2"> <cstring>authors</cstring>
<property name="text"> </property>
<string>&amp;Author(s): </string> </widget>
</property> </item>
<property name="alignment"> <item row="1" column="1">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <widget class="QCheckBox" name="auto_author_sort">
</property> <property name="text">
<property name="buddy"> <string>A&amp;utomatically set author sort</string>
<cstring>authors</cstring> </property>
</property> </widget>
</widget> </item>
</item> <item row="2" column="0">
<item row="2" column="0"> <widget class="QLabel" name="label_8">
<widget class="QLabel" name="label_8"> <property name="text">
<property name="text"> <string>Author s&amp;ort: </string>
<string>Author s&amp;ort: </string> </property>
</property> <property name="alignment">
<property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property>
</property> <property name="buddy">
<property name="buddy"> <cstring>author_sort</cstring>
<cstring>author_sort</cstring> </property>
</property> </widget>
</widget> </item>
</item> <item row="2" column="1" colspan="2">
<item row="2" column="1" colspan="2"> <widget class="EnLineEdit" name="author_sort">
<widget class="EnLineEdit" name="author_sort"> <property name="toolTip">
<property name="toolTip"> <string>Specify how the author(s) of this book should be sorted. For example Charles Dickens should be sorted as Dickens, Charles.</string>
<string>Specify how the author(s) of this book should be sorted. For example Charles Dickens should be sorted as Dickens, Charles.</string> </property>
</property> </widget>
</widget> </item>
</item> <item row="3" column="0">
<item row="3" column="0"> <widget class="QLabel" name="label_6">
<widget class="QLabel" name="label_6"> <property name="text">
<property name="text"> <string>&amp;Rating:</string>
<string>&amp;Rating:</string> </property>
</property> <property name="alignment">
<property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property>
</property> <property name="buddy">
<property name="buddy"> <cstring>rating</cstring>
<cstring>rating</cstring> </property>
</property> </widget>
</widget> </item>
</item> <item row="3" column="1" colspan="2">
<item row="3" column="1" colspan="2"> <widget class="QSpinBox" name="rating">
<widget class="QSpinBox" name="rating"> <property name="toolTip">
<property name="toolTip"> <string>Rating of this book. 0-5 stars</string>
<string>Rating of this book. 0-5 stars</string> </property>
</property> <property name="whatsThis">
<property name="whatsThis"> <string>Rating of this book. 0-5 stars</string>
<string>Rating of this book. 0-5 stars</string> </property>
</property> <property name="buttonSymbols">
<property name="buttonSymbols"> <enum>QAbstractSpinBox::PlusMinus</enum>
<enum>QAbstractSpinBox::PlusMinus</enum> </property>
</property> <property name="suffix">
<property name="suffix"> <string> stars</string>
<string> stars</string> </property>
</property> <property name="maximum">
<property name="maximum"> <number>5</number>
<number>5</number> </property>
</property> </widget>
</widget> </item>
</item> <item row="4" column="0">
<item row="4" column="0"> <widget class="QLabel" name="label_3">
<widget class="QLabel" name="label_3"> <property name="text">
<property name="text"> <string>&amp;Publisher: </string>
<string>&amp;Publisher: </string> </property>
</property> <property name="alignment">
<property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property>
</property> <property name="buddy">
<property name="buddy"> <cstring>publisher</cstring>
<cstring>publisher</cstring> </property>
</property> </widget>
</widget> </item>
</item> <item row="4" column="1">
<item row="5" column="0"> <widget class="EnComboBox" name="publisher">
<widget class="QLabel" name="label_4"> <property name="editable">
<property name="text"> <bool>true</bool>
<string>Add ta&amp;gs: </string> </property>
</property> </widget>
<property name="alignment"> </item>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <item row="5" column="0">
</property> <widget class="QLabel" name="label_4">
<property name="buddy"> <property name="text">
<cstring>tags</cstring> <string>Add ta&amp;gs: </string>
</property> </property>
</widget> <property name="alignment">
</item> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<item row="5" column="1"> </property>
<widget class="TagsLineEdit" name="tags"> <property name="buddy">
<property name="toolTip"> <cstring>tags</cstring>
<string>Tags categorize the book. This is particularly useful while searching. &lt;br&gt;&lt;br&gt;They can be any words or phrases, separated by commas.</string> </property>
</property> </widget>
</widget> </item>
</item> <item row="5" column="1">
<item row="5" column="2"> <widget class="TagsLineEdit" name="tags">
<widget class="QToolButton" name="tag_editor_button"> <property name="toolTip">
<property name="toolTip"> <string>Tags categorize the book. This is particularly useful while searching. &lt;br&gt;&lt;br&gt;They can be any words or phrases, separated by commas.</string>
<string>Open Tag Editor</string> </property>
</property> </widget>
<property name="text"> </item>
<string>Open Tag Editor</string> <item row="5" column="2">
</property> <widget class="QToolButton" name="tag_editor_button">
<property name="icon"> <property name="toolTip">
<iconset resource="../images.qrc"> <string>Open Tag Editor</string>
<normaloff>:/images/chapters.svg</normaloff>:/images/chapters.svg</iconset> </property>
</property> <property name="text">
</widget> <string>Open Tag Editor</string>
</item> </property>
<item row="6" column="0"> <property name="icon">
<widget class="QLabel" name="label"> <iconset resource="../images.qrc">
<property name="text"> <normaloff>:/images/chapters.svg</normaloff>:/images/chapters.svg</iconset>
<string>&amp;Remove tags:</string> </property>
</property> </widget>
<property name="buddy"> </item>
<cstring>remove_tags</cstring> <item row="6" column="0">
</property> <widget class="QLabel" name="label">
</widget> <property name="text">
</item> <string>&amp;Remove tags:</string>
<item row="6" column="1" colspan="2"> </property>
<widget class="TagsLineEdit" name="remove_tags"> <property name="buddy">
<property name="toolTip"> <cstring>remove_tags</cstring>
<string>Comma separated list of tags to remove from the books. </string> </property>
</property> </widget>
</widget> </item>
</item> <item row="6" column="1" colspan="2">
<item row="7" column="0"> <widget class="TagsLineEdit" name="remove_tags">
<widget class="QLabel" name="label_7"> <property name="toolTip">
<property name="text"> <string>Comma separated list of tags to remove from the books. </string>
<string>&amp;Series:</string> </property>
</property> </widget>
<property name="textFormat"> </item>
<enum>Qt::PlainText</enum> <item row="7" column="0">
</property> <widget class="QLabel" name="label_7">
<property name="alignment"> <property name="text">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <string>&amp;Series:</string>
</property> </property>
<property name="buddy"> <property name="textFormat">
<cstring>series</cstring> <enum>Qt::PlainText</enum>
</property> </property>
</widget> <property name="alignment">
</item> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<item row="7" column="1"> </property>
<widget class="EnComboBox" name="series"> <property name="buddy">
<property name="toolTip"> <cstring>series</cstring>
<string>List of known series. You can add new series.</string> </property>
</property> </widget>
<property name="whatsThis"> </item>
<string>List of known series. You can add new series.</string> <item row="7" column="1">
</property> <widget class="EnComboBox" name="series">
<property name="editable"> <property name="toolTip">
<bool>true</bool> <string>List of known series. You can add new series.</string>
</property> </property>
<property name="insertPolicy"> <property name="whatsThis">
<enum>QComboBox::InsertAlphabetically</enum> <string>List of known series. You can add new series.</string>
</property> </property>
<property name="sizeAdjustPolicy"> <property name="editable">
<enum>QComboBox::AdjustToContents</enum> <bool>true</bool>
</property> </property>
</widget> <property name="insertPolicy">
</item> <enum>QComboBox::InsertAlphabetically</enum>
<item row="8" column="1"> </property>
<widget class="QComboBox" name="remove_format"/> <property name="sizeAdjustPolicy">
</item> <enum>QComboBox::AdjustToContents</enum>
<item row="8" column="0"> </property>
<widget class="QLabel" name="label_5"> </widget>
<property name="text"> </item>
<string>Remove &amp;format:</string> <item row="8" column="0">
</property> <widget class="QLabel" name="label_5">
<property name="buddy"> <property name="text">
<cstring>remove_format</cstring> <string>Remove &amp;format:</string>
</property> </property>
</widget> <property name="buddy">
</item> <cstring>remove_format</cstring>
<item row="1" column="1"> </property>
<widget class="QCheckBox" name="auto_author_sort"> </widget>
<property name="text"> </item>
<string>A&amp;utomatically set author sort</string> <item row="8" column="1">
</property> <widget class="QComboBox" name="remove_format"/>
</widget> </item>
</item> <item row="0" column="1">
<item row="0" column="1"> <widget class="EnComboBox" name="authors">
<widget class="EnComboBox" name="authors"> <property name="editable">
<property name="editable"> <bool>true</bool>
<bool>true</bool> </property>
</property> </widget>
</widget> </item>
</item> </layout>
<item row="4" column="1"> </widget>
<widget class="EnComboBox" name="publisher"> </item>
<property name="editable"> </layout>
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
</item> </item>
<item row="1" column="0"> <item>
<widget class="QDialogButtonBox" name="button_box"> <widget class="QDialogButtonBox" name="button_box">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>

View File

@ -41,7 +41,7 @@ class SearchBox2(QComboBox):
self.connect(self.line_edit, SIGNAL('key_pressed(PyQt_PyObject)'), self.connect(self.line_edit, SIGNAL('key_pressed(PyQt_PyObject)'),
self.key_pressed, Qt.DirectConnection) self.key_pressed, Qt.DirectConnection)
self.connect(self.line_edit, SIGNAL('mouse_released(PyQt_PyObject)'), self.connect(self.line_edit, SIGNAL('mouse_released(PyQt_PyObject)'),
self.key_pressed, Qt.DirectConnection) self.mouse_released, Qt.DirectConnection)
self.setEditable(True) self.setEditable(True)
self.help_state = True self.help_state = True
self.as_you_type = True self.as_you_type = True

View File

@ -3,7 +3,6 @@ __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
''' '''
Profile to download CNN Profile to download CNN
''' '''
import re
from calibre.web.feeds.news import BasicNewsRecipe from calibre.web.feeds.news import BasicNewsRecipe
class CNN(BasicNewsRecipe): class CNN(BasicNewsRecipe):
@ -11,28 +10,53 @@ class CNN(BasicNewsRecipe):
title = 'CNN' title = 'CNN'
description = 'Global news' description = 'Global news'
timefmt = ' [%d %b %Y]' timefmt = ' [%d %b %Y]'
__author__ = 'Kovid Goyal' __author__ = 'Kovid Goyal and Sujata Raman'
language = _('English') language = _('English')
no_stylesheets = True no_stylesheets = True
use_embedded_content = False use_embedded_content = False
oldest_article = 15 oldest_article = 15
preprocess_regexps = [(re.compile(i[0], re.IGNORECASE | re.DOTALL), i[1]) for i in [ extra_css = '''
(r'<head>.*?<title', lambda match : '<head><title'), h1{font-family :Arial,Helvetica,sans-serif; font-size:large}
(r'</title>.*?</head>', lambda match : '</title></head>'), h2{font-family :Arial,Helvetica,sans-serif; font-size:x-small}
(r'<body.*?<\!\-\-Article.*?>', lambda match : '<body>'), .cnnTxtCmpnt{font-family :Arial,Helvetica,sans-serif; font-size:x-small}
(r'<\!\-\-Article End\-\->.*?</body>', lambda match : '</body>'), .cnnTMcontent{font-family :Arial,Helvetica,sans-serif; font-size:xx-small;color:#575757}
(r'(</h\d>)<ul>.*?</ul>', lambda match : match.group(1)), # drop story highlights .storytext{font-family :Arial,Helvetica,sans-serif; font-size:x-small}
(r'<h2>(.*?)</h2><h1>(.*?)</h1>', lambda match : '<h1>' + match.group(1) + '</h1><h2>' + match.group(2) + '</h2>'), # sports uses h2 for main title and h1 for subtitle (???) switch these around .storybyline{font-family :Arial,Helvetica,sans-serif; font-size:xx-small; color:#575757}
(r'<span class="cnnEmbeddedMosLnk">.*?</span>', lambda match : ''), # drop 'watch more' links .credit{font-family :Arial,Helvetica,sans-serif; font-size:xx-small; color:#575757}
(r'(<div class="cnnstorybody">).*?(<p)', lambda match : match.group(1) + match.group(2)), # drop sports photos .storyBrandingBanner{font-family :Arial,Helvetica,sans-serif; font-size:xx-small; color:#575757}
(r'</?table.*?>|</?tr.*?>|</?td.*?>', lambda match : ''), # drop table formatting .storytimestamp{font-family :Arial,Helvetica,sans-serif; font-size:xx-small; color:#575757}
(r'<div class="cnnendofstorycontent".*?>.*?</div>', lambda match : ''), # drop extra business links .timestamp{font-family :Arial,Helvetica,sans-serif; font-size:xx-small; color:#575757}
(r'<a href="#TOP">.*?</a>', lambda match : '') # drop business 'to top' link .subhead p{font-family :Arial,Helvetica,sans-serif; font-size:xx-small;}
] ] .cnnStoryContent{font-family :Arial,Helvetica,sans-serif; font-size:xx-small}
.cnnContentContainer{font-family :Arial,Helvetica,sans-serif; font-size:xx-small}
.col1{font-family :Arial,Helvetica,sans-serif; font-size:x-small; color:#666666;}
.col3{color:#333333; font-family :Arial,Helvetica,sans-serif; font-size:x-small;font-weight:bold;}
.cnnInlineT1Caption{font-family :Arial,Helvetica,sans-serif; font-size:xx-small;font-weight:bold;}
.cnnInlineT1Credit{font-family :Arial,Helvetica,sans-serif; font-size:xx-small;color:#333333;}
.col10{color:#5A637E}
.cnnTimeStamp{font-family :Arial,Helvetica,sans-serif; font-size:xx-small;color:#333333;}
.galleryhedDek{font-family :Arial,Helvetica,sans-serif; font-size:xx-small;color:#575757;}
.galleryWidgetHeader{font-family :Arial,Helvetica,sans-serif; font-size:xx-small;color:#004276;}
.article-content{font-family :Arial,Helvetica,sans-serif; font-size:xx-small}
.cnnRecapStory{font-family :Arial,Helvetica,sans-serif; font-size:xx-small}
'''
keep_only_tags = [
dict(name='div', attrs={'class':["cnnWCBoxContent","cnnContent","cnnMainBodySecs"]}),
dict(name='div', attrs={'id':["contentBody","content"]}),
dict(name='td', attrs={'id':["cnnRecapStory"]}),]
remove_tags = [
dict(name='div', attrs={'class':["storyLink","article-tools clearfix","widget video related-video vList","cnnFooterBox","scrollArrows","boxHeading","cnnInlineMailbag","mainCol_lastBlock","cnn_bookmarks","cnnFooterBox","cnnEndOfStory","cnnInlineSL","cnnStoryHighlights","cnnFooterClick","cnnSnapShotHeader","cnnStoryToolsFooter","cnnWsnr","cnnUGCBox","cnnTopNewsModule","cnnStoryElementBox","cnnStoryPhotoBoxNavigation"]}),
dict(name='span', attrs={'class':["cnnEmbeddedMosLnk"]}),
dict(name='div', attrs={'id':["cnnIncldHlder","articleCommentsContainer","featuredContent","superstarsWidget","shareMenuContainer","rssMenuContainer","storyBrandingBanner","cnnRightCol","siteFeatures","quigo628","rightColumn","clickIncludeBox","cnnHeaderRightCol","cnnSCFontLabel","cnnSnapShotBottomRight","cnnSCFontButtons","rightColumn"]}),
dict(name='p', attrs={'class':["cnnTopics"]}),
dict(name='td', attrs={'class':["cnnRightRail"]}),
dict(name='table', attrs={'class':["cnnTMbox"]}),
dict(name='ul', attrs={'id':["cnnTopNav","cnnBotNav","cnnSBNav"]}),
]
def print_version(self, url): # def print_version(self, url):
return 'http://www.printthis.clickability.com/pt/printThis?clickMap=printThis&fb=Y&url=' + url # return 'http://www.printthis.clickability.com/pt/printThis?clickMap=printThis&fb=Y&url=' + url
feeds = [ feeds = [
('Top News', 'http://rss.cnn.com/rss/cnn_topstories.rss'), ('Top News', 'http://rss.cnn.com/rss/cnn_topstories.rss'),