diff options
Diffstat (limited to 'gr-utils/python/modtool/tools/util_functions.py')
-rw-r--r-- | gr-utils/python/modtool/tools/util_functions.py | 167 |
1 files changed, 0 insertions, 167 deletions
diff --git a/gr-utils/python/modtool/tools/util_functions.py b/gr-utils/python/modtool/tools/util_functions.py deleted file mode 100644 index d7f2b11317..0000000000 --- a/gr-utils/python/modtool/tools/util_functions.py +++ /dev/null @@ -1,167 +0,0 @@ -# -# Copyright 2013, 2018, 2019 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# SPDX-License-Identifier: GPL-3.0-or-later -# -# -""" Utility functions for gr_modtool """ - -from __future__ import print_function -from __future__ import absolute_import -from __future__ import unicode_literals - -import re -import sys -import readline - -# None of these must depend on other modtool stuff! - -def append_re_line_sequence(filename, linepattern, newline): - """ Detects the re 'linepattern' in the file. After its last occurrence, - paste 'newline'. If the pattern does not exist, append the new line - to the file. Then, write. """ - with open(filename, 'r') as f: - oldfile = f.read() - lines = re.findall(linepattern, oldfile, flags=re.MULTILINE) - if len(lines) == 0: - with open(filename, 'a') as f: - f.write(newline) - return - last_line = lines[-1] - newfile = oldfile.replace(last_line, last_line + newline + '\n') - with open(filename, 'w') as f: - f.write(newfile) - -def remove_pattern_from_file(filename, pattern): - """ Remove all occurrences of a given pattern from a file. """ - with open(filename, 'r') as f: - oldfile = f.read() - pattern = re.compile(pattern, re.MULTILINE) - with open(filename, 'w') as f: - f.write(pattern.sub('', oldfile)) - -def str_to_fancyc_comment(text): - """ Return a string as a C formatted comment. """ - l_lines = text.splitlines() - if len(l_lines[0]) == 0: - outstr = "/*\n" - else: - outstr = "/* " + l_lines[0] + "\n" - for line in l_lines[1:]: - if len(line) == 0: - outstr += " *\n" - else: - outstr += " * " + line + "\n" - outstr += " */\n" - return outstr - -def str_to_python_comment(text): - """ Return a string as a Python formatted comment. """ - l_lines = text.splitlines() - if len(l_lines[0]) == 0: - outstr = "#\n" - else: - outstr = "# " + l_lines[0] + "\n" - for line in l_lines[1:]: - if len(line) == 0: - outstr += "#\n" - else: - outstr += "# " + line + "\n" - outstr += "#\n" - return outstr - -def strip_default_values(string): - """ Strip default values from a C++ argument list. """ - return re.sub(' *=[^,)]*', '', string) - -def strip_arg_types(string): - """" - Strip the argument types from a list of arguments. - Example: "int arg1, double arg2" -> "arg1, arg2" - Note that some types have qualifiers, which also are part of - the type, e.g. "const std::string &name" -> "name", or - "const char *str" -> "str". - """ - string = strip_default_values(string) - return ", ".join( - [part.strip().split(' ')[-1] for part in string.split(',')] - ).replace('*','').replace('&','') - -def strip_arg_types_grc(string): - """" Strip the argument types from a list of arguments for GRC make tag. - Example: "int arg1, double arg2" -> "$arg1, $arg2" """ - if len(string) == 0: - return "" - else: - string = strip_default_values(string) - return ", ".join(['${' + part.strip().split(' ')[-1] + '}' for part in string.split(',')]) - -def get_modname(): - """ Grep the current module's name from gnuradio.project or CMakeLists.txt """ - modname_trans = {'howto-write-a-block': 'howto'} - try: - with open('gnuradio.project', 'r') as f: - prfile = f.read() - regexp = r'projectname\s*=\s*([a-zA-Z0-9-_]+)$' - return re.search(regexp, prfile, flags=re.MULTILINE).group(1).strip() - except IOError: - pass - # OK, there's no gnuradio.project. So, we need to guess. - with open('CMakeLists.txt', 'r') as f: - cmfile = f.read() - regexp = r'(project\s*\(\s*|GR_REGISTER_COMPONENT\(")gr-(?P<modname>[a-zA-Z0-9-_]+)(\s*(CXX)?|" ENABLE)' - try: - modname = re.search(regexp, cmfile, flags=re.MULTILINE).group('modname').strip() - if modname in list(modname_trans.keys()): - modname = modname_trans[modname] - return modname - except AttributeError: - return None - -def is_number(s): - """ Return True if the string s contains a number. """ - try: - float(s) - return True - except ValueError: - return False - -def ask_yes_no(question, default): - """ Asks a binary question. Returns True for yes, False for no. - default is given as a boolean. """ - question += {True: ' [Y/n] ', False: ' [y/N] '}[default] - if input(question).lower() != {True: 'n', False: 'y'}[default]: - return default - else: - return not default - -class SequenceCompleter(object): - """ A simple completer function wrapper to be used with readline, e.g. - option_iterable = ("search", "seek", "destroy") - readline.set_completer(SequenceCompleter(option_iterable).completefunc) - - Typical usage is with the `with` statement. Restores the previous completer - at exit, thus nestable. - """ - - def __init__(self, sequence=None): - self._seq = sequence or [] - self._tmp_matches = [] - - def completefunc(self, text, state): - if not text and state < len(self._seq): - return self._seq[state] - if not state: - self._tmp_matches = [candidate for candidate in self._seq if candidate.startswith(text)] - if state < len(self._tmp_matches): - return self._tmp_matches[state] - - def __enter__(self): - self._old_completer = readline.get_completer() - readline.set_completer(self.completefunc) - readline.parse_and_bind("tab: complete") - - def __exit__(self, exception_type, exception_value, traceback): - readline.set_completer(self._old_completer) |