コード例 #1
0
ファイル: sdew.c プロジェクト: naadsm/sdew
/*******************************************************************************
 *  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 );
   }
}
コード例 #2
0
ファイル: mapeditor.c プロジェクト: andreasg/gunsmoke
/* 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);
}
コード例 #3
0
ファイル: mapeditor.c プロジェクト: andreasg/gunsmoke
/* 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);
    }
}
コード例 #4
0
ファイル: sdew.c プロジェクト: naadsm/sdew
/*******************************************************************************
 *  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;
}
コード例 #5
0
ファイル: atlas.c プロジェクト: cpence/arcus
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;
}
コード例 #6
0
ファイル: ProjectFile.cpp プロジェクト: seanedwards/COS-420
/** 
 * @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;
}
コード例 #7
0
ファイル: scew_print.c プロジェクト: aconchillo/scew
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;
}