diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a429c83 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.pyc +build/ +.idea/ +cpp2python.egg-info/ diff --git a/README.md b/README.md index 66e5127..a1eb00d 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,48 @@ # cpp2python -Script helps to convert C/C++ sources to C/C++ -like Python sources. -It does few simple edit operations, like removing semicolons and type declarations. After it you must edit code manually, but you'll spend less time to do it. +The script helps to convert C/C++ sources to C/C++ -like Python sources. -Utility **will** make mistaces and **will not** generate ready for use code, so, it won't help you, unless if you know either C/C++ and Python +It does some simple edit operations like removing semicolons and type declarations. +After it you must edit code manually, but you'll probably spend less time doing it. -For better result, it is recomented to format your code to ANSI style before doing conversion. +Example: +``` +if (a && b) --> if a and b: +{ --> object.method() + object->method(); --> +} --> +``` -**NO ANY BACKUPS ARE CREATED. YOU MAY PERMANENTLY CORRUPT YOR SOURCES** +The utility **will** make mistakes and **will not** generate ready for use code, +therefore it won't be useful for you unless you know both C/C++ and Python. -Usage: - - cpp2python.py DIR|FILE - cpp2python.py -v|--version|-h|--help +For better result, it is recommended to format your code to ANSI style +before performing conversion. -When directory name is given - tries to find source files by C/C++ suffixes, when file name is given - processes given file +``` +astyle --style=ansi your.cpp source.cpp files.cpp +``` -Author: Andrei Kopats -License: GPL +### Usage + + cpp2python.py DIR Find C/C++ files in the directory + by suffix and process. + cpp2python.py FILE Process the file + cpp2python.py -v|--version|-h|--help Display the help message + +After the processing new file is created. +File name is `{old file name with suffix}.py`. i.e. `main.cpp.py` + +### Installation +(Optional, the script can be used from the source tree) + + python3 setup.py install + + +### Author +Andrei Kopats + +setup.py and improvements by Stuart Axon + +### License +GPL diff --git a/cpp2python.py b/cpp2python.py index 9adc872..c98e98c 100755 --- a/cpp2python.py +++ b/cpp2python.py @@ -1,21 +1,33 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 -help = """Script helps to convert C/C++ sources to C/C++ -like Python sources. +help = """The script helps to convert C/C++ sources to C/C++ -like Python sources. -It does few simple edit operations, like removing semicolons and type declarations. After it you must edit code manually, but you'll spend less time to do it. +It does some simple edit operations like removing semicolons and type declarations. +After it you must edit code manually, but you'll probably spend less time doing it. +Example: -Utility Will make mistaces and Will not generate ready for use code, so, it won't help you, unless if you know either C/C++ and Python + if (a && b) --> if a and b: + { --> object.method() + object->method(); --> + } --> -For better result, it is recomented to format your code to ANSI style before doing conversion. +The utility **will** make mistakes and **will not** generate ready for use code, +therefore it won't be useful for you unless you know both C/C++ and Python. -NO ANY BACKUPS ARE CREATED. YOU MAY PERMANENTLY CORRUPT YOR SOURCES +For better result, it is recomented to format your code to ANSI style +before doing conversion. + + astyle --style=ansi your.cpp source.cpp files.cpp Usage: - cpp2python.py DIR|FILE - cpp2python.py -v|--version|-h|--help + cpp2python.py DIR Find C/C++ files in the directory + by suffix and process. + cpp2python.py FILE Process the file. + cpp2python.py -v|--version|-h|--help Display the help message. -When directory name is given - tries to find source files by C/C++ suffixes, when file name is given - processes given file +After the processing new file is created. +File name is {old file name with suffix}.py. i.e. main.cpp.py Author: Andrei Kopats License: GPL @@ -273,9 +285,9 @@ def process_file(in_filename, out_filename): """ generator - outputs processed file """ - with open(in_filename, 'r') as file: + with open(in_filename, 'r', encoding='utf-8') as file: lines = file.readlines() # probably would die on sources more than 100 000 lines :D - with open(out_filename, 'w+') as file: + with open(out_filename, 'w+', encoding='utf-8') as file: for line in lines: file.write(process_line(line)) @@ -285,23 +297,23 @@ def main(): '-h' in sys.argv or \ '--version' in sys.argv or \ '-v' in sys.argv: - print help + print(help) sys.exit(0) if len (sys.argv) != 2: - print >> sys.stderr, 'Invalid parameters count. Must be 1' - print help + print('Invalid parameters count. Must be 1', file=sys.stderr) + print(help) sys.exit(-1) if os.path.isdir(sys.argv[1]): for root, dirs, files in os.walk(sys.argv[1]): for file in files: - in_filename = root + '/' + file + in_filename = root + '/' + file if is_source(in_filename): out_filename = in_filename + '.py' # not ideal process_file(in_filename, out_filename) elif os.path.isfile(sys.argv[1]): process_file(sys.argv[1], sys.argv[1] + '.py') else: - print >> sys.stderr, 'Not a file or directory', sys.argv[1] + print('Not a file or directory', sys.argv[1], file=sys.stderr) sys.exit(-1) if __name__ == '__main__': diff --git a/setup.py b/setup.py index 5d7ff9c..42bb132 100644 --- a/setup.py +++ b/setup.py @@ -1,80 +1,11 @@ -import os -import subprocess -import sys -import pkg_resources - -import subprocess -import sys - -from glob import glob -from os.path import abspath, basename, dirname, join, normpath, relpath -from shutil import rmtree -from textwrap import dedent - from setuptools import setup -from setuptools import Command - -here = normpath(abspath(dirname(__file__))) - -class CleanCommand(Command): - """Custom clean command to tidy up the project root.""" - CLEAN_FILES = './build ./dist ./*.pyc ./*.tgz ./*.egg-info ./__pycache__'.split(' ') - - user_options = [] - - def initialize_options(self): - pass - def finalize_options(self): - pass - def run(self): - global here - - for path_spec in self.CLEAN_FILES: - # Make paths absolute and relative to this path - abs_paths = glob(normpath(join(here, path_spec))) - for path in [str(p) for p in abs_paths]: - if not path.startswith(here): - # Die if path in CLEAN_FILES is absolute + outside this directory - raise ValueError("%s is not a path inside %s" % (path, here)) - print('removing %s' % relpath(path)) - try: - rmtree(path) - except: - pass - -long_description=dedent(""" - cpp2python - - Script helps to convert C/C++ sources to C/C++ -like Python sources. - - It does few simple edit operations, like removing semicolons and type declarations. After it you must edit code manually, but you'll spend less time to do it. - - Utility will make mistaces and will not generate ready for use code, so, it won't help you, unless if you know either C/C++ and Python - - For better result, it is recomented to format your code to ANSI style before doing conversion. - - NO ANY BACKUPS ARE CREATED. YOU MAY PERMANENTLY CORRUPT YOR SOURCES - - Usage: - - cpp2python.py DIR|FILE - cpp2python.py -v|--version|-h|--help - - When directory name is given - tries to find source files by C/C++ suffixes, when file name is given - processes given file - - Author: Andrei Kopats hlamer@tut.by License: GPL -""") +import cpp2python setup( - cmdclass={ - 'clean': CleanCommand, - }, - name='cpp2python', - version='0.1.0', - + version='0.2.0', description='Helps to convert C/C++ sources to C/C++ -like Python sources.', - long_description=long_description, + long_description=cpp2python.help, url='https://github.com/hlamer/cpp2python', author='Andrei Kopats', author_email='hlamer@tut.by', @@ -99,9 +30,5 @@ def run(self): ], keywords='cpp python', - entry_points = { - 'console_scripts': [ - 'cpp2python = cpp2python:main' - ] - }, + scripts=['cpp2python.py'] )