/******************************************************************************* * TestParser * * This is a test function to verify that the library is properly opening and * reading xml files. ******************************************************************************/ DLLIMPORT void TestParser( char *Filename ) { scew_parser *parser; scew_element *params; int elementCount = 0; int i; char Buffer[1024]; parser = scew_parser_create (); if (parser != NULL) { scew_parser_load_file (parser, Filename); params = scew_tree_root (scew_parser_tree (parser)); elementCount = scew_element_count (params); sprintf(Buffer, "Root has %u children\n", elementCount); MessageBox( 0, Buffer, "Debugging", MB_ICONINFORMATION ); for (i = 0; i < elementCount; i++) { scew_element *newParams = scew_element_by_index (params, i); sprintf(Buffer, "This child has %u subchildren\n", scew_element_count( newParams )); MessageBox( 0, Buffer, "Debugging", MB_ICONINFORMATION ); sprintf(Buffer, "Child %i name='%s'\n", i, scew_element_name (scew_element_by_index (params, i))); MessageBox( 0, Buffer, "Debugging", MB_ICONINFORMATION ); } scew_parser_free( parser ); } }
/* load_sprite: load all the sprites in SPRITE_INDEX and their graphics */ void load_sprites(void) { size_t i, y; char bmpname[NAME_LN]; scew_tree *t = NULL; scew_parser *p = NULL; scew_element *e = NULL; scew_element *r = NULL; SPRITE *s = NULL; /* setup the parser */ p = scew_parser_create(); scew_parser_ignore_whitespaces(p, 1); if (!scew_parser_load_file(p, SPRITE_INDEX)) { printf("%s\n", scew_error_expat_string(scew_error_code())); return; } t = scew_parser_tree(p); r = scew_tree_root(t); s = create_sprite(); /* read all the sprites from SPRITE_INDEX */ /* parse the SPRITE_INDEX file and outline the list with their names */ e = scew_element_next(r, e); while (e) { strncpy(s->long_name, (char *) scew_element_name(e), LONG_NAME_LN); s->x = s->y = 0; sprite_list = append_sprite_list(s, sprite_list, &sprite_list_sz); e = scew_element_next(r, e); } /* load all their graphics and the sprite data */ gfx_list = complete_sprite_list(sprite_list, sprite_list_sz, gfx_list, &gfx_list_sz); /* create a list_element for each of them and put them in a list */ y = SPRITE_WIN.y; for (i = 0; i < sprite_list_sz; i++) { sprintf(bmpname, "%s0", sprite_list[i].name); spr_elem_lst = add_list_element(rec(SPRITE_WIN.x, y, LIST_ELEM_W, LIST_ELEM_H), 0, DEFAULT_COLOR, SEL_COLOR, sprite_list[i].name, search_gfx_list(bmpname, gfx_list, gfx_list_sz), spr_elem_lst, &spr_elem_lst_sz); y += LIST_ELEM_H; } /* cleanup */ scew_element_free(r); destroy_sprite(s); scew_element_free(e); scew_parser_free(p); }
/* get_grid_item: updates the grid_item with fresh data */ void get_grid_item(void) { int x, y; scew_attribute *a = NULL; scew_element *e = NULL; scew_element *sub_e = NULL; scew_element *r = NULL; POINT p; if (!maptree) return; p = get_mouse_pos(); x = p.x - (p.x % TILE_W); y = p.y - (p.y % TILE_H) + map_offset; r = scew_tree_root(maptree); if (mode == TILE_MODE) { e = scew_element_by_name(r, "Tiles"); } else if (mode == SPRITE_MODE) { e = scew_element_by_name(r, "Sprites"); } else return; sub_e = scew_element_next(e, sub_e); while (sub_e) { a = scew_attribute_by_name(sub_e, "x"); if (x == atoi(scew_attribute_value(a))) { a = scew_attribute_by_name(sub_e, "y"); if (y == atoi(scew_attribute_value(a))) { grid_item.x = x; grid_item.y = y; grid_item.mode = mode; a = scew_attribute_by_name(sub_e, "name"); strncpy(grid_item.name, scew_attribute_value(a), NAME_LN); if (mode == TILE_MODE) { a = scew_attribute_by_name(sub_e, "passable"); grid_item.passable = atoi(scew_attribute_value(a)); } else { grid_item.passable = -1; } break; } } sub_e = scew_element_next(e, sub_e); } }
/******************************************************************************* * Function: Tree_RootScew * * This function returns a pointer to the root * tree of the parser passed as the parameter * _parser. * * Parameters: * _parser: void * which represents a pointer to a scew_parser. This * pointer must have been created previously using the function * Create_Load_Scew_Parser() . * * Returns: * void *, representing a pointer to a scew_element. On error, a NULL * pointer value is returned. * ******************************************************************************/ DLLIMPORT void *Tree_Root_Scew(void *_parser) { void *ret_val = NULL; if ( _parser != NULL ) { scew_tree *temp = scew_parser_tree((scew_parser *)_parser); if ( temp != NULL ) ret_val = (void *)scew_tree_root ( temp ); }; return ret_val; }
arcus_atlas *atlas_from_file(const char *filename) { scew_reader *reader; scew_parser *parser; scew_tree *tree; arcus_atlas *ret; reader = scew_reader_file_create(filename); if (!reader) { set_error_string("atlas_from_file: cannot open/read file"); return NULL; } parser = scew_parser_create(); if (!parser) { set_error_string("atlas_from_file: cannot create a parser (scew bug?)"); scew_reader_close(reader); scew_reader_free(reader); return NULL; } tree = scew_parser_load(parser, reader); if (!tree) { set_error_string("atlas_from_file: cannot create tree from parser and reader (invalid XML?)"); scew_parser_free(parser); scew_reader_close(reader); scew_reader_free(reader); return NULL; } ret = atlas_from_xml(scew_tree_root(tree)); scew_tree_free(tree); scew_parser_free(parser); scew_reader_close(reader); scew_reader_free(reader); return ret; }
/** * @brief Return project file XML's root element. * @param [in] tree XML tree we got from the parser. * @return Root element pointer. */ scew_element* ProjectFile::GetRootElement(scew_tree * tree) { scew_element * root = NULL; if (tree != NULL) { root = scew_tree_root(tree); } if (root != NULL) { // Make sure we have correct root element if (strcmp(Root_element_name, scew_element_name(root)) != 0) { root = NULL; } } return root; }
int main (int argc, char *argv[]) { scew_reader *reader = NULL; scew_parser *parser = NULL; scew_tree *tree = NULL; scew_writer *writer = NULL; scew_printer *printer = NULL; #if defined(_MSC_VER) && defined(XML_UNICODE_WCHAR_T) /* Change stdout to Unicode before writing anything. */ _setmode(_fileno(stdout), _O_U16TEXT); #endif /* _MSC_VER && XML_UNICODE_WCHAR_T */ if (argc < 2) { scew_printf (_XT("Usage: scew_print file.xml\n")); return EXIT_FAILURE; } /* Creates an SCEW parser. This is the first function to call. */ parser = scew_parser_create (); scew_parser_ignore_whitespaces (parser, SCEW_TRUE); /* Loads an XML file. */ reader = scew_reader_file_create (argv[1]); if (reader == NULL) { scew_error code = scew_error_code (); scew_printf (_XT("Unable to load file (error #%d: %s)\n"), code, scew_error_string (code)); return EXIT_FAILURE; } tree = scew_parser_load (parser, reader); if (tree == NULL) { scew_error code = scew_error_code (); scew_printf (_XT("Unable to parse file (error #%d: %s)\n"), code, scew_error_string (code)); if (code == scew_error_expat) { enum XML_Error expat_code = scew_error_expat_code (parser); scew_printf (_XT("Expat error #%d (line %d, column %d): %s\n"), expat_code, scew_error_expat_line (parser), scew_error_expat_column (parser), scew_error_expat_string (expat_code)); } /* Frees the SCEW parser and reader. */ scew_reader_free (reader); scew_parser_free (parser); return EXIT_FAILURE; } /* Prints full tree. */ scew_printf (_XT("\n*** Manual print:\n\n")); print_element (scew_tree_root (tree), 0); /* Prints full tree using SCEW writer. */ scew_printf (_XT("\n\n*** SCEW writer (stdout) print:\n\n")); writer = scew_writer_fp_create (stdout); printer = scew_printer_create (writer); scew_printer_print_tree (printer, tree); scew_printf (_XT("\n")); /* Remember to free tree (scew_parser_free does not free it). */ scew_tree_free (tree); /* Also free the printer and writer. */ scew_writer_free (writer); scew_printer_free (printer); /* Frees the SCEW parser and reader. */ scew_reader_free (reader); scew_parser_free (parser); return 0; }