24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
26 * POSSIBILITY OF SUCH DAMAGE. |
26 * POSSIBILITY OF SUCH DAMAGE. |
27 */ |
27 */ |
28 |
28 |
29 #ifndef ACONF_H |
29 #ifndef CFG_CONF_H |
30 #define ACONF_H |
30 #define CFG_CONF_H |
31 |
31 |
32 #include <stdio.h> |
32 #include <stdio.h> |
33 #include <stdlib.h> |
33 #include <stdlib.h> |
34 |
34 |
35 #include "../ucx/list.h" |
35 #include "../ucx/list.h" |
53 #define LINE_END_TAG 3 |
53 #define LINE_END_TAG 3 |
54 #define LINE_MULTI 4 |
54 #define LINE_MULTI 4 |
55 #define LINE_NOCONTENT 5 // only comment or space |
55 #define LINE_NOCONTENT 5 // only comment or space |
56 #define LINE_ERROR 6 // parse error on this line |
56 #define LINE_ERROR 6 // parse error on this line |
57 |
57 |
|
58 // tag types |
|
59 #define TAG_OBJECT 0 |
|
60 #define TAG_IF 1 |
|
61 #define TAG_ELSEIF 2 |
|
62 #define TAG_ELSE 3 |
|
63 #define TAG_CLIENT 4 |
|
64 |
58 typedef struct _cfg_line { |
65 typedef struct _cfg_line { |
59 sstr_t line; // raw line string |
66 sstr_t line; // raw line string |
60 void *object; // pointer to data struct |
67 void *object; // pointer to data struct |
61 int type; // type, see line types |
68 int type; // type, see line types |
62 } ConfigLine; |
69 } ConfigLine; |
73 UcxDlist *lines; |
80 UcxDlist *lines; |
74 cfg_parse_f parse; |
81 cfg_parse_f parse; |
75 } ConfigParser; |
82 } ConfigParser; |
76 |
83 |
77 |
84 |
|
85 typedef struct _conf_tag ConfigTag; |
|
86 struct _conf_tag { |
|
87 ConfigLine *begin; |
|
88 ConfigLine *end; |
|
89 |
|
90 sstr_t name; |
|
91 UcxList *param; |
|
92 ConfigTag *parent; |
|
93 ConfigTag *iftag; // only used by <ElseIf> and <Else> |
|
94 int type_num; |
|
95 }; |
|
96 |
|
97 typedef struct _conf_directive { |
|
98 ConfigLine *begin; |
|
99 ConfigLine *end; |
|
100 |
|
101 sstr_t directive_type; |
|
102 UcxList *param; |
|
103 ConfigTag *condition; |
|
104 int type_num; |
|
105 } ConfigDirective; |
|
106 |
|
107 |
78 int cfg_parse_basic_file(ConfigParser *parser, FILE *in); |
108 int cfg_parse_basic_file(ConfigParser *parser, FILE *in); |
79 |
109 |
80 sstr_t cfg_readln(FILE *file); |
110 sstr_t cfg_readln(FILE *file); |
81 |
|
82 int cfg_get_basic_type(sstr_t line); |
|
83 |
111 |
84 sstr_t cfg_trim_comment(sstr_t line); |
112 sstr_t cfg_trim_comment(sstr_t line); |
85 |
113 |
86 sstr_t cfg_param(sstr_t params, sstr_t *name, sstr_t *value); |
114 sstr_t cfg_param(sstr_t params, sstr_t *name, sstr_t *value); |
87 |
115 |
88 sstr_t cfg_param_get(UcxList *list, sstr_t name); |
116 sstr_t cfg_param_get(UcxList *list, sstr_t name); |
89 |
117 |
|
118 ConfigDirective* cfg_parse_directive(sstr_t line, UcxMempool *mp); |
|
119 |
90 int cfg_get_directive_type_num(sstr_t type); |
120 int cfg_get_directive_type_num(sstr_t type); |
91 |
121 |
|
122 int cfg_get_basic_type(sstr_t line); |
|
123 |
|
124 int cfg_get_line_type(sstr_t line); |
|
125 |
|
126 int cfg_get_tag_type(sstr_t tag); |
|
127 |
|
128 sstr_t cfg_get_end_tag_name(sstr_t line); |
|
129 |
|
130 ConfigTag* cfg_parse_begin_tag(sstr_t line, UcxMempool *mp); |
92 |
131 |
93 #ifdef __cplusplus |
132 #ifdef __cplusplus |
94 } |
133 } |
95 #endif |
134 #endif |
96 |
135 |
97 #endif /* ACONF_H */ |
136 #endif /* CFG_CONF_H */ |
98 |
137 |