diff --git a/resources/recipes/oldnewthing.recipe b/resources/recipes/oldnewthing.recipe
index fc9749d403..8280451e17 100644
--- a/resources/recipes/oldnewthing.recipe
+++ b/resources/recipes/oldnewthing.recipe
@@ -28,7 +28,7 @@ class OldNewThing(BasicNewsRecipe):
}
remove_attributes = ['width','height']
- keep_only_tags = [dict(attrs={'class':['postsub','comment']})]
-
+ keep_only_tags = [dict(attrs={'class':'full-post'})]
+ remove_tags = [dict(attrs={'class':['post-attributes','post-tags','post-actions']})]
feeds = [(u'Posts', u'http://blogs.msdn.com/oldnewthing/rss.xml')]
diff --git a/setup/installer/windows/wix-template.xml b/setup/installer/windows/wix-template.xml
index 35560f5162..17976783aa 100644
--- a/setup/installer/windows/wix-template.xml
+++ b/setup/installer/windows/wix-template.xml
@@ -153,6 +153,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/calibre/devices/apple/driver.py b/src/calibre/devices/apple/driver.py
index 845423247c..59bef5b334 100644
--- a/src/calibre/devices/apple/driver.py
+++ b/src/calibre/devices/apple/driver.py
@@ -2347,7 +2347,7 @@ class ITUNES(DriverBase):
self.log.info(" add timestamp: %s" % metadata.timestamp)
# Force the language declaration for iBooks 1.1
- metadata.language = get_lang()
+ metadata.language = get_lang().replace('_', '-')
if DEBUG:
self.log.info(" rewriting language: %s" % metadata.language)
diff --git a/src/calibre/ebooks/chm/input.py b/src/calibre/ebooks/chm/input.py
index a3a49296d2..820178408c 100644
--- a/src/calibre/ebooks/chm/input.py
+++ b/src/calibre/ebooks/chm/input.py
@@ -92,7 +92,7 @@ class CHMInput(InputFormatPlugin):
metadata.add('identifier', mi.isbn, attrib={'scheme':'ISBN'})
if not metadata.language:
oeb.logger.warn(u'Language not specified')
- metadata.add('language', get_lang())
+ metadata.add('language', get_lang().replace('_', '-'))
if not metadata.creator:
oeb.logger.warn('Creator not specified')
metadata.add('creator', _('Unknown'))
diff --git a/src/calibre/ebooks/compression/palmdoc.c b/src/calibre/ebooks/compression/palmdoc.c
index b85a404eb6..4d913dfd2b 100644
--- a/src/calibre/ebooks/compression/palmdoc.c
+++ b/src/calibre/ebooks/compression/palmdoc.c
@@ -151,6 +151,7 @@ cpalmdoc_do_compress(buffer *b, char *output) {
for (j=0; j < temp.len; j++) *(output++) = (char)temp.data[j];
}
}
+ PyMem_Free(temp.data);
return output - head;
}
@@ -168,7 +169,9 @@ cpalmdoc_compress(PyObject *self, PyObject *args) {
for (j = 0; j < input_len; j++)
b.data[j] = (_input[j] < 0) ? _input[j]+256 : _input[j];
b.len = input_len;
- output = (char *)PyMem_Malloc(sizeof(char) * b.len);
+ // Make the output buffer larger than the input as sometimes
+ // compression results in a larger block
+ output = (char *)PyMem_Malloc(sizeof(char) * (int)(1.25*b.len));
if (output == NULL) return PyErr_NoMemory();
j = cpalmdoc_do_compress(&b, output);
if ( j == 0) return PyErr_NoMemory();
diff --git a/src/calibre/ebooks/html/input.py b/src/calibre/ebooks/html/input.py
index 73fd020d7b..73bc22be66 100644
--- a/src/calibre/ebooks/html/input.py
+++ b/src/calibre/ebooks/html/input.py
@@ -329,7 +329,7 @@ class HTMLInput(InputFormatPlugin):
metadata.add('identifier', mi.isbn, attrib={'scheme':'ISBN'})
if not metadata.language:
oeb.logger.warn(u'Language not specified')
- metadata.add('language', get_lang())
+ metadata.add('language', get_lang().replace('_', '-'))
if not metadata.creator:
oeb.logger.warn('Creator not specified')
metadata.add('creator', self.oeb.translate(__('Unknown')))
diff --git a/src/calibre/ebooks/metadata/fetch.py b/src/calibre/ebooks/metadata/fetch.py
index 8b82d3c972..cb75d93f59 100644
--- a/src/calibre/ebooks/metadata/fetch.py
+++ b/src/calibre/ebooks/metadata/fetch.py
@@ -313,6 +313,8 @@ def search(title=None, author=None, publisher=None, isbn=None, isbndb_key=None,
def sort_func(x, y):
def cleanup_title(s):
+ if s is None:
+ s = _('Unknown')
s = s.strip().lower()
s = prefix_pat.sub(' ', s)
s = trailing_paren_pat.sub('', s)
diff --git a/src/calibre/ebooks/metadata/opf2.py b/src/calibre/ebooks/metadata/opf2.py
index 579398d3b0..0bb0c570ed 100644
--- a/src/calibre/ebooks/metadata/opf2.py
+++ b/src/calibre/ebooks/metadata/opf2.py
@@ -1069,7 +1069,8 @@ class OPFCreator(MetaInformation):
dc_attrs={'id':__appname__+'_id'}))
if getattr(self, 'pubdate', None) is not None:
a(DC_ELEM('date', self.pubdate.isoformat()))
- a(DC_ELEM('language', self.language if self.language else get_lang()))
+ a(DC_ELEM('language', self.language if self.language else
+ get_lang().replace('_', '-')))
if self.comments:
a(DC_ELEM('description', self.comments))
if self.publisher:
@@ -1194,7 +1195,8 @@ def metadata_to_opf(mi, as_string=True):
factory(DC('identifier'), mi.isbn, scheme='ISBN')
if mi.rights:
factory(DC('rights'), mi.rights)
- factory(DC('language'), mi.language if mi.language and mi.language.lower() != 'und' else get_lang())
+ factory(DC('language'), mi.language if mi.language and mi.language.lower()
+ != 'und' else get_lang().replace('_', '-'))
if mi.tags:
for tag in mi.tags:
factory(DC('subject'), tag)
diff --git a/src/calibre/ebooks/oeb/reader.py b/src/calibre/ebooks/oeb/reader.py
index ebe6e78d08..d7d7bbf725 100644
--- a/src/calibre/ebooks/oeb/reader.py
+++ b/src/calibre/ebooks/oeb/reader.py
@@ -131,7 +131,7 @@ class OEBReader(object):
stream = cStringIO.StringIO(etree.tostring(opf))
mi = MetaInformation(OPF(stream))
if not mi.language:
- mi.language = get_lang()
+ mi.language = get_lang().replace('_', '-')
self.oeb.metadata.add('language', mi.language)
if not mi.title:
mi.title = self.oeb.translate(__('Unknown'))
diff --git a/src/calibre/gui2/dialogs/metadata_single.py b/src/calibre/gui2/dialogs/metadata_single.py
index 8be3774203..5a4eaec9d7 100644
--- a/src/calibre/gui2/dialogs/metadata_single.py
+++ b/src/calibre/gui2/dialogs/metadata_single.py
@@ -103,7 +103,7 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog):
if _file:
_file = os.path.abspath(_file)
if not os.access(_file, os.R_OK):
- d = error_dialog(self.window, _('Cannot read'),
+ d = error_dialog(self, _('Cannot read'),
_('You do not have permission to read the file: ') + _file)
d.exec_()
return
@@ -112,14 +112,14 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog):
cf = open(_file, "rb")
cover = cf.read()
except IOError, e:
- d = error_dialog(self.window, _('Error reading file'),
+ d = error_dialog(self, _('Error reading file'),
_("
There was an error reading from file:
") + _file + "
"+str(e))
d.exec_()
if cover:
pix = QPixmap()
pix.loadFromData(cover)
if pix.isNull():
- d = error_dialog(self.window,
+ d = error_dialog(self,
_("Not a valid picture"),
_file + _(" is not a valid picture"))
d.exec_()
@@ -162,7 +162,7 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog):
self.formats_changed = True
added = True
if bad_perms:
- error_dialog(self.window, _('No permission'),
+ error_dialog(self, _('No permission'),
_('You do not have '
'permission to read the following files:'),
det_msg='\n'.join(bad_perms), show=True)