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 Open given path-file and read data from it to member variables. * @param [in] path Path to project file. * @param [out] sError Error string if error happened. * @return TRUE if reading succeeded, FALSE if error happened. */ BOOL ProjectFile::Read(LPCTSTR path, String *sError) { BOOL loaded = FALSE; scew_tree* tree = NULL; scew_parser* parser = NULL; parser = scew_parser_create(); scew_parser_ignore_whitespaces(parser, 1); scew_reader *reader = NULL; FILE * fp = _tfopen(path, _T("r")); if (fp) { reader = scew_reader_fp_create(fp); if (reader) { tree = scew_parser_load (parser, reader); if (tree) { scew_element * root = GetRootElement(tree); if (root) { // Currently our content is paths, so expect // having paths in valid project file! if (GetPathsData(root)) loaded = TRUE; }; } } scew_tree_free(tree); scew_reader_free(reader); /* Frees the SCEW parser */ scew_parser_free(parser); fclose(fp); } return loaded; }
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; }