def _load_expression(self, filename, text_range): with open(filename, "rb") as fp: whole_source = fp.read() root = ast_utils.parse_source(whole_source, filename) main_node = ast_utils.find_expression(root, text_range) source = ast_utils.extract_text_range(whole_source, text_range) logging.debug("EV.load_exp: %s", (text_range, main_node, source)) self._clear_expression() self.insert("1.0", source) # create node marks def _create_index(lineno, col_offset): local_lineno = lineno - main_node.lineno + 1 if lineno == main_node.lineno: local_col_offset = col_offset - main_node.col_offset else: local_col_offset = col_offset return str(local_lineno) + "." + str(local_col_offset) for node in ast.walk(main_node): if "lineno" in node._attributes: index1 = _create_index(node.lineno, node.col_offset) index2 = _create_index(node.end_lineno, node.end_col_offset) start_mark = self._get_mark_name(node.lineno, node.col_offset) if not start_mark in self.mark_names(): self.mark_set(start_mark, index1) # print("Creating mark", start_mark, index1) self.mark_gravity(start_mark, tk.LEFT) end_mark = self._get_mark_name(node.end_lineno, node.end_col_offset) if not end_mark in self.mark_names(): self.mark_set(end_mark, index2) # print("Creating mark", end_mark, index2) self.mark_gravity(end_mark, tk.RIGHT)
def _load_expression(self, filename, text_range): whole_source, _ = misc_utils.read_python_file(filename) root = ast_utils.parse_source(whole_source, filename) self._main_range = text_range assert self._main_range is not None main_node = ast_utils.find_expression(root, text_range) source = ast_utils.extract_text_range(whole_source, text_range) debug("EV.load_exp: %s", (text_range, main_node, source)) self.delete("1.0", "end") self.insert("1.0", source) # create node marks def _create_index(lineno, col_offset): local_lineno = lineno - main_node.lineno + 1 if lineno == main_node.lineno: local_col_offset = col_offset - main_node.col_offset else: local_col_offset = col_offset return str(local_lineno) + "." + str(local_col_offset) for node in ast.walk(main_node): if "lineno" in node._attributes: index1 = _create_index(node.lineno, node.col_offset) index2 = _create_index(node.end_lineno, node.end_col_offset) start_mark = self._get_mark_name(node.lineno, node.col_offset) if not start_mark in self.mark_names(): self.mark_set(start_mark, index1) self.mark_gravity(start_mark, tk.LEFT) end_mark = self._get_mark_name(node.end_lineno, node.end_col_offset) if not end_mark in self.mark_names(): self.mark_set(end_mark, index2) self.mark_gravity(end_mark, tk.RIGHT)