mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
OPF23: languages and authors
This commit is contained in:
parent
3e33b855f0
commit
5f9767c40b
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user