DOCX Input: Handle hyperlinks in footnotes and endnotes

Fixes #1232790 [Private bug](https://bugs.launchpad.net/calibre/+bug/1232790)
This commit is contained in:
Kovid Goyal 2013-10-04 15:15:56 +05:30
parent f4f66cf42d
commit 002886b0ba

View File

@ -93,10 +93,12 @@ class Convert(object):
self.framed_map = {} self.framed_map = {}
self.anchor_map = {} self.anchor_map = {}
self.link_map = defaultdict(list) self.link_map = defaultdict(list)
self.link_source_map = {}
paras = [] paras = []
self.log.debug('Converting Word markup to HTML') self.log.debug('Converting Word markup to HTML')
self.read_page_properties(doc) self.read_page_properties(doc)
self.current_rels = relationships_by_id
for wp, page_properties in self.page_map.iteritems(): for wp, page_properties in self.page_map.iteritems():
self.current_page = page_properties self.current_page = page_properties
if wp.tag.endswith('}p'): if wp.tag.endswith('}p'):
@ -123,7 +125,7 @@ class Convert(object):
dl[-1][0].tail = ']' dl[-1][0].tail = ']'
dl.append(DD()) dl.append(DD())
paras = [] paras = []
self.images.rid_map = note.rels[0] self.images.rid_map = self.current_rels = note.rels[0]
for wp in note: for wp in note:
if wp.tag.endswith('}tbl'): if wp.tag.endswith('}tbl'):
self.tables.register(wp, self.styles) self.tables.register(wp, self.styles)
@ -157,7 +159,7 @@ class Convert(object):
self.images.rid_map = orig_rid_map self.images.rid_map = orig_rid_map
self.resolve_links(relationships_by_id) self.resolve_links()
self.styles.cascade(self.layers) self.styles.cascade(self.layers)
@ -378,6 +380,7 @@ class Convert(object):
try: try:
hl = hl_xpath(x)[0] hl = hl_xpath(x)[0]
self.link_map[hl].append(span) self.link_map[hl].append(span)
self.link_source_map[hl] = self.current_rels
x.set('is-link', '1') x.set('is-link', '1')
except IndexError: except IndexError:
current_hyperlink = None current_hyperlink = None
@ -455,9 +458,10 @@ class Convert(object):
wrapper.append(elem) wrapper.append(elem)
return wrapper return wrapper
def resolve_links(self, relationships_by_id): def resolve_links(self):
self.resolved_link_map = {} self.resolved_link_map = {}
for hyperlink, spans in self.link_map.iteritems(): for hyperlink, spans in self.link_map.iteritems():
relationships_by_id = self.link_source_map[hyperlink]
span = spans[0] span = spans[0]
if len(spans) > 1: if len(spans) > 1:
span = self.wrap_elems(spans, SPAN()) span = self.wrap_elems(spans, SPAN())