mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
EPUB metadata: Handle multiple title elements when setting titles
EPUB metadata: When changing the title in an EPUB 2.0 file that has multiple titles, remove the extra titles. Fixes #1211949 [Private bug](https://bugs.launchpad.net/calibre/+bug/1211949)
This commit is contained in:
parent
ed35c29f69
commit
8a1f46a389
@ -518,7 +518,6 @@ class OPF(object): # {{{
|
|||||||
spine_path = XPath('descendant::*[re:match(name(), "spine", "i")]/*[re:match(name(), "itemref", "i")]')
|
spine_path = XPath('descendant::*[re:match(name(), "spine", "i")]/*[re:match(name(), "itemref", "i")]')
|
||||||
guide_path = XPath('descendant::*[re:match(name(), "guide", "i")]/*[re:match(name(), "reference", "i")]')
|
guide_path = XPath('descendant::*[re:match(name(), "guide", "i")]/*[re:match(name(), "reference", "i")]')
|
||||||
|
|
||||||
title = MetadataField('title', formatter=lambda x: re.sub(r'\s+', ' ', x))
|
|
||||||
publisher = MetadataField('publisher')
|
publisher = MetadataField('publisher')
|
||||||
comments = MetadataField('description')
|
comments = MetadataField('description')
|
||||||
category = MetadataField('type')
|
category = MetadataField('type')
|
||||||
@ -781,6 +780,29 @@ class OPF(object): # {{{
|
|||||||
for item in self.iterguide():
|
for item in self.iterguide():
|
||||||
item.set('href', get_href(item))
|
item.set('href', get_href(item))
|
||||||
|
|
||||||
|
@dynamic_property
|
||||||
|
def title(self):
|
||||||
|
# TODO: Add support for EPUB 3 refinements
|
||||||
|
|
||||||
|
def fget(self):
|
||||||
|
for elem in self.title_path(self.metadata):
|
||||||
|
title = self.get_text(elem)
|
||||||
|
if title and title.strip():
|
||||||
|
return re.sub(r'\s+', ' ', title.strip())
|
||||||
|
|
||||||
|
def fset(self, val):
|
||||||
|
val = (val or '').strip()
|
||||||
|
titles = self.title_path(self.metadata)
|
||||||
|
if not val or self.package_version < 3:
|
||||||
|
for title in titles:
|
||||||
|
title.getparent().remove(title)
|
||||||
|
if val:
|
||||||
|
titles = self.title_path(self.metadata)
|
||||||
|
title = titles[0] if titles else self.create_metadata_element('title')
|
||||||
|
title.text = re.sub(r'\s+', ' ', unicode(val))
|
||||||
|
|
||||||
|
return property(fget=fget, fset=fset)
|
||||||
|
|
||||||
@dynamic_property
|
@dynamic_property
|
||||||
def authors(self):
|
def authors(self):
|
||||||
|
|
||||||
@ -1132,10 +1154,7 @@ class OPF(object): # {{{
|
|||||||
def get_metadata_element(self, name):
|
def get_metadata_element(self, name):
|
||||||
matches = self.metadata_elem_path(self.metadata, name=name)
|
matches = self.metadata_elem_path(self.metadata, name=name)
|
||||||
if matches:
|
if matches:
|
||||||
num = -1
|
return matches[-1]
|
||||||
if self.package_version >= 3 and name == 'title':
|
|
||||||
num = 0
|
|
||||||
return matches[num]
|
|
||||||
|
|
||||||
def create_metadata_element(self, name, attrib=None, is_dc=True):
|
def create_metadata_element(self, name, attrib=None, is_dc=True):
|
||||||
if is_dc:
|
if is_dc:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user