diff --git a/src/calibre/ebooks/docx/fields.py b/src/calibre/ebooks/docx/fields.py index 1f2f0e7e98..df7b877e51 100644 --- a/src/calibre/ebooks/docx/fields.py +++ b/src/calibre/ebooks/docx/fields.py @@ -8,7 +8,7 @@ __copyright__ = '2013, Kovid Goyal ' import re -from calibre.ebooks.docx.index import process_index +from calibre.ebooks.docx.index import process_index, polish_index_markup from calibre.ebooks.docx.names import XPath, get, namespaces class Field(object): @@ -184,6 +184,13 @@ class Fields(object): self.index_fields.append((idx, blocks)) + def polish_markup(self, object_map): + if not self.index_fields: + return + rmap = {v:k for k, v in object_map.iteritems()} + for idx, blocks in self.index_fields: + polish_index_markup(idx, [rmap[b] for b in blocks]) + def test_parse_fields(): import unittest diff --git a/src/calibre/ebooks/docx/index.py b/src/calibre/ebooks/docx/index.py index bf916252b6..62138d27e0 100644 --- a/src/calibre/ebooks/docx/index.py +++ b/src/calibre/ebooks/docx/index.py @@ -117,4 +117,9 @@ def process_index(field, index, xe_fields, log): return hyperlinks, blocks +def polish_index_markup(index, blocks): + # prev_block = prev_text = None + for block in blocks: + cls = block.get('class', '') + block.set('class', (cls + ' index-entry').lstrip()) diff --git a/src/calibre/ebooks/docx/styles.py b/src/calibre/ebooks/docx/styles.py index a00f45e609..661e45048b 100644 --- a/src/calibre/ebooks/docx/styles.py +++ b/src/calibre/ebooks/docx/styles.py @@ -465,6 +465,9 @@ class Styles(object): span.tab { white-space: pre } + p.index-entry a:visited { color: blue } + p.index-entry a:hover { color: red } + ''') % (self.body_font_family, self.body_font_size, self.body_color) if ef: prefix = ef + '\n' + prefix diff --git a/src/calibre/ebooks/docx/to_html.py b/src/calibre/ebooks/docx/to_html.py index 678b770b02..05f1f9a95b 100644 --- a/src/calibre/ebooks/docx/to_html.py +++ b/src/calibre/ebooks/docx/to_html.py @@ -209,6 +209,8 @@ class Convert(object): notes_header.set('class', '%s notes-header' % cls) break + self.fields.polish_markup(self.object_map) + self.log.debug('Cleaning up redundant markup generated by Word') self.cover_image = cleanup_markup(self.log, self.html, self.styles, self.dest_dir, self.detect_cover)