def mark2(hole): if isinstance(hole, dot): return dotmarker(hole, True) if isinstance(hole, star): return starmarker(hole, hole.last, hole.first) if isinstance(hole, holepartial): return starmarker(hole.hole, hole.stop, hole.start)
def mark0(hole): if isinstance(hole, dot): return dotmarker(hole, False) if isinstance(hole, star): return starmarker(hole, 0, 0) if isinstance(hole, holepartial): return starmarker(hole.hole, hole.start, hole.start)
def mark1(hole): if isinstance(hole, dot): return dotmarker(hole, True) if isinstance(hole, star): cursor = hole.last return starmarker(hole, cursor, cursor) if isinstance(hole, holepartial): return starmarker(hole.hole, hole.stop, hole.stop)
def expand(self): marker = self.marker if marker.dot or (marker.start == marker.hole.first and marker.stop == marker.hole.last): self.select_parent() else: tail_loc = marker.cursor < marker.tail tail = (marker.hole.first, marker.hole.last)[tail_loc] cursor = (marker.hole.first, marker.hole.last)[not tail_loc] self.marker = starmarker(marker.hole, cursor, tail)
def replace(self, data, branch_in=False): length = sum(editlength(obj) for obj in data) self.buffer.do(self.marker, replace(data)) if self.marker.dot: self.marker = dotmarker(self.marker.hole, visited = not branch_in) else: cursor = self.marker.start + length * (not branch_in) self.marker = starmarker(self.marker.hole, cursor, cursor) if branch_in: self.walk()
def move(self, offset, selection=False, relative=True): if not self.marker.dot: cursor = clamp(self.marker.hole, relative*self.marker.cursor + offset) tail = self.marker.tail if selection else cursor self.marker = starmarker(self.marker.hole, cursor, tail)