46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| 
 | |
| function extract_code(fn,s)
 | |
| 	local code = ""
 | |
| 	if fn then
 | |
| 		code = '\n$#include "'..fn..'"\n'
 | |
| 	end
 | |
| 	s= "\n" .. s .. "\n" -- add blank lines as sentinels
 | |
| 	local _,e,c,t = strfind(s, "\n([^\n]-)SCRIPT_([%w_]*)[^\n]*\n")
 | |
| 	while e do
 | |
| 		t = strlower(t)
 | |
| 		if t == "bind_begin" then
 | |
| 			_,e,c = strfind(s,"(.-)\n[^\n]*SCRIPT_BIND_END[^\n]*\n",e)
 | |
| 			if not e then
 | |
| 			 tolua_error("Unbalanced 'SCRIPT_BIND_BEGIN' directive in header file")
 | |
| 			end
 | |
| 		end
 | |
| 		if t == "bind_class" or t == "bind_block" then
 | |
| 			local b
 | |
| 			_,e,c,b = string.find(s, "([^{]-)(%b{})", e)
 | |
| 			c = c..'{\n'..extract_code(nil, b)..'\n};\n'
 | |
| 		end
 | |
| 		code = code .. c .. "\n"
 | |
| 	 _,e,c,t = strfind(s, "\n([^\n]-)SCRIPT_([%w_]*)[^\n]*\n",e)
 | |
| 	end
 | |
| 	return code
 | |
| end
 | |
| 
 | |
| function preprocess_hook(p)
 | |
| end
 | |
| 
 | |
| function preparse_hook(p)
 | |
| end
 | |
| 
 | |
| function include_file_hook(p, filename)
 | |
| 	do return end
 | |
| --print("FILENAME is "..filename)
 | |
| 	p.code = string.gsub(p.code, "\n%s*SigC::Signal", "\n\ttolua_readonly SigC::Signal")
 | |
| 	p.code = string.gsub(p.code, "#ifdef __cplusplus\nextern \"C\" {\n#endif", "")
 | |
| 	p.code = string.gsub(p.code, "#ifdef __cplusplus\n};?\n#endif", "")
 | |
| 	p.code = string.gsub(p.code, "DECLSPEC", "")
 | |
| 	p.code = string.gsub(p.code, "SDLCALL", "")
 | |
| 	p.code = string.gsub(p.code, "DLLINTERFACE", "")
 | |
| 	p.code = string.gsub(p.code, "#define[^\n]*_[hH]_?%s*\n", "\n")
 | |
| --print("code is "..p.code)
 | |
| end
 |