From 76929bfeea6d90e516ddfaa3ffc4242b5d3fbfa3 Mon Sep 17 00:00:00 2001 From: Nate Beversluis Date: Sun, 7 Jul 2024 20:43:26 -0400 Subject: [PATCH] reduce calls to _lex_and_parse since set_buffer_contents does this; do not clear messages from node.set_buffer_contents; MAJOR - bugfix for node_id resolution --- urtext/buffer.py | 7 +++---- urtext/node.py | 4 ++-- urtext/project.py | 7 +++---- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/urtext/buffer.py b/urtext/buffer.py index 95cf7d2..d369ac0 100644 --- a/urtext/buffer.py +++ b/urtext/buffer.py @@ -151,8 +151,7 @@ def _parse(self, nested_levels[nested].append([last_position, position]) if nested <= 0: contents = contents[:position] + contents[position + 1:] - self.set_buffer_contents(contents) - return self._lex_and_parse() + return self.set_buffer_contents(contents, clear_messages=False) position += 1 #wrappers exist outside range node = self.add_node( @@ -214,8 +213,7 @@ def _parse(self, syntax.node_closing_wrapper, ' ', contents[position:]]) - self.set_buffer_contents(contents) - return self._lex_and_parse() + return self.set_buffer_contents(contents) for node in self.nodes: node.filename = self.filename @@ -275,6 +273,7 @@ def set_buffer_contents(self, self.contents = new_contents if clear_messages: self.__clear_messages() + return if re_parse: self._lex_and_parse() diff --git a/urtext/node.py b/urtext/node.py index 564034f..e30c902 100644 --- a/urtext/node.py +++ b/urtext/node.py @@ -286,7 +286,7 @@ def _set_contents(self, new_contents, preserve_title=True): """ node_contents = self.strip_first_line_title(self.full_contents) - file_contents = self.file._get_contents() + file_contents = self.file._get_contents() if preserve_title and self.first_line_title: new_node_contents = ''.join([ ' ', @@ -303,7 +303,7 @@ def _set_contents(self, new_contents, preserve_title=True): file_contents[:self.start_position], new_contents, file_contents[self.end_position:]]) - self.file.set_buffer_contents(new_file_contents) + self.file.set_buffer_contents(new_file_contents, clear_messages=False) # does not re-parse into project def replace_range(self, diff --git a/urtext/project.py b/urtext/project.py index 642d847..124fcd5 100644 --- a/urtext/project.py +++ b/urtext/project.py @@ -362,14 +362,13 @@ def _resolve_node_ids(self, buffer): node.id = resolution['resolved_id'] changed_ids[node.id] = resolution['resolved_id'] allocated_ids.append(node.id) - # resolve duplicate titles within file/buffer new_file_node_ids = [file_node.id for file_node in buffer.nodes] nodes_to_resolve = [n for n in buffer.nodes if new_file_node_ids.count(n.id) > 1] - allocated_ids.extend([file_node.id for file_node in buffer.nodes]) for n in nodes_to_resolve: + unresolved_id = n.id resolution = n.resolve_id(allocated_ids=allocated_ids) - if not resolution['resolved_id'] or n.id in changed_ids: + if not resolution['resolved_id'] or resolution['resolved_id'] in changed_ids: message = { 'top_message' :''.join([ 'Dropping duplicate node title "', @@ -388,7 +387,7 @@ def _resolve_node_ids(self, buffer): buffer.nodes.remove(n) del n continue - changed_ids[n.id] = resolution['resolved_id'] + changed_ids[unresolved_id] = resolution['resolved_id'] n.id = resolution['resolved_id'] # resolve duplicate titles in project