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 d10c291..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 @@ -269,34 +281,40 @@ def process_line(line): return line -def process_file(filename): - with open(filename, 'rw+') as file: +def process_file(in_filename, out_filename): + """ + generator - outputs processed 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 - file.seek(0) - file.truncate(0) + with open(out_filename, 'w+', encoding='utf-8') as file: for line in lines: file.write(process_line(line)) -if __name__ == '__main__': +def main(): if '--help' in sys.argv or \ '-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: - filename = root + '/' + file - if is_source(filename): - process_file(filename) + 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]) + 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__': + main() diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..42bb132 --- /dev/null +++ b/setup.py @@ -0,0 +1,34 @@ +from setuptools import setup +import cpp2python + +setup( + name='cpp2python', + version='0.2.0', + description='Helps to convert C/C++ sources to C/C++ -like Python sources.', + long_description=cpp2python.help, + url='https://github.com/hlamer/cpp2python', + author='Andrei Kopats', + author_email='hlamer@tut.by', + license='GPL', + # See https://pypi.python.org/pypi?%3Aaction=list_classifiers + classifiers=[ + # How mature is this project? Common values are + # 3 - Alpha + # 4 - Beta + # 5 - Production/Stable + 'Development Status :: 3 - Alpha', + + # Indicate who your project is intended for + 'Intended Audience :: Developers', + 'Topic :: Software Development', + + # Pick your license as you wish (should match "license" above) + 'License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)', + + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3.4', + ], + keywords='cpp python', + + scripts=['cpp2python.py'] +)