Beispiel #1
0
    def __init__(self, parent=None):

        self.keywordFormat = text_format(Qt.blue, QFont.Bold)
        self.stringFormat = text_format(Qt.darkGreen)
        self.defFormat = text_format(Qt.black, QFont.Bold)
        self.commentFormat = text_format(Qt.lightGray)
        self.decoratorFormat = text_format(Qt.darkGray)

        self.keywords = list(keyword.kwlist)

        self.rules = [(QRegExp(r"\b%s\b" % kwd), self.keywordFormat)
                      for kwd in self.keywords] + \
                     [(QRegExp(r"\bdef\s+([A-Za-z_]+[A-Za-z0-9_]+)\s*\("),
                       self.defFormat),
                      (QRegExp(r"\bclass\s+([A-Za-z_]+[A-Za-z0-9_]+)\s*\("),
                       self.defFormat),
                      (QRegExp(r"'.*'"), self.stringFormat),
                      (QRegExp(r'".*"'), self.stringFormat),
                      (QRegExp(r"#.*"), self.commentFormat),
                      (QRegExp(r"@[A-Za-z_]+[A-Za-z0-9_]+"),
                       self.decoratorFormat)]

        self.multilineStart = QRegExp(r"(''')|" + r'(""")')
        self.multilineEnd = QRegExp(r"(''')|" + r'(""")')

        super().__init__(parent)
    def __init__(self, parent):
        QSyntaxHighlighter.__init__(self, parent)

        self._multiLineCommentFormat = QTextCharFormat()
        self._multiLineCommentFormat.setForeground(Qt.lightGray)

        self._commentStartExpression = QRegExp("/\\*")
        self._commentEndExpression = QRegExp("\\*/")

        self.createKeywords()
        self.createOperators()
        self.createStrings()
        self.createArrows()
        self.createComments()
Beispiel #3
0
    def highlightBlock(self, text):
        for pattern, fmt in self.rules:
            exp = QRegExp(pattern)
            index = exp.indexIn(text)
            while index >= 0:
                length = exp.matchedLength()
                if exp.captureCount() > 0:
                    self.setFormat(exp.pos(1), len(str(exp.cap(1))), fmt)
                else:
                    self.setFormat(exp.pos(0), len(str(exp.cap(0))), fmt)
                index = exp.indexIn(text, index + length)

        # Multi line strings
        start = self.multilineStart
        end = self.multilineEnd

        self.setCurrentBlockState(0)
        startIndex, skip = 0, 0
        if self.previousBlockState() != 1:
            startIndex, skip = start.indexIn(text), 3
        while startIndex >= 0:
            endIndex = end.indexIn(text, startIndex + skip)
            if endIndex == -1:
                self.setCurrentBlockState(1)
                commentLen = len(text) - startIndex
            else:
                commentLen = endIndex - startIndex + 3
            self.setFormat(startIndex, commentLen, self.stringFormat)
            startIndex, skip = (start.indexIn(text,
                                              startIndex + commentLen + 3), 3)
Beispiel #4
0
    def popup(self, pos=None, searchText=""):
        """
        Popup the menu at `pos` (in screen coordinates). 'Search' text field
        is initialized with `searchText` if provided.

        """
        if pos is None:
            pos = QPoint()

        self.__clearCurrentItems()

        self.__search.setText(searchText)
        patt = QRegExp("(^|\W)" + searchText)
        patt.setCaseSensitivity(False)
        self.__suggestPage.setFilterRegExp(patt)

        self.ensurePolished()

        if self.testAttribute(Qt.WA_Resized) and self.sizeGripEnabled():
            size = self.size()
        else:
            size = self.sizeHint()

        desktop = QApplication.desktop()
        screen_geom = desktop.availableGeometry(pos)

        # Adjust the size to fit inside the screen.
        if size.height() > screen_geom.height():
            size.setHeight(screen_geom.height())
        if size.width() > screen_geom.width():
            size.setWidth(screen_geom.width())

        geom = QRect(pos, size)

        if geom.top() < screen_geom.top():
            geom.setTop(screen_geom.top())

        if geom.left() < screen_geom.left():
            geom.setLeft(screen_geom.left())

        bottom_margin = screen_geom.bottom() - geom.bottom()
        right_margin = screen_geom.right() - geom.right()
        if bottom_margin < 0:
            # Falls over the bottom of the screen, move it up.
            geom.translate(0, bottom_margin)

        # TODO: right to left locale
        if right_margin < 0:
            # Falls over the right screen edge, move the menu to the
            # other side of pos.
            geom.translate(-size.width(), 0)

        self.setGeometry(geom)

        self.show()

        if searchText:
            self.setFocusProxy(self.__search)
        else:
            self.setFocusProxy(None)
Beispiel #5
0
    def createKeywords(self):
        keywordFormat = QTextCharFormat()
        keywordFormat.setForeground(QColor(64, 155, 11))

        keywords = [
            '\\babstract\\b', '\\bas\\b', '\\bbase\\b', '\\bbool\\b',
            '\\bbreak\\b', '\\bbyte\\b', '\\bcase\\b', '\\bcatch\\b',
            '\\bchar\\b', '\\bchecked\\b', '\\bclass\\b', '\\bconst\\b',
            '\\bcontinue\\b', '\\bdecimal\\b', '\\bdefault\\b',
            '\\bdelegate\\b', '\\bif\\b', '\\bimplicit\\b', '\\bin\\b',
            '\\bdo\\b', '\\bdouble\\b', '\\bint\\b', '\\binterface\\b',
            '\\belse\\b', '\\benum\\b', '\\bevent\\b', '\\bexplicit\\b',
            '\\bextern\\b', '\\bfalse\\b', '\\btrue\\b', '\\binternal\\b',
            '\\bfinally\\b', '\\bfixed\\b', '\\bfloat\\b', '\\bfor\\b',
            '\\bforeach\\b', '\\bgoto\\b', '\\bis\\b', '\\block\\b',
            '\\blong\\b', '\\bnamepsace\\b', '\\bnew\\b', '\\bnull\\b',
            '\\bobject\\b', '\\boperator\\b', '\\bout\\b', '\\boverride\\b',
            '\\bparams\\b', '\\bprivate\\b', '\\bprotected\\b', '\\bpublic\\b',
            '\\breadonly\\b', '\\bref\\b', '\\breturn\\b', '\\bsbyte\\b',
            '\\bsealed\\b', '\\bshort\\b', '\\bsizeof\\b', '\\bstackalloc\\b',
            '\\bstatic\\b', '\\bstring\\b', '\\bstruct\\b', '\\bswitch\\b',
            '\\bthis\\b', '\\bthrow\\b', '\\btry\\b', '\\btypeof\\b',
            '\\buint\\b', '\\bulong\\b', '\\bunchecked\\b', '\\bunsafe\\b',
            '\\bushort\\b', '\\busing\\b', '\\bvirtual\\b', '\\bvoid\\b',
            '\\bvolatile\\b', '\\bwhile\\b', '\\bpackage\\b', '\\bimport\\b',
            '\\bthrows\\b'
        ]

        self.highlightingRules = [(QRegExp(pattern), keywordFormat)
                                  for pattern in keywords]
Beispiel #6
0
 def __on_textEdited(self, text):
     patt = QRegExp("(^|\W)" + text)
     patt.setCaseSensitivity(False)
     self.__suggestPage.setFilterRegExp(patt)
     self.__pages.setCurrentPage(self.__suggestPage)
     self.__selectFirstIndex()
     UsageStatistics.set_last_search_query(text)
Beispiel #7
0
 def _filter_table_variables(self):
     regex = QRegExp(self.filter_string)
     # If the user explicitly types different cases, we assume they know
     # what they are searching for and account for letter case in filter
     different_case = (any(c.islower() for c in self.filter_string)
                       and any(c.isupper() for c in self.filter_string))
     if not different_case:
         regex.setCaseSensitivity(Qt.CaseInsensitive)
 def __on_textEdited(self, text):
     # type: (str) -> None
     patt = QRegExp(r"(^|\W)" + text)
     patt.setCaseSensitivity(Qt.CaseInsensitive)
     self.__suggestPage.setFilterRegExp(patt)
     self.__pages.setCurrentPage(self.__suggestPage)
     self.__selectFirstIndex()
     UsageStatistics.set_last_search_query(text)
Beispiel #9
0
    def createClassVariables(self):
        keywordFormat = QTextCharFormat()
        keywordFormat.setForeground(QColor(223, 109, 209))

        keywords = ['self', '__init__']

        self.highlightingRules.extend([(QRegExp(pattern), keywordFormat)
                                       for pattern in keywords])
Beispiel #10
0
    def createOperators(self):
        operatorFormat = QTextCharFormat()
        operatorFormat.setForeground(Qt.blue)

        operators = ['\\+', '-', '/', '\\*', '(', ')', '[', ']', '{', '}']

        self.highlightingRules.extend([(QRegExp(pattern), operatorFormat)
                                       for pattern in operators])
Beispiel #11
0
    def __init__(self, tree, dataset, master, parent=None):
        QLineEdit.__init__(self, parent)
        Control.__init__(self, tree, dataset, master)

        if hasattr(tree, "regexp"):
            self.setValidator(QRegExpValidator(QRegExp(tree.regexp), self))

        if hasattr(tree, "defaultValue"):
            self.setText(tree.defaultValue)
    def createOperators(self):
        operatorFormat = QTextCharFormat()
        operatorFormat.setForeground(QColor(148, 99, 233))
        operatorFormat.setFontWeight(QFont.Bold)

        operators = [
            '\\+', '-', '/', '\\*', '=', '==', '!=', '<=', '>=', '<', '>'
        ]

        self.highlightingRules.extend([(QRegExp(pattern), operatorFormat)
                                       for pattern in operators])
    def createKeywords(self):
        keywordFormat = QTextCharFormat()
        keywordFormat.setForeground(QColor(64, 155, 11))

        keywords = [
            '\\bchar\\b', '\\bclass\\b', '\\bconst\\b', '\\bdouble\\b',
            '\\benum\\b', '\\bexplicit\\b', '\\bfriend\\b', '\\binline\\b',
            '\\bint\\b', '\\blong\\b', '\\bnamespace\\b', '\\boperator\\b',
            '\\bprivate\\b', '\\bprotected\\b', '\\bpublic\\b', '\\bshort\\b',
            '\\bfloat\\b', '\\bbool\\b', '\\bsignals\\b', '\\bsigned\\b',
            '\\bslots\\b', '\\bstatic\\b', '\\bstruct\\b', '\\btemplate\\b',
            '\\btypedef\\b', '\\btypename\\b', '\\bunion\\b', '\\bunsigned\\b',
            '\\bvirtual\\b', '\\bvoid\\b', '\\bvolatile\\b'
        ]

        self.highlightingRules = [(QRegExp(pattern), keywordFormat)
                                  for pattern in keywords]
Beispiel #14
0
    def createKeywords(self):
        keywordFormat = QTextCharFormat()
        keywordFormat.setForeground(Qt.darkBlue)
        keywordFormat.setFontWeight(QFont.Bold)

        keywords = [
            '\\band\\b', '\\bdel\\b', '\\bfor\\b', '\\bas\\b', '\\bassert\\b',
            '\\bbreak\\b', '\\bclass\\b', '\\bcontinue\\b', '\\bdef\\b',
            '\\belif\\b', '\\belse\\b', '\\bexcept\\b', '\\bexec\\b',
            '\\bFalse\\b', '\\bfinally\\b', '\\bfrom\\b', '\\bglobal\\b',
            '\\bif\\b', '\\bimport\\b', '\\bin\\b', '\\bis\\b', '\\blambda\\b',
            '\\bNone\\b', '\\bnonlocal\\b', '\\bnot\\b', '\bor\b',
            '\\bpass\\b', '\\bprint\\b', '\\braise\\b', '\\breturn\\b',
            '\\bTrue\\b', '\\btry\\b', '\\bwhile\\b', '\\bwith\\b',
            '\\byield\\b', '<', '<=', '>', '>=', '==', '!='
        ]

        self.highlightingRules = [(QRegExp(pattern), keywordFormat)
                                  for pattern in keywords]
Beispiel #15
0
 def add_datetime(contents):
     le = add_textual(contents)
     le.setValidator(QRegExpValidator(QRegExp(TimeVariable.REGEX)))
     return le
 def createComments(self):
     singleLineCommentFormat = QTextCharFormat()
     singleLineCommentFormat.setForeground(Qt.gray)
     self.highlightingRules.append(
         (QRegExp('//[^\n]*'), singleLineCommentFormat))
 def createArrows(self):
     arrowFormat = QTextCharFormat()
     arrowFormat.setForeground(Qt.red)
     arrows = ['<-', '->']
     self.highlightingRules.extend([(QRegExp(pattern), arrowFormat)
                                    for pattern in arrows])
 def createStrings(self):
     stringFormat = QTextCharFormat()
     stringFormat.setForeground(Qt.lightGray)
     self.highlightingRules.append((QRegExp('\".*\"'), stringFormat))
     self.highlightingRules.append((QRegExp('\'.*\''), stringFormat))
 def __on_textEdited(self, text):
     patt = QRegExp("(^|\W)" + text)
     patt.setCaseSensitivity(False)
     self.__suggestPage.setFilterRegExp(patt)
     self.__pages.setCurrentPage(self.__suggestPage)
Beispiel #20
0
 def createAnnotations(self):
     annotationFormat = QTextCharFormat()
     annotationFormat.setForeground(QColor(108, 204, 255))
     self.highlightingRules.append((QRegExp('@[^\n]*'), annotationFormat))