OPF23: languages and authors

This commit is contained in:
Kovid Goyal 2018-04-10 20:10:01 +05:30
parent 3e33b855f0
commit 5f9767c40b
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -7,7 +7,8 @@ from __future__ import absolute_import, division, print_function, unicode_litera
from lxml import etree from lxml import etree
from calibre.ebooks.metadata.opf3 import ( from calibre.ebooks.metadata.opf3 import (
OPF, XPath, read_prefixes, read_refines, refdef, remove_element, set_refines DC, OPF, XPath, ensure_id, read_prefixes, read_refines, refdef, remove_element,
set_refines
) )
from calibre.ebooks.metadata.utils import parse_opf, pretty_print_opf from calibre.ebooks.metadata.utils import parse_opf, pretty_print_opf
@ -53,6 +54,37 @@ def upgrade_title(root, data):
set_refines(first_title, data.refines, refdef('title-type', 'main'), *ts) set_refines(first_title, data.refines, refdef('title-type', 'main'), *ts)
def upgrade_languages(root, data):
langs = XPath('./opf:metadata/dc:language')(root)
if langs:
for lang in langs:
lang.attrib.clear()
else:
# EPUB spec says dc:language is required
metadata = XPath('./opf:metadata')(root)[0]
l = metadata.makeelement(DC('language'))
l.text = 'und'
metadata.append(l)
def upgrade_authors(root, data):
for which in 'creator', 'contributor':
for elem in XPath('./opf:metadata/dc:' + which)(root):
role = elem.attrib.pop(OPF('role'), None)
sort = elem.attrib.pop(OPF('file-as'), None)
if role or sort:
aid = ensure_id(elem)
metadata = elem.getparent()
if role:
m = metadata.makeelement(OPF('meta'), attrib={'refines':'#'+aid, 'property':'role', 'scheme':'marc:relators'})
m.text = role
metadata.append(m)
if sort:
m = metadata.makeelement(OPF('meta'), attrib={'refines':'#'+aid, 'property':'file-as'})
m.text = sort
metadata.append(m)
def upgrade_metadata(root): def upgrade_metadata(root):
data = Data() data = Data()
data.prefixes = read_prefixes(root) data.prefixes = read_prefixes(root)
@ -60,6 +92,9 @@ def upgrade_metadata(root):
upgrade_identifiers(root, data) upgrade_identifiers(root, data)
upgrade_title(root, data) upgrade_title(root, data)
upgrade_languages(root, data)
upgrade_authors(root, data)
pretty_print_opf(root) pretty_print_opf(root)