mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-08-07 09:01:38 -04:00
...
This commit is contained in:
parent
ad490e9cd6
commit
29215758c3
@ -149,6 +149,8 @@ def text_length_in_range_wrapper(node):
|
|||||||
|
|
||||||
|
|
||||||
def adjust_node_for_text_offset(node):
|
def adjust_node_for_text_offset(node):
|
||||||
|
if node.parentNode and node.parentNode.dataset.calibreRangeWrapper:
|
||||||
|
node = node.parentNode
|
||||||
offset = 0
|
offset = 0
|
||||||
adjusted = False
|
adjusted = False
|
||||||
while True:
|
while True:
|
||||||
@ -161,6 +163,10 @@ def adjust_node_for_text_offset(node):
|
|||||||
offset += text_length_in_range_wrapper(p)
|
offset += text_length_in_range_wrapper(p)
|
||||||
node = p
|
node = p
|
||||||
adjusted = True
|
adjusted = True
|
||||||
|
if adjusted and node.nodeType is Node.ELEMENT_NODE and node.dataset.calibreRangeWrapper:
|
||||||
|
if not node.firstChild or node.firstChild.nodeType is not Node.TEXT_NODE:
|
||||||
|
node.insertBefore(document.createTextNode(''), node.firstChild or None)
|
||||||
|
node = node.firstChild
|
||||||
return node, offset, adjusted
|
return node, offset, adjusted
|
||||||
|
|
||||||
|
|
||||||
@ -221,10 +227,7 @@ def encode(doc, node, offset, tail):
|
|||||||
node = node.firstChild
|
node = node.firstChild
|
||||||
if is_text_node(node):
|
if is_text_node(node):
|
||||||
offset = offset or 0
|
offset = offset or 0
|
||||||
adjust_node = node
|
adjusted_node, additional_offset, adjusted = adjust_node_for_text_offset(node)
|
||||||
if node.parentNode and node.parentNode.dataset.calibreRangeWrapper:
|
|
||||||
adjust_node = node.parentNode
|
|
||||||
adjusted_node, additional_offset, adjusted = adjust_node_for_text_offset(adjust_node)
|
|
||||||
if adjusted:
|
if adjusted:
|
||||||
node = adjusted_node
|
node = adjusted_node
|
||||||
offset += additional_offset
|
offset += additional_offset
|
||||||
|
@ -95,3 +95,6 @@ def cfi_with_range_wrappers():
|
|||||||
p.appendChild(E.span('abc', data_calibre_range_wrapper='7'))
|
p.appendChild(E.span('abc', data_calibre_range_wrapper='7'))
|
||||||
with_wrapper = encode(document, p.firstChild.firstChild, 0)
|
with_wrapper = encode(document, p.firstChild.firstChild, 0)
|
||||||
assert_equal(without_wrapper, with_wrapper)
|
assert_equal(without_wrapper, with_wrapper)
|
||||||
|
p.appendChild(document.createTextNode('def'))
|
||||||
|
after_wrapper = encode(document, p.lastChild, 1)
|
||||||
|
assert_equal(after_wrapper, f'{path_to_p}/1:4')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user