Beispiel #1
0
 def is_cell_separator(self, cursor=None, block=None):
     """Return True if cursor (or text block) is on a block separator"""
     assert cursor is not None or block is not None
     if cursor is not None:
         cursor0 = QTextCursor(cursor)
         cursor0.select(QTextCursor.BlockUnderCursor)
         text = to_text_string(cursor0.selectedText())
     else:
         text = to_text_string(block.text())
     return text.lstrip().startswith(self.CELL_SEPARATORS)
Beispiel #2
0
 def is_cell_separator(self, cursor=None, block=None):
     """Return True if cursor (or text block) is on a block separator"""
     assert cursor is not None or block is not None
     if cursor is not None:
         cursor0 = QTextCursor(cursor)
         cursor0.select(QTextCursor.BlockUnderCursor)
         text = to_text_string(cursor0.selectedText())
     else:
         text = to_text_string(block.text())
     return text.lstrip().startswith(self.CELL_SEPARATORS)
Beispiel #3
0
    def slotCursorPositionChanged(self):
        """Called whenever the cursor position changes.
        
        Highlights matching characters if the cursor is at one of them.
        
        """
        cursor = self.edit().textCursor()
        block = cursor.block()
        text = block.text()

        # try both characters at the cursor
        col = cursor.position() - block.position()
        end = col + 1
        col = max(0, col - 1)
        for c in text[col:end]:
            if c in self.matchPairs:
                break
            col += 1
        else:
            self.clear()
            return

        # the cursor is at a character from matchPairs
        i = self.matchPairs.index(c)
        cursor.setPosition(block.position() + col)

        # find the matching character
        new = QTextCursor(cursor)
        if i & 1:
            # look backward
            match = self.matchPairs[i - 1]
            flags = QTextDocument.FindBackward
        else:
            # look forward
            match = self.matchPairs[i + 1]
            flags = QTextDocument.FindFlags()
            new.movePosition(QTextCursor.Right)

        # search, also nesting
        rx = QRegExp(QRegExp.escape(c) + "|" + QRegExp.escape(match))
        nest = 0
        while nest >= 0:
            new = cursor.document().find(rx, new, flags)
            if new.isNull():
                self.clear()
                return
            nest += 1 if new.selectedText() == c else -1
        cursor.movePosition(QTextCursor.Right, QTextCursor.KeepAnchor)
        self.highlight([cursor, new])
Beispiel #4
0
 def slotCursorPositionChanged(self):
     """Called whenever the cursor position changes.
     
     Highlights matching characters if the cursor is at one of them.
     
     """
     cursor = self.edit().textCursor()
     block = cursor.block()
     text = block.text()
     
     # try both characters at the cursor
     col = cursor.position() - block.position()
     end = col + 1
     col = max(0, col - 1)
     for c in text[col:end]:
         if c in self.matchPairs:
             break
         col += 1
     else:
         self.clear()
         return
     
     # the cursor is at a character from matchPairs
     i = self.matchPairs.index(c)
     cursor.setPosition(block.position() + col)
     
     # find the matching character
     new = QTextCursor(cursor)
     if i & 1:
         # look backward
         match = self.matchPairs[i-1]
         flags = QTextDocument.FindBackward
     else:
         # look forward
         match = self.matchPairs[i+1]
         flags = QTextDocument.FindFlags()
         new.movePosition(QTextCursor.Right)
     
     # search, also nesting
     rx = QRegExp(QRegExp.escape(c) + '|' + QRegExp.escape(match))
     nest = 0
     while nest >= 0:
         new = cursor.document().find(rx, new, flags)
         if new.isNull():
             self.clear()
             return
         nest += 1 if new.selectedText() == c else -1
     cursor.movePosition(QTextCursor.Right, QTextCursor.KeepAnchor)
     self.highlight([cursor, new])
Beispiel #5
0
	def __searchDocument(self, document, pattern, settings):
		"""
		Searches for given pattern occurrences in given document using given settings.

		:param document: Document.
		:type document: QTextDocument
		:param pattern: Pattern.
		:type pattern: unicode
		:param settings: Search settings.
		:type settings: Structure
		:return: Matched occurrences.
		:rtype: list
		"""

		pattern = settings.regularExpressions and QRegExp(pattern) or pattern

		flags = QTextDocument.FindFlags()
		if settings.caseSensitive:
			flags = flags | QTextDocument.FindCaseSensitively
		if settings.wholeWord:
			flags = flags | QTextDocument.FindWholeWords

		occurrences = []
		block = document.findBlock(0)
		cursor = document.find(pattern, block.position(), flags)
		while block.isValid() and cursor.position() != -1:
			if self.__interrupt:
				return

			blockCursor = QTextCursor(cursor)
			blockCursor.movePosition(QTextCursor.StartOfLine, QTextCursor.MoveAnchor)
			blockCursor.movePosition(QTextCursor.EndOfLine, QTextCursor.KeepAnchor)
			length = cursor.selectionEnd() - cursor.selectionStart()
			occurrences.append(Occurence(line=cursor.blockNumber(),
										column=cursor.columnNumber() - length,
										length=length,
										position=cursor.position() - length,
										text=blockCursor.selectedText()))
			cursor = document.find(pattern, cursor.position(), flags)
			block = block.next()
		return occurrences
Beispiel #6
0
 def toLowerCase(self):
     global reWord # the regex \b\w+\b
     tc = QTextCursor(self.textCursor())
     if not tc.hasSelection() :
         return # no selection, nothing to do
     startpos = tc.selectionStart()
     endpos = tc.selectionEnd()
     qs = QString(tc.selectedText()) # copy of selected text
     i = reWord.indexIn(qs,0) # index of first word if any
     if i < 0 : return # no words in selection, exit
     while i >= 0:
         w = reWord.cap(0) # found word as QString
         n = w.size() # its length
         qs.replace(i,n,w.toLower()) # replace it with UC version
         i = reWord.indexIn(qs,i+n) # find next word if any
     # we have changed at least one word, replace selection with altered text
     tc.insertText(qs)
     # that wiped the selection, so restore it by "dragging" left to right
     tc.setPosition(startpos,QTextCursor.MoveAnchor) # click
     tc.setPosition(endpos,QTextCursor.KeepAnchor)   # drag
     self.setTextCursor(tc)
Beispiel #7
0
 def toLowerCase(self):
     global reWord  # the regex \b\w+\b
     tc = QTextCursor(self.textCursor())
     if not tc.hasSelection():
         return  # no selection, nothing to do
     startpos = tc.selectionStart()
     endpos = tc.selectionEnd()
     qs = QString(tc.selectedText())  # copy of selected text
     i = reWord.indexIn(qs, 0)  # index of first word if any
     if i < 0: return  # no words in selection, exit
     while i >= 0:
         w = reWord.cap(0)  # found word as QString
         n = w.size()  # its length
         qs.replace(i, n, w.toLower())  # replace it with UC version
         i = reWord.indexIn(qs, i + n)  # find next word if any
     # we have changed at least one word, replace selection with altered text
     tc.insertText(qs)
     # that wiped the selection, so restore it by "dragging" left to right
     tc.setPosition(startpos, QTextCursor.MoveAnchor)  # click
     tc.setPosition(endpos, QTextCursor.KeepAnchor)  # drag
     self.setTextCursor(tc)
Beispiel #8
0
 def selectFoundText(self, cursor: QTextCursor):
     print(cursor.selectedText())
     cursor.select(QTextCursor.WordUnderCursor)