| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| #ifndef GUTHTHILA_H |
| #define GUTHTHILA_H |
| |
| #include <guththila_defines.h> |
| #include <guththila_token.h> |
| #include <guththila_reader.h> |
| #include <guththila_xml_writer.h> |
| #include <guththila_attribute.h> |
| #include <guththila_namespace.h> |
| #include <guththila_buffer.h> |
| #include <guththila_stack.h> |
| #include <guththila_error.h> |
| |
| #include <axutil_utils.h> |
| |
| /* |
| All the functions in this library does not check weather the given arguments are NULL. |
| It is the responsblity of the user to check weather the arguments contain NULL values. |
| */ |
| EXTERN_C_START() |
| |
| enum guththila_status |
| { |
| S_0 = 0, |
| S_1, |
| S_2, |
| S_3 |
| }; |
| |
| enum guththila_UTF16_endianess |
| { |
| None = 1, |
| LE, |
| BE |
| }; |
| |
| typedef enum guththila_type |
| { |
| type_file_name = 0, |
| type_memory_buffer, |
| type_reader, |
| type_io |
| } guththila_type_t; |
| |
| enum guththila_event_types |
| { |
| GUTHTHILA_START_DOCUMENT =0, |
| GUTHTHILA_END_ELEMENT, |
| GUTHTHILA_CHARACTER, |
| GUTHTHILA_ENTITY_REFERANCE, |
| GUTHTHILA_COMMENT, |
| GUTHTHILA_SPACE, |
| GUTHTHILA_START_ELEMENT, |
| GUTHTHILA_EMPTY_ELEMENT |
| }; |
| |
| typedef struct guththila_s |
| { |
| guththila_tok_list_t tokens; /* Token cache */ |
| |
| guththila_buffer_t buffer; /* Holding incoming xml string */ |
| |
| guththila_reader_t *reader; /* Reading the data */ |
| |
| guththila_token_t *prefix; /* Prefix of the xml element */ |
| |
| guththila_token_t *name; /* xml element local name */ |
| |
| guththila_token_t *value; /* text of a xml element */ |
| |
| guththila_stack_t elem; /* elements are put in a stack */ |
| |
| guththila_stack_t attrib; /* Attributes are put in a stack */ |
| |
| guththila_stack_t namesp; /* namespaces are put in a stack */ |
| |
| int status; |
| |
| int guththila_event; /* Current event */ |
| |
| size_t next; /* Keep track of the position in the xml string */ |
| |
| int last_start; /* Keep track of the starting position of the last token */ |
| |
| guththila_token_t *temp_prefix; /* Temporery location for prefixes */ |
| |
| guththila_token_t *temp_name; /* Temporery location for names */ |
| |
| guththila_token_t *temp_tok; /* We don't know this until we close it */ |
| } guththila_t; |
| |
| /* |
| * An element will contain one of these things if it has namespaces |
| * */ |
| typedef struct guththila_elem_namesp_s |
| { |
| guththila_namespace_t *namesp; /* Array of namespaces */ |
| int no; /*Number of namespace in the element */ |
| int size; /* Allocated size */ |
| } guththila_elem_namesp_t; |
| |
| /* |
| * Element. |
| */ |
| typedef struct guththila_element_s |
| { |
| guththila_token_t *name; /* local name */ |
| |
| guththila_token_t *prefix; /* prefix */ |
| |
| int is_namesp; /* Positive if a namespace is present */ |
| } guththila_element_t; |
| |
| /* Initialize the parser */ |
| GUTHTHILA_EXPORT int GUTHTHILA_CALL |
| guththila_init(guththila_t * m, void *reader, |
| const axutil_env_t * env); |
| |
| /* Uninitialize the parser */ |
| GUTHTHILA_EXPORT int GUTHTHILA_CALL |
| guththila_un_init(guththila_t * m, const axutil_env_t * env); |
| |
| /* Still not used */ |
| typedef void(GUTHTHILA_CALL * guththila_error_func)(void *arg, |
| const guththila_char_t *msg, |
| guththila_error_level level, |
| void *locator); |
| |
| /* |
| * Parse the xml and return an event. If something went wrong it will return -1. |
| * The events are of the type guththila_event_types. According to the event |
| * user can get the required information using the appriate functions. |
| * @param g pointer to a guththila_t structure |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT int GUTHTHILA_CALL |
| guththila_next(guththila_t * g, const axutil_env_t * env); |
| |
| /* |
| * Return the number of attributes in the current element. |
| * @param g pointer to a guththila_t structure |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT int GUTHTHILA_CALL |
| guththila_get_attribute_count(guththila_t * g, const axutil_env_t * env); |
| |
| /* |
| * Return the attribute name. |
| * @param g pointer to a guththila_t structure |
| * @param att pointer to a attribute |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT guththila_char_t * GUTHTHILA_CALL |
| guththila_get_attribute_name(guththila_t * g, guththila_attr_t * att, |
| const axutil_env_t * env); |
| |
| /* |
| * Return the attribute value. |
| * @param g pointer to a guththila_t structure |
| * @param att pointer to a attribute |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT guththila_char_t * GUTHTHILA_CALL |
| guththila_get_attribute_value(guththila_t * g, |
| guththila_attr_t * att, |
| const axutil_env_t * env); |
| |
| /* |
| * Return the attribute prefix. |
| * @param g pointer to a guththila_t structure |
| * @param att pointer to a attribute |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL |
| guththila_get_attribute_prefix(guththila_t * g, |
| guththila_attr_t * att, |
| const axutil_env_t * env); |
| |
| /* |
| * Return the attribute |
| * @param g pointer to a guththila_t structure |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT guththila_attr_t *GUTHTHILA_CALL |
| guththila_get_attribute(guththila_t * g, const axutil_env_t * env); |
| |
| /* |
| * Return the name of the attribute by the attribute bumber. |
| * First attribute will be 1. |
| * @param g pointer to a guththila_t structure |
| * @param index position of the attribute |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL |
| guththila_get_attribute_name_by_number(guththila_t * g, int index, |
| const axutil_env_t *env); |
| |
| /* |
| * Return the attribute value by number. |
| * First attribute will be 1. |
| * @param g pointer to a guththila_t structure |
| * @param index position of the attribute |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL |
| guththila_get_attribute_value_by_number(guththila_t * g, int index, |
| const axutil_env_t *env); |
| |
| /* |
| * Return the prefix of the attribute. |
| * First attribute will be 1. |
| * @param g pointer to a guththila_t structure |
| * @param index position of the attribute |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL |
| guththila_get_attribute_prefix_by_number(guththila_t * g, int index, |
| const axutil_env_t *env); |
| |
| /* |
| * Return the name of the element. |
| * @param g pointer to a guththila_t structure |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL |
| guththila_get_name(guththila_t * g, const axutil_env_t * env); |
| |
| /* |
| * Return the prefix of the element. |
| * @param g pointer to a guththila_t structure |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL |
| guththila_get_prefix(guththila_t * g, const axutil_env_t * env); |
| |
| /* |
| * Return the text of the element. |
| * @param g pointer to a guththila_t structure |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL |
| guththila_get_value(guththila_t * g, const axutil_env_t * env); |
| |
| /* |
| * Return the namespace of the element. |
| * @param g pointer to a guththila_t structure |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT guththila_namespace_t *GUTHTHILA_CALL |
| guththila_get_namespace(guththila_t * g, const axutil_env_t * env); |
| |
| /* |
| * Return the number of namespaces in the element. |
| * @param g pointer to a guththila_t structure |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT int GUTHTHILA_CALL |
| guththila_get_namespace_count(guththila_t * g, const axutil_env_t * env); |
| |
| /* |
| * Return the namespace uri of the given namespace. |
| * @param g pointer to a guththila_t structure |
| * @param ns pointer to a namespace |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT guththila_char_t * GUTHTHILA_CALL |
| guththila_get_namespace_uri(guththila_t * g, guththila_namespace_t * ns, |
| const axutil_env_t * env); |
| |
| /* |
| * Return the prefix of the namespace. |
| * @param g pointer to a guththila_t structure |
| * @param ns pointer to a namespace |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL |
| guththila_get_namespace_prefix(guththila_t * p, guththila_namespace_t * ns, |
| const axutil_env_t * env); |
| |
| /* |
| * Return the prefix of the namespace at the given position. |
| * First namespace will have the value 1. |
| * @param g pointer to a guththila_t structure |
| * @param index position of the namespace |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL |
| guththila_get_namespace_prefix_by_number(guththila_t * g, int index, |
| const axutil_env_t *env); |
| |
| /* |
| * Get the uri of the namespace at the given position. |
| * First namespace will have the value 1. |
| * @param g pointer to a guththila_t structure |
| * @param index position of the namespace |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL |
| guththila_get_namespace_uri_by_number(guththila_t * g, int index, |
| const axutil_env_t *env); |
| |
| /* |
| * Get the attribute namespace of the attribute at the given position. |
| * @param g pointer to a guththila_t structure |
| * @param index position of the namespace |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL |
| guththila_get_attribute_namespace_by_number(guththila_t *g, int index, |
| const axutil_env_t *env); |
| |
| /* |
| * Get the encoding. at the moment we don't support UNICODE |
| * @param g pointer to a guththila_t structure |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL |
| guththila_get_encoding(guththila_t * p, const axutil_env_t * env); |
| |
| /* |
| * To do. Implement a proper error handling mechanism. |
| * @param g pointer to a guththila_t structure |
| * @param env the environment |
| */ |
| GUTHTHILA_EXPORT void GUTHTHILA_CALL |
| guththila_set_error_handler(guththila_t * m, guththila_error_func, |
| const axutil_env_t * env); |
| |
| GUTHTHILA_EXPORT guththila_char_t *GUTHTHILA_CALL |
| guththila_get_current_buffer( |
| guththila_t * m, |
| const axutil_env_t * env); |
| |
| EXTERN_C_END() |
| #endif |
| |