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")]')
|
||||
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')
|
||||
comments = MetadataField('description')
|
||||
category = MetadataField('type')
|
||||
@ -781,6 +780,29 @@ class OPF(object): # {{{
|
||||
for item in self.iterguide():
|
||||
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
|
||||
def authors(self):
|
||||
|
||||
@ -1132,10 +1154,7 @@ class OPF(object): # {{{
|
||||
def get_metadata_element(self, name):
|
||||
matches = self.metadata_elem_path(self.metadata, name=name)
|
||||
if matches:
|
||||
num = -1
|
||||
if self.package_version >= 3 and name == 'title':
|
||||
num = 0
|
||||
return matches[num]
|
||||
return matches[-1]
|
||||
|
||||
def create_metadata_element(self, name, attrib=None, is_dc=True):
|
||||
if is_dc:
|
||||
|
Loading…
x
Reference in New Issue
Block a user