Fix author name casing algorithm

This commit is contained in:
Kovid Goyal 2011-04-06 00:14:44 -06:00
parent 62b1ae9176
commit 6059a77d86

View File

@ -15,6 +15,7 @@ from calibre.customize import Plugin
from calibre.utils.logging import ThreadSafeLog, FileStream from calibre.utils.logging import ThreadSafeLog, FileStream
from calibre.utils.config import JSONConfig from calibre.utils.config import JSONConfig
from calibre.utils.titlecase import titlecase from calibre.utils.titlecase import titlecase
from calibre.utils.icu import capitalize, lower
from calibre.ebooks.metadata import check_isbn from calibre.ebooks.metadata import check_isbn
msprefs = JSONConfig('metadata_sources/global.json') msprefs = JSONConfig('metadata_sources/global.json')
@ -107,6 +108,25 @@ def get_cached_cover_urls(mi):
if url: if url:
yield (p, url) yield (p, url)
def cap_author_token(token):
if lower(token) in ('von', 'de', 'el', 'van'):
return lower(token)
return capitalize(token)
def fixauthors(authors):
if not authors:
return authors
ans = []
for x in authors:
ans.append(' '.join(map(cap_author_token, x.split())))
return ans
def fixcase(x):
if x:
x = titlecase(x)
return x
class Source(Plugin): class Source(Plugin):
@ -259,13 +279,9 @@ class Source(Plugin):
before putting the Metadata object into result_queue. You can of before putting the Metadata object into result_queue. You can of
course, use a custom algorithm suited to your metadata source. course, use a custom algorithm suited to your metadata source.
''' '''
def fixcase(x):
if x:
x = titlecase(x)
return x
if mi.title: if mi.title:
mi.title = fixcase(mi.title) mi.title = fixcase(mi.title)
mi.authors = list(map(fixcase, mi.authors)) mi.authors = fixauthors(mi.authors)
mi.tags = list(map(fixcase, mi.tags)) mi.tags = list(map(fixcase, mi.tags))
mi.isbn = check_isbn(mi.isbn) mi.isbn = check_isbn(mi.isbn)