END_TEST /* Miscellaneous */ START_TEST (test_misc) { enum { MAX_BUFFER_SIZE = 512 }; XML_Char buffer[MAX_BUFFER_SIZE] = _XT(""); scew_writer *writer = scew_writer_buffer_create (buffer, MAX_BUFFER_SIZE); CHECK_PTR (writer, "Unable to create buffer writer"); CHECK_BOOL (scew_writer_end (writer), SCEW_FALSE, "Writer should be at the beginning"); CHECK_BOOL (scew_writer_error (writer), SCEW_FALSE, "Writer should have no error (nothing done yet)"); /* Close writer */ scew_writer_close (writer); CHECK_BOOL (scew_writer_end (writer), SCEW_TRUE, "Writer is closed, thus at the end"); scew_writer_free (writer); }
END_TEST /* Write */ START_TEST (test_write) { enum { MAX_BUFFER_SIZE = 512 }; static XML_Char const *BUFFER = _XT("This is a buffer for the reader"); XML_Char write_buffer[MAX_BUFFER_SIZE] = _XT(""); scew_writer *writer = scew_writer_buffer_create (write_buffer, scew_strlen (BUFFER) + 1); CHECK_PTR (writer, "Unable to create buffer writer"); unsigned int i = 0; while (i < scew_strlen (BUFFER)) { CHECK_U_INT (scew_writer_write (writer, BUFFER + i, 1), 1, "Invalid number of written bytes"); i += 1; } CHECK_STR (write_buffer, BUFFER, "Buffers do not match"); CHECK_BOOL (scew_writer_end (writer), SCEW_FALSE, "Writer buffer is bigger than read buffer (no end yet)"); scew_writer_free (writer); /* Try to writer full buffer */ writer = scew_writer_buffer_create (write_buffer, scew_strlen (BUFFER) + 1); scew_writer_write (writer, write_buffer, scew_strlen (BUFFER) + 1); CHECK_STR (write_buffer, BUFFER, "Buffers do not match"); CHECK_BOOL (scew_writer_end (writer), SCEW_FALSE, "Writer buffer is bigger than read buffer (no end yet)"); scew_writer_free (writer); }
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; }
/** * @brief Save data from member variables to path-file. * @param [in] path Path to project file. * @param [out] sError Error string if error happened. * @return TRUE if saving succeeded, FALSE if error happened. */ BOOL ProjectFile::Save(LPCTSTR path, String *sError) { BOOL success = TRUE; scew_tree* tree = NULL; scew_element* root = NULL; scew_element* paths = NULL; tree = scew_tree_create(); root = scew_tree_set_root(tree, Root_element_name); if (root != NULL) { paths = AddPathsElement(root); } else success = FALSE; if (paths != NULL) { AddPathsContent(paths); } else success = FALSE; scew_tree_set_xml_encoding(tree, "UTF-8"); scew_writer *writer = NULL; scew_printer *printer = NULL; FILE * fp = _tfopen(path, _T("w")); if (fp) { writer = scew_writer_fp_create(fp); if (writer) { printer = scew_printer_create(writer); if (!scew_printer_print_tree(printer, tree) || !scew_printf(_XT("\n"))) { success = FALSE; *sError = LoadResString(IDS_FILEWRITE_ERROR); } } else { success = FALSE; *sError = LoadResString(IDS_FILEWRITE_ERROR); } fclose(fp); } else { success = FALSE; } /* Frees the SCEW tree */ scew_tree_free(tree); scew_writer_free(writer); scew_printer_free(printer); if (success == FALSE) { *sError = LoadResString(IDS_FILEWRITE_ERROR); } return success; }