aboutsummaryrefslogtreecommitdiffstats
path: root/examples/widgets/richtext/syntaxhighlighter.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/widgets/richtext/syntaxhighlighter.py')
-rw-r--r--examples/widgets/richtext/syntaxhighlighter.py203
1 files changed, 0 insertions, 203 deletions
diff --git a/examples/widgets/richtext/syntaxhighlighter.py b/examples/widgets/richtext/syntaxhighlighter.py
deleted file mode 100644
index 52b3d53b8..000000000
--- a/examples/widgets/richtext/syntaxhighlighter.py
+++ /dev/null
@@ -1,203 +0,0 @@
-
-#############################################################################
-##
-## Copyright (C) 2013 Riverbank Computing Limited.
-## Copyright (C) 2016 The Qt Company Ltd.
-## Contact: http://www.qt.io/licensing/
-##
-## This file is part of the Qt for Python examples of the Qt Toolkit.
-##
-## $QT_BEGIN_LICENSE:BSD$
-## You may use this file under the terms of the BSD license as follows:
-##
-## "Redistribution and use in source and binary forms, with or without
-## modification, are permitted provided that the following conditions are
-## met:
-## * Redistributions of source code must retain the above copyright
-## notice, this list of conditions and the following disclaimer.
-## * Redistributions in binary form must reproduce the above copyright
-## notice, this list of conditions and the following disclaimer in
-## the documentation and/or other materials provided with the
-## distribution.
-## * Neither the name of The Qt Company Ltd nor the names of its
-## contributors may be used to endorse or promote products derived
-## from this software without specific prior written permission.
-##
-##
-## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-"""PySide6 port of the widgets/richtext/syntaxhighlighter example from Qt v5.x"""
-
-from PySide6 import QtCore, QtGui, QtWidgets
-
-
-class MainWindow(QtWidgets.QMainWindow):
- def __init__(self, parent=None):
- super(MainWindow, self).__init__(parent)
-
- self.setupFileMenu()
- self.setupHelpMenu()
- self.setupEditor()
-
- self.setCentralWidget(self.editor)
- self.setWindowTitle("Syntax Highlighter")
-
- def about(self):
- QtWidgets.QMessageBox.about(self, "About Syntax Highlighter",
- "<p>The <b>Syntax Highlighter</b> example shows how to " \
- "perform simple syntax highlighting by subclassing the " \
- "QSyntaxHighlighter class and describing highlighting " \
- "rules using regular expressions.</p>")
-
- def newFile(self):
- self.editor.clear()
-
- def openFile(self, path=None):
- if not path:
- path = QtWidgets.QFileDialog.getOpenFileName(self, "Open File",
- '', "C++ Files (*.cpp *.h)")
-
- if path:
- inFile = QtCore.QFile(path[0])
- if inFile.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text):
- text = inFile.readAll()
- text = str(text, encoding='ascii')
- self.editor.setPlainText(text)
-
- def setupEditor(self):
- font = QtGui.QFont()
- font.setFamily('Courier')
- font.setFixedPitch(True)
- font.setPointSize(10)
-
- self.editor = QtWidgets.QTextEdit()
- self.editor.setFont(font)
-
- self.highlighter = Highlighter(self.editor.document())
-
- def setupFileMenu(self):
- fileMenu = QtWidgets.QMenu("&File", self)
- self.menuBar().addMenu(fileMenu)
-
- fileMenu.addAction("&New...", self.newFile, "Ctrl+N")
- fileMenu.addAction("&Open...", self.openFile, "Ctrl+O")
- fileMenu.addAction("E&xit", qApp.quit, "Ctrl+Q")
-
- def setupHelpMenu(self):
- helpMenu = QtWidgets.QMenu("&Help", self)
- self.menuBar().addMenu(helpMenu)
-
- helpMenu.addAction("&About", self.about)
- helpMenu.addAction("About &Qt", qApp.aboutQt)
-
-
-class Highlighter(QtGui.QSyntaxHighlighter):
- def __init__(self, parent=None):
- super(Highlighter, self).__init__(parent)
-
- keywordFormat = QtGui.QTextCharFormat()
- keywordFormat.setForeground(QtCore.Qt.darkBlue)
- keywordFormat.setFontWeight(QtGui.QFont.Bold)
-
- keywordPatterns = ["\\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", "\\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 = [(QtCore.QRegularExpression(pattern), keywordFormat)
- for pattern in keywordPatterns]
-
- classFormat = QtGui.QTextCharFormat()
- classFormat.setFontWeight(QtGui.QFont.Bold)
- classFormat.setForeground(QtCore.Qt.darkMagenta)
- pattern = QtCore.QRegularExpression(r'\bQ[A-Za-z]+\b')
- assert pattern.isValid()
- self.highlightingRules.append((pattern, classFormat))
-
- singleLineCommentFormat = QtGui.QTextCharFormat()
- singleLineCommentFormat.setForeground(QtCore.Qt.red)
- pattern = QtCore.QRegularExpression('//[^\n]*')
- assert pattern.isValid()
- self.highlightingRules.append((pattern, singleLineCommentFormat))
-
- self.multiLineCommentFormat = QtGui.QTextCharFormat()
- self.multiLineCommentFormat.setForeground(QtCore.Qt.red)
-
- quotationFormat = QtGui.QTextCharFormat()
- quotationFormat.setForeground(QtCore.Qt.darkGreen)
- pattern = QtCore.QRegularExpression('".*"')
- assert pattern.isValid()
- self.highlightingRules.append((pattern, quotationFormat))
-
- functionFormat = QtGui.QTextCharFormat()
- functionFormat.setFontItalic(True)
- functionFormat.setForeground(QtCore.Qt.blue)
- pattern = QtCore.QRegularExpression(r'\b[A-Za-z0-9_]+(?=\()')
- assert pattern.isValid()
- self.highlightingRules.append((pattern, functionFormat))
-
- self.commentStartExpression = QtCore.QRegularExpression(r'/\*')
- assert self.commentStartExpression.isValid()
- self.commentEndExpression = QtCore.QRegularExpression(r'\*/')
- assert self.commentEndExpression.isValid()
-
- def highlightBlock(self, text):
- for pattern, format in self.highlightingRules:
- match = pattern.match(text)
- while match.hasMatch():
- index = match.capturedStart(0)
- length = match.capturedLength(0)
- self.setFormat(index, length, format)
- match = pattern.match(text, index + length)
-
- self.setCurrentBlockState(0)
-
- startIndex = 0
- if self.previousBlockState() != 1:
- match = self.commentStartExpression.match(text)
- startIndex = match.capturedStart(0) if match.hasMatch() else -1
-
- while startIndex >= 0:
- match = self.commentEndExpression.match(text, startIndex)
- if match.hasMatch():
- endIndex = match.capturedStart(0)
- length = match.capturedLength(0)
- commentLength = endIndex - startIndex + length
- else:
- self.setCurrentBlockState(1)
- commentLength = len(text) - startIndex
-
- self.setFormat(startIndex, commentLength,
- self.multiLineCommentFormat)
- match = self.commentStartExpression.match(text, startIndex + commentLength)
- startIndex = match.capturedStart(0) if match.hasMatch() else -1
-
-
-if __name__ == '__main__':
-
- import sys
-
- app = QtWidgets.QApplication(sys.argv)
- window = MainWindow()
- window.resize(640, 512)
- window.show()
- sys.exit(app.exec_())