aboutsummaryrefslogtreecommitdiffstats
path: root/tools/qtpy2cpp_lib
diff options
context:
space:
mode:
Diffstat (limited to 'tools/qtpy2cpp_lib')
-rw-r--r--tools/qtpy2cpp_lib/astdump.py149
-rw-r--r--tools/qtpy2cpp_lib/formatter.py264
-rw-r--r--tools/qtpy2cpp_lib/nodedump.py86
-rw-r--r--tools/qtpy2cpp_lib/test_baseline/basic_test.py38
-rw-r--r--tools/qtpy2cpp_lib/test_baseline/uic.py208
-rw-r--r--tools/qtpy2cpp_lib/tokenizer.py91
-rw-r--r--tools/qtpy2cpp_lib/visitor.py260
7 files changed, 0 insertions, 1096 deletions
diff --git a/tools/qtpy2cpp_lib/astdump.py b/tools/qtpy2cpp_lib/astdump.py
deleted file mode 100644
index ea37590c2..000000000
--- a/tools/qtpy2cpp_lib/astdump.py
+++ /dev/null
@@ -1,149 +0,0 @@
-#############################################################################
-##
-## Copyright (C) 2020 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of the Qt for Python project.
-##
-## $QT_BEGIN_LICENSE:LGPL$
-## 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 Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 3 as published by the Free Software
-## Foundation and appearing in the file LICENSE.LGPL3 included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU Lesser General Public License version 3 requirements
-## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 2.0 or (at your option) the GNU General
-## Public license version 3 or any later version approved by the KDE Free
-## Qt Foundation. The licenses are as published by the Free Software
-## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-## 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-2.0.html and
-## https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-"""Tool to dump a Python AST"""
-
-
-from argparse import ArgumentParser, RawTextHelpFormatter
-import ast
-from enum import Enum
-import sys
-import tokenize
-
-
-from nodedump import debug_format_node
-
-DESCRIPTION = "Tool to dump a Python AST"
-
-
-_source_lines = []
-_opt_verbose = False
-
-
-def first_non_space(s):
- for i, c in enumerate(s):
- if c != ' ':
- return i
- return 0
-
-
-class NodeType(Enum):
- IGNORE = 1
- PRINT_ONE_LINE = 2 # Print as a one liner, do not visit children
- PRINT = 3 # Print with opening closing tag, visit children
- PRINT_WITH_SOURCE = 4 # Like PRINT, but print source line above
-
-
-def get_node_type(node):
- if isinstance(node, (ast.Load, ast.Store, ast.Delete)):
- return NodeType.IGNORE
- if isinstance(node, (ast.Add, ast.alias, ast.arg, ast.Eq, ast.Gt, ast.Lt,
- ast.Mult, ast.Name, ast.NotEq, ast.NameConstant, ast.Not,
- ast.Num, ast.Str)):
- return NodeType.PRINT_ONE_LINE
- if not hasattr(node, 'lineno'):
- return NodeType.PRINT
- if isinstance(node, (ast.Attribute)):
- return NodeType.PRINT_ONE_LINE if isinstance(node.value, ast.Name) else NodeType.PRINT
- return NodeType.PRINT_WITH_SOURCE
-
-
-class DumpVisitor(ast.NodeVisitor):
- def __init__(self):
- ast.NodeVisitor.__init__(self)
- self._indent = 0
- self._printed_source_lines = {-1}
-
- def generic_visit(self, node):
- node_type = get_node_type(node)
- if _opt_verbose and node_type in (NodeType.IGNORE, NodeType.PRINT_ONE_LINE):
- node_type = NodeType.PRINT
- if node_type == NodeType.IGNORE:
- return
- self._indent = self._indent + 1
- indent = ' ' * self._indent
-
- if node_type == NodeType.PRINT_WITH_SOURCE:
- line_number = node.lineno - 1
- if line_number not in self._printed_source_lines:
- self._printed_source_lines.add(line_number)
- line = _source_lines[line_number]
- non_space = first_non_space(line)
- print('{:04d} {}{}'.format(line_number, '_' * non_space,
- line[non_space:]))
-
- if node_type == NodeType.PRINT_ONE_LINE:
- print(indent, debug_format_node(node))
- else:
- print(indent, '>', debug_format_node(node))
- ast.NodeVisitor.generic_visit(self, node)
- print(indent, '<', type(node).__name__)
-
- self._indent = self._indent - 1
-
-
-def parse_ast(filename):
- node = None
- with tokenize.open(filename) as f:
- global _source_lines
- source = f.read()
- _source_lines = source.split('\n')
- node = ast.parse(source, mode="exec")
- return node
-
-
-def create_arg_parser(desc):
- parser = ArgumentParser(description=desc,
- formatter_class=RawTextHelpFormatter)
- parser.add_argument('--verbose', '-v', action='store_true',
- help='Verbose')
- parser.add_argument('source', type=str, help='Python source')
- return parser
-
-
-if __name__ == '__main__':
- arg_parser = create_arg_parser(DESCRIPTION)
- options = arg_parser.parse_args()
- _opt_verbose = options.verbose
- title = f'AST tree for {options.source}'
- print('=' * len(title))
- print(title)
- print('=' * len(title))
- tree = parse_ast(options.source)
- DumpVisitor().visit(tree)
diff --git a/tools/qtpy2cpp_lib/formatter.py b/tools/qtpy2cpp_lib/formatter.py
deleted file mode 100644
index a1e8c69db..000000000
--- a/tools/qtpy2cpp_lib/formatter.py
+++ /dev/null
@@ -1,264 +0,0 @@
-#############################################################################
-##
-## Copyright (C) 2020 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of the Qt for Python project.
-##
-## $QT_BEGIN_LICENSE:LGPL$
-## 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 Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 3 as published by the Free Software
-## Foundation and appearing in the file LICENSE.LGPL3 included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU Lesser General Public License version 3 requirements
-## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 2.0 or (at your option) the GNU General
-## Public license version 3 or any later version approved by the KDE Free
-## Qt Foundation. The licenses are as published by the Free Software
-## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-## 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-2.0.html and
-## https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-"""C++ formatting helper functions and formatter class"""
-
-
-import ast
-import sys
-
-
-CLOSING = {"{": "}", "(": ")", "[": "]"} # Closing parenthesis for C++
-
-
-def to_string(node):
- """Helper to retrieve a string from the (Lists of)Name/Attribute
- aggregated into some nodes"""
- if isinstance(node, ast.Name):
- return node.id
- if isinstance(node, ast.Attribute):
- return node.attr
- return ''
-
-
-def format_inheritance(class_def_node):
- """Returns inheritance specification of a class"""
- result = ''
- for base in class_def_node.bases:
- name = to_string(base)
- if name != 'object':
- result += ', public ' if result else ' : public '
- result += name
- return result
-
-
-def format_for_target(target_node):
- if isinstance(target_node, ast.Tuple): # for i,e in enumerate()
- result = ''
- for i, el in enumerate(target_node):
- if i > 0:
- result += ', '
- result += format_reference(el)
- return result
- return format_reference(target_node)
-
-
-def format_for_loop(f_node):
- """Format a for loop
- This applies some heuristics to detect:
- 1) "for a in [1,2])" -> "for (f: {1, 2}) {"
- 2) "for i in range(5)" -> "for (i = 0; i < 5; ++i) {"
- 3) "for i in range(2,5)" -> "for (i = 2; i < 5; ++i) {"
-
- TODO: Detect other cases, maybe including enumerate().
- """
- loop_vars = format_for_target(f_node.target)
- result = 'for (' + loop_vars
- if isinstance(f_node.iter, ast.Call):
- f = format_reference(f_node.iter.func)
- if f == 'range':
- start = 0
- end = -1
- if len(f_node.iter.args) == 2:
- start = format_literal(f_node.iter.args[0])
- end = format_literal(f_node.iter.args[1])
- elif len(f_node.iter.args) == 1:
- end = format_literal(f_node.iter.args[0])
- result += f' = {start}; {loop_vars} < {end}; ++{loop_vars}'
- elif isinstance(f_node.iter, ast.List):
- # Range based for over list
- result += ': ' + format_literal_list(f_node.iter)
- result += ') {'
- return result
-
-
-def format_literal(node):
- """Returns the value of number/string literals"""
- if isinstance(node, ast.Num):
- return str(node.n)
- if isinstance(node, ast.Str):
- # Fixme: escaping
- return f'"{node.s}"'
- return ''
-
-
-def format_literal_list(l_node, enclosing='{'):
- """Formats a list/tuple of number/string literals as C++ initializer list"""
- result = enclosing
- for i, el in enumerate(l_node.elts):
- if i > 0:
- result += ', '
- result += format_literal(el)
- result += CLOSING[enclosing]
- return result
-
-
-def format_member(attrib_node, qualifier='auto'):
- """Member access foo->member() is expressed as an attribute with
- further nested Attributes/Names as value"""
- n = attrib_node
- result = ''
- # Black magic: Guess '::' if name appears to be a class name
- if qualifier == 'auto':
- qualifier = '::' if n.attr[0:1].isupper() else '->'
- while isinstance(n, ast.Attribute):
- result = n.attr if not result else n.attr + qualifier + result
- n = n.value
- if isinstance(n, ast.Name) and n.id != 'self':
- result = n.id + qualifier + result
- return result
-
-
-def format_reference(node, qualifier='auto'):
- """Format member reference or free item"""
- return node.id if isinstance(node, ast.Name) else format_member(node, qualifier)
-
-
-def format_function_def_arguments(function_def_node):
- """Formats arguments of a function definition"""
- # Default values is a list of the last default values, expand
- # so that indexes match
- argument_count = len(function_def_node.args.args)
- default_values = function_def_node.args.defaults
- while len(default_values) < argument_count:
- default_values.insert(0, None)
- result = ''
- for i, a in enumerate(function_def_node.args.args):
- if result:
- result += ', '
- if a.arg != 'self':
- result += a.arg
- if default_values[i]:
- result += ' = '
- result += format_literal(default_values[i])
- return result
-
-
-def format_start_function_call(call_node):
- """Format a call of a free or member function"""
- return format_reference(call_node.func) + '('
-
-
-def write_import(file, i_node):
- """Print an import of a Qt class as #include"""
- for alias in i_node.names:
- if alias.name.startswith('Q'):
- file.write(f'#include <{alias.name}>\n')
-
-
-def write_import_from(file, i_node):
- """Print an import from Qt classes as #include sequence"""
- # "from PySide6.QtGui import QGuiApplication" or
- # "from PySide6 import QtGui"
- mod = i_node.module
- if not mod.startswith('PySide') and not mod.startswith('PyQt'):
- return
- dot = mod.find('.')
- qt_module = mod[dot + 1:] + '/' if dot >= 0 else ''
- for i in i_node.names:
- if i.name.startswith('Q'):
- file.write(f'#include <{qt_module}{i.name}>\n')
-
-
-class Indenter:
- """Helper for Indentation"""
-
- def __init__(self, output_file):
- self._indent_level = 0
- self._indentation = ''
- self._output_file = output_file
-
- def indent_string(self, string):
- """Start a new line by a string"""
- self._output_file.write(self._indentation)
- self._output_file.write(string)
-
- def indent_line(self, line):
- """Write an indented line"""
- self._output_file.write(self._indentation)
- self._output_file.write(line)
- self._output_file.write('\n')
-
- def INDENT(self):
- """Write indentation"""
- self._output_file.write(self._indentation)
-
- def indent(self):
- """Increase indentation level"""
- self._indent_level = self._indent_level + 1
- self._indentation = ' ' * self._indent_level
-
- def dedent(self):
- """Decrease indentation level"""
- self._indent_level = self._indent_level - 1
- self._indentation = ' ' * self._indent_level
-
-
-class CppFormatter(Indenter):
- """Provides helpers for formatting multi-line C++ constructs"""
-
- def __init__(self, output_file):
- Indenter.__init__(self, output_file)
-
- def write_class_def(self, class_node):
- """Print a class definition with inheritance"""
- self._output_file.write('\n')
- inherits = format_inheritance(class_node)
- self.indent_line(f'class {class_node.name}{inherits}')
- self.indent_line('{')
- self.indent_line('public:')
-
- def write_function_def(self, f_node, class_context):
- """Print a function definition with arguments"""
- self._output_file.write('\n')
- arguments = format_function_def_arguments(f_node)
- warn = True
- if f_node.name == '__init__' and class_context: # Constructor
- name = class_context
- warn = len(arguments) > 0
- elif f_node.name == '__del__' and class_context: # Destructor
- name = '~' + class_context
- warn = False
- else:
- name = 'void ' + f_node.name
- self.indent_string(f'{name}({arguments})')
- if warn:
- self._output_file.write(' /* FIXME: types */')
- self._output_file.write('\n')
- self.indent_line('{')
diff --git a/tools/qtpy2cpp_lib/nodedump.py b/tools/qtpy2cpp_lib/nodedump.py
deleted file mode 100644
index 5cb7c3f2d..000000000
--- a/tools/qtpy2cpp_lib/nodedump.py
+++ /dev/null
@@ -1,86 +0,0 @@
-#############################################################################
-##
-## Copyright (C) 2020 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of the Qt for Python project.
-##
-## $QT_BEGIN_LICENSE:LGPL$
-## 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 Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 3 as published by the Free Software
-## Foundation and appearing in the file LICENSE.LGPL3 included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU Lesser General Public License version 3 requirements
-## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 2.0 or (at your option) the GNU General
-## Public license version 3 or any later version approved by the KDE Free
-## Qt Foundation. The licenses are as published by the Free Software
-## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-## 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-2.0.html and
-## https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-"""Helper to dump AST nodes for debugging"""
-
-
-import ast
-
-
-def to_string(node):
- """Helper to retrieve a string from the (Lists of )Name/Attribute
- aggregated into some nodes"""
- if isinstance(node, ast.Name):
- return node.id
- if isinstance(node, ast.Attribute):
- return node.attr
- return ''
-
-
-def debug_format_node(node):
- """Format AST node for debugging"""
- if isinstance(node, ast.alias):
- return f'alias("{node.name}")'
- if isinstance(node, ast.arg):
- return f'arg({node.arg})'
- if isinstance(node, ast.Attribute):
- if isinstance(node.value, ast.Name):
- nested_name = debug_format_node(node.value)
- return f'Attribute("{node.attr}", {nested_name})'
- return f'Attribute("{node.attr}")'
- if isinstance(node, ast.Call):
- return 'Call({}({}))'.format(to_string(node.func), len(node.args))
- if isinstance(node, ast.ClassDef):
- base_names = [to_string(base) for base in node.bases]
- bases = ': ' + ','.join(base_names) if base_names else ''
- return f'ClassDef({node.name}{bases})'
- if isinstance(node, ast.ImportFrom):
- return f'ImportFrom("{node.module}")'
- if isinstance(node, ast.FunctionDef):
- arg_names = [a.arg for a in node.args.args]
- return 'FunctionDef({}({}))'.format(node.name, ', '.join(arg_names))
- if isinstance(node, ast.Name):
- return 'Name("{}", Ctx={})'.format(node.id, type(node.ctx).__name__)
- if isinstance(node, ast.NameConstant):
- return f'NameConstant({node.value})'
- if isinstance(node, ast.Num):
- return f'Num({node.n})'
- if isinstance(node, ast.Str):
- return f'Str("{node.s}")'
- return type(node).__name__
diff --git a/tools/qtpy2cpp_lib/test_baseline/basic_test.py b/tools/qtpy2cpp_lib/test_baseline/basic_test.py
deleted file mode 100644
index e5dc92f9f..000000000
--- a/tools/qtpy2cpp_lib/test_baseline/basic_test.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#############################################################################
-##
-## Copyright (C) 2020 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of the test suite of Qt for Python.
-##
-## $QT_BEGIN_LICENSE:GPL-EXCEPT$
-## 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.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-a = 7
-
-if a > 5:
- for f in [1, 2]:
- print(f)
-else:
- for i in range(5):
- print(i)
- for i in range(2, 5):
- print(i)
diff --git a/tools/qtpy2cpp_lib/test_baseline/uic.py b/tools/qtpy2cpp_lib/test_baseline/uic.py
deleted file mode 100644
index 73e3ca540..000000000
--- a/tools/qtpy2cpp_lib/test_baseline/uic.py
+++ /dev/null
@@ -1,208 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-##
-## Copyright (C) 2020 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of the test suite of Qt for Python.
-##
-## $QT_BEGIN_LICENSE:GPL-EXCEPT$
-## 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.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-from PySide6.QtCore import (QCoreApplication, QMetaObject, QObject, QPoint,
- QRect, QSize, QUrl, Qt)
-from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QFont,
- QFontDatabase, QIcon, QLinearGradient, QPalette, QPainter, QPixmap,
- QRadialGradient)
-from PySide6.QtWidgets import *
-
-class Ui_ImageDialog(object):
- def setupUi(self, dialog):
- if dialog.objectName():
- dialog.setObjectName(u"dialog")
- dialog.setObjectName(u"ImageDialog")
- dialog.resize(320, 180)
- self.vboxLayout = QVBoxLayout(dialog)
-#ifndef Q_OS_MAC
- self.vboxLayout.setSpacing(6)
-#endif
-#ifndef Q_OS_MAC
- self.vboxLayout.setContentsMargins(9, 9, 9, 9)
-#endif
- self.vboxLayout.setObjectName(u"vboxLayout")
- self.vboxLayout.setObjectName(u"")
- self.gridLayout = QGridLayout()
-#ifndef Q_OS_MAC
- self.gridLayout.setSpacing(6)
-#endif
- self.gridLayout.setContentsMargins(1, 1, 1, 1)
- self.gridLayout.setObjectName(u"gridLayout")
- self.gridLayout.setObjectName(u"")
- self.widthLabel = QLabel(dialog)
- self.widthLabel.setObjectName(u"widthLabel")
- self.widthLabel.setObjectName(u"widthLabel")
- self.widthLabel.setGeometry(QRect(1, 27, 67, 22))
- self.widthLabel.setFrameShape(QFrame.NoFrame)
- self.widthLabel.setFrameShadow(QFrame.Plain)
- self.widthLabel.setTextFormat(Qt.AutoText)
-
- self.gridLayout.addWidget(self.widthLabel, 1, 0, 1, 1)
-
- self.heightLabel = QLabel(dialog)
- self.heightLabel.setObjectName(u"heightLabel")
- self.heightLabel.setObjectName(u"heightLabel")
- self.heightLabel.setGeometry(QRect(1, 55, 67, 22))
- self.heightLabel.setFrameShape(QFrame.NoFrame)
- self.heightLabel.setFrameShadow(QFrame.Plain)
- self.heightLabel.setTextFormat(Qt.AutoText)
-
- self.gridLayout.addWidget(self.heightLabel, 2, 0, 1, 1)
-
- self.colorDepthCombo = QComboBox(dialog)
- self.colorDepthCombo.setObjectName(u"colorDepthCombo")
- self.colorDepthCombo.setObjectName(u"colorDepthCombo")
- self.colorDepthCombo.setGeometry(QRect(74, 83, 227, 22))
- sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.colorDepthCombo.sizePolicy().hasHeightForWidth())
- self.colorDepthCombo.setSizePolicy(sizePolicy)
- self.colorDepthCombo.setInsertPolicy(QComboBox.InsertAtBottom)
-
- self.gridLayout.addWidget(self.colorDepthCombo, 3, 1, 1, 1)
-
- self.nameLineEdit = QLineEdit(dialog)
- self.nameLineEdit.setObjectName(u"nameLineEdit")
- self.nameLineEdit.setObjectName(u"nameLineEdit")
- self.nameLineEdit.setGeometry(QRect(74, 83, 227, 22))
- sizePolicy1 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
- sizePolicy1.setHorizontalStretch(1)
- sizePolicy1.setVerticalStretch(0)
- sizePolicy1.setHeightForWidth(self.nameLineEdit.sizePolicy().hasHeightForWidth())
- self.nameLineEdit.setSizePolicy(sizePolicy1)
- self.nameLineEdit.setEchoMode(QLineEdit.Normal)
-
- self.gridLayout.addWidget(self.nameLineEdit, 0, 1, 1, 1)
-
- self.spinBox = QSpinBox(dialog)
- self.spinBox.setObjectName(u"spinBox")
- self.spinBox.setObjectName(u"spinBox")
- self.spinBox.setGeometry(QRect(74, 1, 227, 20))
- sizePolicy.setHeightForWidth(self.spinBox.sizePolicy().hasHeightForWidth())
- self.spinBox.setSizePolicy(sizePolicy)
- self.spinBox.setButtonSymbols(QAbstractSpinBox.UpDownArrows)
- self.spinBox.setValue(32)
- self.spinBox.setMaximum(1024)
- self.spinBox.setMinimum(1)
-
- self.gridLayout.addWidget(self.spinBox, 1, 1, 1, 1)
-
- self.spinBox_2 = QSpinBox(dialog)
- self.spinBox_2.setObjectName(u"spinBox_2")
- self.spinBox_2.setObjectName(u"spinBox_2")
- self.spinBox_2.setGeometry(QRect(74, 27, 227, 22))
- sizePolicy.setHeightForWidth(self.spinBox_2.sizePolicy().hasHeightForWidth())
- self.spinBox_2.setSizePolicy(sizePolicy)
- self.spinBox_2.setButtonSymbols(QAbstractSpinBox.UpDownArrows)
- self.spinBox_2.setValue(32)
- self.spinBox_2.setMaximum(1024)
- self.spinBox_2.setMinimum(1)
-
- self.gridLayout.addWidget(self.spinBox_2, 2, 1, 1, 1)
-
- self.nameLabel = QLabel(dialog)
- self.nameLabel.setObjectName(u"nameLabel")
- self.nameLabel.setObjectName(u"nameLabel")
- self.nameLabel.setGeometry(QRect(1, 1, 67, 20))
- self.nameLabel.setFrameShape(QFrame.NoFrame)
- self.nameLabel.setFrameShadow(QFrame.Plain)
- self.nameLabel.setTextFormat(Qt.AutoText)
-
- self.gridLayout.addWidget(self.nameLabel, 0, 0, 1, 1)
-
- self.colorDepthLabel = QLabel(dialog)
- self.colorDepthLabel.setObjectName(u"colorDepthLabel")
- self.colorDepthLabel.setObjectName(u"colorDepthLabel")
- self.colorDepthLabel.setGeometry(QRect(1, 83, 67, 22))
- self.colorDepthLabel.setFrameShape(QFrame.NoFrame)
- self.colorDepthLabel.setFrameShadow(QFrame.Plain)
- self.colorDepthLabel.setTextFormat(Qt.AutoText)
-
- self.gridLayout.addWidget(self.colorDepthLabel, 3, 0, 1, 1)
-
-
- self.vboxLayout.addLayout(self.gridLayout)
-
- self.spacerItem = QSpacerItem(0, 0, QSizePolicy.Minimum, QSizePolicy.Expanding)
-
- self.vboxLayout.addItem(self.spacerItem)
-
- self.hboxLayout = QHBoxLayout()
-#ifndef Q_OS_MAC
- self.hboxLayout.setSpacing(6)
-#endif
- self.hboxLayout.setContentsMargins(1, 1, 1, 1)
- self.hboxLayout.setObjectName(u"hboxLayout")
- self.hboxLayout.setObjectName(u"")
- self.spacerItem1 = QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum)
-
- self.hboxLayout.addItem(self.spacerItem1)
-
- self.okButton = QPushButton(dialog)
- self.okButton.setObjectName(u"okButton")
- self.okButton.setObjectName(u"okButton")
- self.okButton.setGeometry(QRect(135, 1, 80, 24))
-
- self.hboxLayout.addWidget(self.okButton)
-
- self.cancelButton = QPushButton(dialog)
- self.cancelButton.setObjectName(u"cancelButton")
- self.cancelButton.setObjectName(u"cancelButton")
- self.cancelButton.setGeometry(QRect(221, 1, 80, 24))
-
- self.hboxLayout.addWidget(self.cancelButton)
-
-
- self.vboxLayout.addLayout(self.hboxLayout)
-
- QWidget.setTabOrder(self.nameLineEdit, self.spinBox)
- QWidget.setTabOrder(self.spinBox, self.spinBox_2)
- QWidget.setTabOrder(self.spinBox_2, self.colorDepthCombo)
- QWidget.setTabOrder(self.colorDepthCombo, self.okButton)
- QWidget.setTabOrder(self.okButton, self.cancelButton)
-
- self.retranslateUi(dialog)
- self.nameLineEdit.returnPressed.connect(self.okButton.animateClick)
-
- QMetaObject.connectSlotsByName(dialog)
- # setupUi
-
- def retranslateUi(self, dialog):
- dialog.setWindowTitle(QCoreApplication.translate("ImageDialog", u"Create Image", None))
- self.widthLabel.setText(QCoreApplication.translate("ImageDialog", u"Width:", None))
- self.heightLabel.setText(QCoreApplication.translate("ImageDialog", u"Height:", None))
- self.nameLineEdit.setText(QCoreApplication.translate("ImageDialog", u"Untitled image", None))
- self.nameLabel.setText(QCoreApplication.translate("ImageDialog", u"Name:", None))
- self.colorDepthLabel.setText(QCoreApplication.translate("ImageDialog", u"Color depth:", None))
- self.okButton.setText(QCoreApplication.translate("ImageDialog", u"OK", None))
- self.cancelButton.setText(QCoreApplication.translate("ImageDialog", u"Cancel", None))
- # retranslateUi
-
diff --git a/tools/qtpy2cpp_lib/tokenizer.py b/tools/qtpy2cpp_lib/tokenizer.py
deleted file mode 100644
index dee63c177..000000000
--- a/tools/qtpy2cpp_lib/tokenizer.py
+++ /dev/null
@@ -1,91 +0,0 @@
-#############################################################################
-##
-## Copyright (C) 2019 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of the Qt for Python project.
-##
-## $QT_BEGIN_LICENSE:LGPL$
-## 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 Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 3 as published by the Free Software
-## Foundation and appearing in the file LICENSE.LGPL3 included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU Lesser General Public License version 3 requirements
-## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 2.0 or (at your option) the GNU General
-## Public license version 3 or any later version approved by the KDE Free
-## Qt Foundation. The licenses are as published by the Free Software
-## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-## 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-2.0.html and
-## https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-"""Tool to dump Python Tokens"""
-
-
-import sys
-import tokenize
-
-
-def format_token(t):
- r = repr(t)
- if r.startswith('TokenInfo('):
- r = r[10:]
- pos = r.find("), line='")
- if pos < 0:
- pos = r.find('), line="')
- if pos > 0:
- r = r[:pos + 1]
- return r
-
-
-def first_non_space(s):
- for i, c in enumerate(s):
- if c != ' ':
- return i
- return 0
-
-
-if __name__ == '__main__':
- if len(sys.argv) < 2:
- print("Specify file Name")
- sys.exit(1)
- filename = sys.argv[1]
- indent_level = 0
- indent = ''
- last_line_number = -1
- with tokenize.open(filename) as f:
- generator = tokenize.generate_tokens(f.readline)
- for t in generator:
- line_number = t.start[0]
- if line_number != last_line_number:
- code_line = t.line.rstrip()
- non_space = first_non_space(code_line)
- print('{:04d} {}{}'.format(line_number, '_' * non_space,
- code_line[non_space:]))
- last_line_number = line_number
- if t.type == tokenize.INDENT:
- indent_level = indent_level + 1
- indent = ' ' * indent_level
- elif t.type == tokenize.DEDENT:
- indent_level = indent_level - 1
- indent = ' ' * indent_level
- else:
- print(' ', indent, format_token(t))
diff --git a/tools/qtpy2cpp_lib/visitor.py b/tools/qtpy2cpp_lib/visitor.py
deleted file mode 100644
index d17d5f53c..000000000
--- a/tools/qtpy2cpp_lib/visitor.py
+++ /dev/null
@@ -1,260 +0,0 @@
-#############################################################################
-##
-## Copyright (C) 2020 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of the Qt for Python project.
-##
-## $QT_BEGIN_LICENSE:LGPL$
-## 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 Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 3 as published by the Free Software
-## Foundation and appearing in the file LICENSE.LGPL3 included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU Lesser General Public License version 3 requirements
-## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 2.0 or (at your option) the GNU General
-## Public license version 3 or any later version approved by the KDE Free
-## Qt Foundation. The licenses are as published by the Free Software
-## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-## 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-2.0.html and
-## https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-"""AST visitor printing out C++"""
-
-import ast
-import sys
-import tokenize
-import warnings
-
-from .formatter import (CppFormatter, format_for_loop,
- format_function_def_arguments, format_inheritance,
- format_literal, format_reference,
- format_start_function_call,
- write_import, write_import_from)
-
-from .nodedump import debug_format_node
-
-
-class ConvertVisitor(ast.NodeVisitor, CppFormatter):
- """AST visitor printing out C++
- Note on implementation:
- - Any visit_XXX() overridden function should call self.generic_visit(node)
- to continue visiting
- - When controlling the visiting manually (cf visit_Call()),
- self.visit(child) needs to be called since that dispatches to
- visit_XXX(). This is usually done to prevent undesired output
- for example from references of calls, etc.
- """
-
- debug = False
-
- def __init__(self, output_file):
- ast.NodeVisitor.__init__(self)
- CppFormatter.__init__(self, output_file)
- self._class_scope = [] # List of class names
- self._stack = [] # nodes
- self._debug_indent = 0
-
- @staticmethod
- def create_ast(filename):
- """Create an Abstract Syntax Tree on which a visitor can be run"""
- node = None
- with tokenize.open(filename) as file:
- node = ast.parse(file.read(), mode="exec")
- return node
-
- def generic_visit(self, node):
- parent = self._stack[-1] if self._stack else None
- if self.debug:
- self._debug_enter(node, parent)
- self._stack.append(node)
- try:
- super().generic_visit(node)
- except Exception as e:
- line_no = node.lineno if hasattr(node, 'lineno') else -1
- message = 'Error "{}" at line {}'.format(str(e), line_no)
- warnings.warn(message)
- self._output_file.write(f'\n// {message}\n')
- del self._stack[-1]
- if self.debug:
- self._debug_leave(node)
-
- def visit_Add(self, node):
- self.generic_visit(node)
- self._output_file.write(' + ')
-
- def visit_Assign(self, node):
- self._output_file.write('\n')
- self.INDENT()
- for target in node.targets:
- if isinstance(target, ast.Tuple):
- warnings.warn('List assignment not handled (line {}).'.
- format(node.lineno))
- elif isinstance(target, ast.Subscript):
- warnings.warn('Subscript assignment not handled (line {}).'.
- format(node.lineno))
- else:
- self._output_file.write(format_reference(target))
- self._output_file.write(' = ')
- self.visit(node.value)
- self._output_file.write(';\n')
-
- def visit_Attribute(self, node):
- """Format a variable reference (cf visit_Name)"""
- self._output_file.write(format_reference(node))
-
- def visit_BinOp(self, node):
- # Parentheses are not exposed, so, every binary operation needs to
- # be enclosed by ().
- self._output_file.write('(')
- self.generic_visit(node)
- self._output_file.write(')')
-
- def visit_Call(self, node):
- self._output_file.write(format_start_function_call(node))
- # Manually do visit(), skip the children of func
- for i, arg in enumerate(node.args):
- if i > 0:
- self._output_file.write(', ')
- self.visit(arg)
- self._output_file.write(')')
-
- def visit_ClassDef(self, node):
- # Manually do visit() to skip over base classes
- # and annotations
- self._class_scope.append(node.name)
- self.write_class_def(node)
- self.indent()
- for b in node.body:
- self.visit(b)
- self.dedent()
- self.indent_line('};')
- del self._class_scope[-1]
-
- def visit_Expr(self, node):
- self._output_file.write('\n')
- self.INDENT()
- self.generic_visit(node)
- self._output_file.write(';\n')
-
- def visit_Gt(self, node):
- self.generic_visit(node)
- self._output_file.write('>')
-
- def visit_For(self, node):
- # Manually do visit() to get the indentation right.
- # TODO: what about orelse?
- self.indent_line(format_for_loop(node))
- self.indent()
- for b in node.body:
- self.visit(b)
- self.dedent()
- self.indent_line('}')
-
- def visit_FunctionDef(self, node):
- class_context = self._class_scope[-1] if self._class_scope else None
- self.write_function_def(node, class_context)
- self.indent()
- self.generic_visit(node)
- self.dedent()
- self.indent_line('}')
-
- def visit_If(self, node):
- # Manually do visit() to get the indentation right. Note:
- # elsif() is modelled as nested if.
- self.indent_string('if (')
- self.visit(node.test)
- self._output_file.write(') {\n')
- self.indent()
- for b in node.body:
- self.visit(b)
- self.dedent()
- self.indent_string('}')
- if node.orelse:
- self._output_file.write(' else {\n')
- self.indent()
- for b in node.orelse:
- self.visit(b)
- self.dedent()
- self.indent_string('}')
- self._output_file.write('\n')
-
- def visit_Import(self, node):
- write_import(self._output_file, node)
-
- def visit_ImportFrom(self, node):
- write_import_from(self._output_file, node)
-
- def visit_List(self, node):
- # Manually do visit() to get separators right
- self._output_file.write('{')
- for i, el in enumerate(node.elts):
- if i > 0:
- self._output_file.write(', ')
- self.visit(el)
- self._output_file.write('}')
-
- def visit_Lt(self, node):
- self.generic_visit(node)
- self._output_file.write('<')
-
- def visit_Mult(self, node):
- self.generic_visit(node)
- self._output_file.write(' * ')
-
- def visit_Name(self, node):
- """Format a variable reference (cf visit_Attribute)"""
- self._output_file.write(format_reference(node))
-
- def visit_NameConstant(self, node):
- self.generic_visit(node)
- if node.value is None:
- self._output_file.write('nullptr')
- elif not node.value:
- self._output_file.write('false')
- else:
- self._output_file.write('true')
-
- def visit_Num(self, node):
- self.generic_visit(node)
- self._output_file.write(format_literal(node))
-
- def visit_Str(self, node):
- self.generic_visit(node)
- self._output_file.write(format_literal(node))
-
- def visit_UnOp(self, node):
- self.generic_visit(node)
-
- def _debug_enter(self, node, parent=None):
- message = '{}>generic_visit({})'.format(' ' * self ._debug_indent,
- debug_format_node(node))
- if parent:
- message += ', parent={}'.format(debug_format_node(parent))
- message += '\n'
- sys.stderr.write(message)
- self._debug_indent += 1
-
- def _debug_leave(self, node):
- self._debug_indent -= 1
- message = '{}<generic_visit({})\n'.format(' ' * self ._debug_indent,
- type(node).__name__)
- sys.stderr.write(message)