From 3eea169827680e6759e6dfb4e2ed58c43fccd80b Mon Sep 17 00:00:00 2001 From: GRiker Date: Sat, 7 May 2011 11:20:59 -0600 Subject: [PATCH] Added title_sort output option to CSV and XML catalog formats --- src/calibre/customize/__init__.py | 2 +- src/calibre/library/catalog.py | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/calibre/customize/__init__.py b/src/calibre/customize/__init__.py index ddd713d4ce..6118e5583b 100644 --- a/src/calibre/customize/__init__.py +++ b/src/calibre/customize/__init__.py @@ -449,7 +449,7 @@ class CatalogPlugin(Plugin): # {{{ ['author_sort','authors','comments','cover','formats', 'id','isbn','ondevice','pubdate','publisher','rating', 'series_index','series','size','tags','timestamp', - 'title','uuid']) + 'title_sort','title','uuid']) all_custom_fields = set(db.custom_field_keys()) all_fields = all_std_fields.union(all_custom_fields) diff --git a/src/calibre/library/catalog.py b/src/calibre/library/catalog.py index 8c1f35f579..05752f4a29 100644 --- a/src/calibre/library/catalog.py +++ b/src/calibre/library/catalog.py @@ -16,6 +16,7 @@ from calibre.customize import CatalogPlugin from calibre.customize.conversion import OptionRecommendation, DummyReporter from calibre.ebooks.BeautifulSoup import BeautifulSoup, BeautifulStoneSoup, Tag, NavigableString from calibre.ebooks.chardet import substitute_entites +from calibre.ebooks.metadata import title_sort as _title_sort from calibre.library.save_to_disk import preprocess_template from calibre.ptempfile import PersistentTemporaryDirectory from calibre.utils.bibtex import BibTeX @@ -27,7 +28,7 @@ from calibre.utils.logging import default_log as log from calibre.utils.magick.draw import thumbnail from calibre.utils.zipfile import ZipFile, ZipInfo -FIELDS = ['all', 'title', 'author_sort', 'authors', 'comments', +FIELDS = ['all', 'title', 'title_sort', 'author_sort', 'authors', 'comments', 'cover', 'formats','id', 'isbn', 'ondevice', 'pubdate', 'publisher', 'rating', 'series_index', 'series', 'size', 'tags', 'timestamp', 'uuid'] @@ -66,7 +67,7 @@ class CSV_XML(CatalogPlugin): # {{{ dest = 'sort_by', action = None, help = _('Output field to sort on.\n' - 'Available fields: author_sort, id, rating, size, timestamp, title.\n' + 'Available fields: author_sort, id, rating, size, timestamp, title_sort\n' "Default: '%default'\n" "Applies to: CSV, XML output formats"))] @@ -76,7 +77,7 @@ class CSV_XML(CatalogPlugin): # {{{ if opts.verbose: opts_dict = vars(opts) - log("%s(): Generating %s" % (self.name,self.fmt)) + log("%s(): Generating %s" % (self.name,self.fmt.upper())) if opts.connected_device['is_device_connected']: log(" connected_device: %s" % opts.connected_device['name']) if opts_dict['search_text']: @@ -126,8 +127,11 @@ class CSV_XML(CatalogPlugin): # {{{ for field in fields: if field.startswith('#'): item = db.get_field(entry['id'],field,index_is_id=True) + elif field == 'title_sort': + item = _title_sort(unicode(entry['title'])) else: item = entry[field] + if item is None: outstr.append('""') continue @@ -167,7 +171,7 @@ class CSV_XML(CatalogPlugin): # {{{ item = getattr(E, field.replace('#','_'))(val) record.append(item) - for field in ('id', 'uuid', 'title', 'publisher', 'rating', 'size', + for field in ('id', 'uuid', 'publisher', 'rating', 'size', 'isbn','ondevice'): if field in fields: val = r[field] @@ -178,6 +182,10 @@ class CSV_XML(CatalogPlugin): # {{{ item = getattr(E, field)(val) record.append(item) + if 'title' in fields: + title = E.title(r['title'], sort=_title_sort(unicode(r['title']))) + record.append(title) + if 'authors' in fields: aus = E.authors(sort=r['author_sort']) for au in r['authors']: