96 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| -- Generate binding code
 | |
| -- Written by Waldemar Celes
 | |
| -- TeCGraf/PUC-Rio
 | |
| -- Jul 1998
 | |
| -- Last update: Apr 2003
 | |
| -- $Id: doit.lua 1141 2006-05-18 23:58:45Z lindquist $
 | |
| 
 | |
| 
 | |
| -- This code is free software; you can redistribute it and/or modify it.
 | |
| -- The software provided hereunder is on an "as is" basis, and
 | |
| -- the author has no obligation to provide maintenance, support, updates,
 | |
| -- enhancements, or modifications.
 | |
| 
 | |
| function parse_extra()
 | |
| 
 | |
| 	for k,v in ipairs(_extra_parameters or {}) do
 | |
| 		
 | |
| 		local b,e,name,value = string.find(v, "^([^=])=(.*)$")
 | |
| 		if b then
 | |
| 			_extra_parameters[name] = value
 | |
| 		else
 | |
| 			_extra_parameters[v] = true
 | |
| 		end
 | |
| 	end
 | |
| end
 | |
| 
 | |
| function doit ()
 | |
| 	-- define package name, if not provided
 | |
| 	if not flags.n then
 | |
| 		if flags.f then
 | |
| 			flags.n = gsub(flags.f,"%..*$","")
 | |
| 			_,_,flags.n = string.find(flags.n, "([^/\\]*)$")
 | |
| 		else
 | |
| 			error("#no package name nor input file provided")
 | |
| 		end
 | |
| 	end
 | |
| 
 | |
| 	-- parse table with extra paramters
 | |
| 	parse_extra()
 | |
| 
 | |
| 	-- do this after setting the package name
 | |
| 	if flags['L'] then
 | |
| 		dofile(flags['L'])
 | |
| 	end
 | |
| 
 | |
| 	-- add cppstring
 | |
| 	if not flags['S'] then
 | |
| 		_basic['string'] = 'cppstring'
 | |
| 		_basic['std::string'] = 'cppstring'
 | |
| 		_basic_ctype.cppstring = 'const char*'
 | |
| 	end
 | |
| 
 | |
| 	-- proccess package
 | |
| 	local p  = Package(flags.n,flags.f)
 | |
| 
 | |
| 	if flags.p then
 | |
| 		return        -- only parse
 | |
| 	end
 | |
| 
 | |
| 	if flags.o then
 | |
| 		local st,msg = writeto(flags.o)
 | |
| 		if not st then
 | |
| 			error('#'..msg)
 | |
| 		end
 | |
| 	end
 | |
| 
 | |
| 	p:decltype()
 | |
| 	if flags.P then
 | |
| 		p:print()
 | |
| 	else
 | |
| 		p:preamble()
 | |
| 		p:supcode()
 | |
| 		p:register()
 | |
| 		push(p)
 | |
| 		post_output_hook(p)
 | |
| 		pop()
 | |
| 	end
 | |
| 
 | |
| 	if flags.o then
 | |
| 		writeto()
 | |
| 	end
 | |
| 
 | |
| 	-- write header file
 | |
| 	if not flags.P then
 | |
| 		if flags.H then
 | |
| 			local st,msg = writeto(flags.H)
 | |
| 			if not st then
 | |
| 				error('#'..msg)
 | |
| 			end
 | |
| 			p:header()
 | |
| 			writeto()
 | |
| 		end
 | |
| 	end
 | |
| end
 | |
| 
 |