Esempio n. 1
0
static void
print_element (scew_element *element, unsigned int indent)
{
  XML_Char const *contents = NULL;
  scew_list *list = NULL;

  if (element == NULL)
    {
      return;
    }

  /* Prints the starting element tag with its attributes. */
  print_indent (indent);
  scew_printf (_XT("<%s"), scew_element_name (element));
  print_attributes (element);
  scew_printf (_XT(">"));

  contents = scew_element_contents (element);

  if (contents == NULL)
    {
      scew_printf (_XT("\n"));
    }

  /**
   * Call print_element function again for each child of the current
   * element.
   */
  list = scew_element_children (element);
  while (list != NULL)
    {
      scew_element *child = scew_list_data (list);
      print_element (child, indent + 1);
      list = scew_list_next (list);
    }

  /* Prints element's content. */
  if (contents != NULL)
    {
      scew_printf (_XT("%s"), contents);
    }
  else
    {
      print_indent (indent);
    }

  /* Prints the closing element tag. */
  scew_printf (_XT("</%s>\n"), scew_element_name (element));
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
/* set the preamble of current xml tree*/
void	expat_tree::set_preamble( XML_String const	preamble)
{
    if( preamble == _XT(""))
        return;

    m_preamble =  preamble;
}
Esempio n. 4
0
/* set the encoding of current xml tree*/
void
expat_tree::set_encoding( XML_String const pencoding)
{
    if( pencoding == _XT(""))
        return;

    m_encoding =  pencoding;
}
Esempio n. 5
0
void
expat_tree::set_version( XML_String const pvsersion)
{
    if( pvsersion == _XT(""))
        return;

    m_version = pvsersion;
}
Esempio n. 6
0
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);
}
Esempio n. 7
0
void
attribute_print(scew_attribute const* attribute, FILE* out)
{
    if (attribute == NULL)
    {
        return;
    }

    scew_fprintf(out, _XT(" %s=\"%s\""), attribute->name, attribute->value);
}
Esempio n. 8
0
void
indent_print(FILE* out, unsigned int indent)
{
    unsigned int i = 0;

    for (i = 0; i < indent * indent_size; i++)
    {
        scew_fprintf(out, _XT(" "));
    }
}
Esempio n. 9
0
static void
print_indent (unsigned int indent)
{
  /* Indentation size (in whitespaces). */
  static unsigned int const INDENT_SIZE = 4;

  if (indent > 0)
    {
      scew_printf (_XT("%*s"), indent * INDENT_SIZE, " ");
    }
}
Esempio n. 10
0
expat_element*	expat_tree::add_root( XML_String const	name)
{
    if( name == _XT(""))
        return NULL;

    expat_element* root = new expat_element();
    m_root = root;

    root->set_element_name( name);

    return m_root;
}
Esempio n. 11
0
void
scew_strtrim (XML_Char *src)
{
    size_t start = 0;
    size_t end = 0;
    size_t total = 0;

    assert (src != NULL);

    end = scew_strlen (src);

    /* Strip trailing whitespace. */
    while ((end > 0) && scew_isspace (src[end - 1]))
    {
        src[--end] = _XT('\0');
    }

    /* Strip leading whitespace. */
    start = scew_strspn (src, _XT(" \n\r\t\v"));
    total = end - start;
    scew_memmove (src, &src[start], total);
    src[total] = _XT('\0');
}
Esempio n. 12
0
void
element_print(scew_element const* element, FILE* out, unsigned int indent)
{
    unsigned int closed = 0;
    XML_Char const* contents;
    scew_element* child = NULL;
    scew_attribute* attribute = NULL;

    if (element == NULL)
    {
        return;
    }

    indent_print(out, indent);
    scew_fprintf(out, _XT("<%s"), scew_element_name(element));
    attribute = NULL;
    while ((attribute = scew_attribute_next(element, attribute)) != NULL)
    {
        attribute_print(attribute, out);
    }

    contents = scew_element_contents(element);
    if ((contents == NULL) && (element->child == NULL)
        && (element->parent != NULL))
    {
		scew_fprintf(out, _XT("/>\n"));
        closed = 1;
    }
    else
    {
        scew_fprintf(out, _XT(">"));
        if (contents == NULL)
        {
            scew_fprintf(out, _XT("\n"));
        }
    }

    child = NULL;
    while ((child = scew_element_next(element, child)) != NULL)
    {
        element_print(child, out, indent + 1);
    }

    if (contents != NULL)
    {
        scew_fprintf(out, _XT("%s"), contents);
    }
    else if (!closed)
    {
        indent_print(out, indent);
    }

    if (!closed)
    {
        scew_fprintf(out, _XT("</%s>\n"), scew_element_name(element));
    }
}
Esempio n. 13
0
scew_bool
scew_isempty (XML_Char const *src)
{
    scew_bool empty = SCEW_TRUE;
    XML_Char *p = (XML_Char *) src;

    assert (src != NULL);

    while (empty && (*p != _XT('\0')))
    {
        empty = (scew_isspace (*p) != 0);
        p += 1;
    }

    return empty;
}
Esempio n. 14
0
size_t
file_read_ (scew_reader *reader, XML_Char *buffer, size_t char_no)
{
    size_t read_no = 0;
    scew_reader_fp *fp_reader = NULL;

    assert (reader != NULL);
    assert (buffer != NULL);

    fp_reader = scew_reader_data (reader);

    read_no = fread (buffer, sizeof (XML_Char), char_no, fp_reader->file);

    buffer[read_no] = _XT('\0');

    return read_no;
}
Esempio n. 15
0
static void
print_attributes (scew_element *element)
{
  if (element != NULL)
    {
      /**
       * Iterates through the element's attribute list, printing the
       * pair name-value.
       */
      scew_list *list = scew_element_attributes (element);
      while (list != NULL)
        {
          scew_attribute *attribute = scew_list_data (list);
          scew_printf (_XT(" %s=\"%s\""),
                       scew_attribute_name (attribute),
                       scew_attribute_value (attribute));
          list = scew_list_next (list);
        }
    }
}
Esempio n. 16
0
void
tree_print(scew_tree const* tree, FILE* out)
{
    static XML_Char const* version = _XT("1.0");
#ifdef XML_UNICODE_WCHAR_T
    static XML_Char const* encoding = _XT("UTF-16");
#else
    static XML_Char const* encoding = _XT("UTF-8");
#endif /* XML_UNICODE_WCHAR_T */

    scew_fprintf(
        out,
        _XT("<?xml version=\"%s\" encoding=\"%s\" standalone=\"%s\"?>\n\n"),
        (tree->version == NULL ? version : tree->version),
        (tree->encoding == NULL ? encoding : tree->encoding),
        (tree->standalone > 0 ? _XT("yes") : _XT("no")));

    element_print(tree->root, out, 0);
}
Esempio n. 17
0
void
scew_parser_ignore_whitespaces (scew_parser *parser, scew_bool ignore)
{
  assert (parser != NULL);

  parser->ignore_whitespaces = ignore;
}


/* Private */

scew_parser*
parser_create_ (scew_bool namespace, XML_Char separator)
{
#ifdef XML_UNICODE_WCHAR_T
  static XML_Char *encoding = _XT("UTF-16");
#else
  static XML_Char *encoding = NULL;
#endif /* XML_UNICODE_WCHAR_T */
  scew_parser *parser = calloc (1, sizeof (scew_parser));

  if (NULL == parser)
    {
      scew_error_set_last_error_ (scew_error_no_memory);
      return NULL;
    }

  /* Create Expat parser. */
  parser->parser = namespace
    ? XML_ParserCreateNS (encoding, separator)
    : XML_ParserCreate (encoding);
Esempio n. 18
0
expat_tree::expat_tree(void)
{
    m_encoding = _XT("utf-8");
    m_version = _XT("2.0");
    m_root = NULL;
}
Esempio n. 19
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;
}
Esempio n. 20
0
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;
}
Esempio n. 21
0
XML_Char*
scew_strescape (XML_Char const *src)
{
    XML_Char *p = (XML_Char *) src;
    XML_Char *escaped = NULL;
    unsigned int len = 0;

    assert (src != NULL);

    /* We first need to calculate the size of the new escaped string. */
    while (*p != _XT('\0'))
    {
        switch (*p)
        {
        case CHR_LT_:
            len += LT_SIZE_;
            break;
        case CHR_GT_:
            len += GT_SIZE_;
            break;
        case CHR_AMP_:
            len += AMP_SIZE_;
            break;
        case CHR_APOS_:
            len += APOS_SIZE_;
            break;
        case CHR_QUOT_:
            len += QUOT_SIZE_;
            break;
        default:
            len += 1;
            break;
        }
        p += 1;
    }

    /* Allocate new string (if necessary). */
    escaped = calloc (len + 1, sizeof (XML_Char));

    /* Append characters to new string, escaping the needed ones. */
    p = (XML_Char *) src;
    len = 0;
    while (*p != _XT('\0'))
    {
        switch (*p)
        {
        case CHR_LT_:
            scew_memcpy (&escaped[len], XML_LT_, LT_SIZE_);
            len += LT_SIZE_;
            break;
        case CHR_GT_:
            scew_memcpy (&escaped[len], XML_GT_, GT_SIZE_);
            len += GT_SIZE_;
            break;
        case CHR_AMP_:
            scew_memcpy (&escaped[len], XML_AMP_, AMP_SIZE_);
            len += AMP_SIZE_;
            break;
        case CHR_APOS_:
            scew_memcpy (&escaped[len], XML_APOS_, APOS_SIZE_);
            len += APOS_SIZE_;
            break;
        case CHR_QUOT_:
            scew_memcpy (&escaped[len], XML_QUOT_, QUOT_SIZE_);
            len += QUOT_SIZE_;
            break;
        default:
            escaped[len] = *p;
            len += 1;
            break;
        }
        p += 1;
    }

    return escaped;
}