Created basic CMake files.
[xuni.git] / src / resource / resource.h
blobd1136254fd961f6b3684a99424ff9c4fb4707b6b
1 /*! \file resource.h
3 */
5 #ifndef XUNI_GUARD_RESOURCE_H
6 #define XUNI_GUARD_RESOURCE_H
8 #include <stdio.h> /* for BUFSIZ */
9 #include <stdarg.h>
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
15 enum {
16 RESOURCE_BUFFER_SIZE = BUFSIZ
19 enum resource_data_type_t {
20 RESOURCE_TEXT,
21 RESOURCE_TAG,
22 RESOURCE_REF,
23 RESOURCES
26 struct resource_text_t {
27 char *data;
30 struct resource_tag_t {
31 char *name;
32 struct resource_list_t *list;
35 struct resource_ref_t {
36 char *name;
37 struct resource_data_t *ref;
40 struct resource_data_t {
41 struct resource_data_t *base;
42 enum resource_data_type_t type;
44 union {
45 struct resource_text_t *text;
46 struct resource_tag_t *tag;
47 struct resource_ref_t *ref;
48 } data;
51 struct resource_list_t {
52 struct resource_data_t **data;
53 size_t n;
56 struct resource_t {
57 struct resource_data_t *data;
60 typedef void (*search_resource_func_t)(void *vdata,
61 struct resource_data_t *data);
63 /* Public functions. */
65 void init_resource(struct resource_t *resource);
66 void write_resource(struct resource_data_t *resource, const char *filename);
67 void update_resource(struct resource_t *resource, const char *filename);
68 int parse_resource(struct resource_data_t *resource, const char *filename);
69 int parse_resource_filename(struct resource_data_t *resource,
70 const char *filename);
71 struct resource_list_t *first_resource_tag(struct resource_list_t *list,
72 const char *name);
73 char *first_resource_text(struct resource_list_t *list);
74 char **first_resource_text_address(struct resource_list_t *list);
75 char *find_resource_text(struct resource_list_t *list, const char *data);
76 const char *lookup_resource_string(struct resource_t *resource,
77 const char *def, ...);
78 double lookup_resource_number(struct resource_t *resource, double def, ...);
79 struct resource_list_t *lookup_resource_tag(struct resource_t *resource,
80 struct resource_list_t *def, ...);
81 void search_resource_tag(struct resource_data_t *list, const char *data,
82 int recursive, search_resource_func_t search_resource_func, void *vdata);
83 void free_resource(struct resource_t *resource);
85 /* Resource functions. */
87 struct resource_list_t *new_resource_list(void);
88 struct resource_data_t *new_resource_data(
89 enum resource_data_type_t type, struct resource_data_t *base);
90 struct resource_data_t *create_element(struct resource_data_t *base,
91 const char *name);
92 struct resource_list_t *append_resource_list(
93 struct resource_list_t *list, struct resource_data_t *data);
95 void make_paths_relative_to_xuni(struct resource_data_t *data, char **path);
97 const char *lookup_resource_va(struct resource_t *resource,
98 va_list arg);
100 void free_resource_data(struct resource_data_t *data);
101 void free_resource_list(struct resource_list_t *list);
103 #ifdef __cplusplus
105 #endif
107 #include "../config.h"
109 #ifdef HAVE_LIBEXPAT
110 #define RESOURCE_LIBRARY_EXPAT
111 #include "libexpat.h"
112 #include "xmlwrite.h"
113 #elif defined(HAVE_LIBMXML)
114 #define RESOURCE_LIBRARY_MXML
115 #include "libmxml.h"
116 #else
117 #error "No resource parsing library specified"
118 #endif
120 #endif