Exemplo n.º 1
0
    def highlightCommentsOverLines(self, text, dls, dle):

        startExpression = QtCore.QRegExp(dls)
        endExpression = QtCore.QRegExp(dle)
        ref_state = 1

        if self.previousBlockState() == ref_state:
            start = 0
            add = 0

        else:
            start = startExpression.indexIn(text)
            add = startExpression.matchedLength()

        while start >= 0:
            end = endExpression.indexIn(text, start + add)

            if end >= add:
                length = end - start + add + endExpression.matchedLength()
                self.setCurrentBlockState(0)

            else:
                self.setCurrentBlockState(ref_state)
                if has_qstring:
                    length = text.length() - start + add
                else:
                    length = len(text) - start + add

            self.setFormat(start, length, format_styles['comment'])
            start = endExpression.indexIn(text, start + length)
Exemplo n.º 2
0
    def highlightBlock(self, text):
        """
        Apply the syntax highlighting
        """
        for rule in self.highlightingRules:
            exp = QtCore.QRegExp(rule.pattern)
            index = exp.indexIn(text)

            while index >= 0:
                length = exp.matchedLength()
                ok_to_highlight = True
                if len(text) > index + length:
                    if text[index + length] not in self.op + [' ']:
                        ok_to_highlight = False
                if text[index:index + length] not in self.op + self.br:
                    ok_to_highlight = True

                if ok_to_highlight:
                    self.setFormat(index, length, rule.format)
                if has_qstring:
                    index = text.indexOf(exp, index + length)
                else:
                    index = text.find(exp.cap(), index + length)

        self.setCurrentBlockState(0)

        # C/C++ comments
        self.highlightCommentsOverLines(text, "/\\*", "\\*/")
Exemplo n.º 3
0
    def __init__(self, parent, extension):

        QtGui.QSyntaxHighlighter.__init__(self, parent)
        self.parent = parent
        self.highlightingRules = []

        # Keywords (C or Fortran)
        fortran_kw = [
            'if', 'else', 'endif', 'do', 'enddo', 'end', 'implicit none',
            'use', 'subroutine', 'function', 'double precision', 'real',
            'integer', 'char', 'allocatable', 'allocate', 'deallocate',
            'dimension', 'select case'
        ]

        c_kw = [
            'if', 'else', 'for', 'switch', 'while', '\#', 'include', 'pass',
            'return', 'del', 'delete', 'assert', 'true', 'false', 'continue',
            'break', 'fprintf', 'bft_printf', 'bft_printf_flush', 'bft_error',
            'cs_real_t', 'cs_lnum_t', 'cs_real_3_t', 'int', 'char', 'string',
            'void', 'double', 'const', 'BEGIN_C_DECLS', 'END_C_DECLS'
        ]

        py_kw = [
            'if', 'elif', 'for', 'range', 'while', 'return', 'def', 'True',
            'False'
        ]

        self.kw = []
        # Fortran
        if extension in ['f90', 'F90', 'F', 'f77']:
            for kw in fortran_kw:
                self.kw.append(kw)
                self.kw.append(kw.upper())
        # C/C++
        elif extension in ['c', 'cpp', 'cxx', 'c++']:
            for kw in c_kw:
                self.kw.append(kw)
                self.kw.append(kw.upper())
        # Python
        elif extension == 'py':
            for kw in py_kw:
                self.kw.append(kw)

        # Operators
        self.op = [
            '=', '==', '!=', '<', '>', '<=', '>=', '\+', '-', '\*', '/', '\%',
            '\*\*', '\+=', '-=', '\*=', '/=', '->', '=>', '\^', '\|', '\&',
            '\|\|', '\&\&'
        ]

        # Braces
        self.br = ['\(', '\)', '\{', '\}', '\[', '\]']

        # RULES
        for kw in self.kw:
            p = QtCore.QRegExp("\\b" + kw + '\\b')
            rule = HighlightingRule(p, format_styles['keyword'])
            self.highlightingRules.append(rule)

        for op in self.op:
            p = QtCore.QRegExp(op)
            rule = HighlightingRule(p, format_styles['operator'])
            self.highlightingRules.append(rule)

        for br in self.br:
            p = QtCore.QRegExp(br)
            rule = HighlightingRule(p, format_styles['brace'])
            self.highlightingRules.append(rule)

        # strings
        ps = QtCore.QRegExp('"[^"\\]*(\\.[^"\\]*)*"')
        rs = HighlightingRule(ps, format_styles['string'])
        self.highlightingRules.append(rs)

        # comments
        pc = QtCore.QRegExp('//[^\n]*')
        rc = HighlightingRule(pc, format_styles['comment'])
        self.highlightingRules.append(rc)

        pcf = QtCore.QRegExp('![^\n]*')
        rcf = HighlightingRule(pcf, format_styles['comment'])
        self.highlightingRules.append(rcf)

        # numerals
        pn1 = QtCore.QRegExp('[+-]?[0-9]+[lL]?')
        rn1 = HighlightingRule(pn1, format_styles['expression'])
        self.highlightingRules.append(rn1)
        pn2 = QtCore.QRegExp('[+-]?0[xX][0-9A-Fa-f]+[lL]?')
        rn2 = HighlightingRule(pn2, format_styles['expression'])
        self.highlightingRules.append(rn2)
        pn3 = QtCore.QRegExp('[+-]?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?')
        rn3 = HighlightingRule(pn3, format_styles['expression'])
        self.highlightingRules.append(rn3)
Exemplo n.º 4
0
    def __init__(self, parent):

        QtGui.QSyntaxHighlighter.__init__(self, parent)
        self.parent = parent
        self.highlightingRules = []

        # Keywords (C or Fortran)
        self.kw = [
            'if', 'else', 'endif', '\#', 'include', 'void', 'int', 'integer',
            'double', 'const', 'fprintf', 'bft_printf', 'bft_printf_flush',
            'cs_real_t', 'subroutine', 'function', 'def', 'double precision',
            'use', 'implicit none', 'allocatable', 'dimension', 'string',
            'float', 'allocate', 'deallocate', 'char', 'for', 'while',
            'assert', 'continue', 'break', 'switch', 'del', 'pass', 'return',
            'true', 'false'
        ]

        # Operators
        self.op = [
            '=', '==', '!=', '<', '>', '<=', '>=', '\+', '-', '\*', '/', '\%',
            '\*\*', '\+=', '-=', '\*=', '/=', '\^', '\|', '\&', '\|\|', '\&\&'
        ]

        # Braces
        self.br = ['\(', '\)', '\{', '\}', '\[', '\]']

        # RULES
        for kw in self.kw:
            p = QtCore.QRegExp("\\b" + kw + '\\b')
            rule = HighlightingRule(p, format_styles['keyword'])
            self.highlightingRules.append(rule)

        for op in self.op:
            p = QtCore.QRegExp(op)
            rule = HighlightingRule(p, format_styles['operator'])
            self.highlightingRules.append(rule)

        for br in self.br:
            p = QtCore.QRegExp(br)
            rule = HighlightingRule(p, format_styles['brace'])
            self.highlightingRules.append(rule)

        # strings
        ps = QtCore.QRegExp('"[^"\\]*(\\.[^"\\]*)*"')
        rs = HighlightingRule(ps, format_styles['string'])
        self.highlightingRules.append(rs)

        # comments
        pc = QtCore.QRegExp('//[^\n]*')
        rc = HighlightingRule(pc, format_styles['comment'])
        self.highlightingRules.append(rc)

        pcf = QtCore.QRegExp('![^\n]*')
        rcf = HighlightingRule(pcf, format_styles['comment'])
        self.highlightingRules.append(rcf)

        # numerals
        pn1 = QtCore.QRegExp('[+-]?[0-9]+[lL]?')
        rn1 = HighlightingRule(pn1, format_styles['expression'])
        self.highlightingRules.append(rn1)
        pn2 = QtCore.QRegExp('[+-]?0[xX][0-9A-Fa-f]+[lL]?')
        rn2 = HighlightingRule(pn2, format_styles['expression'])
        self.highlightingRules.append(rn2)
        pn3 = QtCore.QRegExp('[+-]?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?')
        rn3 = HighlightingRule(pn3, format_styles['expression'])
        self.highlightingRules.append(rn3)