diff options
author | Tilman Roeder <tilman.roder@qt.io> | 2018-08-03 09:38:07 +0200 |
---|---|---|
committer | Tilman Roeder <tilman.roder@qt.io> | 2018-08-15 10:10:16 +0000 |
commit | 13e02b9aaea19ac21251d152a8fa69336ae76ebd (patch) | |
tree | a6320449c18251033d3a2557afaed6a8fcafbfc9 /plugins/pythonextensions/glue/macroexpander_glue.cpp | |
parent | efea0c2e4a2966d88f65cdab90f841f7905dee14 (diff) |
Initial commit
This is a quite large commit containing:
* The main extension that runs and initializes Python
* Some (example) bindings
* An initial build script for the main extension
* Optional binding and examples of how to create them
* An initial build script for the optional bindings
* A simple extension manager written in Python
* A few example Python extensions
* Some documentation (both in the code and as markdown files)
* A collection of helpful python scripts
* A small collection of unit tests
* A TODO list
For any additional details the code / docs should be consulted.
Change-Id: I3937886cfefa2f64d5a78013889a8e097eec8261
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'plugins/pythonextensions/glue/macroexpander_glue.cpp')
-rw-r--r-- | plugins/pythonextensions/glue/macroexpander_glue.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/plugins/pythonextensions/glue/macroexpander_glue.cpp b/plugins/pythonextensions/glue/macroexpander_glue.cpp new file mode 100644 index 0000000..606bf81 --- /dev/null +++ b/plugins/pythonextensions/glue/macroexpander_glue.cpp @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Python Extensions Plugin for QtCreator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +void registerPythonVariable(const QByteArray &variable, const QString &description, PyObject *func) +{ + if (!PyCallable_Check(func)) { + PyErr_BadArgument(); + return; + } + Py_XINCREF(func); + + globalMacroExpander()->registerVariable(variable, description, + [=]() -> QString { + PyObject *ret = PyObject_Repr(PyObject_CallFunction(func, NULL)); + #if PY_MAJOR_VERSION >= 3 + QString value = QString::fromUtf8(PyUnicode_AsUTF8(ret)); + #else + QString value = QString::fromUtf8(PyString_AsString(ret)); + #endif + return value; + } + ); +} + +void registerPythonPrefixVariable(const QByteArray &variable, const QString &description, PyObject *func) +{ + if (!PyCallable_Check(func)) { + PyErr_BadArgument(); + return; + } + Py_XINCREF(func); + + globalMacroExpander()->registerPrefix(variable, description, + [=](QString passed_string) -> QString { + PyObject *ret = PyObject_Repr(PyObject_CallFunction(func, "s", passed_string.toStdString().c_str())); + #if PY_MAJOR_VERSION >= 3 + QString value = QString::fromUtf8(PyUnicode_AsUTF8(ret)); + #else + QString value = QString::fromUtf8(PyString_AsString(ret)); + #endif + return value; + } + ); +} |