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