diff --git a/resources/jacket/template.xhtml b/resources/jacket/template.xhtml index 413ca6419c..d71499a2d7 100644 --- a/resources/jacket/template.xhtml +++ b/resources/jacket/template.xhtml @@ -12,7 +12,8 @@ + change {series.roman} to {series}. You can also access the raw series name and number + using {series.name}, {series.number} or {series.roman_number} --> {series.roman} diff --git a/src/calibre/ebooks/oeb/transforms/jacket.py b/src/calibre/ebooks/oeb/transforms/jacket.py index 36a08a1266..2161f57ceb 100644 --- a/src/calibre/ebooks/oeb/transforms/jacket.py +++ b/src/calibre/ebooks/oeb/transforms/jacket.py @@ -169,13 +169,17 @@ class Series(unicode): def __new__(self, series, series_index): if series and series_index is not None: - roman = _('Number {1} of {0}').format( + roman = _('{1} of {0}').format( escape(series), escape(fmt_sidx(series_index, use_roman=True))) - series = escape(series + ' [%s]'%fmt_sidx(series_index, use_roman=False)) + combined = _('{1} of {0}').format( + escape(series), escape(fmt_sidx(series_index, use_roman=False))) else: - series = roman = escape(series or u'') - s = unicode.__new__(self, series) + combined = roman = escape(series or u'') + s = unicode.__new__(self, combined) s.roman = roman + s.name = escape(series or u'') + s.number = escape(fmt_sidx(series_index or 1.0, use_roman=False)) + s.roman_number = escape(fmt_sidx(series_index or 1.0, use_roman=True)) return s @@ -252,12 +256,17 @@ def render_jacket(mi, output_profile, searchable_tags=' '.join(escape(t)+'ttt' for t in tags.tags_list), ) for key in mi.custom_field_keys(): + m = mi.get_user_metadata(key, False) or {} try: display_name, val = mi.format_field_extended(key)[:2] - key = key.replace('#', '_') - args[key] = escape(val) - args[key+'_label'] = escape(display_name) - except: + dkey = key.replace('#', '_') + dt = m.get('datatype') + if dt == 'series': + args[dkey] = Series(mi.get(key), mi.get(key + '_index')) + else: + args[dkey] = escape(val) + args[dkey+'_label'] = escape(display_name) + except Exception: # if the val (custom column contents) is None, don't add to args pass