Example #1
0
    def on_evaluate(self, action):
        buffer = self.__active_page.buffer
        try:
            iter1, iter2 = buffer.get_selection_bounds()
        except ValueError:
            iter1 = buffer.get_iter_at_mark(buffer.get_insert())
            iter1.set_line_offset(0)

            iter2 = iter1.copy()
            iter2.forward_to_line_end()
            
            # evaluate block, if parenthesis is the only character in line
            if sced.is_block_beginning(buffer.get_text(iter1, iter2)):
                iter1, iter2 = buffer.find_block(iter1)
                buffer.select_range(iter1, iter2)

        text = buffer.get_text(iter1, iter2)
        self.__lang.evaluate(text)
    def find_block(self, where=None):
        # if nowhere, select from cursor
        if where is None:
            iter1 = self.get_iter_at_mark(self.get_insert())
            where = iter1.copy()
        else:
            iter1 = where.copy()
        
        # find first opening bracket
        while True:
            iter1.set_line_offset(0)
            
            iter2 = iter1.copy()
            iter2.forward_to_line_end()
            
            if sced.is_block_beginning(self.get_text(iter1, iter2)):
                break
            
            if not iter1.backward_line():
                raise RuntimeError, "Block not found!"
        
        iter2 = iter1.copy()
        count = 1
        
        while True:
            if not iter2.forward_char():
                raise RuntimeError, "Block not found!"

            if iter2.get_char() == "(":
                count += 1
            elif iter2.get_char() == ")":
                count -= 1
            
            if count == 0:
                break
        
        # include closing bracket and the following character
        # for proper behaviour of in_range below!
        iter2.forward_chars(2) 
        
        if where.in_range(iter1, iter2):
            return iter1, iter2
        else:
            raise RuntimeError, "Block not found!"
Example #3
0
    def __on_view_button_press (self, view, event):
        if event.type == gtk.gdk._2BUTTON_PRESS:
            x, y = self.view.window_to_buffer_coords(gtk.TEXT_WINDOW_WIDGET,
                int(event.x),
                int(event.y))

            iter1 = self.view.get_iter_at_location(x,y)
            iter1.set_line_offset(0)

            iter2 = iter1.copy()
            iter2.forward_to_line_end()

            if sced.is_block_beginning(self.buffer.get_text(iter1, iter2)):
                try:
                    start, end = self.buffer.find_block(iter1)
                    self.buffer.select_range(start, end)
                finally:
                    # although block not available, return True anyway
                    return True
        return False