diff --git a/resources/jacket/template.xhtml b/resources/jacket/template.xhtml
index 671ca5a04d..974f98039b 100644
--- a/resources/jacket/template.xhtml
+++ b/resources/jacket/template.xhtml
@@ -11,7 +11,9 @@
{title} |
- {series} |
+
+ {series.roman} |
{author} |
diff --git a/src/calibre/ebooks/oeb/transforms/jacket.py b/src/calibre/ebooks/oeb/transforms/jacket.py
index f9c5944a94..bcb9ad437b 100644
--- a/src/calibre/ebooks/oeb/transforms/jacket.py
+++ b/src/calibre/ebooks/oeb/transforms/jacket.py
@@ -19,6 +19,7 @@ from calibre.ebooks.oeb.base import XPath, XHTML_NS, XHTML, xml2text, urldefrag
from calibre.library.comments import comments_to_html
from calibre.utils.date import is_date_undefined
from calibre.ebooks.chardet import strip_encoding_declarations
+from calibre.ebooks.metadata import fmt_sidx
JACKET_XPATH = '//h:meta[@name="calibre-content" and @content="jacket"]'
@@ -142,10 +143,23 @@ def get_rating(rating, rchar, e_rchar):
ans = ("%s%s") % (rchar * int(num), e_rchar * (5 - int(num)))
return ans
+class Series(unicode):
+
+ def __new__(self, series, series_index):
+ series = roman = escape(series or u'')
+ if series and series_index is not None:
+ roman = _('Book {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))
+ s = unicode.__new__(self, series)
+ s.roman = roman
+ return s
+
def render_jacket(mi, output_profile,
alt_title=_('Unknown'), alt_tags=[], alt_comments='',
alt_publisher=(''), rescale_fonts=False):
css = P('jacket/stylesheet.css', data=True).decode('utf-8')
+ template = P('jacket/template.xhtml', data=True).decode('utf-8')
try:
title_str = mi.title if mi.title else alt_title
@@ -153,12 +167,7 @@ def render_jacket(mi, output_profile,
title_str = _('Unknown')
title = '%s' % (escape(title_str))
- series = escape(mi.series if mi.series else '')
- if mi.series and mi.series_index is not None:
- series += escape(' [%s]'%mi.format_series_index())
- if not mi.series:
- series = ''
-
+ series = Series(mi.series, mi.series_index)
try:
publisher = mi.publisher if mi.publisher else alt_publisher
except:
@@ -227,8 +236,7 @@ def render_jacket(mi, output_profile,
args['_genre'] = args.get('_genre', '{_genre}')
formatter = SafeFormatter()
- generated_html = formatter.format(P('jacket/template.xhtml',
- data=True).decode('utf-8'), **args)
+ generated_html = formatter.format(template, **args)
# Post-process the generated html to strip out empty header items