17db96d56Sopenharmony_ci#! /usr/bin/env python3 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ci"Replace tabs with spaces in argument files. Print names of changed files." 47db96d56Sopenharmony_ci 57db96d56Sopenharmony_ciimport os 67db96d56Sopenharmony_ciimport sys 77db96d56Sopenharmony_ciimport getopt 87db96d56Sopenharmony_ciimport tokenize 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_cidef main(): 117db96d56Sopenharmony_ci tabsize = 8 127db96d56Sopenharmony_ci try: 137db96d56Sopenharmony_ci opts, args = getopt.getopt(sys.argv[1:], "t:") 147db96d56Sopenharmony_ci if not args: 157db96d56Sopenharmony_ci raise getopt.error("At least one file argument required") 167db96d56Sopenharmony_ci except getopt.error as msg: 177db96d56Sopenharmony_ci print(msg) 187db96d56Sopenharmony_ci print("usage:", sys.argv[0], "[-t tabwidth] file ...") 197db96d56Sopenharmony_ci return 207db96d56Sopenharmony_ci for optname, optvalue in opts: 217db96d56Sopenharmony_ci if optname == '-t': 227db96d56Sopenharmony_ci tabsize = int(optvalue) 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_ci for filename in args: 257db96d56Sopenharmony_ci process(filename, tabsize) 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_ci 287db96d56Sopenharmony_cidef process(filename, tabsize, verbose=True): 297db96d56Sopenharmony_ci try: 307db96d56Sopenharmony_ci with tokenize.open(filename) as f: 317db96d56Sopenharmony_ci text = f.read() 327db96d56Sopenharmony_ci encoding = f.encoding 337db96d56Sopenharmony_ci except IOError as msg: 347db96d56Sopenharmony_ci print("%r: I/O error: %s" % (filename, msg)) 357db96d56Sopenharmony_ci return 367db96d56Sopenharmony_ci newtext = text.expandtabs(tabsize) 377db96d56Sopenharmony_ci if newtext == text: 387db96d56Sopenharmony_ci return 397db96d56Sopenharmony_ci backup = filename + "~" 407db96d56Sopenharmony_ci try: 417db96d56Sopenharmony_ci os.unlink(backup) 427db96d56Sopenharmony_ci except OSError: 437db96d56Sopenharmony_ci pass 447db96d56Sopenharmony_ci try: 457db96d56Sopenharmony_ci os.rename(filename, backup) 467db96d56Sopenharmony_ci except OSError: 477db96d56Sopenharmony_ci pass 487db96d56Sopenharmony_ci with open(filename, "w", encoding=encoding) as f: 497db96d56Sopenharmony_ci f.write(newtext) 507db96d56Sopenharmony_ci if verbose: 517db96d56Sopenharmony_ci print(filename) 527db96d56Sopenharmony_ci 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ciif __name__ == '__main__': 557db96d56Sopenharmony_ci main() 56