Port TOCOffsetMap to rapydscript

This commit is contained in:
Kovid Goyal 2021-05-18 09:57:03 +05:30
parent d4f9c559c3
commit d720400d77
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -51,6 +51,40 @@ def text_to_regex(text):
return ans.join('')
class ToCOffsetMap:
def __init__(self, toc_nodes, offset_map, previous_toc_node, parent_map):
self.toc_nodes = toc_nodes or v'[]'
self.offset_map = offset_map or {}
self.previous_toc_node = previous_toc_node or None
self.parent_map = parent_map or {}
def toc_nodes_for_offset(self, offset):
matches = v'[]'
for node in self.toc_nodes:
q = self.offset_map[node.id]
if q?:
if q > offset:
break
matches.push(node)
if not matches and self.previous_toc_node:
matches.push(self.previous_toc_node)
ans = v'[]'
if matches:
ancestors = v'[]'
node = matches[-1]
parent = self.parent_map[node.id]
while parent?:
ancestors.push(parent)
parent = self.parent_map[parent.id]
if len(ancestors) > 1:
ancestors.pop() # root node
for v'var i = ancestors.length; i-- > 0;':
ans.push(ancestors[i])
ans.push(node)
return ans
class Worker:
def __init__(self):