aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--doc/ScintillaHistory.html5
-rw-r--r--qt/README8
-rw-r--r--qt/ScintillaEditPy/README87
-rw-r--r--qt/ScintillaEditPy/ScintillaConstants.py.template6
-rw-r--r--qt/ScintillaEditPy/ScintillaEditPy.pro128
-rw-r--r--qt/ScintillaEditPy/global.h4
-rw-r--r--qt/ScintillaEditPy/sepbuild.py345
-rw-r--r--qt/ScintillaEditPy/testsepq.py157
-rw-r--r--qt/ScintillaEditPy/typesystem_ScintillaEdit.xml.template65
9 files changed, 6 insertions, 799 deletions
diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html
index c0d9f4e6b..91e989da7 100644
--- a/doc/ScintillaHistory.html
+++ b/doc/ScintillaHistory.html
@@ -575,6 +575,11 @@
Released 8 November 2021.
</li>
<li>
+ ScintillaEditPy, Python bindings for Qt using PySide, has been removed.
+ Scintilla was never updated for PySide 2 which was released in 2018 and PySide 1
+ fell out of support making it difficult to use.
+ </li>
+ <li>
When calling SCI_GETTEXT, SCI_GETSELTEXT, and SCI_GETCURLINE with a NULL buffer argument
to discover the length that should be allocated, do not include the terminating NUL in the returned value.
The value returned is 1 less than previous versions of Scintilla.
diff --git a/qt/README b/qt/README
index 3ad22e5d8..3459f74e7 100644
--- a/qt/README
+++ b/qt/README
@@ -1,6 +1,6 @@
README for building of Scintilla on Qt
-There are three different Scintilla libraries that can be produced:
+There are two different Scintilla libraries that can be produced:
ScintillaEditBase
A basic widget callable from C++ which is small and can be used just as is
@@ -10,9 +10,6 @@ or with higher level functionality added.
A more complete C++ widget with a method for every Scintilla API and a
secondary API allowing direct access to document objects.
- ScintillaEditPy
-A Python callable version of ScintillaEdit using the PySide bindings.
-
Building a library
ScintillaEditBase can be built without performing any generation steps.
@@ -33,6 +30,3 @@ After the generation command has run, the ScintillaEdit.h and
ScintillaEdit.cpp files will have been populated with the Scintilla API
methods.
To build, use Qt Creator or qmake and make as for ScintillaEditBase.
-
-ScintillaEditPy is more complex and instructions are found in
-ScintillaEditPy/README.
diff --git a/qt/ScintillaEditPy/README b/qt/ScintillaEditPy/README
deleted file mode 100644
index d0c653d20..000000000
--- a/qt/ScintillaEditPy/README
+++ /dev/null
@@ -1,87 +0,0 @@
-README for building of ScintillaEditPy on Qt with PySide
-
-This directory is for building a Python encapsulation of Scintilla for use
-with PySide. For C++ libraries see the README in the parent directory.
-
- Prerequisites
-
-PySide and ScintillaEditPy currently only support Python 2.x.
-
-CMake may be used to rebuild PySide and is required on Windows.
-It can be downloaded from
-http://www.cmake.org/cmake/resources/software.html
-
-On Windows, PySide only supports Visual C++ 2008. The "Visual Studio 2008
-Command Prompt" should be used to run all build commands.
-Visual C++ 2008 Express Edition can be downloaded from
-http://msdn.microsoft.com/en-us/express/future/bb421473
-
-Download and install PySide. Instructions are on the PySide web site
-http://developer.qt.nokia.com/wiki/Category:LanguageBindings::PySide::Downloads
-
-For Linux, there may be both PySide library packages and PySide development
-files. Both should be installed as ScintillaEditPy needs the headers and
-libraries from the development package and runs with the normal library package.
-On apt-based systems, the packages are libshiboken-dev, shiboken, libpyside-dev,
-and python-pyside. python-dev is also needed for Python language headers.
-On yum-based systems the packages are shiboken-devel, python-pyside-devel,
-and python-devel.
-The qmake program may be called qmake-qt5 or qmake-qt4.
-It can be found with:
-which qmake-qt5 || which qmake-qt4 || which qmake
-
-On Windows, the PySide library packages can be downloaded from
-http://developer.qt.nokia.com/wiki/PySide_Binaries_Windows
-The PySide development files must be built from source using CMake as
-described on the PySide site. This will create a Unix-style set of [bin, include,
-lib, and share] directories in packaging\setuptools\install-py<ver>-qt<qver>.
-There is no standard place for the PySide development files so copy them
-to "\usr", creating it if needed.
-
-On OS X, a combined package with PySide libraries and PySide development
-files can be downloaded from
-http://developer.qt.nokia.com/wiki/PySide_Binaries_MacOSX
-This package works best in combination with the Qt libraries for Mac from
-http://qt.nokia.com/downloads/downloads#qt-lib
-
-The path should be modified so that a Python 2.x interpreter and Qt's "qmake"
-program can be run by typing "python" or "qmake".
-
- Building
-
-There are several steps to building and they are encapsulated in the sepbuild.py
-script which is run:
-
-python sepbuild.py
-
-This script first runs the WidgetGen.py script to fill out the ScintillaEdit.h,
-ScintillaEdit.cpp and ScintillaConstants.py files.
-
-A short file "sepbuild.pri" is written out which contains a series of version and
-path properties discovered by sepbuild.py which are used by qmake.
-
-Then it runs PySide's "shiboken" program to create C++ code that will act as a
-bridge between Python and the C++ libraries. This code goes into the
-ScintillaEditPy/ScintillaEditPy directory. Several log files are produced which can
-help uncover problems in the bridge if it fails to build.
-
-The qmake program is run to produce make files from ScintillaEditPy.pro.
-
-The system make program is then run to build the library. The library is located in
-the scintilla/bin directory as ScintillaEditPy.so for Unix systems and
-ScintillaEditPy.pyd for Windows.
-
-A demonstration program can be run:
-
-python testsepq.py
-
-The individual steps in the script can be run manually if wanted although the
-shiboken program has complex arguments and differs between systems so run
-sepbuild.py and copy the section starting with a line containing "generatorrunner"
-and continuing to "typesystem_ScintillaEdit.xml".
-
-On Windows, it is more difficult to set up an environment to debug ScintillaEditPy
-since all the libraries have to be debug or all have to be release. The easy path
-is to always build for release with "nmake release".
-
-To remove generated code, run "python sepbuild.py --clean".
diff --git a/qt/ScintillaEditPy/ScintillaConstants.py.template b/qt/ScintillaEditPy/ScintillaConstants.py.template
deleted file mode 100644
index 31b82398d..000000000
--- a/qt/ScintillaEditPy/ScintillaConstants.py.template
+++ /dev/null
@@ -1,6 +0,0 @@
-# ScintillaConstants.py
-# Define all the symbolic constants from Scintilla.iface so Python code can use them
-# Copyright (c) 2011 Archaeopteryx Software, Inc. d/b/a Wingware
-
-# ++Autogenerated -- start of section automatically generated from Scintilla.iface */
-# --Autogenerated -- end of section automatically generated from Scintilla.iface */
diff --git a/qt/ScintillaEditPy/ScintillaEditPy.pro b/qt/ScintillaEditPy/ScintillaEditPy.pro
deleted file mode 100644
index 96f3ae8e7..000000000
--- a/qt/ScintillaEditPy/ScintillaEditPy.pro
+++ /dev/null
@@ -1,128 +0,0 @@
-TEMPLATE = lib
-QT += core gui
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
-
-TARGET = ScintillaEditPy
-
-# Clear debug & release so that sepbuild.pri can set one or the other
-CONFIG -= debug release
-CONFIG += c++1z
-
-include(sepbuild.pri)
-
-VERSION = $$SCINTILLA_VERSION
-
-win32 {
- DebugBuild {
- TARGET_EXT = _d.pyd
- }
- else {
- TARGET_EXT = .pyd
- }
-}
-
-INCLUDEPATH += ../ScintillaEdit
-INCLUDEPATH += ../ScintillaEditBase
-INCLUDEPATH += ../../include ../../lexlib ../../src
-
-INCLUDEPATH += $$PY_INCLUDES
-
-INCLUDEPATH += $$SHIBOKEN_INCLUDES
-INCLUDEPATH += $$PYSIDE_INCLUDES
-INCLUDEPATH += $$PYSIDE_INCLUDES/QtCore
-INCLUDEPATH += $$PYSIDE_INCLUDES/QtGui
-
-unix:!mac {
- LIBS += `pkg-config pyside --libs`
-}
-unix:linux-* {
- # gcc on freebsd 9.2, at least, doesn't support -Wno-empty-body
- # g++ 7.x has deprecated std::auto_ptr but that is used by code generated by Shiboken so
- # turn off warning.
- QMAKE_CXXFLAGS += -Wno-register -Wno-unused-parameter -Wno-empty-body -Wno-deprecated-declarations -Wno-deprecated-copy --std=gnu++17
- LIBS += -ldl
-}
-
-macx {
- # Only build for x64 for now
- # QMAKE_CFLAGS = -arch i386 -arch x86_64
- # QMAKE_CXXFLAGS = -arch i386 -arch x86_64
- # QMAKE_LFLAGS = -arch i386 -arch x86_64
- LIBS += -L$$PY_LIBDIR -lpython$$PY_VERSION_SUFFIX
- LIBS += -L$$PYSIDE_LIB -L$$SHIBOKEN_LIB
- debug {
- LIBS += -lshiboken-python$$PY_VERSION_SUFFIX-dbg
- LIBS += -lpyside-python$$PY_VERSION_SUFFIX-dbg
- }
- else {
- LIBS += -lshiboken-python$$PY_VERSION_SUFFIX
- LIBS += -lpyside-python$$PY_VERSION_SUFFIX
- }
-}
-
-win32 {
- DebugBuild {
- DEFINES += DEBUG
- LIBS += -lQtCored4
- }
- else {
- LIBS += -lQtCore
- }
- LIBS += -L$$PY_PREFIX/libs # Note python lib is pulled in via a #pragma
- LIBS += -L$$PYSIDE_LIB -L$$SHIBOKEN_LIB
- # PySide uses x.y suffix on Windows even though Python uses xy
- DebugBuild {
- LIBS += -lshiboken-python$${PY_VERSION}_d
- LIBS += -lpyside-python$${PY_VERSION}_d
- }
- else {
- LIBS += -lshiboken-python$${PY_VERSION}
- LIBS += -lpyside-python$${PY_VERSION}
- }
-}
-
-# Wrapper sources; notifyheader commented out due to shiboken bug
-SOURCES += \
- ScintillaEditPy/scintillaeditpy_module_wrapper.cpp \
- ScintillaEditPy/sci_notifyheader_wrapper.cpp \
- ScintillaEditPy/scnotification_wrapper.cpp \
- ScintillaEditPy/scintillaeditbase_wrapper.cpp \
- ScintillaEditPy/scintillaedit_wrapper.cpp \
- ScintillaEditPy/scintilladocument_wrapper.cpp
-
-# ScintillaEdit sources
-
-SOURCES += \
- ../ScintillaEdit/ScintillaEdit.cpp \
- ../ScintillaEdit/ScintillaDocument.cpp \
- ../ScintillaEditBase/PlatQt.cpp \
- ../ScintillaEditBase/ScintillaQt.cpp \
- ../ScintillaEditBase/ScintillaEditBase.cpp \
- $$files(../../src/*.cxx, false) \
- $$files(../../lexlib/*.cxx, false) \
- $$files(../../lexers/*.cxx, false)
-
-
-# HEADERS is used to find what needs to be run through moc
-HEADERS += \
- ../ScintillaEdit/ScintillaEdit.h \
- ../ScintillaEdit/ScintillaDocument.h \
- ../ScintillaEditBase/ScintillaQt.h \
- ../ScintillaEditBase/ScintillaEditBase.h
-
-DEFINES += SCINTILLA_QT=1 MAKING_LIBRARY=1 _CRT_SECURE_NO_DEPRECATE=1
-CONFIG(release, debug|release) {
- DEFINES += NDEBUG=1
-}
-
-DESTDIR = ../../bin
-
-unix:!mac {
- # Rename to not have 'lib' at start
- QMAKE_POST_LINK += rm -rf ../../bin/ScintillaEditPy.so && ln -s libScintillaEditPy.so ../../bin/ScintillaEditPy.so
-}
-
-macx {
- # Rename to .so and not have 'lib' at start
- QMAKE_POST_LINK += rm -rf ../../bin/ScintillaEditPy.so && ln -s libScintillaEditPy.dylib ../../bin/ScintillaEditPy.so
-}
diff --git a/qt/ScintillaEditPy/global.h b/qt/ScintillaEditPy/global.h
deleted file mode 100644
index 8b4be843a..000000000
--- a/qt/ScintillaEditPy/global.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "pyside_global.h"
-
-#include "ScintillaEditBase.h"
-#include "ScintillaEdit.h"
diff --git a/qt/ScintillaEditPy/sepbuild.py b/qt/ScintillaEditPy/sepbuild.py
deleted file mode 100644
index 7eae634d9..000000000
--- a/qt/ScintillaEditPy/sepbuild.py
+++ /dev/null
@@ -1,345 +0,0 @@
-#!/usr/bin/env python2
-import distutils.sysconfig
-import getopt
-import glob
-import os
-import platform
-import shutil
-import subprocess
-import stat
-import sys
-
-# ScintillaEditPy can only be built against Python 2.x so fail if Python 3.x
-assert sys.version_info < (3,0), "sepbuild.py requires Python 2.x"
-
-sys.path.append(os.path.join("..", "ScintillaEdit"))
-import WidgetGen
-
-scintillaDirectory = "../.."
-scintillaScriptsDirectory = os.path.join(scintillaDirectory, "scripts")
-sys.path.append(scintillaScriptsDirectory)
-from FileGenerator import GenerateFile
-
-# Decide up front which platform, treat anything other than Windows or OS X as Linux
-PLAT_WINDOWS = platform.system() == "Windows"
-PLAT_DARWIN = platform.system() == "Darwin"
-PLAT_LINUX = not (PLAT_DARWIN or PLAT_WINDOWS)
-
-def IsFileNewer(name1, name2):
- """ Returns whether file with name1 is newer than file with name2. Returns 1
- if name2 doesn't exist. """
-
- if not os.path.exists(name1):
- return 0
-
- if not os.path.exists(name2):
- return 1
-
- mod_time1 = os.stat(name1)[stat.ST_MTIME]
- mod_time2 = os.stat(name2)[stat.ST_MTIME]
- return (mod_time1 > mod_time2)
-
-def textFromRun(args):
- proc = subprocess.Popen(args, shell=isinstance(args, str), stdout=subprocess.PIPE)
- (stdoutdata, stderrdata) = proc.communicate()
- if proc.returncode:
- print("Warning - failed to run '" + " ".join(args) + "'")
- raise OSError(proc.returncode)
- return stdoutdata
-
-def runProgram(args, exitOnFailure):
- print(" ".join(args))
- retcode = subprocess.call(" ".join(args), shell=True, stderr=subprocess.STDOUT)
- if retcode:
- print("Failed in " + " ".join(args) + " return code = " + str(retcode))
- if exitOnFailure:
- sys.exit()
-
-def usage():
- print("sepbuild.py [-h|--help][-c|--clean][-u|--underscore-names]")
- print("")
- print("Generate PySide wappers and build them.")
- print("")
- print("options:")
- print("")
- print("-c --clean remove all object and generated files")
- print("-b --pyside-base Location of the PySide+Qt4 sandbox to use")
- print("-h --help display this text")
- print("-d --debug=yes|no force debug build (or non-debug build)")
- print("-u --underscore-names use method_names consistent with GTK+ standards")
-
-modifyFunctionElement = """ <modify-function signature="%s">%s
- </modify-function>"""
-
-injectCode = """
- <inject-code class="target" position="beginning">%s
- </inject-code>"""
-
-injectCheckN = """
- if (!cppArg%d) {
- PyErr_SetString(PyExc_ValueError, "Null string argument");
- return 0;
- }"""
-
-def methodSignature(name, v, options):
- argTypes = ""
- p1Type = WidgetGen.cppAlias(v["Param1Type"])
- if p1Type == "int":
- p1Type = "sptr_t"
- if p1Type:
- argTypes = argTypes + p1Type
- p2Type = WidgetGen.cppAlias(v["Param2Type"])
- if p2Type == "int":
- p2Type = "sptr_t"
- if p2Type and v["Param2Type"] != "stringresult":
- if p1Type:
- argTypes = argTypes + ", "
- argTypes = argTypes + p2Type
- methodName = WidgetGen.normalisedName(name, options, v["FeatureType"])
- constDeclarator = " const" if v["FeatureType"] == "get" else ""
- return methodName + "(" + argTypes + ")" + constDeclarator
-
-def printTypeSystemFile(f, options):
- out = []
- for name in f.order:
- v = f.features[name]
- if v["Category"] != "Deprecated":
- feat = v["FeatureType"]
- if feat in ["fun", "get", "set"]:
- checks = ""
- if v["Param1Type"] == "string":
- checks = checks + (injectCheckN % 0)
- if v["Param2Type"] == "string":
- if v["Param1Type"] == "": # Only arg 2 -> treat as first
- checks = checks + (injectCheckN % 0)
- else:
- checks = checks + (injectCheckN % 1)
- if checks:
- inject = injectCode % checks
- out.append(modifyFunctionElement % (methodSignature(name, v, options), inject))
- #if v["Param1Type"] == "string":
- # out.append("<string-xml>" + name + "</string-xml>\n")
- return out
-
-def doubleBackSlashes(s):
- # Quote backslashes so qmake does not produce warnings
- return s.replace("\\", "\\\\")
-
-class SepBuilder:
- def __init__(self):
- # Discover configuration parameters
- self.ScintillaEditIncludes = [".", "../ScintillaEdit", "../ScintillaEditBase", "../../include"]
- if PLAT_WINDOWS:
- self.MakeCommand = "nmake"
- self.MakeTarget = "release"
- else:
- self.MakeCommand = "make"
- self.MakeTarget = ""
-
- if PLAT_DARWIN:
- self.QMakeOptions = "-spec macx-g++"
- else:
- self.QMakeOptions = ""
-
- # Default to debug build if running in a debug build interpreter
- self.DebugBuild = hasattr(sys, 'getobjects')
-
- # Python
- self.PyVersion = "%d.%d" % sys.version_info[:2]
- self.PyVersionSuffix = distutils.sysconfig.get_config_var("VERSION")
- self.PyIncludes = distutils.sysconfig.get_python_inc()
- self.PyPrefix = distutils.sysconfig.get_config_var("prefix")
- self.PyLibDir = distutils.sysconfig.get_config_var(
- ("LIBDEST" if sys.platform == 'win32' else "LIBDIR"))
-
- # Scintilla
- with open("../../version.txt") as f:
- version = f.read()
- self.ScintillaVersion = version[0] + '.' + version[1] + '.' + version[2]
-
- # Find out what qmake is called
- self.QMakeCommand = "qmake"
- if not PLAT_WINDOWS:
- # On Unix qmake may not be present but qmake-qt4 may be so check
- pathToQMake = textFromRun("which qmake-qt4 || which qmake").rstrip()
- self.QMakeCommand = os.path.basename(pathToQMake)
-
- # Qt default location from qmake
- self._SetQtIncludeBase(textFromRun(self.QMakeCommand + " -query QT_INSTALL_HEADERS").rstrip())
-
- # PySide default location
- # No standard for installing PySide development headers and libs on Windows so
- # choose /usr to be like Linux
- self._setPySideBase('\\usr' if PLAT_WINDOWS else '/usr')
-
- self.ProInclude = "sepbuild.pri"
-
- self.qtStyleInterface = True
-
- def _setPySideBase(self, base):
-
- self.PySideBase = base
- def _try_pkgconfig(var, package, *relpath):
- try:
- return textFromRun(["pkg-config", "--variable=" + var, package]).rstrip()
- except OSError:
- return os.path.join(self.PySideBase, *relpath)
- self.PySideTypeSystem = _try_pkgconfig("typesystemdir", "pyside",
- "share", "PySide", "typesystems")
- self.PySideIncludeBase = _try_pkgconfig("includedir", "pyside",
- "include", "PySide")
- self.ShibokenIncludeBase = _try_pkgconfig("includedir", "shiboken",
- "include", "shiboken")
- self.PySideIncludes = [
- self.ShibokenIncludeBase,
- self.PySideIncludeBase,
- os.path.join(self.PySideIncludeBase, "QtCore"),
- os.path.join(self.PySideIncludeBase, "QtGui")]
-
- self.PySideLibDir = _try_pkgconfig("libdir", "pyside", "lib")
- self.ShibokenLibDir = _try_pkgconfig("libdir", "shiboken", "lib")
- self.AllIncludes = os.pathsep.join(self.QtIncludes + self.ScintillaEditIncludes + self.PySideIncludes)
-
- self.ShibokenGenerator = "shiboken"
- # Is this still needed? It doesn't work with latest shiboken sources
- #if PLAT_DARWIN:
- # # On OS X, can not automatically find Shiboken dylib so provide a full path
- # self.ShibokenGenerator = os.path.join(self.PySideLibDir, "generatorrunner", "shiboken")
-
- def generateAPI(self, args):
- os.chdir(os.path.join("..", "ScintillaEdit"))
- if not self.qtStyleInterface:
- args.insert(0, '--underscore-names')
- WidgetGen.main(args)
- f = WidgetGen.readInterface(False)
- os.chdir(os.path.join("..", "ScintillaEditPy"))
- options = {"qtStyle": self.qtStyleInterface}
- GenerateFile("typesystem_ScintillaEdit.xml.template", "typesystem_ScintillaEdit.xml",
- "<!-- ", True, printTypeSystemFile(f, options))
-
- def runGenerator(self):
- generatorrunner = "shiboken"
- for name in ('shiboken', 'generatorrunner'):
- if PLAT_WINDOWS:
- name += '.exe'
- name = os.path.join(self.PySideBase, "bin", name)
- if os.path.exists(name):
- generatorrunner = name
- break
-
- args = [
- generatorrunner,
- "--generator-set=" + self.ShibokenGenerator,
- "global.h ",
- "--avoid-protected-hack",
- "--enable-pyside-extensions",
- "--include-paths=" + self.AllIncludes,
- "--typesystem-paths=" + self.PySideTypeSystem,
- "--output-directory=.",
- "typesystem_ScintillaEdit.xml"]
- print(" ".join(args))
- retcode = subprocess.call(" ".join(args), shell=True, stderr=subprocess.STDOUT)
- if retcode:
- print("Error - failed in generatorrunner " + str(retcode))
- sys.exit()
-
- def writeVariables(self):
- # Write variables needed into file to be included from project so it does not have to discover much
- with open(self.ProInclude, "w") as f:
- f.write("SCINTILLA_VERSION=" + self.ScintillaVersion + "\n")
- f.write("PY_VERSION=" + self.PyVersion + "\n")
- f.write("PY_VERSION_SUFFIX=" + self.PyVersionSuffix + "\n")
- f.write("PY_PREFIX=" + doubleBackSlashes(self.PyPrefix) + "\n")
- f.write("PY_INCLUDES=" + doubleBackSlashes(self.PyIncludes) + "\n")
- f.write("PY_LIBDIR=" + doubleBackSlashes(self.PyLibDir) + "\n")
- f.write("PYSIDE_INCLUDES=" + doubleBackSlashes(self.PySideIncludeBase) + "\n")
- f.write("PYSIDE_LIB=" + doubleBackSlashes(self.PySideLibDir) + "\n")
- f.write("SHIBOKEN_INCLUDES=" + doubleBackSlashes(self.ShibokenIncludeBase) + "\n")
- f.write("SHIBOKEN_LIB=" + doubleBackSlashes(self.ShibokenLibDir) + "\n")
- if self.DebugBuild:
- f.write("CONFIG += debug\n")
- else:
- f.write("CONFIG += release\n")
-
- def make(self):
- runProgram([self.QMakeCommand, self.QMakeOptions], exitOnFailure=True)
- runProgram([self.MakeCommand, self.MakeTarget], exitOnFailure=True)
-
- def cleanEverything(self):
- self.generateAPI(["--clean"])
- runProgram([self.MakeCommand, "distclean"], exitOnFailure=False)
- filesToRemove = [self.ProInclude, "typesystem_ScintillaEdit.xml",
- "../../bin/ScintillaEditPy.so", "../../bin/ScintillaConstants.py"]
- for file in filesToRemove:
- try:
- os.remove(file)
- except OSError:
- pass
- for logFile in glob.glob("*.log"):
- try:
- os.remove(logFile)
- except OSError:
- pass
- shutil.rmtree("debug", ignore_errors=True)
- shutil.rmtree("release", ignore_errors=True)
- shutil.rmtree("ScintillaEditPy", ignore_errors=True)
-
- def buildEverything(self):
- cleanGenerated = False
- opts, args = getopt.getopt(sys.argv[1:], "hcdub",
- ["help", "clean", "debug=",
- "underscore-names", "pyside-base="])
- for opt, arg in opts:
- if opt in ("-h", "--help"):
- usage()
- sys.exit()
- elif opt in ("-c", "--clean"):
- cleanGenerated = True
- elif opt in ("-d", "--debug"):
- self.DebugBuild = (arg == '' or arg.lower() == 'yes')
- if self.DebugBuild and sys.platform == 'win32':
- self.MakeTarget = 'debug'
- elif opt in ("-b", '--pyside-base'):
- self._SetQtIncludeBase(os.path.join(os.path.normpath(arg), 'include'))
- self._setPySideBase(os.path.normpath(arg))
- elif opt in ("-u", "--underscore-names"):
- self.qtStyleInterface = False
-
- if cleanGenerated:
- self.cleanEverything()
- else:
- self.writeVariables()
- self.generateAPI([""])
- self.runGenerator()
- self.make()
- self.copyScintillaConstants()
-
- def copyScintillaConstants(self):
-
- orig = 'ScintillaConstants.py'
- dest = '../../bin/' + orig
- if IsFileNewer(dest, orig):
- return
-
- f = open(orig, 'r')
- contents = f.read()
- f.close()
-
- f = open(dest, 'w')
- f.write(contents)
- f.close()
-
- def _SetQtIncludeBase(self, base):
-
- self.QtIncludeBase = base
- self.QtIncludes = [self.QtIncludeBase] + [os.path.join(self.QtIncludeBase, sub) for sub in ["QtCore", "QtGui"]]
- # Set path so correct qmake is found
- path = os.environ.get('PATH', '').split(os.pathsep)
- qt_bin_dir = os.path.join(os.path.dirname(base), 'bin')
- if qt_bin_dir not in path:
- path.insert(0, qt_bin_dir)
- os.environ['PATH'] = os.pathsep.join(path)
-
-if __name__ == "__main__":
- sepBuild = SepBuilder()
- sepBuild.buildEverything()
diff --git a/qt/ScintillaEditPy/testsepq.py b/qt/ScintillaEditPy/testsepq.py
deleted file mode 100644
index 26b05ef0a..000000000
--- a/qt/ScintillaEditPy/testsepq.py
+++ /dev/null
@@ -1,157 +0,0 @@
-#!/usr/bin/env python2
-# -*- coding: utf-8 -*-
-
-import sys
-
-from PySide.QtCore import *
-from PySide.QtGui import *
-
-import ScintillaConstants as sci
-
-sys.path.append("../..")
-from bin import ScintillaEditPy
-
-txtInit = "int main(int argc, char **argv) {\n" \
- " // Start up the gnome\n" \
- " gnome_init(\"stest\", \"1.0\", argc, argv);\n}\n";
-
-keywords = \
- "and and_eq asm auto bitand bitor bool break " \
- "case catch char class compl const const_cast continue " \
- "default delete do double dynamic_cast else enum explicit export extern false float for " \
- "friend goto if inline int long mutable namespace new not not_eq " \
- "operator or or_eq private protected public " \
- "register reinterpret_cast return short signed sizeof static static_cast struct switch " \
- "template this throw true try typedef typeid typename union unsigned using " \
- "virtual void volatile wchar_t while xor xor_eq";
-
-def uriDropped():
- print "uriDropped"
-
-class Form(QDialog):
-
- def __init__(self, parent=None):
- super(Form, self).__init__(parent)
- self.resize(460,300)
- # Create widgets
- self.edit = ScintillaEditPy.ScintillaEdit(self)
- self.edit.uriDropped.connect(uriDropped)
- self.edit.command.connect(self.receive_command)
- self.edit.notify.connect(self.receive_notification)
-
- self.edit.styleClearAll()
- self.edit.setMarginWidthN(0, 35)
- self.edit.setScrollWidth(200)
- self.edit.setScrollWidthTracking(1)
- self.edit.setLexer(sci.SCLEX_CPP)
- self.edit.styleSetFore(sci.SCE_C_COMMENT, 0x008000)
- self.edit.styleSetFore(sci.SCE_C_COMMENTLINE, 0x008000)
- self.edit.styleSetFore(sci.SCE_C_COMMENTDOC, 0x008040)
- self.edit.styleSetItalic(sci.SCE_C_COMMENTDOC, 1)
- self.edit.styleSetFore(sci.SCE_C_NUMBER, 0x808000)
- self.edit.styleSetFore(sci.SCE_C_WORD, 0x800000)
- self.edit.styleSetBold(sci.SCE_C_WORD, True)
- self.edit.styleSetFore(sci.SCE_C_STRING, 0x800080)
- self.edit.styleSetFore(sci.SCE_C_PREPROCESSOR, 0x008080)
- self.edit.styleSetBold(sci.SCE_C_OPERATOR, True)
- self.edit.setMultipleSelection(1)
- self.edit.setVirtualSpaceOptions(
- sci.SCVS_RECTANGULARSELECTION | sci.SCVS_USERACCESSIBLE)
- self.edit.setAdditionalSelectionTyping(1)
-
- self.edit.styleSetFore(sci.STYLE_INDENTGUIDE, 0x808080)
- self.edit.setIndentationGuides(sci.SC_IV_LOOKBOTH)
-
- self.edit.setKeyWords(0, keywords)
- self.edit.addText(len(txtInit), txtInit)
- self.edit.setSel(1,10)
- retriever = str(self.edit.getLine(1))
- print(type(retriever), len(retriever))
- print('[' + retriever + ']')
- someText = str(self.edit.textRange(2,5))
- print(len(someText), '[' + someText + ']')
- someText = self.edit.getCurLine(100)
- print(len(someText), '[' + someText + ']')
- someText = self.edit.styleFont(1)
- print(len(someText), '[' + someText + ']')
- someText = self.edit.getSelText()
- print(len(someText), '[' + someText + ']')
- someText = self.edit.tag(1)
- print(len(someText), '[' + someText + ']')
- someText = self.edit.autoCCurrentText()
- print(len(someText), '[' + someText + ']')
- someText = self.edit.annotationText(1)
- print(len(someText), '[' + someText + ']')
- someText = self.edit.annotationStyles(1)
- print(len(someText), '[' + someText + ']')
- someText = self.edit.describeKeyWordSets()
- print(len(someText), '[' + someText + ']')
- someText = self.edit.propertyNames()
- print(len(someText), '[' + someText + ']')
- self.edit.setProperty("fold", "1")
- someText = self.edit.property("fold")
- print(len(someText), '[' + someText + ']')
- someText = self.edit.propertyExpanded("fold")
- print(len(someText), '[' + someText + ']')
- someText = self.edit.lexerLanguage()
- print(len(someText), '[' + someText + ']')
- someText = self.edit.describeProperty("styling.within.preprocessor")
- print(len(someText), '[' + someText + ']')
-
- xx = self.edit.findText(0, "main", 0, 25)
- print(type(xx), xx)
- print("isBold", self.edit.styleBold(sci.SCE_C_WORD))
-
- # Retrieve the document and write into it
- doc = self.edit.get_doc()
- doc.insert_string(40, "***")
- stars = doc.get_char_range(40,3)
- assert stars == "***"
-
- # Create a new independent document and attach it to the editor
- doc = ScintillaEditPy.ScintillaDocument()
- doc.insert_string(0, "/***/\nif(a)\n")
- self.edit.set_doc(doc)
- self.edit.setLexer(sci.SCLEX_CPP)
-
- def Call(self, message, wParam=0, lParam=0):
- return self.edit.send(message, wParam, lParam)
-
- def resizeEvent(self, e):
- self.edit.resize(e.size().width(), e.size().height())
-
- def receive_command(self, wParam, lParam):
- # Show underline at start when focussed
- notifyCode = wParam >> 16
- if (notifyCode == sci.SCEN_SETFOCUS) or (notifyCode == sci.SCEN_KILLFOCUS):
- self.edit.setIndicatorCurrent(sci.INDIC_CONTAINER);
- self.edit.indicatorClearRange(0, self.edit.length())
- if notifyCode == sci.SCEN_SETFOCUS:
- self.edit.indicatorFillRange(0, 2);
-
- def receive_notification(self, scn):
- if scn.nmhdr.code == sci.SCN_CHARADDED:
- print "Char %02X" % scn.ch
- elif scn.nmhdr.code == sci.SCN_SAVEPOINTREACHED:
- print "Saved"
- elif scn.nmhdr.code == sci.SCN_SAVEPOINTLEFT:
- print "Unsaved"
- elif scn.nmhdr.code == sci.SCN_MODIFIED:
- print "Modified"
- elif scn.nmhdr.code == sci.SCN_UPDATEUI:
- print "Update UI"
- elif scn.nmhdr.code == sci.SCN_PAINTED:
- #print "Painted"
- pass
- else:
- print "Notification", scn.nmhdr.code
- pass
-
-if __name__ == '__main__':
- # Create the Qt Application
- app = QApplication(sys.argv)
- # Create and show the form
- form = Form()
- form.show()
- # Run the main Qt loop
- sys.exit(app.exec_())
diff --git a/qt/ScintillaEditPy/typesystem_ScintillaEdit.xml.template b/qt/ScintillaEditPy/typesystem_ScintillaEdit.xml.template
deleted file mode 100644
index f7196a274..000000000
--- a/qt/ScintillaEditPy/typesystem_ScintillaEdit.xml.template
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0"?>
-<typesystem package="ScintillaEditPy">
- <load-typesystem name="typesystem_core.xml" generate="no" />
- <load-typesystem name="typesystem_gui_common.xml" generate="no"/>
- <primitive-type name="sptr_t"/>
- <primitive-type name="uptr_t"/>
- <value-type name="Sci_NotifyHeader" />
- <rejection class="Sci_NotifyHeader" field-name="hwndFrom" />
- <value-type name="SCNotification" />
- <object-type name="ScintillaEditBase" />
- <object-type name="ScintillaEdit">
- <!-- ++Autogenerated start of section automatically generated from Scintilla.iface -->
- <!-- ~~Autogenerated end of section automatically generated from Scintilla.iface -->
-
- <!-- Custom implementation of get and set_margin_mask_n: mask is defined
- as an int but is really a bitfield and the numeric value can be
- greater than max value of an int -->
- <modify-function signature="set_margin_mask_n(sptr_t, sptr_t)">
- <inject-code>
- int margin = PyInt_AsLong(%PYARG_1);
- if (margin == -1 &amp;&amp; PyErr_Occurred())
- return NULL;
- unsigned long mask = PyInt_AsUnsignedLongMask(%PYARG_2);
- if (margin == -1 &amp;&amp; PyErr_Occurred())
- return NULL;
-
- %CPPSELF-&gt;set_margin_mask_n(margin, static_cast&lt;int&gt;(mask));
- Py_RETURN_NONE;
- </inject-code>
- </modify-function>
- <modify-function signature="get_margin_mask_n(sptr_t) const">
- <inject-code>
- int margin = PyInt_AsLong(%PYARG_1);
- if (margin == -1 &amp;&amp; PyErr_Occurred())
- return NULL;
- unsigned int mask = (unsigned int)%CPPSELF-&gt;get_margin_mask_n(margin);
- %PYARG_0 = PyInt_FromSize_t(mask);
- </inject-code>
- </modify-function>
- <modify-function signature="setMarginMaskN(sptr_t, sptr_t)">
- <inject-code>
- int margin = PyInt_AsLong(%PYARG_1);
- if (margin == -1 &amp;&amp; PyErr_Occurred())
- return NULL;
- unsigned long mask = PyInt_AsUnsignedLongMask(%PYARG_2);
- if (margin == -1 &amp;&amp; PyErr_Occurred())
- return NULL;
-
- %CPPSELF-&gt;setMarginMaskN(margin, static_cast&lt;int&gt;(mask));
- Py_RETURN_NONE;
- </inject-code>
- </modify-function>
- <modify-function signature="marginMaskN(sptr_t) const">
- <inject-code>
- int margin = PyInt_AsLong(%PYARG_1);
- if (margin == -1 &amp;&amp; PyErr_Occurred())
- return NULL;
- unsigned int mask = (unsigned int)%CPPSELF-&gt;marginMaskN(margin);
- %PYARG_0 = PyInt_FromSize_t(mask);
- </inject-code>
- </modify-function>
-
- </object-type>
- <object-type name="ScintillaDocument" />
-</typesystem>