#!/usr/bin/python import os import sys width = 3 def usage(exit_code): sys.stderr.write('Usage: %s --width width filename1 filename2 ... filename3\n' % sys.argv[0]) sys.exit(exit_code) def process(input_filename, input_file, output_file): error_found = False for lineno, line in enumerate(input_file): initial_blank_count = 0 non_initial_blank_chars = [] nonblank_seen = False for character in line: if character == ' ' and not nonblank_seen: initial_blank_count += 1 else: nonblank_seen = True non_initial_blank_chars.append(character) if initial_blank_count % width == 0: tabs = (initial_blank_count / width) * '\t' non_initial_blank_str = ''.join(non_initial_blank_chars) output_file.write('%s%s' % (tabs, non_initial_blank_str)) else: sys.stderr.write('Non-integral number of initial blanks in file %s at line %d\n' % (input_filename, lineno + 1)) error_found = True if error_found: sys.stderr.write('One or more errors found in file %s; exiting early\n' % input_filename) sys.exit(1) while sys.argv[1:] and sys.argv[1].startswith('--'): if sys.argv[1] == '--': # end of options del sys.argv[1] break elif sys.argv[1] == '--width': width = int(sys.argv[2]) del sys.argv[1] elif sys.argv[1] in [ '--help', '-h' ]: usage(0) else: sys.stderr.write('%s: Illegal option: %s\n' % (sys.argv[0], sys.argv[1])) usage(1) del sys.argv[1] if not sys.argv[1:]: process('standard input (stdin)', sys.stdin, sys.stdout) else: for input_filename in sys.argv[1:]: output_filename = '%s.stt-temp' % input_filename # apparently python 2.6.6 doesn't support a comma'd with yet, so we use two with open(input_filename, 'r') as input_file: with open(output_filename, 'w') as output_file: process(input_filename, input_file, output_file) os.rename(output_filename, input_filename)