#!/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)