def parse_node_name(self, node_iter, pattern, forward, all_matches):
     """Recursive function that searchs for the given pattern"""
     text_name = self.dad.treestore[node_iter][1].decode(cons.STR_UTF8)
     match = pattern.search(text_name)
     if not match:
         text_tags = self.dad.treestore[node_iter][6].decode(cons.STR_UTF8)
         match = pattern.search(text_tags)
     if match:
         if all_matches:
             node_id = self.dad.treestore[node_iter][3]
             node_name = self.dad.treestore[node_iter][1]
             node_hier_name = support.get_node_hierarchical_name(self.dad, node_iter, separator=" << ", for_filename=False, root_to_leaf=False)
             line_content = self.get_first_line_content(self.dad.get_textbuffer_from_tree_iter(node_iter))
             self.liststore.append([node_id, 0, 0, node_name, line_content, 1, cgi.escape(node_hier_name)])
         if self.replace_active and not self.dad.treestore[node_iter][7]:
             replacer_text = self.dad.search_replace_dict['replace']
             text_name = text_name.replace(self.curr_find[1], replacer_text)
             self.dad.treestore[node_iter][1] = text_name
             self.dad.ctdb_handler.pending_edit_db_node_prop(self.dad.treestore[node_iter][3])
         if not all_matches:
             self.dad.treeview_safe_set_cursor(node_iter)
             self.dad.sourceview.grab_focus()
             return True
         else: self.matches_num += 1
     node_iter = self.dad.treestore.iter_children(node_iter) # check for children
     if node_iter != None and not forward: node_iter = self.dad.get_tree_iter_last_sibling(node_iter)
     while node_iter != None:
         if self.parse_node_name(node_iter, pattern, forward, all_matches)\
         and not all_matches: return True
         if forward: node_iter = self.dad.treestore.iter_next(node_iter)
         else: node_iter = self.dad.get_tree_iter_prev_sibling(self.dad.treestore, node_iter)
     return False
Example #2
0
 def parse_node_name(self, node_iter, pattern, forward, all_matches):
     """Recursive function that searchs for the given pattern"""
     text_name = self.dad.treestore[node_iter][1].decode(cons.STR_UTF8)
     match = pattern.search(text_name)
     if not match:
         text_tags = self.dad.treestore[node_iter][6].decode(cons.STR_UTF8)
         match = pattern.search(text_tags)
     if match:
         if all_matches:
             node_id = self.dad.treestore[node_iter][3]
             node_name = self.dad.treestore[node_iter][1]
             node_hier_name = support.get_node_hierarchical_name(self.dad, node_iter, separator=" << ", for_filename=False, root_to_leaf=False)
             line_content = self.get_first_line_content(self.dad.get_textbuffer_from_tree_iter(node_iter))
             self.liststore.append([node_id, 0, 0, node_name, line_content, 1, cgi.escape(node_hier_name)])
         if self.replace_active and not self.dad.treestore[node_iter][7]:
             replacer_text = self.dad.search_replace_dict['replace']
             text_name = text_name.replace(self.curr_find[1], replacer_text)
             self.dad.treestore[node_iter][1] = text_name
             self.dad.ctdb_handler.pending_edit_db_node_prop(self.dad.treestore[node_iter][3])
         if not all_matches:
             self.dad.treeview_safe_set_cursor(node_iter)
             self.dad.sourceview.grab_focus()
             return True
         else: self.matches_num += 1
     node_iter = self.dad.treestore.iter_children(node_iter) # check for children
     if node_iter != None and not forward: node_iter = self.dad.get_tree_iter_last_sibling(node_iter)
     while node_iter != None:
         if self.parse_node_name(node_iter, pattern, forward, all_matches)\
         and not all_matches: return True
         if forward: node_iter = self.dad.treestore.iter_next(node_iter)
         else: node_iter = self.dad.get_tree_iter_prev_sibling(self.dad.treestore, node_iter)
     return False
Example #3
0
 def nodes_all_export_to_txt_iter(self, tree_iter, single_txt_filepath, include_node_name):
     """Export All Nodes To Txt - iter"""
     text_buffer = self.dad.get_textbuffer_from_tree_iter(tree_iter)
     tree_iter_for_node_name = tree_iter if include_node_name else None
     if not single_txt_filepath:
         filepath = os.path.join(self.new_path,
                                 support.get_node_hierarchical_name(self.dad, tree_iter) + ".txt")
         self.node_export_to_txt(text_buffer, filepath, tree_iter_for_node_name=tree_iter_for_node_name)
     else:
         self.node_export_to_txt(text_buffer, single_txt_filepath, tree_iter_for_node_name=tree_iter_for_node_name)
     child_tree_iter = self.dad.treestore.iter_children(tree_iter)
     while child_tree_iter:
         self.nodes_all_export_to_txt_iter(child_tree_iter, single_txt_filepath, include_node_name)
         child_tree_iter = self.dad.treestore.iter_next(child_tree_iter)
 def find_pattern(self, tree_iter, text_buffer, pattern, start_iter, forward, all_matches):
     """Returns (start_iter, end_iter) or (None, None)"""
     text = unicode(text_buffer.get_text(*text_buffer.get_bounds()), cons.STR_UTF8, cons.STR_IGNORE)
     if not self.dad.search_replace_dict['reg_exp']: # NOT REGULAR EXPRESSION
         pattern = re.escape(pattern) # backslashes all non alphanum chars => to not spoil re
         if self.dad.search_replace_dict['whole_word']: # WHOLE WORD
             pattern = r'\b' + pattern + r'\b'
         elif self.dad.search_replace_dict['start_word']: # START WORD
             pattern = r'\b' + pattern
     if self.dad.search_replace_dict['match_case']: # CASE SENSITIVE
         pattern = re.compile(pattern, re.UNICODE|re.MULTILINE)
     else: pattern = re.compile(pattern, re.IGNORECASE|re.UNICODE|re.MULTILINE)
     start_offset = start_iter.get_offset()
     #start_offset -= self.get_num_objs_before_offset(text_buffer, start_offset)
     if forward:
         match = pattern.search(text, start_offset)
     else:
         match = None
         for temp_match in pattern.finditer(text, 0, start_offset): match = temp_match
     if self.replace_active: obj_match_offsets = (None, None)
     else: obj_match_offsets = self.check_pattern_in_object_between(text_buffer,
         pattern,
         start_iter.get_offset(),
         match.start() if match else -1,
         forward)
     if obj_match_offsets[0] != None: match_offsets = (obj_match_offsets[0], obj_match_offsets[1])
     else: match_offsets = (match.start(), match.end()) if match else (None, None)
     if match_offsets[0] == None: return False
     # match found!
     if obj_match_offsets[0] == None: num_objs = self.get_num_objs_before_offset(text_buffer, match_offsets[0])
     else: num_objs = 0
     final_start_offset = match_offsets[0] + num_objs
     final_delta_offset = match_offsets[1] - match_offsets[0]
     #print "IN", final_start_offset, final_delta_offset, self.dad.treestore[tree_iter][1]
     #for count in range(final_delta_offset):
     #    print count, text_buffer.get_iter_at_offset(final_start_offset+count).get_char()
     if not self.dad.curr_tree_iter\
     or self.dad.treestore[tree_iter][3] != self.dad.treestore[self.dad.curr_tree_iter][3]:
         self.dad.treeview_safe_set_cursor(tree_iter)
     self.dad.set_selection_at_offset_n_delta(final_start_offset, final_delta_offset)
     #print "OUT"
     mark_insert = text_buffer.get_insert()
     iter_insert = text_buffer.get_iter_at_mark(mark_insert)
     if all_matches:
         if self.newline_trick: newline_trick_offset = 1
         else: newline_trick_offset = 0
         node_id = self.dad.treestore[tree_iter][3]
         start_offset = match_offsets[0] + num_objs - newline_trick_offset
         end_offset = match_offsets[1] + num_objs - newline_trick_offset
         node_name = self.dad.treestore[tree_iter][1]
         node_hier_name = support.get_node_hierarchical_name(self.dad, tree_iter, separator=" << ", for_filename=False, root_to_leaf=False)
         line_content = self.get_line_content(text_buffer, iter_insert) if obj_match_offsets[0] == None else obj_match_offsets[2]
         line_num = text_buffer.get_iter_at_offset(start_offset).get_line()
         if not self.newline_trick: line_num += 1
         self.liststore.append([node_id, start_offset, end_offset, node_name, line_content, line_num, cgi.escape(node_hier_name)])
         #print line_num, self.matches_num
     else: self.dad.sourceview.scroll_to_mark(mark_insert, 0.25)
     if self.replace_active:
         if self.dad.is_curr_node_read_only(): return False
         replacer_text = self.dad.search_replace_dict['replace']
         text_buffer.delete_selection(interactive=False, default_editable=True)
         text_buffer.insert_at_cursor(replacer_text)
         if not all_matches:
             self.dad.set_selection_at_offset_n_delta(match_offsets[0] + num_objs, len(replacer_text))
         self.dad.state_machine.update_state()
         self.dad.ctdb_handler.pending_edit_db_node_buff(self.dad.treestore[tree_iter][3], force_user_active=True)
     return True
Example #5
0
 def find_pattern(self, tree_iter, text_buffer, pattern, start_iter, forward, all_matches):
     """Returns (start_iter, end_iter) or (None, None)"""
     text = unicode(text_buffer.get_text(*text_buffer.get_bounds()), cons.STR_UTF8, cons.STR_IGNORE)
     if not self.dad.search_replace_dict['reg_exp']: # NOT REGULAR EXPRESSION
         pattern = re.escape(pattern) # backslashes all non alphanum chars => to not spoil re
         if self.dad.search_replace_dict['whole_word']: # WHOLE WORD
             pattern = r'\b' + pattern + r'\b'
         elif self.dad.search_replace_dict['start_word']: # START WORD
             pattern = r'\b' + pattern
     if self.dad.search_replace_dict['match_case']: # CASE SENSITIVE
         pattern = re.compile(pattern, re.UNICODE|re.MULTILINE)
     else: pattern = re.compile(pattern, re.IGNORECASE|re.UNICODE|re.MULTILINE)
     start_offset = start_iter.get_offset()
     start_offset -= self.get_num_objs_before_offset(text_buffer, start_offset)
     if forward:
         match = pattern.search(text, start_offset)
     else:
         match = None
         for temp_match in pattern.finditer(text, 0, start_offset): match = temp_match
     if self.replace_active: obj_match_offsets = (None, None)
     else: obj_match_offsets = self.check_pattern_in_object_between(text_buffer,
         pattern,
         start_iter.get_offset(),
         match.start() if match else -1,
         forward)
     if obj_match_offsets[0] != None: match_offsets = (obj_match_offsets[0], obj_match_offsets[1])
     else: match_offsets = (match.start(), match.end()) if match else (None, None)
     if match_offsets[0] == None: return False
     # match found!
     if obj_match_offsets[0] == None: num_objs = self.get_num_objs_before_offset(text_buffer, match_offsets[0])
     else: num_objs = 0
     final_start_offset = match_offsets[0] + num_objs
     final_delta_offset = match_offsets[1] - match_offsets[0]
     #print "IN", final_start_offset, final_delta_offset, self.dad.treestore[tree_iter][1]
     #for count in range(final_delta_offset):
     #    print count, text_buffer.get_iter_at_offset(final_start_offset+count).get_char()
     if not self.dad.curr_tree_iter\
     or self.dad.treestore[tree_iter][3] != self.dad.treestore[self.dad.curr_tree_iter][3]:
         self.dad.treeview_safe_set_cursor(tree_iter)
     self.dad.set_selection_at_offset_n_delta(final_start_offset, final_delta_offset)
     #print "OUT"
     mark_insert = text_buffer.get_insert()
     iter_insert = text_buffer.get_iter_at_mark(mark_insert)
     if all_matches:
         if self.newline_trick: newline_trick_offset = 1
         else: newline_trick_offset = 0
         node_id = self.dad.treestore[tree_iter][3]
         start_offset = match_offsets[0] + num_objs - newline_trick_offset
         end_offset = match_offsets[1] + num_objs - newline_trick_offset
         node_name = self.dad.treestore[tree_iter][1]
         node_hier_name = support.get_node_hierarchical_name(self.dad, tree_iter, separator=" << ", for_filename=False, root_to_leaf=False)
         line_content = self.get_line_content(text_buffer, iter_insert) if obj_match_offsets[0] == None else obj_match_offsets[2]
         line_num = text_buffer.get_iter_at_offset(start_offset).get_line()
         if not self.newline_trick: line_num += 1
         self.liststore.append([node_id, start_offset, end_offset, node_name, line_content, line_num, cgi.escape(node_hier_name)])
         #print line_num, self.matches_num
     else: self.dad.sourceview.scroll_to_mark(mark_insert, 0.25)
     if self.replace_active:
         if self.dad.is_curr_node_read_only(): return False
         replacer_text = self.dad.search_replace_dict['replace']
         text_buffer.delete_selection(interactive=False, default_editable=True)
         text_buffer.insert_at_cursor(replacer_text)
         if not all_matches:
             self.dad.set_selection_at_offset_n_delta(match_offsets[0] + num_objs, len(replacer_text))
         self.dad.state_machine.update_state(self.dad.treestore[tree_iter][3])
         self.dad.ctdb_handler.pending_edit_db_node_buff(self.dad.treestore[tree_iter][3], force_user_active=True)
     return True