Example #1
0
static int make_parser(lua_State* L)
{
	P("make parser");
	lxp* lxpp;
	STACK_DUMP();

	
/*
	lua_getfield(L, -1, "startElement");

	STACK_DUMP();
	lua_pop(L, 1);
	*/

	lxpp = (lxp*) lua_newuserdata(L, sizeof(lxp));
	STACK_DUMP();
	lxpp->parser = NULL;

	luaL_getmetatable(L, METATABLE);
	STACK_DUMP();
	lua_setmetatable(L, -2);

	lxpp->parser = XML_ParserCreate(NULL);

	STACK_DUMP();

	lua_pushvalue(L, 1);
	lua_setuservalue(L, -2);

	XML_SetUserData(lxpp->parser, lxpp);
	XML_SetElementHandler(lxpp->parser, start_element, end_element);
	XML_SetCharacterDataHandler(lxpp->parser, chardata);
	P("make parser done");
	return 1;
}
Example #2
0
static void start_element(void* ud, const char* name, const char** atts)
{
	P("start element %s", name);

	lxp* lxpp = (lxp*) ud;
	lua_State* L = lxpp->L;

	STACK_DUMP();

	lua_getuservalue(L, 1);
	lua_pushvalue(L, -1);
	iterate_table(L, 4);
	STACK_DUMP();
	//lua_getfield(L, -1, "startElement");
	lua_pushstring(L, "startElement");
	STACK_DUMP();
	lua_gettable(L, -2);

	lua_pushvalue(L, 1);
	lua_pushstring(L, name);
	lua_newtable(L);

	for(;*atts;atts+=2)
	{
		lua_pushstring(L, *(atts+1));
		lua_setfield(L, -2, *atts);
	}

	STACK_DUMP();

	lua_pcall(L, 3, 0, 0);
	STACK_DUMP();
	P("start element done");
}
Example #3
0
static void chardata(void* ud, const char* s, int len)
{
	P("chardata %s", s);

	lxp* lxpp = (lxp*) ud;
	lua_State* L = lxpp->L;

	STACK_DUMP();

	lua_pushvalue(L, 1);
	lua_pushlstring(L, s, len);
	lua_pcall(L, 2, 0, 0);
	STACK_DUMP();
	
	P("chardata done");
}
Example #4
0
static void end_element(void* ud, const char* name)
{
	P("end element %s", name);
	lxp* lxpp = (lxp*) ud;
	lua_State* L = lxpp->L;

	lua_getuservalue(L, 1);
	lua_getfield(L, -1, "endElement");

	STACK_DUMP();

	lua_pushvalue(L, 1);
	lua_pushstring(L, name);
	lua_pcall(L, 2, 0, 0);
	STACK_DUMP();

	P("end element done");
}
Example #5
0
void TreeHarnessTest ( enum TreeType treetype ) {
	int push_code = 0 ; 
	int nodeID = 0 ;

	for ( i = 0; i< LEAVES; i++ ) {
		thisTree = rootTree = PTRTREE_NODE_CREATE ( ) ;
		sret = sprintf ( ST_BUFFER, "\'%d (root)\'" , nodeID ) ;
		PTRTREE_SET ( rootTree, NULL , NULL, NULL, nodeID++, ST_BUFFER ) ; 
						if ( DEBUG ) {
					printf ( "\n**New tree for i=%d is: %p \n" , i , rootTree) ;
					PTRTREE_DUMP ( rootTree ) ; 
					} ;
		for ( j = 0; j <= i; j++ ) {	
			// build trees of depth j to put in ith slot
			sret = sprintf ( ST_BUFFER, "\'%d,%d\'" , 
				PTRTREE_NODE_ID ( rootTree ) , 
				nodeID
				) ;
			switch ( treetype ) {
				case WIDETREE : { 
						if ( DEBUG ) { printf ( "in WideTree\n" ) ; }
					PTRTREE_NODE_ADD_THISTREE ( rootTree , nodeID++ , ST_BUFFER ) ;
						if ( DEBUG ) { PTRTREE_DUMP ( rootTree ) ; } ; 
					break ; 
					}
				case LONGTREE : { 
						if ( DEBUG ) { printf ( "in LONGTREE\n" ) ; }
					PTRTREE_NODE_ADD_THISTREE ( thisTree , nodeID++ , ST_BUFFER ) ;
					PTRTREE_NODE_ADD_THISTREE ( thisTree , nodeID++ , ST_BUFFER ) ;
					thisTree = thisTree -> _PTRTREE_NODE_CHILD ; 
						if ( DEBUG ) { PTRTREE_DUMP ( rootTree ) ; } ; 
					break ;
					}
				case FULLTREE : { 
						if ( DEBUG ) { printf ( "in FULLTREE\n" ) ; }
					int k = 0;
					for ( k=0 ; k<=j ; k++ ) {	
						PTRTREE_NODE_ADD_THISTREE ( thisTree , nodeID++ , ST_BUFFER ) ;	
						}
					thisTree = thisTree -> _PTRTREE_NODE_CHILD ; 
					if ( DEBUG ) { PTRTREE_DUMP ( rootTree ) ; } ; 
					break ; 
					}
				}  // end of switch
			} ; // inner, j loop
					if ( DEBUG ) { STACK_DUMP ( &randomForest ) ; }
			push_code = STACK_PUSH ( &randomForest , rootTree ) ; 		
			if ( push_code ) {
				printf ( "\nERROR STACK_PUSH failed (%d)\n" , MaxErrCode ) ;
				exit ( MaxErrCode ) ;  
				} ; 
		} ; // outer, i loop
	} ; // end of tree harness
Example #6
0
static int parse(lua_State* L)
{
	P("parsing ...");
	STACK_DUMP();

	lxp* lxpp = (lxp*)luaL_checkudata(L, 1, METATABLE);

	size_t len;
	const char* s = luaL_optlstring(L, 2, NULL, &len);

	//set up env for callback
	//

	lxpp->L = L;

	int status = XML_Parse(lxpp->parser, s, len, s == NULL);
	lua_pushboolean(L, status);

	STACK_DUMP();
	P("parse done");
	return 1;
}
Example #7
0
/*
 * main() - 
 *
 * The entry point to the program.
 *
 */
int main(int argc, char *argv[]) {
  	// set maximum array size
	LEAVES = (argc <= 1 ? 10 : atoi( argv[1] ) ) ;
  	MAX = (argc <= 1 ? 10 : 2 * LEAVES );

	printf ("\n**** beginning pointer tests ** \n" ) ; 
	enum TreeType treetype = 0 ;
	for ( treetype = 0 ; treetype < TTNUM ; treetype++ ) { 
		printf ( "** testing treetype %s\n" , TTLabel[treetype] ) ;
		MaxErrCode = STACK_INIT ( &randomForest , MAX ) ;
		if ( MaxErrCode ) {
		MaxErrCode = 99 ; 
		printf ( "ERROR Forest could not be initialized (%d)\n", MaxErrCode ) ;
		exit ( MaxErrCode ) ; 
		} ;
					if ( DEBUG ) { STACK_DUMP ( &randomForest ) ; }
		TreeHarnessTest ( treetype ) ; 
		STACK_DUMP ( &randomForest ) ; 
		}

	printf ("**** beginning STACK tests ** \n" ) ; 
	// *randomForrest is now a stack of full trees
	int retCode = 0 ; 
	TYPE_PTRTREE LeftTree, RightTree = NULL; 	

	printf ( "** beginning POP test ** \n" ) ; 
					if ( DEBUG ) { 
						STACK_DUMP ( &randomForest ) ;
						}
	LeftTree = STACK_POP ( &randomForest ) ; 
	STACK_DUMP ( &randomForest ) ; 
					if ( DEBUG ) {
						STACK_DUMP ( &randomForest ) ;
						printf ( "..after STACK_POP, STACK_DUMP returns %p\n" , LeftTree ) ; 
						}

	printf ("** beginning PUSH test ** \n" ) ; 
					if ( DEBUG ) { 
						STACK_DUMP ( &randomForest ) ;
						}
	retCode = STACK_PUSH ( &randomForest, LeftTree ) ; 
	STACK_DUMP ( &randomForest ) ; 
					if ( DEBUG ) {
						STACK_DUMP ( &randomForest ) ;
						printf ( "..after STACK_PUSH returns %d\n" , retCode ) ; 
						}

	printf ("** beginning LIFT test ** \n" ) ;
					if ( DEBUG ) { 
						STACK_DUMP ( &randomForest ) ;
						}
	retCode = STACK_LIFT ( &randomForest ) ; 
	STACK_DUMP ( &randomForest ) ; 
					if ( DEBUG ) {
						STACK_DUMP ( &randomForest ) ;
						printf ( "..after STACK_LIFT returns %d\n" , retCode ) ; 
						}

	printf ("** beginning SWAP test ** \n" ) ; 
					if ( DEBUG ) { 
						STACK_DUMP ( &randomForest ) ;
						}
	retCode = STACK_SWAP ( &randomForest , 
		STACK_TOP_IS ( &randomForest ) , 
		STACK_BOTTOM_IS ( &randomForest ) 
		) ;
					if ( DEBUG ) {
						STACK_DUMP ( &randomForest ) ;
						printf ( 
							"..after STACK_SWAP ( %u, %u ) returning %d\n" , 
							STACK_TOP_IS ( &randomForest ) , 
							STACK_BOTTOM_IS ( &randomForest ) ,
							retCode 
							) ; 
						}

	}  // main()