#!/usr/local/bin/python

import getopt, sys, cStringIO
#from FlScanner import FlScanner
#from FlParser import FlParser
#from FlPreProcessor import FlPreProcessor
#from FlParseTreeConverter import FlParseTreeConverter
#from util import *
#from FlParseTreeConverter import dumpAstTree
from flconvert import *



def doHelp():
	print """
Usage: flconvert [OPTION]... [FILE]

Converts FLTK Fluid data files to wrapper source code.


 -h, --help : print help
 -o file    : write output to <file>
 -s         : take input from standard input instead of file
 -y         : generate Python code (default)
 FILE       : Fluid data file to convert

"""
  	sys.exit(0)

def processFile( codeGenerator, inputFile, outputFile ):
	# req: inputFile, outputFile are already open
	
	tempFile = cStringIO.StringIO()
	preProcessor = FlPreProcessor()
	preProcessor.tokenize(inputFile.read(), tempFile)
	input = tempFile.getvalue()

	scanner = FlScanner()
	tokens = scanner.tokenize(input)

	parser = FlParser()
	parseTree =  parser.parse(tokens)

	ptc  = FlParseTreeConverter(parseTree)
	codeGenerator.write(ptc.getDefs(), outputFile)



###############################################	
optionlist, args = getopt.getopt( sys.argv[1:], "yso:h", "help")


# options
useStdIn = None
inputFile = sys.stdin
outputFile = sys.stdout
codeGenerator = None

for opt in optionlist:
	if opt[0]=="-y":
		codeGenerator = CodePy()
	if opt[0]=="-s":
		useStdIn = 1
	if opt[0]=="-o":
		outputFile = open(opt[1], "w")
	if opt[0] == "-h"or opt[0] == "--help" :
		doHelp()

if len(args)==0 and not useStdIn:
	doHelp()

if not useStdIn:
	inputFile = open(args[0])

if not codeGenerator:
	codeGenerator = CodePy()
	
processFile( codeGenerator, inputFile, outputFile)

	

